diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index f09e2dd..981de4b 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
     "constraint, update this by running tools/generate_package_config.dart."
   ],
   "configVersion": 2,
-  "generated": "2021-10-03T09:32:39.517171",
+  "generated": "2021-10-26T10:20:01.277340",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -208,7 +208,7 @@
       "name": "dart2js_info",
       "rootUri": "../pkg/dart2js_info",
       "packageUri": "lib/",
-      "languageVersion": "2.3"
+      "languageVersion": "2.11"
     },
     {
       "name": "dart2js_runtime_metrics",
@@ -220,7 +220,7 @@
       "name": "dart2js_tools",
       "rootUri": "../pkg/dart2js_tools",
       "packageUri": "lib/",
-      "languageVersion": "2.3"
+      "languageVersion": "2.12"
     },
     {
       "name": "dart2native",
@@ -470,7 +470,7 @@
       "name": "native_stack_traces",
       "rootUri": "../pkg/native_stack_traces",
       "packageUri": "lib/",
-      "languageVersion": "2.12"
+      "languageVersion": "2.14"
     },
     {
       "name": "nnbd_migration",
@@ -515,7 +515,7 @@
     {
       "name": "package_deps",
       "rootUri": "../tools/package_deps",
-      "languageVersion": "2.8"
+      "languageVersion": "2.12"
     },
     {
       "name": "path",
@@ -566,12 +566,6 @@
       "languageVersion": "2.12"
     },
     {
-      "name": "resource",
-      "rootUri": "../third_party/pkg/resource",
-      "packageUri": "lib/",
-      "languageVersion": "2.0"
-    },
-    {
       "name": "scrape",
       "rootUri": "../pkg/scrape",
       "packageUri": "lib/",
@@ -629,7 +623,7 @@
       "name": "source_maps",
       "rootUri": "../third_party/pkg/source_maps",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "source_span",
diff --git a/.packages b/.packages
index b24526d..568fa66 100644
--- a/.packages
+++ b/.packages
@@ -82,7 +82,6 @@
 protobuf:third_party/pkg/protobuf/protobuf/lib
 pub:third_party/pkg/pub/lib
 pub_semver:third_party/pkg/pub_semver/lib
-resource:third_party/pkg/resource/lib
 sdk_library_metadata:sdk/lib/_internal/sdk_library_metadata/lib
 shelf:third_party/pkg/shelf/lib
 shelf_packages_handler:third_party/pkg/shelf_packages_handler/lib
diff --git a/BUILD.gn b/BUILD.gn
index dc70380..ad09ed8 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -100,10 +100,6 @@
   deps = [ "utils/dartdevc" ]
 }
 
-group("dartfmt") {
-  deps = [ "utils/dartfmt" ]
-}
-
 group("analysis_server") {
   deps = [ "utils/analysis_server" ]
 }
@@ -128,8 +124,8 @@
 }
 
 if (is_fuchsia) {
-  import("third_party/fuchsia/sdk/linux/build/component.gni")
-  import("third_party/fuchsia/sdk/linux/build/package.gni")
+  import("third_party/fuchsia/sdk/${host_os}/build/component.gni")
+  import("third_party/fuchsia/sdk/${host_os}/build/package.gni")
 
   template("dart_fuchsia_test_package") {
     fuchsia_package(target_name) {
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e467d97..03de374 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -134,8 +134,7 @@
   greater (if using a beta preview release, an sdk constraint of
   `>=2.15.0-0` must be used).
 
-- **[Explicit generic method instantiations][Explicit instantiation]**: **BETA
-    PREVIEW**
+- **[Explicit generic method instantiations][Explicit instantiation]**: **BETA PREVIEW**
 
   Previous Dart versions allowed generic methods to be implicitly specialized
   (or "instantiated") to non-generic versions when assigned to a location with a
@@ -197,6 +196,65 @@
   [Explicit instantiation]:
         https://github.com/dart-lang/language/blob/master/accepted/future-releases/constructor-tearoffs/feature-specification.md#explicitly-instantiated-classes-and-functions
 
+- **[Generic instantiation of function objects][Object instantiation]**: **BETA PREVIEW**
+
+  Generic function instantiation was previously restricted to function
+  declarations. For example, as soon as a function had already been torn
+  off, it could not be instantiated:
+
+  ```dart
+  X id<X>(X x) => x;
+
+  void main() {
+    var fo = id; // Tear off `id`, creating a function object.
+    var c1 = fo<int>; // Compile-time error: can't instantiate `fo`.
+    int Function(int) c2 = fo; // Same compile-time error.
+    // Constants are treated the same.
+  }
+  ```
+
+  New in Dart 2.15, this restriction has been lifted, and it is now possible
+  to obtain a generic instantiation of an existing function object, both
+  explicitly and implicitly (again, this works the same for non-constants):
+
+  ```dart
+  X id<X>(X x) => x;
+  X other<X>(X x) => throw x;
+
+  void main() {
+    const fo = id; // Tear off `id`, creating a function object.
+
+    // Generic function instantiation on `fo` is no longer an error.
+    const c1 = fo<int>; // OK.
+    const int Function(int) c2 = fo; // OK.
+
+    // This also generalizes function instantiation because we can,
+    // e.g., use non-trivial expressions and go via a constructor.
+    const c3 = A(true); // OK.
+  }
+
+  class A {
+    final int Function(int) x;
+    // `(...)<T>` is now allowed, also in a `const` constructor.
+    const A(bool b): x = (b ? id : other)<int>;
+  }
+  ```
+
+  The new generic instantation of objects feature is currently in **BETA
+  PREVIEW**. The feature is enabled in beta releases only, and is still subject
+  to breaking changes. It is not fully supported by all tools and there may be
+  known issues with the tool support. Feedback on the feature is welcome, but it
+  is not recommended that production code use the feature until it has been
+  released in a stable version.
+
+  Generic instantiation of objects is only available as part of the 2.15
+  [language version](https://dart.dev/guides/language/evolution). To use this
+  feature, you must set the lower bound on the sdk constraint for your package
+  to 2.15 or greater (if using a beta preview release, an sdk constraint of
+  `>=2.15.0-0` must be used).
+
+[Object instantiation]: https://github.com/dart-lang/language/pull/1812
+
 - Annotations on type parameters of classes can no longer refer to class members
   without a prefix.  For example, this used to be permitted:
 
@@ -226,7 +284,7 @@
     if (!iIsNull) {
       print(i + 1); // OK, because `i` is known to be non-null
     }
-  }<>
+  }
   ```
 
   Previously, the above program had a compile-time error because type promotion
@@ -266,6 +324,73 @@
   instance variable, and it brings the implementation behavior in line with
   the specification in all other cases.
 
+- **Function object canonicalization and equality**
+
+  Several corner cases in the area of function object canonicalization and
+  function object equality have been updated, such that all tools behave in
+  the same way, and the behavior matches the specification.
+
+  In particular, function objects are now equal when they are obtained by
+  generic instantiation from the same function with the same actual type
+  arguments, even when that type argument is not known at compile time.
+  When the expressions are constant then said function objects are identical.
+  Constant expressions are treated as such even when they do not occur in a
+  constant context (e.g., `var f = top;`). Here are the main cases where the
+  behavior has been adjusted:
+
+  ```dart
+  void top() {}
+  X? genericTop<X>() => null;
+
+  class A {
+    static void stat() {}
+    static X? genericStat<X>() => null;
+    void inst() {}
+    X? genericInst<X>() => null;
+  }
+
+  const int? Function() cIntTop1 = genericTop;
+  const int? Function() cIntStat1 = A.genericStat;
+
+  int? Function() vIntTop1 = genericTop;
+  int? Function() vIntStat1 = A.genericStat;
+  int? Function() vIntTop2 = genericTop;
+  int? Function() vIntStat2 = A.genericStat;
+
+  String? Function() vStringTop = genericTop;
+  String? Function() vStringStat = A.genericStat;
+
+  void main() {
+    var a = A();
+    int? Function() vIntInst1 = a.genericInst;
+    int? Function() vIntInst2 = a.genericInst;
+
+    // All true (used to be false).
+    identical(cIntTop1, vIntTop2);
+    identical(cIntStat1, vIntStat2);
+    identical(vIntTop1, vIntTop2);
+    identical(vIntStat1, vIntStat2);
+    vIntInst1 == vIntInst2;
+
+    <X>() {
+      X? Function() vXTop1 = genericTop;
+      X? Function() vXStat1 = A.genericStat;
+      X? Function() vXTop2 = genericTop;
+      X? Function() vXStat2 = A.genericStat;
+      X? Function() vXInst1 = a.genericInst;
+      X? Function() vXInst2 = a.genericInst;
+
+      // All true (used to be false).
+      vXTop1 == vXTop2;
+      vXStat1 == vXStat2;
+      vXInst1 == vXInst2;
+      vXTop1 == vIntTop1;
+      vXStat1 == vIntStat1;
+      vXInst1 == vIntInst2;
+    }<int>();
+  }
+  ```
+
 ### Core libraries
 
 #### `dart:async`
@@ -280,13 +405,46 @@
 - When a script is `dart run` it will always be precompiled, but with
   incremental precompilation for following runs.
 
-### `dart:core`
+#### `dart:core`
 
 - Add extension `name` getter on enum values.
 - Add `Enum.compareByIndex` helper function for comparing enum values by index.
 - Add `Enum.compareByName` helper function for comparing enum values by name.
 - Add extension methods on `Iterable<T extends Enum>`, intended for
   `SomeEnumType.values` lists, to look up values by name.
+- Deprecate `IntegerDivisionByZeroException`.
+  Makes the class also implement `Error`. Code throwing the exception will be
+  migrated to throwing an `Error` instead until the class is unused and
+  ready to be removed.
+  Code catching the class should move to catching `Error` instead
+  (or, for integers, check first for whether it's dividing by zero).
+
+#### `dart:io`
+
+- **Breaking Change** [#46875](https://github.com/dart-lang/sdk/issues/46875):
+  The `SecurityContext` class in `dart:io` has been updated to set the minimum
+  TLS protocol version to TLS1_2_VERSION (1.2) instead of TLS1_VERSION.
+- Add `RawSocket.sendMessage`, `RawSocket.receiveMessage` that allow passing of
+  file handle references via Unix domain sockets.
+
+#### `dart:js_util`
+
+- The `js_util` methods `getProperty`, `setProperty`, `callMethod`,
+  `callConstructor`, and `newObject` now support a generic type argument
+  to specify the return type.
+
+#### `dart:web_sql`
+
+- **Breaking Change** [#46316](https://github.com/dart-lang/sdk/issues/46316):
+  The WebSQL standard was abandoned more than 10
+  years ago and is not supported by many browsers. This release completely
+  deletes the `dart:web_sql` library.
+
+#### `dart:html`
+
+- **Breaking Change** [#46316](https://github.com/dart-lang/sdk/issues/46316):
+  Related to the removal of `dart:web_sql` (see above), the
+  `window.openDatabase` has been removed as well.
 
 ### Tools
 
@@ -297,6 +455,12 @@
   `dart compile exe` and `dart compile aot-snapshot` commands, which offer the
   same functionality.
 
+- **Breaking Change**: The standalone `dartfmt` tool has been removed as
+  previously announced. Its replacement is the `dart format` command.
+
+  Note that `dart format` has [a different set of options and
+  defaults][dartfmt cli] than `dartfmt`.
+
 #### Dart VM
 
 - **Breaking Change** [#45451](https://github.com/dart-lang/sdk/issues/45451):
@@ -330,7 +494,14 @@
 
 #### Linter
 
-Updated the Linter to `1.12.0`, which includes changes that
+Updated the Linter to `1.14.0`, which includes changes that
+- fix `omit_local_variable_types` to not flag a local type that is
+  required for inference.
+- allow `while (true) { ... }` in `literal_only_boolean_expressions`.
+- fix `file_names` to report at the start of the file (not the entire
+  compilation unit).
+- fix `prefer_collection_literals` named typed parameter false positives.
+- improve control flow analysis for `use_build_context_synchronously`.
 - update `avoid_print` to allow `kDebugMode`-wrapped print calls.
 - fix handling of initializing formals in `prefer_final_parameters`.
 - fix `unnecessary_parenthesis` false positive with function expressions.
@@ -367,7 +538,11 @@
 
 ### Pub
 
-- Adds support for token-based authorization to third party package-repositories
+- If you have analytics enabled `dart pub get` will send
+  [usage metrics](https://github.com/dart-lang/pub/blob/0035a40f25d027130c0314571da53ffafc6d973b/lib/src/solver/result.dart#L131-L175)
+  for packages from pub.dev, intended for popularity analysis.
+
+- Adds support for token-based authorization to third-party package-repositories
   with the new command `dart pub token`.
 - Credentials are no longer stored in the pub-cache, but in a platform dependent
   config directory:
@@ -375,6 +550,35 @@
     is defined, otherwise `$HOME/.config/dart/pub-credentials.json`
   * On Mac OS: `$HOME/Library/Application Support/dart/pub-credentials.json`
   * On Windows: `%APPDATA%/dart/pub-credentials.json`
+- The syntax for dependencies hosted at a third-party package repository has
+  been simplified. Before you would need to write:
+
+```
+dependencies:
+  colorizer:
+    hosted:
+      name: colorizer
+      url: 'https://custom-pub-server.com'
+    version: ^1.2.3
+environment:
+  sdk: '>=2.14.0 < 3.0.0'
+```
+
+Now you can write:
+
+```
+dependencies:
+  colorizer:
+    hosted: 'https://custom-pub-server.com'
+    version: ^1.2.3
+environment:
+  sdk: '>=2.15.0 < 3.0.0'
+```
+
+This feature requires
+[language-version](https://dart.dev/guides/language/evolution#language-versioning)
+2.15 or later, e.g. the `pubspec.yaml` should have an SDK constraint of
+`>=2.15 <3.0.0`.
 
 - Detect potential leaks in `dart pub publish`.
   When publishing, pub will examine your files for potential secret keys, and
@@ -388,12 +592,25 @@
   `dart pub get/upgrade/downgrade/add/remove` that will result in the `example/`
   folder dependencies to be updated after operating in the current directory.
 
+## 2.14.4 - 2021-10-14
+
+This is a patch release that fixes:
+
+- a memory leak of analyzer plugins (issue [flutter/flutter#90868][]).
+- the Dart VM sometimes loading expired certificates on Windows (issues
+  [#46370][] and [#47420][]).
+
+[flutter/flutter#90868]: https://github.com/flutter/flutter/issues/90868
+[#46370]: https://github.com/dart-lang/sdk/issues/46370
+[#47420]: https://github.com/dart-lang/sdk/issues/47420
+
 ## 2.14.3 - 2021-09-30
 
 This is a patch release that fixes:
 
-- a code completion performance regression [flutter/flutter-intellij#5761][].
-- debug information emitted by the Dart VM [#47289][].
+- a code completion performance regression (issue
+  [flutter/flutter-intellij#5761][]).
+- debug information emitted by the Dart VM (issue [#47289][]).
 
 [flutter/flutter-intellij#5761]:
   https://github.com/flutter/flutter-intellij/issues/5761
@@ -494,6 +711,7 @@
 - The `Symbol` constructor now accepts any string as argument. Symbols are equal
   if they were created from the same string.
 
+
 #### `dart:ffi`
 
 - Adds the `DynamicLibrary.providesSymbol` function to check whether a symbol is
@@ -1138,7 +1356,7 @@
   and a corresponding `dart pub remove` that removes dependencies.
 
 - New option `dart pub upgrade --major-versions` will update constraints in your
-  `pubspec.yaml` to match the the _resolvable_ column reported in
+  `pubspec.yaml` to match the _resolvable_ column reported in
   `dart pub outdated`. This allows users to easily upgrade to latest version for
   all dependencies where this is possible, even if such upgrade requires an
   update to the version constraint in `pubspec.yaml`.
diff --git a/DEPS b/DEPS
index b426244..18e0f7a 100644
--- a/DEPS
+++ b/DEPS
@@ -44,9 +44,9 @@
   # co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
   # hashes. It requires access to the dart-build-access group, which EngProd
   # has.
-  "co19_rev": "e9f3b0239dedd349084ca1e0b9d2ceacf4b2a1ef",
+  "co19_rev": "73545b2bf6c7f8e4eb931bb04d86e38d6485deee",
   # This line prevents conflicts when both packages are rolled simultaneously.
-  "co19_2_rev": "13344ad01472df9badfa78fd6aa411f042e13354",
+  "co19_2_rev": "52d3d2a6d2550ccd69c8facf8a36099be66f1493",
 
   # The internal benchmarks to use. See go/dart-benchmarks-internal
   "benchmarks_internal_rev": "076df10d9b77af337f2d8029725787155eb1cd52",
@@ -64,8 +64,8 @@
   # The list of revisions for these tools comes from Fuchsia, here:
   # https://fuchsia.googlesource.com/integration/+/HEAD/prebuilts
   # If there are problems with the toolchain, contact fuchsia-toolchain@.
-  "clang_revision": "7c4e9a68264ffeef6178865be76c45c4fb6390af",
-  "gn_revision": "39a87c0b36310bdf06b692c098f199a0d97fc810",
+  "clang_revision": "f37e8b0b831e61d3b6033829fff05d6d193ab735",
+  "gn_revision": "693f9fb87e4febdd4299db9f73d8d2c958e63148",
 
   # Scripts that make 'git cl format' work.
   "clang_format_scripts_rev": "c09c8deeac31f05bd801995c475e7c8070f9ecda",
@@ -74,7 +74,7 @@
 
   # Revisions of /third_party/* dependencies.
   "args_rev": "3b3f55766af13d895d2020ec001a28e8dc147f91",
-  "async_rev": "c64220396e0fa2f7b380590abfedbd25635cd7a0",
+  "async_rev": "80886150a5e6c58006c8ae5a6c2aa7108638e2a9",
   "bazel_worker_rev": "0885637b037979afbf5bcd05fd748b309fd669c0",
   "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
   "boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
@@ -85,15 +85,15 @@
   "characters_rev": "6ec389c4dfa8fce14820dc5cbf6e693202e7e052",
   "charcode_rev": "84ea427711e24abf3b832923959caa7dd9a8514b",
   "chrome_rev" : "19997",
-  "cli_util_rev" : "c2dc871784b59720e6cf5794dee1a20735df3feb",
+  "cli_util_rev" : "b0adbba89442b2ea6fef39c7a82fe79cb31e1168",
   "clock_rev" : "a494269254ba978e7ef8f192c5f7fec3fc05b9d3",
   "collection_rev": "a4c941ab94044d118b2086a3f261c30377604127",
   "convert_rev": "e063fdca4bebffecbb5e6aa5525995120982d9ce",
   "crypto_rev": "b5024e4de2b1c474dd558bef593ddbf0bfade152",
-  "csslib_rev": "6338de25a09d098a62c9a1992c175e9ceb5b994a",
+  "csslib_rev": "6f35da3d93eb56eb25925779d235858d4090ce6f",
 
   # Note: Updates to dart_style have to be coordinated with the infrastructure
-  # team so that the internal formatter in `tools/sdks/dart-sdk/bin/dartfmt`
+  # team so that the internal formatter `tools/sdks/dart-sdk/bin/dart format`
   # matches the version here.
   #
   # Please follow this process to make updates:
@@ -104,10 +104,10 @@
   #     and land the review.
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
-  "dart_style_rev": "14d9b6fd58cc4744676c12be3cc5eee2a779db82",
+  "dart_style_rev": "08b0294d0a500d5c02168ef57dcb8868d0c3cb48",
 
-  "dartdoc_rev" : "e5ebb7a6e88427db25c21811dc91190475934b17",
-  "devtools_rev" : "2b47d9ed486479153ca2fd038000950674ed1beb",
+  "dartdoc_rev" : "520e64977de7a87b2fd5be56e5c2e1a58d55bdad",
+  "devtools_rev" : "8881a7caa9067471008a8e00750b161f53cdb843",
   "jsshell_tag": "version:88.0",
   "ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
   "fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
@@ -122,7 +122,7 @@
   "intl_tag": "0.17.0-nullsafety",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_rev": "7e00f893440a72de0637970325e4ea44bd1e8c8e",
-  "linter_tag": "1.12.0",
+  "linter_tag": "1.14.0",
   "lints_tag": "f9670df2a66e0ec12eb51554e70c1cbf56c8f5d0",
   "logging_rev": "575781ef196e4fed4fb737e38fb4b73d62727187",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
@@ -139,9 +139,8 @@
   "pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
   "process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
   "protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
-  "pub_rev": "37d05928939b3100e7e55c3dff922651db1de1e1",
+  "pub_rev": "0035a40f25d027130c0314571da53ffafc6d973b",
   "pub_semver_rev": "a43ad72fb6b7869607581b5fedcb186d1e74276a",
-  "resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
   "rust_revision": "b7856f695d65a8ebc846754f97d15814bcb1c244",
   "shelf_static_rev": "202ec1a53c9a830c17cf3b718d089cf7eba568ad",
@@ -151,7 +150,7 @@
   "shelf_web_socket_rev": "24fb8a04befa75a94ac63a27047b231d1a22aab4",
   "source_map_stack_trace_rev": "1c3026f69d9771acf2f8c176a1ab750463309cce",
   "source_maps-0.9.4_rev": "38524",
-  "source_maps_rev": "53eb92ccfe6e64924054f83038a534b959b12b3e",
+  "source_maps_rev": "6499ee3adac8d469e2953e2e8ba4bdb4c2fbef90",
   "source_span_rev": "1be3c44045a06dff840d2ed3a13e6082d7a03a23",
   "sse_rev": "9084339389eb441d0c0518cddac211a097e78657",
   "stack_trace_rev": "6788afc61875079b71b3d1c3e65aeaa6a25cbc2f",
@@ -164,7 +163,7 @@
   "test_reflective_loader_rev": "fcfce37666672edac849d2af6dffc0f8df236a94",
   "test_rev": "099dcc4d052a30c6921489cfbefa1c8531d12975",
   "typed_data_rev": "29ce5a92b03326d0b8035916ac04f528874994bd",
-  "usage_rev": "e0780cd8b2f8af69a28dc52678ffe8492da27d06",
+  "usage_rev": "f0cb8f7cce8b675255c81488dbab8cf9f2f56404",
   "vector_math_rev": "0c9f5d68c047813a6dcdeb88ba7a42daddf25025",
   "watcher_rev": "3924194385fb215cef483193ed2879a618a3d69c",
   "webdriver_rev": "ff5ccb1522edf4bed578ead4d65e0cbc1f2c4f02",
@@ -404,8 +403,6 @@
       Var("dart_git") + "pub_semver.git" + "@" + Var("pub_semver_rev"),
   Var("dart_root") + "/third_party/pkg/pub":
       Var("dart_git") + "pub.git" + "@" + Var("pub_rev"),
-  Var("dart_root") + "/third_party/pkg/resource":
-      Var("dart_git") + "resource.git" + "@" + Var("resource_rev"),
   Var("dart_root") + "/third_party/pkg/shelf":
       Var("dart_git") + "shelf.git" + "@" + Var("shelf_rev"),
   Var("dart_root") + "/third_party/pkg/shelf_packages_handler":
@@ -606,11 +603,22 @@
       "dep_type": "cipd",
   },
 
+  # Update from https://chrome-infra-packages.appspot.com/p/fuchsia/sdk/gn
+  Var("dart_root") + "/third_party/fuchsia/sdk/mac": {
+    "packages": [
+      {
+      "package": "fuchsia/sdk/gn/mac-amd64",
+      "version": "git_revision:190502a955c482431c2edd0525e128423728b662"
+      }
+    ],
+    "condition": 'host_os == "mac" and host_cpu == "x64"',
+    "dep_type": "cipd",
+  },
   Var("dart_root") + "/third_party/fuchsia/sdk/linux": {
     "packages": [
       {
       "package": "fuchsia/sdk/gn/linux-amd64",
-      "version": "git_revision:e0a61431eb6e28d31d293cbb0c12f6b3a089bba4"
+      "version": "git_revision:190502a955c482431c2edd0525e128423728b662"
       }
     ],
     "condition": 'host_os == "linux" and host_cpu == "x64"',
diff --git a/README.dart-sdk b/README.dart-sdk
index 0123d05..99dbb49 100644
--- a/README.dart-sdk
+++ b/README.dart-sdk
@@ -1,24 +1,30 @@
 The Dart SDK is a set of tools and libraries for the Dart programming language.
 
-You can find information about Dart online at dartlang.org.
+You can find information about Dart online at https://dart.dev/.
 
 Here's a brief guide to what's in here:
 
-bin/             Binaries/scripts to compile, run, and manage Dart applications.
-  dart           Dart virtual machine
-  dart2js        Dart-to-JavaScript compiler
-  dart2native    Dart-to-native AOT compiler
-  dartanalyzer   Dart static analyzer
-  dartdoc        Dart documentation generator
-  pub            Pub, the Dart package manager
-  dartfmt        Dart code formatter
+bin/               Binaries/scripts to compile, run, and manage Dart apps.
+  dart             Command line Dart tool
+  dartaotruntime   Minimal Dart runtime for running AOT modules
+  dart2js          Dart to JavaScript production compiler
+  dartdevc         Dart to Javascript development compiler
+  dartanalyzer     Dart static analyzer
+  dartdoc          Dart documentation generator
 
-lib/             Libraries that are shipped with the Dart runtime. More
-                 information is available at api.dartlang.org.
+include/           header files that define the Dart embedding API for use by
+                   - C/C++ applications that embed the Dart Virtual machine
+                   - native libraries loaded into a dart application using FFI
+                     (https://dart.dev/guides/libraries/c-interop)
 
-packages/        Additional packages that are shipped outside of the Dart
-                 runtime. More information is available at api.dartlang.org.
+lib/               Libraries that are shipped with the Dart runtime. More
+                   information is available at https://api.dart.dev.
 
-version          The version number of the SDK (ex. 1.5.1).
+LICENSE            Description of Dart SDK license
 
-revision         The Subversion revision of the SDK build (ex. 37107).
+README             This file
+
+revision           The git commit ID of the SDK build
+                   (for example, 020b3efd3f0023c5db2097787f7cf778db837a8f).
+
+version            The version number of the SDK (for example, 2.12.1).
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
index 4afcb19..3889bb4 100644
--- a/build/config/BUILDCONFIG.gn
+++ b/build/config/BUILDCONFIG.gn
@@ -260,8 +260,8 @@
 }
 if (is_fuchsia) {
   _native_compiler_configs += [
-    "//third_party/fuchsia/sdk/linux/build/config:compiler",
-    "//third_party/fuchsia/sdk/linux/build/config:runtime_library",
+    "//third_party/fuchsia/sdk/${host_os}/build/config:compiler",
+    "//third_party/fuchsia/sdk/${host_os}/build/config:runtime_library",
   ]
 }
 
@@ -405,10 +405,16 @@
   host_toolchain = "//build/toolchain/mac:clang_$host_cpu"
   set_default_toolchain("//build/toolchain/mac:clang_$current_cpu")
 } else if (is_fuchsia) {
-  assert(host_os == "linux")
   assert(host_cpu == "x64")
-  host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
-  set_default_toolchain("//build/toolchain/fuchsia")
+  if (host_os == "linux") {
+    host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+    set_default_toolchain("//build/toolchain/fuchsia")
+  } else if (host_os == "mac") {
+    host_toolchain = "//build/toolchain/mac:clang_$host_cpu"
+    set_default_toolchain("//build/toolchain/fuchsia")
+  } else {
+    assert(false, "Unknown host for fuchsia cross compile")
+  }
 }
 
 # ==============================================================================
diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni
index fd178e1..939c8fc 100644
--- a/build/config/compiler/compiler.gni
+++ b/build/config/compiler/compiler.gni
@@ -10,4 +10,5 @@
   build_with_chromium = false
   use_libfuzzer = false
   is_apple = is_ios || is_mac
+  use_thin_lto = false
 }
diff --git a/build/dart/dart_action.gni b/build/dart/dart_action.gni
index 334a09a..0643c87 100644
--- a/build/dart/dart_action.gni
+++ b/build/dart/dart_action.gni
@@ -363,7 +363,7 @@
 #    The arguments to pass to the Dart script.
 #
 #  packages (optional):
-#    The un-rebased path to the .packages file.
+#    The un-rebased path to the package_config.json file.
 #
 #  Forwarded to action() with the usual meaning:
 #    depfile
diff --git a/build/fuchsia/config/clang/clang.gni b/build/fuchsia/config/clang/clang.gni
index 8617aa5..80f8095 100644
--- a/build/fuchsia/config/clang/clang.gni
+++ b/build/fuchsia/config/clang/clang.gni
@@ -3,5 +3,5 @@
 # found in the LICENSE file.
 
 declare_args() {
-  clang_base_path = "//buildtools/linux-x64/clang"
+  clang_base_path = "//buildtools/${host_os}-x64/clang"
 }
diff --git a/build/gn_run_binary.py b/build/gn_run_binary.py
index 9b3c32d..99cd20c 100755
--- a/build/gn_run_binary.py
+++ b/build/gn_run_binary.py
@@ -45,12 +45,9 @@
         return 1
 
     # Unless the path is absolute, this script is designed to run binaries
-    # produced by the current build. We always prefix it with "./" to avoid
-    # picking up system versions that might also be on the path.
-    if os.path.isabs(argv[2]):
-        path = argv[2]
-    else:
-        path = './' + argv[2]
+    # produced by the current build, which is the current working directory when
+    # this script is run.
+    path = os.path.abspath(argv[2])
 
     if not os.path.isfile(path):
         print("Binary not found: " + path)
diff --git a/build/toolchain/win/BUILD.gn b/build/toolchain/win/BUILD.gn
index 7eb0f12..f7b2587 100644
--- a/build/toolchain/win/BUILD.gn
+++ b/build/toolchain/win/BUILD.gn
@@ -159,7 +159,11 @@
       # TODO(brettw) support manifests
       #manifest_command = "$python_path gyp-win-tool manifest-wrapper $env mt.exe -nologo -manifest $manifests -out:${dllname}.manifest"
       #command = "cmd /c $link_command && $manifest_command"
-      command = link_command
+      # Force rebuild of the .lib-file(if it is being produced) because msvc
+      # linker seems to keep it untouched sometimes even when .obj-files are
+      # being updated.
+      cleanup_lib_command = "$python_path $tool_wrapper_path delete-file $libname"
+      command = "cmd /c $cleanup_lib_command && cmd /c $link_command"
 
       default_output_extension = ".dll"
       description = "LINK(DLL) {{output}}"
diff --git a/docs/language/informal/generalized-void.md b/docs/language/informal/generalized-void.md
index 4b3bea1..2f95977 100644
--- a/docs/language/informal/generalized-void.md
+++ b/docs/language/informal/generalized-void.md
@@ -208,7 +208,7 @@
 
 *Dart 1.x does not support generic function types dynamically, because they
 are erased to regular function types during compilation. Hence there is no
-need to specify the the typing relations for generic function types. In
+need to specify the typing relations for generic function types. In
 Dart 2, the subtype relationship for generic function types follows from
 the rule that the type void is treated as `Object`.*
 
diff --git a/docs/language/informal/instantiate-to-bound.md b/docs/language/informal/instantiate-to-bound.md
index e831fb2..8d8c326 100644
--- a/docs/language/informal/instantiate-to-bound.md
+++ b/docs/language/informal/instantiate-to-bound.md
@@ -8,7 +8,7 @@
 
 Based on [this description](https://github.com/dart-lang/sdk/issues/27526#issuecomment-260021397) by leafp@.
 
-**This document** is an informal specification of the the instantiate to
+**This document** is an informal specification of the instantiate to
 bound mechanism in Dart 2. The feature described here, *instantiate to
 bound*, makes it possible to omit some or all actual type arguments in some
 types using generic classes. The missing type arguments will be added
diff --git a/docs/language/informal/mixin-inference.md b/docs/language/informal/mixin-inference.md
index fa424af..b892622 100644
--- a/docs/language/informal/mixin-inference.md
+++ b/docs/language/informal/mixin-inference.md
@@ -123,7 +123,7 @@
 free type variables in the `Ti` must by definition be drawn from the type
 parameters to the enclosing class of the mixin application. Hence it follows
 both that the `Ti` are well-formed types in the scope of the mixin application,
-and that the the `Xi` do not occur free in the `Ti` since we have assumed that
+and that the `Xi` do not occur free in the `Ti` since we have assumed that
 classes are suitably renamed to avoid capture.
 
 Let `[X0 extends B0, ..., Xj extends Bj]` be a set of type variable bounds such
diff --git a/pkg/_fe_analyzer_shared/lib/src/base/errors.dart b/pkg/_fe_analyzer_shared/lib/src/base/errors.dart
index 09be91b..eb92d87 100644
--- a/pkg/_fe_analyzer_shared/lib/src/base/errors.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/base/errors.dart
@@ -2,6 +2,8 @@
 // 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:math';
+
 import 'customized_codes.dart';
 
 /// An error code associated with an [AnalysisError].
@@ -9,6 +11,9 @@
 /// Generally, messages should follow the [Guide for Writing
 /// Diagnostics](../fasta/diagnostics.md).
 abstract class ErrorCode {
+  /// Regular expression for identifying positional arguments in error messages.
+  static final RegExp _positionalArgumentRegExp = new RegExp(r'{(\d+)\}');
+
   /**
    * The name of the error code.
    */
@@ -19,9 +24,9 @@
    */
   final String uniqueName;
 
-  final String _message;
+  final String _problemMessage;
 
-  final String? _correction;
+  final String? _correctionMessage;
 
   /**
    * Return `true` if diagnostics with this code have documentation for them
@@ -36,30 +41,34 @@
 
   /**
    * Initialize a newly created error code to have the given [name]. The message
-   * associated with the error will be created from the given [message]
+   * associated with the error will be created from the given [problemMessage]
    * template. The correction associated with the error will be created from the
-   * given [correction] template.
+   * given [correctionMessage] template.
    */
   const ErrorCode({
-    String? correction,
+    String? correctionMessage,
     this.hasPublishedDocs = false,
     this.isUnresolvedIdentifier: false,
-    required String message,
     required this.name,
+    @Deprecated('Please use problemMessage') String? message,
+    String? problemMessage,
     required this.uniqueName,
-  })  : _correction = correction,
-        _message = message,
+  })  : _correctionMessage = correctionMessage,
+        _problemMessage = problemMessage ?? message ?? 'NO MESSAGE',
         // ignore: unnecessary_null_comparison
         assert(hasPublishedDocs != null),
         // ignore: unnecessary_null_comparison
-        assert(isUnresolvedIdentifier != null);
+        assert(isUnresolvedIdentifier != null),
+        assert((message == null) != (problemMessage == null),
+            'Either problemMessage or message must be provided (not both)');
 
   /**
    * The template used to create the correction to be displayed for this error,
    * or `null` if there is no correction information for this error. The
    * correction should indicate how the user can fix the error.
    */
-  String? get correction => customizedCorrections[uniqueName] ?? _correction;
+  String? get correctionMessage =>
+      customizedCorrections[uniqueName] ?? _correctionMessage;
 
   /**
    * The severity of the error.
@@ -71,10 +80,26 @@
   bool get isIgnorable => errorSeverity != ErrorSeverity.ERROR;
 
   /**
-   * The template used to create the message to be displayed for this error. The
-   * message should indicate what is wrong and why it is wrong.
+   * The template used to create the problem message to be displayed for this
+   * error. The problem message should indicate what is wrong and why it is
+   * wrong.
    */
-  String get message => customizedMessages[uniqueName] ?? _message;
+  String get problemMessage =>
+      customizedMessages[uniqueName] ?? _problemMessage;
+
+  int get numParameters {
+    int result = 0;
+    String? correctionMessage = _correctionMessage;
+    for (String s in [
+      _problemMessage,
+      if (correctionMessage != null) correctionMessage
+    ]) {
+      for (RegExpMatch match in _positionalArgumentRegExp.allMatches(s)) {
+        result = max(result, int.parse(match.group(1)!) + 1);
+      }
+    }
+    return result;
+  }
 
   /**
    * The type of the error.
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
index ca0f816..5866409 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
@@ -39,14 +39,16 @@
 class Message {
   final Code<dynamic> code;
 
-  final String message;
+  final String problemMessage;
 
-  final String? tip;
+  final String? correctionMessage;
 
   final Map<String, dynamic> arguments;
 
   const Message(this.code,
-      {required this.message, this.tip, this.arguments = const {}});
+      {this.correctionMessage,
+      required this.problemMessage,
+      this.arguments = const {}});
 
   LocatedMessage withLocation(Uri uri, int charOffset, int length) {
     return new LocatedMessage(uri, charOffset, length, this);
@@ -57,21 +59,21 @@
   }
 
   String toString() {
-    return "Message[$code, $message, $tip, $arguments]";
+    return "Message[$code, $problemMessage, $correctionMessage, $arguments]";
   }
 }
 
 class MessageCode extends Code<Null> implements Message {
-  final String message;
+  final String problemMessage;
 
-  final String? tip;
+  final String? correctionMessage;
 
   const MessageCode(String name,
       {int index: -1,
       List<String>? analyzerCodes,
       Severity severity: Severity.error,
-      required this.message,
-      this.tip})
+      required this.problemMessage,
+      this.correctionMessage})
       : super(name,
             index: index, analyzerCodes: analyzerCodes, severity: severity);
 
@@ -90,15 +92,15 @@
 }
 
 class Template<T> {
-  final String messageTemplate;
+  final String problemMessageTemplate;
 
-  final String? tipTemplate;
+  final String? correctionMessageTemplate;
 
   final T withArguments;
 
   const Template(
-      {required this.messageTemplate,
-      this.tipTemplate,
+      {this.correctionMessageTemplate,
+      required this.problemMessageTemplate,
       required this.withArguments});
 }
 
@@ -116,9 +118,9 @@
 
   Code<dynamic> get code => messageObject.code;
 
-  String get message => messageObject.message;
+  String get problemMessage => messageObject.problemMessage;
 
-  String? get tip => messageObject.tip;
+  String? get correctionMessage => messageObject.correctionMessage;
 
   Map<String, dynamic> get arguments => messageObject.arguments;
 
@@ -128,7 +130,7 @@
     if (result != 0) return result;
     result = charOffset.compareTo(other.charOffset);
     if (result != 0) return result;
-    return message.compareTo(message);
+    return problemMessage.compareTo(problemMessage);
   }
 
   FormattedMessage withFormatting(PlainAndColorizedString formatted, int line,
@@ -209,9 +211,9 @@
 
   String get codeName => code.name;
 
-  String get message => locatedMessage.message;
+  String get problemMessage => locatedMessage.problemMessage;
 
-  String? get tip => locatedMessage.tip;
+  String? get correctionMessage => locatedMessage.correctionMessage;
 
   Map<String, dynamic> get arguments => locatedMessage.arguments;
 
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 f170c1f..0b96e08 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -18,13 +18,13 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAbstractClassConstructorTearOff = const MessageCode(
     "AbstractClassConstructorTearOff",
-    message: r"""Constructors on abstract classes can't be torn off.""");
+    problemMessage: r"""Constructors on abstract classes can't be torn off.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateAbstractClassInstantiation =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The class '#name' is abstract and can't be instantiated.""",
         withArguments: _withArgumentsAbstractClassInstantiation);
 
@@ -38,7 +38,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeAbstractClassInstantiation,
-      message: """The class '${name}' is abstract and can't be instantiated.""",
+      problemMessage:
+          """The class '${name}' is abstract and can't be instantiated.""",
       arguments: {'name': name});
 }
 
@@ -49,8 +50,9 @@
 const MessageCode messageAbstractClassMember = const MessageCode(
     "AbstractClassMember",
     index: 51,
-    message: r"""Members of classes can't be declared to be 'abstract'.""",
-    tip:
+    problemMessage:
+        r"""Members of classes can't be declared to be 'abstract'.""",
+    correctionMessage:
         r"""Try removing the 'abstract' keyword. You can add the 'abstract' keyword before the class declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -59,8 +61,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAbstractExtensionField = const MessageCode(
     "AbstractExtensionField",
-    message: r"""Extension fields can't be declared 'abstract'.""",
-    tip: r"""Try removing the 'abstract' keyword.""");
+    problemMessage: r"""Extension fields can't be declared 'abstract'.""",
+    correctionMessage: r"""Try removing the 'abstract' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeAbstractExternalField = messageAbstractExternalField;
@@ -69,8 +71,10 @@
 const MessageCode messageAbstractExternalField = const MessageCode(
     "AbstractExternalField",
     index: 110,
-    message: r"""Fields can't be declared both 'abstract' and 'external'.""",
-    tip: r"""Try removing the 'abstract' or 'external' keyword.""");
+    problemMessage:
+        r"""Fields can't be declared both 'abstract' and 'external'.""",
+    correctionMessage:
+        r"""Try removing the 'abstract' or 'external' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeAbstractFieldConstructorInitializer =
@@ -79,8 +83,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAbstractFieldConstructorInitializer = const MessageCode(
     "AbstractFieldConstructorInitializer",
-    message: r"""Abstract fields cannot have initializers.""",
-    tip:
+    problemMessage: r"""Abstract fields cannot have initializers.""",
+    correctionMessage:
         r"""Try removing the field initializer or the 'abstract' keyword from the field declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -89,8 +93,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAbstractFieldInitializer = const MessageCode(
     "AbstractFieldInitializer",
-    message: r"""Abstract fields cannot have initializers.""",
-    tip: r"""Try removing the initializer or the 'abstract' keyword.""");
+    problemMessage: r"""Abstract fields cannot have initializers.""",
+    correctionMessage:
+        r"""Try removing the initializer or the 'abstract' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeAbstractLateField = messageAbstractLateField;
@@ -99,8 +104,8 @@
 const MessageCode messageAbstractLateField = const MessageCode(
     "AbstractLateField",
     index: 108,
-    message: r"""Abstract fields cannot be late.""",
-    tip: r"""Try removing the 'abstract' or 'late' keyword.""");
+    problemMessage: r"""Abstract fields cannot be late.""",
+    correctionMessage: r"""Try removing the 'abstract' or 'late' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeAbstractNotSync = messageAbstractNotSync;
@@ -108,7 +113,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAbstractNotSync = const MessageCode("AbstractNotSync",
     analyzerCodes: <String>["NON_SYNC_ABSTRACT_METHOD"],
-    message: r"""Abstract methods can't use 'async', 'async*', or 'sync*'.""");
+    problemMessage:
+        r"""Abstract methods can't use 'async', 'async*', or 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -116,7 +122,7 @@
         String
             name)> templateAbstractRedirectedClassInstantiation = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Factory redirects to class '#name', which is abstract and can't be instantiated.""",
     withArguments: _withArgumentsAbstractRedirectedClassInstantiation);
 
@@ -132,7 +138,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeAbstractRedirectedClassInstantiation,
-      message:
+      problemMessage:
           """Factory redirects to class '${name}', which is abstract and can't be instantiated.""",
       arguments: {'name': name});
 }
@@ -144,13 +150,13 @@
 const MessageCode messageAbstractStaticField = const MessageCode(
     "AbstractStaticField",
     index: 107,
-    message: r"""Static fields can't be declared 'abstract'.""",
-    tip: r"""Try removing the 'abstract' or 'static' keyword.""");
+    problemMessage: r"""Static fields can't be declared 'abstract'.""",
+    correctionMessage: r"""Try removing the 'abstract' or 'static' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateAccessError =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Access error: '#name'.""",
+        problemMessageTemplate: r"""Access error: '#name'.""",
         withArguments: _withArgumentsAccessError);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -164,7 +170,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeAccessError,
-      message: """Access error: '${name}'.""", arguments: {'name': name});
+      problemMessage: """Access error: '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -174,7 +181,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAgnosticWithStrongDillLibrary = const MessageCode(
     "AgnosticWithStrongDillLibrary",
-    message:
+    problemMessage:
         r"""Loaded library is compiled with sound null safety and cannot be used in compilation for agnostic null safety.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -184,7 +191,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAgnosticWithWeakDillLibrary = const MessageCode(
     "AgnosticWithWeakDillLibrary",
-    message:
+    problemMessage:
         r"""Loaded library is compiled with unsound null safety and cannot be used in compilation for agnostic null safety.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -194,7 +201,7 @@
 const MessageCode messageAmbiguousExtensionCause = const MessageCode(
     "AmbiguousExtensionCause",
     severity: Severity.context,
-    message: r"""This is one of the extension members.""");
+    problemMessage: r"""This is one of the extension members.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeAnnotationOnFunctionTypeTypeVariable =
@@ -203,7 +210,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAnnotationOnFunctionTypeTypeVariable =
     const MessageCode("AnnotationOnFunctionTypeTypeVariable",
-        message:
+        problemMessage:
             r"""A type variable on a function type can't have annotations.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -213,7 +220,7 @@
 const MessageCode messageAnnotationOnTypeArgument = const MessageCode(
     "AnnotationOnTypeArgument",
     index: 111,
-    message:
+    problemMessage:
         r"""Type arguments can't have annotations because they aren't declarations.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -222,9 +229,11 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAnonymousBreakTargetOutsideFunction =
-    const MessageCode("AnonymousBreakTargetOutsideFunction",
+    const MessageCode(
+        "AnonymousBreakTargetOutsideFunction",
         analyzerCodes: <String>["LABEL_IN_OUTER_SCOPE"],
-        message: r"""Can't break to a target in a different function.""");
+        problemMessage:
+            r"""Can't break to a target in a different function.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeAnonymousContinueTargetOutsideFunction =
@@ -232,9 +241,11 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAnonymousContinueTargetOutsideFunction =
-    const MessageCode("AnonymousContinueTargetOutsideFunction",
+    const MessageCode(
+        "AnonymousContinueTargetOutsideFunction",
         analyzerCodes: <String>["LABEL_IN_OUTER_SCOPE"],
-        message: r"""Can't continue at a target in a different function.""");
+        problemMessage:
+            r"""Can't continue at a target in a different function.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -242,7 +253,7 @@
         int
             codePoint)> templateAsciiControlCharacter = const Template<
         Message Function(int codePoint)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The control character #unicode can only be used in strings and comments.""",
     withArguments: _withArgumentsAsciiControlCharacter);
 
@@ -256,7 +267,7 @@
   String unicode =
       "U+${codePoint.toRadixString(16).toUpperCase().padLeft(4, '0')}";
   return new Message(codeAsciiControlCharacter,
-      message:
+      problemMessage:
           """The control character ${unicode} can only be used in strings and comments.""",
       arguments: {'unicode': codePoint});
 }
@@ -267,7 +278,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAssertAsExpression = const MessageCode(
     "AssertAsExpression",
-    message: r"""`assert` can't be used as an expression.""");
+    problemMessage: r"""`assert` can't be used as an expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeAssertExtraneousArgument = messageAssertExtraneousArgument;
@@ -275,7 +286,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAssertExtraneousArgument = const MessageCode(
     "AssertExtraneousArgument",
-    message: r"""`assert` can't have more than two arguments.""");
+    problemMessage: r"""`assert` can't have more than two arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeAwaitAsIdentifier = messageAwaitAsIdentifier;
@@ -284,7 +295,7 @@
 const MessageCode messageAwaitAsIdentifier = const MessageCode(
     "AwaitAsIdentifier",
     analyzerCodes: <String>["ASYNC_KEYWORD_USED_AS_IDENTIFIER"],
-    message:
+    problemMessage:
         r"""'await' can't be used as an identifier in 'async', 'async*', or 'sync*' methods.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -294,9 +305,9 @@
 const MessageCode messageAwaitForNotAsync = const MessageCode(
     "AwaitForNotAsync",
     analyzerCodes: <String>["ASYNC_FOR_IN_WRONG_CONTEXT"],
-    message:
+    problemMessage:
         r"""The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.""",
-    tip:
+    correctionMessage:
         r"""Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -306,7 +317,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAwaitInLateLocalInitializer = const MessageCode(
     "AwaitInLateLocalInitializer",
-    message:
+    problemMessage:
         r"""`await` expressions are not supported in late local initializers.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -315,7 +326,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAwaitNotAsync = const MessageCode("AwaitNotAsync",
     analyzerCodes: <String>["AWAIT_IN_WRONG_CONTEXT"],
-    message: r"""'await' can only be used in 'async' or 'async*' methods.""");
+    problemMessage:
+        r"""'await' can only be used in 'async' or 'async*' methods.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -324,9 +336,9 @@
         String
             string2)> templateBinaryOperatorWrittenOut = const Template<
         Message Function(String string, String string2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Binary operator '#string' is written as '#string2' instead of the written out word.""",
-    tipTemplate: r"""Try replacing '#string' with '#string2'.""",
+    correctionMessageTemplate: r"""Try replacing '#string' with '#string2'.""",
     withArguments: _withArgumentsBinaryOperatorWrittenOut);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -341,9 +353,9 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeBinaryOperatorWrittenOut,
-      message:
+      problemMessage:
           """Binary operator '${string}' is written as '${string2}' instead of the written out word.""",
-      tip: """Try replacing '${string}' with '${string2}'.""",
+      correctionMessage: """Try replacing '${string}' with '${string2}'.""",
       arguments: {'string': string, 'string2': string2});
 }
 
@@ -353,11 +365,10 @@
         String name,
         String
             name2)> templateBoundIssueViaCycleNonSimplicity = const Template<
-        Message Function(String name,
-            String name2)>(
-    messageTemplate:
+        Message Function(String name, String name2)>(
+    problemMessageTemplate:
         r"""Generic type '#name' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through '#name2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try providing type arguments to '#name2' here or to some other raw types in the bounds along the reference chain.""",
     withArguments: _withArgumentsBoundIssueViaCycleNonSimplicity);
 
@@ -376,9 +387,9 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeBoundIssueViaCycleNonSimplicity,
-      message:
+      problemMessage:
           """Generic type '${name}' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through '${name2}'.""",
-      tip: """Try providing type arguments to '${name2}' here or to some other raw types in the bounds along the reference chain.""",
+      correctionMessage: """Try providing type arguments to '${name2}' here or to some other raw types in the bounds along the reference chain.""",
       arguments: {'name': name, 'name2': name2});
 }
 
@@ -387,10 +398,12 @@
     Message Function(
         String
             name)> templateBoundIssueViaLoopNonSimplicity = const Template<
-        Message Function(String name)>(
-    messageTemplate:
+        Message Function(
+            String name)>(
+    problemMessageTemplate:
         r"""Generic type '#name' can't be used without type arguments in the bounds of its own type variables.""",
-    tipTemplate: r"""Try providing type arguments to '#name' here.""",
+    correctionMessageTemplate:
+        r"""Try providing type arguments to '#name' here.""",
     withArguments: _withArgumentsBoundIssueViaLoopNonSimplicity);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -403,9 +416,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeBoundIssueViaLoopNonSimplicity,
-      message:
+      problemMessage:
           """Generic type '${name}' can't be used without type arguments in the bounds of its own type variables.""",
-      tip: """Try providing type arguments to '${name}' here.""",
+      correctionMessage: """Try providing type arguments to '${name}' here.""",
       arguments: {'name': name});
 }
 
@@ -413,9 +426,10 @@
 const Template<Message Function(String name)>
     templateBoundIssueViaRawTypeWithNonSimpleBounds =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Generic type '#name' can't be used without type arguments in a type variable bound.""",
-        tipTemplate: r"""Try providing type arguments to '#name' here.""",
+        correctionMessageTemplate:
+            r"""Try providing type arguments to '#name' here.""",
         withArguments: _withArgumentsBoundIssueViaRawTypeWithNonSimpleBounds);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -430,9 +444,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeBoundIssueViaRawTypeWithNonSimpleBounds,
-      message:
+      problemMessage:
           """Generic type '${name}' can't be used without type arguments in a type variable bound.""",
-      tip: """Try providing type arguments to '${name}' here.""",
+      correctionMessage: """Try providing type arguments to '${name}' here.""",
       arguments: {'name': name});
 }
 
@@ -443,15 +457,16 @@
 const MessageCode messageBreakOutsideOfLoop = const MessageCode(
     "BreakOutsideOfLoop",
     index: 52,
-    message:
+    problemMessage:
         r"""A break statement can't be used outside of a loop or switch statement.""",
-    tip: r"""Try removing the break statement.""");
+    correctionMessage: r"""Try removing the break statement.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateBreakTargetOutsideFunction =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Can't break to '#name' in a different function.""",
+        problemMessageTemplate:
+            r"""Can't break to '#name' in a different function.""",
         withArguments: _withArgumentsBreakTargetOutsideFunction);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -464,14 +479,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeBreakTargetOutsideFunction,
-      message: """Can't break to '${name}' in a different function.""",
+      problemMessage: """Can't break to '${name}' in a different function.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateBuiltInIdentifierAsType =
     const Template<Message Function(Token token)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The built-in identifier '#lexeme' can't be used as a type.""",
         withArguments: _withArgumentsBuiltInIdentifierAsType);
 
@@ -484,7 +499,7 @@
 Message _withArgumentsBuiltInIdentifierAsType(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeBuiltInIdentifierAsType,
-      message:
+      problemMessage:
           """The built-in identifier '${lexeme}' can't be used as a type.""",
       arguments: {'lexeme': token});
 }
@@ -493,7 +508,7 @@
 const Template<Message Function(Token token)>
     templateBuiltInIdentifierInDeclaration =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Can't use '#lexeme' as a name here.""",
+        problemMessageTemplate: r"""Can't use '#lexeme' as a name here.""",
         withArguments: _withArgumentsBuiltInIdentifierInDeclaration);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -505,7 +520,7 @@
 Message _withArgumentsBuiltInIdentifierInDeclaration(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeBuiltInIdentifierInDeclaration,
-      message: """Can't use '${lexeme}' as a name here.""",
+      problemMessage: """Can't use '${lexeme}' as a name here.""",
       arguments: {'lexeme': token});
 }
 
@@ -515,13 +530,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCandidateFound = const MessageCode("CandidateFound",
     severity: Severity.context,
-    message: r"""Found this candidate, but the arguments don't match.""");
+    problemMessage:
+        r"""Found this candidate, but the arguments don't match.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateCandidateFoundIsDefaultConstructor =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The class '#name' has a constructor that takes no arguments.""",
         withArguments: _withArgumentsCandidateFoundIsDefaultConstructor);
 
@@ -537,16 +553,17 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeCandidateFoundIsDefaultConstructor,
-      message:
+      problemMessage:
           """The class '${name}' has a constructor that takes no arguments.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)>
-    templateCannotAssignToConstVariable =
+const Template<
+        Message Function(String name)> templateCannotAssignToConstVariable =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Can't assign to the const variable '#name'.""",
+        problemMessageTemplate:
+            r"""Can't assign to the const variable '#name'.""",
         withArguments: _withArgumentsCannotAssignToConstVariable);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -560,7 +577,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeCannotAssignToConstVariable,
-      message: """Can't assign to the const variable '${name}'.""",
+      problemMessage: """Can't assign to the const variable '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -571,13 +588,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCannotAssignToExtensionThis = const MessageCode(
     "CannotAssignToExtensionThis",
-    message: r"""Can't assign to 'this'.""");
+    problemMessage: r"""Can't assign to 'this'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)>
-    templateCannotAssignToFinalVariable =
+const Template<
+        Message Function(String name)> templateCannotAssignToFinalVariable =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Can't assign to the final variable '#name'.""",
+        problemMessageTemplate:
+            r"""Can't assign to the final variable '#name'.""",
         withArguments: _withArgumentsCannotAssignToFinalVariable);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -591,7 +609,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeCannotAssignToFinalVariable,
-      message: """Can't assign to the final variable '${name}'.""",
+      problemMessage: """Can't assign to the final variable '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -603,7 +621,7 @@
 const MessageCode messageCannotAssignToParenthesizedExpression =
     const MessageCode("CannotAssignToParenthesizedExpression",
         analyzerCodes: <String>["ASSIGNMENT_TO_PARENTHESIZED_EXPRESSION"],
-        message: r"""Can't assign to a parenthesized expression.""");
+        problemMessage: r"""Can't assign to a parenthesized expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCannotAssignToSuper = messageCannotAssignToSuper;
@@ -612,7 +630,7 @@
 const MessageCode messageCannotAssignToSuper = const MessageCode(
     "CannotAssignToSuper",
     analyzerCodes: <String>["NOT_AN_LVALUE"],
-    message: r"""Can't assign to super.""");
+    problemMessage: r"""Can't assign to super.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCannotAssignToTypeLiteral =
@@ -621,13 +639,13 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCannotAssignToTypeLiteral = const MessageCode(
     "CannotAssignToTypeLiteral",
-    message: r"""Can't assign to a type literal.""");
+    problemMessage: r"""Can't assign to a type literal.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)>
     templateCannotReadSdkSpecification =
     const Template<Message Function(String string)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Unable to read the 'libraries.json' specification file:
   #string.""",
         withArguments: _withArgumentsCannotReadSdkSpecification);
@@ -642,7 +660,7 @@
 Message _withArgumentsCannotReadSdkSpecification(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeCannotReadSdkSpecification,
-      message: """Unable to read the 'libraries.json' specification file:
+      problemMessage: """Unable to read the 'libraries.json' specification file:
   ${string}.""", arguments: {'string': string});
 }
 
@@ -653,7 +671,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCantDisambiguateAmbiguousInformation = const MessageCode(
     "CantDisambiguateAmbiguousInformation",
-    message:
+    problemMessage:
         r"""Both Iterable and Map spread elements encountered in ambiguous literal.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -663,9 +681,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCantDisambiguateNotEnoughInformation = const MessageCode(
     "CantDisambiguateNotEnoughInformation",
-    message:
+    problemMessage:
         r"""Not enough type information to disambiguate between literal set and literal map.""",
-    tip:
+    correctionMessage:
         r"""Try providing type arguments for the literal explicitly to disambiguate it.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -675,8 +693,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCantInferPackagesFromManyInputs = const MessageCode(
     "CantInferPackagesFromManyInputs",
-    message: r"""Can't infer a packages file when compiling multiple inputs.""",
-    tip: r"""Try specifying the file explicitly with the --packages option.""");
+    problemMessage:
+        r"""Can't infer a packages file when compiling multiple inputs.""",
+    correctionMessage:
+        r"""Try specifying the file explicitly with the --packages option.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCantInferPackagesFromPackageUri =
@@ -685,16 +705,18 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCantInferPackagesFromPackageUri = const MessageCode(
     "CantInferPackagesFromPackageUri",
-    message: r"""Can't infer a packages file from an input 'package:*' URI.""",
-    tip: r"""Try specifying the file explicitly with the --packages option.""");
+    problemMessage:
+        r"""Can't infer a packages file from an input 'package:*' URI.""",
+    correctionMessage:
+        r"""Try specifying the file explicitly with the --packages option.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateCantInferReturnTypeDueToNoCombinedSignature =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't infer a return type for '#name' as the overridden members don't have a combined signature.""",
-        tipTemplate: r"""Try adding an explicit type.""",
+        correctionMessageTemplate: r"""Try adding an explicit type.""",
         withArguments:
             _withArgumentsCantInferReturnTypeDueToNoCombinedSignature);
 
@@ -712,9 +734,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeCantInferReturnTypeDueToNoCombinedSignature,
-      message:
+      problemMessage:
           """Can't infer a return type for '${name}' as the overridden members don't have a combined signature.""",
-      tip: """Try adding an explicit type.""",
+      correctionMessage: """Try adding an explicit type.""",
       arguments: {'name': name});
 }
 
@@ -724,9 +746,9 @@
         String
             string)> templateCantInferTypeDueToCircularity = const Template<
         Message Function(String string)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Can't infer the type of '#string': circularity found during type inference.""",
-    tipTemplate: r"""Specify the type explicitly.""",
+    correctionMessageTemplate: r"""Specify the type explicitly.""",
     withArguments: _withArgumentsCantInferTypeDueToCircularity);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -738,9 +760,9 @@
 Message _withArgumentsCantInferTypeDueToCircularity(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeCantInferTypeDueToCircularity,
-      message:
+      problemMessage:
           """Can't infer the type of '${string}': circularity found during type inference.""",
-      tip: """Specify the type explicitly.""",
+      correctionMessage: """Specify the type explicitly.""",
       arguments: {'string': string});
 }
 
@@ -750,9 +772,9 @@
         String
             name)> templateCantInferTypeDueToNoCombinedSignature = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Can't infer a type for '#name' as the overridden members don't have a combined signature.""",
-    tipTemplate: r"""Try adding an explicit type.""",
+    correctionMessageTemplate: r"""Try adding an explicit type.""",
     withArguments: _withArgumentsCantInferTypeDueToNoCombinedSignature);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -769,9 +791,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeCantInferTypeDueToNoCombinedSignature,
-      message:
+      problemMessage:
           """Can't infer a type for '${name}' as the overridden members don't have a combined signature.""",
-      tip: """Try adding an explicit type.""",
+      correctionMessage: """Try adding an explicit type.""",
       arguments: {'name': name});
 }
 
@@ -781,9 +803,9 @@
         String
             name)> templateCantInferTypesDueToNoCombinedSignature = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Can't infer types for '#name' as the overridden members don't have a combined signature.""",
-    tipTemplate: r"""Try adding explicit types.""",
+    correctionMessageTemplate: r"""Try adding explicit types.""",
     withArguments: _withArgumentsCantInferTypesDueToNoCombinedSignature);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -800,16 +822,16 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeCantInferTypesDueToNoCombinedSignature,
-      message:
+      problemMessage:
           """Can't infer types for '${name}' as the overridden members don't have a combined signature.""",
-      tip: """Try adding explicit types.""",
+      correctionMessage: """Try adding explicit types.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_, String string)> templateCantReadFile =
     const Template<Message Function(Uri uri_, String string)>(
-        messageTemplate: r"""Error when reading '#uri': #string""",
+        problemMessageTemplate: r"""Error when reading '#uri': #string""",
         withArguments: _withArgumentsCantReadFile);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -822,7 +844,7 @@
   String? uri = relativizeUri(uri_);
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeCantReadFile,
-      message: """Error when reading '${uri}': ${string}""",
+      problemMessage: """Error when reading '${uri}': ${string}""",
       arguments: {'uri': uri_, 'string': string});
 }
 
@@ -830,7 +852,7 @@
 const Template<Message Function(Token token)>
     templateCantUseControlFlowOrSpreadAsConstant =
     const Template<Message Function(Token token)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#lexeme' is not supported in constant expressions.""",
         withArguments: _withArgumentsCantUseControlFlowOrSpreadAsConstant);
 
@@ -845,7 +867,8 @@
 Message _withArgumentsCantUseControlFlowOrSpreadAsConstant(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeCantUseControlFlowOrSpreadAsConstant,
-      message: """'${lexeme}' is not supported in constant expressions.""",
+      problemMessage:
+          """'${lexeme}' is not supported in constant expressions.""",
       arguments: {'lexeme': token});
 }
 
@@ -855,9 +878,9 @@
         Token
             token)> templateCantUseDeferredPrefixAsConstant = const Template<
         Message Function(Token token)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""'#lexeme' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try moving the constant from the deferred library, or removing 'deferred' from the import.
 """,
     withArguments: _withArgumentsCantUseDeferredPrefixAsConstant);
@@ -871,9 +894,9 @@
 Message _withArgumentsCantUseDeferredPrefixAsConstant(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeCantUseDeferredPrefixAsConstant,
-      message:
+      problemMessage:
           """'${lexeme}' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.""",
-      tip: """Try moving the constant from the deferred library, or removing 'deferred' from the import.
+      correctionMessage: """Try moving the constant from the deferred library, or removing 'deferred' from the import.
 """,
       arguments: {'lexeme': token});
 }
@@ -886,7 +909,7 @@
 const MessageCode messageCantUsePrefixAsExpression = const MessageCode(
     "CantUsePrefixAsExpression",
     analyzerCodes: <String>["PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT"],
-    message: r"""A prefix can't be used as an expression.""");
+    problemMessage: r"""A prefix can't be used as an expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCantUsePrefixWithNullAware =
@@ -896,8 +919,8 @@
 const MessageCode messageCantUsePrefixWithNullAware = const MessageCode(
     "CantUsePrefixWithNullAware",
     analyzerCodes: <String>["PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT"],
-    message: r"""A prefix can't be used with null-aware operators.""",
-    tip: r"""Try replacing '?.' with '.'""");
+    problemMessage: r"""A prefix can't be used with null-aware operators.""",
+    correctionMessage: r"""Try replacing '?.' with '.'""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCatchSyntax = messageCatchSyntax;
@@ -905,9 +928,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCatchSyntax = const MessageCode("CatchSyntax",
     index: 84,
-    message:
+    problemMessage:
         r"""'catch' must be followed by '(identifier)' or '(identifier, identifier)'.""",
-    tip:
+    correctionMessage:
         r"""No types are needed, the first is given by 'on', the second is always 'StackTrace'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -918,9 +941,9 @@
 const MessageCode messageCatchSyntaxExtraParameters = const MessageCode(
     "CatchSyntaxExtraParameters",
     index: 83,
-    message:
+    problemMessage:
         r"""'catch' must be followed by '(identifier)' or '(identifier, identifier)'.""",
-    tip:
+    correctionMessage:
         r"""No types are needed, the first is given by 'on', the second is always 'StackTrace'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -929,14 +952,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageClassInClass = const MessageCode("ClassInClass",
     index: 53,
-    message: r"""Classes can't be declared inside other classes.""",
-    tip: r"""Try moving the class to the top-level.""");
+    problemMessage: r"""Classes can't be declared inside other classes.""",
+    correctionMessage: r"""Try moving the class to the top-level.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateClassInNullAwareReceiver =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""The class '#name' cannot be null.""",
-        tipTemplate: r"""Try replacing '?.' with '.'""",
+        problemMessageTemplate: r"""The class '#name' cannot be null.""",
+        correctionMessageTemplate: r"""Try replacing '?.' with '.'""",
         withArguments: _withArgumentsClassInNullAwareReceiver);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -949,8 +972,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeClassInNullAwareReceiver,
-      message: """The class '${name}' cannot be null.""",
-      tip: """Try replacing '?.' with '.'""",
+      problemMessage: """The class '${name}' cannot be null.""",
+      correctionMessage: """Try replacing '?.' with '.'""",
       arguments: {'name': name});
 }
 
@@ -961,8 +984,8 @@
 const MessageCode messageColonInPlaceOfIn = const MessageCode(
     "ColonInPlaceOfIn",
     index: 54,
-    message: r"""For-in loops use 'in' rather than a colon.""",
-    tip: r"""Try replacing the colon with the keyword 'in'.""");
+    problemMessage: r"""For-in loops use 'in' rather than a colon.""",
+    correctionMessage: r"""Try replacing the colon with the keyword 'in'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -971,9 +994,10 @@
         String
             name2)> templateCombinedMemberSignatureFailed = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Class '#name' inherits multiple members named '#name2' with incompatible signatures.""",
-    tipTemplate: r"""Try adding a declaration of '#name2' to '#name'.""",
+    correctionMessageTemplate:
+        r"""Try adding a declaration of '#name2' to '#name'.""",
     withArguments: _withArgumentsCombinedMemberSignatureFailed);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -990,9 +1014,9 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeCombinedMemberSignatureFailed,
-      message:
+      problemMessage:
           """Class '${name}' inherits multiple members named '${name2}' with incompatible signatures.""",
-      tip: """Try adding a declaration of '${name2}' to '${name}'.""",
+      correctionMessage: """Try adding a declaration of '${name2}' to '${name}'.""",
       arguments: {'name': name, 'name2': name2});
 }
 
@@ -1004,7 +1028,7 @@
 const MessageCode messageCompilingWithSoundNullSafety = const MessageCode(
     "CompilingWithSoundNullSafety",
     severity: Severity.info,
-    message: r"""Compiling with sound null safety""");
+    problemMessage: r"""Compiling with sound null safety""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCompilingWithoutSoundNullSafety =
@@ -1014,7 +1038,7 @@
 const MessageCode messageCompilingWithoutSoundNullSafety = const MessageCode(
     "CompilingWithoutSoundNullSafety",
     severity: Severity.info,
-    message: r"""Compiling without sound null safety""");
+    problemMessage: r"""Compiling without sound null safety""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -1023,9 +1047,9 @@
         String
             string2)> templateConflictingModifiers = const Template<
         Message Function(String string, String string2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Members can't be declared to be both '#string' and '#string2'.""",
-    tipTemplate: r"""Try removing one of the keywords.""",
+    correctionMessageTemplate: r"""Try removing one of the keywords.""",
     withArguments: _withArgumentsConflictingModifiers);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1040,16 +1064,16 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeConflictingModifiers,
-      message:
+      problemMessage:
           """Members can't be declared to be both '${string}' and '${string2}'.""",
-      tip: """Try removing one of the keywords.""",
+      correctionMessage: """Try removing one of the keywords.""",
       arguments: {'string': string, 'string2': string2});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateConflictsWithConstructor =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Conflicts with constructor '#name'.""",
+        problemMessageTemplate: r"""Conflicts with constructor '#name'.""",
         withArguments: _withArgumentsConflictsWithConstructor);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1062,14 +1086,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConflictsWithConstructor,
-      message: """Conflicts with constructor '${name}'.""",
+      problemMessage: """Conflicts with constructor '${name}'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateConflictsWithFactory =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Conflicts with factory '#name'.""",
+        problemMessageTemplate: r"""Conflicts with factory '#name'.""",
         withArguments: _withArgumentsConflictsWithFactory);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1083,7 +1107,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConflictsWithFactory,
-      message: """Conflicts with factory '${name}'.""",
+      problemMessage: """Conflicts with factory '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -1091,7 +1115,7 @@
 const Template<Message Function(String name)>
     templateConflictsWithImplicitSetter =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Conflicts with the implicit setter of the field '#name'.""",
         withArguments: _withArgumentsConflictsWithImplicitSetter);
 
@@ -1105,14 +1129,15 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConflictsWithImplicitSetter,
-      message: """Conflicts with the implicit setter of the field '${name}'.""",
+      problemMessage:
+          """Conflicts with the implicit setter of the field '${name}'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateConflictsWithMember =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Conflicts with member '#name'.""",
+        problemMessageTemplate: r"""Conflicts with member '#name'.""",
         withArguments: _withArgumentsConflictsWithMember);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1125,14 +1150,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConflictsWithMember,
-      message: """Conflicts with member '${name}'.""",
+      problemMessage: """Conflicts with member '${name}'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateConflictsWithSetter =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Conflicts with setter '#name'.""",
+        problemMessageTemplate: r"""Conflicts with setter '#name'.""",
         withArguments: _withArgumentsConflictsWithSetter);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1145,7 +1170,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConflictsWithSetter,
-      message: """Conflicts with setter '${name}'.""",
+      problemMessage: """Conflicts with setter '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -1153,7 +1178,7 @@
 const Template<Message Function(String name)>
     templateConflictsWithTypeVariable =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Conflicts with type variable '#name'.""",
+        problemMessageTemplate: r"""Conflicts with type variable '#name'.""",
         withArguments: _withArgumentsConflictsWithTypeVariable);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1166,7 +1191,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConflictsWithTypeVariable,
-      message: """Conflicts with type variable '${name}'.""",
+      problemMessage: """Conflicts with type variable '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -1178,7 +1203,7 @@
 const MessageCode messageConflictsWithTypeVariableCause = const MessageCode(
     "ConflictsWithTypeVariableCause",
     severity: Severity.context,
-    message: r"""This is the type variable.""");
+    problemMessage: r"""This is the type variable.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstAndFinal = messageConstAndFinal;
@@ -1186,8 +1211,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstAndFinal = const MessageCode("ConstAndFinal",
     index: 58,
-    message: r"""Members can't be declared to be both 'const' and 'final'.""",
-    tip: r"""Try removing either the 'const' or 'final' keyword.""");
+    problemMessage:
+        r"""Members can't be declared to be both 'const' and 'final'.""",
+    correctionMessage:
+        r"""Try removing either the 'const' or 'final' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstClass = messageConstClass;
@@ -1195,8 +1222,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstClass = const MessageCode("ConstClass",
     index: 60,
-    message: r"""Classes can't be declared to be 'const'.""",
-    tip:
+    problemMessage: r"""Classes can't be declared to be 'const'.""",
+    correctionMessage:
         r"""Try removing the 'const' keyword. If you're trying to indicate that instances of the class can be constants, place the 'const' keyword on  the class' constructor(s).""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1206,7 +1233,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstConstructorLateFinalFieldCause =
     const MessageCode("ConstConstructorLateFinalFieldCause",
-        severity: Severity.context, message: r"""This constructor is const.""");
+        severity: Severity.context,
+        problemMessage: r"""This constructor is const.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstConstructorLateFinalFieldError =
@@ -1215,7 +1243,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstConstructorLateFinalFieldError = const MessageCode(
     "ConstConstructorLateFinalFieldError",
-    message:
+    problemMessage:
         r"""Can't have a late final field in a class with a const constructor.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1226,7 +1254,8 @@
 const MessageCode messageConstConstructorNonFinalField = const MessageCode(
     "ConstConstructorNonFinalField",
     analyzerCodes: <String>["CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD"],
-    message: r"""Constructor is marked 'const' so all fields must be final.""");
+    problemMessage:
+        r"""Constructor is marked 'const' so all fields must be final.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstConstructorNonFinalFieldCause =
@@ -1236,7 +1265,7 @@
 const MessageCode messageConstConstructorNonFinalFieldCause = const MessageCode(
     "ConstConstructorNonFinalFieldCause",
     severity: Severity.context,
-    message: r"""Field isn't final, but constructor is 'const'.""");
+    problemMessage: r"""Field isn't final, but constructor is 'const'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstConstructorRedirectionToNonConst =
@@ -1245,7 +1274,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstConstructorRedirectionToNonConst =
     const MessageCode("ConstConstructorRedirectionToNonConst",
-        message:
+        problemMessage:
             r"""A constant constructor can't call a non-constant constructor.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1255,8 +1284,9 @@
 const MessageCode messageConstConstructorWithBody = const MessageCode(
     "ConstConstructorWithBody",
     analyzerCodes: <String>["CONST_CONSTRUCTOR_WITH_BODY"],
-    message: r"""A const constructor can't have a body.""",
-    tip: r"""Try removing either the 'const' keyword or the body.""");
+    problemMessage: r"""A const constructor can't have a body.""",
+    correctionMessage:
+        r"""Try removing either the 'const' keyword or the body.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstConstructorWithNonConstSuper =
@@ -1266,7 +1296,7 @@
 const MessageCode messageConstConstructorWithNonConstSuper = const MessageCode(
     "ConstConstructorWithNonConstSuper",
     analyzerCodes: <String>["CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER"],
-    message:
+    problemMessage:
         r"""A constant constructor can't call a non-constant super constructor.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1276,14 +1306,15 @@
 const MessageCode messageConstEvalCircularity = const MessageCode(
     "ConstEvalCircularity",
     analyzerCodes: <String>["RECURSIVE_COMPILE_TIME_CONSTANT"],
-    message: r"""Constant expression depends on itself.""");
+    problemMessage: r"""Constant expression depends on itself.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstEvalContext = messageConstEvalContext;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageConstEvalContext =
-    const MessageCode("ConstEvalContext", message: r"""While analyzing:""");
+const MessageCode messageConstEvalContext = const MessageCode(
+    "ConstEvalContext",
+    problemMessage: r"""While analyzing:""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -1291,9 +1322,9 @@
         String
             nameOKEmpty)> templateConstEvalDeferredLibrary = const Template<
         Message Function(String nameOKEmpty)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""'#nameOKEmpty' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try moving the constant from the deferred library, or removing 'deferred' from the import.
 """,
     withArguments: _withArgumentsConstEvalDeferredLibrary);
@@ -1310,9 +1341,9 @@
   // ignore: unnecessary_null_comparison
   if (nameOKEmpty == null || nameOKEmpty.isEmpty) nameOKEmpty = '(unnamed)';
   return new Message(codeConstEvalDeferredLibrary,
-      message:
+      problemMessage:
           """'${nameOKEmpty}' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.""",
-      tip: """Try moving the constant from the deferred library, or removing 'deferred' from the import.
+      correctionMessage: """Try moving the constant from the deferred library, or removing 'deferred' from the import.
 """,
       arguments: {'nameOKEmpty': nameOKEmpty});
 }
@@ -1320,7 +1351,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templateConstEvalError =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""Error evaluating constant expression: #string""",
+        problemMessageTemplate:
+            r"""Error evaluating constant expression: #string""",
         withArguments: _withArgumentsConstEvalError);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1333,7 +1365,7 @@
 Message _withArgumentsConstEvalError(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeConstEvalError,
-      message: """Error evaluating constant expression: ${string}""",
+      problemMessage: """Error evaluating constant expression: ${string}""",
       arguments: {'string': string});
 }
 
@@ -1344,7 +1376,7 @@
 const MessageCode messageConstEvalExtension = const MessageCode(
     "ConstEvalExtension",
     analyzerCodes: <String>["NOT_CONSTANT_EXPRESSION"],
-    message:
+    problemMessage:
         r"""Extension operations can't be used in constant expressions.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1354,7 +1386,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstEvalExternalConstructor = const MessageCode(
     "ConstEvalExternalConstructor",
-    message:
+    problemMessage:
         r"""External constructors can't be evaluated in constant expressions.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1363,7 +1395,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstEvalExternalFactory = const MessageCode(
     "ConstEvalExternalFactory",
-    message:
+    problemMessage:
         r"""External factory constructors can't be evaluated in constant expressions.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1373,13 +1405,13 @@
 const MessageCode messageConstEvalFailedAssertion = const MessageCode(
     "ConstEvalFailedAssertion",
     analyzerCodes: <String>["CONST_EVAL_THROWS_EXCEPTION"],
-    message: r"""This assertion failed.""");
+    problemMessage: r"""This assertion failed.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String stringOKEmpty)>
     templateConstEvalFailedAssertionWithMessage =
     const Template<Message Function(String stringOKEmpty)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""This assertion failed with message: #stringOKEmpty""",
         withArguments: _withArgumentsConstEvalFailedAssertionWithMessage);
 
@@ -1396,7 +1428,8 @@
   // ignore: unnecessary_null_comparison
   if (stringOKEmpty == null || stringOKEmpty.isEmpty) stringOKEmpty = '(empty)';
   return new Message(codeConstEvalFailedAssertionWithMessage,
-      message: """This assertion failed with message: ${stringOKEmpty}""",
+      problemMessage:
+          """This assertion failed with message: ${stringOKEmpty}""",
       arguments: {'stringOKEmpty': stringOKEmpty});
 }
 
@@ -1404,7 +1437,7 @@
 const Template<Message Function(String nameOKEmpty)>
     templateConstEvalGetterNotFound =
     const Template<Message Function(String nameOKEmpty)>(
-        messageTemplate: r"""Variable get not found: '#nameOKEmpty'""",
+        problemMessageTemplate: r"""Variable get not found: '#nameOKEmpty'""",
         withArguments: _withArgumentsConstEvalGetterNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1418,7 +1451,7 @@
   // ignore: unnecessary_null_comparison
   if (nameOKEmpty == null || nameOKEmpty.isEmpty) nameOKEmpty = '(unnamed)';
   return new Message(codeConstEvalGetterNotFound,
-      message: """Variable get not found: '${nameOKEmpty}'""",
+      problemMessage: """Variable get not found: '${nameOKEmpty}'""",
       arguments: {'nameOKEmpty': nameOKEmpty});
 }
 
@@ -1426,7 +1459,7 @@
 const Template<Message Function(String nameOKEmpty)>
     templateConstEvalInvalidStaticInvocation =
     const Template<Message Function(String nameOKEmpty)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The invocation of '#nameOKEmpty' is not allowed in a constant expression.""",
         withArguments: _withArgumentsConstEvalInvalidStaticInvocation);
 
@@ -1442,7 +1475,7 @@
   // ignore: unnecessary_null_comparison
   if (nameOKEmpty == null || nameOKEmpty.isEmpty) nameOKEmpty = '(unnamed)';
   return new Message(codeConstEvalInvalidStaticInvocation,
-      message:
+      problemMessage:
           """The invocation of '${nameOKEmpty}' is not allowed in a constant expression.""",
       arguments: {'nameOKEmpty': nameOKEmpty});
 }
@@ -1455,7 +1488,7 @@
         String
             string3)> templateConstEvalNegativeShift = const Template<
         Message Function(String string, String string2, String string3)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Binary operator '#string' on '#string2' requires non-negative operand, but was '#string3'.""",
     withArguments: _withArgumentsConstEvalNegativeShift);
 
@@ -1473,7 +1506,7 @@
   if (string2.isEmpty) throw 'No string provided';
   if (string3.isEmpty) throw 'No string provided';
   return new Message(codeConstEvalNegativeShift,
-      message:
+      problemMessage:
           """Binary operator '${string}' on '${string2}' requires non-negative operand, but was '${string3}'.""",
       arguments: {'string': string, 'string2': string2, 'string3': string3});
 }
@@ -1484,7 +1517,7 @@
         String
             nameOKEmpty)> templateConstEvalNonConstantVariableGet = const Template<
         Message Function(String nameOKEmpty)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The variable '#nameOKEmpty' is not a constant, only constant expressions are allowed.""",
     withArguments: _withArgumentsConstEvalNonConstantVariableGet);
 
@@ -1500,7 +1533,7 @@
   // ignore: unnecessary_null_comparison
   if (nameOKEmpty == null || nameOKEmpty.isEmpty) nameOKEmpty = '(unnamed)';
   return new Message(codeConstEvalNonConstantVariableGet,
-      message:
+      problemMessage:
           """The variable '${nameOKEmpty}' is not a constant, only constant expressions are allowed.""",
       arguments: {'nameOKEmpty': nameOKEmpty});
 }
@@ -1511,7 +1544,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstEvalNonNull = const MessageCode(
     "ConstEvalNonNull",
-    message: r"""Constant expression must be non-null.""");
+    problemMessage: r"""Constant expression must be non-null.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstEvalNotListOrSetInSpread =
@@ -1521,7 +1554,7 @@
 const MessageCode messageConstEvalNotListOrSetInSpread = const MessageCode(
     "ConstEvalNotListOrSetInSpread",
     analyzerCodes: <String>["CONST_SPREAD_EXPECTED_LIST_OR_SET"],
-    message:
+    problemMessage:
         r"""Only lists and sets can be used in spreads in constant lists and sets.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1531,7 +1564,7 @@
 const MessageCode messageConstEvalNotMapInSpread = const MessageCode(
     "ConstEvalNotMapInSpread",
     analyzerCodes: <String>["CONST_SPREAD_EXPECTED_MAP"],
-    message: r"""Only maps can be used in spreads in constant maps.""");
+    problemMessage: r"""Only maps can be used in spreads in constant maps.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstEvalNullValue = messageConstEvalNullValue;
@@ -1540,7 +1573,7 @@
 const MessageCode messageConstEvalNullValue = const MessageCode(
     "ConstEvalNullValue",
     analyzerCodes: <String>["CONST_EVAL_THROWS_EXCEPTION"],
-    message: r"""Null value during constant evaluation.""");
+    problemMessage: r"""Null value during constant evaluation.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstEvalStartingPoint = messageConstEvalStartingPoint;
@@ -1548,7 +1581,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstEvalStartingPoint = const MessageCode(
     "ConstEvalStartingPoint",
-    message: r"""Constant evaluation error:""");
+    problemMessage: r"""Constant evaluation error:""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -1557,7 +1590,7 @@
         String
             string2)> templateConstEvalTruncateError = const Template<
         Message Function(String string, String string2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Binary operator '#string ~/ #string2' results is Infinity or NaN.""",
     withArguments: _withArgumentsConstEvalTruncateError);
 
@@ -1573,7 +1606,7 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeConstEvalTruncateError,
-      message:
+      problemMessage:
           """Binary operator '${string} ~/ ${string2}' results is Infinity or NaN.""",
       arguments: {'string': string, 'string2': string2});
 }
@@ -1584,13 +1617,13 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstEvalUnevaluated = const MessageCode(
     "ConstEvalUnevaluated",
-    message: r"""Couldn't evaluate constant expression.""");
+    problemMessage: r"""Couldn't evaluate constant expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String stringOKEmpty)>
     templateConstEvalUnhandledCoreException =
     const Template<Message Function(String stringOKEmpty)>(
-        messageTemplate: r"""Unhandled core exception: #stringOKEmpty""",
+        problemMessageTemplate: r"""Unhandled core exception: #stringOKEmpty""",
         withArguments: _withArgumentsConstEvalUnhandledCoreException);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1605,7 +1638,7 @@
   // ignore: unnecessary_null_comparison
   if (stringOKEmpty == null || stringOKEmpty.isEmpty) stringOKEmpty = '(empty)';
   return new Message(codeConstEvalUnhandledCoreException,
-      message: """Unhandled core exception: ${stringOKEmpty}""",
+      problemMessage: """Unhandled core exception: ${stringOKEmpty}""",
       arguments: {'stringOKEmpty': stringOKEmpty});
 }
 
@@ -1616,7 +1649,7 @@
         String
             string2)> templateConstEvalZeroDivisor = const Template<
         Message Function(String string, String string2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Binary operator '#string' on '#string2' requires non-zero divisor, but divisor was '0'.""",
     withArguments: _withArgumentsConstEvalZeroDivisor);
 
@@ -1632,7 +1665,7 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeConstEvalZeroDivisor,
-      message:
+      problemMessage:
           """Binary operator '${string}' on '${string2}' requires non-zero divisor, but divisor was '0'.""",
       arguments: {'string': string, 'string2': string2});
 }
@@ -1643,9 +1676,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstFactory = const MessageCode("ConstFactory",
     index: 62,
-    message:
+    problemMessage:
         r"""Only redirecting factory constructors can be declared to be 'const'.""",
-    tip:
+    correctionMessage:
         r"""Try removing the 'const' keyword, or replacing the body with '=' followed by a valid target.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1656,9 +1689,9 @@
 const MessageCode messageConstFactoryRedirectionToNonConst = const MessageCode(
     "ConstFactoryRedirectionToNonConst",
     analyzerCodes: <String>["REDIRECT_TO_NON_CONST_CONSTRUCTOR"],
-    message:
+    problemMessage:
         r"""Constant factory constructor can't delegate to a non-constant constructor.""",
-    tip:
+    correctionMessage:
         r"""Try redirecting to a different constructor or marking the target constructor 'const'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1667,8 +1700,9 @@
         String
             name)> templateConstFieldWithoutInitializer = const Template<
         Message Function(String name)>(
-    messageTemplate: r"""The const variable '#name' must be initialized.""",
-    tipTemplate:
+    problemMessageTemplate:
+        r"""The const variable '#name' must be initialized.""",
+    correctionMessageTemplate:
         r"""Try adding an initializer ('= expression') to the declaration.""",
     withArguments: _withArgumentsConstFieldWithoutInitializer);
 
@@ -1682,8 +1716,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConstFieldWithoutInitializer,
-      message: """The const variable '${name}' must be initialized.""",
-      tip: """Try adding an initializer ('= expression') to the declaration.""",
+      problemMessage: """The const variable '${name}' must be initialized.""",
+      correctionMessage:
+          """Try adding an initializer ('= expression') to the declaration.""",
       arguments: {'name': name});
 }
 
@@ -1694,8 +1729,8 @@
 const MessageCode messageConstInstanceField = const MessageCode(
     "ConstInstanceField",
     analyzerCodes: <String>["CONST_INSTANCE_FIELD"],
-    message: r"""Only static fields can be declared as const.""",
-    tip:
+    problemMessage: r"""Only static fields can be declared as const.""",
+    correctionMessage:
         r"""Try using 'final' instead of 'const', or adding the keyword 'static'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1704,9 +1739,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstMethod = const MessageCode("ConstMethod",
     index: 63,
-    message:
+    problemMessage:
         r"""Getters, setters and methods can't be declared to be 'const'.""",
-    tip: r"""Try removing the 'const' keyword.""");
+    correctionMessage: r"""Try removing the 'const' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstructorCyclic = messageConstructorCyclic;
@@ -1715,15 +1750,15 @@
 const MessageCode messageConstructorCyclic = const MessageCode(
     "ConstructorCyclic",
     analyzerCodes: <String>["RECURSIVE_CONSTRUCTOR_REDIRECT"],
-    message: r"""Redirecting constructors can't be cyclic.""",
-    tip:
+    problemMessage: r"""Redirecting constructors can't be cyclic.""",
+    correctionMessage:
         r"""Try to have all constructors eventually redirect to a non-redirecting constructor.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateConstructorInitializeSameInstanceVariableSeveralTimes =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#name' was already initialized by this constructor.""",
         withArguments:
             _withArgumentsConstructorInitializeSameInstanceVariableSeveralTimes);
@@ -1741,14 +1776,15 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConstructorInitializeSameInstanceVariableSeveralTimes,
-      message: """'${name}' was already initialized by this constructor.""",
+      problemMessage:
+          """'${name}' was already initialized by this constructor.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateConstructorNotFound =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Couldn't find constructor '#name'.""",
+        problemMessageTemplate: r"""Couldn't find constructor '#name'.""",
         withArguments: _withArgumentsConstructorNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1761,7 +1797,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConstructorNotFound,
-      message: """Couldn't find constructor '${name}'.""",
+      problemMessage: """Couldn't find constructor '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -1772,7 +1808,7 @@
 const MessageCode messageConstructorNotSync = const MessageCode(
     "ConstructorNotSync",
     analyzerCodes: <String>["NON_SYNC_CONSTRUCTOR"],
-    message:
+    problemMessage:
         r"""Constructor bodies can't use 'async', 'async*', or 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1782,9 +1818,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstructorTearOffWithTypeArguments = const MessageCode(
     "ConstructorTearOffWithTypeArguments",
-    message:
+    problemMessage:
         r"""A constructor tear-off can't have type arguments after the constructor name.""",
-    tip:
+    correctionMessage:
         r"""Try removing the type arguments or placing them after the class name.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1795,8 +1831,8 @@
 const MessageCode messageConstructorWithReturnType = const MessageCode(
     "ConstructorWithReturnType",
     index: 55,
-    message: r"""Constructors can't have a return type.""",
-    tip: r"""Try removing the return type.""");
+    problemMessage: r"""Constructors can't have a return type.""",
+    correctionMessage: r"""Try removing the return type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstructorWithTypeArguments =
@@ -1806,9 +1842,9 @@
 const MessageCode messageConstructorWithTypeArguments = const MessageCode(
     "ConstructorWithTypeArguments",
     index: 118,
-    message:
+    problemMessage:
         r"""A constructor invocation can't have type arguments after the constructor name.""",
-    tip:
+    correctionMessage:
         r"""Try removing the type arguments or placing them after the class name.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1819,8 +1855,8 @@
 const MessageCode messageConstructorWithTypeParameters = const MessageCode(
     "ConstructorWithTypeParameters",
     index: 99,
-    message: r"""Constructors can't have type parameters.""",
-    tip: r"""Try removing the type parameters.""");
+    problemMessage: r"""Constructors can't have type parameters.""",
+    correctionMessage: r"""Try removing the type parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstructorWithWrongName = messageConstructorWithWrongName;
@@ -1829,14 +1865,15 @@
 const MessageCode messageConstructorWithWrongName = const MessageCode(
     "ConstructorWithWrongName",
     index: 102,
-    message:
+    problemMessage:
         r"""The name of a constructor must match the name of the enclosing class.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateConstructorWithWrongNameContext =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""The name of the enclosing class is '#name'.""",
+        problemMessageTemplate:
+            r"""The name of the enclosing class is '#name'.""",
         withArguments: _withArgumentsConstructorWithWrongNameContext);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1849,7 +1886,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeConstructorWithWrongNameContext,
-      message: """The name of the enclosing class is '${name}'.""",
+      problemMessage: """The name of the enclosing class is '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -1860,7 +1897,7 @@
 const MessageCode messageContinueLabelNotTarget = const MessageCode(
     "ContinueLabelNotTarget",
     analyzerCodes: <String>["LABEL_UNDEFINED"],
-    message: r"""Target of continue must be a label.""");
+    problemMessage: r"""Target of continue must be a label.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeContinueOutsideOfLoop = messageContinueOutsideOfLoop;
@@ -1869,15 +1906,15 @@
 const MessageCode messageContinueOutsideOfLoop = const MessageCode(
     "ContinueOutsideOfLoop",
     index: 2,
-    message:
+    problemMessage:
         r"""A continue statement can't be used outside of a loop or switch statement.""",
-    tip: r"""Try removing the continue statement.""");
+    correctionMessage: r"""Try removing the continue statement.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateContinueTargetOutsideFunction =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't continue at '#name' in a different function.""",
         withArguments: _withArgumentsContinueTargetOutsideFunction);
 
@@ -1891,7 +1928,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeContinueTargetOutsideFunction,
-      message: """Can't continue at '${name}' in a different function.""",
+      problemMessage:
+          """Can't continue at '${name}' in a different function.""",
       arguments: {'name': name});
 }
 
@@ -1903,16 +1941,16 @@
 const MessageCode messageContinueWithoutLabelInCase = const MessageCode(
     "ContinueWithoutLabelInCase",
     index: 64,
-    message:
+    problemMessage:
         r"""A continue statement in a switch statement must have a label as a target.""",
-    tip:
+    correctionMessage:
         r"""Try adding a label associated with one of the case clauses to the continue statement.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string, String string2)>
     templateCouldNotParseUri =
     const Template<Message Function(String string, String string2)>(
-        messageTemplate: r"""Couldn't parse URI '#string':
+        problemMessageTemplate: r"""Couldn't parse URI '#string':
   #string2.""", withArguments: _withArgumentsCouldNotParseUri);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1927,7 +1965,7 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeCouldNotParseUri,
-      message: """Couldn't parse URI '${string}':
+      problemMessage: """Couldn't parse URI '${string}':
   ${string2}.""", arguments: {'string': string, 'string2': string2});
 }
 
@@ -1938,9 +1976,10 @@
 const MessageCode messageCovariantAndStatic = const MessageCode(
     "CovariantAndStatic",
     index: 66,
-    message:
+    problemMessage:
         r"""Members can't be declared to be both 'covariant' and 'static'.""",
-    tip: r"""Try removing either the 'covariant' or 'static' keyword.""");
+    correctionMessage:
+        r"""Try removing either the 'covariant' or 'static' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCovariantMember = messageCovariantMember;
@@ -1948,21 +1987,19 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCovariantMember = const MessageCode("CovariantMember",
     index: 67,
-    message:
+    problemMessage:
         r"""Getters, setters and methods can't be declared to be 'covariant'.""",
-    tip: r"""Try removing the 'covariant' keyword.""");
+    correctionMessage: r"""Try removing the 'covariant' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-    Message Function(
-        String name,
-        String
-            string)> templateCycleInTypeVariables = const Template<
-        Message Function(String name, String string)>(
-    messageTemplate: r"""Type '#name' is a bound of itself via '#string'.""",
-    tipTemplate:
-        r"""Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.""",
-    withArguments: _withArgumentsCycleInTypeVariables);
+const Template<Message Function(String name, String string)>
+    templateCycleInTypeVariables =
+    const Template<Message Function(String name, String string)>(
+        problemMessageTemplate:
+            r"""Type '#name' is a bound of itself via '#string'.""",
+        correctionMessageTemplate:
+            r"""Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.""",
+        withArguments: _withArgumentsCycleInTypeVariables);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name, String string)>
@@ -1977,8 +2014,9 @@
   name = demangleMixinApplicationName(name);
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeCycleInTypeVariables,
-      message: """Type '${name}' is a bound of itself via '${string}'.""",
-      tip:
+      problemMessage:
+          """Type '${name}' is a bound of itself via '${string}'.""",
+      correctionMessage:
           """Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.""",
       arguments: {'name': name, 'string': string});
 }
@@ -1986,7 +2024,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateCyclicClassHierarchy =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""'#name' is a supertype of itself.""",
+        problemMessageTemplate: r"""'#name' is a supertype of itself.""",
         withArguments: _withArgumentsCyclicClassHierarchy);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1999,7 +2037,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeCyclicClassHierarchy,
-      message: """'${name}' is a supertype of itself.""",
+      problemMessage: """'${name}' is a supertype of itself.""",
       arguments: {'name': name});
 }
 
@@ -2007,7 +2045,7 @@
 const Template<Message Function(String name)>
     templateCyclicRedirectingFactoryConstructors =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Cyclic definition of factory '#name'.""",
+        problemMessageTemplate: r"""Cyclic definition of factory '#name'.""",
         withArguments: _withArgumentsCyclicRedirectingFactoryConstructors);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2022,14 +2060,15 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeCyclicRedirectingFactoryConstructors,
-      message: """Cyclic definition of factory '${name}'.""",
+      problemMessage: """Cyclic definition of factory '${name}'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateCyclicTypedef =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""The typedef '#name' has a reference to itself.""",
+        problemMessageTemplate:
+            r"""The typedef '#name' has a reference to itself.""",
         withArguments: _withArgumentsCyclicTypedef);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2042,7 +2081,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeCyclicTypedef,
-      message: """The typedef '${name}' has a reference to itself.""",
+      problemMessage: """The typedef '${name}' has a reference to itself.""",
       arguments: {'name': name});
 }
 
@@ -2050,7 +2089,7 @@
 const Template<Message Function(String name, String string)>
     templateDebugTrace =
     const Template<Message Function(String name, String string)>(
-        messageTemplate: r"""Fatal '#name' at:
+        problemMessageTemplate: r"""Fatal '#name' at:
 #string""", withArguments: _withArgumentsDebugTrace);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2063,7 +2102,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   if (string.isEmpty) throw 'No string provided';
-  return new Message(codeDebugTrace, message: """Fatal '${name}' at:
+  return new Message(codeDebugTrace, problemMessage: """Fatal '${name}' at:
 ${string}""", arguments: {'name': name, 'string': string});
 }
 
@@ -2075,7 +2114,7 @@
 const MessageCode messageDeclaredMemberConflictsWithInheritedMember =
     const MessageCode("DeclaredMemberConflictsWithInheritedMember",
         analyzerCodes: <String>["DECLARED_MEMBER_CONFLICTS_WITH_INHERITED"],
-        message:
+        problemMessage:
             r"""Can't declare a member that conflicts with an inherited one.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2086,7 +2125,7 @@
 const MessageCode messageDeclaredMemberConflictsWithInheritedMemberCause =
     const MessageCode("DeclaredMemberConflictsWithInheritedMemberCause",
         severity: Severity.context,
-        message: r"""This is the inherited member.""");
+        problemMessage: r"""This is the inherited member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeDeclaredMemberConflictsWithOverriddenMembersCause =
@@ -2096,7 +2135,7 @@
 const MessageCode messageDeclaredMemberConflictsWithOverriddenMembersCause =
     const MessageCode("DeclaredMemberConflictsWithOverriddenMembersCause",
         severity: Severity.context,
-        message: r"""This is one of the overridden members.""");
+        problemMessage: r"""This is one of the overridden members.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeDefaultListConstructorError =
@@ -2105,16 +2144,16 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageDefaultListConstructorError = const MessageCode(
     "DefaultListConstructorError",
-    message: r"""Can't use the default List constructor.""",
-    tip: r"""Try using List.filled instead.""");
+    problemMessage: r"""Can't use the default List constructor.""",
+    correctionMessage: r"""Try using List.filled instead.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateDefaultValueInRedirectingFactoryConstructor =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't have a default value here because any default values of '#name' would be used instead.""",
-        tipTemplate: r"""Try removing the default value.""",
+        correctionMessageTemplate: r"""Try removing the default value.""",
         withArguments:
             _withArgumentsDefaultValueInRedirectingFactoryConstructor);
 
@@ -2132,9 +2171,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDefaultValueInRedirectingFactoryConstructor,
-      message:
+      problemMessage:
           """Can't have a default value here because any default values of '${name}' would be used instead.""",
-      tip: """Try removing the default value.""",
+      correctionMessage: """Try removing the default value.""",
       arguments: {'name': name});
 }
 
@@ -2145,9 +2184,10 @@
 const MessageCode messageDeferredAfterPrefix = const MessageCode(
     "DeferredAfterPrefix",
     index: 68,
-    message:
+    problemMessage:
         r"""The deferred keyword should come immediately before the prefix ('as' clause).""",
-    tip: r"""Try moving the deferred keyword before the prefix.""");
+    correctionMessage:
+        r"""Try moving the deferred keyword before the prefix.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -2155,9 +2195,10 @@
         String
             name)> templateDeferredExtensionImport = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Extension '#name' cannot be imported through a deferred import.""",
-    tipTemplate: r"""Try adding the `hide #name` to the import.""",
+    correctionMessageTemplate:
+        r"""Try adding the `hide #name` to the import.""",
     withArguments: _withArgumentsDeferredExtensionImport);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2171,9 +2212,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDeferredExtensionImport,
-      message:
+      problemMessage:
           """Extension '${name}' cannot be imported through a deferred import.""",
-      tip: """Try adding the `hide ${name}` to the import.""",
+      correctionMessage: """Try adding the `hide ${name}` to the import.""",
       arguments: {'name': name});
 }
 
@@ -2183,7 +2224,7 @@
         String
             name)> templateDeferredPrefixDuplicated = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Can't use the name '#name' for a deferred library, as the name is used elsewhere.""",
     withArguments: _withArgumentsDeferredPrefixDuplicated);
 
@@ -2197,7 +2238,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDeferredPrefixDuplicated,
-      message:
+      problemMessage:
           """Can't use the name '${name}' for a deferred library, as the name is used elsewhere.""",
       arguments: {'name': name});
 }
@@ -2206,7 +2247,7 @@
 const Template<Message Function(String name)>
     templateDeferredPrefixDuplicatedCause =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""'#name' is used here.""",
+        problemMessageTemplate: r"""'#name' is used here.""",
         withArguments: _withArgumentsDeferredPrefixDuplicatedCause);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2219,7 +2260,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDeferredPrefixDuplicatedCause,
-      message: """'${name}' is used here.""", arguments: {'name': name});
+      problemMessage: """'${name}' is used here.""", arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2229,7 +2270,7 @@
     templateDillOutlineSummary = const Template<
             Message Function(
                 int count, int count2, num _num1, num _num2, num _num3)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Indexed #count libraries (#count2 bytes) in #num1%.3ms, that is,
 #num2%12.3 bytes/ms, and
 #num3%12.3 ms/libraries.""",
@@ -2260,7 +2301,7 @@
   if (_num3 == null) throw 'No number provided';
   String num3 = _num3.toStringAsFixed(3).padLeft(12);
   return new Message(codeDillOutlineSummary,
-      message:
+      problemMessage:
           """Indexed ${count} libraries (${count2} bytes) in ${num1}ms, that is,
 ${num2} bytes/ms, and
 ${num3} ms/libraries.""",
@@ -2279,8 +2320,8 @@
         String
             name)> templateDirectCycleInTypeVariables = const Template<
         Message Function(String name)>(
-    messageTemplate: r"""Type '#name' can't use itself as a bound.""",
-    tipTemplate:
+    problemMessageTemplate: r"""Type '#name' can't use itself as a bound.""",
+    correctionMessageTemplate:
         r"""Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.""",
     withArguments: _withArgumentsDirectCycleInTypeVariables);
 
@@ -2294,8 +2335,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDirectCycleInTypeVariables,
-      message: """Type '${name}' can't use itself as a bound.""",
-      tip:
+      problemMessage: """Type '${name}' can't use itself as a bound.""",
+      correctionMessage:
           """Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.""",
       arguments: {'name': name});
 }
@@ -2308,8 +2349,9 @@
 const MessageCode messageDirectiveAfterDeclaration = const MessageCode(
     "DirectiveAfterDeclaration",
     index: 69,
-    message: r"""Directives must appear before any declarations.""",
-    tip: r"""Try moving the directive before any declarations.""");
+    problemMessage: r"""Directives must appear before any declarations.""",
+    correctionMessage:
+        r"""Try moving the directive before any declarations.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeDuplicateDeferred = messageDuplicateDeferred;
@@ -2318,16 +2360,18 @@
 const MessageCode messageDuplicateDeferred = const MessageCode(
     "DuplicateDeferred",
     index: 71,
-    message: r"""An import directive can only have one 'deferred' keyword.""",
-    tip: r"""Try removing all but one 'deferred' keyword.""");
+    problemMessage:
+        r"""An import directive can only have one 'deferred' keyword.""",
+    correctionMessage: r"""Try removing all but one 'deferred' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateDuplicateLabelInSwitchStatement =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The label '#name' was already used in this switch statement.""",
-        tipTemplate: r"""Try choosing a different name for this label.""",
+        correctionMessageTemplate:
+            r"""Try choosing a different name for this label.""",
         withArguments: _withArgumentsDuplicateLabelInSwitchStatement);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2340,9 +2384,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicateLabelInSwitchStatement,
-      message:
+      problemMessage:
           """The label '${name}' was already used in this switch statement.""",
-      tip: """Try choosing a different name for this label.""",
+      correctionMessage: """Try choosing a different name for this label.""",
       arguments: {'name': name});
 }
 
@@ -2352,13 +2396,15 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageDuplicatePrefix = const MessageCode("DuplicatePrefix",
     index: 73,
-    message: r"""An import directive can only have one prefix ('as' clause).""",
-    tip: r"""Try removing all but one prefix.""");
+    problemMessage:
+        r"""An import directive can only have one prefix ('as' clause).""",
+    correctionMessage: r"""Try removing all but one prefix.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateDuplicatedDeclaration =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""'#name' is already declared in this scope.""",
+        problemMessageTemplate:
+            r"""'#name' is already declared in this scope.""",
         withArguments: _withArgumentsDuplicatedDeclaration);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2371,7 +2417,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicatedDeclaration,
-      message: """'${name}' is already declared in this scope.""",
+      problemMessage: """'${name}' is already declared in this scope.""",
       arguments: {'name': name});
 }
 
@@ -2379,7 +2425,7 @@
 const Template<Message Function(String name)>
     templateDuplicatedDeclarationCause =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Previous declaration of '#name'.""",
+        problemMessageTemplate: r"""Previous declaration of '#name'.""",
         withArguments: _withArgumentsDuplicatedDeclarationCause);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2392,7 +2438,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicatedDeclarationCause,
-      message: """Previous declaration of '${name}'.""",
+      problemMessage: """Previous declaration of '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -2402,7 +2448,7 @@
         String
             name)> templateDuplicatedDeclarationSyntheticCause = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Previous declaration of '#name' is implied by this definition.""",
     withArguments: _withArgumentsDuplicatedDeclarationSyntheticCause);
 
@@ -2418,7 +2464,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicatedDeclarationSyntheticCause,
-      message:
+      problemMessage:
           """Previous declaration of '${name}' is implied by this definition.""",
       arguments: {'name': name});
 }
@@ -2426,7 +2472,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateDuplicatedDeclarationUse =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't use '#name' because it is declared more than once.""",
         withArguments: _withArgumentsDuplicatedDeclarationUse);
 
@@ -2441,7 +2487,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicatedDeclarationUse,
-      message: """Can't use '${name}' because it is declared more than once.""",
+      problemMessage:
+          """Can't use '${name}' because it is declared more than once.""",
       arguments: {'name': name});
 }
 
@@ -2449,7 +2496,7 @@
 const Template<Message Function(String name, Uri uri_, Uri uri2_)>
     templateDuplicatedExport =
     const Template<Message Function(String name, Uri uri_, Uri uri2_)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#name' is exported from both '#uri' and '#uri2'.""",
         withArguments: _withArgumentsDuplicatedExport);
 
@@ -2467,7 +2514,8 @@
   String? uri = relativizeUri(uri_);
   String? uri2 = relativizeUri(uri2_);
   return new Message(codeDuplicatedExport,
-      message: """'${name}' is exported from both '${uri}' and '${uri2}'.""",
+      problemMessage:
+          """'${name}' is exported from both '${uri}' and '${uri2}'.""",
       arguments: {'name': name, 'uri': uri_, 'uri2': uri2_});
 }
 
@@ -2475,7 +2523,7 @@
 const Template<Message Function(String name, Uri uri_, Uri uri2_)>
     templateDuplicatedExportInType =
     const Template<Message Function(String name, Uri uri_, Uri uri2_)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#name' is exported from both '#uri' and '#uri2'.""",
         withArguments: _withArgumentsDuplicatedExportInType);
 
@@ -2493,7 +2541,8 @@
   String? uri = relativizeUri(uri_);
   String? uri2 = relativizeUri(uri2_);
   return new Message(codeDuplicatedExportInType,
-      message: """'${name}' is exported from both '${uri}' and '${uri2}'.""",
+      problemMessage:
+          """'${name}' is exported from both '${uri}' and '${uri2}'.""",
       arguments: {'name': name, 'uri': uri_, 'uri2': uri2_});
 }
 
@@ -2501,7 +2550,7 @@
 const Template<Message Function(String name, Uri uri_, Uri uri2_)>
     templateDuplicatedImportInType =
     const Template<Message Function(String name, Uri uri_, Uri uri2_)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#name' is imported from both '#uri' and '#uri2'.""",
         withArguments: _withArgumentsDuplicatedImportInType);
 
@@ -2519,15 +2568,17 @@
   String? uri = relativizeUri(uri_);
   String? uri2 = relativizeUri(uri2_);
   return new Message(codeDuplicatedImportInType,
-      message: """'${name}' is imported from both '${uri}' and '${uri2}'.""",
+      problemMessage:
+          """'${name}' is imported from both '${uri}' and '${uri2}'.""",
       arguments: {'name': name, 'uri': uri_, 'uri2': uri2_});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateDuplicatedModifier =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""The modifier '#lexeme' was already specified.""",
-        tipTemplate:
+        problemMessageTemplate:
+            r"""The modifier '#lexeme' was already specified.""",
+        correctionMessageTemplate:
             r"""Try removing all but one occurrence of the modifier.""",
         withArguments: _withArgumentsDuplicatedModifier);
 
@@ -2539,8 +2590,9 @@
 Message _withArgumentsDuplicatedModifier(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeDuplicatedModifier,
-      message: """The modifier '${lexeme}' was already specified.""",
-      tip: """Try removing all but one occurrence of the modifier.""",
+      problemMessage: """The modifier '${lexeme}' was already specified.""",
+      correctionMessage:
+          """Try removing all but one occurrence of the modifier.""",
       arguments: {'lexeme': token});
 }
 
@@ -2550,7 +2602,7 @@
         String
             name)> templateDuplicatedNamePreviouslyUsed = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Can't declare '#name' because it was already used in this scope.""",
     withArguments: _withArgumentsDuplicatedNamePreviouslyUsed);
 
@@ -2564,7 +2616,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicatedNamePreviouslyUsed,
-      message:
+      problemMessage:
           """Can't declare '${name}' because it was already used in this scope.""",
       arguments: {'name': name});
 }
@@ -2573,7 +2625,7 @@
 const Template<Message Function(String name)>
     templateDuplicatedNamePreviouslyUsedCause =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Previous use of '#name'.""",
+        problemMessageTemplate: r"""Previous use of '#name'.""",
         withArguments: _withArgumentsDuplicatedNamePreviouslyUsedCause);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2588,13 +2640,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicatedNamePreviouslyUsedCause,
-      message: """Previous use of '${name}'.""", arguments: {'name': name});
+      problemMessage: """Previous use of '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateDuplicatedNamedArgument =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Duplicated named argument '#name'.""",
+        problemMessageTemplate: r"""Duplicated named argument '#name'.""",
         withArguments: _withArgumentsDuplicatedNamedArgument);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2607,14 +2660,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicatedNamedArgument,
-      message: """Duplicated named argument '${name}'.""",
+      problemMessage: """Duplicated named argument '${name}'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateDuplicatedParameterName =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Duplicated parameter name '#name'.""",
+        problemMessageTemplate: r"""Duplicated parameter name '#name'.""",
         withArguments: _withArgumentsDuplicatedParameterName);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2627,7 +2680,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicatedParameterName,
-      message: """Duplicated parameter name '${name}'.""",
+      problemMessage: """Duplicated parameter name '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -2635,7 +2688,7 @@
 const Template<Message Function(String name)>
     templateDuplicatedParameterNameCause =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Other parameter named '#name'.""",
+        problemMessageTemplate: r"""Other parameter named '#name'.""",
         withArguments: _withArgumentsDuplicatedParameterNameCause);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2648,7 +2701,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeDuplicatedParameterNameCause,
-      message: """Other parameter named '${name}'.""",
+      problemMessage: """Other parameter named '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -2659,8 +2712,8 @@
 const MessageCode messageEmptyNamedParameterList = const MessageCode(
     "EmptyNamedParameterList",
     analyzerCodes: <String>["MISSING_IDENTIFIER"],
-    message: r"""Named parameter lists cannot be empty.""",
-    tip: r"""Try adding a named parameter to the list.""");
+    problemMessage: r"""Named parameter lists cannot be empty.""",
+    correctionMessage: r"""Try adding a named parameter to the list.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEmptyOptionalParameterList =
@@ -2670,15 +2723,15 @@
 const MessageCode messageEmptyOptionalParameterList = const MessageCode(
     "EmptyOptionalParameterList",
     analyzerCodes: <String>["MISSING_IDENTIFIER"],
-    message: r"""Optional parameter lists cannot be empty.""",
-    tip: r"""Try adding an optional parameter to the list.""");
+    problemMessage: r"""Optional parameter lists cannot be empty.""",
+    correctionMessage: r"""Try adding an optional parameter to the list.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEncoding = messageEncoding;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageEncoding = const MessageCode("Encoding",
-    message: r"""Unable to decode bytes as UTF-8.""");
+    problemMessage: r"""Unable to decode bytes as UTF-8.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -2686,7 +2739,7 @@
         String
             name)> templateEnumConstantSameNameAsEnclosing = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Name of enum constant '#name' can't be the same as the enum's own name.""",
     withArguments: _withArgumentsEnumConstantSameNameAsEnclosing);
 
@@ -2700,7 +2753,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeEnumConstantSameNameAsEnclosing,
-      message:
+      problemMessage:
           """Name of enum constant '${name}' can't be the same as the enum's own name.""",
       arguments: {'name': name});
 }
@@ -2712,7 +2765,7 @@
 const MessageCode messageEnumDeclarationEmpty = const MessageCode(
     "EnumDeclarationEmpty",
     analyzerCodes: <String>["EMPTY_ENUM_BODY"],
-    message: r"""An enum declaration can't be empty.""");
+    problemMessage: r"""An enum declaration can't be empty.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumInClass = messageEnumInClass;
@@ -2720,8 +2773,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageEnumInClass = const MessageCode("EnumInClass",
     index: 74,
-    message: r"""Enums can't be declared inside classes.""",
-    tip: r"""Try moving the enum to the top-level.""");
+    problemMessage: r"""Enums can't be declared inside classes.""",
+    correctionMessage: r"""Try moving the enum to the top-level.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumInstantiation = messageEnumInstantiation;
@@ -2730,7 +2783,7 @@
 const MessageCode messageEnumInstantiation = const MessageCode(
     "EnumInstantiation",
     analyzerCodes: <String>["INSTANTIATE_ENUM"],
-    message: r"""Enums can't be instantiated.""");
+    problemMessage: r"""Enums can't be instantiated.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEqualityCannotBeEqualityOperand =
@@ -2740,15 +2793,16 @@
 const MessageCode messageEqualityCannotBeEqualityOperand = const MessageCode(
     "EqualityCannotBeEqualityOperand",
     index: 1,
-    message:
+    problemMessage:
         r"""A comparison expression can't be an operand of another comparison expression.""",
-    tip: r"""Try putting parentheses around one of the comparisons.""");
+    correctionMessage:
+        r"""Try putting parentheses around one of the comparisons.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_, String string)>
     templateExceptionReadingFile =
     const Template<Message Function(Uri uri_, String string)>(
-        messageTemplate: r"""Exception when reading '#uri': #string""",
+        problemMessageTemplate: r"""Exception when reading '#uri': #string""",
         withArguments: _withArgumentsExceptionReadingFile);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2762,14 +2816,14 @@
   String? uri = relativizeUri(uri_);
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeExceptionReadingFile,
-      message: """Exception when reading '${uri}': ${string}""",
+      problemMessage: """Exception when reading '${uri}': ${string}""",
       arguments: {'uri': uri_, 'string': string});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templateExpectedAfterButGot =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""Expected '#string' after this.""",
+        problemMessageTemplate: r"""Expected '#string' after this.""",
         withArguments: _withArgumentsExpectedAfterButGot);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2781,7 +2835,7 @@
 Message _withArgumentsExpectedAfterButGot(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeExpectedAfterButGot,
-      message: """Expected '${string}' after this.""",
+      problemMessage: """Expected '${string}' after this.""",
       arguments: {'string': string});
 }
 
@@ -2792,7 +2846,7 @@
 const MessageCode messageExpectedAnInitializer = const MessageCode(
     "ExpectedAnInitializer",
     index: 36,
-    message: r"""Expected an initializer.""");
+    problemMessage: r"""Expected an initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExpectedBlock = messageExpectedBlock;
@@ -2800,8 +2854,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpectedBlock = const MessageCode("ExpectedBlock",
     analyzerCodes: <String>["EXPECTED_TOKEN"],
-    message: r"""Expected a block.""",
-    tip: r"""Try adding {}.""");
+    problemMessage: r"""Expected a block.""",
+    correctionMessage: r"""Try adding {}.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExpectedBlockToSkip = messageExpectedBlockToSkip;
@@ -2810,8 +2864,8 @@
 const MessageCode messageExpectedBlockToSkip = const MessageCode(
     "ExpectedBlockToSkip",
     analyzerCodes: <String>["MISSING_FUNCTION_BODY"],
-    message: r"""Expected a function body or '=>'.""",
-    tip: r"""Try adding {}.""");
+    problemMessage: r"""Expected a function body or '=>'.""",
+    correctionMessage: r"""Try adding {}.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExpectedBody = messageExpectedBody;
@@ -2819,13 +2873,13 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpectedBody = const MessageCode("ExpectedBody",
     analyzerCodes: <String>["MISSING_FUNCTION_BODY"],
-    message: r"""Expected a function body or '=>'.""",
-    tip: r"""Try adding {}.""");
+    problemMessage: r"""Expected a function body or '=>'.""",
+    correctionMessage: r"""Try adding {}.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templateExpectedButGot =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""Expected '#string' before this.""",
+        problemMessageTemplate: r"""Expected '#string' before this.""",
         withArguments: _withArgumentsExpectedButGot);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2837,14 +2891,15 @@
 Message _withArgumentsExpectedButGot(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeExpectedButGot,
-      message: """Expected '${string}' before this.""",
+      problemMessage: """Expected '${string}' before this.""",
       arguments: {'string': string});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateExpectedClassMember =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Expected a class member, but got '#lexeme'.""",
+        problemMessageTemplate:
+            r"""Expected a class member, but got '#lexeme'.""",
         withArguments: _withArgumentsExpectedClassMember);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2856,7 +2911,7 @@
 Message _withArgumentsExpectedClassMember(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExpectedClassMember,
-      message: """Expected a class member, but got '${lexeme}'.""",
+      problemMessage: """Expected a class member, but got '${lexeme}'.""",
       arguments: {'lexeme': token});
 }
 
@@ -2864,9 +2919,9 @@
 const Template<Message Function(String string)>
     templateExpectedClassOrMixinBody =
     const Template<Message Function(String string)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A #string must have a body, even if it is empty.""",
-        tipTemplate: r"""Try adding an empty body.""",
+        correctionMessageTemplate: r"""Try adding an empty body.""",
         withArguments: _withArgumentsExpectedClassOrMixinBody);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2878,15 +2933,16 @@
 Message _withArgumentsExpectedClassOrMixinBody(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeExpectedClassOrMixinBody,
-      message: """A ${string} must have a body, even if it is empty.""",
-      tip: """Try adding an empty body.""",
+      problemMessage: """A ${string} must have a body, even if it is empty.""",
+      correctionMessage: """Try adding an empty body.""",
       arguments: {'string': string});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateExpectedDeclaration =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Expected a declaration, but got '#lexeme'.""",
+        problemMessageTemplate:
+            r"""Expected a declaration, but got '#lexeme'.""",
         withArguments: _withArgumentsExpectedDeclaration);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2898,7 +2954,7 @@
 Message _withArgumentsExpectedDeclaration(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExpectedDeclaration,
-      message: """Expected a declaration, but got '${lexeme}'.""",
+      problemMessage: """Expected a declaration, but got '${lexeme}'.""",
       arguments: {'lexeme': token});
 }
 
@@ -2909,14 +2965,14 @@
 const MessageCode messageExpectedElseOrComma = const MessageCode(
     "ExpectedElseOrComma",
     index: 46,
-    message: r"""Expected 'else' or comma.""");
+    problemMessage: r"""Expected 'else' or comma.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(Token token)> templateExpectedEnumBody = const Template<
         Message Function(Token token)>(
-    messageTemplate: r"""Expected a enum body, but got '#lexeme'.""",
-    tipTemplate:
+    problemMessageTemplate: r"""Expected a enum body, but got '#lexeme'.""",
+    correctionMessageTemplate:
         r"""An enum definition must have a body with at least one constant name.""",
     withArguments: _withArgumentsExpectedEnumBody);
 
@@ -2929,8 +2985,8 @@
 Message _withArgumentsExpectedEnumBody(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExpectedEnumBody,
-      message: """Expected a enum body, but got '${lexeme}'.""",
-      tip:
+      problemMessage: """Expected a enum body, but got '${lexeme}'.""",
+      correctionMessage:
           """An enum definition must have a body with at least one constant name.""",
       arguments: {'lexeme': token});
 }
@@ -2938,7 +2994,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateExpectedFunctionBody =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Expected a function body, but got '#lexeme'.""",
+        problemMessageTemplate:
+            r"""Expected a function body, but got '#lexeme'.""",
         withArguments: _withArgumentsExpectedFunctionBody);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2950,7 +3007,7 @@
 Message _withArgumentsExpectedFunctionBody(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExpectedFunctionBody,
-      message: """Expected a function body, but got '${lexeme}'.""",
+      problemMessage: """Expected a function body, but got '${lexeme}'.""",
       arguments: {'lexeme': token});
 }
 
@@ -2961,13 +3018,15 @@
 const MessageCode messageExpectedHexDigit = const MessageCode(
     "ExpectedHexDigit",
     analyzerCodes: <String>["MISSING_HEX_DIGIT"],
-    message: r"""A hex digit (0-9 or A-F) must follow '0x'.""");
+    problemMessage: r"""A hex digit (0-9 or A-F) must follow '0x'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateExpectedIdentifier =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Expected an identifier, but got '#lexeme'.""",
-        tipTemplate: r"""Try inserting an identifier before '#lexeme'.""",
+        problemMessageTemplate:
+            r"""Expected an identifier, but got '#lexeme'.""",
+        correctionMessageTemplate:
+            r"""Try inserting an identifier before '#lexeme'.""",
         withArguments: _withArgumentsExpectedIdentifier);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2979,8 +3038,8 @@
 Message _withArgumentsExpectedIdentifier(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExpectedIdentifier,
-      message: """Expected an identifier, but got '${lexeme}'.""",
-      tip: """Try inserting an identifier before '${lexeme}'.""",
+      problemMessage: """Expected an identifier, but got '${lexeme}'.""",
+      correctionMessage: """Try inserting an identifier before '${lexeme}'.""",
       arguments: {'lexeme': token});
 }
 
@@ -2989,11 +3048,10 @@
     Message Function(
         Token
             token)> templateExpectedIdentifierButGotKeyword = const Template<
-        Message Function(
-            Token token)>(
-    messageTemplate:
+        Message Function(Token token)>(
+    problemMessageTemplate:
         r"""'#lexeme' can't be used as an identifier because it's a keyword.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try renaming this to be an identifier that isn't a keyword.""",
     withArguments: _withArgumentsExpectedIdentifierButGotKeyword);
 
@@ -3006,16 +3064,16 @@
 Message _withArgumentsExpectedIdentifierButGotKeyword(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExpectedIdentifierButGotKeyword,
-      message:
+      problemMessage:
           """'${lexeme}' can't be used as an identifier because it's a keyword.""",
-      tip: """Try renaming this to be an identifier that isn't a keyword.""",
+      correctionMessage: """Try renaming this to be an identifier that isn't a keyword.""",
       arguments: {'lexeme': token});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templateExpectedInstead =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""Expected '#string' instead of this.""",
+        problemMessageTemplate: r"""Expected '#string' instead of this.""",
         withArguments: _withArgumentsExpectedInstead);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3026,7 +3084,7 @@
 Message _withArgumentsExpectedInstead(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeExpectedInstead,
-      message: """Expected '${string}' instead of this.""",
+      problemMessage: """Expected '${string}' instead of this.""",
       arguments: {'string': string});
 }
 
@@ -3037,7 +3095,7 @@
 const MessageCode messageExpectedNamedArgument = const MessageCode(
     "ExpectedNamedArgument",
     analyzerCodes: <String>["EXTRA_POSITIONAL_ARGUMENTS"],
-    message: r"""Expected named argument.""");
+    problemMessage: r"""Expected named argument.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExpectedOneExpression = messageExpectedOneExpression;
@@ -3045,14 +3103,16 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpectedOneExpression = const MessageCode(
     "ExpectedOneExpression",
-    message: r"""Expected one expression, but found additional input.""");
+    problemMessage:
+        r"""Expected one expression, but found additional input.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExpectedOpenParens = messageExpectedOpenParens;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageExpectedOpenParens =
-    const MessageCode("ExpectedOpenParens", message: r"""Expected '('.""");
+const MessageCode messageExpectedOpenParens = const MessageCode(
+    "ExpectedOpenParens",
+    problemMessage: r"""Expected '('.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExpectedStatement = messageExpectedStatement;
@@ -3061,12 +3121,12 @@
 const MessageCode messageExpectedStatement = const MessageCode(
     "ExpectedStatement",
     index: 29,
-    message: r"""Expected a statement.""");
+    problemMessage: r"""Expected a statement.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateExpectedString =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Expected a String, but got '#lexeme'.""",
+        problemMessageTemplate: r"""Expected a String, but got '#lexeme'.""",
         withArguments: _withArgumentsExpectedString);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3078,14 +3138,14 @@
 Message _withArgumentsExpectedString(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExpectedString,
-      message: """Expected a String, but got '${lexeme}'.""",
+      problemMessage: """Expected a String, but got '${lexeme}'.""",
       arguments: {'lexeme': token});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templateExpectedToken =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""Expected to find '#string'.""",
+        problemMessageTemplate: r"""Expected to find '#string'.""",
         withArguments: _withArgumentsExpectedToken);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3097,14 +3157,14 @@
 Message _withArgumentsExpectedToken(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeExpectedToken,
-      message: """Expected to find '${string}'.""",
+      problemMessage: """Expected to find '${string}'.""",
       arguments: {'string': string});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateExpectedType =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Expected a type, but got '#lexeme'.""",
+        problemMessageTemplate: r"""Expected a type, but got '#lexeme'.""",
         withArguments: _withArgumentsExpectedType);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3116,7 +3176,7 @@
 Message _withArgumentsExpectedType(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExpectedType,
-      message: """Expected a type, but got '${lexeme}'.""",
+      problemMessage: """Expected a type, but got '${lexeme}'.""",
       arguments: {'lexeme': token});
 }
 
@@ -3125,7 +3185,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpectedUri =
-    const MessageCode("ExpectedUri", message: r"""Expected a URI.""");
+    const MessageCode("ExpectedUri", problemMessage: r"""Expected a URI.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -3133,9 +3193,9 @@
         String
             string)> templateExperimentDisabled = const Template<
         Message Function(String string)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""This requires the '#string' language feature to be enabled.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""The feature is on by default but is currently disabled, maybe because the '--enable-experiment=no-#string' command line option is passed.""",
     withArguments: _withArgumentsExperimentDisabled);
 
@@ -3148,9 +3208,9 @@
 Message _withArgumentsExperimentDisabled(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeExperimentDisabled,
-      message:
+      problemMessage:
           """This requires the '${string}' language feature to be enabled.""",
-      tip:
+      correctionMessage:
           """The feature is on by default but is currently disabled, maybe because the '--enable-experiment=no-${string}' command line option is passed.""",
       arguments: {'string': string});
 }
@@ -3159,7 +3219,7 @@
 const Template<Message Function(String string2)>
     templateExperimentDisabledInvalidLanguageVersion =
     const Template<Message Function(String string2)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""This requires the null safety language feature, which requires language version of #string2 or higher.""",
         withArguments: _withArgumentsExperimentDisabledInvalidLanguageVersion);
 
@@ -3174,7 +3234,7 @@
 Message _withArgumentsExperimentDisabledInvalidLanguageVersion(String string2) {
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeExperimentDisabledInvalidLanguageVersion,
-      message:
+      problemMessage:
           """This requires the null safety language feature, which requires language version of ${string2} or higher.""",
       arguments: {'string2': string2});
 }
@@ -3186,9 +3246,9 @@
         String
             string2)> templateExperimentNotEnabled = const Template<
         Message Function(String string, String string2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""This requires the '#string' language feature to be enabled.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try updating your pubspec.yaml to set the minimum SDK constraint to #string2 or higher, and running 'pub get'.""",
     withArguments: _withArgumentsExperimentNotEnabled);
 
@@ -3204,9 +3264,9 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeExperimentNotEnabled,
-      message:
+      problemMessage:
           """This requires the '${string}' language feature to be enabled.""",
-      tip:
+      correctionMessage:
           """Try updating your pubspec.yaml to set the minimum SDK constraint to ${string2} or higher, and running 'pub get'.""",
       arguments: {'string': string, 'string2': string2});
 }
@@ -3219,18 +3279,18 @@
 const MessageCode messageExperimentNotEnabledNoFlag = const MessageCode(
     "ExperimentNotEnabledNoFlag",
     analyzerCodes: <String>["ParserErrorCode.EXPERIMENT_NOT_ENABLED"],
-    message:
+    problemMessage:
         r"""This requires the null safety language feature, which is experimental.""",
-    tip:
+    correctionMessage:
         r"""You can enable the experiment using the '--enable-experiment=non-nullable' command line option.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string2)>
     templateExperimentNotEnabledNoFlagInvalidLanguageVersion =
     const Template<Message Function(String string2)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""This requires the null safety language feature, which is experimental and requires language version of #string2 or higher.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""You can enable the experiment using the '--enable-experiment=non-nullable' command line option.""",
         withArguments:
             _withArgumentsExperimentNotEnabledNoFlagInvalidLanguageVersion);
@@ -3247,9 +3307,9 @@
     String string2) {
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeExperimentNotEnabledNoFlagInvalidLanguageVersion,
-      message:
+      problemMessage:
           """This requires the null safety language feature, which is experimental and requires language version of ${string2} or higher.""",
-      tip: """You can enable the experiment using the '--enable-experiment=non-nullable' command line option.""",
+      correctionMessage: """You can enable the experiment using the '--enable-experiment=non-nullable' command line option.""",
       arguments: {'string2': string2});
 }
 
@@ -3260,7 +3320,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExplicitExtensionArgumentMismatch = const MessageCode(
     "ExplicitExtensionArgumentMismatch",
-    message:
+    problemMessage:
         r"""Explicit extension application requires exactly 1 positional argument.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3270,7 +3330,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExplicitExtensionAsExpression = const MessageCode(
     "ExplicitExtensionAsExpression",
-    message:
+    problemMessage:
         r"""Explicit extension application cannot be used as an expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3280,7 +3340,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExplicitExtensionAsLvalue = const MessageCode(
     "ExplicitExtensionAsLvalue",
-    message:
+    problemMessage:
         r"""Explicit extension application cannot be a target for assignment.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3290,7 +3350,7 @@
         int
             count)> templateExplicitExtensionTypeArgumentMismatch = const Template<
         Message Function(String name, int count)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Explicit extension application of extension '#name' takes '#count' type argument(s).""",
     withArguments: _withArgumentsExplicitExtensionTypeArgumentMismatch);
 
@@ -3309,7 +3369,7 @@
   // ignore: unnecessary_null_comparison
   if (count == null) throw 'No count provided';
   return new Message(codeExplicitExtensionTypeArgumentMismatch,
-      message:
+      problemMessage:
           """Explicit extension application of extension '${name}' takes '${count}' type argument(s).""",
       arguments: {'name': name, 'count': count});
 }
@@ -3320,8 +3380,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExportAfterPart = const MessageCode("ExportAfterPart",
     index: 75,
-    message: r"""Export directives must precede part directives.""",
-    tip: r"""Try moving the export directives before the part directives.""");
+    problemMessage: r"""Export directives must precede part directives.""",
+    correctionMessage:
+        r"""Try moving the export directives before the part directives.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExportOptOutFromOptIn = messageExportOptOutFromOptIn;
@@ -3329,7 +3390,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExportOptOutFromOptIn = const MessageCode(
     "ExportOptOutFromOptIn",
-    message:
+    problemMessage:
         r"""Null safe libraries are not allowed to export declarations from of opt-out libraries.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3338,7 +3399,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExportedMain = const MessageCode("ExportedMain",
     severity: Severity.context,
-    message: r"""This is exported 'main' declaration.""");
+    problemMessage: r"""This is exported 'main' declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExpressionNotMetadata = messageExpressionNotMetadata;
@@ -3346,7 +3407,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpressionNotMetadata = const MessageCode(
     "ExpressionNotMetadata",
-    message:
+    problemMessage:
         r"""This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3355,13 +3416,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExtendFunction = const MessageCode("ExtendFunction",
     severity: Severity.ignored,
-    message: r"""Extending 'Function' is deprecated.""",
-    tip: r"""Try removing 'Function' from the 'extends' clause.""");
+    problemMessage: r"""Extending 'Function' is deprecated.""",
+    correctionMessage:
+        r"""Try removing 'Function' from the 'extends' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateExtendingEnum =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#name' is an enum and can't be extended or implemented.""",
         withArguments: _withArgumentsExtendingEnum);
 
@@ -3375,14 +3437,15 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeExtendingEnum,
-      message: """'${name}' is an enum and can't be extended or implemented.""",
+      problemMessage:
+          """'${name}' is an enum and can't be extended or implemented.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateExtendingRestricted =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#name' is restricted and can't be extended or implemented.""",
         withArguments: _withArgumentsExtendingRestricted);
 
@@ -3396,7 +3459,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeExtendingRestricted,
-      message:
+      problemMessage:
           """'${name}' is restricted and can't be extended or implemented.""",
       arguments: {'name': name});
 }
@@ -3406,21 +3469,24 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExtendsFutureOr = const MessageCode("ExtendsFutureOr",
-    message: r"""The type 'FutureOr' can't be used in an 'extends' clause.""");
+    problemMessage:
+        r"""The type 'FutureOr' can't be used in an 'extends' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExtendsNever = messageExtendsNever;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExtendsNever = const MessageCode("ExtendsNever",
-    message: r"""The type 'Never' can't be used in an 'extends' clause.""");
+    problemMessage:
+        r"""The type 'Never' can't be used in an 'extends' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExtendsVoid = messageExtendsVoid;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExtendsVoid = const MessageCode("ExtendsVoid",
-    message: r"""The type 'void' can't be used in an 'extends' clause.""");
+    problemMessage:
+        r"""The type 'void' can't be used in an 'extends' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExtensionDeclaresAbstractMember =
@@ -3430,8 +3496,8 @@
 const MessageCode messageExtensionDeclaresAbstractMember = const MessageCode(
     "ExtensionDeclaresAbstractMember",
     index: 94,
-    message: r"""Extensions can't declare abstract members.""",
-    tip: r"""Try providing an implementation for the member.""");
+    problemMessage: r"""Extensions can't declare abstract members.""",
+    correctionMessage: r"""Try providing an implementation for the member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExtensionDeclaresConstructor =
@@ -3441,8 +3507,8 @@
 const MessageCode messageExtensionDeclaresConstructor = const MessageCode(
     "ExtensionDeclaresConstructor",
     index: 92,
-    message: r"""Extensions can't declare constructors.""",
-    tip: r"""Try removing the constructor declaration.""");
+    problemMessage: r"""Extensions can't declare constructors.""",
+    correctionMessage: r"""Try removing the constructor declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExtensionDeclaresInstanceField =
@@ -3452,14 +3518,15 @@
 const MessageCode messageExtensionDeclaresInstanceField = const MessageCode(
     "ExtensionDeclaresInstanceField",
     index: 93,
-    message: r"""Extensions can't declare instance fields""",
-    tip: r"""Try removing the field declaration or making it a static field""");
+    problemMessage: r"""Extensions can't declare instance fields""",
+    correctionMessage:
+        r"""Try removing the field declaration or making it a static field""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateExtensionMemberConflictsWithObjectMember =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""This extension member conflicts with Object member '#name'.""",
         withArguments: _withArgumentsExtensionMemberConflictsWithObjectMember);
 
@@ -3475,7 +3542,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeExtensionMemberConflictsWithObjectMember,
-      message:
+      problemMessage:
           """This extension member conflicts with Object member '${name}'.""",
       arguments: {'name': name});
 }
@@ -3486,8 +3553,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalClass = const MessageCode("ExternalClass",
     index: 3,
-    message: r"""Classes can't be declared to be 'external'.""",
-    tip: r"""Try removing the keyword 'external'.""");
+    problemMessage: r"""Classes can't be declared to be 'external'.""",
+    correctionMessage: r"""Try removing the keyword 'external'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExternalConstructorWithBody =
@@ -3497,8 +3564,8 @@
 const MessageCode messageExternalConstructorWithBody = const MessageCode(
     "ExternalConstructorWithBody",
     index: 87,
-    message: r"""External constructors can't have a body.""",
-    tip:
+    problemMessage: r"""External constructors can't have a body.""",
+    correctionMessage:
         r"""Try removing the body of the constructor, or removing the keyword 'external'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3509,8 +3576,8 @@
 const MessageCode messageExternalConstructorWithFieldInitializers =
     const MessageCode("ExternalConstructorWithFieldInitializers",
         analyzerCodes: <String>["EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS"],
-        message: r"""An external constructor can't initialize fields.""",
-        tip:
+        problemMessage: r"""An external constructor can't initialize fields.""",
+        correctionMessage:
             r"""Try removing the field initializers, or removing the keyword 'external'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3521,7 +3588,8 @@
 const MessageCode messageExternalConstructorWithInitializer = const MessageCode(
     "ExternalConstructorWithInitializer",
     index: 106,
-    message: r"""An external constructor can't have any initializers.""");
+    problemMessage:
+        r"""An external constructor can't have any initializers.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExternalEnum = messageExternalEnum;
@@ -3529,8 +3597,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalEnum = const MessageCode("ExternalEnum",
     index: 5,
-    message: r"""Enums can't be declared to be 'external'.""",
-    tip: r"""Try removing the keyword 'external'.""");
+    problemMessage: r"""Enums can't be declared to be 'external'.""",
+    correctionMessage: r"""Try removing the keyword 'external'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExternalFactoryRedirection =
@@ -3540,8 +3608,8 @@
 const MessageCode messageExternalFactoryRedirection = const MessageCode(
     "ExternalFactoryRedirection",
     index: 85,
-    message: r"""A redirecting factory can't be external.""",
-    tip: r"""Try removing the 'external' modifier.""");
+    problemMessage: r"""A redirecting factory can't be external.""",
+    correctionMessage: r"""Try removing the 'external' modifier.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExternalFactoryWithBody = messageExternalFactoryWithBody;
@@ -3550,8 +3618,8 @@
 const MessageCode messageExternalFactoryWithBody = const MessageCode(
     "ExternalFactoryWithBody",
     index: 86,
-    message: r"""External factories can't have a body.""",
-    tip:
+    problemMessage: r"""External factories can't have a body.""",
+    correctionMessage:
         r"""Try removing the body of the factory, or removing the keyword 'external'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3560,8 +3628,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalField = const MessageCode("ExternalField",
     index: 50,
-    message: r"""Fields can't be declared to be 'external'.""",
-    tip:
+    problemMessage: r"""Fields can't be declared to be 'external'.""",
+    correctionMessage:
         r"""Try removing the keyword 'external', or replacing the field by an external getter and/or setter.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3571,8 +3639,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalFieldConstructorInitializer = const MessageCode(
     "ExternalFieldConstructorInitializer",
-    message: r"""External fields cannot have initializers.""",
-    tip:
+    problemMessage: r"""External fields cannot have initializers.""",
+    correctionMessage:
         r"""Try removing the field initializer or the 'external' keyword from the field declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3581,8 +3649,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalFieldInitializer = const MessageCode(
     "ExternalFieldInitializer",
-    message: r"""External fields cannot have initializers.""",
-    tip: r"""Try removing the initializer or the 'external' keyword.""");
+    problemMessage: r"""External fields cannot have initializers.""",
+    correctionMessage:
+        r"""Try removing the initializer or the 'external' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExternalLateField = messageExternalLateField;
@@ -3591,8 +3660,8 @@
 const MessageCode messageExternalLateField = const MessageCode(
     "ExternalLateField",
     index: 109,
-    message: r"""External fields cannot be late.""",
-    tip: r"""Try removing the 'external' or 'late' keyword.""");
+    problemMessage: r"""External fields cannot be late.""",
+    correctionMessage: r"""Try removing the 'external' or 'late' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExternalMethodWithBody = messageExternalMethodWithBody;
@@ -3601,7 +3670,7 @@
 const MessageCode messageExternalMethodWithBody = const MessageCode(
     "ExternalMethodWithBody",
     index: 49,
-    message: r"""An external or native method can't have a body.""");
+    problemMessage: r"""An external or native method can't have a body.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExternalTypedef = messageExternalTypedef;
@@ -3609,14 +3678,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalTypedef = const MessageCode("ExternalTypedef",
     index: 76,
-    message: r"""Typedefs can't be declared to be 'external'.""",
-    tip: r"""Try removing the keyword 'external'.""");
+    problemMessage: r"""Typedefs can't be declared to be 'external'.""",
+    correctionMessage: r"""Try removing the keyword 'external'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateExtraneousModifier =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Can't have modifier '#lexeme' here.""",
-        tipTemplate: r"""Try removing '#lexeme'.""",
+        problemMessageTemplate: r"""Can't have modifier '#lexeme' here.""",
+        correctionMessageTemplate: r"""Try removing '#lexeme'.""",
         withArguments: _withArgumentsExtraneousModifier);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3627,8 +3696,8 @@
 Message _withArgumentsExtraneousModifier(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExtraneousModifier,
-      message: """Can't have modifier '${lexeme}' here.""",
-      tip: """Try removing '${lexeme}'.""",
+      problemMessage: """Can't have modifier '${lexeme}' here.""",
+      correctionMessage: """Try removing '${lexeme}'.""",
       arguments: {'lexeme': token});
 }
 
@@ -3636,8 +3705,9 @@
 const Template<Message Function(Token token)>
     templateExtraneousModifierInExtension =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Can't have modifier '#lexeme' in an extension.""",
-        tipTemplate: r"""Try removing '#lexeme'.""",
+        problemMessageTemplate:
+            r"""Can't have modifier '#lexeme' in an extension.""",
+        correctionMessageTemplate: r"""Try removing '#lexeme'.""",
         withArguments: _withArgumentsExtraneousModifierInExtension);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3649,8 +3719,8 @@
 Message _withArgumentsExtraneousModifierInExtension(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeExtraneousModifierInExtension,
-      message: """Can't have modifier '${lexeme}' in an extension.""",
-      tip: """Try removing '${lexeme}'.""",
+      problemMessage: """Can't have modifier '${lexeme}' in an extension.""",
+      correctionMessage: """Try removing '${lexeme}'.""",
       arguments: {'lexeme': token});
 }
 
@@ -3660,7 +3730,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFactoryNotSync = const MessageCode("FactoryNotSync",
     analyzerCodes: <String>["NON_SYNC_FACTORY"],
-    message: r"""Factory bodies can't use 'async', 'async*', or 'sync*'.""");
+    problemMessage:
+        r"""Factory bodies can't use 'async', 'async*', or 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeFactoryTopLevelDeclaration =
@@ -3670,13 +3741,14 @@
 const MessageCode messageFactoryTopLevelDeclaration = const MessageCode(
     "FactoryTopLevelDeclaration",
     index: 78,
-    message: r"""Top-level declarations can't be declared to be 'factory'.""",
-    tip: r"""Try removing the keyword 'factory'.""");
+    problemMessage:
+        r"""Top-level declarations can't be declared to be 'factory'.""",
+    correctionMessage: r"""Try removing the keyword 'factory'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateFastaCLIArgumentRequired =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Expected value after '#name'.""",
+        problemMessageTemplate: r"""Expected value after '#name'.""",
         withArguments: _withArgumentsFastaCLIArgumentRequired);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3690,7 +3762,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFastaCLIArgumentRequired,
-      message: """Expected value after '${name}'.""",
+      problemMessage: """Expected value after '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -3699,7 +3771,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFastaUsageLong =
-    const MessageCode("FastaUsageLong", message: r"""Supported options:
+    const MessageCode("FastaUsageLong", problemMessage: r"""Supported options:
 
   -o <file>, --output=<file>
     Generate the output into <file>.
@@ -3789,8 +3861,8 @@
 const Code<Null> codeFastaUsageShort = messageFastaUsageShort;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageFastaUsageShort =
-    const MessageCode("FastaUsageShort", message: r"""Frequently used options:
+const MessageCode messageFastaUsageShort = const MessageCode("FastaUsageShort",
+    problemMessage: r"""Frequently used options:
 
   -o <file> Generate the output into <file>.
   -h        Display this message (add -v for information about all options).""");
@@ -3802,7 +3874,7 @@
         String
             name)> templateFfiEmptyStruct = const Template<
         Message Function(String string, String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""#string '#name' is empty. Empty structs and unions are undefined behavior.""",
     withArguments: _withArgumentsFfiEmptyStruct);
 
@@ -3818,7 +3890,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiEmptyStruct,
-      message:
+      problemMessage:
           """${string} '${name}' is empty. Empty structs and unions are undefined behavior.""",
       arguments: {'string': string, 'name': name});
 }
@@ -3829,7 +3901,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFfiExceptionalReturnNull = const MessageCode(
     "FfiExceptionalReturnNull",
-    message: r"""Exceptional return value must not be null.""");
+    problemMessage: r"""Exceptional return value must not be null.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeFfiExpectedConstant = messageFfiExpectedConstant;
@@ -3837,12 +3909,12 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFfiExpectedConstant = const MessageCode(
     "FfiExpectedConstant",
-    message: r"""Exceptional return value must be a constant.""");
+    problemMessage: r"""Exceptional return value must be a constant.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateFfiExpectedConstantArg =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Argument '#name' must be a constant.""",
+        problemMessageTemplate: r"""Argument '#name' must be a constant.""",
         withArguments: _withArgumentsFfiExpectedConstantArg);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3856,7 +3928,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiExpectedConstantArg,
-      message: """Argument '${name}' must be a constant.""",
+      problemMessage: """Argument '${name}' must be a constant.""",
       arguments: {'name': name});
 }
 
@@ -3864,7 +3936,7 @@
 const Template<Message Function(String name)>
     templateFfiExtendsOrImplementsSealedClass =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Class '#name' cannot be extended or implemented.""",
         withArguments: _withArgumentsFfiExtendsOrImplementsSealedClass);
 
@@ -3880,7 +3952,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiExtendsOrImplementsSealedClass,
-      message: """Class '${name}' cannot be extended or implemented.""",
+      problemMessage: """Class '${name}' cannot be extended or implemented.""",
       arguments: {'name': name});
 }
 
@@ -3888,7 +3960,7 @@
 const Template<
     Message Function(String name)> templateFfiFieldAnnotation = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Field '#name' requires exactly one annotation to declare its native type, which cannot be Void. dart:ffi Structs and Unions cannot have regular Dart fields.""",
     withArguments: _withArgumentsFfiFieldAnnotation);
 
@@ -3903,7 +3975,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiFieldAnnotation,
-      message:
+      problemMessage:
           """Field '${name}' requires exactly one annotation to declare its native type, which cannot be Void. dart:ffi Structs and Unions cannot have regular Dart fields.""",
       arguments: {'name': name});
 }
@@ -3913,8 +3985,10 @@
         Message Function(String string, String name, List<String> _names)>
     templateFfiFieldCyclic = const Template<
             Message Function(String string, String name, List<String> _names)>(
-        messageTemplate: r"""#string '#name' contains itself. Cycle elements:
-#names""", withArguments: _withArgumentsFfiFieldCyclic);
+        problemMessageTemplate:
+            r"""#string '#name' contains itself. Cycle elements:
+#names""",
+        withArguments: _withArgumentsFfiFieldCyclic);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String string, String name, List<String> _names)>
@@ -3932,7 +4006,7 @@
   if (_names.isEmpty) throw 'No names provided';
   String names = itemizeNames(_names);
   return new Message(codeFfiFieldCyclic,
-      message: """${string} '${name}' contains itself. Cycle elements:
+      problemMessage: """${string} '${name}' contains itself. Cycle elements:
 ${names}""", arguments: {'string': string, 'name': name, 'names': _names});
 }
 
@@ -3940,9 +4014,9 @@
 const Template<
     Message Function(String name)> templateFfiFieldInitializer = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Field '#name' is a dart:ffi Pointer to a struct field and therefore cannot be initialized before constructor execution.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Mark the field as external to avoid having to initialize it.""",
     withArguments: _withArgumentsFfiFieldInitializer);
 
@@ -3957,9 +4031,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiFieldInitializer,
-      message:
+      problemMessage:
           """Field '${name}' is a dart:ffi Pointer to a struct field and therefore cannot be initialized before constructor execution.""",
-      tip: """Mark the field as external to avoid having to initialize it.""",
+      correctionMessage: """Mark the field as external to avoid having to initialize it.""",
       arguments: {'name': name});
 }
 
@@ -3969,7 +4043,7 @@
         String
             name)> templateFfiFieldNoAnnotation = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Field '#name' requires no annotation to declare its native type, it is a Pointer which is represented by the same type in Dart and native code.""",
     withArguments: _withArgumentsFfiFieldNoAnnotation);
 
@@ -3984,7 +4058,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiFieldNoAnnotation,
-      message:
+      problemMessage:
           """Field '${name}' requires no annotation to declare its native type, it is a Pointer which is represented by the same type in Dart and native code.""",
       arguments: {'name': name});
 }
@@ -3993,7 +4067,7 @@
 const Template<
     Message Function(String name)> templateFfiFieldNull = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Field '#name' cannot have type 'Null', it must be `int`, `double`, `Pointer`, or a subtype of `Struct` or `Union`.""",
     withArguments: _withArgumentsFfiFieldNull);
 
@@ -4008,7 +4082,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiFieldNull,
-      message:
+      problemMessage:
           """Field '${name}' cannot have type 'Null', it must be `int`, `double`, `Pointer`, or a subtype of `Struct` or `Union`.""",
       arguments: {'name': name});
 }
@@ -4020,7 +4094,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFfiLeafCallMustNotReturnHandle = const MessageCode(
     "FfiLeafCallMustNotReturnHandle",
-    message: r"""FFI leaf call must not have Handle return type.""");
+    problemMessage: r"""FFI leaf call must not have Handle return type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeFfiLeafCallMustNotTakeHandle =
@@ -4029,23 +4103,88 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFfiLeafCallMustNotTakeHandle = const MessageCode(
     "FfiLeafCallMustNotTakeHandle",
-    message: r"""FFI leaf call must not have Handle argument types.""");
+    problemMessage: r"""FFI leaf call must not have Handle argument types.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeFfiNativeAnnotationMustAnnotateStatic =
-    messageFfiNativeAnnotationMustAnnotateStatic;
+const Code<Null> codeFfiNativeMustBeExternal = messageFfiNativeMustBeExternal;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageFfiNativeAnnotationMustAnnotateStatic =
-    const MessageCode("FfiNativeAnnotationMustAnnotateStatic",
-        message:
-            r"""FfiNative annotations can only be used on static functions.""");
+const MessageCode messageFfiNativeMustBeExternal = const MessageCode(
+    "FfiNativeMustBeExternal",
+    problemMessage: r"""FfiNative functions must be marked external.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeFfiNativeOnlyNativeFieldWrapperClassCanBePointer =
+    messageFfiNativeOnlyNativeFieldWrapperClassCanBePointer;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageFfiNativeOnlyNativeFieldWrapperClassCanBePointer =
+    const MessageCode("FfiNativeOnlyNativeFieldWrapperClassCanBePointer",
+        problemMessage:
+            r"""Only classes extending NativeFieldWrapperClass1 can be passed as Pointer.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(int count, int count2)>
+    templateFfiNativeUnexpectedNumberOfParameters =
+    const Template<Message Function(int count, int count2)>(
+        problemMessageTemplate:
+            r"""Unexpected number of FfiNative annotation parameters. Expected #count but has #count2.""",
+        withArguments: _withArgumentsFfiNativeUnexpectedNumberOfParameters);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(int count, int count2)>
+    codeFfiNativeUnexpectedNumberOfParameters =
+    const Code<Message Function(int count, int count2)>(
+  "FfiNativeUnexpectedNumberOfParameters",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsFfiNativeUnexpectedNumberOfParameters(
+    int count, int count2) {
+  // ignore: unnecessary_null_comparison
+  if (count == null) throw 'No count provided';
+  // ignore: unnecessary_null_comparison
+  if (count2 == null) throw 'No count provided';
+  return new Message(codeFfiNativeUnexpectedNumberOfParameters,
+      problemMessage:
+          """Unexpected number of FfiNative annotation parameters. Expected ${count} but has ${count2}.""",
+      arguments: {'count': count, 'count2': count2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(int count, int count2)>
+    templateFfiNativeUnexpectedNumberOfParametersWithReceiver =
+    const Template<Message Function(int count, int count2)>(
+        problemMessageTemplate:
+            r"""Unexpected number of FfiNative annotation parameters. Expected #count but has #count2. FfiNative instance method annotation must have receiver as first argument.""",
+        withArguments:
+            _withArgumentsFfiNativeUnexpectedNumberOfParametersWithReceiver);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(int count, int count2)>
+    codeFfiNativeUnexpectedNumberOfParametersWithReceiver =
+    const Code<Message Function(int count, int count2)>(
+  "FfiNativeUnexpectedNumberOfParametersWithReceiver",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsFfiNativeUnexpectedNumberOfParametersWithReceiver(
+    int count, int count2) {
+  // ignore: unnecessary_null_comparison
+  if (count == null) throw 'No count provided';
+  // ignore: unnecessary_null_comparison
+  if (count2 == null) throw 'No count provided';
+  return new Message(codeFfiNativeUnexpectedNumberOfParametersWithReceiver,
+      problemMessage:
+          """Unexpected number of FfiNative annotation parameters. Expected ${count} but has ${count2}. FfiNative instance method annotation must have receiver as first argument.""",
+      arguments: {'count': count, 'count2': count2});
+}
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(String name)> templateFfiNotStatic = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""#name expects a static function as parameter. dart:ffi only supports calling static Dart functions from native code. Closures and tear-offs are not supported because they can capture context.""",
     withArguments: _withArgumentsFfiNotStatic);
 
@@ -4060,7 +4199,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiNotStatic,
-      message:
+      problemMessage:
           """${name} expects a static function as parameter. dart:ffi only supports calling static Dart functions from native code. Closures and tear-offs are not supported because they can capture context.""",
       arguments: {'name': name});
 }
@@ -4068,7 +4207,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateFfiPackedAnnotation =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Struct '#name' must have at most one 'Packed' annotation.""",
         withArguments: _withArgumentsFfiPackedAnnotation);
 
@@ -4083,7 +4222,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiPackedAnnotation,
-      message:
+      problemMessage:
           """Struct '${name}' must have at most one 'Packed' annotation.""",
       arguments: {'name': name});
 }
@@ -4095,7 +4234,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFfiPackedAnnotationAlignment = const MessageCode(
     "FfiPackedAnnotationAlignment",
-    message: r"""Only packing to 1, 2, 4, 8, and 16 bytes is supported.""");
+    problemMessage:
+        r"""Only packing to 1, 2, 4, 8, and 16 bytes is supported.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -4104,7 +4244,7 @@
         String
             name2)> templateFfiPackedNestingNonPacked = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Nesting the non-packed or less tightly packed struct '#name' in a packed struct '#name2' is not supported.""",
     withArguments: _withArgumentsFfiPackedNestingNonPacked);
 
@@ -4122,7 +4262,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeFfiPackedNestingNonPacked,
-      message:
+      problemMessage:
           """Nesting the non-packed or less tightly packed struct '${name}' in a packed struct '${name2}' is not supported.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -4130,7 +4270,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateFfiSizeAnnotation =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Field '#name' must have exactly one 'Array' annotation.""",
         withArguments: _withArgumentsFfiSizeAnnotation);
 
@@ -4145,7 +4285,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiSizeAnnotation,
-      message: """Field '${name}' must have exactly one 'Array' annotation.""",
+      problemMessage:
+          """Field '${name}' must have exactly one 'Array' annotation.""",
       arguments: {'name': name});
 }
 
@@ -4155,7 +4296,7 @@
         String
             name)> templateFfiSizeAnnotationDimensions = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Field '#name' must have an 'Array' annotation that matches the dimensions.""",
     withArguments: _withArgumentsFfiSizeAnnotationDimensions);
 
@@ -4170,7 +4311,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiSizeAnnotationDimensions,
-      message:
+      problemMessage:
           """Field '${name}' must have an 'Array' annotation that matches the dimensions.""",
       arguments: {'name': name});
 }
@@ -4179,7 +4320,7 @@
 const Template<Message Function(String string, String name)>
     templateFfiStructGeneric =
     const Template<Message Function(String string, String name)>(
-        messageTemplate: r"""#string '#name' should not be generic.""",
+        problemMessageTemplate: r"""#string '#name' should not be generic.""",
         withArguments: _withArgumentsFfiStructGeneric);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4194,7 +4335,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFfiStructGeneric,
-      message: """${string} '${name}' should not be generic.""",
+      problemMessage: """${string} '${name}' should not be generic.""",
       arguments: {'string': string, 'name': name});
 }
 
@@ -4204,7 +4345,7 @@
         String
             name)> templateFieldAlreadyInitializedAtDeclaration = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""'#name' is a final instance variable that was initialized at the declaration.""",
     withArguments: _withArgumentsFieldAlreadyInitializedAtDeclaration);
 
@@ -4222,7 +4363,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFieldAlreadyInitializedAtDeclaration,
-      message:
+      problemMessage:
           """'${name}' is a final instance variable that was initialized at the declaration.""",
       arguments: {'name': name});
 }
@@ -4231,7 +4372,7 @@
 const Template<Message Function(String name)>
     templateFieldAlreadyInitializedAtDeclarationCause =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""'#name' was initialized here.""",
+        problemMessageTemplate: r"""'#name' was initialized here.""",
         withArguments: _withArgumentsFieldAlreadyInitializedAtDeclarationCause);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4246,7 +4387,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFieldAlreadyInitializedAtDeclarationCause,
-      message: """'${name}' was initialized here.""",
+      problemMessage: """'${name}' was initialized here.""",
       arguments: {'name': name});
 }
 
@@ -4258,8 +4399,9 @@
 const MessageCode messageFieldInitializedOutsideDeclaringClass = const MessageCode(
     "FieldInitializedOutsideDeclaringClass",
     index: 88,
-    message: r"""A field can only be initialized in its declaring class""",
-    tip:
+    problemMessage:
+        r"""A field can only be initialized in its declaring class""",
+    correctionMessage:
         r"""Try passing a value into the superclass constructor, or moving the initialization into the constructor body.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4270,16 +4412,17 @@
 const MessageCode messageFieldInitializerOutsideConstructor = const MessageCode(
     "FieldInitializerOutsideConstructor",
     index: 79,
-    message: r"""Field formal parameters can only be used in a constructor.""",
-    tip: r"""Try removing 'this.'.""");
+    problemMessage:
+        r"""Field formal parameters can only be used in a constructor.""",
+    correctionMessage: r"""Try removing 'this.'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name, String string)>
     templateFieldNotPromoted =
     const Template<Message Function(String name, String string)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#name' refers to a property so it couldn't be promoted.""",
-        tipTemplate: r"""See #string""",
+        correctionMessageTemplate: r"""See #string""",
         withArguments: _withArgumentsFieldNotPromoted);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4294,8 +4437,9 @@
   name = demangleMixinApplicationName(name);
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeFieldNotPromoted,
-      message: """'${name}' refers to a property so it couldn't be promoted.""",
-      tip: """See ${string}""",
+      problemMessage:
+          """'${name}' refers to a property so it couldn't be promoted.""",
+      correctionMessage: """See ${string}""",
       arguments: {'name': name, 'string': string});
 }
 
@@ -4306,9 +4450,10 @@
 const MessageCode messageFinalAndCovariant = const MessageCode(
     "FinalAndCovariant",
     index: 80,
-    message:
+    problemMessage:
         r"""Members can't be declared to be both 'final' and 'covariant'.""",
-    tip: r"""Try removing either the 'final' or 'covariant' keyword.""");
+    correctionMessage:
+        r"""Try removing either the 'final' or 'covariant' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeFinalAndCovariantLateWithInitializer =
@@ -4318,9 +4463,9 @@
 const MessageCode messageFinalAndCovariantLateWithInitializer = const MessageCode(
     "FinalAndCovariantLateWithInitializer",
     index: 101,
-    message:
+    problemMessage:
         r"""Members marked 'late' with an initializer can't be declared to be both 'final' and 'covariant'.""",
-    tip:
+    correctionMessage:
         r"""Try removing either the 'final' or 'covariant' keyword, or removing the initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4329,8 +4474,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFinalAndVar = const MessageCode("FinalAndVar",
     index: 81,
-    message: r"""Members can't be declared to be both 'final' and 'var'.""",
-    tip: r"""Try removing the keyword 'var'.""");
+    problemMessage:
+        r"""Members can't be declared to be both 'final' and 'var'.""",
+    correctionMessage: r"""Try removing the keyword 'var'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -4338,8 +4484,8 @@
         String
             name)> templateFinalFieldNotInitialized = const Template<
         Message Function(String name)>(
-    messageTemplate: r"""Final field '#name' is not initialized.""",
-    tipTemplate:
+    problemMessageTemplate: r"""Final field '#name' is not initialized.""",
+    correctionMessageTemplate:
         r"""Try to initialize the field in the declaration or in every constructor.""",
     withArguments: _withArgumentsFinalFieldNotInitialized);
 
@@ -4353,8 +4499,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFinalFieldNotInitialized,
-      message: """Final field '${name}' is not initialized.""",
-      tip:
+      problemMessage: """Final field '${name}' is not initialized.""",
+      correctionMessage:
           """Try to initialize the field in the declaration or in every constructor.""",
       arguments: {'name': name});
 }
@@ -4365,9 +4511,9 @@
         String
             name)> templateFinalFieldNotInitializedByConstructor = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Final field '#name' is not initialized by this constructor.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try to initialize the field using an initializing formal or a field initializer.""",
     withArguments: _withArgumentsFinalFieldNotInitializedByConstructor);
 
@@ -4383,9 +4529,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFinalFieldNotInitializedByConstructor,
-      message:
+      problemMessage:
           """Final field '${name}' is not initialized by this constructor.""",
-      tip:
+      correctionMessage:
           """Try to initialize the field using an initializing formal or a field initializer.""",
       arguments: {'name': name});
 }
@@ -4396,8 +4542,9 @@
         String
             name)> templateFinalFieldWithoutInitializer = const Template<
         Message Function(String name)>(
-    messageTemplate: r"""The final variable '#name' must be initialized.""",
-    tipTemplate:
+    problemMessageTemplate:
+        r"""The final variable '#name' must be initialized.""",
+    correctionMessageTemplate:
         r"""Try adding an initializer ('= expression') to the declaration.""",
     withArguments: _withArgumentsFinalFieldWithoutInitializer);
 
@@ -4411,8 +4558,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFinalFieldWithoutInitializer,
-      message: """The final variable '${name}' must be initialized.""",
-      tip: """Try adding an initializer ('= expression') to the declaration.""",
+      problemMessage: """The final variable '${name}' must be initialized.""",
+      correctionMessage:
+          """Try adding an initializer ('= expression') to the declaration.""",
       arguments: {'name': name});
 }
 
@@ -4422,7 +4570,7 @@
         String
             name)> templateFinalNotAssignedError = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Final variable '#name' must be assigned before it can be used.""",
     withArguments: _withArgumentsFinalNotAssignedError);
 
@@ -4436,7 +4584,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFinalNotAssignedError,
-      message:
+      problemMessage:
           """Final variable '${name}' must be assigned before it can be used.""",
       arguments: {'name': name});
 }
@@ -4447,7 +4595,7 @@
         String
             name)> templateFinalPossiblyAssignedError = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Final variable '#name' might already be assigned at this point.""",
     withArguments: _withArgumentsFinalPossiblyAssignedError);
 
@@ -4461,7 +4609,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFinalPossiblyAssignedError,
-      message:
+      problemMessage:
           """Final variable '${name}' might already be assigned at this point.""",
       arguments: {'name': name});
 }
@@ -4473,7 +4621,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageForInLoopExactlyOneVariable = const MessageCode(
     "ForInLoopExactlyOneVariable",
-    message: r"""A for-in loop can't have more than one loop variable.""");
+    problemMessage:
+        r"""A for-in loop can't have more than one loop variable.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeForInLoopNotAssignable = messageForInLoopNotAssignable;
@@ -4481,7 +4630,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageForInLoopNotAssignable = const MessageCode(
     "ForInLoopNotAssignable",
-    message:
+    problemMessage:
         r"""Can't assign to this, so it can't be used in a for-in loop.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4492,8 +4641,8 @@
 const MessageCode messageForInLoopWithConstVariable = const MessageCode(
     "ForInLoopWithConstVariable",
     analyzerCodes: <String>["FOR_IN_WITH_CONST_VARIABLE"],
-    message: r"""A for-in loop-variable can't be 'const'.""",
-    tip: r"""Try removing the 'const' modifier.""");
+    problemMessage: r"""A for-in loop-variable can't be 'const'.""",
+    correctionMessage: r"""Try removing the 'const' modifier.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeFunctionAsTypeParameter = messageFunctionAsTypeParameter;
@@ -4501,7 +4650,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFunctionAsTypeParameter = const MessageCode(
     "FunctionAsTypeParameter",
-    message:
+    problemMessage:
         r"""'Function' is a built-in identifier, could not used as a type identifier.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4511,7 +4660,7 @@
 const MessageCode messageFunctionTypeDefaultValue = const MessageCode(
     "FunctionTypeDefaultValue",
     analyzerCodes: <String>["DEFAULT_VALUE_IN_FUNCTION_TYPE"],
-    message: r"""Can't have a default value in a function type.""");
+    problemMessage: r"""Can't have a default value in a function type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeFunctionTypedParameterVar =
@@ -4520,16 +4669,16 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFunctionTypedParameterVar = const MessageCode(
     "FunctionTypedParameterVar",
-    analyzerCodes: <String>["FUNCTION_TYPED_PARAMETER_VAR"],
-    message:
+    index: 119,
+    problemMessage:
         r"""Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type.""",
-    tip: r"""Try replacing the keyword with a return type.""");
+    correctionMessage: r"""Try replacing the keyword with a return type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(String name)> templateFunctionUsedAsDec = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""'Function' is a built-in identifier, could not used as a #name name.""",
     withArguments: _withArgumentsFunctionUsedAsDec);
 
@@ -4544,7 +4693,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeFunctionUsedAsDec,
-      message:
+      problemMessage:
           """'Function' is a built-in identifier, could not used as a ${name} name.""",
       arguments: {'name': name});
 }
@@ -4556,7 +4705,7 @@
 const MessageCode messageGeneratorReturnsValue = const MessageCode(
     "GeneratorReturnsValue",
     analyzerCodes: <String>["RETURN_IN_GENERATOR"],
-    message: r"""'sync*' and 'async*' can't return a value.""");
+    problemMessage: r"""'sync*' and 'async*' can't return a value.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeGenericFunctionTypeInBound =
@@ -4566,7 +4715,7 @@
 const MessageCode messageGenericFunctionTypeInBound = const MessageCode(
     "GenericFunctionTypeInBound",
     analyzerCodes: <String>["GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND"],
-    message:
+    problemMessage:
         r"""Type variables can't have generic function types in their bounds.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4577,9 +4726,9 @@
 const MessageCode messageGenericFunctionTypeUsedAsActualTypeArgument =
     const MessageCode("GenericFunctionTypeUsedAsActualTypeArgument",
         analyzerCodes: <String>["GENERIC_FUNCTION_CANNOT_BE_TYPE_ARGUMENT"],
-        message:
+        problemMessage:
             r"""A generic function type can't be used as a type argument.""",
-        tip: r"""Try using a non-generic function type.""");
+        correctionMessage: r"""Try using a non-generic function type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeGetterConstructor = messageGetterConstructor;
@@ -4588,13 +4737,13 @@
 const MessageCode messageGetterConstructor = const MessageCode(
     "GetterConstructor",
     index: 103,
-    message: r"""Constructors can't be a getter.""",
-    tip: r"""Try removing 'get'.""");
+    problemMessage: r"""Constructors can't be a getter.""",
+    correctionMessage: r"""Try removing 'get'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateGetterNotFound =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Getter not found: '#name'.""",
+        problemMessageTemplate: r"""Getter not found: '#name'.""",
         withArguments: _withArgumentsGetterNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4607,7 +4756,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeGetterNotFound,
-      message: """Getter not found: '${name}'.""", arguments: {'name': name});
+      problemMessage: """Getter not found: '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4617,8 +4767,8 @@
 const MessageCode messageGetterWithFormals = const MessageCode(
     "GetterWithFormals",
     analyzerCodes: <String>["GETTER_WITH_PARAMETERS"],
-    message: r"""A getter can't have formal parameters.""",
-    tip: r"""Try removing '(...)'.""");
+    problemMessage: r"""A getter can't have formal parameters.""",
+    correctionMessage: r"""Try removing '(...)'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeIllegalAssignmentToNonAssignable =
@@ -4628,7 +4778,7 @@
 const MessageCode messageIllegalAssignmentToNonAssignable = const MessageCode(
     "IllegalAssignmentToNonAssignable",
     index: 45,
-    message: r"""Illegal assignment to non-assignable expression.""");
+    problemMessage: r"""Illegal assignment to non-assignable expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeIllegalAsyncGeneratorReturnType =
@@ -4638,7 +4788,7 @@
 const MessageCode messageIllegalAsyncGeneratorReturnType = const MessageCode(
     "IllegalAsyncGeneratorReturnType",
     analyzerCodes: <String>["ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE"],
-    message:
+    problemMessage:
         r"""Functions marked 'async*' must have a return type assignable to 'Stream'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4648,7 +4798,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageIllegalAsyncGeneratorVoidReturnType =
     const MessageCode("IllegalAsyncGeneratorVoidReturnType",
-        message:
+        problemMessage:
             r"""Functions marked 'async*' can't have return type 'void'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4658,13 +4808,13 @@
 const MessageCode messageIllegalAsyncReturnType = const MessageCode(
     "IllegalAsyncReturnType",
     analyzerCodes: <String>["ILLEGAL_ASYNC_RETURN_TYPE"],
-    message:
+    problemMessage:
         r"""Functions marked 'async' must have a return type assignable to 'Future'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateIllegalMixin =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""The type '#name' can't be mixed in.""",
+        problemMessageTemplate: r"""The type '#name' can't be mixed in.""",
         withArguments: _withArgumentsIllegalMixin);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4677,7 +4827,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeIllegalMixin,
-      message: """The type '${name}' can't be mixed in.""",
+      problemMessage: """The type '${name}' can't be mixed in.""",
       arguments: {'name': name});
 }
 
@@ -4685,7 +4835,7 @@
 const Template<Message Function(String name)>
     templateIllegalMixinDueToConstructors =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't use '#name' as a mixin because it has constructors.""",
         withArguments: _withArgumentsIllegalMixinDueToConstructors);
 
@@ -4699,7 +4849,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeIllegalMixinDueToConstructors,
-      message:
+      problemMessage:
           """Can't use '${name}' as a mixin because it has constructors.""",
       arguments: {'name': name});
 }
@@ -4708,7 +4858,7 @@
 const Template<Message Function(String name)>
     templateIllegalMixinDueToConstructorsCause =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""This constructor prevents using '#name' as a mixin.""",
         withArguments: _withArgumentsIllegalMixinDueToConstructorsCause);
 
@@ -4724,7 +4874,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeIllegalMixinDueToConstructorsCause,
-      message: """This constructor prevents using '${name}' as a mixin.""",
+      problemMessage:
+          """This constructor prevents using '${name}' as a mixin.""",
       arguments: {'name': name});
 }
 
@@ -4736,7 +4887,7 @@
 const MessageCode messageIllegalSyncGeneratorReturnType = const MessageCode(
     "IllegalSyncGeneratorReturnType",
     analyzerCodes: <String>["ILLEGAL_SYNC_GENERATOR_RETURN_TYPE"],
-    message:
+    problemMessage:
         r"""Functions marked 'sync*' must have a return type assignable to 'Iterable'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4746,7 +4897,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageIllegalSyncGeneratorVoidReturnType = const MessageCode(
     "IllegalSyncGeneratorVoidReturnType",
-    message: r"""Functions marked 'sync*' can't have return type 'void'.""");
+    problemMessage:
+        r"""Functions marked 'sync*' can't have return type 'void'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeImplementFunction = messageImplementFunction;
@@ -4755,8 +4907,9 @@
 const MessageCode messageImplementFunction = const MessageCode(
     "ImplementFunction",
     severity: Severity.ignored,
-    message: r"""Implementing 'Function' is deprecated.""",
-    tip: r"""Try removing 'Function' from the 'implements' clause.""");
+    problemMessage: r"""Implementing 'Function' is deprecated.""",
+    correctionMessage:
+        r"""Try removing 'Function' from the 'implements' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeImplementsBeforeExtends = messageImplementsBeforeExtends;
@@ -4765,8 +4918,10 @@
 const MessageCode messageImplementsBeforeExtends = const MessageCode(
     "ImplementsBeforeExtends",
     index: 44,
-    message: r"""The extends clause must be before the implements clause.""",
-    tip: r"""Try moving the extends clause before the implements clause.""");
+    problemMessage:
+        r"""The extends clause must be before the implements clause.""",
+    correctionMessage:
+        r"""Try moving the extends clause before the implements clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeImplementsBeforeOn = messageImplementsBeforeOn;
@@ -4775,8 +4930,9 @@
 const MessageCode messageImplementsBeforeOn = const MessageCode(
     "ImplementsBeforeOn",
     index: 43,
-    message: r"""The on clause must be before the implements clause.""",
-    tip: r"""Try moving the on clause before the implements clause.""");
+    problemMessage: r"""The on clause must be before the implements clause.""",
+    correctionMessage:
+        r"""Try moving the on clause before the implements clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeImplementsBeforeWith = messageImplementsBeforeWith;
@@ -4785,8 +4941,10 @@
 const MessageCode messageImplementsBeforeWith = const MessageCode(
     "ImplementsBeforeWith",
     index: 42,
-    message: r"""The with clause must be before the implements clause.""",
-    tip: r"""Try moving the with clause before the implements clause.""");
+    problemMessage:
+        r"""The with clause must be before the implements clause.""",
+    correctionMessage:
+        r"""Try moving the with clause before the implements clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeImplementsFutureOr = messageImplementsFutureOr;
@@ -4794,7 +4952,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageImplementsFutureOr = const MessageCode(
     "ImplementsFutureOr",
-    message:
+    problemMessage:
         r"""The type 'FutureOr' can't be used in an 'implements' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4802,14 +4960,16 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageImplementsNever = const MessageCode("ImplementsNever",
-    message: r"""The type 'Never' can't be used in an 'implements' clause.""");
+    problemMessage:
+        r"""The type 'Never' can't be used in an 'implements' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name, int count)>
     templateImplementsRepeated =
     const Template<Message Function(String name, int count)>(
-        messageTemplate: r"""'#name' can only be implemented once.""",
-        tipTemplate: r"""Try removing #count of the occurrences.""",
+        problemMessageTemplate: r"""'#name' can only be implemented once.""",
+        correctionMessageTemplate:
+            r"""Try removing #count of the occurrences.""",
         withArguments: _withArgumentsImplementsRepeated);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4824,8 +4984,8 @@
   // ignore: unnecessary_null_comparison
   if (count == null) throw 'No count provided';
   return new Message(codeImplementsRepeated,
-      message: """'${name}' can only be implemented once.""",
-      tip: """Try removing ${count} of the occurrences.""",
+      problemMessage: """'${name}' can only be implemented once.""",
+      correctionMessage: """Try removing ${count} of the occurrences.""",
       arguments: {'name': name, 'count': count});
 }
 
@@ -4835,9 +4995,9 @@
         String
             name)> templateImplementsSuperClass = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""'#name' can't be used in both 'extends' and 'implements' clauses.""",
-    tipTemplate: r"""Try removing one of the occurrences.""",
+    correctionMessageTemplate: r"""Try removing one of the occurrences.""",
     withArguments: _withArgumentsImplementsSuperClass);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4850,9 +5010,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeImplementsSuperClass,
-      message:
+      problemMessage:
           """'${name}' can't be used in both 'extends' and 'implements' clauses.""",
-      tip: """Try removing one of the occurrences.""",
+      correctionMessage: """Try removing one of the occurrences.""",
       arguments: {'name': name});
 }
 
@@ -4861,7 +5021,8 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageImplementsVoid = const MessageCode("ImplementsVoid",
-    message: r"""The type 'void' can't be used in an 'implements' clause.""");
+    problemMessage:
+        r"""The type 'void' can't be used in an 'implements' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -4871,7 +5032,7 @@
         String
             name3)> templateImplicitMixinOverride = const Template<
         Message Function(String name, String name2, String name3)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Applying the mixin '#name' to '#name2' introduces an erroneous override of '#name3'.""",
     withArguments: _withArgumentsImplicitMixinOverride);
 
@@ -4892,19 +5053,33 @@
   if (name3.isEmpty) throw 'No name provided';
   name3 = demangleMixinApplicationName(name3);
   return new Message(codeImplicitMixinOverride,
-      message:
+      problemMessage:
           """Applying the mixin '${name}' to '${name2}' introduces an erroneous override of '${name3}'.""",
       arguments: {'name': name, 'name2': name2, 'name3': name3});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeImplicitSuperCallOfNonMethod =
+    messageImplicitSuperCallOfNonMethod;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageImplicitSuperCallOfNonMethod = const MessageCode(
+    "ImplicitSuperCallOfNonMethod",
+    analyzerCodes: <String>["IMPLICIT_CALL_OF_NON_METHOD"],
+    problemMessage:
+        r"""Cannot invoke `super` because it declares 'call' to be something other than a method.""",
+    correctionMessage:
+        r"""Try changing 'call' to a method or explicitly invoke 'call'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeImportAfterPart = messageImportAfterPart;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageImportAfterPart = const MessageCode("ImportAfterPart",
     index: 10,
-    message: r"""Import directives must precede part directives.""",
-    tip: r"""Try moving the import directives before the part directives.""");
+    problemMessage: r"""Import directives must precede part directives.""",
+    correctionMessage:
+        r"""Try moving the import directives before the part directives.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeIncorrectTypeArgumentVariable =
@@ -4914,7 +5089,8 @@
 const MessageCode messageIncorrectTypeArgumentVariable = const MessageCode(
     "IncorrectTypeArgumentVariable",
     severity: Severity.context,
-    message: r"""This is the type variable whose bound isn't conformed to.""");
+    problemMessage:
+        r"""This is the type variable whose bound isn't conformed to.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -4922,7 +5098,7 @@
         String
             string)> templateIncrementalCompilerIllegalParameter = const Template<
         Message Function(String string)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Illegal parameter name '#string' found during expression compilation.""",
     withArguments: _withArgumentsIncrementalCompilerIllegalParameter);
 
@@ -4937,7 +5113,7 @@
 Message _withArgumentsIncrementalCompilerIllegalParameter(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeIncrementalCompilerIllegalParameter,
-      message:
+      problemMessage:
           """Illegal parameter name '${string}' found during expression compilation.""",
       arguments: {'string': string});
 }
@@ -4946,7 +5122,7 @@
 const Template<Message Function(String string)>
     templateIncrementalCompilerIllegalTypeParameter =
     const Template<Message Function(String string)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Illegal type parameter name '#string' found during expression compilation.""",
         withArguments: _withArgumentsIncrementalCompilerIllegalTypeParameter);
 
@@ -4961,7 +5137,7 @@
 Message _withArgumentsIncrementalCompilerIllegalTypeParameter(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeIncrementalCompilerIllegalTypeParameter,
-      message:
+      problemMessage:
           """Illegal type parameter name '${string}' found during expression compilation.""",
       arguments: {'string': string});
 }
@@ -4969,7 +5145,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_)> templateInferredPackageUri =
     const Template<Message Function(Uri uri_)>(
-        messageTemplate: r"""Interpreting this as package URI, '#uri'.""",
+        problemMessageTemplate:
+            r"""Interpreting this as package URI, '#uri'.""",
         withArguments: _withArgumentsInferredPackageUri);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4981,7 +5158,7 @@
 Message _withArgumentsInferredPackageUri(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codeInferredPackageUri,
-      message: """Interpreting this as package URI, '${uri}'.""",
+      problemMessage: """Interpreting this as package URI, '${uri}'.""",
       arguments: {'uri': uri_});
 }
 
@@ -4992,7 +5169,8 @@
 const MessageCode messageInheritedMembersConflict = const MessageCode(
     "InheritedMembersConflict",
     analyzerCodes: <String>["CONFLICTS_WITH_INHERITED_MEMBER"],
-    message: r"""Can't inherit members that conflict with each other.""");
+    problemMessage:
+        r"""Can't inherit members that conflict with each other.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInheritedMembersConflictCause1 =
@@ -5002,7 +5180,7 @@
 const MessageCode messageInheritedMembersConflictCause1 = const MessageCode(
     "InheritedMembersConflictCause1",
     severity: Severity.context,
-    message: r"""This is one inherited member.""");
+    problemMessage: r"""This is one inherited member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInheritedMembersConflictCause2 =
@@ -5012,7 +5190,7 @@
 const MessageCode messageInheritedMembersConflictCause2 = const MessageCode(
     "InheritedMembersConflictCause2",
     severity: Severity.context,
-    message: r"""This is the other inherited member.""");
+    problemMessage: r"""This is the other inherited member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -5021,7 +5199,7 @@
         Uri
             uri_)> templateInitializeFromDillNotSelfContained = const Template<
         Message Function(String string, Uri uri_)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Tried to initialize from a previous compilation (#string), but the file was not self-contained. This might be a bug.
 
 The Dart team would greatly appreciate it if you would take a moment to report this problem at http://dartbug.com/new.
@@ -5042,7 +5220,7 @@
   if (string.isEmpty) throw 'No string provided';
   String? uri = relativizeUri(uri_);
   return new Message(codeInitializeFromDillNotSelfContained,
-      message:
+      problemMessage:
           """Tried to initialize from a previous compilation (${string}), but the file was not self-contained. This might be a bug.
 
 The Dart team would greatly appreciate it if you would take a moment to report this problem at http://dartbug.com/new.
@@ -5055,7 +5233,7 @@
 const Template<Message Function(String string)>
     templateInitializeFromDillNotSelfContainedNoDump =
     const Template<Message Function(String string)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Tried to initialize from a previous compilation (#string), but the file was not self-contained. This might be a bug.
 
 The Dart team would greatly appreciate it if you would take a moment to report this problem at http://dartbug.com/new.""",
@@ -5072,7 +5250,7 @@
 Message _withArgumentsInitializeFromDillNotSelfContainedNoDump(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeInitializeFromDillNotSelfContainedNoDump,
-      message:
+      problemMessage:
           """Tried to initialize from a previous compilation (${string}), but the file was not self-contained. This might be a bug.
 
 The Dart team would greatly appreciate it if you would take a moment to report this problem at http://dartbug.com/new.""",
@@ -5089,7 +5267,7 @@
             uri_)> templateInitializeFromDillUnknownProblem = const Template<
         Message Function(
             String string, String string2, String string3, Uri uri_)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Tried to initialize from a previous compilation (#string), but couldn't.
 Error message was '#string2'.
 Stacktrace included '#string3'.
@@ -5118,7 +5296,7 @@
   if (string3.isEmpty) throw 'No string provided';
   String? uri = relativizeUri(uri_);
   return new Message(codeInitializeFromDillUnknownProblem,
-      message:
+      problemMessage:
           """Tried to initialize from a previous compilation (${string}), but couldn't.
 Error message was '${string2}'.
 Stacktrace included '${string3}'.
@@ -5139,7 +5317,7 @@
 const Template<Message Function(String string, String string2, String string3)>
     templateInitializeFromDillUnknownProblemNoDump = const Template<
             Message Function(String string, String string2, String string3)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Tried to initialize from a previous compilation (#string), but couldn't.
 Error message was '#string2'.
 Stacktrace included '#string3'.
@@ -5162,7 +5340,7 @@
   if (string2.isEmpty) throw 'No string provided';
   if (string3.isEmpty) throw 'No string provided';
   return new Message(codeInitializeFromDillUnknownProblemNoDump,
-      message:
+      problemMessage:
           """Tried to initialize from a previous compilation (${string}), but couldn't.
 Error message was '${string2}'.
 Stacktrace included '${string3}'.
@@ -5180,15 +5358,17 @@
 const MessageCode messageInitializedVariableInForEach = const MessageCode(
     "InitializedVariableInForEach",
     index: 82,
-    message: r"""The loop variable in a for-each loop can't be initialized.""",
-    tip:
+    problemMessage:
+        r"""The loop variable in a for-each loop can't be initialized.""",
+    correctionMessage:
         r"""Try removing the initializer, or using a different kind of loop.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateInitializerForStaticField =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""'#name' isn't an instance field of this class.""",
+        problemMessageTemplate:
+            r"""'#name' isn't an instance field of this class.""",
         withArguments: _withArgumentsInitializerForStaticField);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5201,7 +5381,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInitializerForStaticField,
-      message: """'${name}' isn't an instance field of this class.""",
+      problemMessage: """'${name}' isn't an instance field of this class.""",
       arguments: {'name': name});
 }
 
@@ -5213,12 +5393,12 @@
 const MessageCode messageInitializingFormalTypeMismatchField =
     const MessageCode("InitializingFormalTypeMismatchField",
         severity: Severity.context,
-        message: r"""The field that corresponds to the parameter.""");
+        problemMessage: r"""The field that corresponds to the parameter.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_)> templateInputFileNotFound =
     const Template<Message Function(Uri uri_)>(
-        messageTemplate: r"""Input file not found: #uri.""",
+        problemMessageTemplate: r"""Input file not found: #uri.""",
         withArguments: _withArgumentsInputFileNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5231,16 +5411,18 @@
 Message _withArgumentsInputFileNotFound(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codeInputFileNotFound,
-      message: """Input file not found: ${uri}.""", arguments: {'uri': uri_});
+      problemMessage: """Input file not found: ${uri}.""",
+      arguments: {'uri': uri_});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(int count, int count2)>
     templateInstantiationTooFewArguments =
     const Template<Message Function(int count, int count2)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Too few type arguments: #count required, #count2 given.""",
-        tipTemplate: r"""Try adding the missing type arguments.""",
+        correctionMessageTemplate:
+            r"""Try adding the missing type arguments.""",
         withArguments: _withArgumentsInstantiationTooFewArguments);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5257,9 +5439,9 @@
   // ignore: unnecessary_null_comparison
   if (count2 == null) throw 'No count provided';
   return new Message(codeInstantiationTooFewArguments,
-      message:
+      problemMessage:
           """Too few type arguments: ${count} required, ${count2} given.""",
-      tip: """Try adding the missing type arguments.""",
+      correctionMessage: """Try adding the missing type arguments.""",
       arguments: {'count': count, 'count2': count2});
 }
 
@@ -5267,9 +5449,10 @@
 const Template<Message Function(int count, int count2)>
     templateInstantiationTooManyArguments =
     const Template<Message Function(int count, int count2)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Too many type arguments: #count allowed, but #count2 found.""",
-        tipTemplate: r"""Try removing the extra type arguments.""",
+        correctionMessageTemplate:
+            r"""Try removing the extra type arguments.""",
         withArguments: _withArgumentsInstantiationTooManyArguments);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5286,9 +5469,9 @@
   // ignore: unnecessary_null_comparison
   if (count2 == null) throw 'No count provided';
   return new Message(codeInstantiationTooManyArguments,
-      message:
+      problemMessage:
           """Too many type arguments: ${count} allowed, but ${count2} found.""",
-      tip: """Try removing the extra type arguments.""",
+      correctionMessage: """Try removing the extra type arguments.""",
       arguments: {'count': count, 'count2': count2});
 }
 
@@ -5298,9 +5481,9 @@
         String
             string)> templateIntegerLiteralIsOutOfRange = const Template<
         Message Function(String string)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The integer literal #string can't be represented in 64 bits.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.""",
     withArguments: _withArgumentsIntegerLiteralIsOutOfRange);
 
@@ -5313,9 +5496,9 @@
 Message _withArgumentsIntegerLiteralIsOutOfRange(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeIntegerLiteralIsOutOfRange,
-      message:
+      problemMessage:
           """The integer literal ${string} can't be represented in 64 bits.""",
-      tip:
+      correctionMessage:
           """Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.""",
       arguments: {'string': string});
 }
@@ -5327,7 +5510,7 @@
         String
             name2)> templateInterfaceCheck = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The implementation of '#name' in the non-abstract class '#name2' does not conform to its interface.""",
     withArguments: _withArgumentsInterfaceCheck);
 
@@ -5344,7 +5527,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeInterfaceCheck,
-      message:
+      problemMessage:
           """The implementation of '${name}' in the non-abstract class '${name2}' does not conform to its interface.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -5357,7 +5540,8 @@
 const MessageCode messageInternalProblemAlreadyInitialized = const MessageCode(
     "InternalProblemAlreadyInitialized",
     severity: Severity.internalProblem,
-    message: r"""Attempt to set initializer on field without initializer.""");
+    problemMessage:
+        r"""Attempt to set initializer on field without initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInternalProblemBodyOnAbstractMethod =
@@ -5367,13 +5551,13 @@
 const MessageCode messageInternalProblemBodyOnAbstractMethod =
     const MessageCode("InternalProblemBodyOnAbstractMethod",
         severity: Severity.internalProblem,
-        message: r"""Attempting to set body on abstract method.""");
+        problemMessage: r"""Attempting to set body on abstract method.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name, Uri uri_)>
     templateInternalProblemConstructorNotFound =
     const Template<Message Function(String name, Uri uri_)>(
-        messageTemplate: r"""No constructor named '#name' in '#uri'.""",
+        problemMessageTemplate: r"""No constructor named '#name' in '#uri'.""",
         withArguments: _withArgumentsInternalProblemConstructorNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5390,7 +5574,7 @@
   name = demangleMixinApplicationName(name);
   String? uri = relativizeUri(uri_);
   return new Message(codeInternalProblemConstructorNotFound,
-      message: """No constructor named '${name}' in '${uri}'.""",
+      problemMessage: """No constructor named '${name}' in '${uri}'.""",
       arguments: {'name': name, 'uri': uri_});
 }
 
@@ -5398,7 +5582,7 @@
 const Template<Message Function(String string)>
     templateInternalProblemContextSeverity =
     const Template<Message Function(String string)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Non-context message has context severity: #string""",
         withArguments: _withArgumentsInternalProblemContextSeverity);
 
@@ -5412,7 +5596,7 @@
 Message _withArgumentsInternalProblemContextSeverity(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeInternalProblemContextSeverity,
-      message: """Non-context message has context severity: ${string}""",
+      problemMessage: """Non-context message has context severity: ${string}""",
       arguments: {'string': string});
 }
 
@@ -5420,7 +5604,7 @@
 const Template<Message Function(String name, String string)>
     templateInternalProblemDebugAbort =
     const Template<Message Function(String name, String string)>(
-        messageTemplate: r"""Compilation aborted due to fatal '#name' at:
+        problemMessageTemplate: r"""Compilation aborted due to fatal '#name' at:
 #string""", withArguments: _withArgumentsInternalProblemDebugAbort);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5436,7 +5620,7 @@
   name = demangleMixinApplicationName(name);
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeInternalProblemDebugAbort,
-      message: """Compilation aborted due to fatal '${name}' at:
+      problemMessage: """Compilation aborted due to fatal '${name}' at:
 ${string}""", arguments: {'name': name, 'string': string});
 }
 
@@ -5448,7 +5632,7 @@
 const MessageCode messageInternalProblemExtendingUnmodifiableScope =
     const MessageCode("InternalProblemExtendingUnmodifiableScope",
         severity: Severity.internalProblem,
-        message: r"""Can't extend an unmodifiable scope.""");
+        problemMessage: r"""Can't extend an unmodifiable scope.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInternalProblemLabelUsageInVariablesDeclaration =
@@ -5458,7 +5642,7 @@
 const MessageCode messageInternalProblemLabelUsageInVariablesDeclaration =
     const MessageCode("InternalProblemLabelUsageInVariablesDeclaration",
         severity: Severity.internalProblem,
-        message:
+        problemMessage:
             r"""Unexpected usage of label inside declaration of variables.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5469,14 +5653,14 @@
 const MessageCode messageInternalProblemMissingContext = const MessageCode(
     "InternalProblemMissingContext",
     severity: Severity.internalProblem,
-    message: r"""Compiler cannot run without a compiler context.""",
-    tip:
+    problemMessage: r"""Compiler cannot run without a compiler context.""",
+    correctionMessage:
         r"""Are calls to the compiler wrapped in CompilerContext.runInContext?""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateInternalProblemNotFound =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Couldn't find '#name'.""",
+        problemMessageTemplate: r"""Couldn't find '#name'.""",
         withArguments: _withArgumentsInternalProblemNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5489,14 +5673,15 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInternalProblemNotFound,
-      message: """Couldn't find '${name}'.""", arguments: {'name': name});
+      problemMessage: """Couldn't find '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name, String name2)>
     templateInternalProblemNotFoundIn =
     const Template<Message Function(String name, String name2)>(
-        messageTemplate: r"""Couldn't find '#name' in '#name2'.""",
+        problemMessageTemplate: r"""Couldn't find '#name' in '#name2'.""",
         withArguments: _withArgumentsInternalProblemNotFoundIn);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5513,7 +5698,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeInternalProblemNotFoundIn,
-      message: """Couldn't find '${name}' in '${name2}'.""",
+      problemMessage: """Couldn't find '${name}' in '${name2}'.""",
       arguments: {'name': name, 'name2': name2});
 }
 
@@ -5525,13 +5710,14 @@
 const MessageCode messageInternalProblemPreviousTokenNotFound =
     const MessageCode("InternalProblemPreviousTokenNotFound",
         severity: Severity.internalProblem,
-        message: r"""Couldn't find previous token.""");
+        problemMessage: r"""Couldn't find previous token.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateInternalProblemPrivateConstructorAccess =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Can't access private constructor '#name'.""",
+        problemMessageTemplate:
+            r"""Can't access private constructor '#name'.""",
         withArguments: _withArgumentsInternalProblemPrivateConstructorAccess);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5546,7 +5732,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInternalProblemPrivateConstructorAccess,
-      message: """Can't access private constructor '${name}'.""",
+      problemMessage: """Can't access private constructor '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -5558,14 +5744,14 @@
 const MessageCode messageInternalProblemProvidedBothCompileSdkAndSdkSummary =
     const MessageCode("InternalProblemProvidedBothCompileSdkAndSdkSummary",
         severity: Severity.internalProblem,
-        message:
+        problemMessage:
             r"""The compileSdk and sdkSummary options are mutually exclusive""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name, String string)>
     templateInternalProblemStackNotEmpty =
     const Template<Message Function(String name, String string)>(
-        messageTemplate: r"""#name.stack isn't empty:
+        problemMessageTemplate: r"""#name.stack isn't empty:
   #string""", withArguments: _withArgumentsInternalProblemStackNotEmpty);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5581,7 +5767,7 @@
   name = demangleMixinApplicationName(name);
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeInternalProblemStackNotEmpty,
-      message: """${name}.stack isn't empty:
+      problemMessage: """${name}.stack isn't empty:
   ${string}""", arguments: {'name': name, 'string': string});
 }
 
@@ -5589,7 +5775,7 @@
 const Template<Message Function(String string, String string2)>
     templateInternalProblemUnexpected =
     const Template<Message Function(String string, String string2)>(
-        messageTemplate: r"""Expected '#string', but got '#string2'.""",
+        problemMessageTemplate: r"""Expected '#string', but got '#string2'.""",
         withArguments: _withArgumentsInternalProblemUnexpected);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5604,7 +5790,7 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeInternalProblemUnexpected,
-      message: """Expected '${string}', but got '${string2}'.""",
+      problemMessage: """Expected '${string}', but got '${string2}'.""",
       arguments: {'string': string, 'string2': string2});
 }
 
@@ -5615,7 +5801,7 @@
         Uri
             uri_)> templateInternalProblemUnfinishedTypeVariable = const Template<
         Message Function(String name, Uri uri_)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Unfinished type variable '#name' found in non-source library '#uri'.""",
     withArguments: _withArgumentsInternalProblemUnfinishedTypeVariable);
 
@@ -5633,7 +5819,7 @@
   name = demangleMixinApplicationName(name);
   String? uri = relativizeUri(uri_);
   return new Message(codeInternalProblemUnfinishedTypeVariable,
-      message:
+      problemMessage:
           """Unfinished type variable '${name}' found in non-source library '${uri}'.""",
       arguments: {'name': name, 'uri': uri_});
 }
@@ -5642,7 +5828,7 @@
 const Template<Message Function(String string, String string2)>
     templateInternalProblemUnhandled =
     const Template<Message Function(String string, String string2)>(
-        messageTemplate: r"""Unhandled #string in #string2.""",
+        problemMessageTemplate: r"""Unhandled #string in #string2.""",
         withArguments: _withArgumentsInternalProblemUnhandled);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5657,7 +5843,7 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeInternalProblemUnhandled,
-      message: """Unhandled ${string} in ${string2}.""",
+      problemMessage: """Unhandled ${string} in ${string2}.""",
       arguments: {'string': string, 'string2': string2});
 }
 
@@ -5665,7 +5851,7 @@
 const Template<Message Function(String string)>
     templateInternalProblemUnimplemented =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""Unimplemented #string.""",
+        problemMessageTemplate: r"""Unimplemented #string.""",
         withArguments: _withArgumentsInternalProblemUnimplemented);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5677,14 +5863,15 @@
 Message _withArgumentsInternalProblemUnimplemented(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeInternalProblemUnimplemented,
-      message: """Unimplemented ${string}.""", arguments: {'string': string});
+      problemMessage: """Unimplemented ${string}.""",
+      arguments: {'string': string});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateInternalProblemUnsupported =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Unsupported operation: '#name'.""",
+        problemMessageTemplate: r"""Unsupported operation: '#name'.""",
         withArguments: _withArgumentsInternalProblemUnsupported);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5697,7 +5884,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInternalProblemUnsupported,
-      message: """Unsupported operation: '${name}'.""",
+      problemMessage: """Unsupported operation: '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -5705,7 +5892,7 @@
 const Template<Message Function(Uri uri_)>
     templateInternalProblemUriMissingScheme =
     const Template<Message Function(Uri uri_)>(
-        messageTemplate: r"""The URI '#uri' has no scheme.""",
+        problemMessageTemplate: r"""The URI '#uri' has no scheme.""",
         withArguments: _withArgumentsInternalProblemUriMissingScheme);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5717,15 +5904,18 @@
 Message _withArgumentsInternalProblemUriMissingScheme(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codeInternalProblemUriMissingScheme,
-      message: """The URI '${uri}' has no scheme.""", arguments: {'uri': uri_});
+      problemMessage: """The URI '${uri}' has no scheme.""",
+      arguments: {'uri': uri_});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)>
     templateInternalProblemVerificationError =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""Verification of the generated program failed:
-#string""", withArguments: _withArgumentsInternalProblemVerificationError);
+        problemMessageTemplate:
+            r"""Verification of the generated program failed:
+#string""",
+        withArguments: _withArgumentsInternalProblemVerificationError);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String string)>
@@ -5738,7 +5928,7 @@
 Message _withArgumentsInternalProblemVerificationError(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeInternalProblemVerificationError,
-      message: """Verification of the generated program failed:
+      problemMessage: """Verification of the generated program failed:
 ${string}""", arguments: {'string': string});
 }
 
@@ -5749,7 +5939,7 @@
 const MessageCode messageInterpolationInUri = const MessageCode(
     "InterpolationInUri",
     analyzerCodes: <String>["INVALID_LITERAL_IN_CONFIGURATION"],
-    message: r"""Can't use string interpolation in a URI.""");
+    problemMessage: r"""Can't use string interpolation in a URI.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInvalidAwaitFor = messageInvalidAwaitFor;
@@ -5757,14 +5947,15 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInvalidAwaitFor = const MessageCode("InvalidAwaitFor",
     index: 9,
-    message:
+    problemMessage:
         r"""The keyword 'await' isn't allowed for a normal 'for' statement.""",
-    tip: r"""Try removing the keyword, or use a for-each statement.""");
+    correctionMessage:
+        r"""Try removing the keyword, or use a for-each statement.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateInvalidBreakTarget =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Can't break to '#name'.""",
+        problemMessageTemplate: r"""Can't break to '#name'.""",
         withArguments: _withArgumentsInvalidBreakTarget);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5778,7 +5969,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInvalidBreakTarget,
-      message: """Can't break to '${name}'.""", arguments: {'name': name});
+      problemMessage: """Can't break to '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5788,7 +5980,7 @@
 const MessageCode messageInvalidCatchArguments = const MessageCode(
     "InvalidCatchArguments",
     analyzerCodes: <String>["INVALID_CATCH_ARGUMENTS"],
-    message: r"""Invalid catch arguments.""");
+    problemMessage: r"""Invalid catch arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInvalidCodePoint = messageInvalidCodePoint;
@@ -5797,13 +5989,13 @@
 const MessageCode messageInvalidCodePoint = const MessageCode(
     "InvalidCodePoint",
     analyzerCodes: <String>["INVALID_CODE_POINT"],
-    message:
+    problemMessage:
         r"""The escape sequence starting with '\u' isn't a valid code point.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateInvalidContinueTarget =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Can't continue at '#name'.""",
+        problemMessageTemplate: r"""Can't continue at '#name'.""",
         withArguments: _withArgumentsInvalidContinueTarget);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5817,14 +6009,16 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInvalidContinueTarget,
-      message: """Can't continue at '${name}'.""", arguments: {'name': name});
+      problemMessage: """Can't continue at '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateInvalidGetterSetterTypeFieldContext =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""This is the declaration of the field '#name'.""",
+        problemMessageTemplate:
+            r"""This is the declaration of the field '#name'.""",
         withArguments: _withArgumentsInvalidGetterSetterTypeFieldContext);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5839,7 +6033,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInvalidGetterSetterTypeFieldContext,
-      message: """This is the declaration of the field '${name}'.""",
+      problemMessage: """This is the declaration of the field '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -5847,7 +6041,8 @@
 const Template<Message Function(String name)>
     templateInvalidGetterSetterTypeGetterContext =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""This is the declaration of the getter '#name'.""",
+        problemMessageTemplate:
+            r"""This is the declaration of the getter '#name'.""",
         withArguments: _withArgumentsInvalidGetterSetterTypeGetterContext);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5862,7 +6057,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInvalidGetterSetterTypeGetterContext,
-      message: """This is the declaration of the getter '${name}'.""",
+      problemMessage: """This is the declaration of the getter '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -5870,7 +6065,8 @@
 const Template<Message Function(String name)>
     templateInvalidGetterSetterTypeSetterContext =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""This is the declaration of the setter '#name'.""",
+        problemMessageTemplate:
+            r"""This is the declaration of the setter '#name'.""",
         withArguments: _withArgumentsInvalidGetterSetterTypeSetterContext);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5885,7 +6081,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInvalidGetterSetterTypeSetterContext,
-      message: """This is the declaration of the setter '${name}'.""",
+      problemMessage: """This is the declaration of the setter '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -5896,7 +6092,7 @@
 const MessageCode messageInvalidHexEscape = const MessageCode(
     "InvalidHexEscape",
     index: 40,
-    message:
+    problemMessage:
         r"""An escape sequence starting with '\x' must be followed by 2 hexadecimal digits.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5906,8 +6102,9 @@
 const MessageCode messageInvalidInitializer = const MessageCode(
     "InvalidInitializer",
     index: 90,
-    message: r"""Not a valid initializer.""",
-    tip: r"""To initialize a field, use the syntax 'name = value'.""");
+    problemMessage: r"""Not a valid initializer.""",
+    correctionMessage:
+        r"""To initialize a field, use the syntax 'name = value'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInvalidInlineFunctionType =
@@ -5917,9 +6114,9 @@
 const MessageCode messageInvalidInlineFunctionType = const MessageCode(
     "InvalidInlineFunctionType",
     analyzerCodes: <String>["INVALID_INLINE_FUNCTION_TYPE"],
-    message:
+    problemMessage:
         r"""Inline function types cannot be used for parameters in a generic function type.""",
-    tip:
+    correctionMessage:
         r"""Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f').""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5928,12 +6125,12 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInvalidNnbdDillLibrary = const MessageCode(
     "InvalidNnbdDillLibrary",
-    message: r"""Trying to use library with invalid null safety.""");
+    problemMessage: r"""Trying to use library with invalid null safety.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateInvalidOperator =
     const Template<Message Function(Token token)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The string '#lexeme' isn't a user-definable operator.""",
         withArguments: _withArgumentsInvalidOperator);
 
@@ -5945,7 +6142,8 @@
 Message _withArgumentsInvalidOperator(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeInvalidOperator,
-      message: """The string '${lexeme}' isn't a user-definable operator.""",
+      problemMessage:
+          """The string '${lexeme}' isn't a user-definable operator.""",
       arguments: {'lexeme': token});
 }
 
@@ -5953,7 +6151,7 @@
 const Template<Message Function(Uri uri_, String string)>
     templateInvalidPackageUri =
     const Template<Message Function(Uri uri_, String string)>(
-        messageTemplate: r"""Invalid package URI '#uri':
+        problemMessageTemplate: r"""Invalid package URI '#uri':
   #string.""", withArguments: _withArgumentsInvalidPackageUri);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5967,7 +6165,7 @@
   String? uri = relativizeUri(uri_);
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeInvalidPackageUri,
-      message: """Invalid package URI '${uri}':
+      problemMessage: """Invalid package URI '${uri}':
   ${string}.""", arguments: {'uri': uri_, 'string': string});
 }
 
@@ -5979,7 +6177,7 @@
 const MessageCode messageInvalidSuperInInitializer = const MessageCode(
     "InvalidSuperInInitializer",
     index: 47,
-    message:
+    problemMessage:
         r"""Can only use 'super' in an initializer for calling the superclass constructor (e.g. 'super()' or 'super.namedConstructor()')""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5989,8 +6187,8 @@
 const MessageCode messageInvalidSyncModifier = const MessageCode(
     "InvalidSyncModifier",
     analyzerCodes: <String>["MISSING_STAR_AFTER_SYNC"],
-    message: r"""Invalid modifier 'sync'.""",
-    tip: r"""Try replacing 'sync' with 'sync*'.""");
+    problemMessage: r"""Invalid modifier 'sync'.""",
+    correctionMessage: r"""Try replacing 'sync' with 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInvalidThisInInitializer = messageInvalidThisInInitializer;
@@ -5999,7 +6197,7 @@
 const MessageCode messageInvalidThisInInitializer = const MessageCode(
     "InvalidThisInInitializer",
     index: 65,
-    message:
+    problemMessage:
         r"""Can only use 'this' in an initializer for field initialization (e.g. 'this.x = something') and constructor redirection (e.g. 'this()' or 'this.namedConstructor())""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6009,8 +6207,9 @@
         String string2,
         String
             name2)> templateInvalidTypeVariableInSupertype = const Template<
-        Message Function(String name, String string2, String name2)>(
-    messageTemplate:
+        Message Function(
+            String name, String string2, String name2)>(
+    problemMessageTemplate:
         r"""Can't use implicitly 'out' variable '#name' in an '#string2' position in supertype '#name2'.""",
     withArguments: _withArgumentsInvalidTypeVariableInSupertype);
 
@@ -6030,7 +6229,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeInvalidTypeVariableInSupertype,
-      message:
+      problemMessage:
           """Can't use implicitly 'out' variable '${name}' in an '${string2}' position in supertype '${name2}'.""",
       arguments: {'name': name, 'string2': string2, 'name2': name2});
 }
@@ -6042,7 +6241,7 @@
     templateInvalidTypeVariableInSupertypeWithVariance = const Template<
             Message Function(
                 String string, String name, String string2, String name2)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't use '#string' type variable '#name' in an '#string2' position in supertype '#name2'.""",
         withArguments:
             _withArgumentsInvalidTypeVariableInSupertypeWithVariance);
@@ -6067,7 +6266,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeInvalidTypeVariableInSupertypeWithVariance,
-      message:
+      problemMessage:
           """Can't use '${string}' type variable '${name}' in an '${string2}' position in supertype '${name2}'.""",
       arguments: {
         'string': string,
@@ -6085,7 +6284,7 @@
         String
             string2)> templateInvalidTypeVariableVariancePosition = const Template<
         Message Function(String string, String name, String string2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Can't use '#string' type variable '#name' in an '#string2' position.""",
     withArguments: _withArgumentsInvalidTypeVariableVariancePosition);
 
@@ -6104,7 +6303,7 @@
   name = demangleMixinApplicationName(name);
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeInvalidTypeVariableVariancePosition,
-      message:
+      problemMessage:
           """Can't use '${string}' type variable '${name}' in an '${string2}' position.""",
       arguments: {'string': string, 'name': name, 'string2': string2});
 }
@@ -6113,7 +6312,7 @@
 const Template<Message Function(String string, String name, String string2)>
     templateInvalidTypeVariableVariancePositionInReturnType = const Template<
             Message Function(String string, String name, String string2)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't use '#string' type variable '#name' in an '#string2' position in the return type.""",
         withArguments:
             _withArgumentsInvalidTypeVariableVariancePositionInReturnType);
@@ -6133,7 +6332,7 @@
   name = demangleMixinApplicationName(name);
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeInvalidTypeVariableVariancePositionInReturnType,
-      message:
+      problemMessage:
           """Can't use '${string}' type variable '${name}' in an '${string2}' position in the return type.""",
       arguments: {'string': string, 'name': name, 'string2': string2});
 }
@@ -6145,7 +6344,7 @@
 const MessageCode messageInvalidUnicodeEscape = const MessageCode(
     "InvalidUnicodeEscape",
     index: 38,
-    message:
+    problemMessage:
         r"""An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6156,8 +6355,8 @@
 const MessageCode messageInvalidUseOfNullAwareAccess = const MessageCode(
     "InvalidUseOfNullAwareAccess",
     analyzerCodes: <String>["INVALID_USE_OF_NULL_AWARE_ACCESS"],
-    message: r"""Cannot use '?.' here.""",
-    tip: r"""Try using '.'.""");
+    problemMessage: r"""Cannot use '?.' here.""",
+    correctionMessage: r"""Try using '.'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInvalidVoid = messageInvalidVoid;
@@ -6165,14 +6364,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInvalidVoid = const MessageCode("InvalidVoid",
     analyzerCodes: <String>["EXPECTED_TYPE_NAME"],
-    message: r"""Type 'void' can't be used here.""",
-    tip:
+    problemMessage: r"""Type 'void' can't be used here.""",
+    correctionMessage:
         r"""Try removing 'void' keyword or replace it with 'var', 'final', or a type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateInvokeNonFunction =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#name' isn't a function or method and can't be invoked.""",
         withArguments: _withArgumentsInvokeNonFunction);
 
@@ -6186,7 +6385,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeInvokeNonFunction,
-      message: """'${name}' isn't a function or method and can't be invoked.""",
+      problemMessage:
+          """'${name}' isn't a function or method and can't be invoked.""",
       arguments: {'name': name});
 }
 
@@ -6197,9 +6397,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageJsInteropAnonymousFactoryPositionalParameters =
     const MessageCode("JsInteropAnonymousFactoryPositionalParameters",
-        message:
+        problemMessage:
             r"""Factory constructors for @anonymous JS interop classes should not contain any positional parameters.""",
-        tip: r"""Try replacing them with named parameters instead.""");
+        correctionMessage:
+            r"""Try replacing them with named parameters instead.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -6208,9 +6409,9 @@
         String
             name2)> templateJsInteropDartClassExtendsJSClass = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Dart class '#name' cannot extend JS interop class '#name2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try adding the JS interop annotation or removing it from the parent class.""",
     withArguments: _withArgumentsJsInteropDartClassExtendsJSClass);
 
@@ -6229,9 +6430,9 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeJsInteropDartClassExtendsJSClass,
-      message:
+      problemMessage:
           """Dart class '${name}' cannot extend JS interop class '${name2}'.""",
-      tip:
+      correctionMessage:
           """Try adding the JS interop annotation or removing it from the parent class.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -6243,9 +6444,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageJsInteropEnclosingClassJSAnnotation = const MessageCode(
     "JsInteropEnclosingClassJSAnnotation",
-    message:
+    problemMessage:
         r"""Member has a JS interop annotation but the enclosing class does not.""",
-    tip: r"""Try adding the annotation to the enclosing class.""");
+    correctionMessage:
+        r"""Try adding the annotation to the enclosing class.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeJsInteropEnclosingClassJSAnnotationContext =
@@ -6255,7 +6457,7 @@
 const MessageCode messageJsInteropEnclosingClassJSAnnotationContext =
     const MessageCode("JsInteropEnclosingClassJSAnnotationContext",
         severity: Severity.context,
-        message: r"""This is the enclosing class.""");
+        problemMessage: r"""This is the enclosing class.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeJsInteropExternalExtensionMemberOnTypeInvalid =
@@ -6264,9 +6466,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageJsInteropExternalExtensionMemberOnTypeInvalid =
     const MessageCode("JsInteropExternalExtensionMemberOnTypeInvalid",
-        message:
+        problemMessage:
             r"""JS interop or Native class required for 'external' extension members.""",
-        tip:
+        correctionMessage:
             r"""Try adding a JS interop annotation to the on type class of the extension.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6276,8 +6478,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageJsInteropExternalMemberNotJSAnnotated = const MessageCode(
     "JsInteropExternalMemberNotJSAnnotated",
-    message: r"""Only JS interop members may be 'external'.""",
-    tip:
+    problemMessage: r"""Only JS interop members may be 'external'.""",
+    correctionMessage:
         r"""Try removing the 'external' keyword or adding a JS interop annotation.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6287,9 +6489,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageJsInteropIndexNotSupported = const MessageCode(
     "JsInteropIndexNotSupported",
-    message:
+    problemMessage:
         r"""JS interop classes do not support [] and []= operator methods.""",
-    tip: r"""Try replacing with a normal method.""");
+    correctionMessage: r"""Try replacing with a normal method.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -6298,9 +6500,9 @@
         String
             name2)> templateJsInteropJSClassExtendsDartClass = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""JS interop class '#name' cannot extend Dart class '#name2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try removing the JS interop annotation or adding it to the parent class.""",
     withArguments: _withArgumentsJsInteropJSClassExtendsDartClass);
 
@@ -6319,9 +6521,9 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeJsInteropJSClassExtendsDartClass,
-      message:
+      problemMessage:
           """JS interop class '${name}' cannot extend Dart class '${name2}'.""",
-      tip:
+      correctionMessage:
           """Try removing the JS interop annotation or adding it to the parent class.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -6332,9 +6534,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageJsInteropNamedParameters = const MessageCode(
     "JsInteropNamedParameters",
-    message:
+    problemMessage:
         r"""Named parameters for JS interop functions are only allowed in a factory constructor of an @anonymous JS class.""",
-    tip: r"""Try replacing them with normal or optional parameters.""");
+    correctionMessage:
+        r"""Try replacing them with normal or optional parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -6343,11 +6546,12 @@
         String name2,
         String
             string3)> templateJsInteropNativeClassInAnnotation = const Template<
-        Message Function(String name, String name2, String string3)>(
-    messageTemplate:
-        r"""JS interop class '#name' conflicts with natively supported class '#name2' in '#string3'.""",
-    tipTemplate:
-        r"""Try making the @JS class into an @anonymous class or use js_util on the JS object.""",
+        Message Function(
+            String name, String name2, String string3)>(
+    problemMessageTemplate:
+        r"""Non-static JS interop class '#name' conflicts with natively supported class '#name2' in '#string3'.""",
+    correctionMessageTemplate:
+        r"""Try replacing it with a static JS interop class using `@staticInterop` with extension methods, or use js_util to interact with the native object of type '#name2'.""",
     withArguments: _withArgumentsJsInteropNativeClassInAnnotation);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6366,9 +6570,9 @@
   name2 = demangleMixinApplicationName(name2);
   if (string3.isEmpty) throw 'No string provided';
   return new Message(codeJsInteropNativeClassInAnnotation,
-      message:
-          """JS interop class '${name}' conflicts with natively supported class '${name2}' in '${string3}'.""",
-      tip: """Try making the @JS class into an @anonymous class or use js_util on the JS object.""",
+      problemMessage:
+          """Non-static JS interop class '${name}' conflicts with natively supported class '${name2}' in '${string3}'.""",
+      correctionMessage: """Try replacing it with a static JS interop class using `@staticInterop` with extension methods, or use js_util to interact with the native object of type '${name2}'.""",
       arguments: {'name': name, 'name2': name2, 'string3': string3});
 }
 
@@ -6379,9 +6583,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageJsInteropNonExternalConstructor = const MessageCode(
     "JsInteropNonExternalConstructor",
-    message:
+    problemMessage:
         r"""JS interop classes do not support non-external constructors.""",
-    tip: r"""Try annotating with `external`.""");
+    correctionMessage: r"""Try annotating with `external`.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeJsInteropNonExternalMember =
@@ -6390,16 +6594,76 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageJsInteropNonExternalMember = const MessageCode(
     "JsInteropNonExternalMember",
-    message:
+    problemMessage:
         r"""This JS interop member must be annotated with `external`. Only factories and static methods can be non-external.""",
-    tip: r"""Try annotating the member with `external`.""");
+    correctionMessage: r"""Try annotating the member with `external`.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateJsInteropStaticInteropWithInstanceMembers =
+    const Template<Message Function(String name)>(
+        problemMessageTemplate:
+            r"""JS interop class '#name' with `@staticInterop` annotation cannot declare instance members.""",
+        correctionMessageTemplate:
+            r"""Try moving the instance member to a static extension.""",
+        withArguments: _withArgumentsJsInteropStaticInteropWithInstanceMembers);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeJsInteropStaticInteropWithInstanceMembers =
+    const Code<Message Function(String name)>(
+  "JsInteropStaticInteropWithInstanceMembers",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsJsInteropStaticInteropWithInstanceMembers(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeJsInteropStaticInteropWithInstanceMembers,
+      problemMessage:
+          """JS interop class '${name}' with `@staticInterop` annotation cannot declare instance members.""",
+      correctionMessage: """Try moving the instance member to a static extension.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name, String name2)>
+    templateJsInteropStaticInteropWithNonStaticSupertype =
+    const Template<Message Function(String name, String name2)>(
+        problemMessageTemplate:
+            r"""JS interop class '#name' has an `@staticInterop` annotation, but has supertype '#name2', which is non-static.""",
+        correctionMessageTemplate:
+            r"""Try marking the supertype as a static interop class using `@staticInterop`.""",
+        withArguments:
+            _withArgumentsJsInteropStaticInteropWithNonStaticSupertype);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, String name2)>
+    codeJsInteropStaticInteropWithNonStaticSupertype =
+    const Code<Message Function(String name, String name2)>(
+  "JsInteropStaticInteropWithNonStaticSupertype",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsJsInteropStaticInteropWithNonStaticSupertype(
+    String name, String name2) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  if (name2.isEmpty) throw 'No name provided';
+  name2 = demangleMixinApplicationName(name2);
+  return new Message(codeJsInteropStaticInteropWithNonStaticSupertype,
+      problemMessage:
+          """JS interop class '${name}' has an `@staticInterop` annotation, but has supertype '${name2}', which is non-static.""",
+      correctionMessage: """Try marking the supertype as a static interop class using `@staticInterop`.""",
+      arguments: {'name': name, 'name2': name2});
+}
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(String name)> templateLabelNotFound = const Template<
         Message Function(String name)>(
-    messageTemplate: r"""Can't find label '#name'.""",
-    tipTemplate:
+    problemMessageTemplate: r"""Can't find label '#name'.""",
+    correctionMessageTemplate:
         r"""Try defining the label, or correcting the name to match an existing label.""",
     withArguments: _withArgumentsLabelNotFound);
 
@@ -6413,8 +6677,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeLabelNotFound,
-      message: """Can't find label '${name}'.""",
-      tip:
+      problemMessage: """Can't find label '${name}'.""",
+      correctionMessage:
           """Try defining the label, or correcting the name to match an existing label.""",
       arguments: {'name': name});
 }
@@ -6426,7 +6690,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageLanguageVersionInvalidInDotPackages = const MessageCode(
     "LanguageVersionInvalidInDotPackages",
-    message:
+    problemMessage:
         r"""The language version is not specified correctly in the packages file.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6437,7 +6701,7 @@
 const MessageCode messageLanguageVersionLibraryContext = const MessageCode(
     "LanguageVersionLibraryContext",
     severity: Severity.context,
-    message: r"""This is language version annotation in the library.""");
+    problemMessage: r"""This is language version annotation in the library.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeLanguageVersionMismatchInPart =
@@ -6446,7 +6710,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageLanguageVersionMismatchInPart = const MessageCode(
     "LanguageVersionMismatchInPart",
-    message:
+    problemMessage:
         r"""The language version override has to be the same in the library and its part(s).""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6456,7 +6720,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageLanguageVersionMismatchInPatch = const MessageCode(
     "LanguageVersionMismatchInPatch",
-    message:
+    problemMessage:
         r"""The language version override has to be the same in the library and its patch(es).""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6467,7 +6731,7 @@
 const MessageCode messageLanguageVersionPartContext = const MessageCode(
     "LanguageVersionPartContext",
     severity: Severity.context,
-    message: r"""This is language version annotation in the part.""");
+    problemMessage: r"""This is language version annotation in the part.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeLanguageVersionPatchContext =
@@ -6477,7 +6741,7 @@
 const MessageCode messageLanguageVersionPatchContext = const MessageCode(
     "LanguageVersionPatchContext",
     severity: Severity.context,
-    message: r"""This is language version annotation in the patch.""");
+    problemMessage: r"""This is language version annotation in the patch.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -6486,7 +6750,7 @@
         int
             count2)> templateLanguageVersionTooHigh = const Template<
         Message Function(int count, int count2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The specified language version is too high. The highest supported language version is #count.#count2.""",
     withArguments: _withArgumentsLanguageVersionTooHigh);
 
@@ -6503,7 +6767,7 @@
   // ignore: unnecessary_null_comparison
   if (count2 == null) throw 'No count provided';
   return new Message(codeLanguageVersionTooHigh,
-      message:
+      problemMessage:
           """The specified language version is too high. The highest supported language version is ${count}.${count2}.""",
       arguments: {'count': count, 'count2': count2});
 }
@@ -6512,7 +6776,7 @@
 const Template<Message Function(String name)>
     templateLateDefinitelyAssignedError =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Late final variable '#name' definitely assigned.""",
         withArguments: _withArgumentsLateDefinitelyAssignedError);
 
@@ -6527,7 +6791,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeLateDefinitelyAssignedError,
-      message: """Late final variable '${name}' definitely assigned.""",
+      problemMessage: """Late final variable '${name}' definitely assigned.""",
       arguments: {'name': name});
 }
 
@@ -6537,7 +6801,7 @@
         String
             name)> templateLateDefinitelyUnassignedError = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Late variable '#name' without initializer is definitely unassigned.""",
     withArguments: _withArgumentsLateDefinitelyUnassignedError);
 
@@ -6552,7 +6816,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeLateDefinitelyUnassignedError,
-      message:
+      problemMessage:
           """Late variable '${name}' without initializer is definitely unassigned.""",
       arguments: {'name': name});
 }
@@ -6564,9 +6828,10 @@
 const MessageCode messageLibraryDirectiveNotFirst = const MessageCode(
     "LibraryDirectiveNotFirst",
     index: 37,
-    message:
+    problemMessage:
         r"""The library directive must appear before all other directives.""",
-    tip: r"""Try moving the library directive before any other directives.""");
+    correctionMessage:
+        r"""Try moving the library directive before any other directives.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeListLiteralTooManyTypeArguments =
@@ -6576,15 +6841,15 @@
 const MessageCode messageListLiteralTooManyTypeArguments = const MessageCode(
     "ListLiteralTooManyTypeArguments",
     analyzerCodes: <String>["EXPECTED_ONE_LIST_TYPE_ARGUMENTS"],
-    message: r"""List literal requires exactly one type argument.""");
+    problemMessage: r"""List literal requires exactly one type argument.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string, Token token)>
     templateLiteralWithClass =
     const Template<Message Function(String string, Token token)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A #string literal can't be prefixed by '#lexeme'.""",
-        tipTemplate: r"""Try removing '#lexeme'""",
+        correctionMessageTemplate: r"""Try removing '#lexeme'""",
         withArguments: _withArgumentsLiteralWithClass);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6597,18 +6862,20 @@
   if (string.isEmpty) throw 'No string provided';
   String lexeme = token.lexeme;
   return new Message(codeLiteralWithClass,
-      message: """A ${string} literal can't be prefixed by '${lexeme}'.""",
-      tip: """Try removing '${lexeme}'""",
+      problemMessage:
+          """A ${string} literal can't be prefixed by '${lexeme}'.""",
+      correctionMessage: """Try removing '${lexeme}'""",
       arguments: {'string': string, 'lexeme': token});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String string, Token token)>
+const Template<
+        Message Function(String string, Token token)>
     templateLiteralWithClassAndNew =
     const Template<Message Function(String string, Token token)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A #string literal can't be prefixed by 'new #lexeme'.""",
-        tipTemplate: r"""Try removing 'new' and '#lexeme'""",
+        correctionMessageTemplate: r"""Try removing 'new' and '#lexeme'""",
         withArguments: _withArgumentsLiteralWithClassAndNew);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6623,8 +6890,9 @@
   if (string.isEmpty) throw 'No string provided';
   String lexeme = token.lexeme;
   return new Message(codeLiteralWithClassAndNew,
-      message: """A ${string} literal can't be prefixed by 'new ${lexeme}'.""",
-      tip: """Try removing 'new' and '${lexeme}'""",
+      problemMessage:
+          """A ${string} literal can't be prefixed by 'new ${lexeme}'.""",
+      correctionMessage: """Try removing 'new' and '${lexeme}'""",
       arguments: {'string': string, 'lexeme': token});
 }
 
@@ -6634,8 +6902,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageLiteralWithNew = const MessageCode("LiteralWithNew",
     index: 117,
-    message: r"""A literal can't be prefixed by 'new'.""",
-    tip: r"""Try removing 'new'""");
+    problemMessage: r"""A literal can't be prefixed by 'new'.""",
+    correctionMessage: r"""Try removing 'new'""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeLoadLibraryTakesNoArguments =
@@ -6645,7 +6913,7 @@
 const MessageCode messageLoadLibraryTakesNoArguments = const MessageCode(
     "LoadLibraryTakesNoArguments",
     analyzerCodes: <String>["LOAD_LIBRARY_TAKES_NO_ARGUMENTS"],
-    message: r"""'loadLibrary' takes no arguments.""");
+    problemMessage: r"""'loadLibrary' takes no arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMainNotFunctionDeclaration =
@@ -6654,7 +6922,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMainNotFunctionDeclaration = const MessageCode(
     "MainNotFunctionDeclaration",
-    message: r"""The 'main' declaration must be a function declaration.""");
+    problemMessage:
+        r"""The 'main' declaration must be a function declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMainNotFunctionDeclarationExported =
@@ -6663,7 +6932,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMainNotFunctionDeclarationExported = const MessageCode(
     "MainNotFunctionDeclarationExported",
-    message:
+    problemMessage:
         r"""The exported 'main' declaration must be a function declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6673,7 +6942,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMainRequiredNamedParameters = const MessageCode(
     "MainRequiredNamedParameters",
-    message: r"""The 'main' method cannot have required named parameters.""");
+    problemMessage:
+        r"""The 'main' method cannot have required named parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMainRequiredNamedParametersExported =
@@ -6682,7 +6952,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMainRequiredNamedParametersExported = const MessageCode(
     "MainRequiredNamedParametersExported",
-    message:
+    problemMessage:
         r"""The exported 'main' method cannot have required named parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6692,7 +6962,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMainTooManyRequiredParameters = const MessageCode(
     "MainTooManyRequiredParameters",
-    message: r"""The 'main' method must have at most 2 required parameters.""");
+    problemMessage:
+        r"""The 'main' method must have at most 2 required parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMainTooManyRequiredParametersExported =
@@ -6701,7 +6972,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMainTooManyRequiredParametersExported = const MessageCode(
     "MainTooManyRequiredParametersExported",
-    message:
+    problemMessage:
         r"""The exported 'main' method must have at most 2 required parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6712,12 +6983,12 @@
 const MessageCode messageMapLiteralTypeArgumentMismatch = const MessageCode(
     "MapLiteralTypeArgumentMismatch",
     analyzerCodes: <String>["EXPECTED_TWO_MAP_TYPE_ARGUMENTS"],
-    message: r"""A map literal requires exactly two type arguments.""");
+    problemMessage: r"""A map literal requires exactly two type arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateMemberNotFound =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Member not found: '#name'.""",
+        problemMessageTemplate: r"""Member not found: '#name'.""",
         withArguments: _withArgumentsMemberNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6730,7 +7001,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeMemberNotFound,
-      message: """Member not found: '${name}'.""", arguments: {'name': name});
+      problemMessage: """Member not found: '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6741,9 +7013,9 @@
 const MessageCode messageMemberWithSameNameAsClass = const MessageCode(
     "MemberWithSameNameAsClass",
     index: 105,
-    message:
+    problemMessage:
         r"""A class member can't have the same name as the enclosing class.""",
-    tip: r"""Try renaming the member.""");
+    correctionMessage: r"""Try renaming the member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMetadataTypeArguments = messageMetadataTypeArguments;
@@ -6752,7 +7024,7 @@
 const MessageCode messageMetadataTypeArguments = const MessageCode(
     "MetadataTypeArguments",
     index: 91,
-    message: r"""An annotation can't use type arguments.""");
+    problemMessage: r"""An annotation can't use type arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMetadataTypeArgumentsUninstantiated =
@@ -6762,13 +7034,13 @@
 const MessageCode messageMetadataTypeArgumentsUninstantiated = const MessageCode(
     "MetadataTypeArgumentsUninstantiated",
     index: 114,
-    message:
+    problemMessage:
         r"""An annotation with type arguments must be followed by an argument list.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateMethodNotFound =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Method not found: '#name'.""",
+        problemMessageTemplate: r"""Method not found: '#name'.""",
         withArguments: _withArgumentsMethodNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6781,7 +7053,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeMethodNotFound,
-      message: """Method not found: '${name}'.""", arguments: {'name': name});
+      problemMessage: """Method not found: '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6790,7 +7063,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingArgumentList = const MessageCode(
     "MissingArgumentList",
-    message: r"""Constructor invocations must have an argument list.""");
+    problemMessage: r"""Constructor invocations must have an argument list.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingAssignableSelector =
@@ -6800,8 +7073,8 @@
 const MessageCode messageMissingAssignableSelector = const MessageCode(
     "MissingAssignableSelector",
     index: 35,
-    message: r"""Missing selector such as '.identifier' or '[0]'.""",
-    tip: r"""Try adding a selector.""");
+    problemMessage: r"""Missing selector such as '.identifier' or '[0]'.""",
+    correctionMessage: r"""Try adding a selector.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingAssignmentInInitializer =
@@ -6811,8 +7084,9 @@
 const MessageCode messageMissingAssignmentInInitializer = const MessageCode(
     "MissingAssignmentInInitializer",
     index: 34,
-    message: r"""Expected an assignment after the field name.""",
-    tip: r"""To initialize a field, use the syntax 'name = value'.""");
+    problemMessage: r"""Expected an assignment after the field name.""",
+    correctionMessage:
+        r"""To initialize a field, use the syntax 'name = value'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingConstFinalVarOrType =
@@ -6822,9 +7096,9 @@
 const MessageCode messageMissingConstFinalVarOrType = const MessageCode(
     "MissingConstFinalVarOrType",
     index: 33,
-    message:
+    problemMessage:
         r"""Variables must be declared using the keywords 'const', 'final', 'var' or a type name.""",
-    tip:
+    correctionMessage:
         r"""Try adding the name of the type of the variable or the keyword 'var'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6834,8 +7108,8 @@
 const MessageCode messageMissingExplicitConst = const MessageCode(
     "MissingExplicitConst",
     analyzerCodes: <String>["NOT_CONSTANT_EXPRESSION"],
-    message: r"""Constant expression expected.""",
-    tip: r"""Try inserting 'const'.""");
+    problemMessage: r"""Constant expression expected.""",
+    correctionMessage: r"""Try inserting 'const'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingExponent = messageMissingExponent;
@@ -6843,9 +7117,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingExponent = const MessageCode("MissingExponent",
     analyzerCodes: <String>["MISSING_DIGIT"],
-    message:
+    problemMessage:
         r"""Numbers in exponential notation should always contain an exponent (an integer number with an optional sign).""",
-    tip:
+    correctionMessage:
         r"""Make sure there is an exponent, and remove any whitespace before it.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6855,8 +7129,8 @@
 const MessageCode messageMissingExpressionInThrow = const MessageCode(
     "MissingExpressionInThrow",
     index: 32,
-    message: r"""Missing expression after 'throw'.""",
-    tip:
+    problemMessage: r"""Missing expression after 'throw'.""",
+    correctionMessage:
         r"""Add an expression after 'throw' or use 'rethrow' to throw a caught exception""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6867,15 +7141,16 @@
 const MessageCode messageMissingFunctionParameters = const MessageCode(
     "MissingFunctionParameters",
     analyzerCodes: <String>["MISSING_FUNCTION_PARAMETERS"],
-    message:
+    problemMessage:
         r"""A function declaration needs an explicit list of parameters.""",
-    tip: r"""Try adding a parameter list to the function declaration.""");
+    correctionMessage:
+        r"""Try adding a parameter list to the function declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateMissingImplementationCause =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""'#name' is defined here.""",
+        problemMessageTemplate: r"""'#name' is defined here.""",
         withArguments: _withArgumentsMissingImplementationCause);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6888,7 +7163,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeMissingImplementationCause,
-      message: """'${name}' is defined here.""", arguments: {'name': name});
+      problemMessage: """'${name}' is defined here.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6898,10 +7174,10 @@
         List<String>
             _names)> templateMissingImplementationNotAbstract = const Template<
         Message Function(String name, List<String> _names)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The non-abstract class '#name' is missing implementations for these members:
 #names""",
-    tipTemplate: r"""Try to either
+    correctionMessageTemplate: r"""Try to either
  - provide an implementation,
  - inherit an implementation from a superclass or mixin,
  - mark the class as abstract, or
@@ -6924,10 +7200,10 @@
   if (_names.isEmpty) throw 'No names provided';
   String names = itemizeNames(_names);
   return new Message(codeMissingImplementationNotAbstract,
-      message:
+      problemMessage:
           """The non-abstract class '${name}' is missing implementations for these members:
 ${names}""",
-      tip: """Try to either
+      correctionMessage: """Try to either
  - provide an implementation,
  - inherit an implementation from a superclass or mixin,
  - mark the class as abstract, or
@@ -6941,15 +7217,16 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingInput = const MessageCode("MissingInput",
-    message: r"""No input file provided to the compiler.""");
+    problemMessage: r"""No input file provided to the compiler.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingMain = messageMissingMain;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingMain = const MessageCode("MissingMain",
-    message: r"""No 'main' method found.""",
-    tip: r"""Try adding a method named 'main' to your program.""");
+    problemMessage: r"""No 'main' method found.""",
+    correctionMessage:
+        r"""Try adding a method named 'main' to your program.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingMethodParameters = messageMissingMethodParameters;
@@ -6958,8 +7235,10 @@
 const MessageCode messageMissingMethodParameters = const MessageCode(
     "MissingMethodParameters",
     analyzerCodes: <String>["MISSING_METHOD_PARAMETERS"],
-    message: r"""A method declaration needs an explicit list of parameters.""",
-    tip: r"""Try adding a parameter list to the method declaration.""");
+    problemMessage:
+        r"""A method declaration needs an explicit list of parameters.""",
+    correctionMessage:
+        r"""Try adding a parameter list to the method declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingOperatorKeyword = messageMissingOperatorKeyword;
@@ -6968,15 +7247,15 @@
 const MessageCode messageMissingOperatorKeyword = const MessageCode(
     "MissingOperatorKeyword",
     index: 31,
-    message:
+    problemMessage:
         r"""Operator declarations must be preceded by the keyword 'operator'.""",
-    tip: r"""Try adding the keyword 'operator'.""");
+    correctionMessage: r"""Try adding the keyword 'operator'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(Uri uri_)> templateMissingPartOf = const Template<
         Message Function(Uri uri_)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Can't use '#uri' as a part, because it has no 'part of' declaration.""",
     withArguments: _withArgumentsMissingPartOf);
 
@@ -6989,7 +7268,7 @@
 Message _withArgumentsMissingPartOf(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codeMissingPartOf,
-      message:
+      problemMessage:
           """Can't use '${uri}' as a part, because it has no 'part of' declaration.""",
       arguments: {'uri': uri_});
 }
@@ -7002,8 +7281,9 @@
 const MessageCode messageMissingPrefixInDeferredImport = const MessageCode(
     "MissingPrefixInDeferredImport",
     index: 30,
-    message: r"""Deferred imports should have a prefix.""",
-    tip: r"""Try adding a prefix to the import by adding an 'as' clause.""");
+    problemMessage: r"""Deferred imports should have a prefix.""",
+    correctionMessage:
+        r"""Try adding a prefix to the import by adding an 'as' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingTypedefParameters = messageMissingTypedefParameters;
@@ -7012,8 +7292,8 @@
 const MessageCode messageMissingTypedefParameters = const MessageCode(
     "MissingTypedefParameters",
     analyzerCodes: <String>["MISSING_TYPEDEF_PARAMETERS"],
-    message: r"""A typedef needs an explicit list of parameters.""",
-    tip: r"""Try adding a parameter list to the typedef.""");
+    problemMessage: r"""A typedef needs an explicit list of parameters.""",
+    correctionMessage: r"""Try adding a parameter list to the typedef.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMixinDeclaresConstructor = messageMixinDeclaresConstructor;
@@ -7022,7 +7302,7 @@
 const MessageCode messageMixinDeclaresConstructor = const MessageCode(
     "MixinDeclaresConstructor",
     index: 95,
-    message: r"""Mixins can't declare constructors.""");
+    problemMessage: r"""Mixins can't declare constructors.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMixinFunction = messageMixinFunction;
@@ -7030,8 +7310,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMixinFunction = const MessageCode("MixinFunction",
     severity: Severity.ignored,
-    message: r"""Mixing in 'Function' is deprecated.""",
-    tip: r"""Try removing 'Function' from the 'with' clause.""");
+    problemMessage: r"""Mixing in 'Function' is deprecated.""",
+    correctionMessage: r"""Try removing 'Function' from the 'with' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -7040,9 +7320,9 @@
         String
             string2)> templateModifierOutOfOrder = const Template<
         Message Function(String string, String string2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The modifier '#string' should be before the modifier '#string2'.""",
-    tipTemplate: r"""Try re-ordering the modifiers.""",
+    correctionMessageTemplate: r"""Try re-ordering the modifiers.""",
     withArguments: _withArgumentsModifierOutOfOrder);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7057,9 +7337,9 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeModifierOutOfOrder,
-      message:
+      problemMessage:
           """The modifier '${string}' should be before the modifier '${string2}'.""",
-      tip: """Try re-ordering the modifiers.""",
+      correctionMessage: """Try re-ordering the modifiers.""",
       arguments: {'string': string, 'string2': string2});
 }
 
@@ -7071,7 +7351,7 @@
 const MessageCode messageMoreThanOneSuperInitializer = const MessageCode(
     "MoreThanOneSuperInitializer",
     analyzerCodes: <String>["MULTIPLE_SUPER_INITIALIZERS"],
-    message: r"""Can't have more than one 'super' initializer.""");
+    problemMessage: r"""Can't have more than one 'super' initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMultipleExtends = messageMultipleExtends;
@@ -7079,8 +7359,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMultipleExtends = const MessageCode("MultipleExtends",
     index: 28,
-    message: r"""Each class definition can have at most one extends clause.""",
-    tip:
+    problemMessage:
+        r"""Each class definition can have at most one extends clause.""",
+    correctionMessage:
         r"""Try choosing one superclass and define your class to implement (or mix in) the others.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7090,9 +7371,9 @@
 const MessageCode messageMultipleImplements = const MessageCode(
     "MultipleImplements",
     analyzerCodes: <String>["MULTIPLE_IMPLEMENTS_CLAUSES"],
-    message:
+    problemMessage:
         r"""Each class definition can have at most one implements clause.""",
-    tip:
+    correctionMessage:
         r"""Try combining all of the implements clauses into a single clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7103,8 +7384,10 @@
 const MessageCode messageMultipleLibraryDirectives = const MessageCode(
     "MultipleLibraryDirectives",
     index: 27,
-    message: r"""Only one library directive may be declared in a file.""",
-    tip: r"""Try removing all but one of the library directives.""");
+    problemMessage:
+        r"""Only one library directive may be declared in a file.""",
+    correctionMessage:
+        r"""Try removing all but one of the library directives.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMultipleOnClauses = messageMultipleOnClauses;
@@ -7113,8 +7396,10 @@
 const MessageCode messageMultipleOnClauses = const MessageCode(
     "MultipleOnClauses",
     index: 26,
-    message: r"""Each mixin definition can have at most one on clause.""",
-    tip: r"""Try combining all of the on clauses into a single clause.""");
+    problemMessage:
+        r"""Each mixin definition can have at most one on clause.""",
+    correctionMessage:
+        r"""Try combining all of the on clauses into a single clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMultipleVarianceModifiers =
@@ -7124,8 +7409,10 @@
 const MessageCode messageMultipleVarianceModifiers = const MessageCode(
     "MultipleVarianceModifiers",
     index: 97,
-    message: r"""Each type parameter can have at most one variance modifier.""",
-    tip: r"""Use at most one of the 'in', 'out', or 'inout' modifiers.""");
+    problemMessage:
+        r"""Each type parameter can have at most one variance modifier.""",
+    correctionMessage:
+        r"""Use at most one of the 'in', 'out', or 'inout' modifiers.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMultipleWith = messageMultipleWith;
@@ -7133,13 +7420,15 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMultipleWith = const MessageCode("MultipleWith",
     index: 24,
-    message: r"""Each class definition can have at most one with clause.""",
-    tip: r"""Try combining all of the with clauses into a single clause.""");
+    problemMessage:
+        r"""Each class definition can have at most one with clause.""",
+    correctionMessage:
+        r"""Try combining all of the with clauses into a single clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNameNotFound =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Undefined name '#name'.""",
+        problemMessageTemplate: r"""Undefined name '#name'.""",
         withArguments: _withArgumentsNameNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7152,7 +7441,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNameNotFound,
-      message: """Undefined name '${name}'.""", arguments: {'name': name});
+      problemMessage: """Undefined name '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7162,7 +7452,7 @@
 const MessageCode messageNamedFunctionExpression = const MessageCode(
     "NamedFunctionExpression",
     analyzerCodes: <String>["NAMED_FUNCTION_EXPRESSION"],
-    message: r"""A function expression can't have a name.""");
+    problemMessage: r"""A function expression can't have a name.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -7171,7 +7461,7 @@
         String
             name2)> templateNamedMixinOverride = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The mixin application class '#name' introduces an erroneous override of '#name2'.""",
     withArguments: _withArgumentsNamedMixinOverride);
 
@@ -7188,7 +7478,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeNamedMixinOverride,
-      message:
+      problemMessage:
           """The mixin application class '${name}' introduces an erroneous override of '${name2}'.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -7201,8 +7491,8 @@
 const MessageCode messageNativeClauseShouldBeAnnotation = const MessageCode(
     "NativeClauseShouldBeAnnotation",
     index: 23,
-    message: r"""Native clause in this form is deprecated.""",
-    tip:
+    problemMessage: r"""Native clause in this form is deprecated.""",
+    correctionMessage:
         r"""Try removing this native clause and adding @native() or @native('native-name') before the declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7212,7 +7502,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNeverReachableSwitchDefaultError = const MessageCode(
     "NeverReachableSwitchDefaultError",
-    message:
+    problemMessage:
         r"""`null` encountered as case in a switch expression with a non-nullable enum type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7223,7 +7513,7 @@
 const MessageCode messageNeverReachableSwitchDefaultWarning = const MessageCode(
     "NeverReachableSwitchDefaultWarning",
     severity: Severity.warning,
-    message:
+    problemMessage:
         r"""The default case is not reachable with sound null safety because the switch expression is non-nullable.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7231,7 +7521,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNeverValueError = const MessageCode("NeverValueError",
-    message:
+    problemMessage:
         r"""`null` encountered as the result from expression with type `Never`.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7241,15 +7531,22 @@
 const MessageCode messageNeverValueWarning = const MessageCode(
     "NeverValueWarning",
     severity: Severity.warning,
-    message:
+    problemMessage:
         r"""The expression can not result in a value with sound null safety because the expression type is `Never`.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeNewAsSelector = messageNewAsSelector;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageNewAsSelector = const MessageCode("NewAsSelector",
+    problemMessage: r"""'new' can only be used as a constructor reference.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(Token token)> templateNoFormals = const Template<
         Message Function(Token token)>(
-    messageTemplate: r"""A function should have formal parameters.""",
-    tipTemplate:
+    problemMessageTemplate: r"""A function should have formal parameters.""",
+    correctionMessageTemplate:
         r"""Try adding '()' after '#lexeme', or add 'get' before '#lexeme' to declare a getter.""",
     withArguments: _withArgumentsNoFormals);
 
@@ -7262,8 +7559,8 @@
 Message _withArgumentsNoFormals(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeNoFormals,
-      message: """A function should have formal parameters.""",
-      tip:
+      problemMessage: """A function should have formal parameters.""",
+      correctionMessage:
           """Try adding '()' after '${lexeme}', or add 'get' before '${lexeme}' to declare a getter.""",
       arguments: {'lexeme': token});
 }
@@ -7271,7 +7568,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNoSuchNamedParameter =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""No named parameter with the name '#name'.""",
+        problemMessageTemplate:
+            r"""No named parameter with the name '#name'.""",
         withArguments: _withArgumentsNoSuchNamedParameter);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7284,7 +7582,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNoSuchNamedParameter,
-      message: """No named parameter with the name '${name}'.""",
+      problemMessage: """No named parameter with the name '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -7295,7 +7593,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNoUnnamedConstructorInObject = const MessageCode(
     "NoUnnamedConstructorInObject",
-    message: r"""'Object' has no unnamed constructor.""");
+    problemMessage: r"""'Object' has no unnamed constructor.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeNonAgnosticConstant = messageNonAgnosticConstant;
@@ -7303,7 +7601,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNonAgnosticConstant = const MessageCode(
     "NonAgnosticConstant",
-    message: r"""Constant value is not strong/weak mode agnostic.""");
+    problemMessage: r"""Constant value is not strong/weak mode agnostic.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -7312,9 +7610,9 @@
         int
             codePoint)> templateNonAsciiIdentifier = const Template<
         Message Function(String character, int codePoint)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The non-ASCII character '#character' (#unicode) can't be used in identifiers, only in strings and comments.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).""",
     withArguments: _withArgumentsNonAsciiIdentifier);
 
@@ -7331,9 +7629,9 @@
   String unicode =
       "U+${codePoint.toRadixString(16).toUpperCase().padLeft(4, '0')}";
   return new Message(codeNonAsciiIdentifier,
-      message:
+      problemMessage:
           """The non-ASCII character '${character}' (${unicode}) can't be used in identifiers, only in strings and comments.""",
-      tip: """Try using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).""",
+      correctionMessage: """Try using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).""",
       arguments: {'character': character, 'unicode': codePoint});
 }
 
@@ -7343,7 +7641,7 @@
         int
             codePoint)> templateNonAsciiWhitespace = const Template<
         Message Function(int codePoint)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The non-ASCII space character #unicode can only be used in strings and comments.""",
     withArguments: _withArgumentsNonAsciiWhitespace);
 
@@ -7357,7 +7655,7 @@
   String unicode =
       "U+${codePoint.toRadixString(16).toUpperCase().padLeft(4, '0')}";
   return new Message(codeNonAsciiWhitespace,
-      message:
+      problemMessage:
           """The non-ASCII space character ${unicode} can only be used in strings and comments.""",
       arguments: {'unicode': codePoint});
 }
@@ -7369,9 +7667,10 @@
 const MessageCode messageNonConstConstructor = const MessageCode(
     "NonConstConstructor",
     analyzerCodes: <String>["NOT_CONSTANT_EXPRESSION"],
-    message:
+    problemMessage:
         r"""Cannot invoke a non-'const' constructor where a const expression is expected.""",
-    tip: r"""Try using a constructor or factory that is 'const'.""");
+    correctionMessage:
+        r"""Try using a constructor or factory that is 'const'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeNonConstFactory = messageNonConstFactory;
@@ -7379,19 +7678,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNonConstFactory = const MessageCode("NonConstFactory",
     analyzerCodes: <String>["NOT_CONSTANT_EXPRESSION"],
-    message:
+    problemMessage:
         r"""Cannot invoke a non-'const' factory where a const expression is expected.""",
-    tip: r"""Try using a constructor or factory that is 'const'.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeNonInstanceTypeVariableUse =
-    messageNonInstanceTypeVariableUse;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageNonInstanceTypeVariableUse = const MessageCode(
-    "NonInstanceTypeVariableUse",
-    analyzerCodes: <String>["TYPE_PARAMETER_REFERENCED_BY_STATIC"],
-    message: r"""Can only use type variables in instance methods.""");
+    correctionMessage:
+        r"""Try using a constructor or factory that is 'const'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -7399,7 +7689,7 @@
         String
             name)> templateNonNullableNotAssignedError = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Non-nullable variable '#name' must be assigned before it can be used.""",
     withArguments: _withArgumentsNonNullableNotAssignedError);
 
@@ -7414,7 +7704,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNonNullableNotAssignedError,
-      message:
+      problemMessage:
           """Non-nullable variable '${name}' must be assigned before it can be used.""",
       arguments: {'name': name});
 }
@@ -7426,7 +7716,7 @@
 const MessageCode messageNonNullableOptOutComment = const MessageCode(
     "NonNullableOptOutComment",
     severity: Severity.context,
-    message:
+    problemMessage:
         r"""This is the annotation that opts out this library from null safety features.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7435,8 +7725,9 @@
         String
             string)> templateNonNullableOptOutExplicit = const Template<
         Message Function(String string)>(
-    messageTemplate: r"""Null safety features are disabled for this library.""",
-    tipTemplate:
+    problemMessageTemplate:
+        r"""Null safety features are disabled for this library.""",
+    correctionMessageTemplate:
         r"""Try removing the `@dart=` annotation or setting the language version to #string or higher.""",
     withArguments: _withArgumentsNonNullableOptOutExplicit);
 
@@ -7450,8 +7741,8 @@
 Message _withArgumentsNonNullableOptOutExplicit(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeNonNullableOptOutExplicit,
-      message: """Null safety features are disabled for this library.""",
-      tip:
+      problemMessage: """Null safety features are disabled for this library.""",
+      correctionMessage:
           """Try removing the `@dart=` annotation or setting the language version to ${string} or higher.""",
       arguments: {'string': string});
 }
@@ -7462,8 +7753,9 @@
         String
             string)> templateNonNullableOptOutImplicit = const Template<
         Message Function(String string)>(
-    messageTemplate: r"""Null safety features are disabled for this library.""",
-    tipTemplate:
+    problemMessageTemplate:
+        r"""Null safety features are disabled for this library.""",
+    correctionMessageTemplate:
         r"""Try removing the package language version or setting the language version to #string or higher.""",
     withArguments: _withArgumentsNonNullableOptOutImplicit);
 
@@ -7477,8 +7769,8 @@
 Message _withArgumentsNonNullableOptOutImplicit(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeNonNullableOptOutImplicit,
-      message: """Null safety features are disabled for this library.""",
-      tip:
+      problemMessage: """Null safety features are disabled for this library.""",
+      correctionMessage:
           """Try removing the package language version or setting the language version to ${string} or higher.""",
       arguments: {'string': string});
 }
@@ -7490,8 +7782,9 @@
 const MessageCode messageNonPartOfDirectiveInPart = const MessageCode(
     "NonPartOfDirectiveInPart",
     analyzerCodes: <String>["NON_PART_OF_DIRECTIVE_IN_PART"],
-    message: r"""The part-of directive must be the only directive in a part.""",
-    tip:
+    problemMessage:
+        r"""The part-of directive must be the only directive in a part.""",
+    correctionMessage:
         r"""Try removing the other directives, or moving them to the library for which this is a part.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7501,13 +7794,13 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNonPositiveArrayDimensions = const MessageCode(
     "NonPositiveArrayDimensions",
-    message: r"""Array dimensions must be positive numbers.""");
+    problemMessage: r"""Array dimensions must be positive numbers.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateNonSimpleBoundViaReference =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Bound of this variable references raw type '#name'.""",
         withArguments: _withArgumentsNonSimpleBoundViaReference);
 
@@ -7521,7 +7814,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNonSimpleBoundViaReference,
-      message: """Bound of this variable references raw type '${name}'.""",
+      problemMessage:
+          """Bound of this variable references raw type '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -7531,7 +7825,7 @@
         String
             name)> templateNonSimpleBoundViaVariable = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Bound of this variable references variable '#name' from the same declaration.""",
     withArguments: _withArgumentsNonSimpleBoundViaVariable);
 
@@ -7545,7 +7839,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNonSimpleBoundViaVariable,
-      message:
+      problemMessage:
           """Bound of this variable references variable '${name}' from the same declaration.""",
       arguments: {'name': name});
 }
@@ -7557,8 +7851,8 @@
 const MessageCode messageNonVoidReturnOperator = const MessageCode(
     "NonVoidReturnOperator",
     analyzerCodes: <String>["NON_VOID_RETURN_FOR_OPERATOR"],
-    message: r"""The return type of the operator []= must be 'void'.""",
-    tip: r"""Try changing the return type to 'void'.""");
+    problemMessage: r"""The return type of the operator []= must be 'void'.""",
+    correctionMessage: r"""Try changing the return type to 'void'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeNonVoidReturnSetter = messageNonVoidReturnSetter;
@@ -7567,8 +7861,9 @@
 const MessageCode messageNonVoidReturnSetter = const MessageCode(
     "NonVoidReturnSetter",
     analyzerCodes: <String>["NON_VOID_RETURN_FOR_SETTER"],
-    message: r"""The return type of the setter must be 'void' or absent.""",
-    tip:
+    problemMessage:
+        r"""The return type of the setter must be 'void' or absent.""",
+    correctionMessage:
         r"""Try removing the return type, or define a method rather than a setter.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7578,7 +7873,7 @@
 const MessageCode messageNotAConstantExpression = const MessageCode(
     "NotAConstantExpression",
     analyzerCodes: <String>["NOT_CONSTANT_EXPRESSION"],
-    message: r"""Not a constant expression.""");
+    problemMessage: r"""Not a constant expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -7587,7 +7882,7 @@
         String
             name2)> templateNotAPrefixInTypeAnnotation = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""'#name.#name2' can't be used as a type because '#name' doesn't refer to an import prefix.""",
     withArguments: _withArgumentsNotAPrefixInTypeAnnotation);
 
@@ -7605,7 +7900,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeNotAPrefixInTypeAnnotation,
-      message:
+      problemMessage:
           """'${name}.${name2}' can't be used as a type because '${name}' doesn't refer to an import prefix.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -7613,7 +7908,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNotAType =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""'#name' isn't a type.""",
+        problemMessageTemplate: r"""'#name' isn't a type.""",
         withArguments: _withArgumentsNotAType);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7626,7 +7921,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNotAType,
-      message: """'${name}' isn't a type.""", arguments: {'name': name});
+      problemMessage: """'${name}' isn't a type.""", arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7634,7 +7929,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNotATypeContext = const MessageCode("NotATypeContext",
-    severity: Severity.context, message: r"""This isn't a type.""");
+    severity: Severity.context, problemMessage: r"""This isn't a type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeNotAnLvalue = messageNotAnLvalue;
@@ -7642,12 +7937,12 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNotAnLvalue = const MessageCode("NotAnLvalue",
     analyzerCodes: <String>["NOT_AN_LVALUE"],
-    message: r"""Can't assign to this.""");
+    problemMessage: r"""Can't assign to this.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateNotBinaryOperator =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""'#lexeme' isn't a binary operator.""",
+        problemMessageTemplate: r"""'#lexeme' isn't a binary operator.""",
         withArguments: _withArgumentsNotBinaryOperator);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7660,14 +7955,14 @@
 Message _withArgumentsNotBinaryOperator(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeNotBinaryOperator,
-      message: """'${lexeme}' isn't a binary operator.""",
+      problemMessage: """'${lexeme}' isn't a binary operator.""",
       arguments: {'lexeme': token});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templateNotConstantExpression =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""#string is not a constant expression.""",
+        problemMessageTemplate: r"""#string is not a constant expression.""",
         withArguments: _withArgumentsNotConstantExpression);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7679,7 +7974,7 @@
 Message _withArgumentsNotConstantExpression(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeNotConstantExpression,
-      message: """${string} is not a constant expression.""",
+      problemMessage: """${string} is not a constant expression.""",
       arguments: {'string': string});
 }
 
@@ -7691,15 +7986,15 @@
 const MessageCode messageNullAwareCascadeOutOfOrder = const MessageCode(
     "NullAwareCascadeOutOfOrder",
     index: 96,
-    message:
+    problemMessage:
         r"""The '?..' cascade operator must be first in the cascade sequence.""",
-    tip:
+    correctionMessage:
         r"""Try moving the '?..' operator to be the first cascade operator in the sequence.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNullableInterfaceError =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't implement '#name' because it's marked with '?'.""",
         withArguments: _withArgumentsNullableInterfaceError);
 
@@ -7714,14 +8009,15 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNullableInterfaceError,
-      message: """Can't implement '${name}' because it's marked with '?'.""",
+      problemMessage:
+          """Can't implement '${name}' because it's marked with '?'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNullableMixinError =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't mix '#name' in because it's marked with '?'.""",
         withArguments: _withArgumentsNullableMixinError);
 
@@ -7736,7 +8032,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNullableMixinError,
-      message: """Can't mix '${name}' in because it's marked with '?'.""",
+      problemMessage:
+          """Can't mix '${name}' in because it's marked with '?'.""",
       arguments: {'name': name});
 }
 
@@ -7746,13 +8043,13 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNullableSpreadError = const MessageCode(
     "NullableSpreadError",
-    message:
+    problemMessage:
         r"""An expression whose value can be 'null' must be null-checked before it can be dereferenced.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNullableSuperclassError =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't extend '#name' because it's marked with '?'.""",
         withArguments: _withArgumentsNullableSuperclassError);
 
@@ -7767,14 +8064,15 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNullableSuperclassError,
-      message: """Can't extend '${name}' because it's marked with '?'.""",
+      problemMessage:
+          """Can't extend '${name}' because it's marked with '?'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNullableTearoffError =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't tear off method '#name' from a potentially null value.""",
         withArguments: _withArgumentsNullableTearoffError);
 
@@ -7789,7 +8087,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeNullableTearoffError,
-      message:
+      problemMessage:
           """Can't tear off method '${name}' from a potentially null value.""",
       arguments: {'name': name});
 }
@@ -7799,7 +8097,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageObjectExtends = const MessageCode("ObjectExtends",
-    message: r"""The class 'Object' can't have a superclass.""");
+    problemMessage: r"""The class 'Object' can't have a superclass.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeObjectImplements = messageObjectImplements;
@@ -7807,14 +8105,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageObjectImplements = const MessageCode(
     "ObjectImplements",
-    message: r"""The class 'Object' can't implement anything.""");
+    problemMessage: r"""The class 'Object' can't implement anything.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeObjectMixesIn = messageObjectMixesIn;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageObjectMixesIn = const MessageCode("ObjectMixesIn",
-    message: r"""The class 'Object' can't use mixins.""");
+    problemMessage: r"""The class 'Object' can't use mixins.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeOnlyTry = messageOnlyTry;
@@ -7822,9 +8120,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageOnlyTry = const MessageCode("OnlyTry",
     index: 20,
-    message:
+    problemMessage:
         r"""A try block must be followed by an 'on', 'catch', or 'finally' clause.""",
-    tip:
+    correctionMessage:
         r"""Try adding either a catch or finally clause, or remove the try statement.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7833,8 +8131,9 @@
         String
             name)> templateOperatorMinusParameterMismatch = const Template<
         Message Function(String name)>(
-    messageTemplate: r"""Operator '#name' should have zero or one parameter.""",
-    tipTemplate:
+    problemMessageTemplate:
+        r"""Operator '#name' should have zero or one parameter.""",
+    correctionMessageTemplate:
         r"""With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.""",
     withArguments: _withArgumentsOperatorMinusParameterMismatch);
 
@@ -7850,8 +8149,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeOperatorMinusParameterMismatch,
-      message: """Operator '${name}' should have zero or one parameter.""",
-      tip:
+      problemMessage:
+          """Operator '${name}' should have zero or one parameter.""",
+      correctionMessage:
           """With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.""",
       arguments: {'name': name});
 }
@@ -7860,7 +8160,8 @@
 const Template<Message Function(String name)>
     templateOperatorParameterMismatch0 =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Operator '#name' shouldn't have any parameters.""",
+        problemMessageTemplate:
+            r"""Operator '#name' shouldn't have any parameters.""",
         withArguments: _withArgumentsOperatorParameterMismatch0);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7874,7 +8175,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeOperatorParameterMismatch0,
-      message: """Operator '${name}' shouldn't have any parameters.""",
+      problemMessage: """Operator '${name}' shouldn't have any parameters.""",
       arguments: {'name': name});
 }
 
@@ -7882,7 +8183,7 @@
 const Template<Message Function(String name)>
     templateOperatorParameterMismatch1 =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Operator '#name' should have exactly one parameter.""",
         withArguments: _withArgumentsOperatorParameterMismatch1);
 
@@ -7896,7 +8197,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeOperatorParameterMismatch1,
-      message: """Operator '${name}' should have exactly one parameter.""",
+      problemMessage:
+          """Operator '${name}' should have exactly one parameter.""",
       arguments: {'name': name});
 }
 
@@ -7904,7 +8206,7 @@
 const Template<Message Function(String name)>
     templateOperatorParameterMismatch2 =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Operator '#name' should have exactly two parameters.""",
         withArguments: _withArgumentsOperatorParameterMismatch2);
 
@@ -7918,7 +8220,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeOperatorParameterMismatch2,
-      message: """Operator '${name}' should have exactly two parameters.""",
+      problemMessage:
+          """Operator '${name}' should have exactly two parameters.""",
       arguments: {'name': name});
 }
 
@@ -7929,7 +8232,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageOperatorWithOptionalFormals = const MessageCode(
     "OperatorWithOptionalFormals",
-    message: r"""An operator can't have optional parameters.""");
+    problemMessage: r"""An operator can't have optional parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeOperatorWithTypeParameters =
@@ -7938,14 +8241,15 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageOperatorWithTypeParameters = const MessageCode(
     "OperatorWithTypeParameters",
-    analyzerCodes: <String>["TYPE_PARAMETER_ON_OPERATOR"],
-    message: r"""Types parameters aren't allowed when defining an operator.""",
-    tip: r"""Try removing the type parameters.""");
+    index: 120,
+    problemMessage:
+        r"""Types parameters aren't allowed when defining an operator.""",
+    correctionMessage: r"""Try removing the type parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateOverriddenMethodCause =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""This is the overridden method ('#name').""",
+        problemMessageTemplate: r"""This is the overridden method ('#name').""",
         withArguments: _withArgumentsOverriddenMethodCause);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7958,7 +8262,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeOverriddenMethodCause,
-      message: """This is the overridden method ('${name}').""",
+      problemMessage: """This is the overridden method ('${name}').""",
       arguments: {'name': name});
 }
 
@@ -7969,7 +8273,7 @@
         String
             name2)> templateOverrideFewerNamedArguments = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The method '#name' has fewer named arguments than those of overridden method '#name2'.""",
     withArguments: _withArgumentsOverrideFewerNamedArguments);
 
@@ -7987,7 +8291,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeOverrideFewerNamedArguments,
-      message:
+      problemMessage:
           """The method '${name}' has fewer named arguments than those of overridden method '${name2}'.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -7999,7 +8303,7 @@
         String
             name2)> templateOverrideFewerPositionalArguments = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The method '#name' has fewer positional arguments than those of overridden method '#name2'.""",
     withArguments: _withArgumentsOverrideFewerPositionalArguments);
 
@@ -8018,7 +8322,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeOverrideFewerPositionalArguments,
-      message:
+      problemMessage:
           """The method '${name}' has fewer positional arguments than those of overridden method '${name2}'.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -8031,7 +8335,7 @@
         String
             name3)> templateOverrideMismatchNamedParameter = const Template<
         Message Function(String name, String name2, String name3)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The method '#name' doesn't have the named parameter '#name2' of overridden method '#name3'.""",
     withArguments: _withArgumentsOverrideMismatchNamedParameter);
 
@@ -8052,7 +8356,7 @@
   if (name3.isEmpty) throw 'No name provided';
   name3 = demangleMixinApplicationName(name3);
   return new Message(codeOverrideMismatchNamedParameter,
-      message:
+      problemMessage:
           """The method '${name}' doesn't have the named parameter '${name2}' of overridden method '${name3}'.""",
       arguments: {'name': name, 'name2': name2, 'name3': name3});
 }
@@ -8061,7 +8365,7 @@
 const Template<Message Function(String name, String name2, String name3)>
     templateOverrideMismatchRequiredNamedParameter =
     const Template<Message Function(String name, String name2, String name3)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The required named parameter '#name' in method '#name2' is not required in overridden method '#name3'.""",
         withArguments: _withArgumentsOverrideMismatchRequiredNamedParameter);
 
@@ -8082,7 +8386,7 @@
   if (name3.isEmpty) throw 'No name provided';
   name3 = demangleMixinApplicationName(name3);
   return new Message(codeOverrideMismatchRequiredNamedParameter,
-      message:
+      problemMessage:
           """The required named parameter '${name}' in method '${name2}' is not required in overridden method '${name3}'.""",
       arguments: {'name': name, 'name2': name2, 'name3': name3});
 }
@@ -8094,7 +8398,7 @@
         String
             name2)> templateOverrideMoreRequiredArguments = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The method '#name' has more required arguments than those of overridden method '#name2'.""",
     withArguments: _withArgumentsOverrideMoreRequiredArguments);
 
@@ -8112,7 +8416,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeOverrideMoreRequiredArguments,
-      message:
+      problemMessage:
           """The method '${name}' has more required arguments than those of overridden method '${name2}'.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -8124,7 +8428,7 @@
         String
             name2)> templateOverrideTypeVariablesMismatch = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Declared type variables of '#name' doesn't match those on overridden method '#name2'.""",
     withArguments: _withArgumentsOverrideTypeVariablesMismatch);
 
@@ -8142,7 +8446,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeOverrideTypeVariablesMismatch,
-      message:
+      problemMessage:
           """Declared type variables of '${name}' doesn't match those on overridden method '${name2}'.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -8151,7 +8455,8 @@
 const Template<Message Function(String name, Uri uri_)>
     templatePackageNotFound =
     const Template<Message Function(String name, Uri uri_)>(
-        messageTemplate: r"""Couldn't resolve the package '#name' in '#uri'.""",
+        problemMessageTemplate:
+            r"""Couldn't resolve the package '#name' in '#uri'.""",
         withArguments: _withArgumentsPackageNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8166,14 +8471,15 @@
   name = demangleMixinApplicationName(name);
   String? uri = relativizeUri(uri_);
   return new Message(codePackageNotFound,
-      message: """Couldn't resolve the package '${name}' in '${uri}'.""",
+      problemMessage: """Couldn't resolve the package '${name}' in '${uri}'.""",
       arguments: {'name': name, 'uri': uri_});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templatePackagesFileFormat =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""Problem in packages configuration file: #string""",
+        problemMessageTemplate:
+            r"""Problem in packages configuration file: #string""",
         withArguments: _withArgumentsPackagesFileFormat);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8186,7 +8492,7 @@
 Message _withArgumentsPackagesFileFormat(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codePackagesFileFormat,
-      message: """Problem in packages configuration file: ${string}""",
+      problemMessage: """Problem in packages configuration file: ${string}""",
       arguments: {'string': string});
 }
 
@@ -8196,7 +8502,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePartExport = const MessageCode("PartExport",
     analyzerCodes: <String>["EXPORT_OF_NON_LIBRARY"],
-    message:
+    problemMessage:
         r"""Can't export this file because it contains a 'part of' declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8206,7 +8512,7 @@
 const MessageCode messagePartExportContext = const MessageCode(
     "PartExportContext",
     severity: Severity.context,
-    message: r"""This is the file that can't be exported.""");
+    problemMessage: r"""This is the file that can't be exported.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePartInPart = messagePartInPart;
@@ -8214,8 +8520,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePartInPart = const MessageCode("PartInPart",
     analyzerCodes: <String>["NON_PART_OF_DIRECTIVE_IN_PART"],
-    message: r"""A file that's a part of a library can't have parts itself.""",
-    tip: r"""Try moving the 'part' declaration to the containing library.""");
+    problemMessage:
+        r"""A file that's a part of a library can't have parts itself.""",
+    correctionMessage:
+        r"""Try moving the 'part' declaration to the containing library.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePartInPartLibraryContext = messagePartInPartLibraryContext;
@@ -8224,15 +8532,15 @@
 const MessageCode messagePartInPartLibraryContext = const MessageCode(
     "PartInPartLibraryContext",
     severity: Severity.context,
-    message: r"""This is the containing library.""");
+    problemMessage: r"""This is the containing library.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(Uri uri_)> templatePartOfInLibrary = const Template<
         Message Function(Uri uri_)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Can't import '#uri', because it has a 'part of' declaration.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try removing the 'part of' declaration, or using '#uri' as a part.""",
     withArguments: _withArgumentsPartOfInLibrary);
 
@@ -8245,9 +8553,9 @@
 Message _withArgumentsPartOfInLibrary(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codePartOfInLibrary,
-      message:
+      problemMessage:
           """Can't import '${uri}', because it has a 'part of' declaration.""",
-      tip:
+      correctionMessage:
           """Try removing the 'part of' declaration, or using '${uri}' as a part.""",
       arguments: {'uri': uri_});
 }
@@ -8260,7 +8568,7 @@
         String
             name2)> templatePartOfLibraryNameMismatch = const Template<
         Message Function(Uri uri_, String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Using '#uri' as part of '#name' but its 'part of' declaration says '#name2'.""",
     withArguments: _withArgumentsPartOfLibraryNameMismatch);
 
@@ -8280,7 +8588,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codePartOfLibraryNameMismatch,
-      message:
+      problemMessage:
           """Using '${uri}' as part of '${name}' but its 'part of' declaration says '${name2}'.""",
       arguments: {'uri': uri_, 'name': name, 'name2': name2});
 }
@@ -8291,7 +8599,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePartOfSelf = const MessageCode("PartOfSelf",
     analyzerCodes: <String>["PART_OF_NON_PART"],
-    message: r"""A file can't be a part of itself.""");
+    problemMessage: r"""A file can't be a part of itself.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePartOfTwice = messagePartOfTwice;
@@ -8299,8 +8607,10 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePartOfTwice = const MessageCode("PartOfTwice",
     index: 25,
-    message: r"""Only one part-of directive may be declared in a file.""",
-    tip: r"""Try removing all but one of the part-of directives.""");
+    problemMessage:
+        r"""Only one part-of directive may be declared in a file.""",
+    correctionMessage:
+        r"""Try removing all but one of the part-of directives.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePartOfTwoLibraries = messagePartOfTwoLibraries;
@@ -8309,8 +8619,8 @@
 const MessageCode messagePartOfTwoLibraries = const MessageCode(
     "PartOfTwoLibraries",
     analyzerCodes: <String>["PART_OF_DIFFERENT_LIBRARY"],
-    message: r"""A file can't be part of more than one library.""",
-    tip:
+    problemMessage: r"""A file can't be part of more than one library.""",
+    correctionMessage:
         r"""Try moving the shared declarations into the libraries, or into a new library.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8321,7 +8631,7 @@
 const MessageCode messagePartOfTwoLibrariesContext = const MessageCode(
     "PartOfTwoLibrariesContext",
     severity: Severity.context,
-    message: r"""Used as a part in this library.""");
+    problemMessage: r"""Used as a part in this library.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -8331,7 +8641,7 @@
         Uri
             uri3_)> templatePartOfUriMismatch = const Template<
         Message Function(Uri uri_, Uri uri2_, Uri uri3_)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Using '#uri' as part of '#uri2' but its 'part of' declaration says '#uri3'.""",
     withArguments: _withArgumentsPartOfUriMismatch);
 
@@ -8348,7 +8658,7 @@
   String? uri2 = relativizeUri(uri2_);
   String? uri3 = relativizeUri(uri3_);
   return new Message(codePartOfUriMismatch,
-      message:
+      problemMessage:
           """Using '${uri}' as part of '${uri2}' but its 'part of' declaration says '${uri3}'.""",
       arguments: {'uri': uri_, 'uri2': uri2_, 'uri3': uri3_});
 }
@@ -8361,9 +8671,9 @@
         String
             name)> templatePartOfUseUri = const Template<
         Message Function(Uri uri_, Uri uri2_, String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Using '#uri' as part of '#uri2' but its 'part of' declaration says '#name'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try changing the 'part of' declaration to use a relative file name.""",
     withArguments: _withArgumentsPartOfUseUri);
 
@@ -8381,9 +8691,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codePartOfUseUri,
-      message:
+      problemMessage:
           """Using '${uri}' as part of '${uri2}' but its 'part of' declaration says '${name}'.""",
-      tip: """Try changing the 'part of' declaration to use a relative file name.""",
+      correctionMessage: """Try changing the 'part of' declaration to use a relative file name.""",
       arguments: {'uri': uri_, 'uri2': uri2_, 'name': name});
 }
 
@@ -8392,13 +8702,14 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePartOrphan = const MessageCode("PartOrphan",
-    message: r"""This part doesn't have a containing library.""",
-    tip: r"""Try removing the 'part of' declaration.""");
+    problemMessage: r"""This part doesn't have a containing library.""",
+    correctionMessage: r"""Try removing the 'part of' declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_)> templatePartTwice =
     const Template<Message Function(Uri uri_)>(
-        messageTemplate: r"""Can't use '#uri' as a part more than once.""",
+        problemMessageTemplate:
+            r"""Can't use '#uri' as a part more than once.""",
         withArguments: _withArgumentsPartTwice);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8410,7 +8721,7 @@
 Message _withArgumentsPartTwice(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codePartTwice,
-      message: """Can't use '${uri}' as a part more than once.""",
+      problemMessage: """Can't use '${uri}' as a part more than once.""",
       arguments: {'uri': uri_});
 }
 
@@ -8421,7 +8732,7 @@
 const MessageCode messagePatchClassOrigin = const MessageCode(
     "PatchClassOrigin",
     severity: Severity.context,
-    message: r"""This is the origin class.""");
+    problemMessage: r"""This is the origin class.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePatchClassTypeVariablesMismatch =
@@ -8430,7 +8741,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePatchClassTypeVariablesMismatch = const MessageCode(
     "PatchClassTypeVariablesMismatch",
-    message:
+    problemMessage:
         r"""A patch class must have the same number of type variables as its origin class.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8439,7 +8750,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePatchDeclarationMismatch = const MessageCode(
     "PatchDeclarationMismatch",
-    message: r"""This patch doesn't match origin declaration.""");
+    problemMessage: r"""This patch doesn't match origin declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePatchDeclarationOrigin = messagePatchDeclarationOrigin;
@@ -8448,14 +8759,14 @@
 const MessageCode messagePatchDeclarationOrigin = const MessageCode(
     "PatchDeclarationOrigin",
     severity: Severity.context,
-    message: r"""This is the origin declaration.""");
+    problemMessage: r"""This is the origin declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name, Uri uri_)>
     templatePatchInjectionFailed =
     const Template<Message Function(String name, Uri uri_)>(
-        messageTemplate: r"""Can't inject '#name' into '#uri'.""",
-        tipTemplate: r"""Try adding '@patch'.""",
+        problemMessageTemplate: r"""Can't inject '#name' into '#uri'.""",
+        correctionMessageTemplate: r"""Try adding '@patch'.""",
         withArguments: _withArgumentsPatchInjectionFailed);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8470,8 +8781,8 @@
   name = demangleMixinApplicationName(name);
   String? uri = relativizeUri(uri_);
   return new Message(codePatchInjectionFailed,
-      message: """Can't inject '${name}' into '${uri}'.""",
-      tip: """Try adding '@patch'.""",
+      problemMessage: """Can't inject '${name}' into '${uri}'.""",
+      correctionMessage: """Try adding '@patch'.""",
       arguments: {'name': name, 'uri': uri_});
 }
 
@@ -8481,9 +8792,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePatchNonExternal = const MessageCode(
     "PatchNonExternal",
-    message:
+    problemMessage:
         r"""Can't apply this patch as its origin declaration isn't external.""",
-    tip: r"""Try adding 'external' to the origin declaration.""");
+    correctionMessage: r"""Try adding 'external' to the origin declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePlatformPrivateLibraryAccess =
@@ -8493,7 +8804,7 @@
 const MessageCode messagePlatformPrivateLibraryAccess = const MessageCode(
     "PlatformPrivateLibraryAccess",
     analyzerCodes: <String>["IMPORT_INTERNAL_LIBRARY"],
-    message: r"""Can't access platform private library.""");
+    problemMessage: r"""Can't access platform private library.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePositionalAfterNamedArgument =
@@ -8503,8 +8814,8 @@
 const MessageCode messagePositionalAfterNamedArgument = const MessageCode(
     "PositionalAfterNamedArgument",
     analyzerCodes: <String>["POSITIONAL_AFTER_NAMED_ARGUMENT"],
-    message: r"""Place positional arguments before named arguments.""",
-    tip:
+    problemMessage: r"""Place positional arguments before named arguments.""",
+    correctionMessage:
         r"""Try moving the positional argument before the named arguments, or add a name to the argument.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8515,9 +8826,9 @@
 const MessageCode messagePositionalParameterWithEquals = const MessageCode(
     "PositionalParameterWithEquals",
     analyzerCodes: <String>["WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER"],
-    message:
+    problemMessage:
         r"""Positional optional parameters can't use ':' to specify a default value.""",
-    tip: r"""Try replacing ':' with '='.""");
+    correctionMessage: r"""Try replacing ':' with '='.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePrefixAfterCombinator = messagePrefixAfterCombinator;
@@ -8526,9 +8837,9 @@
 const MessageCode messagePrefixAfterCombinator = const MessageCode(
     "PrefixAfterCombinator",
     index: 6,
-    message:
+    problemMessage:
         r"""The prefix ('as' clause) should come before any show/hide combinators.""",
-    tip: r"""Try moving the prefix before the combinators.""");
+    correctionMessage: r"""Try moving the prefix before the combinators.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePrivateNamedParameter = messagePrivateNamedParameter;
@@ -8537,7 +8848,7 @@
 const MessageCode messagePrivateNamedParameter = const MessageCode(
     "PrivateNamedParameter",
     analyzerCodes: <String>["PRIVATE_OPTIONAL_PARAMETER"],
-    message: r"""An optional named parameter can't start with '_'.""");
+    problemMessage: r"""An optional named parameter can't start with '_'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeRedirectingConstructorWithAnotherInitializer =
@@ -8547,7 +8858,7 @@
 const MessageCode messageRedirectingConstructorWithAnotherInitializer =
     const MessageCode("RedirectingConstructorWithAnotherInitializer",
         analyzerCodes: <String>["FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR"],
-        message:
+        problemMessage:
             r"""A redirecting constructor can't have other initializers.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8558,8 +8869,8 @@
 const MessageCode messageRedirectingConstructorWithBody = const MessageCode(
     "RedirectingConstructorWithBody",
     index: 22,
-    message: r"""Redirecting constructors can't have a body.""",
-    tip:
+    problemMessage: r"""Redirecting constructors can't have a body.""",
+    correctionMessage:
         r"""Try removing the body, or not making this a redirecting constructor.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8571,7 +8882,7 @@
     messageRedirectingConstructorWithMultipleRedirectInitializers =
     const MessageCode("RedirectingConstructorWithMultipleRedirectInitializers",
         analyzerCodes: <String>["MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS"],
-        message:
+        problemMessage:
             r"""A redirecting constructor can't have more than one redirection.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8582,7 +8893,7 @@
 const MessageCode messageRedirectingConstructorWithSuperInitializer =
     const MessageCode("RedirectingConstructorWithSuperInitializer",
         analyzerCodes: <String>["SUPER_IN_REDIRECTING_CONSTRUCTOR"],
-        message:
+        problemMessage:
             r"""A redirecting constructor can't have a 'super' initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8592,15 +8903,16 @@
 const MessageCode messageRedirectionInNonFactory = const MessageCode(
     "RedirectionInNonFactory",
     index: 21,
-    message: r"""Only factory constructor can specify '=' redirection.""",
-    tip:
+    problemMessage:
+        r"""Only factory constructor can specify '=' redirection.""",
+    correctionMessage:
         r"""Try making this a factory constructor, or remove the redirection.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateRedirectionTargetNotFound =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Redirection constructor target not found: '#name'""",
         withArguments: _withArgumentsRedirectionTargetNotFound);
 
@@ -8614,7 +8926,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeRedirectionTargetNotFound,
-      message: """Redirection constructor target not found: '${name}'""",
+      problemMessage: """Redirection constructor target not found: '${name}'""",
       arguments: {'name': name});
 }
 
@@ -8622,7 +8934,7 @@
 const Template<Message Function(String name)>
     templateRequiredNamedParameterHasDefaultValueError =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Named parameter '#name' is required and can't have a default value.""",
         withArguments:
             _withArgumentsRequiredNamedParameterHasDefaultValueError);
@@ -8639,7 +8951,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeRequiredNamedParameterHasDefaultValueError,
-      message:
+      problemMessage:
           """Named parameter '${name}' is required and can't have a default value.""",
       arguments: {'name': name});
 }
@@ -8652,8 +8964,8 @@
 const MessageCode messageRequiredParameterWithDefault = const MessageCode(
     "RequiredParameterWithDefault",
     analyzerCodes: <String>["NAMED_PARAMETER_OUTSIDE_GROUP"],
-    message: r"""Non-optional parameters can't have a default value.""",
-    tip:
+    problemMessage: r"""Non-optional parameters can't have a default value.""",
+    correctionMessage:
         r"""Try removing the default value or making the parameter optional.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8662,7 +8974,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageRethrowNotCatch = const MessageCode("RethrowNotCatch",
     analyzerCodes: <String>["RETHROW_OUTSIDE_CATCH"],
-    message: r"""'rethrow' can only be used in catch clauses.""");
+    problemMessage: r"""'rethrow' can only be used in catch clauses.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeReturnFromVoidFunction = messageReturnFromVoidFunction;
@@ -8671,7 +8983,7 @@
 const MessageCode messageReturnFromVoidFunction = const MessageCode(
     "ReturnFromVoidFunction",
     analyzerCodes: <String>["RETURN_OF_INVALID_TYPE"],
-    message: r"""Can't return a value from a void function.""");
+    problemMessage: r"""Can't return a value from a void function.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeReturnTypeFunctionExpression =
@@ -8680,7 +8992,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageReturnTypeFunctionExpression = const MessageCode(
     "ReturnTypeFunctionExpression",
-    message: r"""A function expression can't have a return type.""");
+    problemMessage: r"""A function expression can't have a return type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeReturnWithoutExpression = messageReturnWithoutExpression;
@@ -8690,7 +9002,8 @@
     "ReturnWithoutExpression",
     analyzerCodes: <String>["RETURN_WITHOUT_VALUE"],
     severity: Severity.warning,
-    message: r"""Must explicitly return a value from a non-void function.""");
+    problemMessage:
+        r"""Must explicitly return a value from a non-void function.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeReturnWithoutExpressionAsync =
@@ -8699,7 +9012,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageReturnWithoutExpressionAsync = const MessageCode(
     "ReturnWithoutExpressionAsync",
-    message:
+    problemMessage:
         r"""A value must be explicitly returned from a non-void async function.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8709,13 +9022,13 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageReturnWithoutExpressionSync = const MessageCode(
     "ReturnWithoutExpressionSync",
-    message:
+    problemMessage:
         r"""A value must be explicitly returned from a non-void function.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_)> templateSdkRootNotFound =
     const Template<Message Function(Uri uri_)>(
-        messageTemplate: r"""SDK root directory not found: #uri.""",
+        problemMessageTemplate: r"""SDK root directory not found: #uri.""",
         withArguments: _withArgumentsSdkRootNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8728,7 +9041,7 @@
 Message _withArgumentsSdkRootNotFound(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codeSdkRootNotFound,
-      message: """SDK root directory not found: ${uri}.""",
+      problemMessage: """SDK root directory not found: ${uri}.""",
       arguments: {'uri': uri_});
 }
 
@@ -8738,8 +9051,8 @@
         Uri
             uri_)> templateSdkSpecificationNotFound = const Template<
         Message Function(Uri uri_)>(
-    messageTemplate: r"""SDK libraries specification not found: #uri.""",
-    tipTemplate:
+    problemMessageTemplate: r"""SDK libraries specification not found: #uri.""",
+    correctionMessageTemplate:
         r"""Normally, the specification is a file named 'libraries.json' in the Dart SDK install location.""",
     withArguments: _withArgumentsSdkSpecificationNotFound);
 
@@ -8753,8 +9066,8 @@
 Message _withArgumentsSdkSpecificationNotFound(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codeSdkSpecificationNotFound,
-      message: """SDK libraries specification not found: ${uri}.""",
-      tip:
+      problemMessage: """SDK libraries specification not found: ${uri}.""",
+      correctionMessage:
           """Normally, the specification is a file named 'libraries.json' in the Dart SDK install location.""",
       arguments: {'uri': uri_});
 }
@@ -8762,7 +9075,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_)> templateSdkSummaryNotFound =
     const Template<Message Function(Uri uri_)>(
-        messageTemplate: r"""SDK summary not found: #uri.""",
+        problemMessageTemplate: r"""SDK summary not found: #uri.""",
         withArguments: _withArgumentsSdkSummaryNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8775,7 +9088,8 @@
 Message _withArgumentsSdkSummaryNotFound(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codeSdkSummaryNotFound,
-      message: """SDK summary not found: ${uri}.""", arguments: {'uri': uri_});
+      problemMessage: """SDK summary not found: ${uri}.""",
+      arguments: {'uri': uri_});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8785,7 +9099,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSetLiteralTooManyTypeArguments = const MessageCode(
     "SetLiteralTooManyTypeArguments",
-    message: r"""A set literal requires exactly one type argument.""");
+    problemMessage: r"""A set literal requires exactly one type argument.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSetOrMapLiteralTooManyTypeArguments =
@@ -8794,7 +9108,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSetOrMapLiteralTooManyTypeArguments = const MessageCode(
     "SetOrMapLiteralTooManyTypeArguments",
-    message:
+    problemMessage:
         r"""A set or map literal requires exactly one or two type arguments, respectively.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8804,13 +9118,13 @@
 const MessageCode messageSetterConstructor = const MessageCode(
     "SetterConstructor",
     index: 104,
-    message: r"""Constructors can't be a setter.""",
-    tip: r"""Try removing 'set'.""");
+    problemMessage: r"""Constructors can't be a setter.""",
+    correctionMessage: r"""Try removing 'set'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateSetterNotFound =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Setter not found: '#name'.""",
+        problemMessageTemplate: r"""Setter not found: '#name'.""",
         withArguments: _withArgumentsSetterNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8823,7 +9137,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSetterNotFound,
-      message: """Setter not found: '${name}'.""", arguments: {'name': name});
+      problemMessage: """Setter not found: '${name}'.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8832,7 +9147,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSetterNotSync = const MessageCode("SetterNotSync",
     analyzerCodes: <String>["INVALID_MODIFIER_ON_SETTER"],
-    message: r"""Setters can't use 'async', 'async*', or 'sync*'.""");
+    problemMessage: r"""Setters can't use 'async', 'async*', or 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSetterWithWrongNumberOfFormals =
@@ -8842,7 +9157,7 @@
 const MessageCode messageSetterWithWrongNumberOfFormals = const MessageCode(
     "SetterWithWrongNumberOfFormals",
     analyzerCodes: <String>["WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER"],
-    message: r"""A setter should have exactly one formal parameter.""");
+    problemMessage: r"""A setter should have exactly one formal parameter.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -8855,7 +9170,7 @@
             _num3)> templateSourceBodySummary = const Template<
         Message Function(
             int count, int count2, num _num1, num _num2, num _num3)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Built bodies for #count compilation units (#count2 bytes) in #num1%.3ms, that is,
 #num2%12.3 bytes/ms, and
 #num3%12.3 ms/compilation unit.""",
@@ -8886,7 +9201,7 @@
   if (_num3 == null) throw 'No number provided';
   String num3 = _num3.toStringAsFixed(3).padLeft(12);
   return new Message(codeSourceBodySummary,
-      message:
+      problemMessage:
           """Built bodies for ${count} compilation units (${count2} bytes) in ${num1}ms, that is,
 ${num2} bytes/ms, and
 ${num3} ms/compilation unit.""",
@@ -8910,7 +9225,7 @@
             _num3)> templateSourceOutlineSummary = const Template<
         Message Function(
             int count, int count2, num _num1, num _num2, num _num3)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Built outlines for #count compilation units (#count2 bytes) in #num1%.3ms, that is,
 #num2%12.3 bytes/ms, and
 #num3%12.3 ms/compilation unit.""",
@@ -8941,7 +9256,7 @@
   if (_num3 == null) throw 'No number provided';
   String num3 = _num3.toStringAsFixed(3).padLeft(12);
   return new Message(codeSourceOutlineSummary,
-      message:
+      problemMessage:
           """Built outlines for ${count} compilation units (${count2} bytes) in ${num1}ms, that is,
 ${num2} bytes/ms, and
 ${num3} ms/compilation unit.""",
@@ -8959,7 +9274,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSpreadElement = const MessageCode("SpreadElement",
-    severity: Severity.context, message: r"""Iterable spread.""");
+    severity: Severity.context, problemMessage: r"""Iterable spread.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSpreadMapElement = messageSpreadMapElement;
@@ -8968,7 +9283,7 @@
 const MessageCode messageSpreadMapElement = const MessageCode(
     "SpreadMapElement",
     severity: Severity.context,
-    message: r"""Map spread.""");
+    problemMessage: r"""Map spread.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeStackOverflow = messageStackOverflow;
@@ -8976,8 +9291,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageStackOverflow = const MessageCode("StackOverflow",
     index: 19,
-    message: r"""The file has too many nested expressions or statements.""",
-    tip: r"""Try simplifying the code.""");
+    problemMessage:
+        r"""The file has too many nested expressions or statements.""",
+    correctionMessage: r"""Try simplifying the code.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeStaticAndInstanceConflict =
@@ -8987,7 +9303,8 @@
 const MessageCode messageStaticAndInstanceConflict = const MessageCode(
     "StaticAndInstanceConflict",
     analyzerCodes: <String>["CONFLICTING_STATIC_AND_INSTANCE"],
-    message: r"""This static member conflicts with an instance member.""");
+    problemMessage:
+        r"""This static member conflicts with an instance member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeStaticAndInstanceConflictCause =
@@ -8997,7 +9314,7 @@
 const MessageCode messageStaticAndInstanceConflictCause = const MessageCode(
     "StaticAndInstanceConflictCause",
     severity: Severity.context,
-    message: r"""This is the instance member.""");
+    problemMessage: r"""This is the instance member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeStaticConstructor = messageStaticConstructor;
@@ -9006,8 +9323,8 @@
 const MessageCode messageStaticConstructor = const MessageCode(
     "StaticConstructor",
     index: 4,
-    message: r"""Constructors can't be static.""",
-    tip: r"""Try removing the keyword 'static'.""");
+    problemMessage: r"""Constructors can't be static.""",
+    correctionMessage: r"""Try removing the keyword 'static'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeStaticOperator = messageStaticOperator;
@@ -9015,8 +9332,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageStaticOperator = const MessageCode("StaticOperator",
     index: 17,
-    message: r"""Operators can't be static.""",
-    tip: r"""Try removing the keyword 'static'.""");
+    problemMessage: r"""Operators can't be static.""",
+    correctionMessage: r"""Try removing the keyword 'static'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeStaticTearOffFromInstantiatedClass =
@@ -9025,9 +9342,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageStaticTearOffFromInstantiatedClass = const MessageCode(
     "StaticTearOffFromInstantiatedClass",
-    message:
+    problemMessage:
         r"""Cannot access static member on an instantiated generic class.""",
-    tip:
+    correctionMessage:
         r"""Try removing the type arguments or placing them after the member name.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9036,7 +9353,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageStrongModeNNBDButOptOut = const MessageCode(
     "StrongModeNNBDButOptOut",
-    message:
+    problemMessage:
         r"""A library can't opt out of null safety by default, when using sound null safety.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9045,7 +9362,7 @@
         List<String>
             _names)> templateStrongModeNNBDPackageOptOut = const Template<
         Message Function(List<String> _names)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Cannot run with sound null safety, because the following dependencies
 don't support null safety:
 
@@ -9066,7 +9383,7 @@
   if (_names.isEmpty) throw 'No names provided';
   String names = itemizeNames(_names);
   return new Message(codeStrongModeNNBDPackageOptOut,
-      message:
+      problemMessage:
           """Cannot run with sound null safety, because the following dependencies
 don't support null safety:
 
@@ -9083,7 +9400,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageStrongWithWeakDillLibrary = const MessageCode(
     "StrongWithWeakDillLibrary",
-    message:
+    problemMessage:
         r"""Loaded library is compiled with unsound null safety and cannot be used in compilation for sound null safety.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9093,8 +9410,8 @@
 const MessageCode messageSuperAsExpression = const MessageCode(
     "SuperAsExpression",
     analyzerCodes: <String>["SUPER_AS_EXPRESSION"],
-    message: r"""Can't use 'super' as an expression.""",
-    tip:
+    problemMessage: r"""Can't use 'super' as an expression.""",
+    correctionMessage:
         r"""To delegate a constructor to a super constructor, put the super call as an initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9104,7 +9421,7 @@
 const MessageCode messageSuperAsIdentifier = const MessageCode(
     "SuperAsIdentifier",
     analyzerCodes: <String>["SUPER_AS_EXPRESSION"],
-    message: r"""Expected identifier, but got 'super'.""");
+    problemMessage: r"""Expected identifier, but got 'super'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSuperInitializerNotLast = messageSuperInitializerNotLast;
@@ -9113,7 +9430,7 @@
 const MessageCode messageSuperInitializerNotLast = const MessageCode(
     "SuperInitializerNotLast",
     analyzerCodes: <String>["INVALID_SUPER_INVOCATION"],
-    message: r"""Can't have initializers after 'super'.""");
+    problemMessage: r"""Can't have initializers after 'super'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSuperNullAware = messageSuperNullAware;
@@ -9121,15 +9438,16 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSuperNullAware = const MessageCode("SuperNullAware",
     index: 18,
-    message:
+    problemMessage:
         r"""The operator '?.' cannot be used with 'super' because 'super' cannot be null.""",
-    tip: r"""Try replacing '?.' with '.'""");
+    correctionMessage: r"""Try replacing '?.' with '.'""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateSuperclassHasNoConstructor =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Superclass has no constructor named '#name'.""",
+        problemMessageTemplate:
+            r"""Superclass has no constructor named '#name'.""",
         withArguments: _withArgumentsSuperclassHasNoConstructor);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9145,7 +9463,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSuperclassHasNoConstructor,
-      message: """Superclass has no constructor named '${name}'.""",
+      problemMessage: """Superclass has no constructor named '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -9155,7 +9473,7 @@
         String
             name)> templateSuperclassHasNoDefaultConstructor = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The superclass, '#name', has no unnamed constructor that takes no arguments.""",
     withArguments: _withArgumentsSuperclassHasNoDefaultConstructor);
 
@@ -9171,7 +9489,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSuperclassHasNoDefaultConstructor,
-      message:
+      problemMessage:
           """The superclass, '${name}', has no unnamed constructor that takes no arguments.""",
       arguments: {'name': name});
 }
@@ -9179,7 +9497,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateSuperclassHasNoGetter =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Superclass has no getter named '#name'.""",
+        problemMessageTemplate: r"""Superclass has no getter named '#name'.""",
         withArguments: _withArgumentsSuperclassHasNoGetter);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9192,14 +9510,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSuperclassHasNoGetter,
-      message: """Superclass has no getter named '${name}'.""",
+      problemMessage: """Superclass has no getter named '${name}'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateSuperclassHasNoMember =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Superclass has no member named '#name'.""",
+        problemMessageTemplate: r"""Superclass has no member named '#name'.""",
         withArguments: _withArgumentsSuperclassHasNoMember);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9212,14 +9530,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSuperclassHasNoMember,
-      message: """Superclass has no member named '${name}'.""",
+      problemMessage: """Superclass has no member named '${name}'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateSuperclassHasNoMethod =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Superclass has no method named '#name'.""",
+        problemMessageTemplate: r"""Superclass has no method named '#name'.""",
         withArguments: _withArgumentsSuperclassHasNoMethod);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9232,14 +9550,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSuperclassHasNoMethod,
-      message: """Superclass has no method named '${name}'.""",
+      problemMessage: """Superclass has no method named '${name}'.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateSuperclassHasNoSetter =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Superclass has no setter named '#name'.""",
+        problemMessageTemplate: r"""Superclass has no setter named '#name'.""",
         withArguments: _withArgumentsSuperclassHasNoSetter);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9252,7 +9570,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSuperclassHasNoSetter,
-      message: """Superclass has no setter named '${name}'.""",
+      problemMessage: """Superclass has no setter named '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -9262,7 +9580,7 @@
         String
             name)> templateSuperclassMethodArgumentMismatch = const Template<
         Message Function(String name)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Superclass doesn't have a method named '#name' with matching arguments.""",
     withArguments: _withArgumentsSuperclassMethodArgumentMismatch);
 
@@ -9277,7 +9595,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSuperclassMethodArgumentMismatch,
-      message:
+      problemMessage:
           """Superclass doesn't have a method named '${name}' with matching arguments.""",
       arguments: {'name': name});
 }
@@ -9288,12 +9606,13 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSupertypeIsFunction = const MessageCode(
     "SupertypeIsFunction",
-    message: r"""Can't use a function type as supertype.""");
+    problemMessage: r"""Can't use a function type as supertype.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateSupertypeIsIllegal =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""The type '#name' can't be used as supertype.""",
+        problemMessageTemplate:
+            r"""The type '#name' can't be used as supertype.""",
         withArguments: _withArgumentsSupertypeIsIllegal);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9306,14 +9625,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSupertypeIsIllegal,
-      message: """The type '${name}' can't be used as supertype.""",
+      problemMessage: """The type '${name}' can't be used as supertype.""",
       arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateSupertypeIsTypeVariable =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type variable '#name' can't be used as supertype.""",
         withArguments: _withArgumentsSupertypeIsTypeVariable);
 
@@ -9327,7 +9646,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeSupertypeIsTypeVariable,
-      message: """The type variable '${name}' can't be used as supertype.""",
+      problemMessage:
+          """The type variable '${name}' can't be used as supertype.""",
       arguments: {'name': name});
 }
 
@@ -9338,7 +9658,7 @@
 const MessageCode messageSwitchCaseFallThrough = const MessageCode(
     "SwitchCaseFallThrough",
     analyzerCodes: <String>["CASE_BLOCK_NOT_TERMINATED"],
-    message: r"""Switch case may fall through to the next case.""");
+    problemMessage: r"""Switch case may fall through to the next case.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSwitchExpressionNotAssignableCause =
@@ -9348,7 +9668,7 @@
 const MessageCode messageSwitchExpressionNotAssignableCause = const MessageCode(
     "SwitchExpressionNotAssignableCause",
     severity: Severity.context,
-    message: r"""The switch expression is here.""");
+    problemMessage: r"""The switch expression is here.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSwitchHasCaseAfterDefault =
@@ -9358,9 +9678,10 @@
 const MessageCode messageSwitchHasCaseAfterDefault = const MessageCode(
     "SwitchHasCaseAfterDefault",
     index: 16,
-    message:
+    problemMessage:
         r"""The default case should be the last case in a switch statement.""",
-    tip: r"""Try moving the default case after the other case clauses.""");
+    correctionMessage:
+        r"""Try moving the default case after the other case clauses.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSwitchHasMultipleDefaults =
@@ -9370,21 +9691,21 @@
 const MessageCode messageSwitchHasMultipleDefaults = const MessageCode(
     "SwitchHasMultipleDefaults",
     index: 15,
-    message: r"""The 'default' case can only be declared once.""",
-    tip: r"""Try removing all but one default case.""");
+    problemMessage: r"""The 'default' case can only be declared once.""",
+    correctionMessage: r"""Try removing all but one default case.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSyntheticToken = messageSyntheticToken;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSyntheticToken = const MessageCode("SyntheticToken",
-    message: r"""This couldn't be parsed.""");
+    problemMessage: r"""This couldn't be parsed.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateThisAccessInFieldInitializer =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't access 'this' in a field initializer to read '#name'.""",
         withArguments: _withArgumentsThisAccessInFieldInitializer);
 
@@ -9398,7 +9719,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeThisAccessInFieldInitializer,
-      message:
+      problemMessage:
           """Can't access 'this' in a field initializer to read '${name}'.""",
       arguments: {'name': name});
 }
@@ -9410,7 +9731,7 @@
 const MessageCode messageThisAsIdentifier = const MessageCode(
     "ThisAsIdentifier",
     analyzerCodes: <String>["INVALID_REFERENCE_TO_THIS"],
-    message: r"""Expected identifier, but got 'this'.""");
+    problemMessage: r"""Expected identifier, but got 'this'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeThisInNullAwareReceiver = messageThisInNullAwareReceiver;
@@ -9419,14 +9740,14 @@
 const MessageCode messageThisInNullAwareReceiver = const MessageCode(
     "ThisInNullAwareReceiver",
     severity: Severity.warning,
-    message: r"""The receiver 'this' cannot be null.""",
-    tip: r"""Try replacing '?.' with '.'""");
+    problemMessage: r"""The receiver 'this' cannot be null.""",
+    correctionMessage: r"""Try replacing '?.' with '.'""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templateThisNotPromoted =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""'this' can't be promoted.""",
-        tipTemplate: r"""See #string""",
+        problemMessageTemplate: r"""'this' can't be promoted.""",
+        correctionMessageTemplate: r"""See #string""",
         withArguments: _withArgumentsThisNotPromoted);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9439,8 +9760,8 @@
 Message _withArgumentsThisNotPromoted(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeThisNotPromoted,
-      message: """'this' can't be promoted.""",
-      tip: """See ${string}""",
+      problemMessage: """'this' can't be promoted.""",
+      correctionMessage: """See ${string}""",
       arguments: {'string': string});
 }
 
@@ -9448,7 +9769,8 @@
 const Template<Message Function(String string)>
     templateThisOrSuperAccessInFieldInitializer =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""Can't access '#string' in a field initializer.""",
+        problemMessageTemplate:
+            r"""Can't access '#string' in a field initializer.""",
         withArguments: _withArgumentsThisOrSuperAccessInFieldInitializer);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9462,7 +9784,7 @@
 Message _withArgumentsThisOrSuperAccessInFieldInitializer(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeThisOrSuperAccessInFieldInitializer,
-      message: """Can't access '${string}' in a field initializer.""",
+      problemMessage: """Can't access '${string}' in a field initializer.""",
       arguments: {'string': string});
 }
 
@@ -9473,7 +9795,7 @@
         int
             count2)> templateTooFewArguments = const Template<
         Message Function(int count, int count2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Too few positional arguments: #count required, #count2 given.""",
     withArguments: _withArgumentsTooFewArguments);
 
@@ -9489,7 +9811,7 @@
   // ignore: unnecessary_null_comparison
   if (count2 == null) throw 'No count provided';
   return new Message(codeTooFewArguments,
-      message:
+      problemMessage:
           """Too few positional arguments: ${count} required, ${count2} given.""",
       arguments: {'count': count, 'count2': count2});
 }
@@ -9501,9 +9823,10 @@
         int
             count2)> templateTooManyArguments = const Template<
         Message Function(int count, int count2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Too many positional arguments: #count allowed, but #count2 found.""",
-    tipTemplate: r"""Try removing the extra positional arguments.""",
+    correctionMessageTemplate:
+        r"""Try removing the extra positional arguments.""",
     withArguments: _withArgumentsTooManyArguments);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9518,9 +9841,9 @@
   // ignore: unnecessary_null_comparison
   if (count2 == null) throw 'No count provided';
   return new Message(codeTooManyArguments,
-      message:
+      problemMessage:
           """Too many positional arguments: ${count} allowed, but ${count2} found.""",
-      tip: """Try removing the extra positional arguments.""",
+      correctionMessage: """Try removing the extra positional arguments.""",
       arguments: {'count': count, 'count2': count2});
 }
 
@@ -9531,8 +9854,8 @@
 const MessageCode messageTopLevelOperator = const MessageCode(
     "TopLevelOperator",
     index: 14,
-    message: r"""Operators must be declared within a class.""",
-    tip:
+    problemMessage: r"""Operators must be declared within a class.""",
+    correctionMessage:
         r"""Try removing the operator, moving it to a class, or converting it to be a function.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9541,14 +9864,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTypeAfterVar = const MessageCode("TypeAfterVar",
     index: 89,
-    message:
+    problemMessage:
         r"""Variables can't be declared using both 'var' and a type name.""",
-    tip: r"""Try removing 'var.'""");
+    correctionMessage: r"""Try removing 'var.'""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(int count)> templateTypeArgumentMismatch =
     const Template<Message Function(int count)>(
-        messageTemplate: r"""Expected #count type arguments.""",
+        problemMessageTemplate: r"""Expected #count type arguments.""",
         withArguments: _withArgumentsTypeArgumentMismatch);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9561,7 +9884,7 @@
   // ignore: unnecessary_null_comparison
   if (count == null) throw 'No count provided';
   return new Message(codeTypeArgumentMismatch,
-      message: """Expected ${count} type arguments.""",
+      problemMessage: """Expected ${count} type arguments.""",
       arguments: {'count': count});
 }
 
@@ -9569,9 +9892,9 @@
 const Template<Message Function(String name)>
     templateTypeArgumentsOnTypeVariable =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't use type arguments with type variable '#name'.""",
-        tipTemplate: r"""Try removing the type arguments.""",
+        correctionMessageTemplate: r"""Try removing the type arguments.""",
         withArguments: _withArgumentsTypeArgumentsOnTypeVariable);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9584,8 +9907,9 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeTypeArgumentsOnTypeVariable,
-      message: """Can't use type arguments with type variable '${name}'.""",
-      tip: """Try removing the type arguments.""",
+      problemMessage:
+          """Can't use type arguments with type variable '${name}'.""",
+      correctionMessage: """Try removing the type arguments.""",
       arguments: {'name': name});
 }
 
@@ -9596,13 +9920,14 @@
 const MessageCode messageTypeBeforeFactory = const MessageCode(
     "TypeBeforeFactory",
     index: 57,
-    message: r"""Factory constructors cannot have a return type.""",
-    tip: r"""Try removing the type appearing before 'factory'.""");
+    problemMessage: r"""Factory constructors cannot have a return type.""",
+    correctionMessage:
+        r"""Try removing the type appearing before 'factory'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateTypeNotFound =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""Type '#name' not found.""",
+        problemMessageTemplate: r"""Type '#name' not found.""",
         withArguments: _withArgumentsTypeNotFound);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9615,13 +9940,14 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeTypeNotFound,
-      message: """Type '${name}' not found.""", arguments: {'name': name});
+      problemMessage: """Type '${name}' not found.""",
+      arguments: {'name': name});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name, Uri uri_)> templateTypeOrigin =
     const Template<Message Function(String name, Uri uri_)>(
-        messageTemplate: r"""'#name' is from '#uri'.""",
+        problemMessageTemplate: r"""'#name' is from '#uri'.""",
         withArguments: _withArgumentsTypeOrigin);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9636,7 +9962,7 @@
   name = demangleMixinApplicationName(name);
   String? uri = relativizeUri(uri_);
   return new Message(codeTypeOrigin,
-      message: """'${name}' is from '${uri}'.""",
+      problemMessage: """'${name}' is from '${uri}'.""",
       arguments: {'name': name, 'uri': uri_});
 }
 
@@ -9644,7 +9970,7 @@
 const Template<Message Function(String name, Uri uri_, Uri uri2_)>
     templateTypeOriginWithFileUri =
     const Template<Message Function(String name, Uri uri_, Uri uri2_)>(
-        messageTemplate: r"""'#name' is from '#uri' ('#uri2').""",
+        problemMessageTemplate: r"""'#name' is from '#uri' ('#uri2').""",
         withArguments: _withArgumentsTypeOriginWithFileUri);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9661,7 +9987,7 @@
   String? uri = relativizeUri(uri_);
   String? uri2 = relativizeUri(uri2_);
   return new Message(codeTypeOriginWithFileUri,
-      message: """'${name}' is from '${uri}' ('${uri2}').""",
+      problemMessage: """'${name}' is from '${uri}' ('${uri2}').""",
       arguments: {'name': name, 'uri': uri_, 'uri2': uri2_});
 }
 
@@ -9673,13 +9999,14 @@
 const MessageCode messageTypeVariableDuplicatedName = const MessageCode(
     "TypeVariableDuplicatedName",
     analyzerCodes: <String>["DUPLICATE_DEFINITION"],
-    message: r"""A type variable can't have the same name as another.""");
+    problemMessage:
+        r"""A type variable can't have the same name as another.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateTypeVariableDuplicatedNameCause =
     const Template<Message Function(String name)>(
-        messageTemplate: r"""The other type variable named '#name'.""",
+        problemMessageTemplate: r"""The other type variable named '#name'.""",
         withArguments: _withArgumentsTypeVariableDuplicatedNameCause);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9692,7 +10019,7 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeTypeVariableDuplicatedNameCause,
-      message: """The other type variable named '${name}'.""",
+      problemMessage: """The other type variable named '${name}'.""",
       arguments: {'name': name});
 }
 
@@ -9704,7 +10031,7 @@
 const MessageCode messageTypeVariableInConstantContext = const MessageCode(
     "TypeVariableInConstantContext",
     analyzerCodes: <String>["TYPE_PARAMETER_IN_CONST_EXPRESSION"],
-    message: r"""Type variables can't be used as constants.""");
+    problemMessage: r"""Type variables can't be used as constants.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTypeVariableInStaticContext =
@@ -9714,7 +10041,7 @@
 const MessageCode messageTypeVariableInStaticContext = const MessageCode(
     "TypeVariableInStaticContext",
     analyzerCodes: <String>["TYPE_PARAMETER_REFERENCED_BY_STATIC"],
-    message: r"""Type variables can't be used in static members.""");
+    problemMessage: r"""Type variables can't be used in static members.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTypeVariableSameNameAsEnclosing =
@@ -9724,7 +10051,7 @@
 const MessageCode messageTypeVariableSameNameAsEnclosing = const MessageCode(
     "TypeVariableSameNameAsEnclosing",
     analyzerCodes: <String>["CONFLICTING_TYPE_VARIABLE_AND_CLASS"],
-    message:
+    problemMessage:
         r"""A type variable can't have the same name as its enclosing declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9733,7 +10060,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTypedefCause = const MessageCode("TypedefCause",
     severity: Severity.context,
-    message: r"""The issue arises via this type alias.""");
+    problemMessage: r"""The issue arises via this type alias.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTypedefInClass = messageTypedefInClass;
@@ -9741,8 +10068,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTypedefInClass = const MessageCode("TypedefInClass",
     index: 7,
-    message: r"""Typedefs can't be declared inside classes.""",
-    tip: r"""Try moving the typedef to the top-level.""");
+    problemMessage: r"""Typedefs can't be declared inside classes.""",
+    correctionMessage: r"""Try moving the typedef to the top-level.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTypedefNotFunction = messageTypedefNotFunction;
@@ -9751,7 +10078,7 @@
 const MessageCode messageTypedefNotFunction = const MessageCode(
     "TypedefNotFunction",
     analyzerCodes: <String>["INVALID_GENERIC_FUNCTION_TYPE"],
-    message: r"""Can't create typedef from non-function type.""");
+    problemMessage: r"""Can't create typedef from non-function type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTypedefNotType = messageTypedefNotType;
@@ -9759,7 +10086,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTypedefNotType = const MessageCode("TypedefNotType",
     analyzerCodes: <String>["INVALID_TYPE_IN_TYPEDEF"],
-    message: r"""Can't create typedef from non-type.""");
+    problemMessage: r"""Can't create typedef from non-type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTypedefNullableType = messageTypedefNullableType;
@@ -9767,7 +10094,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTypedefNullableType = const MessageCode(
     "TypedefNullableType",
-    message: r"""Can't create typedef from nullable type.""");
+    problemMessage: r"""Can't create typedef from nullable type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTypedefTypeVariableNotConstructor =
@@ -9776,7 +10103,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTypedefTypeVariableNotConstructor = const MessageCode(
     "TypedefTypeVariableNotConstructor",
-    message:
+    problemMessage:
         r"""Can't use a typedef denoting a type variable as a constructor, nor for a static member access.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9787,7 +10114,7 @@
 const MessageCode messageTypedefTypeVariableNotConstructorCause =
     const MessageCode("TypedefTypeVariableNotConstructorCause",
         severity: Severity.context,
-        message: r"""This is the type variable ultimately denoted.""");
+        problemMessage: r"""This is the type variable ultimately denoted.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTypedefUnaliasedTypeCause =
@@ -9797,7 +10124,7 @@
 const MessageCode messageTypedefUnaliasedTypeCause = const MessageCode(
     "TypedefUnaliasedTypeCause",
     severity: Severity.context,
-    message: r"""This is the type denoted by the type alias.""");
+    problemMessage: r"""This is the type denoted by the type alias.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeUnexpectedDollarInString = messageUnexpectedDollarInString;
@@ -9806,9 +10133,9 @@
 const MessageCode messageUnexpectedDollarInString = const MessageCode(
     "UnexpectedDollarInString",
     analyzerCodes: <String>["UNEXPECTED_DOLLAR_IN_STRING"],
-    message:
+    problemMessage:
         r"""A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({}).""",
-    tip: r"""Try adding a backslash (\) to escape the '$'.""");
+    correctionMessage: r"""Try adding a backslash (\) to escape the '$'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -9816,7 +10143,7 @@
         Token
             token)> templateUnexpectedModifierInNonNnbd = const Template<
         Message Function(Token token)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The modifier '#lexeme' is only available in null safe libraries.""",
     withArguments: _withArgumentsUnexpectedModifierInNonNnbd);
 
@@ -9829,7 +10156,7 @@
 Message _withArgumentsUnexpectedModifierInNonNnbd(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeUnexpectedModifierInNonNnbd,
-      message:
+      problemMessage:
           """The modifier '${lexeme}' is only available in null safe libraries.""",
       arguments: {'lexeme': token});
 }
@@ -9837,7 +10164,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateUnexpectedToken =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""Unexpected token '#lexeme'.""",
+        problemMessageTemplate: r"""Unexpected token '#lexeme'.""",
         withArguments: _withArgumentsUnexpectedToken);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9849,7 +10176,7 @@
 Message _withArgumentsUnexpectedToken(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeUnexpectedToken,
-      message: """Unexpected token '${lexeme}'.""",
+      problemMessage: """Unexpected token '${lexeme}'.""",
       arguments: {'lexeme': token});
 }
 
@@ -9857,7 +10184,7 @@
 const Template<Message Function(String string, Token token)>
     templateUnmatchedToken =
     const Template<Message Function(String string, Token token)>(
-        messageTemplate: r"""Can't find '#string' to match '#lexeme'.""",
+        problemMessageTemplate: r"""Can't find '#string' to match '#lexeme'.""",
         withArguments: _withArgumentsUnmatchedToken);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9870,7 +10197,7 @@
   if (string.isEmpty) throw 'No string provided';
   String lexeme = token.lexeme;
   return new Message(codeUnmatchedToken,
-      message: """Can't find '${string}' to match '${lexeme}'.""",
+      problemMessage: """Can't find '${string}' to match '${lexeme}'.""",
       arguments: {'string': string, 'lexeme': token});
 }
 
@@ -9881,7 +10208,7 @@
         String
             name2)> templateUnresolvedPrefixInTypeAnnotation = const Template<
         Message Function(String name, String name2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""'#name.#name2' can't be used as a type because '#name' isn't defined.""",
     withArguments: _withArgumentsUnresolvedPrefixInTypeAnnotation);
 
@@ -9900,7 +10227,7 @@
   if (name2.isEmpty) throw 'No name provided';
   name2 = demangleMixinApplicationName(name2);
   return new Message(codeUnresolvedPrefixInTypeAnnotation,
-      message:
+      problemMessage:
           """'${name}.${name2}' can't be used as a type because '${name}' isn't defined.""",
       arguments: {'name': name, 'name2': name2});
 }
@@ -9908,7 +10235,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templateUnspecified =
     const Template<Message Function(String string)>(
-        messageTemplate: r"""#string""",
+        problemMessageTemplate: r"""#string""",
         withArguments: _withArgumentsUnspecified);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9921,7 +10248,7 @@
 Message _withArgumentsUnspecified(String string) {
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeUnspecified,
-      message: """${string}""", arguments: {'string': string});
+      problemMessage: """${string}""", arguments: {'string': string});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9930,14 +10257,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageUnsupportedDartExt = const MessageCode(
     "UnsupportedDartExt",
-    message: r"""Dart native extensions are no longer supported.""",
-    tip:
+    problemMessage: r"""Dart native extensions are no longer supported.""",
+    correctionMessage:
         r"""Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Token token)> templateUnsupportedOperator =
     const Template<Message Function(Token token)>(
-        messageTemplate: r"""The '#lexeme' operator is not supported.""",
+        problemMessageTemplate: r"""The '#lexeme' operator is not supported.""",
         withArguments: _withArgumentsUnsupportedOperator);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9949,7 +10276,7 @@
 Message _withArgumentsUnsupportedOperator(Token token) {
   String lexeme = token.lexeme;
   return new Message(codeUnsupportedOperator,
-      message: """The '${lexeme}' operator is not supported.""",
+      problemMessage: """The '${lexeme}' operator is not supported.""",
       arguments: {'lexeme': token});
 }
 
@@ -9960,8 +10287,8 @@
 const MessageCode messageUnsupportedPrefixPlus = const MessageCode(
     "UnsupportedPrefixPlus",
     analyzerCodes: <String>["MISSING_IDENTIFIER"],
-    message: r"""'+' is not a prefix operator.""",
-    tip: r"""Try removing '+'.""");
+    problemMessage: r"""'+' is not a prefix operator.""",
+    correctionMessage: r"""Try removing '+'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeUnterminatedComment = messageUnterminatedComment;
@@ -9970,13 +10297,14 @@
 const MessageCode messageUnterminatedComment = const MessageCode(
     "UnterminatedComment",
     analyzerCodes: <String>["UNTERMINATED_MULTI_LINE_COMMENT"],
-    message: r"""Comment starting with '/*' must end with '*/'.""");
+    problemMessage: r"""Comment starting with '/*' must end with '*/'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String string, String string2)>
+const Template<
+        Message Function(String string, String string2)>
     templateUnterminatedString =
     const Template<Message Function(String string, String string2)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""String starting with #string must end with #string2.""",
         withArguments: _withArgumentsUnterminatedString);
 
@@ -9992,7 +10320,8 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeUnterminatedString,
-      message: """String starting with ${string} must end with ${string2}.""",
+      problemMessage:
+          """String starting with ${string} must end with ${string2}.""",
       arguments: {'string': string, 'string2': string2});
 }
 
@@ -10000,13 +10329,14 @@
 const Code<Null> codeUnterminatedToken = messageUnterminatedToken;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageUnterminatedToken =
-    const MessageCode("UnterminatedToken", message: r"""Incomplete token.""");
+const MessageCode messageUnterminatedToken = const MessageCode(
+    "UnterminatedToken",
+    problemMessage: r"""Incomplete token.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_)> templateUntranslatableUri =
     const Template<Message Function(Uri uri_)>(
-        messageTemplate: r"""Not found: '#uri'""",
+        problemMessageTemplate: r"""Not found: '#uri'""",
         withArguments: _withArgumentsUntranslatableUri);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -10018,14 +10348,14 @@
 Message _withArgumentsUntranslatableUri(Uri uri_) {
   String? uri = relativizeUri(uri_);
   return new Message(codeUntranslatableUri,
-      message: """Not found: '${uri}'""", arguments: {'uri': uri_});
+      problemMessage: """Not found: '${uri}'""", arguments: {'uri': uri_});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateValueForRequiredParameterNotProvidedError =
     const Template<Message Function(String name)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Required named parameter '#name' must be provided.""",
         withArguments: _withArgumentsValueForRequiredParameterNotProvidedError);
 
@@ -10041,7 +10371,8 @@
   if (name.isEmpty) throw 'No name provided';
   name = demangleMixinApplicationName(name);
   return new Message(codeValueForRequiredParameterNotProvidedError,
-      message: """Required named parameter '${name}' must be provided.""",
+      problemMessage:
+          """Required named parameter '${name}' must be provided.""",
       arguments: {'name': name});
 }
 
@@ -10050,7 +10381,8 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageVarAsTypeName = const MessageCode("VarAsTypeName",
-    index: 61, message: r"""The keyword 'var' can't be used as a type name.""");
+    index: 61,
+    problemMessage: r"""The keyword 'var' can't be used as a type name.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeVarReturnType = messageVarReturnType;
@@ -10058,8 +10390,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageVarReturnType = const MessageCode("VarReturnType",
     index: 12,
-    message: r"""The return type can't be 'var'.""",
-    tip:
+    problemMessage: r"""The return type can't be 'var'.""",
+    correctionMessage:
         r"""Try removing the keyword 'var', or replacing it with the name of the return type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -10069,9 +10401,9 @@
         String
             string)> templateVariableCouldBeNullDueToWrite = const Template<
         Message Function(String name, String string)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Variable '#name' could not be promoted due to an assignment.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try null checking the variable after the assignment.  See #string""",
     withArguments: _withArgumentsVariableCouldBeNullDueToWrite);
 
@@ -10089,9 +10421,9 @@
   name = demangleMixinApplicationName(name);
   if (string.isEmpty) throw 'No string provided';
   return new Message(codeVariableCouldBeNullDueToWrite,
-      message:
+      problemMessage:
           """Variable '${name}' could not be promoted due to an assignment.""",
-      tip:
+      correctionMessage:
           """Try null checking the variable after the assignment.  See ${string}""",
       arguments: {'name': name, 'string': string});
 }
@@ -10104,7 +10436,8 @@
 const MessageCode messageVerificationErrorOriginContext = const MessageCode(
     "VerificationErrorOriginContext",
     severity: Severity.context,
-    message: r"""The node most likely is taken from here by a transformer.""");
+    problemMessage:
+        r"""The node most likely is taken from here by a transformer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeVoidExpression = messageVoidExpression;
@@ -10112,7 +10445,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageVoidExpression = const MessageCode("VoidExpression",
     analyzerCodes: <String>["USE_OF_VOID_RESULT"],
-    message: r"""This expression has type 'void' and can't be used.""");
+    problemMessage: r"""This expression has type 'void' and can't be used.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeVoidWithTypeArguments = messageVoidWithTypeArguments;
@@ -10121,8 +10454,8 @@
 const MessageCode messageVoidWithTypeArguments = const MessageCode(
     "VoidWithTypeArguments",
     index: 100,
-    message: r"""Type 'void' can't have type arguments.""",
-    tip: r"""Try removing the type arguments.""");
+    problemMessage: r"""Type 'void' can't have type arguments.""",
+    correctionMessage: r"""Try removing the type arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeWeakWithStrongDillLibrary =
@@ -10131,7 +10464,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageWeakWithStrongDillLibrary = const MessageCode(
     "WeakWithStrongDillLibrary",
-    message:
+    problemMessage:
         r"""Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -10141,9 +10474,9 @@
         String
             string2)> templateWebLiteralCannotBeRepresentedExactly = const Template<
         Message Function(String string, String string2)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The integer literal #string can't be represented exactly in JavaScript.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try changing the literal to something that can be represented in Javascript. In Javascript #string2 is the nearest value that can be represented exactly.""",
     withArguments: _withArgumentsWebLiteralCannotBeRepresentedExactly);
 
@@ -10160,9 +10493,9 @@
   if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeWebLiteralCannotBeRepresentedExactly,
-      message:
+      problemMessage:
           """The integer literal ${string} can't be represented exactly in JavaScript.""",
-      tip: """Try changing the literal to something that can be represented in Javascript. In Javascript ${string2} is the nearest value that can be represented exactly.""",
+      correctionMessage: """Try changing the literal to something that can be represented in Javascript. In Javascript ${string2} is the nearest value that can be represented exactly.""",
       arguments: {'string': string, 'string2': string2});
 }
 
@@ -10173,8 +10506,9 @@
 const MessageCode messageWithBeforeExtends = const MessageCode(
     "WithBeforeExtends",
     index: 11,
-    message: r"""The extends clause must be before the with clause.""",
-    tip: r"""Try moving the extends clause before the with clause.""");
+    problemMessage: r"""The extends clause must be before the with clause.""",
+    correctionMessage:
+        r"""Try moving the extends clause before the with clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeYieldAsIdentifier = messageYieldAsIdentifier;
@@ -10183,7 +10517,7 @@
 const MessageCode messageYieldAsIdentifier = const MessageCode(
     "YieldAsIdentifier",
     analyzerCodes: <String>["ASYNC_KEYWORD_USED_AS_IDENTIFIER"],
-    message:
+    problemMessage:
         r"""'yield' can't be used as an identifier in 'async', 'async*', or 'sync*' methods.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -10193,4 +10527,5 @@
 const MessageCode messageYieldNotGenerator = const MessageCode(
     "YieldNotGenerator",
     analyzerCodes: <String>["YIELD_IN_NON_GENERATOR"],
-    message: r"""'yield' can only be used in 'sync*' or 'async*' methods.""");
+    problemMessage:
+        r"""'yield' can only be used in 'sync*' or 'async*' methods.""");
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/diagnostic_message.dart b/pkg/_fe_analyzer_shared/lib/src/messages/diagnostic_message.dart
index 14540d9..983ebb4 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/diagnostic_message.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/diagnostic_message.dart
@@ -66,7 +66,7 @@
 
 /// This method is subject to change.
 String? getMessageHeaderText(DiagnosticMessage message) {
-  return message is FormattedMessage ? message.message : null;
+  return message is FormattedMessage ? message.problemMessage : null;
 }
 
 /// This method is subject to change.
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 613e335..042507d 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -66,13 +66,13 @@
   }
 
   @override
-  void beginClassOrMixinBody(DeclarationKind kind, Token token) {
-    listener?.beginClassOrMixinBody(kind, token);
+  void beginClassOrMixinOrExtensionBody(DeclarationKind kind, Token token) {
+    listener?.beginClassOrMixinOrExtensionBody(kind, token);
   }
 
   @override
-  void beginClassOrNamedMixinApplicationPrelude(Token token) {
-    listener?.beginClassOrNamedMixinApplicationPrelude(token);
+  void beginClassOrMixinOrNamedMixinApplicationPrelude(Token token) {
+    listener?.beginClassOrMixinOrNamedMixinApplicationPrelude(token);
   }
 
   @override
@@ -156,9 +156,10 @@
   }
 
   @override
-  void beginFactoryMethod(
-      Token lastConsumed, Token? externalToken, Token? constToken) {
-    listener?.beginFactoryMethod(lastConsumed, externalToken, constToken);
+  void beginFactoryMethod(DeclarationKind declarationKind, Token lastConsumed,
+      Token? externalToken, Token? constToken) {
+    listener?.beginFactoryMethod(
+        declarationKind, lastConsumed, externalToken, constToken);
   }
 
   @override
@@ -224,8 +225,8 @@
   }
 
   @override
-  void beginFunctionTypeAlias(Token token) {
-    listener?.beginFunctionTypeAlias(token);
+  void beginTypedef(Token token) {
+    listener?.beginTypedef(token);
   }
 
   @override
@@ -315,14 +316,15 @@
 
   @override
   void beginMethod(
+      DeclarationKind declarationKind,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
       Token? varFinalOrConst,
       Token? getOrSet,
       Token name) {
-    listener?.beginMethod(externalToken, staticToken, covariantToken,
-        varFinalOrConst, getOrSet, name);
+    listener?.beginMethod(declarationKind, externalToken, staticToken,
+        covariantToken, varFinalOrConst, getOrSet, name);
   }
 
   @override
@@ -569,9 +571,10 @@
   }
 
   @override
-  void endClassOrMixinBody(
+  void endClassOrMixinOrExtensionBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
-    listener?.endClassOrMixinBody(kind, memberCount, beginToken, endToken);
+    listener?.endClassOrMixinOrExtensionBody(
+        kind, memberCount, beginToken, endToken);
   }
 
   @override
@@ -772,9 +775,8 @@
   }
 
   @override
-  void endFunctionTypeAlias(
-      Token typedefKeyword, Token? equals, Token endToken) {
-    listener?.endFunctionTypeAlias(typedefKeyword, equals, endToken);
+  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
+    listener?.endTypedef(typedefKeyword, equals, endToken);
   }
 
   @override
@@ -808,8 +810,8 @@
   }
 
   @override
-  void endImplicitCreationExpression(Token token) {
-    listener?.endImplicitCreationExpression(token);
+  void endImplicitCreationExpression(Token token, Token openAngleBracket) {
+    listener?.endImplicitCreationExpression(token, openAngleBracket);
   }
 
   @override
@@ -1022,8 +1024,17 @@
   }
 
   @override
-  void beginFields(Token lastConsumed) {
-    listener?.beginFields(lastConsumed);
+  void beginFields(
+      DeclarationKind declarationKind,
+      Token? abstractToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      Token lastConsumed) {
+    listener?.beginFields(declarationKind, abstractToken, externalToken,
+        staticToken, covariantToken, lateToken, varFinalOrConst, lastConsumed);
   }
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index d597b3a..63a247f 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -100,25 +100,26 @@
   /// Handle the start of the body of a class, mixin or extension declaration
   /// beginning at [token]. The actual kind of declaration is indicated by
   /// [kind].
-  void beginClassOrMixinBody(DeclarationKind kind, Token token) {}
+  void beginClassOrMixinOrExtensionBody(DeclarationKind kind, Token token) {}
 
   /// Handle the end of the body of a class, mixin or extension declaration.
   /// The only substructures are the class, mixin or extension members.
   ///
   /// The actual kind of declaration is indicated by [kind].
-  void endClassOrMixinBody(
+  void endClassOrMixinOrExtensionBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
-    logEvent("ClassOrMixinBody");
+    logEvent("ClassOrMixinOrExtensionBody");
   }
 
-  /// Called before parsing a class or named mixin application.
+  /// Called before parsing a class declaration, mixin declaration, or named
+  /// mixin application.
   ///
   /// At this point only the `class` or `mixin` keyword have been seen,
   /// so we know a declaration is coming but not its name or type
   /// parameter declarations.
   ///
   /// Ended by [endTopLevelDeclaration].
-  void beginClassOrNamedMixinApplicationPrelude(Token token) {}
+  void beginClassOrMixinOrNamedMixinApplicationPrelude(Token token) {}
 
   /// Handle the beginning of a class declaration.
   /// [begin] may be the same as [name], or may point to modifiers
@@ -337,8 +338,8 @@
 
   /// Note that this is ended by [endClassFactoryMethod],
   /// [endMixinFactoryMethod] or [endExtensionFactoryMethod].
-  void beginFactoryMethod(
-      Token lastConsumed, Token? externalToken, Token? constToken) {}
+  void beginFactoryMethod(DeclarationKind declarationKind, Token lastConsumed,
+      Token? externalToken, Token? constToken) {}
 
   void endClassFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
@@ -587,7 +588,7 @@
     logEvent("FunctionName");
   }
 
-  void beginFunctionTypeAlias(Token token) {}
+  void beginTypedef(Token token) {}
 
   /// Handle the end of a typedef declaration.
   ///
@@ -603,8 +604,7 @@
   /// - Name (identifier)
   /// - Alias type variables
   /// - Type (FunctionTypeAnnotation)
-  void endFunctionTypeAlias(
-      Token typedefKeyword, Token? equals, Token endToken) {
+  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
     logEvent("FunctionTypeAlias");
   }
 
@@ -743,7 +743,7 @@
 
   void beginImplicitCreationExpression(Token token) {}
 
-  void endImplicitCreationExpression(Token token) {
+  void endImplicitCreationExpression(Token token, Token openAngleBracket) {
     logEvent("ImplicitCreationExpression");
   }
 
@@ -881,6 +881,7 @@
   /// [endExtensionConstructor], [endExtensionMethod], [endMixinConstructor] or
   /// [endMixinMethod].
   void beginMethod(
+      DeclarationKind declarationKind,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1119,13 +1120,13 @@
   ///
   /// Normally listeners should probably override
   /// [endClassDeclaration], [endNamedMixinApplication], [endEnum],
-  /// [endFunctionTypeAlias], [endLibraryName], [endImport], [endExport],
+  /// [endTypedef], [endLibraryName], [endImport], [endExport],
   /// [endPart], [endPartOf], [endTopLevelFields], or [endTopLevelMethod]
   /// instead.
   ///
   /// Started by one of [beginExtensionDeclarationPrelude],
-  /// [beginClassOrNamedMixinApplicationPrelude], [beginTopLevelMember] or
-  /// [beginUncategorizedTopLevelDeclaration].
+  /// [beginClassOrMixinOrNamedMixinApplicationPrelude], [beginTopLevelMember]
+  /// or [beginUncategorizedTopLevelDeclaration].
   void endTopLevelDeclaration(Token nextToken) {
     logEvent("TopLevelDeclaration");
   }
@@ -1150,7 +1151,15 @@
   /// Marks the beginning of a fields declaration.
   /// Note that this is ended with [endTopLevelFields], [endClassFields],
   /// [endMixinFields] or [endExtensionFields].
-  void beginFields(Token lastConsumed) {}
+  void beginFields(
+      DeclarationKind declarationKind,
+      Token? abstractToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      Token lastConsumed) {}
 
   /// Handle the end of a top level variable declaration.  Substructures:
   /// - Metadata
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_error.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_error.dart
index 8c46c13..16d647e 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_error.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_error.dart
@@ -22,5 +22,6 @@
   ParserError.fromTokens(Token begin, Token end, Message message)
       : this(begin.charOffset, end.charOffset + end.charCount, message);
 
-  String toString() => "@${beginOffset}: ${message.message}\n${message.tip}";
+  String toString() => "@${beginOffset}: ${message.problemMessage}\n"
+      "${message.correctionMessage}";
 }
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 c59af84..cb1ef21 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -1162,7 +1162,7 @@
   Token parseTypedef(Token typedefKeyword) {
     assert(optional('typedef', typedefKeyword));
     listener.beginUncategorizedTopLevelDeclaration(typedefKeyword);
-    listener.beginFunctionTypeAlias(typedefKeyword);
+    listener.beginTypedef(typedefKeyword);
     TypeInfo typeInfo = computeType(typedefKeyword, /* required = */ false);
     Token token = typeInfo.skipType(typedefKeyword);
     Token next = token.next!;
@@ -1264,7 +1264,7 @@
           parseFormalParametersRequiredOpt(token, MemberKind.FunctionTypeAlias);
     }
     token = ensureSemicolon(token);
-    listener.endFunctionTypeAlias(typedefKeyword, equals, token);
+    listener.endTypedef(typedefKeyword, equals, token);
     return token;
   }
 
@@ -1986,7 +1986,7 @@
       Token? abstractToken, Token classKeyword) {
     assert(optional('class', classKeyword));
     Token begin = abstractToken ?? classKeyword;
-    listener.beginClassOrNamedMixinApplicationPrelude(begin);
+    listener.beginClassOrMixinOrNamedMixinApplicationPrelude(begin);
     Token name = ensureIdentifier(
         classKeyword, IdentifierContext.classOrMixinOrExtensionDeclaration);
     Token token = computeTypeParamOrArg(
@@ -2216,7 +2216,7 @@
   /// ```
   Token parseMixin(Token mixinKeyword) {
     assert(optional('mixin', mixinKeyword));
-    listener.beginClassOrNamedMixinApplicationPrelude(mixinKeyword);
+    listener.beginClassOrMixinOrNamedMixinApplicationPrelude(mixinKeyword);
     Token name = ensureIdentifier(
         mixinKeyword, IdentifierContext.classOrMixinOrExtensionDeclaration);
     Token headerStart = computeTypeParamOrArg(
@@ -2866,7 +2866,8 @@
       DeclarationKind kind,
       String? enclosingDeclarationName,
       bool nameIsRecovered) {
-    listener.beginFields(beforeStart);
+    listener.beginFields(kind, abstractToken, externalToken, staticToken,
+        covariantToken, lateToken, varFinalOrConst, beforeStart);
 
     // Covariant affects only the setter and final fields do not have a setter,
     // unless it's a late field (dartbug.com/40805).
@@ -3533,7 +3534,7 @@
       Token token, DeclarationKind kind, String? enclosingDeclarationName) {
     Token begin = token = token.next!;
     assert(optional('{', token));
-    listener.beginClassOrMixinBody(kind, token);
+    listener.beginClassOrMixinOrExtensionBody(kind, token);
     int count = 0;
     while (notEofOrValue('}', token.next!)) {
       token = parseClassOrMixinOrExtensionMemberImpl(
@@ -3542,7 +3543,7 @@
     }
     token = token.next!;
     assert(token.isEof || optional('}', token));
-    listener.endClassOrMixinBody(kind, count, begin, token);
+    listener.endClassOrMixinOrExtensionBody(kind, count, begin, token);
     return token;
   }
 
@@ -3994,7 +3995,7 @@
 
     // TODO(danrubel): Consider parsing the name before calling beginMethod
     // rather than passing the name token into beginMethod.
-    listener.beginMethod(externalToken, staticToken, covariantToken,
+    listener.beginMethod(kind, externalToken, staticToken, covariantToken,
         varFinalOrConst, getOrSet, name);
 
     Token token = typeInfo.parseType(beforeType, this);
@@ -4209,7 +4210,8 @@
       varFinalOrConst = null;
     }
 
-    listener.beginFactoryMethod(beforeStart, externalToken, varFinalOrConst);
+    listener.beginFactoryMethod(
+        kind, beforeStart, externalToken, varFinalOrConst);
     token = ensureIdentifier(token, IdentifierContext.methodDeclaration);
     token = parseQualifiedRestOpt(
         token, IdentifierContext.methodDeclarationContinuation);
@@ -5402,7 +5404,8 @@
               Token afterPeriod = afterTypeArguments.next!;
               if (_isNewOrIdentifier(afterPeriod) &&
                   optional('(', afterPeriod.next!)) {
-                return parseImplicitCreationExpression(token, typeArg);
+                return parseImplicitCreationExpression(
+                    token, identifier.next!, typeArg);
               }
             }
           }
@@ -6055,13 +6058,13 @@
   }
 
   Token parseImplicitCreationExpression(
-      Token token, TypeParamOrArgInfo typeArg) {
-    Token begin = token;
-    listener.beginImplicitCreationExpression(token);
+      Token token, Token openAngleBracket, TypeParamOrArgInfo typeArg) {
+    Token begin = token.next!; // This is the class name.
+    listener.beginImplicitCreationExpression(begin);
     token = parseConstructorReference(
         token, ConstructorReferenceContext.Implicit, typeArg);
     token = parseConstructorInvocationArguments(token);
-    listener.endImplicitCreationExpression(begin);
+    listener.endImplicitCreationExpression(begin, openAngleBracket);
     return token;
   }
 
@@ -6444,7 +6447,6 @@
     assert(optional('(', begin));
     listener.beginArguments(begin);
     int argumentCount = 0;
-    bool hasSeenNamedArgument = false;
     bool old = mayParseFunctionExpressions;
     mayParseFunctionExpressions = true;
     while (true) {
@@ -6459,10 +6461,6 @@
             ensureIdentifier(token, IdentifierContext.namedArgumentReference)
                 .next!;
         colon = token;
-        hasSeenNamedArgument = true;
-      } else if (hasSeenNamedArgument) {
-        // Positional argument after named argument.
-        reportRecoverableError(next, codes.messagePositionalAfterNamedArgument);
       }
       token = parseExpression(token);
       next = token.next!;
@@ -8255,6 +8253,16 @@
     if (token.isIdentifier && optional('.', token.next!)) {
       prefix = token;
       period = token.next!;
+      Token identifier = period.next!;
+      if (identifier.kind == KEYWORD_TOKEN && optional('new', identifier)) {
+        // Treat `new` after `.` is as an identifier so that it can represent an
+        // unnamed constructor. This support is separate from the
+        // constructor-tearoffs feature.
+        rewriter.replaceTokenFollowing(
+            period,
+            new StringToken(TokenType.IDENTIFIER, identifier.lexeme,
+                identifier.charOffset));
+      }
       token = period.next!;
     }
     if (token.isEof) {
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
index 208db61..245bef3 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
@@ -65,11 +65,11 @@
   Token,
   Type,
   TypeArguments,
+  TypeBuilder,
   TypeBuilderList,
   TypeList,
   TypeVariable,
   TypeVariables,
-  UnresolvedType,
   VarFinalOrConstToken,
   WithClause,
 }
@@ -96,7 +96,8 @@
         // If offset is available report and internal problem to show the
         // parsed code in the output.
         throw internalProblem(
-            new Message(const Code<String>('Internal error'), message: message),
+            new Message(const Code<String>('Internal error'),
+                problemMessage: message),
             token.charOffset,
             uri);
       } else {
@@ -198,7 +199,8 @@
         // If offset is available report and internal problem to show the
         // parsed code in the output.
         throw internalProblem(
-            new Message(const Code<String>('Internal error'), message: message),
+            new Message(const Code<String>('Internal error'),
+                problemMessage: message),
             token.charOffset,
             uri);
       } else {
@@ -375,7 +377,7 @@
   @override
   void handleNoType(Token lastConsumed) {
     debugEvent("NoType");
-    push(NullValue.UnresolvedType);
+    push(NullValue.TypeBuilder);
   }
 
   @override
@@ -480,7 +482,7 @@
   @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
-    debugEvent("Error: ${message.message}");
+    debugEvent("Error: ${message.problemMessage}");
     if (isIgnoredError(message.code, startToken)) return;
     addProblem(
         message, startToken.charOffset, lengthOfSpan(startToken, endToken));
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/error_token.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/error_token.dart
index 9b39e96..35b4652 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/error_token.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/error_token.dart
@@ -73,7 +73,7 @@
   int get length => 1;
 
   String get lexeme {
-    String errorMsg = assertionMessage.message;
+    String errorMsg = assertionMessage.problemMessage;
 
     // Attempt to include the location which is calling the parser
     // in an effort to debug https://github.com/dart-lang/sdk/issues/37528
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/errors.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/errors.dart
index a5c83a9..44cdf31 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/errors.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/errors.dart
@@ -16,7 +16,7 @@
   int charOffset = token.charOffset;
   // TODO(paulberry,ahe): why is endOffset sometimes null?
   int endOffset = token.endOffset ?? charOffset;
-  void _makeError(ScannerErrorCode errorCode, List<Object?>? arguments) {
+  void _makeError(ScannerErrorCode errorCode, List<Object>? arguments) {
     if (_isAtEnd(token, charOffset)) {
       // Analyzer never generates an error message past the end of the input,
       // since such an error would not be visible in an editor.
@@ -56,7 +56,9 @@
       return _makeError(ScannerErrorCode.MISSING_HEX_DIGIT, null);
 
     case "ILLEGAL_CHARACTER":
-      return _makeError(ScannerErrorCode.ILLEGAL_CHARACTER, [token.character]);
+      // We can safely assume `token.character` is non-`null` because this error
+      // is only reported when there is a character associated with the token.
+      return _makeError(ScannerErrorCode.ILLEGAL_CHARACTER, [token.character!]);
 
     case "UNSUPPORTED_OPERATOR":
       return _makeError(ScannerErrorCode.UNSUPPORTED_OPERATOR,
@@ -111,7 +113,7 @@
  * The [arguments] are any arguments needed to complete the error message.
  */
 typedef ReportError(
-    ScannerErrorCode errorCode, int offset, List<Object?>? arguments);
+    ScannerErrorCode errorCode, int offset, List<Object>? arguments);
 
 /**
  * The error codes used for errors detected by the scanner.
@@ -155,7 +157,7 @@
           'UNEXPECTED_DOLLAR_IN_STRING',
           "A '\$' has special meaning inside a string, and must be followed by "
               "an identifier or an expression in curly braces ({}).",
-          correction: "Try adding a backslash (\\) to escape the '\$'.");
+          correctionMessage: "Try adding a backslash (\\) to escape the '\$'.");
 
   /**
    * Parameters:
@@ -167,7 +169,7 @@
   static const ScannerErrorCode UNTERMINATED_MULTI_LINE_COMMENT =
       const ScannerErrorCode(
           'UNTERMINATED_MULTI_LINE_COMMENT', "Unterminated multi-line comment.",
-          correction: "Try terminating the comment with '*/', or "
+          correctionMessage: "Try terminating the comment with '*/', or "
               "removing any unbalanced occurrences of '/*'"
               " (because comments nest in Dart).");
 
@@ -177,14 +179,15 @@
 
   /**
    * Initialize a newly created error code to have the given [name]. The message
-   * associated with the error will be created from the given [message]
+   * associated with the error will be created from the given [problemMessage]
    * template. The correction associated with the error will be created from the
-   * given [correction] template.
+   * given [correctionMessage] template.
    */
-  const ScannerErrorCode(String name, String message, {String? correction})
+  const ScannerErrorCode(String name, String problemMessage,
+      {String? correctionMessage})
       : super(
-          correction: correction,
-          message: message,
+          correctionMessage: correctionMessage,
+          problemMessage: problemMessage,
           name: name,
           uniqueName: 'ScannerErrorCode.$name',
         );
diff --git a/pkg/front_end/lib/src/base/libraries_specification.dart b/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
similarity index 98%
rename from pkg/front_end/lib/src/base/libraries_specification.dart
rename to pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
index ad345f4..bbc64f4 100644
--- a/pkg/front_end/lib/src/base/libraries_specification.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
@@ -87,11 +87,9 @@
 /// https://github.com/dart-lang/sdk/issues/28836), but for now we need to pay
 /// close attention to change them consistently.
 
-// TODO(sigmund): move this file to a shared package.
 import 'dart:convert' show jsonDecode, jsonEncode;
 
-import 'package:_fe_analyzer_shared/src/util/relativize.dart'
-    show relativizeUri, isWindows;
+import 'relativize.dart' show relativizeUri, isWindows;
 
 /// Contents from a single library specification file.
 ///
diff --git a/pkg/_fe_analyzer_shared/lib/src/util/options.dart b/pkg/_fe_analyzer_shared/lib/src/util/options.dart
index 7837865..17c3c01 100644
--- a/pkg/_fe_analyzer_shared/lib/src/util/options.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/util/options.dart
@@ -13,7 +13,7 @@
   CommandLineProblem.deprecated(String message)
       : this(templateUnspecified.withArguments(message));
 
-  String toString() => message.message;
+  String toString() => message.problemMessage;
 }
 
 class ParsedOptions {
diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index 8d97c49..41a87a0 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -1,5 +1,5 @@
 name: _fe_analyzer_shared
-version: 27.0.0
+version: 30.0.0
 description: Logic that is shared between the front_end and analyzer packages.
 homepage: https://github.com/dart-lang/sdk/tree/master/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 07b7e12..249b33d 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
@@ -1302,9 +1302,9 @@
 
     test('initialize() does not promote when final', () {
       var h = Harness();
-      var x = Var('x', 'int?');
+      var x = Var('x', 'int?', isFinal: true);
       h.run([
-        declareInitialized(x, expr('int'), isFinal: true),
+        declareInitialized(x, expr('int')),
         checkNotPromoted(x),
       ]);
     });
@@ -1326,9 +1326,9 @@
         var h = Harness()
           ..addSubtype('T&int', 'T', true)
           ..addFactor('T', 'T&int', 'T');
-        var x = Var('x', 'T', isImplicitlyTyped: true);
+        var x = Var('x', 'T', isFinal: true, isImplicitlyTyped: true);
         h.run([
-          declareInitialized(x, expr('T&int'), isFinal: true),
+          declareInitialized(x, expr('T&int')),
           checkPromoted(x, 'T&int'),
         ]);
       });
@@ -1348,9 +1348,9 @@
 
       test('when final', () {
         var h = Harness();
-        var x = Var('x', 'T');
+        var x = Var('x', 'T', isFinal: true);
         h.run([
-          declareInitialized(x, expr('T&int'), isFinal: true),
+          declareInitialized(x, expr('T&int')),
           checkNotPromoted(x),
         ]);
       });
@@ -1370,9 +1370,9 @@
 
       test('when final', () {
         var h = Harness();
-        var x = Var('x', 'dynamic', isImplicitlyTyped: true);
+        var x = Var('x', 'dynamic', isFinal: true, isImplicitlyTyped: true);
         h.run([
-          declareInitialized(x, expr('Null'), isFinal: true),
+          declareInitialized(x, expr('Null')),
           checkNotPromoted(x),
         ]);
       });
@@ -1398,10 +1398,10 @@
 
     test('initialize() does not store expressionInfo when late', () {
       var h = Harness();
-      var x = Var('x', 'Object');
+      var x = Var('x', 'Object', isLate: true);
       var y = Var('y', 'int?');
       h.run([
-        declareInitialized(x, y.expr.eq(nullLiteral), isLate: true),
+        declareInitialized(x, y.expr.eq(nullLiteral)),
         getSsaNodes((nodes) {
           expect(nodes[x]!.expressionInfo, isNull);
         }),
diff --git a/pkg/_fe_analyzer_shared/test/mini_ast.dart b/pkg/_fe_analyzer_shared/test/mini_ast.dart
index 57ce172..85ae066 100644
--- a/pkg/_fe_analyzer_shared/test/mini_ast.dart
+++ b/pkg/_fe_analyzer_shared/test/mini_ast.dart
@@ -55,16 +55,11 @@
 
 Statement continue_() => new _Continue();
 
-Statement declare(Var variable,
-        {required bool initialized,
-        bool isFinal = false,
-        bool isLate = false}) =>
-    new _Declare(variable, initialized ? expr(variable.type.type) : null,
-        isFinal, isLate);
+Statement declare(Var variable, {required bool initialized}) =>
+    new _Declare(variable, initialized ? expr(variable.type.type) : null);
 
-Statement declareInitialized(Var variable, Expression initializer,
-        {bool isFinal = false, bool isLate = false}) =>
-    new _Declare(variable, initializer, isFinal, isLate);
+Statement declareInitialized(Var variable, Expression initializer) =>
+    new _Declare(variable, initializer);
 
 Statement do_(List<Statement> body, Expression condition) =>
     _Do(block(body), condition);
@@ -664,9 +659,14 @@
 class Var {
   final String name;
   final Type type;
+  final bool isFinal;
   final bool isImplicitlyTyped;
+  final bool isLate;
 
-  Var(this.name, String typeStr, {this.isImplicitlyTyped = false})
+  Var(this.name, String typeStr,
+      {this.isFinal = false,
+      this.isImplicitlyTyped = false,
+      this.isLate = false})
       : type = Type(typeStr);
 
   /// Creates an L-value representing a reference to this variable.
@@ -882,6 +882,7 @@
 class _CheckUnassigned extends Statement {
   final Var variable;
   final bool expectedUnassignedState;
+  final StackTrace _creationTrace = StackTrace.current;
 
   _CheckUnassigned(this.variable, this.expectedUnassignedState) : super._();
 
@@ -896,7 +897,8 @@
 
   @override
   void _visit(Harness h) {
-    expect(h._flow.isUnassigned(variable), expectedUnassignedState);
+    expect(h._flow.isUnassigned(variable), expectedUnassignedState,
+        reason: '$_creationTrace');
     h._irBuilder.atom('null');
   }
 }
@@ -948,16 +950,13 @@
 class _Declare extends Statement {
   final Var variable;
   final Expression? initializer;
-  final bool isFinal;
-  final bool isLate;
 
-  _Declare(this.variable, this.initializer, this.isFinal, this.isLate)
-      : super._();
+  _Declare(this.variable, this.initializer) : super._();
 
   @override
   String toString() {
-    var latePart = isLate ? 'late ' : '';
-    var finalPart = isFinal ? 'final ' : '';
+    var latePart = variable.isLate ? 'late ' : '';
+    var finalPart = variable.isFinal ? 'final ' : '';
     var initializerPart = initializer != null ? ' = $initializer' : '';
     return '$latePart$finalPart$variable${initializerPart};';
   }
@@ -972,9 +971,11 @@
     h._irBuilder.atom(variable.name);
     h._typeAnalyzer.analyzeVariableDeclaration(
         this, variable.type, variable, initializer,
-        isFinal: isFinal, isLate: isLate);
+        isFinal: variable.isFinal, isLate: variable.isLate);
     h._irBuilder.apply(
-        ['declare', if (isLate) 'late', if (isFinal) 'final'].join('_'), 2);
+        ['declare', if (variable.isLate) 'late', if (variable.isFinal) 'final']
+            .join('_'),
+        2);
   }
 }
 
diff --git a/pkg/front_end/test/src/base/libraries_specification_test.dart b/pkg/_fe_analyzer_shared/test/util/libraries_specification_test.dart
similarity index 90%
rename from pkg/front_end/test/src/base/libraries_specification_test.dart
rename to pkg/_fe_analyzer_shared/test/util/libraries_specification_test.dart
index 033a877..10f9717 100644
--- a/pkg/front_end/test/src/base/libraries_specification_test.dart
+++ b/pkg/_fe_analyzer_shared/test/util/libraries_specification_test.dart
@@ -2,9 +2,7 @@
 // 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.
 
-// @dart = 2.9
-
-import 'package:front_end/src/base/libraries_specification.dart';
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart';
 import 'package:test/test.dart';
 
 void main() {
@@ -91,7 +89,7 @@
       ''';
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///f.json'), jsonString);
-      expect(spec.specificationFor("none").libraryInfoFor("c").patches.first,
+      expect(spec.specificationFor("none").libraryInfoFor("c")!.patches.first,
           Uri.parse('org-dartlang-test:///a.dart'));
 
       jsonString = '''
@@ -108,7 +106,7 @@
       ''';
       spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///f.json'), jsonString);
-      expect(spec.specificationFor("none").libraryInfoFor("c").patches.first,
+      expect(spec.specificationFor("none").libraryInfoFor("c")!.patches.first,
           Uri.parse('org-dartlang-test:///a.dart'));
     });
 
@@ -120,7 +118,7 @@
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
       expect(spec, isNotNull);
       expect(
-          spec.specificationFor('none').libraryInfoFor('c').patches, isEmpty);
+          spec.specificationFor('none').libraryInfoFor('c')!.patches, isEmpty);
     });
 
     test('library paths are resolved from spec uri', () async {
@@ -130,7 +128,7 @@
 
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
-      expect(spec.specificationFor('none').libraryInfoFor('c').uri,
+      expect(spec.specificationFor('none').libraryInfoFor('c')!.uri,
           Uri.parse('org-dartlang-test:///one/two/c/main.dart'));
     });
 
@@ -153,9 +151,9 @@
 
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
-      expect(spec.specificationFor('none').libraryInfoFor('c').patches[0],
+      expect(spec.specificationFor('none').libraryInfoFor('c')!.patches[0],
           Uri.parse('org-dartlang-test:///one/a/p1.dart'));
-      expect(spec.specificationFor('none').libraryInfoFor('c').patches[1],
+      expect(spec.specificationFor('none').libraryInfoFor('c')!.patches[1],
           Uri.parse('org-dartlang-test:///one/a/p2.dart'));
     });
 
@@ -192,11 +190,11 @@
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
 
-      expect(spec.specificationFor('vm').libraryInfoFor('foo').uri,
+      expect(spec.specificationFor('vm').libraryInfoFor('foo')!.uri,
           Uri.parse('org-dartlang-test:///one/two/a/main.dart'));
-      expect(spec.specificationFor('vm').libraryInfoFor('bar').uri,
+      expect(spec.specificationFor('vm').libraryInfoFor('bar')!.uri,
           Uri.parse('org-dartlang-test:///one/two/b/main.dart'));
-      expect(spec.specificationFor('none').libraryInfoFor('c').uri,
+      expect(spec.specificationFor('none').libraryInfoFor('c')!.uri,
           Uri.parse('org-dartlang-test:///one/two/c/main.dart'));
     });
 
@@ -242,12 +240,12 @@
       ''';
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
+      expect(spec.specificationFor('vm').libraryInfoFor('foo')!.isSupported,
+          false);
       expect(
-          spec.specificationFor('vm').libraryInfoFor('foo').isSupported, false);
+          spec.specificationFor('vm').libraryInfoFor('bar')!.isSupported, true);
       expect(
-          spec.specificationFor('vm').libraryInfoFor('bar').isSupported, true);
-      expect(
-          spec.specificationFor('vm').libraryInfoFor('baz').isSupported, true);
+          spec.specificationFor('vm').libraryInfoFor('baz')!.isSupported, true);
     });
   });
 
diff --git a/pkg/_js_interop_checks/lib/js_interop_checks.dart b/pkg/_js_interop_checks/lib/js_interop_checks.dart
index 975fca7..24937db 100644
--- a/pkg/_js_interop_checks/lib/js_interop_checks.dart
+++ b/pkg/_js_interop_checks/lib/js_interop_checks.dart
@@ -19,6 +19,8 @@
         messageJsInteropNonExternalConstructor,
         messageJsInteropNonExternalMember,
         templateJsInteropDartClassExtendsJSClass,
+        templateJsInteropStaticInteropWithInstanceMembers,
+        templateJsInteropStaticInteropWithNonStaticSupertype,
         templateJsInteropJSClassExtendsDartClass,
         templateJsInteropNativeClassInAnnotation;
 
@@ -30,6 +32,7 @@
   final Map<String, Class> _nativeClasses;
   bool _classHasJSAnnotation = false;
   bool _classHasAnonymousAnnotation = false;
+  bool _classHasStaticInteropAnnotation = false;
   bool _libraryHasJSAnnotation = false;
   Map<Reference, Extension>? _libraryExtensionsIndex;
 
@@ -99,6 +102,7 @@
   void visitClass(Class cls) {
     _classHasJSAnnotation = hasJSInteropAnnotation(cls);
     _classHasAnonymousAnnotation = hasAnonymousAnnotation(cls);
+    _classHasStaticInteropAnnotation = hasStaticInteropAnnotation(cls);
     var superclass = cls.superclass;
     if (superclass != null && superclass != _coreTypes.objectClass) {
       var superHasJSAnnotation = hasJSInteropAnnotation(superclass);
@@ -116,11 +120,35 @@
             cls.fileOffset,
             cls.name.length,
             cls.fileUri);
+      } else if (_classHasStaticInteropAnnotation) {
+        if (!hasStaticInteropAnnotation(superclass)) {
+          _diagnosticsReporter.report(
+              templateJsInteropStaticInteropWithNonStaticSupertype
+                  .withArguments(cls.name, superclass.name),
+              cls.fileOffset,
+              cls.name.length,
+              cls.fileUri);
+        }
+      }
+    }
+    // Validate that superinterfaces are all annotated as static as well. Note
+    // that mixins are already disallowed and therefore are not checked here.
+    if (_classHasStaticInteropAnnotation) {
+      for (var supertype in cls.implementedTypes) {
+        if (!hasStaticInteropAnnotation(supertype.classNode)) {
+          _diagnosticsReporter.report(
+              templateJsInteropStaticInteropWithNonStaticSupertype
+                  .withArguments(cls.name, supertype.classNode.name),
+              cls.fileOffset,
+              cls.name.length,
+              cls.fileUri);
+        }
       }
     }
     // Since this is a breaking check, it is language-versioned.
     if (cls.enclosingLibrary.languageVersion >= Version(2, 13) &&
         _classHasJSAnnotation &&
+        !_classHasStaticInteropAnnotation &&
         !_classHasAnonymousAnnotation &&
         _libraryIsGlobalNamespace) {
       var jsClass = getJSName(cls);
@@ -221,6 +249,30 @@
         _checkNoNamedParameters(procedure.function);
       }
     }
+
+    if (_classHasStaticInteropAnnotation &&
+        procedure.isInstanceMember &&
+        !procedure.isFactory) {
+      _diagnosticsReporter.report(
+          templateJsInteropStaticInteropWithInstanceMembers
+              .withArguments(procedure.enclosingClass!.name),
+          procedure.fileOffset,
+          procedure.name.text.length,
+          procedure.fileUri);
+    }
+  }
+
+  @override
+  void visitField(Field field) {
+    if (_classHasStaticInteropAnnotation && field.isInstanceMember) {
+      _diagnosticsReporter.report(
+          templateJsInteropStaticInteropWithInstanceMembers
+              .withArguments(field.enclosingClass!.name),
+          field.fileOffset,
+          field.name.text.length,
+          field.fileUri);
+    }
+    super.visitField(field);
   }
 
   @override
diff --git a/pkg/_js_interop_checks/lib/src/js_interop.dart b/pkg/_js_interop_checks/lib/src/js_interop.dart
index 60a8dfd..26c0c7d 100644
--- a/pkg/_js_interop_checks/lib/src/js_interop.dart
+++ b/pkg/_js_interop_checks/lib/src/js_interop.dart
@@ -9,11 +9,16 @@
 bool hasJSInteropAnnotation(Annotatable a) =>
     a.annotations.any(_isPublicJSAnnotation);
 
-/// Returns true iff the node has an `@anonymous(...)` annotation from
-/// `package:js` or from the internal `dart:_js_annotations`.
+/// Returns true iff the node has an `@anonymous` annotation from `package:js`
+/// or from the internal `dart:_js_annotations`.
 bool hasAnonymousAnnotation(Annotatable a) =>
     a.annotations.any(_isAnonymousAnnotation);
 
+/// Returns true iff the node has an `@staticInterop` annotation from
+/// `package:js` or from the internal `dart:_js_annotations`.
+bool hasStaticInteropAnnotation(Annotatable a) =>
+    a.annotations.any(_isStaticInteropAnnotation);
+
 /// If [a] has a `@JS('...')` annotation, returns the value inside the
 /// parentheses.
 ///
@@ -52,26 +57,26 @@
 final _internalJs = Uri.parse('dart:_js_annotations');
 final _jsHelper = Uri.parse('dart:_js_helper');
 
-/// Returns true if [value] is the `JS` annotation from `package:js` or from
-/// `dart:_js_annotations`.
-bool _isPublicJSAnnotation(Expression value) {
+/// Returns true if [value] is the interop annotation whose class is
+/// [annotationClassName] from `package:js` or from `dart:_js_annotations`.
+bool _isInteropAnnotation(Expression value, String annotationClassName) {
   var c = _annotationClass(value);
   return c != null &&
-      c.name == 'JS' &&
+      c.name == annotationClassName &&
       (c.enclosingLibrary.importUri == _packageJs ||
           c.enclosingLibrary.importUri == _internalJs);
 }
 
-/// Returns true if [value] is the `anyonymous` annotation from `package:js` or
-/// from `dart:_js_annotations`.
-bool _isAnonymousAnnotation(Expression value) {
-  var c = _annotationClass(value);
-  return c != null &&
-      c.name == '_Anonymous' &&
-      (c.enclosingLibrary.importUri == _packageJs ||
-          c.enclosingLibrary.importUri == _internalJs);
-}
+bool _isPublicJSAnnotation(Expression value) =>
+    _isInteropAnnotation(value, 'JS');
 
+bool _isAnonymousAnnotation(Expression value) =>
+    _isInteropAnnotation(value, '_Anonymous');
+
+bool _isStaticInteropAnnotation(Expression value) =>
+    _isInteropAnnotation(value, '_StaticInterop');
+
+/// Returns true if [value] is the `Native` annotation from `dart:_js_helper`.
 bool _isNativeAnnotation(Expression value) {
   var c = _annotationClass(value);
   return c != null &&
@@ -85,6 +90,7 @@
 ///
 /// - `@JS()` would return the "JS" class in "package:js".
 /// - `@anonymous` would return the "_Anonymous" class in "package:js".
+/// - `@staticInterop` would return the "_StaticInterop" class in "package:js".
 /// - `@Native` would return the "Native" class in "dart:_js_helper".
 ///
 /// This function works regardless of whether the CFE is evaluating constants,
diff --git a/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart b/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart
index add033d..2e4f847 100644
--- a/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart
+++ b/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart
@@ -138,6 +138,8 @@
         Arguments([
           VariableGet(function.positionalParameters.first),
           StringLiteral(_getExtensionMemberName(node))
+        ], types: [
+          DynamicType()
         ]))
       ..fileOffset = node.fileOffset;
     return ReturnStatement(
@@ -157,6 +159,8 @@
           VariableGet(function.positionalParameters.first),
           StringLiteral(_getExtensionMemberName(node)),
           VariableGet(function.positionalParameters.last)
+        ], types: [
+          DynamicType()
         ]))
       ..fileOffset = node.fileOffset;
     return ReturnStatement(AsExpression(
@@ -178,6 +182,8 @@
               .sublist(1)
               .map((argument) => VariableGet(argument))
               .toList())
+        ], types: [
+          DynamicType()
         ]))
       ..fileOffset = node.fileOffset;
     return ReturnStatement(AsExpression(
@@ -224,7 +230,6 @@
   /// Removing the checks allows further inlining by the compilers.
   StaticInvocation _lowerSetProperty(StaticInvocation node) {
     Arguments arguments = node.arguments;
-    assert(arguments.types.isEmpty);
     assert(arguments.positional.length == 3);
     assert(arguments.named.isEmpty);
 
@@ -244,7 +249,6 @@
   /// Removing the checks allows further inlining by the compilers.
   StaticInvocation _lowerCallMethod(StaticInvocation node) {
     Arguments arguments = node.arguments;
-    assert(arguments.types.isEmpty);
     assert(arguments.positional.length == 3);
     assert(arguments.named.isEmpty);
 
@@ -260,7 +264,6 @@
   /// Removing the checks allows further inlining by the compilers.
   StaticInvocation _lowerCallConstructor(StaticInvocation node) {
     Arguments arguments = node.arguments;
-    assert(arguments.types.isEmpty);
     assert(arguments.positional.length == 2);
     assert(arguments.named.isEmpty);
 
@@ -283,8 +286,13 @@
     // Lower arguments in a List.empty factory call.
     if (argumentsList is StaticInvocation &&
         argumentsList.target == _listEmptyFactory) {
-      return _createCallUncheckedNode(callUncheckedTargets, [],
-          originalArguments, node.fileOffset, node.arguments.fileOffset);
+      return _createCallUncheckedNode(
+          callUncheckedTargets,
+          node.arguments.types,
+          [],
+          originalArguments,
+          node.fileOffset,
+          node.arguments.fileOffset);
     }
 
     // Lower arguments in other kinds of Lists.
@@ -323,6 +331,7 @@
 
     return _createCallUncheckedNode(
         callUncheckedTargets,
+        node.arguments.types,
         callUncheckedArguments,
         originalArguments,
         node.fileOffset,
@@ -333,6 +342,7 @@
   /// with the given 0-4 arguments.
   StaticInvocation _createCallUncheckedNode(
       List<Procedure> callUncheckedTargets,
+      List<DartType> callUncheckedTypes,
       List<Expression> callUncheckedArguments,
       List<Expression> originalArguments,
       int nodeFileOffset,
@@ -342,7 +352,7 @@
         callUncheckedTargets[callUncheckedArguments.length],
         Arguments(
           [...originalArguments, ...callUncheckedArguments],
-          types: [],
+          types: callUncheckedTypes,
         )..fileOffset = argumentsFileOffset)
       ..fileOffset = nodeFileOffset;
   }
diff --git a/pkg/_js_interop_checks/pubspec.yaml b/pkg/_js_interop_checks/pubspec.yaml
index bae1992..53c668a 100644
--- a/pkg/_js_interop_checks/pubspec.yaml
+++ b/pkg/_js_interop_checks/pubspec.yaml
@@ -6,7 +6,10 @@
   sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared:
-    path: ../_fe_analyzer_shared
+  _fe_analyzer_shared: any
   kernel:
     path: ../kernel
+
+dependency_overrides:
+  _fe_analyzer_shared:
+    path: ../_fe_analyzer_shared
diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_server/benchmark/benchmarks.dart
index a92b60e..c6b391f 100644
--- a/pkg/analysis_server/benchmark/benchmarks.dart
+++ b/pkg/analysis_server/benchmark/benchmarks.dart
@@ -154,6 +154,13 @@
   String toString() => '${toJson()}';
 }
 
+/// This interface is implemented by benchmarks that need to know the location
+/// of the Flutter repository.
+abstract class FlutterBenchmark {
+  /// Must be called exactly one time.
+  set flutterRepositoryPath(String path);
+}
+
 class ListCommand extends Command {
   final List<Benchmark> benchmarks;
 
@@ -190,6 +197,8 @@
   final List<Benchmark> benchmarks;
 
   RunCommand(this.benchmarks) {
+    argParser.addOption('flutter-repository',
+        help: 'The absolute normalized path of the Flutter repository.');
     argParser.addFlag('quick',
         negatable: false,
         help: 'Run a quick version of the benchmark. This is not useful for '
@@ -220,6 +229,7 @@
 
     var benchmarkId = argResults!.rest.first;
     var repeatCount = int.parse(argResults!['repeat'] as String);
+    var flutterRepository = argResults!['flutter-repository'] as String?;
     var quick = argResults!['quick'];
     var verbose = argResults!['verbose'];
 
@@ -229,6 +239,17 @@
       exit(1);
     });
 
+    if (benchmark is FlutterBenchmark) {
+      if (flutterRepository != null) {
+        (benchmark as FlutterBenchmark).flutterRepositoryPath =
+            flutterRepository;
+      } else {
+        print('The option --flutter-repository is required to '
+            "run '$benchmarkId'.");
+        exit(1);
+      }
+    }
+
     var actualIterations = repeatCount;
     if (benchmark.maxIterations > 0) {
       actualIterations = math.min(benchmark.maxIterations, repeatCount);
diff --git a/pkg/analysis_server/benchmark/perf/flutter_analyze_benchmark.dart b/pkg/analysis_server/benchmark/perf/flutter_analyze_benchmark.dart
index 048666b..f2d157b3 100644
--- a/pkg/analysis_server/benchmark/perf/flutter_analyze_benchmark.dart
+++ b/pkg/analysis_server/benchmark/perf/flutter_analyze_benchmark.dart
@@ -40,8 +40,8 @@
 
 /// benchmarks:
 ///   - analysis-flutter-analyze
-class FlutterAnalyzeBenchmark extends Benchmark {
-  late Directory flutterDir;
+class FlutterAnalyzeBenchmark extends Benchmark implements FlutterBenchmark {
+  late final String flutterRepositoryPath;
 
   FlutterAnalyzeBenchmark()
       : super(
@@ -56,43 +56,6 @@
   int get maxIterations => 3;
 
   @override
-  bool get needsSetup => true;
-
-  @override
-  Future oneTimeCleanup() {
-    try {
-      flutterDir.deleteSync(recursive: true);
-    } on FileSystemException catch (e) {
-      print(e);
-    }
-
-    return Future.value();
-  }
-
-  @override
-  Future oneTimeSetup() async {
-    flutterDir = Directory.systemTemp.createTempSync('flutter');
-
-    // git clone https://github.com/flutter/flutter $flutterDir
-    await _runProcess('git', [
-      'clone',
-      'https://github.com/flutter/flutter',
-      path.canonicalize(flutterDir.path)
-    ]);
-
-    var flutterTool = path.join(flutterDir.path, 'bin', 'flutter');
-
-    // flutter --version
-    await _runProcess(flutterTool, ['--version'], cwd: flutterDir.path);
-
-    // flutter precache
-    await _runProcess(flutterTool, ['precache'], cwd: flutterDir.path);
-
-    // flutter update-packages
-    await _runProcess(flutterTool, ['update-packages'], cwd: flutterDir.path);
-  }
-
-  @override
   Future<BenchMarkResult> run({
     bool quick = false,
     bool verbose = false,
@@ -114,7 +77,7 @@
         '--dart-sdk',
         dartSdkPath,
       ],
-      cwd: flutterDir.path,
+      cwd: flutterRepositoryPath,
       failOnError: false,
     );
 
diff --git a/pkg/analysis_server/benchmark/perf/flutter_completion_benchmark.dart b/pkg/analysis_server/benchmark/perf/flutter_completion_benchmark.dart
index 1784e96..e2bac08 100644
--- a/pkg/analysis_server/benchmark/perf/flutter_completion_benchmark.dart
+++ b/pkg/analysis_server/benchmark/perf/flutter_completion_benchmark.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:convert';
 import 'dart:io';
 
 import 'package:path/path.dart' as path;
@@ -11,41 +10,7 @@
 import '../benchmarks.dart';
 import 'memory_tests.dart';
 
-Future<int> _runProcess(
-  String command,
-  List<String> args, {
-  String? cwd,
-  bool failOnError = true,
-}) async {
-  print('\n$command ${args.join(' ')}');
-
-  var process = await Process.start(command, args, workingDirectory: cwd);
-
-  process.stdout
-      .transform(utf8.decoder)
-      .transform(LineSplitter())
-      .listen((line) {
-    print('  $line');
-  });
-  process.stderr
-      .transform(utf8.decoder)
-      .transform(LineSplitter())
-      .listen((line) => print('  $line'));
-
-  var exitCode = await process.exitCode;
-  if (exitCode != 0 && failOnError) {
-    throw '$command exited with $exitCode';
-  }
-
-  return exitCode;
-}
-
-/// benchmarks:
-///   - analysis-server-warm-analysis
-///   - analysis-server-warm-memory
-///   - analysis-server-edit
-///   - analysis-server-completion
-class FlutterCompletionBenchmark extends Benchmark {
+class FlutterCompletionBenchmark extends Benchmark implements FlutterBenchmark {
   static final das = FlutterCompletionBenchmark(
     'das',
     () => AnalysisServerBenchmarkTest(),
@@ -58,41 +23,17 @@
 
   final AbstractBenchmarkTest Function() testConstructor;
 
-  late String flutterPath;
+  late final String flutterRepositoryPath;
 
   FlutterCompletionBenchmark(String protocolName, this.testConstructor)
       : super(
-          '$protocolName-flutter-completion',
+          '$protocolName-flutter',
           'Completion benchmarks with Flutter.',
           kind: 'group',
         );
 
   @override
-  bool get needsSetup => true;
-
-  @override
-  Future oneTimeSetup() async {
-    flutterPath = Directory.systemTemp.createTempSync('flutter').path;
-
-    // git clone https://github.com/flutter/flutter $flutterDir
-    await _runProcess('git', [
-      'clone',
-      'https://github.com/flutter/flutter',
-      path.canonicalize(flutterPath)
-    ]);
-
-    var flutterTool = path.join(flutterPath, 'bin', 'flutter');
-
-    // flutter --version
-    await _runProcess(flutterTool, ['--version'], cwd: flutterPath);
-
-    // flutter update-packages
-    await _runProcess(
-      flutterTool,
-      ['pub', 'get'],
-      cwd: path.join(flutterPath, 'packages', 'flutter'),
-    );
-  }
+  int get maxIterations => 2;
 
   @override
   Future<BenchMarkResult> run({
@@ -108,7 +49,8 @@
       test.debugStdio();
     }
 
-    final flutterPkgPath = path.join(flutterPath, 'packages', 'flutter');
+    final flutterPkgPath =
+        path.join(flutterRepositoryPath, 'packages', 'flutter');
 
     // Open a small directory, but with the package config that allows us
     // to analyze any file in `package:flutter`, including tests.
@@ -136,7 +78,7 @@
     // Total number of suggestions: 2322.
     // Filtered to: 82.
     result.add(
-      'smallFile-body',
+      'completion-smallFile-body',
       BenchMarkResult(
         'micros',
         await _completionTiming(
@@ -144,7 +86,7 @@
           filePath: '$flutterPkgPath/lib/src/material/flutter_logo.dart',
           uniquePrefix: 'Widget build(BuildContext context) {',
           insertStringGenerator: () => 'M',
-          name: 'smallFile-body',
+          name: 'completion-smallFile-body',
         ),
       ),
     );
@@ -157,7 +99,7 @@
       // Total number of suggestions: 2322.
       // Filtered to: 2322.
       result.add(
-        'smallFile-body-withoutPrefix',
+        'completion-smallFile-body-withoutPrefix',
         BenchMarkResult(
           'micros',
           await _completionTiming(
@@ -165,7 +107,7 @@
             filePath: '$flutterPkgPath/lib/src/material/flutter_logo.dart',
             uniquePrefix: 'Widget build(BuildContext context) {',
             insertStringGenerator: null,
-            name: 'smallFile-body-withoutPrefix',
+            name: 'completion-smallFile-body-withoutPrefix',
           ),
         ),
       );
@@ -177,7 +119,7 @@
       // Total number of suggestions: 4654.
       // Filtered to: 182.
       result.add(
-        'smallLibraryCycle-largeFile-smallBody',
+        'completion-smallLibraryCycle-largeFile-smallBody',
         BenchMarkResult(
           'micros',
           await _completionTiming(
@@ -185,7 +127,7 @@
             filePath: '$flutterPkgPath/test/material/text_field_test.dart',
             uniquePrefix: 'getOpacity(WidgetTester tester, Finder finder) {',
             insertStringGenerator: () => 'M',
-            name: 'smallLibraryCycle-largeFile-smallBody',
+            name: 'completion-smallLibraryCycle-largeFile-smallBody',
           ),
         ),
       );
@@ -202,7 +144,7 @@
       // Total number of suggestions: 3429.
       // Filtered to: 133.
       result.add(
-        'mediumLibraryCycle-mediumFile-smallBody',
+        'completion-mediumLibraryCycle-mediumFile-smallBody',
         BenchMarkResult(
           'micros',
           await _completionTiming(
@@ -210,7 +152,7 @@
             filePath: '$flutterPkgPath/lib/src/material/app_bar.dart',
             uniquePrefix: 'computeDryLayout(BoxConstraints constraints) {',
             insertStringGenerator: () => 'M',
-            name: 'mediumLibraryCycle-mediumFile-smallBody',
+            name: 'completion-mediumLibraryCycle-mediumFile-smallBody',
           ),
         ),
       );
@@ -222,7 +164,7 @@
       // Total number of suggestions: 1510.
       // Filtered to: 0.
       result.add(
-        'mediumLibraryCycle-mediumFile-api-parameterType',
+        'completion-mediumLibraryCycle-mediumFile-api-parameterType',
         BenchMarkResult(
           'micros',
           await _completionTiming(
@@ -230,7 +172,7 @@
             filePath: '$flutterPkgPath/lib/src/material/app_bar.dart',
             uniquePrefix: 'computeDryLayout(BoxConstraints',
             insertStringGenerator: _IncrementingStringGenerator(),
-            name: 'mediumLibraryCycle-mediumFile-api-parameterType',
+            name: 'completion-mediumLibraryCycle-mediumFile-api-parameterType',
           ),
         ),
       );
@@ -291,7 +233,7 @@
     // Perform warm-up.
     // The cold start does not matter.
     // The sustained performance is much more important.
-    const kWarmUpCount = 50;
+    const kWarmUpCount = 20;
     for (var i = 0; i < kWarmUpCount; i++) {
       await perform();
     }
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 9934b5b..b84e3fd 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -1528,6 +1528,8 @@
   
   
   
+  
+  
 <h3>Requests</h3><dl><dt class="request"><a name="request_completion.getSuggestions">completion.getSuggestions</a></dt><dd><div class="box"><pre>request: {
   "id": String
   "method": "completion.getSuggestions"
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
index 763de40..e792375 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
@@ -17475,7 +17475,7 @@
   final Range targetRange;
 
   /// The range that should be selected and revealed when this link is being
-  /// followed, e.g the name of a function. Must be contained by the the
+  /// followed, e.g the name of a function. Must be contained by the
   /// `targetRange`. See also `DocumentSymbol#range`
   final Range targetSelectionRange;
 
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index 84b3a5c..2689506 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -137,10 +137,22 @@
     'replacementOffset';
 const String COMPLETION_NOTIFICATION_RESULTS_RESULTS = 'results';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS = 'completion.getSuggestions';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2 = 'completion.getSuggestions2';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2_FILE = 'file';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2_MAX_RESULTS = 'maxResults';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2_OFFSET = 'offset';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS_FILE = 'file';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS_OFFSET = 'offset';
 const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS =
     'completion.getSuggestionDetails';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2 =
+    'completion.getSuggestionDetails2';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_COMPLETION =
+    'completion';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_FILE = 'file';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_LIBRARY_URI =
+    'libraryUri';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_OFFSET = 'offset';
 const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS_FILE = 'file';
 const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS_ID = 'id';
 const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS_LABEL = 'label';
@@ -152,7 +164,19 @@
     'completion.setSubscriptions';
 const String COMPLETION_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =
     'subscriptions';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_IS_INCOMPLETE =
+    'isIncomplete';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_LIBRARY_URIS_TO_IMPORT =
+    'libraryUrisToImport';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_REPLACEMENT_LENGTH =
+    'replacementLength';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_REPLACEMENT_OFFSET =
+    'replacementOffset';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_SUGGESTIONS = 'suggestions';
 const String COMPLETION_RESPONSE_GET_SUGGESTIONS_ID = 'id';
+const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS2_CHANGE = 'change';
+const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS2_COMPLETION =
+    'completion';
 const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS_CHANGE = 'change';
 const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS_COMPLETION =
     'completion';
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index 301bfab..8cd904d 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -4292,6 +4292,202 @@
       );
 }
 
+/// completion.getSuggestionDetails2 params
+///
+/// {
+///   "file": FilePath
+///   "offset": int
+///   "completion": String
+///   "libraryUri": String
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionGetSuggestionDetails2Params implements RequestParams {
+  /// The path of the file into which this completion is being inserted.
+  String file;
+
+  /// The offset in the file where the completion will be inserted.
+  int offset;
+
+  /// The completion from the selected CompletionSuggestion. It could be a name
+  /// of a class, or a name of a constructor in form
+  /// "typeName.constructorName()", or an enumeration constant in form
+  /// "enumName.constantName", etc.
+  String completion;
+
+  /// The URI of the library to import, so that the element referenced in the
+  /// completion becomes accessible.
+  String libraryUri;
+
+  CompletionGetSuggestionDetails2Params(
+      this.file, this.offset, this.completion, this.libraryUri);
+
+  factory CompletionGetSuggestionDetails2Params.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      String file;
+      if (json.containsKey('file')) {
+        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'file');
+      }
+      int offset;
+      if (json.containsKey('offset')) {
+        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'offset');
+      }
+      String completion;
+      if (json.containsKey('completion')) {
+        completion = jsonDecoder.decodeString(
+            jsonPath + '.completion', json['completion']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'completion');
+      }
+      String libraryUri;
+      if (json.containsKey('libraryUri')) {
+        libraryUri = jsonDecoder.decodeString(
+            jsonPath + '.libraryUri', json['libraryUri']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'libraryUri');
+      }
+      return CompletionGetSuggestionDetails2Params(
+          file, offset, completion, libraryUri);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, 'completion.getSuggestionDetails2 params', json);
+    }
+  }
+
+  factory CompletionGetSuggestionDetails2Params.fromRequest(Request request) {
+    return CompletionGetSuggestionDetails2Params.fromJson(
+        RequestDecoder(request), 'params', request.params);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['file'] = file;
+    result['offset'] = offset;
+    result['completion'] = completion;
+    result['libraryUri'] = libraryUri;
+    return result;
+  }
+
+  @override
+  Request toRequest(String id) {
+    return Request(id, 'completion.getSuggestionDetails2', toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is CompletionGetSuggestionDetails2Params) {
+      return file == other.file &&
+          offset == other.offset &&
+          completion == other.completion &&
+          libraryUri == other.libraryUri;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        file,
+        offset,
+        completion,
+        libraryUri,
+      );
+}
+
+/// completion.getSuggestionDetails2 result
+///
+/// {
+///   "completion": String
+///   "change": SourceChange
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionGetSuggestionDetails2Result implements ResponseResult {
+  /// The full text to insert, which possibly includes now an import prefix.
+  /// The client should insert this text, not the completion from the selected
+  /// CompletionSuggestion.
+  String completion;
+
+  /// A change for the client to apply to make the accepted completion
+  /// suggestion available. In most cases the change is to add a new import
+  /// directive to the file.
+  SourceChange change;
+
+  CompletionGetSuggestionDetails2Result(this.completion, this.change);
+
+  factory CompletionGetSuggestionDetails2Result.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      String completion;
+      if (json.containsKey('completion')) {
+        completion = jsonDecoder.decodeString(
+            jsonPath + '.completion', json['completion']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'completion');
+      }
+      SourceChange change;
+      if (json.containsKey('change')) {
+        change = SourceChange.fromJson(
+            jsonDecoder, jsonPath + '.change', json['change']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'change');
+      }
+      return CompletionGetSuggestionDetails2Result(completion, change);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, 'completion.getSuggestionDetails2 result', json);
+    }
+  }
+
+  factory CompletionGetSuggestionDetails2Result.fromResponse(
+      Response response) {
+    return CompletionGetSuggestionDetails2Result.fromJson(
+        ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.id)),
+        'result',
+        response.result);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['completion'] = completion;
+    result['change'] = change.toJson();
+    return result;
+  }
+
+  @override
+  Response toResponse(String id) {
+    return Response(id, result: toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is CompletionGetSuggestionDetails2Result) {
+      return completion == other.completion && change == other.change;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        completion,
+        change,
+      );
+}
+
 /// completion.getSuggestionDetails params
 ///
 /// {
@@ -4481,6 +4677,261 @@
       );
 }
 
+/// completion.getSuggestions2 params
+///
+/// {
+///   "file": FilePath
+///   "offset": int
+///   "maxResults": int
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionGetSuggestions2Params implements RequestParams {
+  /// The file containing the point at which suggestions are to be made.
+  String file;
+
+  /// The offset within the file at which suggestions are to be made.
+  int offset;
+
+  /// The maximum number of suggestions to return. If the number of suggestions
+  /// after filtering is greater than the maxResults, then isIncomplete is set
+  /// to true.
+  int maxResults;
+
+  CompletionGetSuggestions2Params(this.file, this.offset, this.maxResults);
+
+  factory CompletionGetSuggestions2Params.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      String file;
+      if (json.containsKey('file')) {
+        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'file');
+      }
+      int offset;
+      if (json.containsKey('offset')) {
+        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'offset');
+      }
+      int maxResults;
+      if (json.containsKey('maxResults')) {
+        maxResults =
+            jsonDecoder.decodeInt(jsonPath + '.maxResults', json['maxResults']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'maxResults');
+      }
+      return CompletionGetSuggestions2Params(file, offset, maxResults);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, 'completion.getSuggestions2 params', json);
+    }
+  }
+
+  factory CompletionGetSuggestions2Params.fromRequest(Request request) {
+    return CompletionGetSuggestions2Params.fromJson(
+        RequestDecoder(request), 'params', request.params);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['file'] = file;
+    result['offset'] = offset;
+    result['maxResults'] = maxResults;
+    return result;
+  }
+
+  @override
+  Request toRequest(String id) {
+    return Request(id, 'completion.getSuggestions2', toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is CompletionGetSuggestions2Params) {
+      return file == other.file &&
+          offset == other.offset &&
+          maxResults == other.maxResults;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        file,
+        offset,
+        maxResults,
+      );
+}
+
+/// completion.getSuggestions2 result
+///
+/// {
+///   "replacementOffset": int
+///   "replacementLength": int
+///   "suggestions": List<CompletionSuggestion>
+///   "libraryUrisToImport": List<String>
+///   "isIncomplete": bool
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionGetSuggestions2Result implements ResponseResult {
+  /// The offset of the start of the text to be replaced. This will be
+  /// different from the offset used to request the completion suggestions if
+  /// there was a portion of an identifier before the original offset. In
+  /// particular, the replacementOffset will be the offset of the beginning of
+  /// said identifier.
+  int replacementOffset;
+
+  /// The length of the text to be replaced if the remainder of the identifier
+  /// containing the cursor is to be replaced when the suggestion is applied
+  /// (that is, the number of characters in the existing identifier).
+  int replacementLength;
+
+  /// The completion suggestions being reported. This list is filtered by the
+  /// already existing prefix, and sorted first by relevance, and (if the same)
+  /// by the suggestion text. The list will have at most maxResults items. If
+  /// the user types a new keystroke, the client is expected to either do local
+  /// filtering (when the returned list was complete), or ask the server again
+  /// (if isIncomplete was true).
+  ///
+  /// This list contains suggestions from both imported, and not yet imported
+  /// libraries. Items from not yet imported libraries will have
+  /// libraryUriToImportIndex set, which is an index into the
+  /// libraryUrisToImport in this response.
+  List<CompletionSuggestion> suggestions;
+
+  /// The list of libraries with declarations that are not yet available in the
+  /// file where completion was requested, most often because the library is
+  /// not yet imported. The declarations still might be included into the
+  /// suggestions, and the client should use getSuggestionDetails2 on selection
+  /// to make the library available in the file.
+  ///
+  /// Each item is the URI of a library, such as package:foo/bar.dart or
+  /// file:///home/me/workspace/foo/test/bar_test.dart.
+  List<String> libraryUrisToImport;
+
+  /// True if the number of suggestions after filtering was greater than the
+  /// requested maxResults.
+  bool isIncomplete;
+
+  CompletionGetSuggestions2Result(
+      this.replacementOffset,
+      this.replacementLength,
+      this.suggestions,
+      this.libraryUrisToImport,
+      this.isIncomplete);
+
+  factory CompletionGetSuggestions2Result.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      int replacementOffset;
+      if (json.containsKey('replacementOffset')) {
+        replacementOffset = jsonDecoder.decodeInt(
+            jsonPath + '.replacementOffset', json['replacementOffset']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'replacementOffset');
+      }
+      int replacementLength;
+      if (json.containsKey('replacementLength')) {
+        replacementLength = jsonDecoder.decodeInt(
+            jsonPath + '.replacementLength', json['replacementLength']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'replacementLength');
+      }
+      List<CompletionSuggestion> suggestions;
+      if (json.containsKey('suggestions')) {
+        suggestions = jsonDecoder.decodeList(
+            jsonPath + '.suggestions',
+            json['suggestions'],
+            (String jsonPath, Object? json) =>
+                CompletionSuggestion.fromJson(jsonDecoder, jsonPath, json));
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'suggestions');
+      }
+      List<String> libraryUrisToImport;
+      if (json.containsKey('libraryUrisToImport')) {
+        libraryUrisToImport = jsonDecoder.decodeList(
+            jsonPath + '.libraryUrisToImport',
+            json['libraryUrisToImport'],
+            jsonDecoder.decodeString);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'libraryUrisToImport');
+      }
+      bool isIncomplete;
+      if (json.containsKey('isIncomplete')) {
+        isIncomplete = jsonDecoder.decodeBool(
+            jsonPath + '.isIncomplete', json['isIncomplete']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'isIncomplete');
+      }
+      return CompletionGetSuggestions2Result(replacementOffset,
+          replacementLength, suggestions, libraryUrisToImport, isIncomplete);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, 'completion.getSuggestions2 result', json);
+    }
+  }
+
+  factory CompletionGetSuggestions2Result.fromResponse(Response response) {
+    return CompletionGetSuggestions2Result.fromJson(
+        ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.id)),
+        'result',
+        response.result);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['replacementOffset'] = replacementOffset;
+    result['replacementLength'] = replacementLength;
+    result['suggestions'] = suggestions
+        .map((CompletionSuggestion value) => value.toJson())
+        .toList();
+    result['libraryUrisToImport'] = libraryUrisToImport;
+    result['isIncomplete'] = isIncomplete;
+    return result;
+  }
+
+  @override
+  Response toResponse(String id) {
+    return Response(id, result: toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is CompletionGetSuggestions2Result) {
+      return replacementOffset == other.replacementOffset &&
+          replacementLength == other.replacementLength &&
+          listEqual(suggestions, other.suggestions,
+              (CompletionSuggestion a, CompletionSuggestion b) => a == b) &&
+          listEqual(libraryUrisToImport, other.libraryUrisToImport,
+              (String a, String b) => a == b) &&
+          isIncomplete == other.isIncomplete;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        replacementOffset,
+        replacementLength,
+        suggestions,
+        libraryUrisToImport,
+        isIncomplete,
+      );
+}
+
 /// completion.getSuggestions params
 ///
 /// {
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index e66a58c..9e758b6 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -253,7 +253,6 @@
     extensionForContext.clear();
     for (var driver in driverMap.values) {
       declarationsTracker?.addContext(driver.analysisContext!);
-      driver.resetUriResolution();
     }
   }
 
@@ -332,7 +331,7 @@
         return null;
       }
 
-      var unitElementResult = await driver.getUnitElement2(file);
+      var unitElementResult = await driver.getUnitElement(file);
       if (unitElementResult is! UnitElementResult) {
         return null;
       }
@@ -415,11 +414,10 @@
     }
 
     return driver
-        .getResult2(path, sendCachedToStream: sendCachedToStream)
+        .getResult(path, sendCachedToStream: sendCachedToStream)
         .then((value) => value is ResolvedUnitResult ? value : null)
         .catchError((e, st) {
       instrumentationService.logException(e, st);
-      // ignore: invalid_return_type_for_catch_error
       return null;
     });
   }
@@ -461,9 +459,7 @@
   /// Read all files, resolve all URIs, and perform required analysis in
   /// all current analysis drivers.
   void reanalyze() {
-    for (var driver in driverMap.values) {
-      driver.resetUriResolution();
-    }
+    contextManager.refresh();
   }
 
   /// Sends an error notification to the user.
diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index 8591b99..17f00da 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -3,17 +3,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analysis_server/src/services/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/fuzzy_filter_sort.dart';
 import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
-import 'package:analysis_server/src/services/completion/filtering/fuzzy_matcher.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/element/element.dart' show LibraryElement;
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
-import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:meta/meta.dart';
 
@@ -33,7 +30,7 @@
   final OperationPerformanceImpl _performanceRoot =
       OperationPerformanceImpl('<root>');
 
-  late DartCompletionRequestImpl _dartCompletionRequest;
+  late DartCompletionRequest _dartCompletionRequest;
 
   /// Paths of imported libraries for which suggestions were (re)computed
   /// during processing of this request. Does not include libraries that were
@@ -73,12 +70,10 @@
       var lineInfo = resolvedUnit.lineInfo;
       var offset = lineInfo.getOffsetOfLine(line) + column;
 
-      var completionRequest = CompletionRequestImpl(
-        resolvedUnit,
-        offset,
-        CompletionPerformance(),
+      _dartCompletionRequest = DartCompletionRequest(
+        resolvedUnit: resolvedUnit,
+        offset: offset,
       );
-      var dartdocDirectiveInfo = DartdocDirectiveInfo();
 
       var suggestions = await performance.runAsync(
         'suggestions',
@@ -90,15 +85,15 @@
                 <IncludedSuggestionRelevanceTag>[];
 
             var manager = DartCompletionManager(
-              dartdocDirectiveInfo: dartdocDirectiveInfo,
+              budget: CompletionBudget(CompletionBudget.defaultDuration),
               includedElementKinds: includedElementKinds,
               includedElementNames: includedElementNames,
               includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
             );
 
             return await manager.computeSuggestions(
+              _dartCompletionRequest,
               performance,
-              completionRequest,
               enableOverrideContributor: false,
               enableUriContributor: false,
             );
@@ -109,12 +104,6 @@
         },
       );
 
-      _dartCompletionRequest = await DartCompletionRequestImpl.from(
-        performance,
-        completionRequest,
-        dartdocDirectiveInfo,
-      );
-
       performance.run('imports', (performance) {
         if (_dartCompletionRequest.includeIdentifiers) {
           _logger.run('Add imported suggestions', () {
@@ -128,15 +117,15 @@
         }
       });
 
-      var filter = _FilterSort(
-        _dartCompletionRequest,
-        suggestions,
-      );
+      var filterPattern = _dartCompletionRequest.targetPrefix;
 
       performance.run('filter', (performance) {
         _logger.run('Filter suggestions', () {
           performance.getDataInt('count').add(suggestions.length);
-          suggestions = filter.perform();
+          suggestions = fuzzyFilterSort(
+            pattern: filterPattern,
+            suggestions: suggestions,
+          );
           performance.getDataInt('matchCount').add(suggestions.length);
         });
       });
@@ -144,28 +133,15 @@
       var result = CiderCompletionResult._(
         suggestions: suggestions,
         performance: CiderCompletionPerformance._(
-          file: Duration.zero,
-          imports: performance.getChild('imports')!.elapsed,
-          resolution: performance.getChild('resolution')!.elapsed,
-          suggestions: performance.getChild('suggestions')!.elapsed,
           operations: _performanceRoot.children.first,
         ),
-        prefixStart: CiderPosition(line, column - filter._pattern.length),
+        prefixStart: CiderPosition(line, column - filterPattern.length),
       );
 
       return result;
     });
   }
 
-  @Deprecated('Use compute')
-  Future<CiderCompletionResult> compute2({
-    required String path,
-    required int line,
-    required int column,
-  }) async {
-    return compute(path: path, line: line, column: column);
-  }
-
   /// Prepare for computing completions in files from the [pathList].
   ///
   /// This method might be called when we are finishing a large initial
@@ -240,30 +216,10 @@
 }
 
 class CiderCompletionPerformance {
-  /// The elapsed time for file access.
-  @Deprecated('This operation is not performed anymore')
-  final Duration file;
-
-  /// The elapsed time to compute import suggestions.
-  @Deprecated("Use 'operations' instead")
-  final Duration imports;
-
-  /// The elapsed time for resolution.
-  @Deprecated("Use 'operations' instead")
-  final Duration resolution;
-
-  /// The elapsed time to compute suggestions.
-  @Deprecated("Use 'operations' instead")
-  final Duration suggestions;
-
   /// The tree of operation performances.
   final OperationPerformance operations;
 
   CiderCompletionPerformance._({
-    required this.file,
-    required this.imports,
-    required this.resolution,
-    required this.suggestions,
     required this.operations,
   });
 }
@@ -298,63 +254,3 @@
 
   _CiderImportedLibrarySuggestions(this.signature, this.suggestions);
 }
-
-class _FilterSort {
-  final DartCompletionRequestImpl _request;
-  final List<CompletionSuggestion> _suggestions;
-
-  late FuzzyMatcher _matcher;
-  late String _pattern;
-
-  _FilterSort(this._request, this._suggestions);
-
-  List<CompletionSuggestion> perform() {
-    _pattern = _request.targetPrefix;
-    _matcher = FuzzyMatcher(_pattern, matchStyle: MatchStyle.SYMBOL);
-
-    var scored = _suggestions
-        .map((e) => _FuzzyScoredSuggestion(e, _score(e)))
-        .where((e) => e.score > 0)
-        .toList();
-
-    scored.sort((a, b) {
-      // Prefer what the user requested by typing.
-      if (a.score > b.score) {
-        return -1;
-      } else if (a.score < b.score) {
-        return 1;
-      }
-
-      // Then prefer what is more relevant in the context.
-      if (a.suggestion.relevance != b.suggestion.relevance) {
-        return -(a.suggestion.relevance - b.suggestion.relevance);
-      }
-
-      // Other things being equal, sort by name.
-      return a.suggestion.completion.compareTo(b.suggestion.completion);
-    });
-
-    return scored.map((e) => e.suggestion).toList();
-  }
-
-  double _score(CompletionSuggestion e) {
-    var suggestionTextToMatch = e.completion;
-
-    if (e.kind == CompletionSuggestionKind.NAMED_ARGUMENT) {
-      var index = suggestionTextToMatch.indexOf(':');
-      if (index != -1) {
-        suggestionTextToMatch = suggestionTextToMatch.substring(0, index);
-      }
-    }
-
-    return _matcher.score(suggestionTextToMatch);
-  }
-}
-
-/// [CompletionSuggestion] scored using [FuzzyMatcher].
-class _FuzzyScoredSuggestion {
-  final CompletionSuggestion suggestion;
-  final double score;
-
-  _FuzzyScoredSuggestion(this.suggestion, this.score);
-}
diff --git a/pkg/analysis_server/lib/src/cider/fixes.dart b/pkg/analysis_server/lib/src/cider/fixes.dart
index e17d1cc..b3898bd 100644
--- a/pkg/analysis_server/lib/src/cider/fixes.dart
+++ b/pkg/analysis_server/lib/src/cider/fixes.dart
@@ -5,11 +5,13 @@
 import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
 import 'package:analysis_server/src/services/correction/change_workspace.dart';
 import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/correction/fix/dart/top_level_declarations.dart';
 import 'package:analysis_server/src/services/correction/fix_internal.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/instrumentation/service.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
+import 'package:analyzer/src/dart/micro/library_graph.dart' as cider;
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
 
 class CiderErrorFixes {
@@ -50,7 +52,7 @@
             workspace,
             resolvedUnit,
             error,
-            (name) => const [],
+            _topLevelDeclarations,
           );
 
           var fixes = await DartFixContributor().computeFixes(context);
@@ -65,4 +67,33 @@
 
     return result;
   }
+
+  List<TopLevelDeclaration> _topLevelDeclarations(String name) {
+    var result = <TopLevelDeclaration>[];
+    var files = _fileResolver.getFilesWithTopLevelDeclarations(name);
+    for (var fileWithKind in files) {
+      void addDeclaration(TopLevelDeclarationKind kind) {
+        var file = fileWithKind.file;
+        result.add(
+          TopLevelDeclaration(file.path, file.uri, kind, name, false),
+        );
+      }
+
+      switch (fileWithKind.kind) {
+        case cider.FileTopLevelDeclarationKind.extension:
+          addDeclaration(TopLevelDeclarationKind.extension);
+          break;
+        case cider.FileTopLevelDeclarationKind.function:
+          addDeclaration(TopLevelDeclarationKind.function);
+          break;
+        case cider.FileTopLevelDeclarationKind.type:
+          addDeclaration(TopLevelDeclarationKind.type);
+          break;
+        case cider.FileTopLevelDeclarationKind.variable:
+          addDeclaration(TopLevelDeclarationKind.variable);
+          break;
+      }
+    }
+    return result;
+  }
 }
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index eac6314..cd4ec1f 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -179,6 +179,12 @@
     } else {
       type = HighlightRegionType.CLASS;
     }
+
+    if (_isAnnotationIdentifier(node)) {
+      semanticModifiers ??= {};
+      semanticModifiers.add(CustomSemanticTokenModifiers.annotation);
+    }
+
     // add region
     return _addRegion_node(
       node,
@@ -199,7 +205,11 @@
       // For semantic tokens, constructor names are coloured like methods but
       // have a modifier applied.
       semanticTokenType: SemanticTokenTypes.method,
-      semanticTokenModifiers: {CustomSemanticTokenModifiers.constructor},
+      semanticTokenModifiers: {
+        CustomSemanticTokenModifiers.constructor,
+        if (_isAnnotationIdentifier(node))
+          CustomSemanticTokenModifiers.annotation,
+      },
     );
   }
 
@@ -293,7 +303,13 @@
     }
     // add region
     if (type != null) {
-      return _addRegion_node(node, type);
+      return _addRegion_node(
+        node,
+        type,
+        semanticTokenModifiers: _isAnnotationIdentifier(node)
+            ? {CustomSemanticTokenModifiers.annotation}
+            : null,
+      );
     }
     return false;
   }
@@ -575,6 +591,18 @@
     _addRegion(offset, end - offset, type);
   }
 
+  /// Checks whether [node] is the identifier part of an annotation.
+  bool _isAnnotationIdentifier(AstNode node) {
+    if (node.parent is Annotation) {
+      return true;
+    } else if (node.parent is PrefixedIdentifier &&
+        node.parent?.parent is Annotation) {
+      return true;
+    } else {
+      return false;
+    }
+  }
+
   void _reset() {
     _computeRegions = false;
     _computeSemanticTokens = false;
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 4a1e4c1..1f568f7 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -421,6 +421,7 @@
 
   void _createAnalysisContexts() {
     _destroyAnalysisContexts();
+    _fileContentCache.invalidateAll();
 
     var collection = _collection = AnalysisContextCollectionImpl(
       includedPaths: includedPaths,
@@ -530,33 +531,32 @@
   }
 
   /// Notifies the drivers that a generated Bazel file has changed.
-  void _handleBazelWatchEvents(List<WatchEvent> allEvents) {
+  void _handleBazelWatchEvents(List<WatchEvent> events) {
     // First check if we have any changes to the bazel-*/blaze-* paths.  If
     // we do, we'll simply recreate all contexts to make sure that we follow the
     // correct paths.
     var bazelSymlinkPaths = bazelWatchedPathsPerFolder.values
         .expand((watched) => _getPossibleBazelBinPaths(watched))
         .toSet();
-    if (allEvents.any((event) => bazelSymlinkPaths.contains(event.path))) {
+    if (events.any((event) => bazelSymlinkPaths.contains(event.path))) {
       refresh();
       return;
     }
 
-    var fileEvents =
-        allEvents.where((event) => !bazelSymlinkPaths.contains(event.path));
+    // If a file was created or removed, the URI resolution is likely wrong.
+    // Do as for `package_config.json` changes - recreate all contexts.
+    if (events
+        .map((event) => event.type)
+        .any((type) => type == ChangeType.ADD || type == ChangeType.REMOVE)) {
+      refresh();
+      return;
+    }
+
+    // If we have only changes to generated files, notify drivers.
     for (var driver in driverMap.values) {
-      var needsUriReset = false;
-      for (var event in fileEvents) {
-        if (event.type == ChangeType.ADD) {
-          driver.addFile(event.path);
-          needsUriReset = true;
-        }
-        if (event.type == ChangeType.MODIFY) driver.changeFile(event.path);
-        if (event.type == ChangeType.REMOVE) driver.removeFile(event.path);
+      for (var event in events) {
+        driver.changeFile(event.path);
       }
-      // Since the file has been created after we've searched for it, the
-      // URI resolution is likely wrong, so we need to reset it.
-      if (needsUriReset) driver.resetUriResolution();
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/domain_abstract.dart b/pkg/analysis_server/lib/src/domain_abstract.dart
index e7079c1..3ff067b 100644
--- a/pkg/analysis_server/lib/src/domain_abstract.dart
+++ b/pkg/analysis_server/lib/src/domain_abstract.dart
@@ -4,7 +4,6 @@
 
 import 'dart:async';
 import 'dart:convert';
-import 'dart:math' as math;
 
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/analysis_server_abstract.dart';
@@ -38,19 +37,18 @@
   /// restarted. The [timeout] is the maximum amount of time that will be spent
   /// waiting for plugins to respond.
   Future<List<plugin.Response>> waitForResponses(
-      Map<PluginInfo, Future<plugin.Response>> futures,
-      {plugin.RequestParams? requestParameters,
-      int timeout = 500}) async {
+    Map<PluginInfo, Future<plugin.Response>> futures, {
+    plugin.RequestParams? requestParameters,
+    Duration timeout = const Duration(milliseconds: 500),
+  }) async {
     // TODO(brianwilkerson) requestParameters might need to be required.
-    var endTime = DateTime.now().millisecondsSinceEpoch + timeout;
+    var timer = Stopwatch()..start();
     var responses = <plugin.Response>[];
     for (var entry in futures.entries) {
       var pluginInfo = entry.key;
       var future = entry.value;
       try {
-        var startTime = DateTime.now().millisecondsSinceEpoch;
-        var response = await future
-            .timeout(Duration(milliseconds: math.max(endTime - startTime, 0)));
+        var response = await future.timeout(timeout - timer.elapsed);
         var error = response.error;
         if (error != null) {
           // TODO(brianwilkerson) Report the error to the plugin manager.
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index 1208bd9..1595e38 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -36,7 +36,7 @@
 
     var result = await server.getResolvedUnit(file);
 
-    if (result == null || result.state != ResultState.VALID) {
+    if (result == null) {
       server.sendResponse(Response.getErrorsInvalidFile(request));
       return;
     }
@@ -89,7 +89,7 @@
     // Prepare the resolved unit.
     //
     var result = await server.getResolvedUnit(file);
-    if (result == null || result.state != ResultState.VALID) {
+    if (result == null) {
       server.sendResponse(Response.getImportedElementsInvalidFile(request));
       return;
     }
@@ -163,7 +163,7 @@
       //
       var allResults = <AnalysisNavigationParams>[];
       var result = await server.getResolvedUnit(file);
-      if (result != null && result.state == ResultState.VALID) {
+      if (result != null) {
         var unit = result.unit;
         var collector = NavigationCollectorImpl();
         computeDartNavigation(
@@ -229,7 +229,7 @@
     // Prepare the resolved units.
     var result = await server.getResolvedUnit(file);
 
-    if (result == null || result.state != ResultState.VALID) {
+    if (result == null || !result.exists) {
       server.sendResponse(Response.getSignatureInvalidFile(request));
       return;
     }
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 9a10237..b1b2b36 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -13,14 +13,13 @@
 import 'package:analysis_server/src/domains/completion/available_suggestions.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:analysis_server/src/provisional/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/completion_core.dart';
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/fuzzy_filter_sort.dart';
 import 'package:analysis_server/src/services/completion/yaml/analysis_options_generator.dart';
 import 'package:analysis_server/src/services/completion/yaml/fix_data_generator.dart';
 import 'package:analysis_server/src/services/completion/yaml/pubspec_generator.dart';
 import 'package:analysis_server/src/services/completion/yaml/yaml_completion_generator.dart';
-import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -37,6 +36,9 @@
   /// The maximum number of performance measurements to keep.
   static const int performanceListMaxLength = 50;
 
+  /// The time budget for a completion request.
+  Duration budgetDuration = CompletionBudget.defaultDuration;
+
   /// The completion services that the client is currently subscribed.
   final Set<CompletionService> subscriptions = <CompletionService>{};
 
@@ -52,7 +54,7 @@
       RecentBuffer<CompletionPerformance>(performanceListMaxLength);
 
   /// The current request being processed or `null` if none.
-  CompletionRequestImpl? _currentRequest;
+  DartCompletionRequest? _currentRequest;
 
   /// The identifiers of the latest `getSuggestionDetails` request.
   /// We use it to abort previous requests.
@@ -66,56 +68,38 @@
   /// automatically called when a client listens to the stream returned by
   /// [results]. Subclasses should override this method, append at least one
   /// result to the [controller], and close the controller stream once complete.
-  Future<CompletionResult> computeSuggestions(
-    OperationPerformanceImpl perf,
-    CompletionRequestImpl request,
-    CompletionGetSuggestionsParams params,
+  Future<List<CompletionSuggestion>> computeSuggestions({
+    required CompletionBudget budget,
+    required OperationPerformanceImpl performance,
+    required DartCompletionRequest request,
     Set<ElementKind>? includedElementKinds,
     Set<String>? includedElementNames,
     List<IncludedSuggestionRelevanceTag>? includedSuggestionRelevanceTags,
-  ) async {
+    List<Uri>? librariesToImport,
+  }) async {
     //
     // Allow plugins to start computing fixes.
     //
-    Map<PluginInfo, Future<plugin.Response>>? pluginFutures;
-    plugin.CompletionGetSuggestionsParams? requestParams;
-    var file = params.file;
-    var offset = params.offset;
-    var driver = server.getAnalysisDriver(file);
-    if (driver != null) {
-      requestParams = plugin.CompletionGetSuggestionsParams(file, offset);
-      pluginFutures = server.pluginManager.broadcastRequest(
-        requestParams,
-        contextRoot: driver.analysisContext!.contextRoot,
-      );
-    }
+    var requestToPlugins = performance.run('askPlugins', (_) {
+      return _sendRequestToPlugins(request);
+    });
+
     //
     // Compute completions generated by server.
     //
     var suggestions = <CompletionSuggestion>[];
-    const COMPUTE_SUGGESTIONS_TAG = 'computeSuggestions';
-    await perf.runAsync(COMPUTE_SUGGESTIONS_TAG, (perf) async {
+    await performance.runAsync('computeSuggestions', (performance) async {
       var manager = DartCompletionManager(
-        dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(
-          request.result,
-        ),
+        budget: budget,
         includedElementKinds: includedElementKinds,
         includedElementNames: includedElementNames,
         includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
+        librariesToImport: librariesToImport,
       );
 
-      var contributorTag = 'computeSuggestions - ${manager.runtimeType}';
-      await perf.runAsync(contributorTag, (performance) async {
-        try {
-          suggestions.addAll(
-            await manager.computeSuggestions(performance, request,
-                documentationCache:
-                    server.getDocumentationCacheFor(request.result)),
-          );
-        } on AbortCompletion {
-          suggestions.clear();
-        }
-      });
+      suggestions.addAll(
+        await manager.computeSuggestions(request, performance),
+      );
     });
     // TODO (danrubel) if request is obsolete (processAnalysisRequest returns
     // false) then send empty results
@@ -123,32 +107,13 @@
     //
     // Add the completions produced by plugins to the server-generated list.
     //
-    if (pluginFutures != null) {
-      var responses = await waitForResponses(pluginFutures,
-          requestParameters: requestParams, timeout: 100);
-      for (var response in responses) {
-        var result =
-            plugin.CompletionGetSuggestionsResult.fromResponse(response);
-        if (result.results.isNotEmpty) {
-          if (suggestions.isEmpty) {
-            request.replacementOffset = result.replacementOffset;
-            request.replacementLength = result.replacementLength;
-          } else if (request.replacementOffset != result.replacementOffset &&
-              request.replacementLength != result.replacementLength) {
-            server.instrumentationService
-                .logError('Plugin completion-results dropped due to conflicting'
-                    ' replacement offset/length: ${result.toJson()}');
-            continue;
-          }
-          suggestions.addAll(result.results);
-        }
-      }
+    if (requestToPlugins != null) {
+      await performance.runAsync('waitForPlugins', (_) async {
+        await _addPluginSuggestions(budget, requestToPlugins, suggestions);
+      });
     }
-    //
-    // Return the result.
-    //
-    return CompletionResult(
-        request.replacementOffset, request.replacementLength, suggestions);
+
+    return suggestions;
   }
 
   /// Return the suggestions that should be presented in the YAML [file] at the
@@ -243,6 +208,160 @@
     );
   }
 
+  /// Process a `completion.getSuggestionDetails2` request.
+  void getSuggestionDetails2(Request request) async {
+    var params = CompletionGetSuggestionDetails2Params.fromRequest(request);
+
+    var file = params.file;
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    var libraryUri = Uri.tryParse(params.libraryUri);
+    if (libraryUri == null) {
+      server.sendResponse(
+        Response.invalidParameter(request, 'libraryUri', 'Cannot parse'),
+      );
+      return;
+    }
+
+    var budget = CompletionBudget(
+      const Duration(milliseconds: 1000),
+    );
+    var id = ++_latestGetSuggestionDetailsId;
+    while (id == _latestGetSuggestionDetailsId && !budget.isEmpty) {
+      try {
+        var analysisDriver = server.getAnalysisDriver(file);
+        if (analysisDriver == null) {
+          server.sendResponse(Response.fileNotAnalyzed(request, file));
+          return;
+        }
+        var session = analysisDriver.currentSession;
+
+        var completion = params.completion;
+        var builder = ChangeBuilder(session: session);
+        await builder.addDartFileEdit(file, (builder) {
+          var result = builder.importLibraryElement(libraryUri);
+          if (result.prefix != null) {
+            completion = '${result.prefix}.$completion';
+          }
+        });
+
+        server.sendResponse(
+          CompletionGetSuggestionDetails2Result(
+            completion,
+            builder.sourceChange,
+          ).toResponse(request.id),
+        );
+        return;
+      } on InconsistentAnalysisException {
+        // Loop around to try again.
+      }
+    }
+
+    // Timeout or abort, send the empty response.
+    server.sendResponse(
+      CompletionGetSuggestionDetailsResult('').toResponse(request.id),
+    );
+  }
+
+  /// Implement the 'completion.getSuggestions2' request.
+  void getSuggestions2(Request request) async {
+    var budget = CompletionBudget(budgetDuration);
+
+    var params = CompletionGetSuggestions2Params.fromRequest(request);
+    var file = params.file;
+    var offset = params.offset;
+
+    var provider = server.resourceProvider;
+    var pathContext = provider.pathContext;
+
+    // TODO(scheglov) Support non-Dart files.
+    if (!file_paths.isDart(pathContext, file)) {
+      server.sendResponse(
+        CompletionGetSuggestions2Result(offset, 0, [], [], false)
+            .toResponse(request.id),
+      );
+      return;
+    }
+
+    var resolvedUnit = await server.getResolvedUnit(file);
+    if (resolvedUnit == null) {
+      server.sendResponse(Response.fileNotAnalyzed(request, file));
+      return;
+    }
+
+    server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
+
+    if (offset < 0 || offset > resolvedUnit.content.length) {
+      server.sendResponse(Response.invalidParameter(
+          request,
+          'params.offset',
+          'Expected offset between 0 and source length inclusive,'
+              ' but found $offset'));
+      return;
+    }
+
+    final completionPerformance = CompletionPerformance();
+    recordRequest(completionPerformance, file, resolvedUnit.content, offset);
+
+    await completionPerformance.runRequestOperation((performance) async {
+      var completionRequest = DartCompletionRequest(
+        resolvedUnit: resolvedUnit,
+        offset: offset,
+        dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(
+          resolvedUnit,
+        ),
+        documentationCache: server.getDocumentationCacheFor(resolvedUnit),
+      );
+      setNewRequest(completionRequest);
+
+      var librariesToImport = <Uri>[];
+      var suggestions = <CompletionSuggestion>[];
+      try {
+        suggestions = await computeSuggestions(
+          budget: budget,
+          performance: performance,
+          request: completionRequest,
+          librariesToImport: librariesToImport,
+        );
+      } on AbortCompletion {
+        return server.sendResponse(
+          CompletionGetSuggestions2Result(
+            completionRequest.replacementOffset,
+            completionRequest.replacementLength,
+            [],
+            [],
+            true,
+          ).toResponse(request.id),
+        );
+      }
+
+      performance.run('filter', (performance) {
+        performance.getDataInt('count').add(suggestions.length);
+        suggestions = fuzzyFilterSort(
+          pattern: completionRequest.targetPrefix,
+          suggestions: suggestions,
+        );
+        performance.getDataInt('matchCount').add(suggestions.length);
+      });
+
+      var lengthRestricted = suggestions.take(params.maxResults).toList();
+      var isIncomplete = lengthRestricted.length < suggestions.length;
+      completionPerformance.suggestionCount = lengthRestricted.length;
+
+      server.sendResponse(
+        CompletionGetSuggestions2Result(
+          completionRequest.replacementOffset,
+          completionRequest.replacementLength,
+          lengthRestricted,
+          librariesToImport.map((e) => '$e').toList(),
+          isIncomplete,
+        ).toResponse(request.id),
+      );
+    });
+  }
+
   @override
   Response? handleRequest(Request request) {
     if (!server.options.featureSet.completion) {
@@ -259,9 +378,15 @@
       if (requestName == COMPLETION_REQUEST_GET_SUGGESTION_DETAILS) {
         getSuggestionDetails(request);
         return Response.DELAYED_RESPONSE;
+      } else if (requestName == COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2) {
+        getSuggestionDetails2(request);
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == COMPLETION_REQUEST_GET_SUGGESTIONS) {
         processRequest(request);
         return Response.DELAYED_RESPONSE;
+      } else if (requestName == COMPLETION_REQUEST_GET_SUGGESTIONS2) {
+        getSuggestions2(request);
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == COMPLETION_REQUEST_SET_SUBSCRIPTIONS) {
         return setSubscriptions(request);
       }
@@ -275,14 +400,16 @@
     });
   }
 
-  void ifMatchesRequestClear(CompletionRequest completionRequest) {
-    if (_currentRequest == completionRequest) {
+  void ifMatchesRequestClear(DartCompletionRequest request) {
+    if (_currentRequest == request) {
       _currentRequest = null;
     }
   }
 
   /// Process a `completion.getSuggestions` request.
   Future<void> processRequest(Request request) async {
+    var budget = CompletionBudget(budgetDuration);
+
     final performance = this.performance = CompletionPerformance();
 
     await performance.runRequestOperation((perf) async {
@@ -328,27 +455,35 @@
         server.sendResponse(Response.fileNotAnalyzed(request, 'params.offset'));
         return;
       }
-      server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
-      if (resolvedUnit.state == ResultState.VALID) {
-        if (offset < 0 || offset > resolvedUnit.content.length) {
-          server.sendResponse(Response.invalidParameter(
-              request,
-              'params.offset',
-              'Expected offset between 0 and source length inclusive,'
-                  ' but found $offset'));
-          return;
-        }
 
-        recordRequest(performance, file, resolvedUnit.content, offset);
+      server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
+
+      if (offset < 0 || offset > resolvedUnit.content.length) {
+        server.sendResponse(Response.invalidParameter(
+            request,
+            'params.offset',
+            'Expected offset between 0 and source length inclusive,'
+                ' but found $offset'));
+        return;
       }
+
+      recordRequest(performance, file, resolvedUnit.content, offset);
+
       var declarationsTracker = server.declarationsTracker;
       if (declarationsTracker == null) {
         server.sendResponse(Response.unsupportedFeature(
             request.id, 'Completion is not enabled.'));
         return;
       }
-      var completionRequest =
-          CompletionRequestImpl(resolvedUnit, offset, performance);
+
+      var completionRequest = DartCompletionRequest(
+        resolvedUnit: resolvedUnit,
+        offset: offset,
+        dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(
+          resolvedUnit,
+        ),
+        documentationCache: server.getDocumentationCacheFor(resolvedUnit),
+      );
 
       var completionId = (_nextCompletionId++).toString();
 
@@ -371,14 +506,19 @@
 
       // Compute suggestions in the background
       try {
-        var result = await computeSuggestions(
-          perf,
-          completionRequest,
-          params,
-          includedElementKinds,
-          includedElementNames,
-          includedSuggestionRelevanceTags,
-        );
+        var suggestions = <CompletionSuggestion>[];
+        try {
+          suggestions = await computeSuggestions(
+            budget: budget,
+            performance: perf,
+            request: completionRequest,
+            includedElementKinds: includedElementKinds,
+            includedElementNames: includedElementNames,
+            includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
+          );
+        } on AbortCompletion {
+          // Continue with empty suggestions list.
+        }
         String? libraryFile;
         var includedSuggestionSets = <IncludedSuggestionSet>[];
         if (includedElementKinds != null && includedElementNames != null) {
@@ -398,9 +538,9 @@
         perf.run(SEND_NOTIFICATION_TAG, (_) {
           sendCompletionNotification(
             completionId,
-            result.replacementOffset,
-            result.replacementLength,
-            result.suggestions,
+            completionRequest.replacementOffset,
+            completionRequest.replacementLength,
+            suggestions,
             libraryFile,
             includedSuggestionSets,
             includedElementKinds?.toList(),
@@ -408,7 +548,7 @@
           );
         });
 
-        performance.suggestionCount = result.suggestions.length;
+        performance.suggestionCount = suggestions.length;
       } finally {
         ifMatchesRequestClear(completionRequest);
       }
@@ -453,9 +593,9 @@
     );
   }
 
-  void setNewRequest(CompletionRequestImpl completionRequest) {
+  void setNewRequest(DartCompletionRequest request) {
     _abortCurrentRequest();
-    _currentRequest = completionRequest;
+    _currentRequest = request;
   }
 
   /// Implement the 'completion.setSubscriptions' request.
@@ -497,6 +637,56 @@
       _currentRequest = null;
     }
   }
+
+  /// Add the completions produced by plugins to the server-generated list.
+  Future<void> _addPluginSuggestions(
+    CompletionBudget budget,
+    _RequestToPlugins requestToPlugins,
+    List<CompletionSuggestion> suggestions,
+  ) async {
+    var responses = await waitForResponses(
+      requestToPlugins.futures,
+      requestParameters: requestToPlugins.parameters,
+      timeout: budget.left,
+    );
+    for (var response in responses) {
+      var result = plugin.CompletionGetSuggestionsResult.fromResponse(response);
+      if (result.results.isNotEmpty) {
+        var completionRequest = requestToPlugins.completionRequest;
+        if (completionRequest.replacementOffset != result.replacementOffset &&
+            completionRequest.replacementLength != result.replacementLength) {
+          server.instrumentationService
+              .logError('Plugin completion-results dropped due to conflicting'
+                  ' replacement offset/length: ${result.toJson()}');
+          continue;
+        }
+        suggestions.addAll(result.results);
+      }
+    }
+  }
+
+  /// Send the completion request to plugins, so that they work in other
+  /// isolates in parallel with the server isolate.
+  _RequestToPlugins? _sendRequestToPlugins(
+    DartCompletionRequest completionRequest,
+  ) {
+    var resolvedUnit = completionRequest.result;
+    var analysisContext = resolvedUnit.session.analysisContext;
+
+    var pluginRequestParameters = plugin.CompletionGetSuggestionsParams(
+      resolvedUnit.path,
+      completionRequest.offset,
+    );
+
+    return _RequestToPlugins(
+      completionRequest: completionRequest,
+      parameters: pluginRequestParameters,
+      futures: server.pluginManager.broadcastRequest(
+        pluginRequestParameters,
+        contextRoot: analysisContext.contextRoot,
+      ),
+    );
+  }
 }
 
 /// The result of computing suggestions for code completion.
@@ -518,3 +708,15 @@
   CompletionResult(
       this.replacementOffset, this.replacementLength, this.suggestions);
 }
+
+class _RequestToPlugins {
+  final DartCompletionRequest completionRequest;
+  final plugin.CompletionGetSuggestionsParams parameters;
+  final Map<PluginInfo, Future<plugin.Response>> futures;
+
+  _RequestToPlugins({
+    required this.completionRequest,
+    required this.parameters,
+    required this.futures,
+  });
+}
diff --git a/pkg/analysis_server/lib/src/domain_kythe.dart b/pkg/analysis_server/lib/src/domain_kythe.dart
index ec59917..0316e8f 100644
--- a/pkg/analysis_server/lib/src/domain_kythe.dart
+++ b/pkg/analysis_server/lib/src/domain_kythe.dart
@@ -9,7 +9,6 @@
 import 'package:analysis_server/src/domain_abstract.dart';
 import 'package:analysis_server/src/plugin/result_merger.dart';
 import 'package:analysis_server/src/services/kythe/kythe_visitors.dart';
-import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
@@ -41,7 +40,7 @@
       //
       var allResults = <KytheGetKytheEntriesResult>[];
       var result = await server.getResolvedUnit(file);
-      if (result != null && result.state == ResultState.VALID) {
+      if (result != null) {
         var entries = <KytheEntry>[];
         // TODO(brianwilkerson) Figure out how to get the list of files.
         var files = <String>[];
diff --git a/pkg/analysis_server/lib/src/domains/execution/completion.dart b/pkg/analysis_server/lib/src/domains/execution/completion.dart
index 7162de9..a2f6ea6 100644
--- a/pkg/analysis_server/lib/src/domains/execution/completion.dart
+++ b/pkg/analysis_server/lib/src/domains/execution/completion.dart
@@ -4,12 +4,11 @@
 
 import 'package:analysis_server/src/protocol_server.dart'
     show CompletionSuggestion, RuntimeCompletionExpression, SourceEdit;
-import 'package:analysis_server/src/services/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 
 class RuntimeCompletionComputer {
@@ -26,7 +25,7 @@
       this.code, this.offset, this.contextPath, this.contextOffset);
 
   Future<RuntimeCompletionResult> compute() async {
-    var contextResult = await analysisDriver.getResult2(contextPath);
+    var contextResult = await analysisDriver.getResult(contextPath);
     if (contextResult is! ResolvedUnitResult) {
       return RuntimeCompletionResult([], []);
     }
@@ -64,28 +63,22 @@
     // Update the context file content to include the code being completed.
     // Then resolve it, and restore the file to its initial state.
     var targetResult = await _withContextFileContent(targetCode, () async {
-      return await analysisDriver.getResult2(contextPath);
+      return await analysisDriver.getResult(contextPath);
     });
     if (targetResult is! ResolvedUnitResult) {
       return RuntimeCompletionResult([], []);
     }
 
-    var contributor = DartCompletionManager(
-        // dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(targetResult)
-        );
-    var request = CompletionRequestImpl(
-      targetResult,
-      targetOffset,
-      CompletionPerformance(),
+    var dartRequest = DartCompletionRequest(
+      resolvedUnit: targetResult,
+      offset: targetOffset,
     );
 
-    var suggestions = await request.performance.runRequestOperation(
-      (performance) async {
-        return await contributor.computeSuggestions(
-          performance,
-          request,
-        );
-      },
+    var suggestions = await DartCompletionManager(
+      budget: CompletionBudget(CompletionBudget.defaultDuration),
+    ).computeSuggestions(
+      dartRequest,
+      OperationPerformanceImpl('<root>'),
     );
 
     // Remove completions with synthetic import prefixes.
diff --git a/pkg/analysis_server/lib/src/lsp/constants.dart b/pkg/analysis_server/lib/src/lsp/constants.dart
index ca213ec..d8cc97f 100644
--- a/pkg/analysis_server/lib/src/lsp/constants.dart
+++ b/pkg/analysis_server/lib/src/lsp/constants.dart
@@ -92,12 +92,19 @@
 }
 
 abstract class CustomSemanticTokenModifiers {
+  /// A modifier applied to the identifier following the `@` annotation token to
+  /// allow users to color it differently (for example in the same way as `@`).
+  static const annotation = SemanticTokenModifiers('annotation');
+
   /// A modifier applied to control keywords like if/for/etc. so they can be
   /// colored differently to other keywords (void, import, etc), matching the
   /// original Dart textmate grammar.
   /// https://github.com/dart-lang/dart-syntax-highlight/blob/84a8e84f79bc917ebd959a4587349c865dc945e0/grammars/dart.json#L244-L261
   static const control = SemanticTokenModifiers('control');
 
+  /// A modifier applied to the identifier for an import prefix.
+  static const importPrefix = SemanticTokenModifiers('importPrefix');
+
   /// A modifier applied to parameter references to indicate they are the name/label
   /// to allow theming them differently to the values. For example in the code
   /// `foo({String a}) => foo(a: a)` the a's will be differentiated as:
@@ -118,7 +125,7 @@
   /// coloring it differently to the literal parts of the string.
   ///
   /// Many tokens within interpolation expressions will get their own semantic
-  /// tokens so this is mainly to account for the the surrounding `${}` and
+  /// tokens so this is mainly to account for the surrounding `${}` and
   /// tokens like parens and operators that may not get their own.
   ///
   /// This is useful for editors that supply their own basic coloring initially
@@ -127,8 +134,8 @@
   /// of the expression would show through the simple-colorings "string" colors.
   static const interpolation = SemanticTokenModifiers('interpolation');
 
-  /// A modifier applied to the void keyword to users to color it differently
-  /// (for example as a type).
+  /// A modifier applied to the void keyword to allow users to color it
+  /// differently (for example as a type).
   static const void_ = SemanticTokenModifiers('void');
 
   /// All custom semantic token modifiers, used to populate the LSP Legend.
@@ -137,7 +144,9 @@
   /// HighlightRegion mappings will be automatically included, but should still
   /// be listed here in case they are removed from mappings in the future.
   static const values = [
+    annotation,
     control,
+    importPrefix,
     label,
     constructor,
     escape,
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/sort_members.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/sort_members.dart
index 9372068..d832d06 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/sort_members.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/sort_members.dart
@@ -36,7 +36,7 @@
     final docIdentifier = server.getVersionedDocumentIdentifier(path);
 
     var driver = server.getAnalysisDriver(path);
-    final result = await driver?.parseFile2(path);
+    final result = driver?.parseFileSync(path);
 
     if (cancellationToken.isCancellationRequested) {
       return error(ErrorCodes.RequestCancelled, 'Request was cancelled');
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 2ab3d5d..85f3765 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -14,7 +14,6 @@
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/provisional/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/completion_core.dart';
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/filtering/fuzzy_matcher.dart';
@@ -180,8 +179,8 @@
     int offset,
   ) async {
     final requestParams = plugin.CompletionGetSuggestionsParams(path, offset);
-    final pluginResponses =
-        await requestFromPlugins(path, requestParams, timeout: 100);
+    final pluginResponses = await requestFromPlugins(path, requestParams,
+        timeout: const Duration(milliseconds: 100));
 
     final pluginResults = pluginResponses
         .map((e) => plugin.CompletionGetSuggestionsResult.fromResponse(e))
@@ -209,13 +208,13 @@
     server.performanceStats.completion.add(performance);
 
     return await performance.runRequestOperation((perf) async {
-      final completionRequest =
-          CompletionRequestImpl(unit, offset, performance);
-      final directiveInfo =
-          server.getDartdocDirectiveInfoFor(completionRequest.result);
-      final dartCompletionRequest = await DartCompletionRequestImpl.from(
-          perf, completionRequest, directiveInfo);
-      final target = dartCompletionRequest.target;
+      final completionRequest = DartCompletionRequest(
+        resolvedUnit: unit,
+        offset: offset,
+        dartdocDirectiveInfo: server.getDartdocDirectiveInfoFor(unit),
+        completionPreference: CompletionPreference.replace,
+      );
+      final target = completionRequest.target;
 
       if (triggerCharacter != null) {
         if (!_triggerCharacterValid(offset, triggerCharacter, target)) {
@@ -234,16 +233,15 @@
 
       try {
         var contributor = DartCompletionManager(
-          dartdocDirectiveInfo: directiveInfo,
+          budget: CompletionBudget(CompletionBudget.defaultDuration),
           includedElementKinds: includedElementKinds,
           includedElementNames: includedElementNames,
           includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
         );
 
         final serverSuggestions = await contributor.computeSuggestions(
-          perf,
           completionRequest,
-          completionPreference: CompletionPreference.replace,
+          perf,
         );
 
         final insertLength = _computeInsertLength(
@@ -400,7 +398,7 @@
 
         // Perform fuzzy matching based on the identifier in front of the caret to
         // reduce the size of the payload.
-        final fuzzyPattern = dartCompletionRequest.targetPrefix;
+        final fuzzyPattern = completionRequest.targetPrefix;
         final fuzzyMatcher =
             FuzzyMatcher(fuzzyPattern, matchStyle: MatchStyle.TEXT);
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
index a9bc050..827a088 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
@@ -11,7 +11,6 @@
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/plugin/result_merger.dart';
 import 'package:analysis_server/src/protocol_server.dart' show NavigationTarget;
-import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
 import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
@@ -53,7 +52,7 @@
 
     final result = await server.getResolvedUnit(path);
     final unit = result?.unit;
-    if (result?.state == ResultState.VALID && unit != null) {
+    if (unit != null) {
       computeDartNavigation(
           server.resourceProvider, collector, unit, offset, 0);
       collector.createRegions();
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_folding.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_folding.dart
index d67f740..1149fff 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_folding.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_folding.dart
@@ -9,7 +9,6 @@
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/source/line_info.dart';
 
 class FoldingHandler
@@ -32,8 +31,8 @@
       LineInfo? lineInfo;
 
       final unit = server.getParsedUnit(path);
-      if (unit?.state == ResultState.VALID) {
-        lineInfo = unit!.lineInfo;
+      if (unit != null) {
+        lineInfo = unit.lineInfo;
 
         final regions = DartUnitFoldingComputer(lineInfo, unit.unit).compute();
         partialResults.insert(0, regions);
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart
index 3148284..81b9b85 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart
@@ -9,7 +9,6 @@
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/lsp/source_edits.dart';
-import 'package:analyzer/dart/analysis/results.dart';
 
 class FormatOnTypeHandler
     extends MessageHandler<DocumentOnTypeFormattingParams, List<TextEdit>?> {
@@ -28,7 +27,7 @@
     }
 
     final result = server.getParsedUnit(path);
-    if (result?.state != ResultState.VALID || result!.errors.isNotEmpty) {
+    if (result == null || result.errors.isNotEmpty) {
       return success(null);
     }
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_range.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_range.dart
index f92433a..a6bbf90 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_range.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_range.dart
@@ -9,7 +9,6 @@
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/lsp/source_edits.dart';
-import 'package:analyzer/dart/analysis/results.dart';
 
 class FormatRangeHandler
     extends MessageHandler<DocumentRangeFormattingParams, List<TextEdit>?> {
@@ -28,7 +27,7 @@
     }
 
     final result = server.getParsedUnit(path);
-    if (result?.state != ResultState.VALID || result!.errors.isNotEmpty) {
+    if (result == null || result.errors.isNotEmpty) {
       return success(null);
     }
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
index 23a7cad..be75ccb 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
@@ -9,7 +9,6 @@
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/lsp/source_edits.dart';
-import 'package:analyzer/dart/analysis/results.dart';
 
 class FormattingHandler
     extends MessageHandler<DocumentFormattingParams, List<TextEdit>?> {
@@ -28,7 +27,7 @@
     }
 
     final result = server.getParsedUnit(path);
-    if (result?.state != ResultState.VALID || result!.errors.isNotEmpty) {
+    if (result == null || result.errors.isNotEmpty) {
       return success(null);
     }
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
index b0e3ca3..1a3d590 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
@@ -28,7 +28,11 @@
       server,
     );
 
-    if (!server.initializationOptions.onlyAnalyzeProjectsWithOpenFiles) {
+    if (server.initializationOptions.onlyAnalyzeProjectsWithOpenFiles) {
+      await server.fetchClientConfigurationAndPerformDynamicRegistration();
+    } else {
+      // This method internally calls
+      // fetchClientConfigurationAndPerformDynamicRegistration.
       await server.updateWorkspaceFolders(openWorkspacePaths, const []);
     }
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart
index 7552f3f..6b111db 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart
@@ -11,7 +11,6 @@
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/lsp/semantic_tokens/encoder.dart';
-import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/source/source_range.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 
@@ -29,7 +28,7 @@
       String path, SourceRange? range) async {
     final result = await server.getResolvedUnit(path);
     final unit = result?.unit;
-    if (result?.state == ResultState.VALID && unit != null) {
+    if (unit != null) {
       final computer = DartUnitHighlightsComputer(unit, range: range);
       return computer.computeSemanticTokens();
     }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
index eb22a64..6b87d05 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
@@ -77,18 +77,18 @@
 
   Future<ErrorOr<ResolvedUnitResult>> requireResolvedUnit(String path) async {
     final result = await server.getResolvedUnit(path);
-    if (result?.state != ResultState.VALID) {
+    if (result == null) {
       return error(ServerErrorCodes.InvalidFilePath, 'Invalid file path', path);
     }
-    return success(result!);
+    return success(result);
   }
 
   ErrorOr<ParsedUnitResult> requireUnresolvedUnit(String path) {
     final result = server.getParsedUnit(path);
-    if (result?.state != ResultState.VALID) {
+    if (result == null) {
       return error(ServerErrorCodes.InvalidFilePath, 'Invalid file path', path);
     }
-    return success(result!);
+    return success(result);
   }
 }
 
@@ -97,7 +97,7 @@
   Future<List<Response>> requestFromPlugins(
     String path,
     RequestParams params, {
-    int timeout = 500,
+    Duration timeout = const Duration(milliseconds: 500),
   }) {
     final driver = server.getAnalysisDriver(path);
     final pluginFutures = server.pluginManager.broadcastRequest(
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index 7098d09..d33a96e 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -265,7 +265,7 @@
   /// analyzed in one of the analysis drivers to which the file was added,
   /// otherwise in the first driver, otherwise `null` is returned.
   LineInfo? getLineInfo(String path) {
-    var result = getAnalysisDriver(path)?.getFileSync2(path);
+    var result = getAnalysisDriver(path)?.getFileSync(path);
     return result is FileResult ? result.lineInfo : null;
   }
 
diff --git a/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart b/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
index 1758d41..18b0a43 100644
--- a/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
@@ -21,6 +21,9 @@
   HighlightRegionType.DYNAMIC_PARAMETER_DECLARATION: {
     SemanticTokenModifiers.declaration
   },
+  HighlightRegionType.IMPORT_PREFIX: {
+    CustomSemanticTokenModifiers.importPrefix,
+  },
   HighlightRegionType.INSTANCE_FIELD_DECLARATION: {
     SemanticTokenModifiers.declaration
   },
@@ -81,6 +84,9 @@
 };
 
 /// A mapping from [HighlightRegionType] to [SemanticTokenTypes].
+///
+/// A description of the intended uses for each token type can be found here:
+/// https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide#semantic-token-classification
 final highlightRegionTokenTypes = {
   HighlightRegionType.ANNOTATION: CustomSemanticTokenTypes.annotation,
   HighlightRegionType.BUILT_IN: SemanticTokenTypes.keyword,
@@ -100,8 +106,9 @@
   HighlightRegionType.ENUM_CONSTANT: SemanticTokenTypes.enumMember,
   HighlightRegionType.FUNCTION_TYPE_ALIAS: SemanticTokenTypes.type,
   HighlightRegionType.IDENTIFIER_DEFAULT: CustomSemanticTokenTypes.source,
-  HighlightRegionType.INSTANCE_FIELD_DECLARATION: SemanticTokenTypes.variable,
-  HighlightRegionType.INSTANCE_FIELD_REFERENCE: SemanticTokenTypes.variable,
+  HighlightRegionType.IMPORT_PREFIX: SemanticTokenTypes.variable,
+  HighlightRegionType.INSTANCE_FIELD_DECLARATION: SemanticTokenTypes.property,
+  HighlightRegionType.INSTANCE_FIELD_REFERENCE: SemanticTokenTypes.property,
   HighlightRegionType.INSTANCE_GETTER_DECLARATION: SemanticTokenTypes.property,
   HighlightRegionType.INSTANCE_GETTER_REFERENCE: SemanticTokenTypes.property,
   HighlightRegionType.INSTANCE_METHOD_DECLARATION: SemanticTokenTypes.method,
@@ -122,7 +129,7 @@
   HighlightRegionType.LOCAL_VARIABLE_REFERENCE: SemanticTokenTypes.variable,
   HighlightRegionType.PARAMETER_DECLARATION: SemanticTokenTypes.parameter,
   HighlightRegionType.PARAMETER_REFERENCE: SemanticTokenTypes.parameter,
-  HighlightRegionType.STATIC_FIELD_DECLARATION: SemanticTokenTypes.variable,
+  HighlightRegionType.STATIC_FIELD_DECLARATION: SemanticTokenTypes.property,
   HighlightRegionType.STATIC_GETTER_DECLARATION: SemanticTokenTypes.property,
   HighlightRegionType.STATIC_GETTER_REFERENCE: SemanticTokenTypes.property,
   HighlightRegionType.STATIC_METHOD_DECLARATION: SemanticTokenTypes.method,
@@ -138,9 +145,9 @@
   HighlightRegionType.TOP_LEVEL_GETTER_REFERENCE: SemanticTokenTypes.property,
   HighlightRegionType.TOP_LEVEL_SETTER_DECLARATION: SemanticTokenTypes.property,
   HighlightRegionType.TOP_LEVEL_SETTER_REFERENCE: SemanticTokenTypes.property,
-  HighlightRegionType.TOP_LEVEL_VARIABLE: SemanticTokenTypes.variable,
+  HighlightRegionType.TOP_LEVEL_VARIABLE: SemanticTokenTypes.property,
   HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION:
-      SemanticTokenTypes.variable,
+      SemanticTokenTypes.property,
   HighlightRegionType.TYPE_ALIAS: SemanticTokenTypes.type,
   HighlightRegionType.TYPE_NAME_DYNAMIC: SemanticTokenTypes.type,
   HighlightRegionType.TYPE_PARAMETER: SemanticTokenTypes.typeParameter,
diff --git a/pkg/analysis_server/lib/src/lsp/source_edits.dart b/pkg/analysis_server/lib/src/lsp/source_edits.dart
index 3dd47bf..2a5834e 100644
--- a/pkg/analysis_server/lib/src/lsp/source_edits.dart
+++ b/pkg/analysis_server/lib/src/lsp/source_edits.dart
@@ -93,7 +93,7 @@
     }
     formattedResult = formatter.formatSource(code);
   } on FormatterException {
-    // If the document fails to parse, just return no edits to avoid the the
+    // If the document fails to parse, just return no edits to avoid the
     // use seeing edits on every save with invalid code (if LSP gains the
     // ability to pass a context to know if the format was manually invoked
     // we may wish to change this to return an error for that case).
@@ -167,7 +167,48 @@
     int formattedStart,
     int formattedEnd,
   ) {
+    final unformattedWhitespace =
+        unformatted.substring(unformattedStart, unformattedEnd);
+    final formattedWhitespace =
+        formatted.substring(formattedStart, formattedEnd);
+
     if (rangeStart != null && rangeEnd != null) {
+      // If this change crosses over the start of the requested range, discarding
+      // the change may result in leading whitespace of the next line not being
+      // formatted correctly.
+      //
+      // To handle this, if both unformatted/formatted contain at least one
+      // newline, split this change into two around the last newline so that the
+      // final part (likely leading whitespace) can be included without
+      // including the whole change.
+      //
+      // Without this, functionality like VS Code's "format modified lines"
+      // (which uses Git status to know which lines are edited) may appear to
+      // fail to format the first newly added line in a range.
+      if (unformattedStart < rangeStart.result &&
+          unformattedEnd > rangeStart.result &&
+          unformattedWhitespace.contains('\n') &&
+          formattedWhitespace.contains('\n')) {
+        // Find the offsets of the character after the last newlines.
+        final unformattedOffset = unformattedWhitespace.lastIndexOf('\n') + 1;
+        final formattedOffset = formattedWhitespace.lastIndexOf('\n') + 1;
+        // Call us again for the leading part
+        addEditFor(
+          unformattedStart,
+          unformattedStart + unformattedOffset,
+          formattedStart,
+          formattedStart + formattedOffset,
+        );
+        // Call us again for the trailing part
+        addEditFor(
+          unformattedStart + unformattedOffset,
+          unformattedEnd,
+          formattedStart + formattedOffset,
+          formattedEnd,
+        );
+        return;
+      }
+
       // If we're formatting only a range, skip over any segments that don't fall
       // entirely within that range.
       if (unformattedStart < rangeStart.result ||
@@ -176,11 +217,6 @@
       }
     }
 
-    final unformattedWhitespace =
-        unformatted.substring(unformattedStart, unformattedEnd);
-    final formattedWhitespace =
-        formatted.substring(formattedStart, formattedEnd);
-
     if (unformattedWhitespace == formattedWhitespace) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/plugin/result_merger.dart b/pkg/analysis_server/lib/src/plugin/result_merger.dart
index be59bb0..6e1257a 100644
--- a/pkg/analysis_server/lib/src/plugin/result_merger.dart
+++ b/pkg/analysis_server/lib/src/plugin/result_merger.dart
@@ -361,10 +361,10 @@
     }
     var elementMap = <Element, Set<int>>{};
     for (var partialResults in partialResultList) {
-      for (var occurances in partialResults) {
-        var element = occurances.element;
+      for (var occurrences in partialResults) {
+        var element = occurrences.element;
         var offsets = elementMap.putIfAbsent(element, () => HashSet<int>());
-        offsets.addAll(occurances.offsets);
+        offsets.addAll(occurrences.offsets);
       }
     }
     var mergedOccurrences = <Occurrences>[];
diff --git a/pkg/analysis_server/lib/src/provisional/completion/completion_core.dart b/pkg/analysis_server/lib/src/provisional/completion/completion_core.dart
index 542af9c..ebfe36f 100644
--- a/pkg/analysis_server/lib/src/provisional/completion/completion_core.dart
+++ b/pkg/analysis_server/lib/src/provisional/completion/completion_core.dart
@@ -2,10 +2,6 @@
 // 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/dart/analysis/results.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/source.dart';
-
 /// [AbortCompletion] is thrown when the current completion request
 /// should be aborted because either
 /// the source changed since the request was made, or
@@ -29,29 +25,3 @@
   insert,
   replace,
 }
-
-/// The information about a requested list of completions.
-///
-/// Clients may not extend, implement or mix-in this class.
-abstract class CompletionRequest {
-  /// Return the offset within the source at which the completion is being
-  /// requested.
-  int get offset;
-
-  /// Return the resource provider associated with this request.
-  ResourceProvider get resourceProvider;
-
-  /// The analysis result for the file in which the completion is being
-  /// requested.
-  ResolvedUnitResult get result;
-
-  /// Return the source in which the completion is being requested.
-  Source get source;
-
-  /// Return the content of the [source] in which the completion is being
-  /// requested, or `null` if the content could not be accessed.
-  String? get sourceContents;
-
-  /// Throw [AbortCompletion] if the completion request has been aborted.
-  void checkAborted();
-}
diff --git a/pkg/analysis_server/lib/src/provisional/completion/dart/completion_dart.dart b/pkg/analysis_server/lib/src/provisional/completion/dart/completion_dart.dart
index cf8cad0..69b06a8 100644
--- a/pkg/analysis_server/lib/src/provisional/completion/dart/completion_dart.dart
+++ b/pkg/analysis_server/lib/src/provisional/completion/dart/completion_dart.dart
@@ -2,93 +2,20 @@
 // 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:analysis_server/src/provisional/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/dart/feature_computer.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
-import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
-import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
 
 export 'package:analyzer_plugin/utilities/completion/relevance.dart';
 
 /// An object that contributes results for the `completion.getSuggestions`
 /// request results.
 abstract class DartCompletionContributor {
+  final DartCompletionRequest request;
+  final SuggestionBuilder builder;
+
+  DartCompletionContributor(this.request, this.builder);
+
   /// Return a [Future] that completes when the suggestions appropriate for the
   /// given completion [request] have been added to the [builder].
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder);
-}
-
-/// The information about a requested list of completions within a Dart file.
-///
-/// Clients may not extend, implement or mix-in this class.
-abstract class DartCompletionRequest extends CompletionRequest {
-  CompletionPreference get completionPreference;
-
-  /// Return the type imposed on the target's `containingNode` based on its
-  /// context, or `null` if the context does not impose any type.
-  DartType? get contextType;
-
-  /// Return the object used to resolve macros in Dartdoc comments.
-  DartdocDirectiveInfo get dartdocDirectiveInfo;
-
-  /// Return the expression to the right of the "dot" or "dot dot",
-  /// or `null` if this is not a "dot" completion (e.g. `foo.b`).
-  Expression? get dotTarget;
-
-  /// Return the object used to compute the values of the features used to
-  /// compute relevance scores for suggestions.
-  FeatureComputer get featureComputer;
-
-  /// Return the feature set that was used to analyze the compilation unit in
-  /// which suggestions are being made.
-  FeatureSet get featureSet;
-
-  /// Return `true` if free standing identifiers should be suggested
-  bool get includeIdentifiers;
-
-  /// Return `true` if the completion is occurring in a constant context.
-  bool get inConstantContext;
-
-  /// Return the library element which contains the unit in which the completion
-  /// is occurring. This may return `null` if the library cannot be determined
-  /// (e.g. unlinked part file).
-  LibraryElement? get libraryElement;
-
-  /// The source for the library containing the completion request.
-  /// This may be different from the source in which the completion is requested
-  /// if the completion is being requested in a part file.
-  /// This may be `null` if the library for a part file cannot be determined.
-  Source? get librarySource;
-
-  /// Answer the [DartType] for Object in dart:core
-  DartType get objectType;
-
-  /// The [OpType] which describes which types of suggestions would fit the
-  /// request.
-  OpType get opType;
-
-  /// The source range that represents the region of text that should be
-  /// replaced when a suggestion is selected.
-  SourceRange get replacementRange;
-
-  /// Return the [SourceFactory] of the request.
-  SourceFactory get sourceFactory;
-
-  /// Return the completion target.  This determines what part of the parse tree
-  /// will receive the newly inserted text.
-  /// At a minimum, all declarations in the completion scope in [target.unit]
-  /// will be resolved if they can be resolved.
-  CompletionTarget get target;
-
-  /// Return prefix that already exists in the document for [target] or empty
-  /// string if unavailable. This can be used to filter the completion list to
-  /// items that already match the text to the left of the caret.
-  String get targetPrefix;
+  Future<void> computeSuggestions();
 }
diff --git a/pkg/analysis_server/lib/src/search/type_hierarchy.dart b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
index 988f96a..4877ec5 100644
--- a/pkg/analysis_server/lib/src/search/type_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
@@ -52,7 +52,19 @@
     var pivotClass = _pivotClass;
     if (pivotClass != null) {
       _createSuperItem(pivotClass, null);
+      var superLength = _items.length;
       await _createSubclasses(_items[0], 0, pivotClass);
+
+      // sort subclasses only
+      if (_items.length > superLength + 1) {
+        var subList = _items.sublist(superLength);
+        subList
+            .sort((a, b) => a.classElement.name.compareTo(b.classElement.name));
+        for (var i = 0; i < subList.length; i++) {
+          _items[i + superLength] = subList[i];
+        }
+      }
+
       return _items;
     }
     return null;
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_core.dart b/pkg/analysis_server/lib/src/services/completion/completion_core.dart
deleted file mode 100644
index d6fe971..0000000
--- a/pkg/analysis_server/lib/src/services/completion/completion_core.dart
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2015, 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:analysis_server/src/provisional/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/completion_performance.dart';
-import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/source.dart';
-
-/// The information about a requested list of completions.
-class CompletionRequestImpl implements CompletionRequest {
-  @override
-  final ResolvedUnitResult result;
-
-  @override
-  final int offset;
-
-  /// The offset of the start of the text to be replaced.
-  /// This will be different than the [offset] used to request the completion
-  /// suggestions if there was a portion of an identifier before the original
-  /// [offset]. In particular, the [replacementOffset] will be the offset of the
-  /// beginning of said identifier.
-  int replacementOffset;
-
-  /// The length of the text to be replaced if the remainder of the identifier
-  /// containing the cursor is to be replaced when the suggestion is applied
-  /// (that is, the number of characters in the existing identifier).
-  /// This will be different than the [replacementOffset] - [offset]
-  /// if the [offset] is in the middle of an existing identifier.
-  int replacementLength;
-
-  bool _aborted = false;
-
-  final CompletionPerformance performance;
-
-  /// Initialize a newly created completion request based on the given
-  /// arguments.
-  CompletionRequestImpl(this.result, this.offset, this.performance)
-      : replacementOffset = offset,
-        replacementLength = 0;
-
-  @override
-  ResourceProvider get resourceProvider => result.session.resourceProvider;
-
-  @override
-  Source get source => result.unit.declaredElement!.source;
-
-  @override
-  String? get sourceContents => result.content;
-
-  /// Abort the current completion request.
-  void abort() {
-    _aborted = true;
-  }
-
-  @override
-  void checkAborted() {
-    if (_aborted) {
-      throw AbortCompletion();
-    }
-  }
-}
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
index 05f7592..a6ff620 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/provisional/completion/completion_core.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/utilities/flutter.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -14,20 +15,18 @@
 /// A contributor that produces suggestions for named expression labels that
 /// correspond to named parameters when completing in argument lists.
 class ArgListContributor extends DartCompletionContributor {
-  /// The request that is currently being handled.
-  late DartCompletionRequest request;
-
-  /// The suggestion builder used to build suggestions.
-  late SuggestionBuilder builder;
-
   /// The argument list that is the containing node of the target, or `null` if
   /// the containing node of the target is not an argument list (such as when
   /// it's a named expression).
   ArgumentList? argumentList;
 
+  ArgListContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var parameters = request.target.executableElement?.parameters ??
         request.target.functionType?.parameters;
     if (parameters == null) {
@@ -39,8 +38,6 @@
       argumentList = node;
     }
 
-    this.request = request;
-    this.builder = builder;
     _addSuggestions(parameters);
   }
 
@@ -66,8 +63,8 @@
     // suppress inserting colons/commas. We check only replacing _after_ the
     // caret as some replacements (before) will still want colons, for example:
     //     foo(mySt^'bar');
-    var replacementEnd = request.replacementRange.offset +
-        (replacementLength ?? request.replacementRange.length);
+    var replacementEnd = request.replacementOffset +
+        (replacementLength ?? request.replacementLength);
     var willReplace =
         request.completionPreference == CompletionPreference.replace &&
             replacementEnd > request.offset;
@@ -109,7 +106,7 @@
         // not be replaced.
         var replacementLength =
             request.offset == request.target.entity?.offset &&
-                    request.replacementRange.length != 0
+                    request.replacementLength != 0
                 ? 0
                 : null;
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/combinator_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/combinator_contributor.dart
index 12fe155..7acb058 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/combinator_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/combinator_contributor.dart
@@ -5,15 +5,20 @@
 import 'package:analysis_server/src/protocol_server.dart'
     hide Element, ElementKind;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 
 /// A contributor that produces suggestions based on the members of a library
 /// when the completion is in a show or hide combinator of an import or export.
 class CombinatorContributor extends DartCompletionContributor {
+  CombinatorContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var node = request.target.containingNode;
     if (node is! Combinator) {
       return;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index cec2be3..78fef2f 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -5,8 +5,6 @@
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/provisional/completion/completion_core.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
-import 'package:analysis_server/src/services/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/combinator_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/documentation_cache.dart';
@@ -21,6 +19,7 @@
 import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/local_reference_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/named_constructor_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/not_imported_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/override_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/redirecting_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/relevance_tables.g.dart';
@@ -46,11 +45,30 @@
 import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
 import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
 
+/// Class that tracks how much time budget we have left.
+class CompletionBudget {
+  static const Duration defaultDuration = Duration(milliseconds: 100);
+
+  final Duration _budget;
+  final Stopwatch _timer = Stopwatch()..start();
+
+  CompletionBudget(this._budget);
+
+  bool get isEmpty {
+    return _timer.elapsed > _budget;
+  }
+
+  Duration get left {
+    var result = _budget - _timer.elapsed;
+    return result.isNegative ? Duration.zero : result;
+  }
+}
+
 /// [DartCompletionManager] determines if a completion request is Dart specific
 /// and forwards those requests to all [DartCompletionContributor]s.
 class DartCompletionManager {
-  /// The object used to resolve macros in Dartdoc comments.
-  final DartdocDirectiveInfo? dartdocDirectiveInfo;
+  /// Time budget to computing suggestions.
+  final CompletionBudget budget;
 
   /// If not `null`, then instead of using [ImportedReferenceContributor],
   /// fill this set with kinds of elements that are applicable at the
@@ -72,17 +90,23 @@
   /// suggestions, or `null` if no notification should occur.
   final SuggestionListener? listener;
 
+  /// If specified, will be filled with URIs of libraries that are not yet
+  /// imported, but could be imported into the requested target. Corresponding
+  /// [CompletionSuggestion] will have the import index into this list.
+  final List<Uri>? librariesToImport;
+
   /// Initialize a newly created completion manager. The parameters
   /// [includedElementKinds], [includedElementNames], and
   /// [includedSuggestionRelevanceTags] must either all be `null` or must all be
   /// non-`null`.
-  DartCompletionManager(
-      {this.dartdocDirectiveInfo,
-      this.includedElementKinds,
-      this.includedElementNames,
-      this.includedSuggestionRelevanceTags,
-      this.listener})
-      : assert((includedElementKinds != null &&
+  DartCompletionManager({
+    required this.budget,
+    this.includedElementKinds,
+    this.includedElementNames,
+    this.includedSuggestionRelevanceTags,
+    this.listener,
+    this.librariesToImport,
+  }) : assert((includedElementKinds != null &&
                 includedElementNames != null &&
                 includedSuggestionRelevanceTags != null) ||
             (includedElementKinds == null &&
@@ -90,12 +114,10 @@
                 includedSuggestionRelevanceTags == null));
 
   Future<List<CompletionSuggestion>> computeSuggestions(
-    OperationPerformanceImpl performance,
-    CompletionRequest request, {
+    DartCompletionRequest request,
+    OperationPerformanceImpl performance, {
     bool enableOverrideContributor = true,
     bool enableUriContributor = true,
-    CompletionPreference? completionPreference,
-    DocumentationCache? documentationCache,
   }) async {
     request.checkAborted();
     var pathContext = request.resourceProvider.pathContext;
@@ -103,53 +125,49 @@
       return const <CompletionSuggestion>[];
     }
 
-    var dartRequest = await DartCompletionRequestImpl.from(
-      performance,
-      request,
-      dartdocDirectiveInfo,
-      completionPreference: completionPreference,
-      documentationCache: documentationCache,
-    );
-
     // Don't suggest in comments.
-    if (dartRequest.target.isCommentText) {
+    if (request.target.isCommentText) {
       return const <CompletionSuggestion>[];
     }
 
     request.checkAborted();
 
-    var range = dartRequest.replacementRange;
-    (request as CompletionRequestImpl)
-      ..replacementOffset = range.offset
-      ..replacementLength = range.length;
-
     // Request Dart specific completions from each contributor
-    var builder = SuggestionBuilder(dartRequest, listener: listener);
+    var builder = SuggestionBuilder(request, listener: listener);
     var contributors = <DartCompletionContributor>[
-      ArgListContributor(),
-      CombinatorContributor(),
-      ExtensionMemberContributor(),
-      FieldFormalContributor(),
-      KeywordContributor(),
-      LabelContributor(),
-      LibraryMemberContributor(),
-      LibraryPrefixContributor(),
-      LocalLibraryContributor(),
-      LocalReferenceContributor(),
-      NamedConstructorContributor(),
-      if (enableOverrideContributor) OverrideContributor(),
-      RedirectingContributor(),
-      StaticMemberContributor(),
-      TypeMemberContributor(),
-      if (enableUriContributor) UriContributor(),
-      VariableNameContributor()
+      ArgListContributor(request, builder),
+      CombinatorContributor(request, builder),
+      ExtensionMemberContributor(request, builder),
+      FieldFormalContributor(request, builder),
+      KeywordContributor(request, builder),
+      LabelContributor(request, builder),
+      LibraryMemberContributor(request, builder),
+      LibraryPrefixContributor(request, builder),
+      LocalLibraryContributor(request, builder),
+      LocalReferenceContributor(request, builder),
+      NamedConstructorContributor(request, builder),
+      if (enableOverrideContributor) OverrideContributor(request, builder),
+      RedirectingContributor(request, builder),
+      StaticMemberContributor(request, builder),
+      TypeMemberContributor(request, builder),
+      if (enableUriContributor) UriContributor(request, builder),
+      VariableNameContributor(request, builder),
     ];
 
     if (includedElementKinds != null) {
-      _addIncludedElementKinds(dartRequest);
-      _addIncludedSuggestionRelevanceTags(dartRequest);
+      _addIncludedElementKinds(request);
+      _addIncludedSuggestionRelevanceTags(request);
     } else {
-      contributors.add(ImportedReferenceContributor());
+      contributors.add(
+        ImportedReferenceContributor(request, builder),
+      );
+    }
+
+    final librariesToImport = this.librariesToImport;
+    if (librariesToImport != null) {
+      contributors.add(
+        NotImportedContributor(request, builder, budget, librariesToImport),
+      );
     }
 
     try {
@@ -157,7 +175,7 @@
         await performance.runAsync(
           'DartCompletionManager - ${contributor.runtimeType}',
           (_) async {
-            await contributor.computeSuggestions(dartRequest, builder);
+            await contributor.computeSuggestions();
           },
         );
         request.checkAborted();
@@ -171,7 +189,7 @@
     return builder.suggestions.toList();
   }
 
-  void _addIncludedElementKinds(DartCompletionRequestImpl request) {
+  void _addIncludedElementKinds(DartCompletionRequest request) {
     var opType = request.opType;
 
     if (!opType.includeIdentifiers) return;
@@ -204,7 +222,7 @@
     }
   }
 
-  void _addIncludedSuggestionRelevanceTags(DartCompletionRequestImpl request) {
+  void _addIncludedSuggestionRelevanceTags(DartCompletionRequest request) {
     final includedSuggestionRelevanceTags =
         this.includedSuggestionRelevanceTags!;
     var location = request.opType.completionLocation;
@@ -255,137 +273,154 @@
 }
 
 /// The information about a requested list of completions within a Dart file.
-class DartCompletionRequestImpl implements DartCompletionRequest {
-  @override
-  final ResolvedUnitResult result;
-
-  @override
-  final ResourceProvider resourceProvider;
-
-  @override
-  final InterfaceType objectType;
-
-  @override
-  final Source source;
-
-  @override
-  final int offset;
-
-  @override
-  Expression? dotTarget;
-
-  @override
-  final Source librarySource;
-
-  @override
-  late CompletionTarget target;
-
-  OpType? _opType;
-
-  @override
-  final FeatureComputer featureComputer;
-
-  @override
-  final DartdocDirectiveInfo dartdocDirectiveInfo;
-
-  /// A flag indicating whether the [_contextType] has been computed.
-  bool _hasComputedContextType = false;
-
-  /// The context type associated with the target's `containingNode`.
-  DartType? _contextType;
-
-  final CompletionRequest _originalRequest;
-
-  final CompletionPerformance performance;
-
-  SourceRange? _replacementRange;
-
-  @override
+class DartCompletionRequest {
   final CompletionPreference completionPreference;
 
+  /// Return the type imposed on the target's `containingNode` based on its
+  /// context, or `null` if the context does not impose any type.
+  final DartType? contextType;
+
+  /// Return the object used to resolve macros in Dartdoc comments.
+  final DartdocDirectiveInfo dartdocDirectiveInfo;
+
   final DocumentationCache? documentationCache;
 
-  DartCompletionRequestImpl._(
-      this.result,
-      this.resourceProvider,
-      this.objectType,
-      this.librarySource,
-      this.source,
-      this.offset,
-      CompilationUnit unit,
-      this.dartdocDirectiveInfo,
-      this._originalRequest,
-      this.performance,
-      {CompletionPreference? completionPreference,
-      this.documentationCache})
-      : featureComputer =
-            FeatureComputer(result.typeSystem, result.typeProvider),
-        completionPreference =
-            completionPreference ?? CompletionPreference.insert {
-    _updateTargets(unit);
-  }
+  /// Return the object used to compute the values of the features used to
+  /// compute relevance scores for suggestions.
+  final FeatureComputer featureComputer;
 
-  @override
-  DartType? get contextType {
-    if (!_hasComputedContextType) {
-      _contextType = featureComputer.computeContextType(
-          target.containingNode, target.offset);
-      _hasComputedContextType = true;
+  /// Return the offset within the source at which the completion is being
+  /// requested.
+  final int offset;
+
+  /// The [OpType] which describes which types of suggestions would fit the
+  /// request.
+  final OpType opType;
+
+  /// The source range that represents the region of text that should be
+  /// replaced when a suggestion is selected.
+  final SourceRange replacementRange;
+
+  /// The analysis result for the file in which the completion is being
+  /// requested.
+  final ResolvedUnitResult result;
+
+  /// Return the source in which the completion is being requested.
+  final Source source;
+
+  /// Return the completion target.  This determines what part of the parse tree
+  /// will receive the newly inserted text.
+  /// At a minimum, all declarations in the completion scope in [target.unit]
+  /// will be resolved if they can be resolved.
+  final CompletionTarget target;
+
+  bool _aborted = false;
+
+  factory DartCompletionRequest({
+    required ResolvedUnitResult resolvedUnit,
+    required int offset,
+    DartdocDirectiveInfo? dartdocDirectiveInfo,
+    CompletionPreference completionPreference = CompletionPreference.insert,
+    DocumentationCache? documentationCache,
+  }) {
+    var target = CompletionTarget.forOffset(resolvedUnit.unit, offset);
+
+    var featureComputer = FeatureComputer(
+      resolvedUnit.typeSystem,
+      resolvedUnit.typeProvider,
+    );
+
+    var contextType = featureComputer.computeContextType(
+      target.containingNode,
+      offset,
+    );
+
+    var opType = OpType.forCompletion(target, offset);
+    if (contextType != null && contextType.isVoid) {
+      opType.includeVoidReturnSuggestions = true;
     }
-    return _contextType;
+
+    return DartCompletionRequest._(
+      completionPreference: completionPreference,
+      contextType: contextType,
+      dartdocDirectiveInfo: dartdocDirectiveInfo ?? DartdocDirectiveInfo(),
+      documentationCache: documentationCache,
+      featureComputer: featureComputer,
+      offset: offset,
+      opType: opType,
+      replacementRange: target.computeReplacementRange(offset),
+      result: resolvedUnit,
+      source: resolvedUnit.unit.declaredElement!.source,
+      target: target,
+    );
   }
 
-  @override
-  FeatureSet get featureSet => result.libraryElement.featureSet;
+  DartCompletionRequest._({
+    required this.completionPreference,
+    required this.contextType,
+    required this.dartdocDirectiveInfo,
+    required this.documentationCache,
+    required this.featureComputer,
+    required this.offset,
+    required this.opType,
+    required this.replacementRange,
+    required this.result,
+    required this.source,
+    required this.target,
+  });
 
-  @override
+  /// Return the feature set that was used to analyze the compilation unit in
+  /// which suggestions are being made.
+  FeatureSet get featureSet => libraryElement.featureSet;
+
+  /// Return `true` if free standing identifiers should be suggested
   bool get includeIdentifiers {
     return opType.includeIdentifiers;
   }
 
-  @override
+  /// Return `true` if the completion is occurring in a constant context.
   bool get inConstantContext {
     var entity = target.entity;
     return entity is Expression && entity.inConstantContext;
   }
 
-  @override
+  /// Return the library element which contains the unit in which the completion
+  /// is occurring.
   LibraryElement get libraryElement => result.libraryElement;
 
-  @override
-  OpType get opType {
-    var opType = _opType;
-    if (opType == null) {
-      opType = OpType.forCompletion(target, offset);
-      var contextType = this.contextType;
-      if (contextType is FunctionType) {
-        contextType = contextType.returnType;
-      }
-      if (contextType != null && contextType.isVoid) {
-        opType.includeVoidReturnSuggestions = true;
-      }
-      _opType = opType;
-    }
-    return opType;
-  }
+  /// Answer the [DartType] for Object in dart:core
+  DartType get objectType => libraryElement.typeProvider.objectType;
 
-  /// The source range that represents the region of text that should be
-  /// replaced when a suggestion is selected.
-  @override
-  SourceRange get replacementRange {
-    return _replacementRange ??= target.computeReplacementRange(offset);
-  }
+  /// The length of the text to be replaced if the remainder of the identifier
+  /// containing the cursor is to be replaced when the suggestion is applied
+  /// (that is, the number of characters in the existing identifier).
+  /// This will be different than the [replacementOffset] - [offset]
+  /// if the [offset] is in the middle of an existing identifier.
+  int get replacementLength => replacementRange.length;
 
-  @override
+  /// The offset of the start of the text to be replaced.
+  /// This will be different than the [offset] used to request the completion
+  /// suggestions if there was a portion of an identifier before the original
+  /// [offset]. In particular, the [replacementOffset] will be the offset of the
+  /// beginning of said identifier.
+  int get replacementOffset => replacementRange.offset;
+
+  /// Return the resource provider associated with this request.
+  ResourceProvider get resourceProvider => result.session.resourceProvider;
+
+  /// Return the content of the [source] in which the completion is being
+  /// requested, or `null` if the content could not be accessed.
   String? get sourceContents => result.content;
 
-  @override
+  /// Return the [SourceFactory] of the request.
   SourceFactory get sourceFactory {
     var context = result.session.analysisContext as DriverBasedAnalysisContext;
     return context.driver.sourceFactory;
   }
 
-  @override
+  /// Return prefix that already exists in the document for [target] or empty
+  /// string if unavailable. This can be used to filter the completion list to
+  /// items that already match the text to the left of the caret.
   String get targetPrefix {
     var entity = target.entity;
 
@@ -411,73 +446,15 @@
     return '';
   }
 
+  /// Abort the current completion request.
+  void abort() {
+    _aborted = true;
+  }
+
   /// Throw [AbortCompletion] if the completion request has been aborted.
-  @override
   void checkAborted() {
-    _originalRequest.checkAborted();
-  }
-
-  /// Update the completion [target] and [dotTarget] based on the given [unit].
-  void _updateTargets(CompilationUnit unit) {
-    _opType = null;
-    dotTarget = null;
-    target = CompletionTarget.forOffset(unit, offset);
-    var node = target.containingNode;
-    if (node is MethodInvocation) {
-      if (identical(node.methodName, target.entity)) {
-        dotTarget = node.realTarget;
-      } else if (node.isCascaded &&
-          node.operator!.offset + 1 == target.offset) {
-        dotTarget = node.realTarget;
-      }
+    if (_aborted) {
+      throw AbortCompletion();
     }
-    if (node is PropertyAccess) {
-      if (identical(node.propertyName, target.entity)) {
-        dotTarget = node.realTarget;
-      } else if (node.isCascaded && node.operator.offset + 1 == target.offset) {
-        dotTarget = node.realTarget;
-      }
-    }
-    if (node is PrefixedIdentifier) {
-      if (identical(node.identifier, target.entity)) {
-        dotTarget = node.prefix;
-      }
-    }
-  }
-
-  /// Return a [Future] that completes with a newly created completion request
-  /// based on the given [request]. This method will throw [AbortCompletion]
-  /// if the completion request has been aborted.
-  static Future<DartCompletionRequestImpl> from(
-      OperationPerformanceImpl performance,
-      CompletionRequest request,
-      DartdocDirectiveInfo? dartdocDirectiveInfo,
-      {CompletionPreference? completionPreference,
-      DocumentationCache? documentationCache}) async {
-    request.checkAborted();
-
-    return performance.run(
-      'build DartCompletionRequest',
-      (_) {
-        var unit = request.result.unit;
-        var libSource = unit.declaredElement!.library.source;
-        var objectType = request.result.typeProvider.objectType;
-
-        return DartCompletionRequestImpl._(
-          request.result,
-          request.resourceProvider,
-          objectType,
-          libSource,
-          request.source,
-          request.offset,
-          unit,
-          dartdocDirectiveInfo ?? DartdocDirectiveInfo(),
-          request,
-          (request as CompletionRequestImpl).performance,
-          completionPreference: completionPreference,
-          documentationCache: documentationCache,
-        );
-      },
-    );
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
index d635651..aa75988 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/protocol_server.dart'
     show CompletionSuggestionKind;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/utilities/extensions/element.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -14,26 +15,22 @@
 /// A contributor that produces suggestions based on the members of an
 /// extension.
 class ExtensionMemberContributor extends DartCompletionContributor {
-  late MemberSuggestionBuilder memberBuilder;
+  late final memberBuilder = MemberSuggestionBuilder(request, builder);
 
-  @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  ExtensionMemberContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
+  void addExtensions(List<ExtensionElement> extensions) {
     var containingLibrary = request.libraryElement;
-    // Gracefully degrade if the library could not be determined, such as with a
-    // detached part file or source change.
-    if (containingLibrary == null) {
-      return;
-    }
-
-    memberBuilder = MemberSuggestionBuilder(request, builder);
 
     var defaultKind = request.target.isFunctionalArgument()
         ? CompletionSuggestionKind.IDENTIFIER
         : request.opType.suggestKind;
 
     // Recompute the target because resolution might have changed it.
-    var expression = request.dotTarget;
+    var expression = request.target.dotTarget;
 
     if (expression == null) {
       if (!request.includeIdentifiers) {
@@ -45,7 +42,7 @@
       if (classOrMixin != null) {
         var type = classOrMixin.declaredElement?.thisType;
         if (type != null) {
-          _addExtensionMembers(containingLibrary, defaultKind, type);
+          _addExtensionMembers(extensions, defaultKind, type);
         }
       } else {
         var extension = request.target.containingNode
@@ -60,7 +57,7 @@
                       extendedType.element, type.element);
               _addTypeMembers(type, defaultKind, inheritanceDistance);
             }
-            _addExtensionMembers(containingLibrary, defaultKind, extendedType);
+            _addExtensionMembers(extensions, defaultKind, extendedType);
           }
         }
       }
@@ -104,15 +101,23 @@
         // invoked on a non-null value.
         type = containingLibrary.typeSystem.promoteToNonNull(type);
       }
-      _addExtensionMembers(containingLibrary, defaultKind, type);
+      _addExtensionMembers(extensions, defaultKind, type);
       expression.staticType;
     }
   }
 
-  void _addExtensionMembers(LibraryElement containingLibrary,
+  @override
+  Future<void> computeSuggestions() async {
+    addExtensions(
+      request.libraryElement.accessibleExtensions,
+    );
+  }
+
+  void _addExtensionMembers(List<ExtensionElement> extensions,
       CompletionSuggestionKind? kind, DartType type) {
+    var containingLibrary = request.libraryElement;
     var typeSystem = containingLibrary.typeSystem;
-    for (var extension in containingLibrary.accessibleExtensions) {
+    for (var extension in extensions) {
       var extendedType =
           extension.resolvedExtendedType(containingLibrary, type);
       if (extendedType != null && typeSystem.isSubtypeOf(type, extendedType)) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
index 722a3f4..1dd0f73 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
@@ -652,6 +652,16 @@
   }
 
   @override
+  DartType? visitConstructorName(ConstructorName node) {
+    return _visitParent(node);
+  }
+
+  @override
+  DartType? visitConstructorReference(ConstructorReference node) {
+    return _visitParent(node);
+  }
+
+  @override
   DartType? visitDefaultFormalParameter(DefaultFormalParameter node) {
     var separator = node.separator;
     if (separator != null && separator.end <= offset) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
index e722f99..daa7ef1 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -12,9 +13,13 @@
 /// already initialized. More concretely, this class produces suggestions for
 /// expressions of the form `this.^` in a constructor's parameter list.
 class FieldFormalContributor extends DartCompletionContributor {
+  FieldFormalContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var node = request.target.containingNode;
     // TODO(brianwilkerson) We should suggest field formal parameters even if
     //  the user hasn't already typed the `this.` prefix, by including the
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/fuzzy_filter_sort.dart b/pkg/analysis_server/lib/src/services/completion/dart/fuzzy_filter_sort.dart
new file mode 100644
index 0000000..4408a7a
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/completion/dart/fuzzy_filter_sort.dart
@@ -0,0 +1,60 @@
+// Copyright (c) 2021, 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:analysis_server/src/protocol_server.dart';
+import 'package:analysis_server/src/services/completion/filtering/fuzzy_matcher.dart';
+
+/// Filters and scores [suggestions] according to how well they match the
+/// [pattern]. Sorts [suggestions] by the score, relevance, and name.
+List<CompletionSuggestion> fuzzyFilterSort({
+  required String pattern,
+  required List<CompletionSuggestion> suggestions,
+}) {
+  var matcher = FuzzyMatcher(pattern, matchStyle: MatchStyle.SYMBOL);
+
+  double score(CompletionSuggestion suggestion) {
+    var suggestionTextToMatch = suggestion.completion;
+
+    if (suggestion.kind == CompletionSuggestionKind.NAMED_ARGUMENT) {
+      var index = suggestionTextToMatch.indexOf(':');
+      if (index != -1) {
+        suggestionTextToMatch = suggestionTextToMatch.substring(0, index);
+      }
+    }
+
+    return matcher.score(suggestionTextToMatch);
+  }
+
+  var scored = suggestions
+      .map((e) => _FuzzyScoredSuggestion(e, score(e)))
+      .where((e) => e.score > 0)
+      .toList();
+
+  scored.sort((a, b) {
+    // Prefer what the user requested by typing.
+    if (a.score > b.score) {
+      return -1;
+    } else if (a.score < b.score) {
+      return 1;
+    }
+
+    // Then prefer what is more relevant in the context.
+    if (a.suggestion.relevance != b.suggestion.relevance) {
+      return b.suggestion.relevance - a.suggestion.relevance;
+    }
+
+    // Other things being equal, sort by name.
+    return a.suggestion.completion.compareTo(b.suggestion.completion);
+  });
+
+  return scored.map((e) => e.suggestion).toList();
+}
+
+/// [CompletionSuggestion] scored using [FuzzyMatcher].
+class _FuzzyScoredSuggestion {
+  final CompletionSuggestion suggestion;
+  final double score;
+
+  _FuzzyScoredSuggestion(this.suggestion, this.score);
+}
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
index 4f7d07c..3277593 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart'
     show SuggestionBuilder;
@@ -10,23 +11,23 @@
 
 /// A contributor for calculating suggestions for imported top level members.
 class ImportedReferenceContributor extends DartCompletionContributor {
+  ImportedReferenceContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     if (!request.includeIdentifiers) {
       return;
     }
 
-    var imports = request.libraryElement?.imports;
-    if (imports == null) {
-      return;
-    }
-
     // Traverse imports including dart:core
+    var imports = request.libraryElement.imports;
     for (var importElement in imports) {
       var libraryElement = importElement.importedLibrary;
       if (libraryElement != null) {
-        _buildSuggestions(request, builder, importElement.namespace,
+        _buildSuggestions(importElement.namespace,
             prefix: importElement.prefix?.name);
         if (libraryElement.isDartCore &&
             request.opType.includeTypeNameSuggestions) {
@@ -36,9 +37,7 @@
     }
   }
 
-  void _buildSuggestions(DartCompletionRequest request,
-      SuggestionBuilder builder, Namespace namespace,
-      {String? prefix}) {
+  void _buildSuggestions(Namespace namespace, {String? prefix}) {
     var visitor = LibraryElementSuggestionBuilder(request, builder, prefix);
     for (var elem in namespace.definedNames.values) {
       elem.accept(visitor);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 268064a..864f1f9 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -27,9 +27,13 @@
 /// A contributor that produces suggestions based on the set of keywords that
 /// are valid at the completion point.
 class KeywordContributor extends DartCompletionContributor {
+  KeywordContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     // Don't suggest anything right after double or integer literals.
     if (request.target.isDoubleOrIntLiteral()) {
       return;
@@ -52,10 +56,8 @@
 
   @override
   void visitArgumentList(ArgumentList node) {
-    if (request is DartCompletionRequestImpl) {
-      if (request.opType.includeOnlyNamedArgumentSuggestions) {
-        return;
-      }
+    if (request.opType.includeOnlyNamedArgumentSuggestions) {
+      return;
     }
     final entity = this.entity;
     if (entity == node.rightParenthesis) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
index 9434271..9933db4 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
@@ -4,7 +4,7 @@
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart'
-    show DartCompletionRequestImpl;
+    show DartCompletionRequest;
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer_plugin/src/utilities/visitors/local_declaration_visitor.dart'
@@ -14,10 +14,14 @@
 /// scope. More concretely, this class produces completions in `break` and
 /// `continue` statements.
 class LabelContributor extends DartCompletionContributor {
+  LabelContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
-    var optype = (request as DartCompletionRequestImpl).opType;
+  Future<void> computeSuggestions() async {
+    var optype = request.opType;
 
     // Collect suggestions from the specific child [AstNode] that contains
     // the completion offset and all of its parents recursively.
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
index 975d96c..d9675cb 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/protocol_server.dart'
     show CompletionSuggestionKind;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -14,30 +15,25 @@
 /// produces suggestions for expressions of the form `p.^`, where `p` is a
 /// prefix.
 class LibraryMemberContributor extends DartCompletionContributor {
+  LibraryMemberContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     // Determine if the target looks like a library prefix.
-    var targetId = request.dotTarget;
+    var targetId = request.target.dotTarget;
     if (targetId is SimpleIdentifier && !request.target.isCascade) {
       var elem = targetId.staticElement;
       if (elem is PrefixElement && !elem.isSynthetic) {
-        var containingLibrary = request.libraryElement;
-        // Gracefully degrade if the library or directives could not be
-        // determined (e.g. detached part file or source change).
-        if (containingLibrary != null) {
-          var imports = containingLibrary.imports;
-          _buildSuggestions(request, builder, elem, imports);
-        }
+        var imports = request.libraryElement.imports;
+        _buildSuggestions(elem, imports);
       }
     }
   }
 
-  void _buildSuggestions(
-      DartCompletionRequest request,
-      SuggestionBuilder builder,
-      PrefixElement elem,
-      List<ImportElement> imports) {
+  void _buildSuggestions(PrefixElement elem, List<ImportElement> imports) {
     var parent = request.target.containingNode.parent;
     var typesOnly = parent is NamedType;
     var isConstructor = parent?.parent is ConstructorName;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/library_prefix_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/library_prefix_contributor.dart
index d8a09fb..09900cf 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/library_prefix_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/library_prefix_contributor.dart
@@ -3,23 +3,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 
 /// A contributor that produces suggestions based on the prefixes defined on
 /// import directives.
 class LibraryPrefixContributor extends DartCompletionContributor {
+  LibraryPrefixContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     if (!request.includeIdentifiers) {
       return;
     }
 
-    var imports = request.libraryElement?.imports;
-    if (imports == null) {
-      return;
-    }
-
+    var imports = request.libraryElement.imports;
     for (var element in imports) {
       var prefix = element.prefix?.name;
       if (prefix != null && prefix.isNotEmpty) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
index f14d554..734a36e 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/protocol_server.dart'
     show CompletionSuggestionKind;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart'
     show SuggestionBuilder;
 import 'package:analyzer/dart/element/element.dart';
@@ -151,9 +152,13 @@
 /// the library in which the completion is requested but outside the file in
 /// which the completion is requested.
 class LocalLibraryContributor extends DartCompletionContributor {
+  LocalLibraryContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     if (!request.includeIdentifiers) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index b97e431..ca8280c 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/protocol_server.dart'
     show CompletionSuggestionKind;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -31,9 +32,13 @@
   /// been shadowed by local declarations.
   _VisibilityTracker visibilityTracker = _VisibilityTracker();
 
+  LocalReferenceContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var opType = request.opType;
     AstNode? node = request.target.containingNode;
 
@@ -85,15 +90,14 @@
           var declaredElement = classOrMixin.declaredElement;
           if (declaredElement != null) {
             memberBuilder = MemberSuggestionBuilder(request, builder);
-            _computeSuggestionsForClass(declaredElement, request);
+            _computeSuggestionsForClass(declaredElement);
           }
         }
       }
     }
   }
 
-  void _addSuggestionsForType(InterfaceType type, DartCompletionRequest request,
-      double inheritanceDistance,
+  void _addSuggestionsForType(InterfaceType type, double inheritanceDistance,
       {bool isFunctionalArgument = false}) {
     var opType = request.opType;
     if (!isFunctionalArgument) {
@@ -134,8 +138,7 @@
     }
   }
 
-  void _computeSuggestionsForClass(
-      ClassElement classElement, DartCompletionRequest request) {
+  void _computeSuggestionsForClass(ClassElement classElement) {
     var isFunctionalArgument = request.target.isFunctionalArgument();
     classMemberSuggestionKind = isFunctionalArgument
         ? CompletionSuggestionKind.IDENTIFIER
@@ -143,7 +146,7 @@
     for (var type in classElement.allSupertypes) {
       var inheritanceDistance = request.featureComputer
           .inheritanceDistanceFeature(classElement, type.element);
-      _addSuggestionsForType(type, request, inheritanceDistance,
+      _addSuggestionsForType(type, inheritanceDistance,
           isFunctionalArgument: isFunctionalArgument);
     }
   }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
index e00de9c..51853fe 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
@@ -2,46 +2,63 @@
 // 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:analysis_server/src/protocol_server.dart' as protocol;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
+import 'package:analysis_server/src/utilities/extensions/completion_request.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
 
 /// A contributor that produces suggestions based on the named constructors
 /// defined on a given class. More concretely, this class produces suggestions
 /// for expressions of the form `C.^` or `C<E>.^`, where `C` is the name of a
 /// class.
 class NamedConstructorContributor extends DartCompletionContributor {
+  NamedConstructorContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var node = request.target.containingNode;
     if (node is ConstructorName) {
-      var libraryElement = request.libraryElement;
-      if (libraryElement == null) {
-        return;
-      }
-      var namedType = node.type2;
-      var type = namedType.type;
-      if (type != null) {
-        var element = type.element;
+      if (node.parent is ConstructorReference) {
+        var element = node.type2.name.staticElement;
         if (element is ClassElement) {
-          _buildSuggestions(request, builder, libraryElement, element);
+          _buildSuggestions(element);
         }
+      } else {
+        var type = node.type2.type;
+        if (type is InterfaceType) {
+          var element = type.element;
+          _buildSuggestions(element);
+        }
+      }
+    } else if (node is PrefixedIdentifier) {
+      var element = node.prefix.staticElement;
+      if (element is ClassElement) {
+        _buildSuggestions(element);
       }
     }
   }
 
-  void _buildSuggestions(
-      DartCompletionRequest request,
-      SuggestionBuilder builder,
-      LibraryElement libElem,
-      ClassElement classElem) {
-    var isLocalClassDecl = classElem.library == libElem;
-    for (var constructor in classElem.constructors) {
+  void _buildSuggestions(ClassElement element) {
+    var tearOff = request.shouldSuggestTearOff(element);
+    var isLocalClassDecl = element.library == request.libraryElement;
+    for (var constructor in element.constructors) {
       if (isLocalClassDecl || !constructor.isPrivate) {
-        if (!classElem.isAbstract || constructor.isFactory) {
-          builder.suggestConstructor(constructor, hasClassName: true);
+        if (!element.isAbstract || constructor.isFactory) {
+          builder.suggestConstructor(
+            constructor,
+            hasClassName: true,
+            kind: tearOff
+                ? protocol.CompletionSuggestionKind.IDENTIFIER
+                : protocol.CompletionSuggestionKind.INVOCATION,
+            tearOff: tearOff,
+          );
         }
       }
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/not_imported_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/not_imported_contributor.dart
new file mode 100644
index 0000000..629fe475
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/completion/dart/not_imported_contributor.dart
@@ -0,0 +1,207 @@
+// Copyright (c) 2021, 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:async';
+
+import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/extension_member_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
+import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
+import 'package:analyzer/src/lint/pub.dart';
+import 'package:analyzer/src/workspace/pub.dart';
+import 'package:collection/collection.dart';
+import 'package:meta/meta.dart';
+
+/// A contributor of suggestions from not yet imported libraries.
+class NotImportedContributor extends DartCompletionContributor {
+  /// Tests set this function to abort the current request.
+  @visibleForTesting
+  static void Function(FileState)? onFile;
+
+  final CompletionBudget budget;
+  final List<Uri> librariesToImport;
+
+  NotImportedContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+    this.budget,
+    this.librariesToImport,
+  ) : super(request, builder);
+
+  @override
+  Future<void> computeSuggestions() async {
+    var session = request.result.session as AnalysisSessionImpl;
+    var analysisDriver = session.getDriver(); // ignore: deprecated_member_use
+
+    var fsState = analysisDriver.fsState;
+    var filter = _buildFilter(fsState);
+
+    try {
+      await analysisDriver.discoverAvailableFiles().timeout(budget.left);
+    } on TimeoutException {
+      return;
+    }
+
+    // Use single instance to track getter / setter pairs.
+    var extensionContributor = ExtensionMemberContributor(request, builder);
+
+    var knownFiles = fsState.knownFiles.toList();
+    for (var file in knownFiles) {
+      onFile?.call(file);
+      request.checkAborted();
+
+      if (budget.isEmpty) {
+        return;
+      }
+
+      if (!filter.shouldInclude(file)) {
+        continue;
+      }
+
+      var elementResult = await session.getLibraryByUri(file.uriStr);
+      if (elementResult is! LibraryElementResult) {
+        continue;
+      }
+
+      var exportNamespace = elementResult.element.exportNamespace;
+      var exportElements = exportNamespace.definedNames.values.toList();
+
+      var newSuggestions = builder.markSuggestions();
+
+      if (request.includeIdentifiers) {
+        _buildSuggestions(exportElements);
+      }
+
+      extensionContributor.addExtensions(
+        exportElements.whereType<ExtensionElement>().toList(),
+      );
+
+      newSuggestions.setLibraryUriToImportIndex(() {
+        librariesToImport.add(file.uri);
+        return librariesToImport.length - 1;
+      });
+    }
+  }
+
+  _Filter _buildFilter(FileSystemState fsState) {
+    var file = fsState.getFileForPath(request.result.path);
+    var workspacePackage = file.workspacePackage;
+    if (workspacePackage is PubWorkspacePackage) {
+      return _PubFilter(workspacePackage, file.path);
+    } else {
+      return _AnyFilter();
+    }
+  }
+
+  void _buildSuggestions(List<Element> elements) {
+    var visitor = LibraryElementSuggestionBuilder(request, builder);
+    for (var element in elements) {
+      element.accept(visitor);
+    }
+  }
+}
+
+class _AnyFilter implements _Filter {
+  @override
+  bool shouldInclude(FileState file) => true;
+}
+
+abstract class _Filter {
+  bool shouldInclude(FileState file);
+}
+
+class _PubFilter implements _Filter {
+  final PubWorkspacePackage targetPackage;
+  final String? targetPackageName;
+  final bool targetInLib;
+  final Set<String> dependencies;
+
+  factory _PubFilter(PubWorkspacePackage package, String path) {
+    var inLib = package.workspace.provider
+        .getFolder(package.root)
+        .getChildAssumingFolder('lib')
+        .contains(path);
+
+    var dependencies = <String>{};
+    var pubspec = package.pubspec;
+    if (pubspec != null) {
+      dependencies.addAll(pubspec.dependencies.names);
+      if (!inLib) {
+        dependencies.addAll(pubspec.devDependencies.names);
+      }
+    }
+
+    return _PubFilter._(
+      targetPackage: package,
+      targetPackageName: pubspec?.name?.value.text,
+      targetInLib: inLib,
+      dependencies: dependencies,
+    );
+  }
+
+  _PubFilter._({
+    required this.targetPackage,
+    required this.targetPackageName,
+    required this.targetInLib,
+    required this.dependencies,
+  });
+
+  @override
+  bool shouldInclude(FileState file) {
+    var uri = file.uri;
+    if (uri.isScheme('dart')) {
+      return true;
+    }
+
+    // Normally only package URIs are available.
+    // But outside of lib/ we allow any files of this package.
+    if (!uri.isScheme('package')) {
+      if (targetInLib) {
+        return false;
+      } else {
+        var filePackage = file.workspacePackage;
+        return filePackage is PubWorkspacePackage &&
+            filePackage.root == targetPackage.root;
+      }
+    }
+
+    // Sanity check.
+    var uriPathSegments = uri.pathSegments;
+    if (uriPathSegments.length < 2) {
+      return false;
+    }
+
+    // Any `package:` library from the same package.
+    var packageName = uriPathSegments[0];
+    if (packageName == targetPackageName) {
+      return true;
+    }
+
+    // If not the same package, must be public.
+    if (uriPathSegments[1] == 'src') {
+      return false;
+    }
+
+    return dependencies.contains(packageName);
+  }
+}
+
+extension on PSDependencyList? {
+  List<String> get names {
+    final self = this;
+    if (self == null) {
+      return const [];
+    } else {
+      return self
+          .map((dependency) => dependency.name?.text)
+          .whereNotNull()
+          .toList();
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
index 1cccc64..72174fe 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
@@ -10,10 +11,14 @@
 
 /// A completion contributor used to suggest replacing partial identifiers
 /// inside a class declaration with templates for inherited members.
-class OverrideContributor implements DartCompletionContributor {
+class OverrideContributor extends DartCompletionContributor {
+  OverrideContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var targetId = _getTargetId(request.target);
     if (targetId == null) {
       return;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart
index 8934ed9..faea364 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 
@@ -11,9 +12,13 @@
 /// expressions of the form `this.^` or `super.^` in a constructor's initializer
 /// list or after an `=` in a factory constructor.
 class RedirectingContributor extends DartCompletionContributor {
+  RedirectingContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var entity = request.target.entity;
     if (entity is SimpleIdentifier) {
       var parent = entity.parent;
@@ -59,7 +64,7 @@
             parent.thisOrAncestorOfType<ClassOrMixinDeclaration>();
         var classElement = containingClass?.declaredElement;
         var libraryElement = request.libraryElement;
-        if (classElement == null || libraryElement == null) {
+        if (classElement == null) {
           return;
         }
         var typeSystem = libraryElement.typeSystem;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
index 08bf0df..62adabb 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
+import 'package:analysis_server/src/utilities/extensions/completion_request.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 
@@ -12,19 +14,16 @@
 /// suggestions for expressions of the form `C.^`, where `C` is the name of a
 /// class, enum, or extension.
 class StaticMemberContributor extends DartCompletionContributor {
+  StaticMemberContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var library = request.libraryElement;
-    if (library == null) {
-      // Gracefully degrade if the library could not be determined, such as a
-      // detached part file or source change.
-      // TODO(brianwilkerson) Consider testing for this before invoking _any_ of
-      //  the contributors.
-      return;
-    }
     bool isVisible(Element element) => element.isAccessibleIn(library);
-    var targetId = request.dotTarget;
+    var targetId = request.target.dotTarget;
     if (targetId is Identifier && !request.target.isCascade) {
       var element = targetId.staticElement;
       if (element is TypeAliasElement) {
@@ -39,10 +38,12 @@
             builder.suggestAccessor(accessor, inheritanceDistance: 0.0);
           }
         }
-        for (var constructor in element.constructors) {
-          if (isVisible(constructor)) {
-            if (!element.isAbstract || constructor.isFactory) {
-              builder.suggestConstructor(constructor, hasClassName: true);
+        if (!request.shouldSuggestTearOff(element)) {
+          for (var constructor in element.constructors) {
+            if (isVisible(constructor)) {
+              if (!element.isAbstract || constructor.isFactory) {
+                builder.suggestConstructor(constructor, hasClassName: true);
+              }
             }
           }
         }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index 979ab11..7de9949 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -138,6 +138,54 @@
   }
 }
 
+class NewSuggestionsProcessor {
+  final SuggestionBuilder _builder;
+  final Set<protocol.CompletionSuggestion> _current = Set.identity();
+
+  NewSuggestionsProcessor._(this._builder) {
+    _current.addAll(_builder._suggestionMap.values);
+  }
+
+  /// Update suggestions added since this marker was created.
+  void setLibraryUriToImportIndex(int Function() produce) {
+    int? libraryUriToImportIndex;
+    var suggestionMap = _builder._suggestionMap;
+    for (var entry in suggestionMap.entries.toList()) {
+      var suggestion = entry.value;
+      if (!_current.contains(suggestion)) {
+        libraryUriToImportIndex ??= produce();
+        suggestionMap[entry.key] = protocol.CompletionSuggestion(
+          suggestion.kind,
+          suggestion.relevance,
+          suggestion.completion,
+          suggestion.selectionOffset,
+          suggestion.selectionLength,
+          suggestion.isDeprecated,
+          suggestion.isPotential,
+          displayText: suggestion.displayText,
+          replacementOffset: suggestion.replacementOffset,
+          replacementLength: suggestion.replacementLength,
+          docSummary: suggestion.docSummary,
+          docComplete: suggestion.docComplete,
+          declaringType: suggestion.declaringType,
+          defaultArgumentListString: suggestion.defaultArgumentListString,
+          defaultArgumentListTextRanges:
+              suggestion.defaultArgumentListTextRanges,
+          element: suggestion.element,
+          returnType: suggestion.returnType,
+          parameterNames: suggestion.parameterNames,
+          parameterTypes: suggestion.parameterTypes,
+          requiredParameterCount: suggestion.requiredParameterCount,
+          hasNamedParameters: suggestion.hasNamedParameters,
+          parameterName: suggestion.parameterName,
+          parameterType: suggestion.parameterType,
+          libraryUriToImportIndex: libraryUriToImportIndex,
+        );
+      }
+    }
+  }
+}
+
 /// An object used to build a list of suggestions in response to a single
 /// completion request.
 class SuggestionBuilder {
@@ -202,7 +250,7 @@
   String? get _containingMemberName {
     if (!_hasContainingMemberName) {
       _hasContainingMemberName = true;
-      if (request.dotTarget is SuperExpression) {
+      if (request.target.dotTarget is SuperExpression) {
         var containingMethod = request.target.containingNode
             .thisOrAncestorOfType<MethodDeclaration>();
         if (containingMethod != null) {
@@ -214,7 +262,12 @@
   }
 
   bool get _isNonNullableByDefault =>
-      request.libraryElement?.isNonNullableByDefault ?? false;
+      request.libraryElement.isNonNullableByDefault;
+
+  /// Return an object that knows which suggestions exist, and which are new.
+  NewSuggestionsProcessor markSuggestions() {
+    return NewSuggestionsProcessor._(this);
+  }
 
   /// Add a suggestion for an [accessor] declared within a class or extension.
   /// If the accessor is being invoked with a target of `super`, then the
@@ -352,10 +405,13 @@
   /// period, and hence should not include the name of the class. If the class
   /// can only be referenced using a prefix, and the class name is to be
   /// included in the completion, then the [prefix] should be provided.
-  void suggestConstructor(ConstructorElement constructor,
-      {CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
-      bool hasClassName = false,
-      String? prefix}) {
+  void suggestConstructor(
+    ConstructorElement constructor, {
+    CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
+    bool tearOff = false,
+    bool hasClassName = false,
+    String? prefix,
+  }) {
     // If the class name is already in the text, then we don't support
     // prepending a prefix.
     assert(!hasClassName || prefix == null);
@@ -365,8 +421,12 @@
       return;
     }
 
-    var completion = constructor.displayName;
-    if (!hasClassName && className.isNotEmpty) {
+    var completion = constructor.name;
+    if (tearOff && completion.isEmpty) {
+      completion = 'new';
+    }
+
+    if (!hasClassName) {
       if (completion.isEmpty) {
         completion = className;
       } else {
@@ -1135,7 +1195,7 @@
     var typeParameters = element.typeParameters;
     var typeArguments = const <DartType>[];
     if (typeParameters.isNotEmpty) {
-      var neverType = request.libraryElement!.typeProvider.neverType;
+      var neverType = request.libraryElement.typeProvider.neverType;
       typeArguments = List.filled(typeParameters.length, neverType);
     }
 
@@ -1153,7 +1213,7 @@
     var typeParameters = element.typeParameters;
     var typeArguments = const <DartType>[];
     if (typeParameters.isNotEmpty) {
-      var neverType = request.libraryElement!.typeProvider.neverType;
+      var neverType = request.libraryElement.typeProvider.neverType;
       typeArguments = List.filled(typeParameters.length, neverType);
     }
 
@@ -1170,15 +1230,12 @@
   /// If the [element] has a documentation comment, fill the [suggestion]'s
   /// documentation fields.
   void _setDocumentation(CompletionSuggestion suggestion, Element element) {
-    final request = this.request;
-    if (request is DartCompletionRequestImpl) {
-      var documentationCache = request.documentationCache;
-      var data = documentationCache?.dataFor(element);
-      if (data != null) {
-        suggestion.docComplete = data.full;
-        suggestion.docSummary = data.summary;
-        return;
-      }
+    var documentationCache = request.documentationCache;
+    var data = documentationCache?.dataFor(element);
+    if (data != null) {
+      suggestion.docComplete = data.full;
+      suggestion.docSummary = data.summary;
+      return;
     }
     var doc = DartUnitHoverComputer.computeDocumentation(
         request.dartdocDirectiveInfo, element,
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
index e67d203..589c793 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
@@ -5,6 +5,7 @@
 import 'dart:collection';
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -17,11 +18,15 @@
 /// expressions of the form `o.^`, where `o` is an expression denoting an
 /// instance of a type.
 class TypeMemberContributor extends DartCompletionContributor {
+  TypeMemberContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     // Recompute the target because resolution might have changed it.
-    var expression = request.dotTarget;
+    var expression = request.target.dotTarget;
     if (expression == null ||
         expression.isSynthetic ||
         expression is ExtensionOverride) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
index 227c538..703acf8 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -12,9 +13,13 @@
 /// A contributor that produces suggestions based on the content of the file
 /// system to complete within URIs in import, export and part directives.
 class UriContributor extends DartCompletionContributor {
+  UriContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var visitor = _UriSuggestionBuilder(request, builder);
     request.target.containingNode.accept(visitor);
   }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
index 4a4c7d5..19d86b0 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -5,7 +5,7 @@
 /// A collection of utility methods used by completion contributors.
 import 'package:analysis_server/src/protocol_server.dart'
     show CompletionSuggestion, Location;
-import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 import 'package:analyzer/dart/ast/token.dart';
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
index ba74ab0..1de638f 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/correction/name_suggestion.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -11,9 +12,13 @@
 /// A contributor that produces suggestions for variable names based on the
 /// static type of the variable.
 class VariableNameContributor extends DartCompletionContributor {
+  VariableNameContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
   @override
-  Future<void> computeSuggestions(
-      DartCompletionRequest request, SuggestionBuilder builder) async {
+  Future<void> computeSuggestions() async {
     var opType = request.opType;
 
     // Collect suggestions from the specific child [AstNode] that contains
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 825ff4b..c2e4e39 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -4,7 +4,6 @@
 
 import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
-import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/base_processor.dart';
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analysis_server/src/services/correction/dart/add_diagnostic_property_reference.dart';
@@ -88,7 +87,7 @@
     AddDiagnosticPropertyReference.newInstance,
     AddNotNullAssert.newInstance,
     AddReturnType.newInstance,
-    AddTypeAnnotation.newInstance,
+    AddTypeAnnotation.newInstanceBulkFixable,
     AssignToLocalVariable.newInstance,
     ConvertAddAllToSpread.newInstance,
     ConvertClassToMixin.newInstance,
@@ -171,46 +170,6 @@
     return assists;
   }
 
-  Future<List<Assist>> computeAssist(AssistKind assistKind) async {
-    var context = CorrectionProducerContext.create(
-      selectionOffset: selectionOffset,
-      selectionLength: selectionLength,
-      resolvedResult: resolvedResult,
-      workspace: workspace,
-    );
-    if (context == null) {
-      return assists;
-    }
-
-    Future<void> compute(CorrectionProducer producer) async {
-      producer.configure(context);
-
-      var builder = ChangeBuilder(
-          workspace: context.workspace, eol: context.utils.endOfLine);
-      await producer.compute(builder);
-
-      var assistKind = producer.assistKind;
-      if (assistKind != null) {
-        _addAssistFromBuilder(builder, assistKind,
-            args: producer.assistArguments);
-      }
-    }
-
-    // Calculate only specific assists for edit.dartFix
-    if (assistKind == DartAssistKind.CONVERT_CLASS_TO_MIXIN) {
-      await compute(ConvertClassToMixin());
-    } else if (assistKind == DartAssistKind.CONVERT_TO_INT_LITERAL) {
-      await compute(ConvertToIntLiteral());
-    } else if (assistKind == DartAssistKind.CONVERT_TO_SPREAD) {
-      await compute(ConvertAddAllToSpread());
-    } else if (assistKind == DartAssistKind.CONVERT_TO_FOR_ELEMENT) {
-      await compute(ConvertMapFromIterableToForLiteral());
-    } else if (assistKind == DartAssistKind.CONVERT_TO_IF_ELEMENT) {
-      await compute(ConvertConditionalExpressionToIfElement());
-    }
-    return assists;
-  }
-
   void _addAssistFromBuilder(ChangeBuilder builder, AssistKind kind,
       {List<Object>? args}) {
     var change = builder.sourceChange;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart
index 32499c0..2ba981e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_async.dart
@@ -19,6 +19,14 @@
   AddAsync(this.isForMissingReturn);
 
   @override
+  // Not predictably the correct action.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not predictably the correct action.
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.ADD_ASYNC;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
index 16a7d03..61fbebc 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
@@ -12,6 +12,16 @@
 
 class AddMissingEnumCaseClauses extends CorrectionProducer {
   @override
+  // Adding the missing case is not a sufficient fix (user logic needs adding
+  // too).
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Adding the missing case is not a sufficient fix (user logic needs adding
+  // too).
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.ADD_MISSING_ENUM_CASE_CLAUSES;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
index 84d563c..2d5231c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
@@ -17,6 +17,14 @@
   String _missingParameterName = '';
 
   @override
+  // Not a stand-alone fix; requires follow-up actions.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not a stand-alone fix; requires follow-up actions.
+  bool get canBeAppliedToFile => false;
+
+  @override
   List<Object> get fixArguments => [_missingParameterName];
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_return_type.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_return_type.dart
index b5aed2b..9e06b2f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_return_type.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_return_type.dart
@@ -21,9 +21,18 @@
   AssistKind get assistKind => DartAssistKind.ADD_RETURN_TYPE;
 
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
   FixKind get fixKind => DartFixKind.ADD_RETURN_TYPE;
 
   @override
+  FixKind? get multiFixKind => DartFixKind.ADD_RETURN_TYPE_MULTI;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     SyntacticEntity? insertBeforeEntity;
     FunctionBody? body;
@@ -158,11 +167,7 @@
     if (current == null) {
       returnType = type;
     } else {
-      if (current is InterfaceType && type is InterfaceType) {
-        returnType = InterfaceType.getSmartLeastUpperBound(current, type);
-      } else {
-        returnType = typeSystem.leastUpperBound(current, type);
-      }
+      returnType = typeSystem.leastUpperBound(current, type);
     }
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
index 092f566..fa1537b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
@@ -72,7 +72,7 @@
   List<Object> get fixArguments {
     var buffer = StringBuffer();
     buffer.write('super');
-    var constructorName = _constructor.displayName;
+    var constructorName = _constructor.name;
     if (constructorName.isNotEmpty) {
       buffer.write('.');
       buffer.write(constructorName);
@@ -86,7 +86,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var constructorName = _constructor.displayName;
+    var constructorName = _constructor.name;
     await builder.addDartFileEdit(file, (builder) {
       builder.addInsertion(_insertOffset, (builder) {
         builder.write(_prefix);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_trailing_comma.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_trailing_comma.dart
new file mode 100644
index 0000000..0995f2f
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_trailing_comma.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2021, 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:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+
+class AddTrailingComma extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.ADD_TRAILING_COMMA;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.ADD_TRAILING_COMMA_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    final node = this.node;
+    if (node is! ArgumentList) return;
+
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addSimpleInsertion(node.arguments.last.end, ',');
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static AddTrailingComma newInstance() => AddTrailingComma();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart
index f0e0091..9bb8c12 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart
@@ -19,6 +19,16 @@
 
 class AddTypeAnnotation extends CorrectionProducer {
   @override
+  bool canBeAppliedInBulk;
+
+  @override
+  bool canBeAppliedToFile;
+
+  AddTypeAnnotation(bool multi)
+      : canBeAppliedInBulk = multi,
+        canBeAppliedToFile = multi;
+
+  @override
   AssistKind get assistKind => DartAssistKind.ADD_TYPE_ANNOTATION;
 
   @override
@@ -180,7 +190,11 @@
   }
 
   /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
-  static AddTypeAnnotation newInstance() => AddTypeAnnotation();
+  static AddTypeAnnotation newInstance() => AddTypeAnnotation(false);
+
+  /// Return an instance of this class that can apply bulk and in-file fixes.
+  /// Used as a tear-off in `FixProcessor`.
+  static AddTypeAnnotation newInstanceBulkFixable() => AddTypeAnnotation(true);
 }
 
 class _AssignedTypeCollector extends RecursiveAstVisitor<void> {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
index 8ec13f6..6f97951 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
@@ -5,71 +5,104 @@
 import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
+import '../fix.dart';
+
 class ConvertIntoBlockBody extends CorrectionProducer {
   @override
   AssistKind get assistKind => DartAssistKind.CONVERT_INTO_BLOCK_BODY;
 
   @override
-  Future<void> compute(ChangeBuilder builder) async {
-    var body = getEnclosingFunctionBody();
-    // prepare expression body
-    if (body is! ExpressionFunctionBody || body.isGenerator) {
-      return;
-    }
+  FixKind get fixKind => DartFixKind.CONVERT_INTO_BLOCK_BODY;
 
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    final body = getEnclosingFunctionBody();
+    if (body == null || body.isGenerator) return;
+
+    List<String>? codeLines;
+
+    if (body is ExpressionFunctionBody) {
+      codeLines = _getCodeForFunctionBody(body);
+    } else if (body is EmptyFunctionBody) {
+      codeLines = _getCodeForEmptyBody(body);
+    }
+    if (codeLines == null) return;
+
+    // prepare prefix
+    var prefix = utils.getNodePrefix(body.parent!);
+    var indent = utils.getIndent(1);
+    var sourceRange = range.endEnd(body.beginToken.previous!, body);
+
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addReplacement(sourceRange, (builder) {
+        builder.write(' ');
+        if (body.isAsynchronous) {
+          builder.write('async ');
+        }
+        builder.write('{');
+        for (var line in codeLines!) {
+          builder.write('$eol$prefix$indent');
+          builder.write(line);
+        }
+        builder.selectHere();
+        builder.write('$eol$prefix}');
+      });
+    });
+  }
+
+  List<String>? _getCodeForEmptyBody(EmptyFunctionBody body) {
+    var functionElement = _getFunctionElement(body.parent);
+    if (functionElement == null) return null;
+
+    var lines = ['// TODO: implement ${functionElement.name}'];
+
+    var returnValueType = functionElement.returnType;
+    if (!returnValueType.isVoid) {
+      lines.add('throw UnimplementedError();');
+    }
+    return lines;
+  }
+
+  List<String>? _getCodeForFunctionBody(ExpressionFunctionBody body) {
     var returnValue = body.expression;
 
     // Return expressions can be quite large, e.g. Flutter build() methods.
     // It is surprising to see this Quick Assist deep in the function body.
     if (selectionOffset >= returnValue.offset) {
-      return;
-    }
-
-    DartType? getFunctionReturnType() {
-      var parent = body.parent;
-      if (parent is MethodDeclaration) {
-        return parent.declaredElement?.returnType;
-      } else if (parent is ConstructorDeclaration) {
-        return parent.declaredElement?.returnType;
-      } else if (parent is FunctionExpression) {
-        return parent.declaredElement?.returnType;
-      }
       return null;
     }
 
-    var functionReturnType = getFunctionReturnType();
-    if (functionReturnType == null) {
-      return;
-    }
+    var functionElement = _getFunctionElement(body.parent);
+    if (functionElement == null) return null;
+
     var returnValueType = returnValue.typeOrThrow;
     var returnValueCode = utils.getNodeText(returnValue);
-    // prepare prefix
-    var prefix = utils.getNodePrefix(body.parent!);
-    var indent = utils.getIndent(1);
+    var returnCode = '';
+    if (!returnValueType.isVoid &&
+        !returnValueType.isBottom &&
+        !functionElement.returnType.isVoid) {
+      returnCode = 'return ';
+    }
+    returnCode += '$returnValueCode;';
+    return [returnCode];
+  }
 
-    await builder.addDartFileEdit(file, (builder) {
-      builder.addReplacement(range.node(body), (builder) {
-        if (body.isAsynchronous) {
-          builder.write('async ');
-        }
-        builder.write('{$eol$prefix$indent');
-        if (!returnValueType.isVoid &&
-            !returnValueType.isBottom &&
-            !functionReturnType.isVoid) {
-          builder.write('return ');
-        }
-        builder.write(returnValueCode);
-        builder.write(';');
-        builder.selectHere();
-        builder.write('$eol$prefix}');
-      });
-    });
+  ExecutableElement? _getFunctionElement(AstNode? node) {
+    if (node is MethodDeclaration) {
+      return node.declaredElement;
+    } else if (node is ConstructorDeclaration) {
+      return node.declaredElement;
+    } else if (node is FunctionExpression) {
+      return node.declaredElement;
+    }
+    return null;
   }
 
   /// Return an instance of this class. Used as a tear-off in `AssistProcessor`.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart
index 7bcfe13..7f643b6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_quotes.dart
@@ -67,6 +67,18 @@
   AssistKind get assistKind => DartAssistKind.CONVERT_TO_DOUBLE_QUOTED_STRING;
 
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.CONVERT_TO_DOUBLE_QUOTED_STRING;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.CONVERT_TO_DOUBLE_QUOTED_STRING_MULTI;
+
+  @override
   bool get _fromDouble => false;
 
   /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_expression_function_body.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_expression_function_body.dart
index ef03f62..c66c747 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_expression_function_body.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_expression_function_body.dart
@@ -16,6 +16,12 @@
   AssistKind get assistKind => DartAssistKind.CONVERT_INTO_EXPRESSION_BODY;
 
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
   FixKind get fixKind => DartFixKind.CONVERT_INTO_EXPRESSION_BODY;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_annotation.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_annotation.dart
index 17594f4..2c03724 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_annotation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_annotation.dart
@@ -15,6 +15,14 @@
   String _annotationName = '';
 
   @override
+  // Not predictably the correct action.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not predictably the correct action.
+  bool get canBeAppliedToFile => false;
+
+  @override
   List<Object> get fixArguments => [_annotationName];
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_argument.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_argument.dart
index 3f3c939..7e370f9 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_argument.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_argument.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
+import 'package:analysis_server/src/utilities/extensions/range_factory.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -38,7 +39,8 @@
     }
 
     await builder.addDartFileEdit(file, (builder) {
-      final sourceRange = range.nodeInList(argumentList.arguments, arg);
+      final sourceRange = range.nodeInListWithComments(
+          resolvedResult.lineInfo, argumentList.arguments, arg);
       builder.addDeletion(sourceRange);
     });
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart
index d0d1f5f..b7e5f96 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart
@@ -16,12 +16,10 @@
 
 class RemoveComparison extends CorrectionProducer {
   @override
-  bool canBeAppliedInBulk;
+  bool get canBeAppliedInBulk => true;
 
   @override
-  bool canBeAppliedToFile;
-
-  RemoveComparison(this.canBeAppliedInBulk, this.canBeAppliedToFile);
+  bool get canBeAppliedToFile => true;
 
   @override
   FixKind get fixKind => DartFixKind.REMOVE_COMPARISON;
@@ -122,10 +120,5 @@
   }
 
   /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
-  static RemoveComparison newInstance() => RemoveComparison(false, false);
-
-  /// Return an instance of this class that can apply bulk and in-file fixes.
-  /// Used as a tear-off in `FixProcessor`.
-  static RemoveComparison newInstanceBulkFixable() =>
-      RemoveComparison(true, true);
+  static RemoveComparison newInstance() => RemoveComparison();
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_code.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_code.dart
index 9f349e7..7f70107 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_code.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_code.dart
@@ -12,6 +12,14 @@
 
 class RemoveDeadCode extends CorrectionProducer {
   @override
+  // Not predictably the correct action.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not predictably the correct action.
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_DEAD_CODE;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_if_null.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_if_null.dart
index 4424d19..96e641f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_if_null.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_dead_if_null.dart
@@ -14,6 +14,16 @@
 
 class RemoveDeadIfNull extends CorrectionProducer {
   @override
+  // This fix removes the right operand of an if-null which is not predictably
+  // the right thing to do.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // This fix removes the right operand of an if-null which is not predictably
+  // the right thing to do.
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_IF_NULL_OPERATOR;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_deprecated_new_in_comment_reference.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_deprecated_new_in_comment_reference.dart
new file mode 100644
index 0000000..73c944b
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_deprecated_new_in_comment_reference.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 2021, 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:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class RemoveDeprecatedNewInCommentReference extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.REMOVE_DEPRECATED_NEW_IN_COMMENT_REFERENCE;
+
+  @override
+  FixKind get multiFixKind =>
+      DartFixKind.REMOVE_DEPRECATED_NEW_IN_COMMENT_REFERENCE_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    final comment = node;
+    if (comment is! CommentReference) {
+      return;
+    }
+
+    final newToken = comment.newKeyword;
+    if (newToken == null) {
+      return;
+    }
+
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addDeletion(range.startStart(newToken, newToken.next!));
+    });
+
+    final identifier = comment.expression;
+    if (identifier is Identifier) {
+      final element = identifier.staticElement;
+      if (identifier is SimpleIdentifier && element is ConstructorElement) {
+        await builder.addDartFileEdit(file, (builder) {
+          builder.addSimpleInsertion(identifier.end, '.new');
+        });
+      } else {
+        if (element is ClassElement) {
+          if (element.unnamedConstructor != null) {
+            await builder.addDartFileEdit(file, (builder) {
+              builder.addSimpleInsertion(identifier.end, '.new');
+            });
+          }
+        }
+      }
+    }
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static RemoveDeprecatedNewInCommentReference newInstance() =>
+      RemoveDeprecatedNewInCommentReference();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_name_from_combinator.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_name_from_combinator.dart
index b6da5d0..889378a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_name_from_combinator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_name_from_combinator.dart
@@ -14,6 +14,14 @@
   String _combinatorKind = '';
 
   @override
+  // Not predictably the correct action.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not predictably the correct action.
+  bool get canBeAppliedToFile => false;
+
+  @override
   List<Object> get fixArguments => [_combinatorKind];
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart
index adc0a5e..25d4016 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart
@@ -16,6 +16,14 @@
 
 class RemoveUnusedElement extends _RemoveUnused {
   @override
+  // Not predictably the correct action.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not predictably the correct action.
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_UNUSED_ELEMENT;
 
   @override
@@ -70,6 +78,14 @@
 
 class RemoveUnusedField extends _RemoveUnused {
   @override
+  // Not predictably the correct action.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not predictably the correct action.
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_UNUSED_FIELD;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_clause.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_clause.dart
index b3a9af7..09a3c41 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_clause.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_clause.dart
@@ -11,9 +11,18 @@
 
 class RemoveUnusedCatchClause extends CorrectionProducer {
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_UNUSED_CATCH_CLAUSE;
 
   @override
+  FixKind get multiFixKind => DartFixKind.REMOVE_UNUSED_CATCH_CLAUSE_MULTI;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     var catchClause = node.parent;
     if (catchClause is! CatchClause) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_stack.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_stack.dart
index 7cdc1ac..1ee1908 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_stack.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_stack.dart
@@ -11,9 +11,18 @@
 
 class RemoveUnusedCatchStack extends CorrectionProducer {
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_UNUSED_CATCH_STACK;
 
   @override
+  FixKind get multiFixKind => DartFixKind.REMOVE_UNUSED_CATCH_STACK_MULTI;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     var catchClause = node.parent;
     if (catchClause is! CatchClause) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_import.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_import.dart
index 655a778..02fb02d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_import.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_import.dart
@@ -11,6 +11,7 @@
 
 class RemoveUnusedImport extends CorrectionProducer {
   @override
+  // Bulk application is supported by a distinct import cleanup fix phase.
   bool get canBeAppliedInBulk => false;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_label.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_label.dart
index 8f182e9..b06462f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_label.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_label.dart
@@ -11,6 +11,14 @@
 
 class RemoveUnusedLabel extends CorrectionProducer {
   @override
+  // Not predictably the correct action.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not predictably the correct action.
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_UNUSED_LABEL;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_local_variable.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_local_variable.dart
index f64a7a1..bfc7681 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_local_variable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_local_variable.dart
@@ -14,6 +14,14 @@
 
 class RemoveUnusedLocalVariable extends CorrectionProducer {
   @override
+  // Not predictably the correct action.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not predictably the correct action.
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_UNUSED_LOCAL_VARIABLE;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_parameter.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_parameter.dart
index 830345f..e18ebec 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_parameter.dart
@@ -12,9 +12,18 @@
 
 class RemoveUnusedParameter extends CorrectionProducer {
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
   FixKind get fixKind => DartFixKind.REMOVE_UNUSED_PARAMETER;
 
   @override
+  FixKind? get multiFixKind => DartFixKind.REMOVE_UNUSED_PARAMETER_MULTI;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     var parameter = node;
     if (parameter is! FormalParameter) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_new_with_const.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_new_with_const.dart
index 2828c1c..5e4b9b6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_new_with_const.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_new_with_const.dart
@@ -11,13 +11,10 @@
 
 class ReplaceNewWithConst extends CorrectionProducer {
   @override
-  // TODO(brianwilkerson) This fix can produce changes that are inconsistent
-  //  with the `unnecessary_const` lint. Fix it and then enable it for both
-  //  uses.
-  bool get canBeAppliedInBulk => false;
+  bool get canBeAppliedInBulk => true;
 
   @override
-  bool get canBeAppliedToFile => false;
+  bool get canBeAppliedToFile => true;
 
   @override
   FixKind get fixKind => DartFixKind.REPLACE_NEW_WITH_CONST;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_eight_digit_hex.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_eight_digit_hex.dart
index ff9e2eb..08271c9 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_eight_digit_hex.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_eight_digit_hex.dart
@@ -14,6 +14,12 @@
   String _replacement = '';
 
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
   List<Object> get fixArguments => [_replacement];
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_interpolation.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_interpolation.dart
index 48ddf53..71adedb 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_interpolation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_interpolation.dart
@@ -13,9 +13,18 @@
 
 class ReplaceWithInterpolation extends CorrectionProducer {
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
   FixKind get fixKind => DartFixKind.REPLACE_WITH_INTERPOLATION;
 
   @override
+  FixKind? get multiFixKind => DartFixKind.REPLACE_WITH_INTERPOLATION_MULTI;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     //
     // Validate the fix.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_null_aware.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_null_aware.dart
index 822442d..d990668 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_null_aware.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_null_aware.dart
@@ -16,6 +16,18 @@
   ReplaceWithNullAware(this.correctionKind);
 
   @override
+  // NNBD makes this obsolete in the "chain" application; for the "single"
+  // application, there are other options and a null-aware replacement is not
+  // predictably correct.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // NNBD makes this obsolete in the "chain" application; for the "single"
+  // application, there are other options and a null-aware replacement is not
+  // predictably correct.
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.REPLACE_WITH_NULL_AWARE;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart b/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart
index 2ade5a5..c12a2e2 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart
@@ -19,6 +19,14 @@
   UpdateSdkConstraints(this._minimumVersion);
 
   @override
+  // Too nuanced to do unattended.
+  bool get canBeAppliedInBulk => false;
+
+  @override
+  // Not applicable (there can only be one constraint per file).
+  bool get canBeAppliedToFile => false;
+
+  @override
   FixKind get fixKind => DartFixKind.UPDATE_SDK_CONSTRAINTS;
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/use_effective_integer_division.dart b/pkg/analysis_server/lib/src/services/correction/dart/use_effective_integer_division.dart
index 5a0839d..56c4583 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/use_effective_integer_division.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/use_effective_integer_division.dart
@@ -12,9 +12,18 @@
 
 class UseEffectiveIntegerDivision extends CorrectionProducer {
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
   FixKind get fixKind => DartFixKind.USE_EFFECTIVE_INTEGER_DIVISION;
 
   @override
+  FixKind get multiFixKind => DartFixKind.USE_EFFECTIVE_INTEGER_DIVISION_MULTI;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     for (var n in node.withParents) {
       if (n is MethodInvocation) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/use_eq_eq_null.dart b/pkg/analysis_server/lib/src/services/correction/dart/use_eq_eq_null.dart
index ff863ed..075f326 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/use_eq_eq_null.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/use_eq_eq_null.dart
@@ -11,7 +11,7 @@
 
 class UseEqEqNull extends CorrectionProducer {
   @override
-  bool get canBeAppliedInBulk => false;
+  bool get canBeAppliedInBulk => true;
 
   @override
   bool get canBeAppliedToFile => true;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/use_not_eq_null.dart b/pkg/analysis_server/lib/src/services/correction/dart/use_not_eq_null.dart
index 3ae6b45..e7f633c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/use_not_eq_null.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/use_not_eq_null.dart
@@ -11,7 +11,7 @@
 
 class UseNotEqNull extends CorrectionProducer {
   @override
-  bool get canBeAppliedInBulk => false;
+  bool get canBeAppliedInBulk => true;
 
   @override
   bool get canBeAppliedToFile => true;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index dd5593b..84a648c 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -244,6 +244,16 @@
     DartFixKindPriority.IN_FILE,
     "Add 'break' everywhere in file",
   );
+  static const ADD_TRAILING_COMMA = FixKind(
+    'dart.fix.add.trailingComma',
+    DartFixKindPriority.DEFAULT,
+    'Add trailing comma',
+  );
+  static const ADD_TRAILING_COMMA_MULTI = FixKind(
+    'dart.fix.add.trailingComma.multi',
+    DartFixKindPriority.IN_FILE,
+    'Add trailing commas everywhere in file',
+  );
   static const ADD_TYPE_ANNOTATION = FixKind(
     'dart.fix.add.typeAnnotation',
     DartFixKindPriority.DEFAULT,
@@ -289,6 +299,11 @@
     DartFixKindPriority.DEFAULT,
     'Convert to child:',
   );
+  static const CONVERT_INTO_BLOCK_BODY = FixKind(
+    'dart.fix.convert.bodyToBlock',
+    DartFixKindPriority.DEFAULT,
+    'Convert to block body',
+  );
   static const CONVERT_FOR_EACH_TO_FOR_LOOP = FixKind(
     'dart.fix.convert.toForLoop',
     DartFixKindPriority.DEFAULT,
@@ -329,6 +344,16 @@
     DartFixKindPriority.IN_FILE,
     "Convert to using 'contains' everywhere in file",
   );
+  static const CONVERT_TO_DOUBLE_QUOTED_STRING = FixKind(
+    'dart.fix.convert.toDoubleQuotedString',
+    DartFixKindPriority.DEFAULT,
+    'Convert to double quoted string',
+  );
+  static const CONVERT_TO_DOUBLE_QUOTED_STRING_MULTI = FixKind(
+    'dart.fix.convert.toDoubleQuotedString.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to double quoted strings everywhere in file',
+  );
   static const CONVERT_TO_FOR_ELEMENT = FixKind(
     'dart.fix.convert.toForElement',
     DartFixKindPriority.DEFAULT,
@@ -800,6 +825,16 @@
     DartFixKindPriority.DEFAULT,
     'Remove dead code',
   );
+  static const REMOVE_DEPRECATED_NEW_IN_COMMENT_REFERENCE = FixKind(
+    'dart.fix.remove.deprecatedNewInCommentReference',
+    DartFixKindPriority.DEFAULT,
+    'Remove deprecated new keyword',
+  );
+  static const REMOVE_DEPRECATED_NEW_IN_COMMENT_REFERENCE_MULTI = FixKind(
+    'dart.fix.remove.deprecatedNewInCommentReference.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove deprecated new keyword in file',
+  );
   static const REMOVE_DUPLICATE_CASE = FixKind(
     'dart.fix.remove.duplicateCase',
     DartFixKindPriority.DEFAULT,
@@ -1059,11 +1094,21 @@
     DartFixKindPriority.DEFAULT,
     "Remove unused 'catch' clause",
   );
+  static const REMOVE_UNUSED_CATCH_CLAUSE_MULTI = FixKind(
+    'dart.fix.remove.unusedCatchClause.multi',
+    DartFixKindPriority.IN_FILE,
+    "Remove unused 'catch' clauses in file",
+  );
   static const REMOVE_UNUSED_CATCH_STACK = FixKind(
     'dart.fix.remove.unusedCatchStack',
     DartFixKindPriority.DEFAULT,
     'Remove unused stack trace variable',
   );
+  static const REMOVE_UNUSED_CATCH_STACK_MULTI = FixKind(
+    'dart.fix.remove.unusedCatchStack.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unused stack trace variables in file',
+  );
   static const REMOVE_UNUSED_ELEMENT = FixKind(
     'dart.fix.remove.unusedElement',
     DartFixKindPriority.DEFAULT,
@@ -1361,6 +1406,11 @@
     DartFixKindPriority.DEFAULT,
     'Use effective integer division ~/',
   );
+  static const USE_EFFECTIVE_INTEGER_DIVISION_MULTI = FixKind(
+    'dart.fix.use.effectiveIntegerDivision.multi',
+    DartFixKindPriority.IN_FILE,
+    'Use effective integer division ~/ everywhere in file',
+  );
   static const USE_EQ_EQ_NULL = FixKind(
     'dart.fix.use.eqEqNull',
     DartFixKindPriority.DEFAULT,
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.dart
index 1f68a5c..1c992e0 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.dart
@@ -157,14 +157,14 @@
   /// Initialize a newly created error code.
   const TransformSetErrorCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'TransformSetErrorCode.$name',
         );
 
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
index 179e35a..d0452f2 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
@@ -122,7 +122,6 @@
   /// Add a fix whose edits were built by the [builder] that has the given
   /// [kind]. If [args] are provided, they will be used to fill in the message
   /// for the fix.
-  // ignore: unused_element
   void _addFixFromBuilder(ChangeBuilder builder, FixKind kind, {List? args}) {
     var change = builder.sourceChange;
     if (change.edits.isEmpty) {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 7454202..26bcfbd 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -29,6 +29,7 @@
 import 'package:analysis_server/src/services/correction/dart/add_static.dart';
 import 'package:analysis_server/src/services/correction/dart/add_super_constructor_invocation.dart';
 import 'package:analysis_server/src/services/correction/dart/add_switch_case_break.dart';
+import 'package:analysis_server/src/services/correction/dart/add_trailing_comma.dart';
 import 'package:analysis_server/src/services/correction/dart/add_type_annotation.dart';
 import 'package:analysis_server/src/services/correction/dart/change_argument_name.dart';
 import 'package:analysis_server/src/services/correction/dart/change_to.dart';
@@ -40,6 +41,7 @@
 import 'package:analysis_server/src/services/correction/dart/convert_documentation_into_line.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_flutter_child.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_flutter_children.dart';
+import 'package:analysis_server/src/services/correction/dart/convert_into_block_body.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_into_is_not.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_map_from_iterable_to_for_literal.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_quotes.dart';
@@ -94,6 +96,7 @@
 import 'package:analysis_server/src/services/correction/dart/move_type_arguments_to_class.dart';
 import 'package:analysis_server/src/services/correction/dart/organize_imports.dart';
 import 'package:analysis_server/src/services/correction/dart/qualify_reference.dart';
+import 'package:analysis_server/src/services/correction/dart/remove_abstract.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_annotation.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_argument.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_await.dart';
@@ -102,6 +105,7 @@
 import 'package:analysis_server/src/services/correction/dart/remove_constructor_name.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_dead_code.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_dead_if_null.dart';
+import 'package:analysis_server/src/services/correction/dart/remove_deprecated_new_in_comment_reference.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_duplicate_case.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_empty_catch.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_empty_constructor_body.dart';
@@ -181,8 +185,6 @@
 import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart' hide FixContributor;
 
-import 'dart/remove_abstract.dart';
-
 /// A function that can be executed to create a multi-correction producer.
 typedef MultiProducerGenerator = MultiCorrectionProducer Function();
 
@@ -227,15 +229,15 @@
       dartFixContext: context,
       diagnostic: error,
       resolvedResult: resolveResult,
-      selectionOffset: context.error.offset,
-      selectionLength: context.error.length,
+      selectionOffset: error.offset,
+      selectionLength: error.length,
       workspace: workspace,
     );
     if (correctionContext == null) {
       return const <Fix>[];
     }
 
-    var generators = _getGenerators(error.errorCode, correctionContext);
+    var generators = _getGenerators(error.errorCode);
 
     var fixes = <Fix>[];
     for (var generator in generators) {
@@ -307,8 +309,7 @@
     }
   }
 
-  List<ProducerGenerator> _getGenerators(
-      ErrorCode errorCode, CorrectionProducerContext context) {
+  List<ProducerGenerator> _getGenerators(ErrorCode errorCode) {
     if (errorCode is LintCode) {
       return FixProcessor.lintProducerMap[errorCode.name] ?? [];
     } else {
@@ -326,15 +327,13 @@
   /// are in the [nonLintProducerMap].
   static final Map<String, List<ProducerGenerator>> lintProducerMap = {
     LintNames.always_declare_return_types: [
-      // TODO(brianwilkerson) Consider applying in bulk.
       AddReturnType.newInstance,
     ],
     LintNames.always_require_non_null_named_parameters: [
       AddRequired.newInstance,
     ],
     LintNames.always_specify_types: [
-      // TODO(brianwilkerson) Consider applying in bulk.
-      AddTypeAnnotation.newInstance,
+      AddTypeAnnotation.newInstanceBulkFixable,
     ],
     LintNames.annotate_overrides: [
       AddOverride.newInstance,
@@ -355,7 +354,7 @@
       RemoveInitializer.newInstance,
     ],
     LintNames.avoid_null_checks_in_equality_operators: [
-      RemoveComparison.newInstanceBulkFixable,
+      RemoveComparison.newInstance,
     ],
     LintNames.avoid_print: [
       MakeConditionalOnDebugMode.newInstance,
@@ -393,7 +392,6 @@
       RemoveTypeAnnotation.newInstance,
     ],
     LintNames.avoid_unused_constructor_parameters: [
-      // TODO(brianwilkerson) Consider applying in bulk.
       RemoveUnusedParameter.newInstance,
     ],
     LintNames.avoid_unnecessary_containers: [
@@ -469,11 +467,13 @@
     LintNames.prefer_contains: [
       ConvertToContains.newInstance,
     ],
+    LintNames.prefer_double_quotes: [
+      ConvertToDoubleQuotes.newInstance,
+    ],
     LintNames.prefer_equal_for_default_values: [
       ReplaceColonWithEquals.newInstance,
     ],
     LintNames.prefer_expression_function_bodies: [
-      // TODO(brianwilkerson) Consider applying in bulk.
       ConvertToExpressionFunctionBody.newInstance,
     ],
     LintNames.prefer_final_fields: [
@@ -517,7 +517,6 @@
       ConvertToIntLiteral.newInstance,
     ],
     LintNames.prefer_interpolation_to_compose_strings: [
-      // TODO(brianwilkerson) Consider applying in bulk.
       ReplaceWithInterpolation.newInstance,
     ],
     LintNames.prefer_is_not_operator: [
@@ -539,7 +538,7 @@
       ConvertAddAllToSpread.newInstance,
     ],
     LintNames.prefer_typing_uninitialized_variables: [
-      AddTypeAnnotation.newInstance,
+      AddTypeAnnotation.newInstanceBulkFixable,
     ],
     LintNames.prefer_void_to_null: [
       ReplaceNullWithVoid.newInstance,
@@ -553,9 +552,11 @@
     LintNames.sort_child_properties_last: [
       SortChildPropertyLast.newInstance,
     ],
+    LintNames.require_trailing_commas: [
+      AddTrailingComma.newInstance,
+    ],
     LintNames.type_annotate_public_apis: [
-      // TODO(brianwilkerson) Consider applying in bulk.
-      AddTypeAnnotation.newInstance,
+      AddTypeAnnotation.newInstanceBulkFixable,
     ],
     LintNames.type_init_formals: [
       RemoveTypeAnnotation.newInstance,
@@ -609,7 +610,6 @@
       RemoveThisExpression.newInstance,
     ],
     LintNames.use_full_hex_values_for_flutter_colors: [
-      // TODO(brianwilkerson) Consider applying in bulk.
       ReplaceWithEightDigitHex.newInstance,
     ],
     LintNames.use_function_type_syntax_for_parameters: [
@@ -797,7 +797,7 @@
       CreateMixin.newInstance,
     ],
     CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER: [
-      CreateMissingOverrides.newInstance,
+      ConvertIntoBlockBody.newInstance,
       CreateNoSuchMethod.newInstance,
       MakeClassAbstract.newInstance,
     ],
@@ -1095,6 +1095,9 @@
       //  a place where it can be reached (when possible).
       RemoveDeadCode.newInstance,
     ],
+    HintCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE: [
+      RemoveDeprecatedNewInCommentReference.newInstance,
+    ],
     HintCode.DIVISION_OPTIMIZATION: [
       UseEffectiveIntegerDivision.newInstance,
     ],
@@ -1198,6 +1201,9 @@
     HintCode.UNNECESSARY_CAST: [
       RemoveUnnecessaryCast.newInstance,
     ],
+    HintCode.UNNECESSARY_IMPORT: [
+      RemoveUnusedImport.newInstance,
+    ],
 //    HintCode.UNNECESSARY_NO_SUCH_METHOD: [
 // TODO(brianwilkerson) Add a fix to remove the method.
 //    ],
@@ -1249,6 +1255,9 @@
     ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE: [
       AddTypeAnnotation.newInstance,
     ],
+    ParserErrorCode.MISSING_FUNCTION_BODY: [
+      ConvertIntoBlockBody.newInstance,
+    ],
     ParserErrorCode.VAR_AS_TYPE_NAME: [
       ReplaceVarWithDynamic.newInstance,
     ],
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 7fc3b9f..be7ef60 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -210,9 +210,7 @@
 /// Returns the name to display in the UI for the given [Element].
 String getElementQualifiedName(Element element) {
   var kind = element.kind;
-  if (kind == ElementKind.CONSTRUCTOR ||
-      kind == ElementKind.FIELD ||
-      kind == ElementKind.METHOD) {
+  if (kind == ElementKind.FIELD || kind == ElementKind.METHOD) {
     return '${element.enclosingElement!.displayName}.${element.displayName}';
   } else if (kind == ElementKind.LIBRARY) {
     // Libraries may not have names, so use a path relative to the context root.
diff --git a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
index cbc0bc4..ee34219 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -748,7 +748,7 @@
     var identifier = node.identifier;
     if (identifier != null) {
       // The anchor and anchor edges generation are broken into two cases, the
-      // first case is "method(parameter_name) ...", where the the parameter
+      // first case is "method(parameter_name) ...", where the parameter
       // character range only includes a parameter name.  The second case is for
       // parameter declarations which are prefixed with a type, 'var', or
       // 'dynamic', as in "method(var parameter_name) ...".
diff --git a/pkg/analysis_server/lib/src/services/linter/lint_names.dart b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
index e7db85a..52aee05 100644
--- a/pkg/analysis_server/lib/src/services/linter/lint_names.dart
+++ b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
@@ -71,6 +71,7 @@
   static const String prefer_const_literals_to_create_immutables =
       'prefer_const_literals_to_create_immutables';
   static const String prefer_contains = 'prefer_contains';
+  static const String prefer_double_quotes = 'prefer_double_quotes';
   static const String prefer_equal_for_default_values =
       'prefer_equal_for_default_values';
   static const String prefer_expression_function_bodies =
@@ -104,6 +105,7 @@
   static const String prefer_typing_uninitialized_variables =
       'prefer_typing_uninitialized_variables';
   static const String prefer_void_to_null = 'prefer_void_to_null';
+  static const String require_trailing_commas = 'require_trailing_commas';
   static const String sized_box_for_whitespace = 'sized_box_for_whitespace';
   static const String slash_for_doc_comments = 'slash_for_doc_comments';
   static const String sort_child_properties_last = 'sort_child_properties_last';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index 4b470bf..163572e 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -1327,11 +1327,7 @@
     if (returnType == null) {
       return type;
     } else {
-      if (returnType is InterfaceType && type is InterfaceType) {
-        return InterfaceType.getSmartLeastUpperBound(returnType, type);
-      } else {
-        return typeSystem.leastUpperBound(returnType, type);
-      }
+      return typeSystem.leastUpperBound(returnType, type);
     }
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename.dart b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
index 4f2271f..3ca9d77 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
@@ -66,7 +66,7 @@
       : searchEngine = workspace.searchEngine,
         _element = element,
         elementKindName = element.kind.displayName,
-        oldName = _getDisplayName(element);
+        oldName = _getOldName(element);
 
   Element get element => _element;
 
@@ -111,8 +111,10 @@
   /// Adds individual edits to [change].
   Future<void> fillChange();
 
-  static String _getDisplayName(Element element) {
-    if (element is ImportElement) {
+  static String _getOldName(Element element) {
+    if (element is ConstructorElement) {
+      return element.name;
+    } else if (element is ImportElement) {
       var prefix = element.prefix;
       if (prefix != null) {
         return prefix.displayName;
diff --git a/pkg/analysis_server/lib/src/services/search/hierarchy.dart b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
index 7189bd6..05d4116 100644
--- a/pkg/analysis_server/lib/src/services/search/hierarchy.dart
+++ b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
@@ -12,7 +12,7 @@
 List<Element> getChildren(Element parent, [String? name]) {
   var children = <Element>[];
   visitChildren(parent, (Element element) {
-    if (name == null || element.displayName == name) {
+    if (name == null || _getBaseName(element) == name) {
       children.add(element);
     }
     return false;
@@ -205,3 +205,11 @@
   }
   return element;
 }
+
+String? _getBaseName(Element element) {
+  if (element is PropertyAccessorElement && element.isSetter) {
+    var name = element.name;
+    return name.substring(0, name.length - 1);
+  }
+  return element.name;
+}
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index a6d6d84..0d4629c 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -243,7 +243,7 @@
           raw: true);
       return;
     }
-    var result = await driver.getResult2(filePath);
+    var result = await driver.getResult(filePath);
     if (result is ResolvedUnitResult) {
       var writer = AstWriter(buf);
       result.unit.accept(writer);
@@ -833,7 +833,7 @@
           raw: true);
       return;
     }
-    var result = await driver.getResult2(filePath);
+    var result = await driver.getResult(filePath);
     CompilationUnitElement? compilationUnitElement;
     if (result is ResolvedUnitResult) {
       compilationUnitElement = result.unit.declaredElement;
@@ -949,7 +949,7 @@
 
     p('Other data to include:');
     ul([
-      "the IDE you are using and it's version${ideText.isEmpty ? '' : ' ($ideText)'}",
+      "the IDE you are using and its version${ideText.isEmpty ? '' : ' ($ideText)'}",
       'the Dart SDK version (<code>${escape(_sdkVersion)}</code>)',
       'your operating system (<code>${escape(Platform.operatingSystem)}</code>)',
     ], (line) => buf.writeln(line));
@@ -994,7 +994,7 @@
     h3('Current registrations');
     p('Showing the LSP method name and the registration params sent to the '
         'client.');
-    prettyJson(server.capabilitiesComputer.currentRegistrations);
+    prettyJson(server.capabilitiesComputer.currentRegistrations.toList());
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/status/element_writer.dart b/pkg/analysis_server/lib/src/status/element_writer.dart
index dffcd49..bc09cd5 100644
--- a/pkg/analysis_server/lib/src/status/element_writer.dart
+++ b/pkg/analysis_server/lib/src/status/element_writer.dart
@@ -107,7 +107,6 @@
     if (element is LibraryElement) {
       properties['definingCompilationUnit'] = element.definingCompilationUnit;
       properties['entryPoint'] = element.entryPoint;
-      properties['hasExtUri'] = element.hasExtUri;
       properties['isBrowserApplication'] = element.isBrowserApplication;
       properties['isDartAsync'] = element.isDartAsync;
       properties['isDartCore'] = element.isDartCore;
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/completion_request.dart b/pkg/analysis_server/lib/src/utilities/extensions/completion_request.dart
new file mode 100644
index 0000000..85066d4
--- /dev/null
+++ b/pkg/analysis_server/lib/src/utilities/extensions/completion_request.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2021, 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:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/nullability_suffix.dart';
+import 'package:analyzer/dart/element/type.dart';
+
+extension DartCompletionRequestExtensions on DartCompletionRequest {
+  /// Return `true` if the constructor tear-offs feature is enabled, and the
+  /// context type is a function type that matches an instantiation of the
+  /// [element].
+  ///
+  /// TODO(scheglov) Validate that suggesting a tear-off instead of invocation
+  /// is statistically a good choice.
+  bool shouldSuggestTearOff(ClassElement element) {
+    if (!libraryElement.featureSet.isEnabled(Feature.constructor_tearoffs)) {
+      return false;
+    }
+
+    final contextType = this.contextType;
+    if (contextType is! FunctionType) {
+      return false;
+    }
+
+    var bottomInstance = element.instantiate(
+      typeArguments: List.filled(
+        element.typeParameters.length,
+        libraryElement.typeProvider.neverType,
+      ),
+      nullabilitySuffix: NullabilitySuffix.none,
+    );
+
+    return libraryElement.typeSystem.isSubtypeOf(
+      bottomInstance,
+      contextType.returnType,
+    );
+  }
+}
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/range_factory.dart b/pkg/analysis_server/lib/src/utilities/extensions/range_factory.dart
new file mode 100644
index 0000000..4b8451a
--- /dev/null
+++ b/pkg/analysis_server/lib/src/utilities/extensions/range_factory.dart
@@ -0,0 +1,108 @@
+// Copyright (c) 2021, 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:_fe_analyzer_shared/src/scanner/token.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/source/line_info.dart';
+import 'package:analyzer/source/source_range.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+extension RangeFactoryExtensions on RangeFactory {
+  /// Return a source range that covers the given [item] in the containing
+  /// [list]. This includes a leading or trailing comma, as appropriate, and any
+  /// leading or trailing comments. The [lineInfo] is used to differentiate
+  /// trailing comments (on the same line as the end of the item) from leading
+  /// comments (on lines between the start of the item and the preceding comma).
+  ///
+  /// Throws an `ArgumentError` if the [item] is not an element of the [list].
+  SourceRange nodeInListWithComments<T extends AstNode>(
+      LineInfo lineInfo, NodeList<T> list, T item) {
+    // TODO(brianwilkerson) Improve the name and signature of this method and
+    //  make it part of the API of either `RangeFactory` or
+    //  `DartFileEditBuilder`. The implementation currently assumes that the
+    //  list is an argument list, and we might want to generalize that.
+    // TODO(brianwilkerson) Consider adding parameters to allow us to access the
+    //  left and right parentheses in cases where the only element of the list
+    //  is being removed.
+    // TODO(brianwilkerson) Consider adding a `separator` parameter so that we
+    //  can handle things like statements in a block.
+    if (list.length == 1) {
+      if (list[0] != item) {
+        throw ArgumentError('The item must be in the list.');
+      }
+      // If there's only one item in the list, then delete everything including
+      // any leading or trailing comments, including any trailing comma.
+      var leadingComment = _leadingComment(lineInfo, item.beginToken);
+      var trailingComment = _trailingComment(lineInfo, item.endToken, true);
+      return startEnd(leadingComment, trailingComment);
+    }
+    final index = list.indexOf(item);
+    if (index < 0) {
+      throw ArgumentError('The item must be in the list.');
+    }
+    if (index == 0) {
+      // If this is the first item in the list, then delete everything from the
+      // leading comment for this item to the leading comment for the next item.
+      // This will include the comment after this item.
+      var thisLeadingComment = _leadingComment(lineInfo, item.beginToken);
+      var nextLeadingComment = _leadingComment(lineInfo, list[1].beginToken);
+      return startStart(thisLeadingComment, nextLeadingComment);
+    } else {
+      // If this isn't the first item in the list, then delete everything from
+      // the end of the previous item, after the comma and any trailing comment,
+      // to the end of this item, also after the comma and any trailing comment.
+      var previousTrailingComment =
+          _trailingComment(lineInfo, list[index - 1].endToken, false);
+      var previousHasTrailingComment = previousTrailingComment is CommentToken;
+      var thisTrailingComment =
+          _trailingComment(lineInfo, item.endToken, previousHasTrailingComment);
+      if (!previousHasTrailingComment && thisTrailingComment is CommentToken) {
+        // But if this item has a trailing comment and the previous didn't, then
+        // we'd be deleting both commas, which would leave invalid code. We
+        // can't leave the comment, so instead we leave the preceding comma.
+        previousTrailingComment = previousTrailingComment.next!;
+      }
+      return endEnd(previousTrailingComment, thisTrailingComment);
+    }
+  }
+
+  /// Return the comment token immediately following the [token] if it is on the
+  /// same line as the [token], or the [token] if there is no comment after the
+  /// [token] or if the comment is on a different line than the [token]. If
+  /// [returnComma] is `true` and there is a comma after the [token], then the
+  /// comma will be returned when the [token] would have been.
+  Token _trailingComment(LineInfo lineInfo, Token token, bool returnComma) {
+    var lastToken = token;
+    var nextToken = lastToken.next!;
+    if (nextToken.type == TokenType.COMMA) {
+      lastToken = nextToken;
+      nextToken = lastToken.next!;
+    }
+    var tokenLine = lineInfo.getLocation(lastToken.offset).lineNumber;
+    Token? comment = nextToken.precedingComments;
+    if (comment != null &&
+        lineInfo.getLocation(comment.offset).lineNumber == tokenLine) {
+      // This doesn't account for the possibility of multiple trailing block
+      // comments.
+      return comment;
+    }
+    return returnComma ? lastToken : token;
+  }
+
+  /// Return the left-most comment immediately before the [token] that is not on
+  /// the same line as the first non-comment token before the [token]. Return
+  /// the [token] if there is no such comment.
+  Token _leadingComment(LineInfo lineInfo, Token token) {
+    var previousLine = lineInfo.getLocation(token.previous!.offset).lineNumber;
+    Token? comment = token.precedingComments;
+    while (comment != null) {
+      var commentLine = lineInfo.getLocation(comment.offset).lineNumber;
+      if (commentLine != previousLine) {
+        break;
+      }
+      comment = comment.next;
+    }
+    return comment ?? token;
+  }
+}
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 4c466d1..d727774 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -69,6 +69,8 @@
       '${ExperimentStatus.currentVersion.major}.'
       '${ExperimentStatus.currentVersion.minor}';
 
+  Folder get sdkRoot => newFolder('/sdk');
+
   AnalysisSession get session => contextFor('/home/test').currentSession;
 
   String? get testPackageLanguageVersion => latestLanguageVersion;
@@ -184,8 +186,9 @@
 
     setupResourceProvider();
 
-    MockSdk(
+    createMockSdk(
       resourceProvider: resourceProvider,
+      root: sdkRoot,
     );
 
     writeTestPackageConfig();
@@ -292,7 +295,7 @@
       enableIndex: true,
       includedPaths: collectionIncludedPaths.map(convertPath).toList(),
       resourceProvider: resourceProvider,
-      sdkPath: convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
     );
 
     _addAnalyzedFilesToDrivers();
diff --git a/pkg/analysis_server/test/analysis/get_hover_test.dart b/pkg/analysis_server/test/analysis/get_hover_test.dart
index 927950d..eef7d09 100644
--- a/pkg/analysis_server/test/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/analysis/get_hover_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/protocol_server.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -248,6 +249,110 @@
     }
   }
 
+  Future<void> test_constructorReference_named() async {
+    addTestFile('''
+class A<T> {
+  /// doc aaa
+  /// doc bbb
+  A.named();
+}
+
+void f() {
+  A<double>.named;
+}
+''');
+    var hover = await prepareHover('named;');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, 'doc aaa\ndoc bbb');
+    expect(hover.elementDescription, 'A<double> A.named()');
+    expect(hover.elementKind, 'constructor');
+    // types
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_constructorReference_unnamed_declared() async {
+    addTestFile('''
+class A<T> {
+  /// doc aaa
+  /// doc bbb
+  A();
+}
+
+void f() {
+  A<double>.new;
+}
+''');
+    var hover = await prepareHover('new;');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, 'doc aaa\ndoc bbb');
+    expect(hover.elementDescription, 'A<double> A()');
+    expect(hover.elementKind, 'constructor');
+    // types
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_constructorReference_unnamed_declared_new() async {
+    addTestFile('''
+class A<T> {
+  /// doc aaa
+  /// doc bbb
+  A.new();
+}
+
+void f() {
+  A<double>.new;
+}
+''');
+    var hover = await prepareHover('new;');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, 'doc aaa\ndoc bbb');
+    expect(hover.elementDescription, 'A<double> A()');
+    expect(hover.elementKind, 'constructor');
+    // types
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_constructorReference_unnamed_synthetic() async {
+    addTestFile('''
+class A<T> {}
+
+void f() {
+  A<double>.new;
+}
+''');
+    var hover = await prepareHover('new;');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, isNull);
+    expect(hover.elementDescription, 'A<double> A()');
+    expect(hover.elementKind, 'constructor');
+    // types
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
   Future<void> test_dartdoc_block() async {
     addTestFile('''
 /**
@@ -402,6 +507,85 @@
     expect(hover.parameter, isNull);
   }
 
+  Future<void> test_functionReference_classMethod_instance() async {
+    addTestFile('''
+class A<T> {
+  /// doc aaa
+  /// doc bbb
+  int foo<U>(T t, U u) => 0;
+}
+
+void f(A<int> a) {
+  a.foo<double>;
+}
+''');
+    var hover = await prepareHover('foo<double>');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
+    expect(hover.elementDescription, 'int foo<U>(int t, U u)');
+    expect(hover.elementKind, 'method');
+    // types
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_functionReference_classMethod_static() async {
+    addTestFile('''
+class A<T> {
+  /// doc aaa
+  /// doc bbb
+  static int foo<U>(U u) => 0;
+}
+
+void f() {
+  A.foo<double>;
+}
+''');
+    var hover = await prepareHover('foo<double>');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
+    expect(hover.elementDescription, 'int foo<U>(U u)');
+    expect(hover.elementKind, 'method');
+    // types
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_functionReference_topLevelFunction() async {
+    addTestFile('''
+/// doc aaa
+/// doc bbb
+int foo<T>(T a) => 0;
+
+void f() {
+  foo<double>;
+}
+''');
+    var hover = await prepareHover('foo<double>');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, isNull);
+    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
+    expect(hover.elementDescription, 'int foo<T>(T a)');
+    expect(hover.elementKind, 'function');
+    // types
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
   Future<void> test_getter_synthetic() async {
     addTestFile('''
 library my.library;
@@ -684,7 +868,6 @@
   }
 
   Future<void> test_nonNullable() async {
-    createAnalysisOptionsFile(experiments: ['non-nullable']);
     addTestFile('''
 int? f(double? a) => null;
 
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index 86ec647..809d27a 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -89,24 +89,16 @@
     return testFile;
   }
 
-  /// Create an analysis options file based on the given arguments.
-  void createAnalysisOptionsFile({List<String>? experiments}) {
-    var buffer = StringBuffer();
-    if (experiments != null) {
-      buffer.writeln('analyzer:');
-      buffer.writeln('  enable-experiment:');
-      for (var experiment in experiments) {
-        buffer.writeln('    - $experiment');
-      }
-    }
-    newAnalysisOptionsYamlFile(projectPath, content: buffer.toString());
-  }
-
   AnalysisServer createAnalysisServer() {
     //
     // Create an SDK in the mock file system.
     //
-    MockSdk(resourceProvider: resourceProvider);
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+
     //
     // Create server
     //
@@ -115,7 +107,7 @@
         serverChannel,
         resourceProvider,
         options,
-        DartSdkManager(resourceProvider.convertPath('/sdk')),
+        DartSdkManager(sdkRoot.path),
         CrashReportingAttachmentsBuilder.empty,
         InstrumentationService.NULL_SERVICE);
   }
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index ca5385e..4b41a22 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -76,13 +76,19 @@
 
   void setUp() {
     channel = MockServerChannel();
+
     // Create an SDK in the mock file system.
-    MockSdk(resourceProvider: resourceProvider);
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+
     server = AnalysisServer(
         channel,
         resourceProvider,
         AnalysisServerOptions(),
-        DartSdkManager(convertPath('/sdk')),
+        DartSdkManager(sdkRoot.path),
         CrashReportingAttachmentsBuilder.empty,
         InstrumentationService.NULL_SERVICE);
   }
diff --git a/pkg/analysis_server/test/benchmarks_test.dart b/pkg/analysis_server/test/benchmarks_test.dart
index 86b6e5f..87a822e 100644
--- a/pkg/analysis_server/test/benchmarks_test.dart
+++ b/pkg/analysis_server/test/benchmarks_test.dart
@@ -7,15 +7,14 @@
 import 'dart:convert';
 import 'dart:io';
 
+import 'package:analyzer_utilities/package_root.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 
 void main() => defineTests();
 
 String get _serverSourcePath {
-  var script = Platform.script.toFilePath(windows: Platform.isWindows);
-  var pkgPath = path.normalize(path.join(path.dirname(script), '..', '..'));
-  return path.join(pkgPath, 'analysis_server');
+  return path.join(packageRoot, 'analysis_server');
 }
 
 void defineTests() {
@@ -26,8 +25,14 @@
       expect(benchmarks, isNotEmpty);
     });
 
+    const benchmarkIdsToSkip = {
+      'analysis-flutter-analyze',
+      'das-flutter',
+      'lsp-flutter',
+    };
+
     for (var benchmarkId in benchmarks) {
-      if (benchmarkId == 'analysis-flutter-analyze') {
+      if (benchmarkIdsToSkip.contains(benchmarkId)) {
         continue;
       }
 
diff --git a/pkg/analysis_server/test/client/completion_driver_test.dart b/pkg/analysis_server/test/client/completion_driver_test.dart
index 3f888c5..c705575 100644
--- a/pkg/analysis_server/test/client/completion_driver_test.dart
+++ b/pkg/analysis_server/test/client/completion_driver_test.dart
@@ -104,18 +104,8 @@
 
   Future<List<CompletionSuggestion>> getSuggestions() async {
     if (supportsAvailableSuggestions) {
-      // todo (pq): consider moving
-      const internalLibs = [
-        'dart:async2',
-        'dart:_interceptors',
-        'dart:_internal',
-      ];
-      for (var lib in driver.sdk.sdkLibraries) {
-        var uri = lib.shortName;
-        if (!internalLibs.contains(uri)) {
-          await driver.waitForSetWithUri(uri);
-        }
-      }
+      await driver.waitForSetWithUri('dart:core');
+      await driver.waitForSetWithUri('dart:async');
     }
 
     suggestions = await driver.getSuggestions();
diff --git a/pkg/analysis_server/test/client/impl/abstract_client.dart b/pkg/analysis_server/test/client/impl/abstract_client.dart
index caa0386..51bd14d 100644
--- a/pkg/analysis_server/test/client/impl/abstract_client.dart
+++ b/pkg/analysis_server/test/client/impl/abstract_client.dart
@@ -35,8 +35,6 @@
   final String testFilePath;
   late String testCode;
 
-  late MockSdk sdk;
-
   final AnalysisServerOptions serverOptions;
 
   AbstractClient({
@@ -106,7 +104,10 @@
 
   /// Create an analysis server with the given [sdkPath].
   AnalysisServer createAnalysisServer(String sdkPath) {
-    sdk = MockSdk(resourceProvider: resourceProvider);
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: newFolder(sdkPath),
+    );
     return AnalysisServer(
         serverChannel,
         resourceProvider,
@@ -136,7 +137,7 @@
     return response;
   }
 
-  File newFile(String path, String content, [int stamp]);
+  File newFile(String path, String content);
 
   Folder newFolder(String path);
 
diff --git a/pkg/analysis_server/test/client/impl/completion_driver.dart b/pkg/analysis_server/test/client/impl/completion_driver.dart
index 60083d6..bbdeee9 100644
--- a/pkg/analysis_server/test/client/impl/completion_driver.dart
+++ b/pkg/analysis_server/test/client/impl/completion_driver.dart
@@ -131,8 +131,8 @@
   }
 
   @override
-  File newFile(String path, String content, [int? stamp]) => resourceProvider
-      .newFile(resourceProvider.convertPath(path), content, stamp);
+  File newFile(String path, String content) =>
+      resourceProvider.newFile(resourceProvider.convertPath(path), content);
 
   @override
   Folder newFolder(String path) =>
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index 0eee133..8ea43c3 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -1437,13 +1437,19 @@
     projectPath = convertPath('/project');
     testFile = convertPath('/project/bin/test.dart');
     serverChannel = MockServerChannel();
+
     // Create an SDK in the mock file system.
-    MockSdk(resourceProvider: resourceProvider);
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+
     server = AnalysisServer(
         serverChannel,
         resourceProvider,
         AnalysisServerOptions(),
-        DartSdkManager(convertPath('/sdk')),
+        DartSdkManager(sdkRoot.path),
         CrashReportingAttachmentsBuilder.empty,
         InstrumentationService.NULL_SERVICE);
     handler = AnalysisDomainHandler(server);
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index d9c733a..2a46330 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -2,12 +2,24 @@
 // 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:analysis_server/protocol/protocol_generated.dart';
+import 'dart:async';
+
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/domain_analysis.dart';
+import 'package:analysis_server/src/domain_completion.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
+import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
+import 'package:analysis_server/src/services/completion/dart/not_imported_contributor.dart';
+import 'package:analysis_server/src/utilities/mocks.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/service.dart';
+import 'package:analyzer/src/generated/sdk.dart';
+import 'package:analyzer/src/test_utilities/mock_sdk.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
+import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -18,11 +30,1425 @@
 
 void main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(CompletionDomainHandlerGetSuggestionDetails2Test);
+    defineReflectiveTests(CompletionDomainHandlerGetSuggestions2Test);
     defineReflectiveTests(CompletionDomainHandlerGetSuggestionsTest);
   });
 }
 
 @reflectiveTest
+class CompletionDomainHandlerGetSuggestionDetails2Test
+    extends PubPackageAnalysisServerTest {
+  Future<void> test_alreadyImported() async {
+    await _configureWithWorkspaceRoot();
+
+    var validator = await _getTestCodeDetails('''
+import 'dart:math';
+void f() {
+  Rand^
+}
+''', completion: 'Random', libraryUri: 'dart:math');
+    validator
+      ..hasCompletion('Random')
+      ..hasChange().assertNoFileEdits();
+  }
+
+  Future<void> test_import_dart() async {
+    await _configureWithWorkspaceRoot();
+
+    var validator = await _getTestCodeDetails('''
+void f() {
+  R^
+}
+''', completion: 'Random', libraryUri: 'dart:math');
+    validator
+      ..hasCompletion('Random')
+      ..hasChange()
+          .hasFileEdit(testFilePathPlatform)
+          .whenApplied(testFileContent, r'''
+import 'dart:math';
+
+void f() {
+  R
+}
+''');
+  }
+
+  Future<void> test_import_package_dependencies() async {
+    // TODO(scheglov) Switch to PubspecYamlFileConfig
+    newPubspecYamlFile(testPackageRootPath, r'''
+name: test
+dependencies:
+  aaa: any
+''');
+
+    var aaaRoot = getFolder('$workspaceRootPath/packages/aaa');
+    newFile('${aaaRoot.path}/lib/f.dart', content: '''
+class Test {}
+''');
+
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: aaaRoot.path),
+    );
+
+    await _configureWithWorkspaceRoot();
+
+    var validator = await _getTestCodeDetails('''
+void f() {
+  T^
+}
+''', completion: 'Test', libraryUri: 'package:aaa/a.dart');
+    validator
+      ..hasCompletion('Test')
+      ..hasChange()
+          .hasFileEdit(testFilePathPlatform)
+          .whenApplied(testFileContent, r'''
+import 'package:aaa/a.dart';
+
+void f() {
+  T
+}
+''');
+  }
+
+  Future<void> test_import_package_this() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class Test {}
+''');
+
+    await _configureWithWorkspaceRoot();
+
+    var validator = await _getTestCodeDetails('''
+void f() {
+  T^
+}
+''', completion: 'Test', libraryUri: 'package:test/a.dart');
+    validator
+      ..hasCompletion('Test')
+      ..hasChange()
+          .hasFileEdit(testFilePathPlatform)
+          .whenApplied(testFileContent, r'''
+import 'package:test/a.dart';
+
+void f() {
+  T
+}
+''');
+  }
+
+  Future<void> test_invalidLibraryUri() async {
+    await _configureWithWorkspaceRoot();
+
+    var request = CompletionGetSuggestionDetails2Params(
+            testFilePathPlatform, 0, 'Random', '[foo]:bar')
+        .toRequest('0');
+
+    var response = await _handleRequest(request);
+    expect(response.error?.code, RequestErrorCode.INVALID_PARAMETER);
+    // TODO(scheglov) Check that says "libraryUri".
+  }
+
+  Future<void> test_invalidPath() async {
+    await _configureWithWorkspaceRoot();
+
+    var request =
+        CompletionGetSuggestionDetails2Params('foo', 0, 'Random', 'dart:math')
+            .toRequest('0');
+
+    var response = await _handleRequest(request);
+    expect(response.error?.code, RequestErrorCode.INVALID_FILE_PATH_FORMAT);
+  }
+
+  Future<GetSuggestionDetails2Validator> _getCodeDetails({
+    required String path,
+    required String content,
+    required String completion,
+    required String libraryUri,
+  }) async {
+    var completionOffset = content.indexOf('^');
+    expect(completionOffset, isNot(equals(-1)), reason: 'missing ^');
+
+    var nextOffset = content.indexOf('^', completionOffset + 1);
+    expect(nextOffset, equals(-1), reason: 'too many ^');
+
+    newFile(path,
+        content: content.substring(0, completionOffset) +
+            content.substring(completionOffset + 1));
+
+    return await _getDetails(
+      path: path,
+      completionOffset: completionOffset,
+      completion: completion,
+      libraryUri: libraryUri,
+    );
+  }
+
+  Future<GetSuggestionDetails2Validator> _getDetails({
+    required String path,
+    required int completionOffset,
+    required String completion,
+    required String libraryUri,
+  }) async {
+    var request = CompletionGetSuggestionDetails2Params(
+      path,
+      completionOffset,
+      completion,
+      libraryUri,
+    ).toRequest('0');
+
+    var response = await _handleSuccessfulRequest(request);
+    var result = CompletionGetSuggestionDetails2Result.fromResponse(response);
+    return GetSuggestionDetails2Validator(result);
+  }
+
+  Future<GetSuggestionDetails2Validator> _getTestCodeDetails(
+    String content, {
+    required String completion,
+    required String libraryUri,
+  }) async {
+    return _getCodeDetails(
+      path: convertPath(testFilePath),
+      content: content,
+      completion: completion,
+      libraryUri: libraryUri,
+    );
+  }
+}
+
+@reflectiveTest
+class CompletionDomainHandlerGetSuggestions2Test
+    extends PubPackageAnalysisServerTest {
+  @override
+  void setUp() {
+    super.setUp();
+    completionDomain.budgetDuration = const Duration(seconds: 30);
+  }
+
+  void tearDown() {
+    NotImportedContributor.onFile = null;
+  }
+
+  Future<void> test_notImported_abort() async {
+    await _configureWithWorkspaceRoot();
+
+    NotImportedContributor.onFile = (file) {
+      if (file.uriStr == 'dart:math') {
+        unawaited(
+          _getSuggestions(
+            path: convertPath(testFilePath),
+            completionOffset: 0,
+            maxResults: 100,
+          ),
+        );
+      }
+    };
+
+    var responseValidator = await _getTestCodeSuggestions('''
+void f() {
+  Rand^
+}
+''');
+
+    responseValidator
+      ..assertIncomplete()
+      ..assertReplacementBack(4)
+      ..assertLibrariesToImport(includes: [], excludes: [
+        'dart:core',
+        'dart:math',
+      ]);
+
+    responseValidator.suggestions.assertEmpty();
+  }
+
+  Future<void> test_notImported_emptyBudget() async {
+    await _configureWithWorkspaceRoot();
+
+    // Empty budget, so no not yet imported libraries.
+    completionDomain.budgetDuration = const Duration(milliseconds: 0);
+
+    var responseValidator = await _getTestCodeSuggestions('''
+void f() {
+  Rand^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4)
+      ..assertLibrariesToImport(includes: [], excludes: [
+        'dart:core',
+        'dart:math',
+      ]);
+
+    responseValidator.suggestions.withElementClass().assertEmpty();
+  }
+
+  Future<void> test_notImported_pub_dependencies_inLib() async {
+    // TODO(scheglov) Switch to PubspecYamlFileConfig
+    newPubspecYamlFile(testPackageRootPath, r'''
+name: test
+dependencies:
+  aaa: any
+dev_dependencies:
+  bbb: any
+''');
+
+    var aaaRoot = getFolder('$workspaceRootPath/packages/aaa');
+    newFile('${aaaRoot.path}/lib/f.dart', content: '''
+class A01 {}
+''');
+    newFile('${aaaRoot.path}/lib/src/f.dart', content: '''
+class A02 {}
+''');
+
+    var bbbRoot = getFolder('$workspaceRootPath/packages/bbb');
+    newFile('${bbbRoot.path}/lib/f.dart', content: '''
+class A03 {}
+''');
+    newFile('${bbbRoot.path}/lib/src/f.dart', content: '''
+class A04 {}
+''');
+
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: aaaRoot.path)
+        ..add(name: 'bbb', rootPath: bbbRoot.path),
+    );
+
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+void f() {
+  A0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2)
+      ..assertLibrariesToImport(includes: [
+        'package:aaa/f.dart',
+      ], excludes: [
+        'dart:core',
+        'package:bbb/f.dart',
+        'package:test/test.dart',
+      ]);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01']);
+    classes.withCompletion('A01').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:aaa/f.dart');
+  }
+
+  Future<void> test_notImported_pub_dependencies_inTest() async {
+    // TODO(scheglov) Switch to PubspecYamlFileConfig
+    newPubspecYamlFile(testPackageRootPath, r'''
+name: test
+dependencies:
+  aaa: any
+dev_dependencies:
+  bbb: any
+''');
+
+    var aaaRoot = getFolder('$workspaceRootPath/packages/aaa');
+    newFile('${aaaRoot.path}/lib/f.dart', content: '''
+class A01 {}
+''');
+    newFile('${aaaRoot.path}/lib/src/f.dart', content: '''
+class A02 {}
+''');
+
+    var bbbRoot = getFolder('$workspaceRootPath/packages/bbb');
+    newFile('${bbbRoot.path}/lib/f.dart', content: '''
+class A03 {}
+''');
+    newFile('${bbbRoot.path}/lib/src/f.dart', content: '''
+class A04 {}
+''');
+
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: aaaRoot.path)
+        ..add(name: 'bbb', rootPath: bbbRoot.path),
+    );
+
+    await _configureWithWorkspaceRoot();
+
+    var test_path = convertPath('$testPackageTestPath/test.dart');
+    var responseValidator = await _getCodeSuggestions(
+      path: test_path,
+      content: '''
+void f() {
+  A0^
+}
+''',
+    );
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2)
+      ..assertLibrariesToImport(includes: [
+        'package:aaa/f.dart',
+        'package:bbb/f.dart',
+      ], excludes: [
+        'dart:core',
+        'package:test/test.dart',
+      ]);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01', 'A03']);
+    classes.withCompletion('A01').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:aaa/f.dart');
+    classes.withCompletion('A03').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:bbb/f.dart');
+  }
+
+  /// TODO(scheglov) Only lib/ libraries in lib/, no test/.
+  /// TODO(scheglov) Suggestions from available Pub packages.
+  Future<void> test_notImported_pub_this() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A01 {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: '''
+class A02 {}
+''');
+
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+void f() {
+  A0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2)
+      ..assertLibrariesToImport(includes: [
+        'dart:async',
+        'dart:math',
+        'package:test/a.dart',
+        'package:test/b.dart',
+      ], excludes: [
+        'dart:core',
+        'package:test/test.dart',
+      ]);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01', 'A02']);
+    classes.withCompletion('A01').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/a.dart');
+    classes.withCompletion('A02').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/b.dart');
+  }
+
+  Future<void> test_notImported_pub_this_hasImport() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A01 {}
+class A02 {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: '''
+class A03 {}
+''');
+
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+import 'a.dart';
+
+void f() {
+  A0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2)
+      ..assertLibrariesToImport(includes: [
+        'dart:async',
+        'dart:math',
+        'package:test/b.dart',
+      ], excludes: [
+        'dart:core',
+        'package:test/a.dart',
+        'package:test/test.dart',
+      ]);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01', 'A02', 'A03']);
+    classes.withCompletion('A01').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport(isNull);
+    classes.withCompletion('A02').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport(isNull);
+    classes.withCompletion('A03').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/b.dart');
+  }
+
+  Future<void> test_notImported_pub_this_hasImport_hasShow() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A01 {}
+class A02 {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: '''
+class A03 {}
+''');
+
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+import 'a.dart' show A01;
+
+void f() {
+  A0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2)
+      ..assertLibrariesToImport(includes: [
+        'dart:async',
+        'dart:math',
+        'package:test/a.dart',
+        'package:test/b.dart',
+      ], excludes: [
+        'dart:core',
+        'package:test/test.dart',
+      ]);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01', 'A02', 'A03']);
+    classes.withCompletion('A01').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport(isNull);
+    classes.withCompletion('A02').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/a.dart');
+    classes.withCompletion('A03').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/b.dart');
+  }
+
+  Future<void> test_notImported_pub_this_inLib_excludesTest() async {
+    // TODO(scheglov) Switch to PubspecYamlFileConfig
+    newPubspecYamlFile(testPackageRootPath, r'''
+name: test
+''');
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A01 {}
+''');
+
+    var b = newFile('$testPackageTestPath/b.dart', content: '''
+class A02 {}
+''');
+
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+void f() {
+  A0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2)
+      ..assertLibrariesToImport(includes: [
+        'package:test/a.dart',
+      ], excludes: [
+        'dart:core',
+        'package:test/test.dart',
+        toUriStr(b.path),
+      ]);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01']);
+    classes.withCompletion('A01').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/a.dart');
+  }
+
+  Future<void> test_notImported_pub_this_inLib_includesThisSrc() async {
+    // TODO(scheglov) Switch to PubspecYamlFileConfig
+    newPubspecYamlFile(testPackageRootPath, r'''
+name: test
+''');
+
+    newFile('$testPackageLibPath/f.dart', content: '''
+class A01 {}
+''');
+
+    newFile('$testPackageLibPath/src/f.dart', content: '''
+class A02 {}
+''');
+
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+void f() {
+  A0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2)
+      ..assertLibrariesToImport(includes: [
+        'package:test/f.dart',
+        'package:test/src/f.dart',
+      ], excludes: [
+        'dart:core',
+        'package:test/test.dart',
+      ]);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01', 'A02']);
+    classes.withCompletion('A01').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/f.dart');
+    classes.withCompletion('A02').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/src/f.dart');
+  }
+
+  Future<void> test_notImported_pub_this_inTest_includesTest() async {
+    // TODO(scheglov) Switch to PubspecYamlFileConfig
+    newPubspecYamlFile(testPackageRootPath, r'''
+name: test
+''');
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A01 {}
+''');
+
+    var b = newFile('$testPackageTestPath/b.dart', content: '''
+class A02 {}
+''');
+    var b_uriStr = toUriStr(b.path);
+
+    await _configureWithWorkspaceRoot();
+
+    var test_path = convertPath('$testPackageTestPath/test.dart');
+    var responseValidator = await _getCodeSuggestions(
+      path: test_path,
+      content: '''
+void f() {
+  A0^
+}
+''',
+    );
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2)
+      ..assertLibrariesToImport(includes: [
+        'package:test/a.dart',
+        b_uriStr,
+      ], excludes: [
+        'dart:core',
+        toUriStr(test_path),
+      ]);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01', 'A02']);
+    classes.withCompletion('A01').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/a.dart');
+    classes.withCompletion('A02').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport(b_uriStr);
+  }
+
+  Future<void> test_notImported_pub_this_inTest_includesThisSrc() async {
+    // TODO(scheglov) Switch to PubspecYamlFileConfig
+    newPubspecYamlFile(testPackageRootPath, r'''
+name: test
+''');
+
+    newFile('$testPackageLibPath/f.dart', content: '''
+class A01 {}
+''');
+
+    newFile('$testPackageLibPath/src/f.dart', content: '''
+class A02 {}
+''');
+
+    await _configureWithWorkspaceRoot();
+
+    var test_path = convertPath('$testPackageTestPath/test.dart');
+    var responseValidator = await _getCodeSuggestions(
+      path: test_path,
+      content: '''
+void f() {
+  A0^
+}
+''',
+    );
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2)
+      ..assertLibrariesToImport(includes: [
+        'package:test/f.dart',
+        'package:test/src/f.dart',
+      ], excludes: [
+        'dart:core',
+        'package:test/test.dart',
+      ]);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01', 'A02']);
+    classes.withCompletion('A01').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/f.dart');
+    classes.withCompletion('A02').assertSingle()
+      ..assertClass()
+      ..assertLibraryToImport('package:test/src/f.dart');
+  }
+
+  Future<void> test_numResults_class_methods() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+class A {
+  void foo01() {}
+  void foo02() {}
+  void foo03() {}
+}
+
+void f(A a) {
+  a.foo0^
+}
+''', maxResults: 2);
+
+    responseValidator
+      ..assertIncomplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+  }
+
+  Future<void> test_numResults_topLevelVariables() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+var foo01 = 0;
+var foo02 = 0;
+var foo03 = 0;
+
+void f() {
+  foo0^
+}
+''', maxResults: 2);
+
+    responseValidator
+      ..assertIncomplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+    suggestionsValidator
+        .withCompletion('foo01')
+        .assertSingle()
+        .assertTopLevelVariable();
+    suggestionsValidator
+        .withCompletion('foo02')
+        .assertSingle()
+        .assertTopLevelVariable();
+  }
+
+  Future<void> test_numResults_topLevelVariables_imported_withPrefix() async {
+    await _configureWithWorkspaceRoot();
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+var foo01 = 0;
+var foo02 = 0;
+var foo03 = 0;
+''');
+
+    var responseValidator = await _getTestCodeSuggestions('''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.^
+}
+''', maxResults: 2);
+
+    responseValidator
+      ..assertIncomplete()
+      ..assertEmptyReplacement();
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+  }
+
+  Future<void> test_prefixed_class_constructors() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+class A {
+  A.foo01();
+  A.foo02();
+}
+
+void f() {
+  A.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestions = responseValidator.suggestions;
+    suggestions.assertCompletions(['foo01', 'foo02']);
+    suggestions.withCompletion('foo01').assertSingle().assertConstructor();
+    suggestions.withCompletion('foo02').assertSingle().assertConstructor();
+  }
+
+  Future<void> test_prefixed_class_getters() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+class A {
+  int get foo01 => 0;
+  int get foo02 => 0;
+}
+
+void f(A a) {
+  a.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestions = responseValidator.suggestions;
+    suggestions.assertCompletions(['foo01', 'foo02']);
+    suggestions.withCompletion('foo01').assertSingle().assertGetter();
+    suggestions.withCompletion('foo02').assertSingle().assertGetter();
+  }
+
+  Future<void> test_prefixed_class_methods_instance() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+class A {
+  void foo01() {}
+  void foo02() {}
+}
+
+void f(A a) {
+  a.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestions = responseValidator.suggestions;
+    suggestions.assertCompletions(['foo01', 'foo02']);
+    suggestions.withCompletion('foo01').assertSingle().assertMethod();
+    suggestions.withCompletion('foo02').assertSingle().assertMethod();
+  }
+
+  Future<void> test_prefixed_class_methods_static() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions('''
+class A {
+  static void foo01() {}
+  static void foo02() {}
+}
+
+void f() {
+  A.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestions = responseValidator.suggestions;
+    suggestions.assertCompletions(['foo01', 'foo02']);
+    suggestions.withCompletion('foo01').assertSingle().assertMethod();
+    suggestions.withCompletion('foo02').assertSingle().assertMethod();
+  }
+
+  Future<void> test_prefixed_expression_extensionGetters() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+extension E1 on int {
+  int get foo01 => 0;
+  int get foo02 => 0;
+  int get bar => 0;
+}
+
+extension E2 on double {
+  int get foo03 => 0;
+}
+
+void f() {
+  0.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+
+    suggestionsValidator.withCompletion('foo01').assertSingle().assertGetter();
+    suggestionsValidator.withCompletion('foo02').assertSingle().assertGetter();
+  }
+
+  Future<void> test_prefixed_expression_extensionGetters_notImported() async {
+    await _configureWithWorkspaceRoot();
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+extension E1 on int {
+  int get foo01 => 0;
+  int get bar => 0;
+}
+
+extension E2 on int {
+  int get foo02 => 0;
+}
+
+extension E3 on double {
+  int get foo03 => 0;
+}
+''');
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+void f() {
+  0.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+
+    suggestionsValidator.withCompletion('foo01').assertSingle()
+      ..assertGetter()
+      ..assertLibraryToImport('package:test/a.dart');
+    suggestionsValidator.withCompletion('foo02').assertSingle()
+      ..assertGetter()
+      ..assertLibraryToImport('package:test/a.dart');
+  }
+
+  Future<void>
+      test_prefixed_expression_extensionGetters_notImported_private() async {
+    await _configureWithWorkspaceRoot();
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+extension E1 on int {
+  int get foo01 => 0;
+}
+
+extension _E2 on int {
+  int get foo02 => 0;
+}
+
+extension on int {
+  int get foo03 => 0;
+}
+''');
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+void f() {
+  0.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01']);
+
+    suggestionsValidator.withCompletion('foo01').assertSingle()
+      ..assertGetter()
+      ..assertLibraryToImport('package:test/a.dart');
+  }
+
+  Future<void> test_prefixed_expression_extensionMethods() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+extension E1 on int {
+  void foo01() {}
+  void foo02() {}
+  void bar() {}
+}
+
+extension E2 on double {
+  void foo03() {}
+}
+
+void f() {
+  0.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+
+    suggestionsValidator.withCompletion('foo01').assertSingle().assertMethod();
+    suggestionsValidator.withCompletion('foo02').assertSingle().assertMethod();
+  }
+
+  Future<void> test_prefixed_expression_extensionMethods_notImported() async {
+    await _configureWithWorkspaceRoot();
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+extension E1 on int {
+  void foo01() {}
+  void bar() {}
+}
+
+extension E2 on int {
+  void foo02() {}
+}
+
+extension E3 on double {
+  void foo03() {}
+}
+''');
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+void f() {
+  0.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+
+    suggestionsValidator.withCompletion('foo01').assertSingle()
+      ..assertMethod()
+      ..assertLibraryToImport('package:test/a.dart');
+    suggestionsValidator.withCompletion('foo02').assertSingle()
+      ..assertMethod()
+      ..assertLibraryToImport('package:test/a.dart');
+  }
+
+  Future<void> test_prefixed_expression_extensionSetters() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+extension E1 on int {
+  set foo01(int _) {}
+  set foo02(int _) {}
+  set bar(int _) {}
+}
+
+extension E2 on double {
+  set foo03(int _) {}
+}
+
+void f() {
+  0.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+
+    suggestionsValidator.withCompletion('foo01').assertSingle().assertSetter();
+    suggestionsValidator.withCompletion('foo02').assertSingle().assertSetter();
+  }
+
+  Future<void> test_prefixed_expression_extensionSetters_notImported() async {
+    await _configureWithWorkspaceRoot();
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+extension E1 on int {
+  set foo01(int _) {}
+  set bar(int _) {}
+}
+
+extension E2 on int {
+  set foo02(int _) {}
+}
+
+extension E3 on double {
+  set foo03(int _) {}
+}
+''');
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+void f() {
+  0.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+
+    suggestionsValidator.withCompletion('foo01').assertSingle()
+      ..assertSetter()
+      ..assertLibraryToImport('package:test/a.dart');
+    suggestionsValidator.withCompletion('foo02').assertSingle()
+      ..assertSetter()
+      ..assertLibraryToImport('package:test/a.dart');
+  }
+
+  Future<void>
+      test_prefixed_expression_extensionSetters_notImported_private() async {
+    await _configureWithWorkspaceRoot();
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+extension E1 on int {
+  set foo01(int _) {}
+}
+
+extension _E2 on int {
+  set foo02(int _) {}
+}
+
+extension on int {
+  set foo03(int _) {}
+}
+''');
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+void f() {
+  0.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01']);
+
+    suggestionsValidator.withCompletion('foo01').assertSingle()
+      ..assertSetter()
+      ..assertLibraryToImport('package:test/a.dart');
+  }
+
+  Future<void> test_prefixed_extensionGetters_imported() async {
+    await _configureWithWorkspaceRoot();
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+extension E1 on int {
+  int get foo01 => 0;
+  int get foo02 => 0;
+  int get bar => 0;
+}
+
+extension E2 on double {
+  int get foo03 => 0;
+}
+''');
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+import 'a.dart';
+
+void f() {
+  0.foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+
+    suggestionsValidator.withCompletion('foo01').assertSingle().assertGetter();
+    suggestionsValidator.withCompletion('foo02').assertSingle().assertGetter();
+  }
+
+  Future<void> test_prefixed_extensionOverride_extensionGetters() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+extension E1 on int {
+  int get foo01 => 0;
+}
+
+extension E2 on int {
+  int get foo02 => 0;
+}
+
+void f() {
+  E1(0).foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01']);
+    suggestionsValidator.withCompletion('foo01').assertSingle().assertGetter();
+  }
+
+  Future<void> test_prefixed_extensionOverride_extensionMethods() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+extension E1 on int {
+  void foo01() {}
+}
+
+extension E2 on int {
+  void foo01() {}
+}
+
+void f() {
+  E1(0).foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01']);
+    suggestionsValidator.withCompletion('foo01').assertSingle().assertMethod();
+  }
+
+  Future<void> test_unprefixed_filters() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+var foo01 = 0;
+var foo02 = 0;
+var bar01 = 0;
+var bar02 = 0;
+
+void f() {
+  foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+
+    suggestionsValidator
+        .withCompletion('foo01')
+        .assertSingle()
+        .assertTopLevelVariable();
+    suggestionsValidator
+        .withCompletion('foo02')
+        .assertSingle()
+        .assertTopLevelVariable();
+    suggestionsValidator.withCompletion('bar01').assertEmpty();
+    suggestionsValidator.withCompletion('bar02').assertEmpty();
+  }
+
+  Future<void> test_unprefixed_imported_class() async {
+    await _configureWithWorkspaceRoot();
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A01 {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: '''
+class A02 {}
+''');
+
+    var responseValidator = await _getTestCodeSuggestions('''
+import 'a.dart';
+import 'b.dart';
+
+void f() {
+  A0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(2);
+
+    var classes = responseValidator.suggestions.withElementClass();
+    classes.assertCompletions(['A01', 'A02']);
+    classes.withCompletion('A01').assertSingle().assertClass();
+    classes.withCompletion('A02').assertSingle().assertClass();
+  }
+
+  Future<void> test_unprefixed_imported_topLevelVariable() async {
+    await _configureWithWorkspaceRoot();
+
+    newFile('$testPackageLibPath/a.dart', content: '''
+var foo01 = 0;
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: '''
+var foo02 = 0;
+''');
+
+    var responseValidator = await _getTestCodeSuggestions('''
+import 'a.dart';
+import 'b.dart';
+
+void f() {
+  foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    suggestionsValidator.assertCompletions(['foo01', 'foo02']);
+    suggestionsValidator
+        .withCompletion('foo01')
+        .assertSingle()
+        .assertTopLevelVariable();
+    suggestionsValidator
+        .withCompletion('foo02')
+        .assertSingle()
+        .assertTopLevelVariable();
+  }
+
+  Future<void> test_unprefixed_sorts_byScore() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+var fooAB = 0;
+var fooBB = 0;
+
+void f() {
+  fooB^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    // `fooBB` has better score than `fooAB` - prefix match
+    suggestionsValidator.assertCompletions(['fooBB', 'fooAB']);
+  }
+
+  Future<void> test_unprefixed_sorts_byType() async {
+    await _configureWithWorkspaceRoot();
+
+    var responseValidator = await _getTestCodeSuggestions(r'''
+var foo01 = 0.0;
+var foo02 = 0;
+
+void f() {
+  int v = foo0^
+}
+''');
+
+    responseValidator
+      ..assertComplete()
+      ..assertReplacementBack(4);
+
+    var suggestionsValidator = responseValidator.suggestions;
+    // `foo02` has better relevance, its type matches the context type
+    suggestionsValidator.assertCompletions(['foo02', 'foo01']);
+  }
+
+  Future<CompletionGetSuggestions2ResponseValidator> _getCodeSuggestions({
+    required String path,
+    required String content,
+    int maxResults = 1 << 10,
+  }) async {
+    var completionOffset = content.indexOf('^');
+    expect(completionOffset, isNot(equals(-1)), reason: 'missing ^');
+
+    var nextOffset = content.indexOf('^', completionOffset + 1);
+    expect(nextOffset, equals(-1), reason: 'too many ^');
+
+    newFile(path,
+        content: content.substring(0, completionOffset) +
+            content.substring(completionOffset + 1));
+
+    return await _getSuggestions(
+      path: path,
+      completionOffset: completionOffset,
+      maxResults: maxResults,
+    );
+  }
+
+  Future<CompletionGetSuggestions2ResponseValidator> _getSuggestions({
+    required String path,
+    required int completionOffset,
+    required int maxResults,
+  }) async {
+    var request = CompletionGetSuggestions2Params(
+      path,
+      completionOffset,
+      maxResults,
+    ).toRequest('0');
+
+    var response = await _handleSuccessfulRequest(request);
+    var result = CompletionGetSuggestions2Result.fromResponse(response);
+    return CompletionGetSuggestions2ResponseValidator(completionOffset, result);
+  }
+
+  Future<CompletionGetSuggestions2ResponseValidator> _getTestCodeSuggestions(
+    String content, {
+    int maxResults = 1 << 10,
+  }) async {
+    return _getCodeSuggestions(
+      path: convertPath(testFilePath),
+      content: content,
+      maxResults: maxResults,
+    );
+  }
+}
+
+@reflectiveTest
 class CompletionDomainHandlerGetSuggestionsTest
     extends AbstractCompletionDomainTest {
   Future<void> test_ArgumentList_constructor_named_fieldFormalParam() async {
@@ -910,3 +2336,318 @@
     });
   }
 }
+
+class CompletionGetSuggestions2ResponseValidator {
+  final int completionOffset;
+  final CompletionGetSuggestions2Result result;
+
+  CompletionGetSuggestions2ResponseValidator(
+    this.completionOffset,
+    this.result,
+  );
+
+  SuggestionsValidator get suggestions {
+    return SuggestionsValidator(
+      result.suggestions,
+      libraryUrisToImport: result.libraryUrisToImport,
+    );
+  }
+
+  void assertComplete() {
+    expect(result.isIncomplete, isFalse);
+  }
+
+  void assertEmptyReplacement() {
+    assertReplacement(completionOffset, 0);
+  }
+
+  void assertIncomplete() {
+    expect(result.isIncomplete, isTrue);
+  }
+
+  void assertLibrariesToImport({
+    required List<String> includes,
+    List<String>? excludes,
+  }) {
+    expect(result.libraryUrisToImport, containsAll(includes));
+    if (excludes != null) {
+      for (var exclude in excludes) {
+        expect(result.libraryUrisToImport, isNot(contains(exclude)));
+      }
+    }
+  }
+
+  void assertReplacement(int offset, int length) {
+    expect(result.replacementOffset, offset);
+    expect(result.replacementLength, length);
+  }
+
+  void assertReplacementBack(int length) {
+    assertReplacement(completionOffset - length, length);
+  }
+}
+
+class GetSuggestionDetails2Validator {
+  final CompletionGetSuggestionDetails2Result result;
+
+  GetSuggestionDetails2Validator(this.result);
+
+  SourceChangeValidator hasChange() {
+    return SourceChangeValidator(result.change);
+  }
+
+  void hasCompletion(Object completion) {
+    expect(result.completion, completion);
+  }
+}
+
+class PubPackageAnalysisServerTest with ResourceProviderMixin {
+  late final MockServerChannel serverChannel;
+  late final AnalysisServer server;
+
+  AnalysisDomainHandler get analysisDomain {
+    return server.handlers.whereType<AnalysisDomainHandler>().single;
+  }
+
+  CompletionDomainHandler get completionDomain {
+    return server.handlers.whereType<CompletionDomainHandler>().single;
+  }
+
+  String get testFileContent => getFile(testFilePath).readAsStringSync();
+
+  String get testFilePath => '$testPackageLibPath/test.dart';
+
+  String get testFilePathPlatform => convertPath(testFilePath);
+
+  String get testPackageLibPath => '$testPackageRootPath/lib';
+
+  Folder get testPackageRoot => getFolder(testPackageRootPath);
+
+  String get testPackageRootPath => '$workspaceRootPath/test';
+
+  String get testPackageTestPath => '$testPackageRootPath/test';
+
+  String get workspaceRootPath => '/home';
+
+  Future<void> setRoots({
+    required List<String> included,
+    required List<String> excluded,
+  }) async {
+    var includedConverted = included.map(convertPath).toList();
+    var excludedConverted = excluded.map(convertPath).toList();
+    await _handleSuccessfulRequest(
+      AnalysisSetAnalysisRootsParams(
+        includedConverted,
+        excludedConverted,
+        packageRoots: {},
+      ).toRequest('0'),
+    );
+  }
+
+  void setUp() {
+    serverChannel = MockServerChannel();
+
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+
+    writeTestPackageConfig();
+
+    server = AnalysisServer(
+      serverChannel,
+      resourceProvider,
+      AnalysisServerOptions(),
+      DartSdkManager(sdkRoot.path),
+      CrashReportingAttachmentsBuilder.empty,
+      InstrumentationService.NULL_SERVICE,
+    );
+
+    completionDomain.budgetDuration = const Duration(seconds: 30);
+  }
+
+  void writePackageConfig(Folder root, PackageConfigFileBuilder config) {
+    newPackageConfigJsonFile(
+      root.path,
+      content: config.toContent(toUriStr: toUriStr),
+    );
+  }
+
+  void writeTestPackageConfig({
+    PackageConfigFileBuilder? config,
+    String? languageVersion,
+  }) {
+    if (config == null) {
+      config = PackageConfigFileBuilder();
+    } else {
+      config = config.copy();
+    }
+
+    config.add(
+      name: 'test',
+      rootPath: testPackageRootPath,
+      languageVersion: languageVersion,
+    );
+
+    writePackageConfig(testPackageRoot, config);
+  }
+
+  Future<void> _configureWithWorkspaceRoot() async {
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await server.onAnalysisComplete;
+  }
+
+  Future<Response> _handleRequest(Request request) async {
+    return await serverChannel.sendRequest(request);
+  }
+
+  /// Validates that the given [request] is handled successfully.
+  Future<Response> _handleSuccessfulRequest(Request request) async {
+    var response = await _handleRequest(request);
+    expect(response, isResponseSuccess(request.id));
+    return response;
+  }
+}
+
+class SingleSuggestionValidator {
+  final CompletionSuggestion suggestion;
+  final List<String>? libraryUrisToImport;
+
+  SingleSuggestionValidator(
+    this.suggestion, {
+    this.libraryUrisToImport,
+  });
+
+  void assertClass() {
+    expect(suggestion.kind, CompletionSuggestionKind.INVOCATION);
+    expect(suggestion.element?.kind, ElementKind.CLASS);
+  }
+
+  void assertConstructor() {
+    expect(suggestion.kind, CompletionSuggestionKind.INVOCATION);
+    expect(suggestion.element?.kind, ElementKind.CONSTRUCTOR);
+  }
+
+  void assertGetter() {
+    expect(suggestion.kind, CompletionSuggestionKind.INVOCATION);
+    expect(suggestion.element?.kind, ElementKind.GETTER);
+  }
+
+  void assertLibraryToImport(Object matcher) {
+    final libraryUrisToImport = this.libraryUrisToImport;
+    final index = suggestion.libraryUriToImportIndex;
+    var libraryUri = libraryUrisToImport != null && index != null
+        ? libraryUrisToImport[index]
+        : null;
+    expect(libraryUri, matcher);
+  }
+
+  void assertMethod() {
+    expect(suggestion.kind, CompletionSuggestionKind.INVOCATION);
+    expect(suggestion.element?.kind, ElementKind.METHOD);
+  }
+
+  void assertSetter() {
+    expect(suggestion.kind, CompletionSuggestionKind.INVOCATION);
+    expect(suggestion.element?.kind, ElementKind.SETTER);
+  }
+
+  void assertTopLevelVariable() {
+    expect(suggestion.kind, CompletionSuggestionKind.INVOCATION);
+    expect(suggestion.element?.kind, ElementKind.TOP_LEVEL_VARIABLE);
+  }
+}
+
+class SourceChangeValidator {
+  final SourceChange change;
+
+  SourceChangeValidator(this.change);
+
+  void assertNoFileEdits() {
+    expect(change.edits, isEmpty);
+  }
+
+  SourceFileEditValidator hasFileEdit(String path) {
+    var edit = change.edits.singleWhere((e) => e.file == path);
+    return SourceFileEditValidator(edit);
+  }
+}
+
+class SourceFileEditValidator {
+  final SourceFileEdit edit;
+
+  SourceFileEditValidator(this.edit);
+
+  void whenApplied(String applyTo, Object expected) {
+    var actual = SourceEdit.applySequence(applyTo, edit.edits);
+    expect(actual, expected);
+  }
+}
+
+class SuggestionsValidator {
+  final List<CompletionSuggestion> suggestions;
+  final List<String>? libraryUrisToImport;
+
+  SuggestionsValidator(
+    this.suggestions, {
+    this.libraryUrisToImport,
+  });
+
+  int get length => suggestions.length;
+
+  /// Assert that this has suggestions with exactly the given completions,
+  /// with the exact order.
+  ///
+  /// Does not check suggestion kinds, elements, etc.
+  void assertCompletions(Iterable<String> completions) {
+    var actual = suggestions.map((e) => e.completion).toList();
+    expect(actual, completions);
+  }
+
+  void assertEmpty() {
+    expect(suggestions, isEmpty);
+  }
+
+  void assertLength(Object matcher) {
+    expect(suggestions, hasLength(matcher));
+  }
+
+  SingleSuggestionValidator assertSingle() {
+    assertLength(1);
+    return SingleSuggestionValidator(
+      suggestions.single,
+      libraryUrisToImport: libraryUrisToImport,
+    );
+  }
+
+  SuggestionsValidator withCompletion(String completion) {
+    return SuggestionsValidator(
+      suggestions.where((suggestion) {
+        return suggestion.completion == completion;
+      }).toList(),
+      libraryUrisToImport: libraryUrisToImport,
+    );
+  }
+
+  SuggestionsValidator withElementClass() {
+    return withElementKind(ElementKind.CLASS);
+  }
+
+  SuggestionsValidator withElementConstructor() {
+    return withElementKind(ElementKind.CONSTRUCTOR);
+  }
+
+  SuggestionsValidator withElementGetter() {
+    return withElementKind(ElementKind.GETTER);
+  }
+
+  SuggestionsValidator withElementKind(ElementKind kind) {
+    return SuggestionsValidator(
+      suggestions.where((suggestion) {
+        return suggestion.element?.kind == kind;
+      }).toList(),
+      libraryUrisToImport: libraryUrisToImport,
+    );
+  }
+}
diff --git a/pkg/analysis_server/test/domain_diagnostic_test.dart b/pkg/analysis_server/test/domain_diagnostic_test.dart
index 03f2c16..f83771a 100644
--- a/pkg/analysis_server/test/domain_diagnostic_test.dart
+++ b/pkg/analysis_server/test/domain_diagnostic_test.dart
@@ -42,7 +42,7 @@
     expect(context.name, convertPath('/project'));
     expect(context.explicitFileCount, 1); /* test.dart */
 
-    expect(context.implicitFileCount, 4);
+    expect(context.implicitFileCount, 5);
 
     expect(context.workItemQueueLength, isNotNull);
   }
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index 3db384d..bffa9fc 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -2161,7 +2161,7 @@
   print(otherName);
 }
 ''');
-    server.getAnalysisDriver(testFile)!.getResult2(testFile);
+    server.getAnalysisDriver(testFile)!.getResult(testFile);
     // send the second request, with the same kind, file and offset
     await waitForTasksFinished();
     result = await getRefactoringResult(() {
diff --git a/pkg/analysis_server/test/integration/coverage.md b/pkg/analysis_server/test/integration/coverage.md
index 58d0edf..b91da0a 100644
--- a/pkg/analysis_server/test/integration/coverage.md
+++ b/pkg/analysis_server/test/integration/coverage.md
@@ -33,7 +33,9 @@
 - [ ] completion.availableSuggestions
 - [ ] completion.existingImports
 - [ ] completion.getSuggestionDetails
+- [ ] completion.getSuggestionDetails2
 - [x] completion.getSuggestions
+- [ ] completion.getSuggestions2
 - [ ] completion.registerLibraryPaths
 - [ ] completion.results
 - [ ] completion.setSubscriptions
diff --git a/pkg/analysis_server/test/integration/support/integration_test_methods.dart b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
index 5fd4d70..9a707cf 100644
--- a/pkg/analysis_server/test/integration/support/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
@@ -953,6 +953,81 @@
     return CompletionGetSuggestionsResult.fromJson(decoder, 'result', result);
   }
 
+  /// Request that completion suggestions for the given offset in the given
+  /// file be returned. The suggestions will be filtered using fuzzy matching
+  /// with the already existing prefix.
+  ///
+  /// Parameters
+  ///
+  /// file: FilePath
+  ///
+  ///   The file containing the point at which suggestions are to be made.
+  ///
+  /// offset: int
+  ///
+  ///   The offset within the file at which suggestions are to be made.
+  ///
+  /// maxResults: int
+  ///
+  ///   The maximum number of suggestions to return. If the number of
+  ///   suggestions after filtering is greater than the maxResults, then
+  ///   isIncomplete is set to true.
+  ///
+  /// Returns
+  ///
+  /// replacementOffset: int
+  ///
+  ///   The offset of the start of the text to be replaced. This will be
+  ///   different from the offset used to request the completion suggestions if
+  ///   there was a portion of an identifier before the original offset. In
+  ///   particular, the replacementOffset will be the offset of the beginning
+  ///   of said identifier.
+  ///
+  /// replacementLength: int
+  ///
+  ///   The length of the text to be replaced if the remainder of the
+  ///   identifier containing the cursor is to be replaced when the suggestion
+  ///   is applied (that is, the number of characters in the existing
+  ///   identifier).
+  ///
+  /// suggestions: List<CompletionSuggestion>
+  ///
+  ///   The completion suggestions being reported. This list is filtered by the
+  ///   already existing prefix, and sorted first by relevance, and (if the
+  ///   same) by the suggestion text. The list will have at most maxResults
+  ///   items. If the user types a new keystroke, the client is expected to
+  ///   either do local filtering (when the returned list was complete), or ask
+  ///   the server again (if isIncomplete was true).
+  ///
+  ///   This list contains suggestions from both imported, and not yet imported
+  ///   libraries. Items from not yet imported libraries will have
+  ///   libraryUriToImportIndex set, which is an index into the
+  ///   libraryUrisToImport in this response.
+  ///
+  /// libraryUrisToImport: List<String>
+  ///
+  ///   The list of libraries with declarations that are not yet available in
+  ///   the file where completion was requested, most often because the library
+  ///   is not yet imported. The declarations still might be included into the
+  ///   suggestions, and the client should use getSuggestionDetails2 on
+  ///   selection to make the library available in the file.
+  ///
+  ///   Each item is the URI of a library, such as package:foo/bar.dart or
+  ///   file:///home/me/workspace/foo/test/bar_test.dart.
+  ///
+  /// isIncomplete: bool
+  ///
+  ///   True if the number of suggestions after filtering was greater than the
+  ///   requested maxResults.
+  Future<CompletionGetSuggestions2Result> sendCompletionGetSuggestions2(
+      String file, int offset, int maxResults) async {
+    var params =
+        CompletionGetSuggestions2Params(file, offset, maxResults).toJson();
+    var result = await server.send('completion.getSuggestions2', params);
+    var decoder = ResponseDecoder(null);
+    return CompletionGetSuggestions2Result.fromJson(decoder, 'result', result);
+  }
+
   /// Subscribe for completion services. All previous subscriptions are
   /// replaced by the given set of services.
   ///
@@ -1046,6 +1121,61 @@
         decoder, 'result', result);
   }
 
+  /// Clients must make this request when the user has selected a completion
+  /// suggestion with the libraryUriToImportIndex field set. The server will
+  /// respond with the text to insert, as well as any SourceChange that needs
+  /// to be applied in case the completion requires an additional import to be
+  /// added. The text to insert might be different from the original suggestion
+  /// to include an import prefix if the library will be imported with a prefix
+  /// to avoid shadowing conflicts in the file.
+  ///
+  /// Parameters
+  ///
+  /// file: FilePath
+  ///
+  ///   The path of the file into which this completion is being inserted.
+  ///
+  /// offset: int
+  ///
+  ///   The offset in the file where the completion will be inserted.
+  ///
+  /// completion: String
+  ///
+  ///   The completion from the selected CompletionSuggestion. It could be a
+  ///   name of a class, or a name of a constructor in form
+  ///   "typeName.constructorName()", or an enumeration constant in form
+  ///   "enumName.constantName", etc.
+  ///
+  /// libraryUri: String
+  ///
+  ///   The URI of the library to import, so that the element referenced in the
+  ///   completion becomes accessible.
+  ///
+  /// Returns
+  ///
+  /// completion: String
+  ///
+  ///   The full text to insert, which possibly includes now an import prefix.
+  ///   The client should insert this text, not the completion from the
+  ///   selected CompletionSuggestion.
+  ///
+  /// change: SourceChange
+  ///
+  ///   A change for the client to apply to make the accepted completion
+  ///   suggestion available. In most cases the change is to add a new import
+  ///   directive to the file.
+  Future<CompletionGetSuggestionDetails2Result>
+      sendCompletionGetSuggestionDetails2(
+          String file, int offset, String completion, String libraryUri) async {
+    var params = CompletionGetSuggestionDetails2Params(
+            file, offset, completion, libraryUri)
+        .toJson();
+    var result = await server.send('completion.getSuggestionDetails2', params);
+    var decoder = ResponseDecoder(null);
+    return CompletionGetSuggestionDetails2Result.fromJson(
+        decoder, 'result', result);
+  }
+
   /// Reports the completion suggestions that should be presented to the user.
   /// The set of suggestions included in the notification is always a complete
   /// list that supersedes any previously reported suggestions.
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index 8a094d4..5fd8c3c 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -295,7 +295,8 @@
           'requiredParameterCount': isInt,
           'hasNamedParameters': isBool,
           'parameterName': isString,
-          'parameterType': isString
+          'parameterType': isString,
+          'libraryUriToImportIndex': isInt
         }));
 
 /// CompletionSuggestionKind
@@ -2080,6 +2081,32 @@
     MatchesJsonObject('completion.existingImports params',
         {'file': isFilePath, 'imports': isExistingImports}));
 
+/// completion.getSuggestionDetails2 params
+///
+/// {
+///   "file": FilePath
+///   "offset": int
+///   "completion": String
+///   "libraryUri": String
+/// }
+final Matcher isCompletionGetSuggestionDetails2Params = LazyMatcher(
+    () => MatchesJsonObject('completion.getSuggestionDetails2 params', {
+          'file': isFilePath,
+          'offset': isInt,
+          'completion': isString,
+          'libraryUri': isString
+        }));
+
+/// completion.getSuggestionDetails2 result
+///
+/// {
+///   "completion": String
+///   "change": SourceChange
+/// }
+final Matcher isCompletionGetSuggestionDetails2Result = LazyMatcher(() =>
+    MatchesJsonObject('completion.getSuggestionDetails2 result',
+        {'completion': isString, 'change': isSourceChange}));
+
 /// completion.getSuggestionDetails params
 ///
 /// {
@@ -2103,6 +2130,35 @@
         'completion.getSuggestionDetails result', {'completion': isString},
         optionalFields: {'change': isSourceChange}));
 
+/// completion.getSuggestions2 params
+///
+/// {
+///   "file": FilePath
+///   "offset": int
+///   "maxResults": int
+/// }
+final Matcher isCompletionGetSuggestions2Params = LazyMatcher(() =>
+    MatchesJsonObject('completion.getSuggestions2 params',
+        {'file': isFilePath, 'offset': isInt, 'maxResults': isInt}));
+
+/// completion.getSuggestions2 result
+///
+/// {
+///   "replacementOffset": int
+///   "replacementLength": int
+///   "suggestions": List<CompletionSuggestion>
+///   "libraryUrisToImport": List<String>
+///   "isIncomplete": bool
+/// }
+final Matcher isCompletionGetSuggestions2Result =
+    LazyMatcher(() => MatchesJsonObject('completion.getSuggestions2 result', {
+          'replacementOffset': isInt,
+          'replacementLength': isInt,
+          'suggestions': isListOf(isCompletionSuggestion),
+          'libraryUrisToImport': isListOf(isString),
+          'isIncomplete': isBool
+        }));
+
 /// completion.getSuggestions params
 ///
 /// {
diff --git a/pkg/analysis_server/test/lsp/format_test.dart b/pkg/analysis_server/test/lsp/format_test.dart
index 5ba380f..61bac2e 100644
--- a/pkg/analysis_server/test/lsp/format_test.dart
+++ b/pkg/analysis_server/test/lsp/format_test.dart
@@ -210,6 +210,30 @@
     await expectRangeFormattedContents(mainFileUri, contents, expected);
   }
 
+  Future<void> test_formatRange_expandsLeadingWhitespaceToNearestLine() async {
+    const contents = '''
+void main()
+{
+
+[[        print('test'); // line 2
+        print('test'); // line 3
+        print('test'); // line 4]]
+}
+''';
+    const expected = '''
+void main()
+{
+
+  print('test'); // line 2
+  print('test'); // line 3
+  print('test'); // line 4
+}
+''';
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(contents));
+    await expectRangeFormattedContents(mainFileUri, contents, expected);
+  }
+
   Future<void> test_formatRange_invalidRange() async {
     const contents = '''
 void f()
diff --git a/pkg/analysis_server/test/lsp/initialization_test.dart b/pkg/analysis_server/test/lsp/initialization_test.dart
index 0a72f10..b6bbc58 100644
--- a/pkg/analysis_server/test/lsp/initialization_test.dart
+++ b/pkg/analysis_server/test/lsp/initialization_test.dart
@@ -648,6 +648,25 @@
     expect(server.contextManager.includedPaths, equals([file1]));
   }
 
+  Future<void> test_onlyAnalyzeProjectsWithOpenFiles_fullyInitializes() async {
+    // Ensure when we use onlyAnalyzeProjectsWithOpenFiles that we still
+    // fully initialize (eg. capabilities are registered).
+    projectFolderPath = convertPath('/home/empty');
+
+    await expectRequest(
+      Method.client_registerCapability,
+      () => initialize(
+        rootUri: projectFolderUri,
+        initializationOptions: {'onlyAnalyzeProjectsWithOpenFiles': true},
+        // Enable some dynamic registrations, else registerCapability will not
+        // be called.
+        textDocumentCapabilities:
+            withAllSupportedTextDocumentDynamicRegistrations(
+                emptyTextDocumentClientCapabilities),
+      ),
+    );
+  }
+
   Future<void> test_onlyAnalyzeProjectsWithOpenFiles_multipleFiles() async {
     final file1 = join(projectFolderPath, 'file1.dart');
     final file1Uri = Uri.file(file1);
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index de5f35a..907b8fa 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -54,6 +54,113 @@
     return results;
   }
 
+  Future<void> test_annotation() async {
+    final content = '''
+    import 'other_file.dart' as other;
+
+    @a
+    @A()
+    @A.n()
+    @B(A())
+    @other.C()
+    @other.C.n()
+    void foo() {}
+
+    class A {
+      const A();
+      const A.n();
+    }
+
+    const a = A();
+
+    class B {
+      final A a;
+      const B(this.a);
+    }
+    ''';
+
+    final otherContent = '''
+    class C {
+      const C();
+      const C.n();
+    }
+    ''';
+
+    final expectedStart = [
+      _Token('import', SemanticTokenTypes.keyword),
+      _Token("'other_file.dart'", SemanticTokenTypes.string),
+      _Token('as', SemanticTokenTypes.keyword),
+      _Token('other', SemanticTokenTypes.variable,
+          [CustomSemanticTokenModifiers.importPrefix]),
+      _Token('@', CustomSemanticTokenTypes.annotation),
+      _Token('a', SemanticTokenTypes.property,
+          [CustomSemanticTokenModifiers.annotation]),
+      _Token('@', CustomSemanticTokenTypes.annotation),
+      _Token('A', SemanticTokenTypes.class_,
+          [CustomSemanticTokenModifiers.annotation]),
+      _Token('(', CustomSemanticTokenTypes.annotation),
+      _Token(')', CustomSemanticTokenTypes.annotation),
+      _Token('@', CustomSemanticTokenTypes.annotation),
+      _Token('A', SemanticTokenTypes.class_,
+          [CustomSemanticTokenModifiers.annotation]),
+      _Token('.', CustomSemanticTokenTypes.annotation),
+      _Token('n', SemanticTokenTypes.method, [
+        CustomSemanticTokenModifiers.constructor,
+        CustomSemanticTokenModifiers.annotation
+      ]),
+      _Token('(', CustomSemanticTokenTypes.annotation),
+      _Token(')', CustomSemanticTokenTypes.annotation),
+      _Token('@', CustomSemanticTokenTypes.annotation),
+      _Token('B', SemanticTokenTypes.class_,
+          [CustomSemanticTokenModifiers.annotation]),
+      _Token('(', CustomSemanticTokenTypes.annotation),
+      _Token('A', SemanticTokenTypes.class_,
+          [CustomSemanticTokenModifiers.constructor]),
+      _Token(')', CustomSemanticTokenTypes.annotation),
+      _Token('@', CustomSemanticTokenTypes.annotation),
+      _Token('other', SemanticTokenTypes.variable,
+          [CustomSemanticTokenModifiers.importPrefix]),
+      _Token('.', CustomSemanticTokenTypes.annotation),
+      _Token('C', SemanticTokenTypes.class_,
+          [CustomSemanticTokenModifiers.annotation]),
+      _Token('(', CustomSemanticTokenTypes.annotation),
+      _Token(')', CustomSemanticTokenTypes.annotation),
+      _Token('@', CustomSemanticTokenTypes.annotation),
+      _Token('other', SemanticTokenTypes.variable,
+          [CustomSemanticTokenModifiers.importPrefix]),
+      _Token('.', CustomSemanticTokenTypes.annotation),
+      _Token('C', SemanticTokenTypes.class_,
+          [CustomSemanticTokenModifiers.annotation]),
+      _Token('.', CustomSemanticTokenTypes.annotation),
+      _Token('n', SemanticTokenTypes.method, [
+        CustomSemanticTokenModifiers.constructor,
+        CustomSemanticTokenModifiers.annotation
+      ]),
+      _Token('(', CustomSemanticTokenTypes.annotation),
+      _Token(')', CustomSemanticTokenTypes.annotation),
+      _Token('void', SemanticTokenTypes.keyword,
+          [CustomSemanticTokenModifiers.void_]),
+      _Token('foo', SemanticTokenTypes.function,
+          [SemanticTokenModifiers.declaration, SemanticTokenModifiers.static])
+    ];
+
+    final otherFilePath = join(projectFolderPath, 'lib', 'other_file.dart');
+    final otherFileUri = Uri.file(otherFilePath);
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+    await openFile(otherFileUri, withoutMarkers(otherContent));
+
+    final tokens = await getSemanticTokens(mainFileUri);
+    final decoded = decodeSemanticTokens(content, tokens);
+    expect(
+      // Only check the first expectedStart.length items since the test code
+      // is mostly unrelated to the annotations.
+      decoded.sublist(0, expectedStart.length),
+      equals(expectedStart),
+    );
+  }
+
   Future<void> test_class() async {
     final content = '''
     /// class docs
@@ -110,26 +217,26 @@
       _Token('MyClass', SemanticTokenTypes.class_,
           [CustomSemanticTokenModifiers.constructor]),
       _Token('final', SemanticTokenTypes.keyword),
-      _Token('a', SemanticTokenTypes.variable,
+      _Token('a', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token('MyClass', SemanticTokenTypes.class_,
           [CustomSemanticTokenModifiers.constructor]),
       _Token('final', SemanticTokenTypes.keyword),
-      _Token('b', SemanticTokenTypes.variable,
+      _Token('b', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token('MyClass', SemanticTokenTypes.class_,
           [CustomSemanticTokenModifiers.constructor]),
       _Token('named', SemanticTokenTypes.method,
           [CustomSemanticTokenModifiers.constructor]),
       _Token('final', SemanticTokenTypes.keyword),
-      _Token('c', SemanticTokenTypes.variable,
+      _Token('c', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token('MyClass', SemanticTokenTypes.class_,
           [CustomSemanticTokenModifiers.constructor]),
       _Token('factory', SemanticTokenTypes.method,
           [CustomSemanticTokenModifiers.constructor]),
       _Token('final', SemanticTokenTypes.keyword),
-      _Token('d', SemanticTokenTypes.variable,
+      _Token('d', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token('MyClass', SemanticTokenTypes.class_),
       _Token('named', SemanticTokenTypes.method,
@@ -166,14 +273,14 @@
       _Token('/// field docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('String', SemanticTokenTypes.class_),
-      _Token('myField', SemanticTokenTypes.variable,
+      _Token('myField', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token("'FieldVal'", SemanticTokenTypes.string),
       _Token('/// static field docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('static', SemanticTokenTypes.keyword),
       _Token('String', SemanticTokenTypes.class_),
-      _Token('myStaticField', SemanticTokenTypes.variable,
+      _Token('myStaticField', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration, SemanticTokenModifiers.static]),
       _Token("'StaticFieldVal'", SemanticTokenTypes.string),
       _Token('main', SemanticTokenTypes.function,
@@ -305,7 +412,8 @@
       _Token('/// method docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('@', CustomSemanticTokenTypes.annotation),
-      _Token('override', SemanticTokenTypes.property),
+      _Token('override', SemanticTokenTypes.property,
+          [CustomSemanticTokenModifiers.annotation]),
       _Token('void', SemanticTokenTypes.keyword,
           [CustomSemanticTokenModifiers.void_]),
       _Token('myMethod', SemanticTokenTypes.method,
@@ -371,7 +479,7 @@
       _Token('class', SemanticTokenTypes.keyword),
       _Token('MyClass', SemanticTokenTypes.class_),
       _Token('String', SemanticTokenTypes.class_),
-      _Token('aaa', SemanticTokenTypes.variable,
+      _Token('aaa', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token('/// before [', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
@@ -479,7 +587,7 @@
         plugin.HighlightRegion(plugin.HighlightRegionType.CLASS, 0, 5),
         plugin.HighlightRegion(plugin.HighlightRegionType.LITERAL_STRING, 6, 6),
         plugin.HighlightRegion(
-            plugin.HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION, 13, 8),
+            plugin.HighlightRegionType.LOCAL_VARIABLE_DECLARATION, 13, 8),
       ],
     );
     configureTestPlugin(notification: pluginResult.toNotification());
@@ -505,7 +613,7 @@
     ''';
 
     // Expect the correct tokens for the valid code before/after but don't
-    // check the the tokens for the invalid code as there are no concrete
+    // check the tokens for the invalid code as there are no concrete
     // expectations for them.
     final expected1 = [
       _Token('/// class docs', SemanticTokenTypes.comment,
@@ -579,11 +687,11 @@
   }
 
   Future<void> test_lastLine_code() async {
-    final content = 'String var;';
+    final content = 'String bar;';
 
     final expected = [
       _Token('String', SemanticTokenTypes.class_),
-      _Token('var', SemanticTokenTypes.variable,
+      _Token('bar', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
     ];
 
@@ -705,7 +813,7 @@
         _Token('/// test', SemanticTokenTypes.comment,
             [SemanticTokenModifiers.documentation]),
         _Token('bool', SemanticTokenTypes.class_),
-        _Token('test$i', SemanticTokenTypes.variable,
+        _Token('test$i', SemanticTokenTypes.property,
             [SemanticTokenModifiers.declaration]),
         _Token('false', CustomSemanticTokenTypes.boolean),
       ],
@@ -927,12 +1035,12 @@
       _Token('c', SemanticTokenTypes.parameter),
 
       _Token('const', SemanticTokenTypes.keyword),
-      _Token('string1', SemanticTokenTypes.variable,
+      _Token('string1', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token("'test'", SemanticTokenTypes.string),
 
       _Token('const', SemanticTokenTypes.keyword),
-      _Token('string2', SemanticTokenTypes.variable,
+      _Token('string2', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token(r"'test1 ", SemanticTokenTypes.string),
       _Token(r'$', CustomSemanticTokenTypes.source,
@@ -954,12 +1062,12 @@
 
       // string3 is raw and should be treated as a single string.
       _Token('const', SemanticTokenTypes.keyword),
-      _Token('string3', SemanticTokenTypes.variable,
+      _Token('string3', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token(r"r'$string1 ${string1.length}'", SemanticTokenTypes.string),
       _Token('const', SemanticTokenTypes.keyword),
 
-      _Token('string4', SemanticTokenTypes.variable,
+      _Token('string4', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token("'''\n", SemanticTokenTypes.string),
       _Token('multi\n', SemanticTokenTypes.string),
@@ -987,7 +1095,7 @@
 
     final expected = [
       _Token('const', SemanticTokenTypes.keyword),
-      _Token('string1', SemanticTokenTypes.variable,
+      _Token('string1', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token("'it", SemanticTokenTypes.string),
       _Token(r"\'", SemanticTokenTypes.string,
@@ -999,7 +1107,7 @@
           [CustomSemanticTokenModifiers.escape]),
       _Token(r"'", SemanticTokenTypes.string),
       _Token('const', SemanticTokenTypes.keyword),
-      _Token('string2', SemanticTokenTypes.variable,
+      _Token('string2', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token("'hex ", SemanticTokenTypes.string),
       _Token(r'\x12', SemanticTokenTypes.string,
@@ -1009,7 +1117,7 @@
       // The 99 is not part of the escape
       _Token("99'", SemanticTokenTypes.string),
       _Token('const', SemanticTokenTypes.keyword),
-      _Token('string3', SemanticTokenTypes.variable,
+      _Token('string3', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token("'unicode ", SemanticTokenTypes.string),
       _Token(r'\u1234', SemanticTokenTypes.string,
@@ -1044,13 +1152,20 @@
     bool get abc => true;
 
     final funcTearOff = func;
+
+    void main() {
+      strings;
+      func;
+      abc;
+      funcTearOff;
+    }
     ''';
 
     final expected = [
       _Token('/// strings docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('const', SemanticTokenTypes.keyword),
-      _Token('strings', SemanticTokenTypes.variable,
+      _Token('strings', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token('String', SemanticTokenTypes.class_),
       _Token('"test"', SemanticTokenTypes.string),
@@ -1074,9 +1189,17 @@
           [SemanticTokenModifiers.declaration]),
       _Token('true', CustomSemanticTokenTypes.boolean),
       _Token('final', SemanticTokenTypes.keyword),
-      _Token('funcTearOff', SemanticTokenTypes.variable,
+      _Token('funcTearOff', SemanticTokenTypes.property,
           [SemanticTokenModifiers.declaration]),
       _Token('func', SemanticTokenTypes.function),
+      _Token('void', SemanticTokenTypes.keyword,
+          [CustomSemanticTokenModifiers.void_]),
+      _Token('main', SemanticTokenTypes.function,
+          [SemanticTokenModifiers.declaration, SemanticTokenModifiers.static]),
+      _Token('strings', SemanticTokenTypes.property),
+      _Token('func', SemanticTokenTypes.function),
+      _Token('abc', SemanticTokenTypes.property),
+      _Token('funcTearOff', SemanticTokenTypes.property),
     ];
 
     await initialize();
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 26cd616..6b8ba52 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -183,14 +183,20 @@
     httpClient = MockHttpClient();
     processRunner = MockProcessRunner();
     channel = MockLspServerChannel(debugPrintCommunication);
+
     // Create an SDK in the mock file system.
-    MockSdk(resourceProvider: resourceProvider);
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+
     pluginManager = TestPluginManager();
     server = LspAnalysisServer(
         channel,
         resourceProvider,
         serverOptions,
-        DartSdkManager(convertPath('/sdk')),
+        DartSdkManager(sdkRoot.path),
         CrashReportingAttachmentsBuilder.empty,
         InstrumentationService.NULL_SERVICE,
         httpClient: httpClient,
diff --git a/pkg/analysis_server/test/mock_packages/ui/lib/painting.dart b/pkg/analysis_server/test/mock_packages/ui/lib/painting.dart
index a6b686a..49b93fd 100644
--- a/pkg/analysis_server/test/mock_packages/ui/lib/painting.dart
+++ b/pkg/analysis_server/test/mock_packages/ui/lib/painting.dart
@@ -318,7 +318,7 @@
   /// ![](https://flutter.github.io/assets-for-api-docs/assets/dart-ui/blend_mode_colorDodge.png)
   colorDodge,
 
-  /// Divide the inverse of the destination by the the source, and inverse the result.
+  /// Divide the inverse of the destination by the source, and inverse the result.
   ///
   /// Inverting the components means that a fully saturated channel (opaque
   /// white) is treated as the value 0.0, and values normally treated as 0.0
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 25f7bdb..708a951 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -121,7 +121,7 @@
     // create notification Element
     var element = convertElement(engineElement, withNullability: true);
     expect(element.kind, ElementKind.CONSTRUCTOR);
-    expect(element.name, 'myConstructor');
+    expect(element.name, 'A.myConstructor');
     expect(element.typeParameters, isNull);
     {
       var location = element.location!;
diff --git a/pkg/analysis_server/test/protocol_server_test.dart b/pkg/analysis_server/test/protocol_server_test.dart
index 248d817..83f3e8f 100644
--- a/pkg/analysis_server/test/protocol_server_test.dart
+++ b/pkg/analysis_server/test/protocol_server_test.dart
@@ -166,7 +166,8 @@
   void test_fromEngine_lint() {
     engineError = MockAnalysisError(
       source: source,
-      errorCode: LintCode('my_lint', 'my message', correction: 'correction'),
+      errorCode:
+          LintCode('my_lint', 'my message', correctionMessage: 'correction'),
       offset: 10,
       length: 20,
       message: 'my message',
@@ -390,8 +391,8 @@
       this.url});
 
   @override
-  String get correction {
-    throw StateError('Unexpected invocation of correction');
+  String get correctionMessage {
+    throw StateError('Unexpected invocation of correctionMessage');
   }
 
   @override
@@ -404,14 +405,17 @@
   bool get isUnresolvedIdentifier => false;
 
   @override
-  String get message {
-    throw StateError('Unexpected invocation of message');
+  String get problemMessage {
+    throw StateError('Unexpected invocation of problemMessage');
   }
 
   @override
   String get uniqueName {
     throw StateError('Unexpected invocation of uniqueName');
   }
+
+  @override
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
 
 class _ResolvedUnitResultImplMock implements engine.ResolvedUnitResultImpl {
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 55ab879..326a8eb 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -95,30 +95,32 @@
   Future<void> test_constructor_unnamed() async {
     addTestFile('''
 /// [new A] 1
+/// [A.new] 2
 class A {
   A() {}
-  A.other() : this(); // 2
+  A.other() : this(); // 3
 }
 
 class B extends A {
-  B() : super(); // 3
-  factory B.other() = A; // 4
+  B() : super(); // 4
+  factory B.other() = A; // 5
 }
 
 void f() {
-  A(); // 5
-  A.new; // 6
+  A(); // 6
+  A.new; // 7
 }
 ''');
     await findElementReferences('A() {}', false);
     expect(searchElement!.kind, ElementKind.CONSTRUCTOR);
-    expect(results, hasLength(6));
+    expect(results, hasLength(7));
     assertHasResult(SearchResultKind.REFERENCE, '] 1', 0);
-    assertHasResult(SearchResultKind.INVOCATION, '(); // 2', 0);
+    assertHasResult(SearchResultKind.REFERENCE, '.new] 2', 4);
     assertHasResult(SearchResultKind.INVOCATION, '(); // 3', 0);
-    assertHasResult(SearchResultKind.REFERENCE, '; // 4', 0);
-    assertHasResult(SearchResultKind.INVOCATION, '(); // 5', 0);
-    assertHasResult(SearchResultKind.REFERENCE, '.new; // 6', 4);
+    assertHasResult(SearchResultKind.INVOCATION, '(); // 4', 0);
+    assertHasResult(SearchResultKind.REFERENCE, '; // 5', 0);
+    assertHasResult(SearchResultKind.INVOCATION, '(); // 6', 0);
+    assertHasResult(SearchResultKind.REFERENCE, '.new; // 7', 4);
   }
 
   Future<void> test_constructor_unnamed_potential() async {
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index 2cc6f9f..e0fef5d 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -431,6 +431,116 @@
     ]);
   }
 
+  Future<void> test_class_order() async {
+    addTestFile('''
+class A {}
+class D extends A {}
+class C extends A {}
+class B extends A {}
+class G extends B {}
+class F extends B {}
+class E extends A {}
+''');
+    var items = await _getTypeHierarchy('A {}');
+    expect(_toJson(items), [
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'A',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': [2, 3, 4, 5]
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'Object',
+          'location': anything,
+          'flags': 0
+        },
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'B',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': [6, 7]
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'C',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'D',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'E',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'F',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 4,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'G',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 4,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      }
+    ]);
+  }
+
   Future<void> test_class_withTypes() async {
     addTestFile('''
 class MA {}
diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index 789ff5f..690b251 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -4,6 +4,8 @@
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
@@ -109,8 +111,11 @@
   }
 
   @override
-  DartCompletionContributor createContributor() {
-    return ArgListContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return ArgListContributor(request, builder);
   }
 }
 
diff --git a/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
index ea96470..3099fcf 100644
--- a/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
@@ -4,6 +4,8 @@
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/services/completion/dart/combinator_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -18,8 +20,11 @@
 @reflectiveTest
 class CombinatorContributorTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return CombinatorContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return CombinatorContributor(request, builder);
   }
 
   Future<void> test_Block_inherited_local() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index 55a731a..4926490 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -5,10 +5,9 @@
 import 'dart:async';
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
-import 'package:analysis_server/src/services/completion/completion_core.dart';
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart'
-    show DartCompletionRequestImpl;
+    show DartCompletionRequest;
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/completion/dart/utilities.dart';
 import 'package:analyzer/dart/analysis/results.dart';
@@ -43,24 +42,20 @@
 /// suggestions.
 abstract class DartCompletionContributorTest
     extends _BaseDartCompletionContributorTest {
-  late DartCompletionContributor contributor;
-
   @nonVirtual
   @override
   Future<List<CompletionSuggestion>> computeContributedSuggestions(
       DartCompletionRequest request) async {
     var builder = SuggestionBuilder(request);
-    await contributor.computeSuggestions(request, builder);
+    var contributor = createContributor(request, builder);
+    await contributor.computeSuggestions();
     return builder.suggestions.toList();
   }
 
-  DartCompletionContributor createContributor();
-
-  @override
-  void setUp() {
-    super.setUp();
-    contributor = createContributor();
-  }
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  );
 }
 
 abstract class _BaseDartCompletionContributorTest extends AbstractContextTest {
@@ -267,20 +262,19 @@
     return cs;
   }
 
-  CompletionSuggestion assertSuggestConstructor(String name,
+  CompletionSuggestion assertSuggestConstructor(String suggestion,
       {String? elementName,
       int? elemOffset,
       String defaultArgListString = _UNCHECKED,
       List<int>? defaultArgumentListTextRanges}) {
-    var cs = assertSuggest(name,
+    elementName ??= suggestion;
+    var cs = assertSuggest(suggestion,
         elemKind: ElementKind.CONSTRUCTOR,
         elemOffset: elemOffset,
         defaultArgListString: defaultArgListString,
         defaultArgumentListTextRanges: defaultArgumentListTextRanges);
     var element = cs.element!;
     expect(element.kind, equals(ElementKind.CONSTRUCTOR));
-    var index = name.indexOf('.');
-    elementName ??= index >= 0 ? name.substring(index + 1) : '';
     expect(element.name, elementName);
     return cs;
   }
@@ -536,14 +530,14 @@
 
   Future computeSuggestions({int times = 200}) async {
     result = await session.getResolvedUnit(testFile) as ResolvedUnitResult;
-    var baseRequest = CompletionRequestImpl(
-        result, completionOffset, CompletionPerformance());
-
-    return await baseRequest.performance.runRequestOperation(
+    return await CompletionPerformance().runRequestOperation(
       (performance) async {
         // Build the request
-        var request = await DartCompletionRequestImpl.from(
-            performance, baseRequest, dartdocInfo);
+        var request = DartCompletionRequest(
+          resolvedUnit: result,
+          offset: completionOffset,
+          dartdocDirectiveInfo: dartdocInfo,
+        );
 
         var range = request.target.computeReplacementRange(request.offset);
         replacementOffset = range.offset;
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index 257fb5b..972198c 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -5,13 +5,11 @@
 import 'dart:async';
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
-import 'package:analysis_server/src/services/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/imported_reference_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -26,8 +24,11 @@
 @reflectiveTest
 class CompletionManagerTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return ImportedReferenceContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return ImportedReferenceContributor(request, builder);
   }
 
   Future<void> test_resolveDirectives() async {
@@ -49,23 +50,16 @@
     await resolveFile('$testPackageLibPath/b.dart');
 
     // Build the request
-    var baseRequest = CompletionRequestImpl(
-        await session.getResolvedUnit(testFile) as ResolvedUnitResult,
-        completionOffset,
-        CompletionPerformance());
-    await baseRequest.performance.runRequestOperation((performance) async {
-      var requestCompleter = Completer<DartCompletionRequest>();
-      DartCompletionRequestImpl.from(
-              performance, baseRequest, DartdocDirectiveInfo())
-          .then((DartCompletionRequest request) {
-        requestCompleter.complete(request);
-      });
-      request = await performAnalysis(200, requestCompleter);
-    });
+    var resolvedUnit =
+        await session.getResolvedUnit(testFile) as ResolvedUnitResult;
+    request = DartCompletionRequest(
+      resolvedUnit: resolvedUnit,
+      offset: completionOffset,
+    );
 
     var directives = request.target.unit.directives;
 
-    var imports = request.libraryElement!.imports;
+    var imports = request.libraryElement.imports;
     expect(imports, hasLength(directives.length + 1));
 
     ImportElement importNamed(String expectedUri) {
diff --git a/pkg/analysis_server/test/services/completion/dart/extension_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/extension_member_contributor_test.dart
index 5def996..d8f81bb 100644
--- a/pkg/analysis_server/test/services/completion/dart/extension_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/extension_member_contributor_test.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/extension_member_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'completion_contributor_util.dart';
@@ -17,8 +19,11 @@
 @reflectiveTest
 class ExtensionMemberContributorTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return ExtensionMemberContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return ExtensionMemberContributor(request, builder);
   }
 
   Future<void> test_extended_members_inExtension_field() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
index d28095f..ff209f1 100644
--- a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/field_formal_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -18,8 +20,11 @@
 @reflectiveTest
 class FieldFormalContributorTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return FieldFormalContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return FieldFormalContributor(request, builder);
   }
 
   /// https://github.com/dart-lang/sdk/issues/39028
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index 5148c7d..6f277c3 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -4,7 +4,9 @@
 
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/imported_reference_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -22,8 +24,11 @@
   bool get isNullExpectedReturnTypeConsideredDynamic => false;
 
   @override
-  DartCompletionContributor createContributor() {
-    return ImportedReferenceContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return ImportedReferenceContributor(request, builder);
   }
 }
 
@@ -4771,6 +4776,24 @@
     assertNotSuggested('C2');
   }
 
+  Future<void> test_TypeArgumentList_functionReference() async {
+    addTestSource('''
+class A {}
+
+void foo<T>() {}
+
+void f() {
+  foo<^>;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('Object');
+    assertNotSuggested('A');
+  }
+
   Future<void> test_TypeArgumentList_recursive() async {
     resolveSource('/home/test/lib/a.dart', '''
 class A {}
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index 1673cfd..585012d 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/keyword_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
@@ -443,8 +445,11 @@
   }
 
   @override
-  DartCompletionContributor createContributor() {
-    return KeywordContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return KeywordContributor(request, builder);
   }
 
   /// Return `true` if the given [feature] is enabled.
diff --git a/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
index 9204f6d..2d6d5f5 100644
--- a/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
@@ -4,7 +4,9 @@
 
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/label_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -33,8 +35,11 @@
   }
 
   @override
-  DartCompletionContributor createContributor() {
-    return LabelContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return LabelContributor(request, builder);
   }
 
   Future<void> test_break_ignores_outer_functions_using_closure() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
index 023cef5..5c1db88 100644
--- a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/library_member_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -18,8 +20,11 @@
 @reflectiveTest
 class LibraryMemberContributorTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return LibraryMemberContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return LibraryMemberContributor(request, builder);
   }
 
   Future<void> test_extension() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
index ae303ec..aa2e6a2 100644
--- a/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
@@ -4,7 +4,9 @@
 
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/library_prefix_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -34,8 +36,11 @@
   }
 
   @override
-  DartCompletionContributor createContributor() {
-    return LibraryPrefixContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return LibraryPrefixContributor(request, builder);
   }
 
   Future<void> test_Block() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
index 6417557..3a6fa56 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -18,8 +20,11 @@
 @reflectiveTest
 class LocalLibraryContributorTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return LocalLibraryContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return LocalLibraryContributor(request, builder);
   }
 
   Future<void> test_partFile_Constructor() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index 678619f..6e7253d 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -4,7 +4,9 @@
 
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/local_reference_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -22,8 +24,11 @@
   bool get isNullExpectedReturnTypeConsideredDynamic => false;
 
   @override
-  DartCompletionContributor createContributor() {
-    return LocalReferenceContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return LocalReferenceContributor(request, builder);
   }
 
   Future<void> test_ArgDefaults_function() async {
@@ -6148,6 +6153,24 @@
     assertSuggestClass('C2');
   }
 
+  Future<void> test_TypeArgumentList_functionReference() async {
+    addTestSource('''
+class A {}
+
+void foo<T>() {}
+
+void f() {
+  foo<^>;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('A');
+    assertNotSuggested('Object');
+  }
+
   Future<void> test_TypeParameter_classDeclaration() async {
     addTestSource('''
 class A<T> {
diff --git a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
index 1ff2987..a671eeb 100644
--- a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/named_constructor_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -18,13 +20,29 @@
 
 @reflectiveTest
 class NamedConstructorContributorTest extends DartCompletionContributorTest {
-  CompletionSuggestion assertSuggestNamedConstructor(
-      String name, String returnType,
-      [CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
+  CompletionSuggestion assertConstructorReference({
+    required String elementName,
+    required String name,
+    required String returnType,
+  }) {
+    return assertSuggestNamedConstructor(
+      elementName: elementName,
+      kind: CompletionSuggestionKind.IDENTIFIER,
+      name: name,
+      returnType: returnType,
+    );
+  }
+
+  CompletionSuggestion assertSuggestNamedConstructor({
+    required String elementName,
+    CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
+    required String name,
+    required String returnType,
+  }) {
     var cs = assertSuggest(name, csKind: kind);
     var element = cs.element!;
     expect(element.kind, equals(ElementKind.CONSTRUCTOR));
-    expect(element.name, equals(name));
+    expect(element.name, equals(elementName));
     var param = element.parameters!;
     expect(param[0], equals('('));
     expect(param[param.length - 1], equals(')'));
@@ -34,8 +52,241 @@
   }
 
   @override
-  DartCompletionContributor createContributor() {
-    return NamedConstructorContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return NamedConstructorContributor(request, builder);
+  }
+
+  Future<void>
+      test_className_period_identifier_functionTypeContext_matchingReturnType() async {
+    addTestSource('''
+class A {
+  A();
+  A.named();
+}
+
+void f() {
+  A Function() v = A.na^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset - 2);
+    expect(replacementLength, 2);
+    assertConstructorReference(
+      elementName: 'A',
+      name: 'new',
+      returnType: 'A',
+    );
+    assertConstructorReference(
+      elementName: 'A.named',
+      name: 'named',
+      returnType: 'A',
+    );
+  }
+
+  Future<void> test_className_period_identifier_interfaceTypeContext() async {
+    addTestSource('''
+class A {
+  A();
+  A.named();
+}
+
+void f() {
+  int v = A.na^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset - 2);
+    expect(replacementLength, 2);
+    assertSuggestNamedConstructor(
+      elementName: 'A.named',
+      name: 'named',
+      returnType: 'A',
+    );
+  }
+
+  Future<void>
+      test_className_period_nothing_functionTypeContext_matchingReturnType() async {
+    addTestSource('''
+class A {
+  A();
+  A.named();
+}
+
+void f() {
+  A Function() v = A.^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertConstructorReference(
+      elementName: 'A',
+      name: 'new',
+      returnType: 'A',
+    );
+    assertConstructorReference(
+      elementName: 'A.named',
+      name: 'named',
+      returnType: 'A',
+    );
+  }
+
+  Future<void> test_className_period_nothing_interfaceTypeContext() async {
+    addTestSource('''
+class A {
+  A();
+  A.named();
+}
+
+void f() {
+  int v = A.^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestNamedConstructor(
+      elementName: 'A.named',
+      name: 'named',
+      returnType: 'A',
+    );
+  }
+
+  Future<void>
+      test_className_typeArguments_period_identifier_functionTypeContext_matchingReturnType() async {
+    addTestSource('''
+class A<T> {
+  A.named();
+  A.new();
+}
+
+void f() {
+  A<int> Function() v = A<int>.na^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset - 2);
+    expect(replacementLength, 2);
+    assertConstructorReference(
+      elementName: 'A',
+      name: 'new',
+      returnType: 'A<T>',
+    );
+    assertConstructorReference(
+      elementName: 'A.named',
+      name: 'named',
+      returnType: 'A<T>',
+    );
+  }
+
+  Future<void>
+      test_className_typeArguments_period_nothing_functionTypeContext_matchingReturnType() async {
+    addTestSource('''
+class A<T> {
+  A.named();
+  A.new();
+}
+
+void f() {
+  A<int> Function() v = A<int>.^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertConstructorReference(
+      elementName: 'A',
+      name: 'new',
+      returnType: 'A<T>',
+    );
+    assertConstructorReference(
+      elementName: 'A.named',
+      name: 'named',
+      returnType: 'A<T>',
+    );
+  }
+
+  Future<void>
+      test_className_typeArguments_period_nothing_functionTypeContext_matchingReturnType2() async {
+    addTestSource('''
+class A {}
+
+class B<T> extends A {
+  B.named();
+  B.new();
+}
+
+void f() {
+  A Function() v = B<int>.^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertConstructorReference(
+      elementName: 'B',
+      name: 'new',
+      returnType: 'B<T>',
+    );
+    assertConstructorReference(
+      elementName: 'B.named',
+      name: 'named',
+      returnType: 'B<T>',
+    );
+  }
+
+  Future<void>
+      test_className_typeArguments_period_nothing_functionTypeContext_notMatchingReturnType() async {
+    addTestSource('''
+class A<T> {
+  A.named();
+}
+
+void f() {
+  List<int> Function() v = A<int>.^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestNamedConstructor(
+      elementName: 'A.named',
+      name: 'named',
+      returnType: 'A<T>',
+    );
+  }
+
+  Future<void>
+      test_className_typeArguments_period_nothing_interfaceContextType() async {
+    addTestSource('''
+class A<T> {
+  A.named();
+}
+
+void f() {
+  A<int> v = A<int>.^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestNamedConstructor(
+      elementName: 'A.named',
+      name: 'named',
+      returnType: 'A<T>',
+    );
   }
 
   Future<void> test_ConstructorName_importedClass() async {
@@ -54,7 +305,11 @@
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
-    assertSuggestNamedConstructor('c', 'X');
+    assertSuggestNamedConstructor(
+      elementName: 'X.c',
+      name: 'c',
+      returnType: 'X',
+    );
     assertNotSuggested('F1');
     assertNotSuggested('T1');
     assertNotSuggested('_d');
@@ -79,7 +334,11 @@
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
-    assertSuggestNamedConstructor('c', 'X');
+    assertSuggestNamedConstructor(
+      elementName: 'X.c',
+      name: 'c',
+      returnType: 'X',
+    );
     assertNotSuggested('F1');
     assertNotSuggested('T1');
     assertNotSuggested('_d');
@@ -103,7 +362,11 @@
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
-    assertSuggestNamedConstructor('c', 'X');
+    assertSuggestNamedConstructor(
+      elementName: 'X.c',
+      name: 'c',
+      returnType: 'X',
+    );
     assertNotSuggested('F1');
     assertNotSuggested('T1');
     assertNotSuggested('_d');
@@ -119,7 +382,11 @@
     await computeSuggestions();
     expect(replacementOffset, completionOffset - 2);
     expect(replacementLength, 13);
-    assertSuggestNamedConstructor('fromCharCodes', 'String');
+    assertSuggestNamedConstructor(
+      elementName: 'String.fromCharCodes',
+      name: 'fromCharCodes',
+      returnType: 'String',
+    );
     assertNotSuggested('isEmpty');
     assertNotSuggested('isNotEmpty');
     assertNotSuggested('length');
@@ -138,8 +405,16 @@
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
-    assertSuggestNamedConstructor('c', 'X');
-    assertSuggestNamedConstructor('_d', 'X');
+    assertSuggestNamedConstructor(
+      elementName: 'X.c',
+      name: 'c',
+      returnType: 'X',
+    );
+    assertSuggestNamedConstructor(
+      elementName: 'X._d',
+      name: '_d',
+      returnType: 'X',
+    );
     assertNotSuggested('F1');
     assertNotSuggested('T1');
     assertNotSuggested('z');
@@ -157,11 +432,50 @@
     await computeSuggestions();
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
-    assertSuggestNamedConstructor('c', 'X');
-    assertSuggestNamedConstructor('_d', 'X');
+    assertSuggestNamedConstructor(
+      elementName: 'X.c',
+      name: 'c',
+      returnType: 'X',
+    );
+    assertSuggestNamedConstructor(
+      elementName: 'X._d',
+      name: '_d',
+      returnType: 'X',
+    );
     assertNotSuggested('F1');
     assertNotSuggested('T1');
     assertNotSuggested('z');
     assertNotSuggested('m');
   }
+
+  Future<void>
+      test_importPrefix_className_typeArguments_period_nothing_functionTypeContext_matchingReturnType() async {
+    addSource('/home/test/lib/a.dart', '''
+class A<T> {
+  A.named();
+  A.new();
+}
+''');
+    addTestSource('''
+import 'a.dart' as prefix;
+
+void f() {
+  A<int> Function() v = prefix.A<int>.^;
+}
+''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertConstructorReference(
+      elementName: 'A',
+      name: 'new',
+      returnType: 'A<T>',
+    );
+    assertConstructorReference(
+      elementName: 'A.named',
+      name: 'named',
+      returnType: 'A<T>',
+    );
+  }
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
index 7b27e88..e8eff71 100644
--- a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/override_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -17,8 +19,11 @@
 @reflectiveTest
 class OverrideContributorTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return OverrideContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return OverrideContributor(request, builder);
   }
 
   Future<void> test_alreadyOverridden() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
index 7253f49..e4bc0d3 100644
--- a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/static_member_contributor.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -18,8 +20,11 @@
 @reflectiveTest
 class StaticMemberContributorTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return StaticMemberContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return StaticMemberContributor(request, builder);
   }
 
   Future<void> test_class_static_notPrivate() async {
@@ -170,8 +175,50 @@
 ''');
     await computeSuggestions();
 
-    assertSuggestConstructor('foo', elementName: 'foo');
-    assertSuggestConstructor('bar', elementName: 'bar');
+    assertSuggestConstructor('foo', elementName: 'A.foo');
+    assertSuggestConstructor('bar', elementName: 'A.bar');
+  }
+
+  Future<void>
+      test_implicitCreation_functionContextType_matchingReturnType() async {
+    addSource('/home/test/lib/a.dart', '''
+class A {
+  A.foo();
+  A.bar();
+}
+''');
+    addTestSource('''
+import 'a.dart';
+
+main() {
+  A Function() v = A.^;
+}
+''');
+    await computeSuggestions();
+
+    assertNotSuggested('foo');
+    assertNotSuggested('bar');
+  }
+
+  Future<void>
+      test_implicitCreation_functionContextType_notMatchingReturnType() async {
+    addSource('/home/test/lib/a.dart', '''
+class A {
+  A.foo();
+  A.bar();
+}
+''');
+    addTestSource('''
+import 'a.dart';
+
+main() {
+  int Function() v = A.^;
+}
+''');
+    await computeSuggestions();
+
+    assertSuggestConstructor('foo', elementName: 'A.foo');
+    assertSuggestConstructor('bar', elementName: 'A.bar');
   }
 
   Future<void> test_keyword() async {
@@ -399,7 +446,7 @@
     assertSuggestSetter('publicSetter');
     assertSuggestConstructor(
       'publicConstructor',
-      elementName: 'publicConstructor',
+      elementName: 'A.publicConstructor',
     );
   }
 
diff --git a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
index c9d8574..c7f9a18 100644
--- a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/completion/dart/type_member_contributor.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
@@ -48,8 +50,11 @@
   }
 
   @override
-  DartCompletionContributor createContributor() {
-    return TypeMemberContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return TypeMemberContributor(request, builder);
   }
 
   Future<void> test_ArgDefaults_method() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
index 0620fbf..92e87d3 100644
--- a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/completion/dart/uri_contributor.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
@@ -25,8 +27,11 @@
   String get testPackageTestPath => '$testPackageRootPath/test';
 
   @override
-  DartCompletionContributor createContributor() {
-    return UriContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return UriContributor(request, builder);
   }
 
   Future<void> test_after_import() async {
@@ -550,8 +555,11 @@
 @reflectiveTest
 class UriContributorWindowsTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return UriContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return UriContributor(request, builder);
   }
 
   @override
diff --git a/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart
index 3b75a53..63f698f 100644
--- a/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/completion/dart/variable_name_contributor.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -18,8 +20,11 @@
 @reflectiveTest
 class VariableNameContributorTest extends DartCompletionContributorTest {
   @override
-  DartCompletionContributor createContributor() {
-    return VariableNameContributor();
+  DartCompletionContributor createContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) {
+    return VariableNameContributor(request, builder);
   }
 
   Future<void> test_ExpressionStatement_dont_suggest_type() async {
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index 6e99c97..527b60f 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -2806,7 +2806,7 @@
 // end
 }
 
-List<dynamic> res(bool b) {
+List<Object> res(bool b) {
   if (b) {
     print(true);
     return <int>[];
diff --git a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
index c688ac2..79d6fe7 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
@@ -91,7 +91,8 @@
 
   Future<void> test_createChange_add() async {
     await indexTestUnit('''
-/// Documentation for [new A]
+// ignore: deprecated_new_in_comment_reference
+/// Documentation for [new A] and [A.new]
 class A {
   A() {} // marker
   factory A._() = A;
@@ -112,7 +113,8 @@
     // validate change
     refactoring.newName = 'newName';
     return assertSuccessfulRefactoring('''
-/// Documentation for [new A.newName]
+// ignore: deprecated_new_in_comment_reference
+/// Documentation for [new A.newName] and [A.newName]
 class A {
   A.newName() {} // marker
   factory A._() = A.newName;
@@ -129,7 +131,8 @@
 
   Future<void> test_createChange_add_toSynthetic() async {
     await indexTestUnit('''
-/// Documentation for [new A]
+// ignore: deprecated_new_in_comment_reference
+/// Documentation for [new A] and [A.new]
 class A {
   int field = 0;
 }
@@ -149,7 +152,8 @@
     // validate change
     refactoring.newName = 'newName';
     return assertSuccessfulRefactoring('''
-/// Documentation for [new A.newName]
+// ignore: deprecated_new_in_comment_reference
+/// Documentation for [new A.newName] and [A.newName]
 class A {
   int field = 0;
 
@@ -167,6 +171,7 @@
 
   Future<void> test_createChange_change() async {
     await indexTestUnit('''
+// ignore: deprecated_new_in_comment_reference
 /// Documentation for [A.test] and [new A.test]
 class A {
   A.test() {} // marker
@@ -188,6 +193,7 @@
     // validate change
     refactoring.newName = 'newName';
     return assertSuccessfulRefactoring('''
+// ignore: deprecated_new_in_comment_reference
 /// Documentation for [A.newName] and [new A.newName]
 class A {
   A.newName() {} // marker
@@ -234,6 +240,7 @@
 
   Future<void> test_createChange_remove() async {
     await indexTestUnit('''
+// ignore: deprecated_new_in_comment_reference
 /// Documentation for [A.test] and [new A.test]
 class A {
   A.test() {} // marker
@@ -255,6 +262,7 @@
     // validate change
     refactoring.newName = '';
     return assertSuccessfulRefactoring('''
+// ignore: deprecated_new_in_comment_reference
 /// Documentation for [A] and [new A]
 class A {
   A() {} // marker
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 10cb93c..07feae1 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -39,7 +39,6 @@
     path = convertPath(path);
 
     result = await resolveFile(path);
-    expect(result.state, ResultState.VALID);
 
     findNode = FindNode(result.content, result.unit);
     findElement = FindElement(result.unit);
@@ -329,7 +328,7 @@
 ''').path;
 
     var coreLibResult = await driverFor(testFilePath)
-        .getLibraryByUri2('dart:core') as LibraryElementResult;
+        .getLibraryByUri('dart:core') as LibraryElementResult;
     var intElement = coreLibResult.element.getType('int')!;
 
     var matches = await searchEngine.searchReferences(intElement);
@@ -428,7 +427,7 @@
       var contextRoot = driver.analysisContext!.contextRoot;
       for (var file in contextRoot.analyzedFiles()) {
         if (file.endsWith('.dart')) {
-          await driver.getUnitElement2(file);
+          await driver.getUnitElement(file);
         }
       }
     }
diff --git a/pkg/analysis_server/test/src/cider/cider_service.dart b/pkg/analysis_server/test/src/cider/cider_service.dart
index 92b637e..32aafc2 100644
--- a/pkg/analysis_server/test/src/cider/cider_service.dart
+++ b/pkg/analysis_server/test/src/cider/cider_service.dart
@@ -4,9 +4,9 @@
 
 import 'dart:convert';
 
-import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer/src/workspace/bazel.dart';
@@ -14,20 +14,22 @@
 import 'package:linter/src/rules.dart';
 
 class CiderServiceTest with ResourceProviderMixin {
-  final ByteStore byteStore = MemoryByteStore();
-
   final StringBuffer logBuffer = StringBuffer();
   late PerformanceLog logger;
-  late MockSdk sdk;
 
   late FileResolver fileResolver;
 
   String testPath = '/workspace/dart/test/lib/test.dart';
 
   /// Create a new [FileResolver] into [fileResolver].
-  ///
-  /// We do this the first time, and to test reusing results from [byteStore].
   void createFileResolver() {
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+    var sdk = FolderBasedDartSdk(resourceProvider, sdkRoot);
+
     var workspace = BazelWorkspace.find(
       resourceProvider,
       convertPath(testPath),
@@ -36,7 +38,6 @@
     fileResolver = FileResolver(
       logger,
       resourceProvider,
-      byteStore,
       workspace.createSourceFactory(sdk, null),
       (String path) => _getDigest(path),
       null,
@@ -49,7 +50,6 @@
     registerLintRules();
 
     logger = PerformanceLog(logBuffer);
-    sdk = MockSdk(resourceProvider: resourceProvider);
 
     newFile('/workspace/WORKSPACE');
     newFile('/workspace/dart/test/BUILD');
diff --git a/pkg/analysis_server/test/src/cider/fixes_test.dart b/pkg/analysis_server/test/src/cider/fixes_test.dart
index 4e57e14..63179b7 100644
--- a/pkg/analysis_server/test/src/cider/fixes_test.dart
+++ b/pkg/analysis_server/test/src/cider/fixes_test.dart
@@ -72,6 +72,122 @@
 ''');
   }
 
+  Future<void> test_importLibrary_withClass() async {
+    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+class Test {}
+''');
+    fileResolver.resolve(path: a.path);
+
+    await _compute(r'''
+void f(Test a) {}^
+''');
+
+    assertHasFix(DartFixKind.IMPORT_LIBRARY_PROJECT1, r'''
+import 'a.dart';
+
+void f(Test a) {}
+''');
+  }
+
+  Future<void> test_importLibrary_withEnum() async {
+    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+enum Test {a, b, c}
+''');
+    fileResolver.resolve(path: a.path);
+
+    await _compute(r'''
+void f(Test a) {}^
+''');
+
+    assertHasFix(DartFixKind.IMPORT_LIBRARY_PROJECT1, r'''
+import 'a.dart';
+
+void f(Test a) {}
+''');
+  }
+
+  Future<void> test_importLibrary_withExtension() async {
+    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+extension E on int {
+  void foo() {}
+}
+''');
+    fileResolver.resolve(path: a.path);
+
+    await _compute(r'''
+void f() {
+  E(0).foo();^
+}
+''');
+
+    assertHasFix(DartFixKind.IMPORT_LIBRARY_PROJECT1, r'''
+import 'a.dart';
+
+void f() {
+  E(0).foo();
+}
+''');
+  }
+
+  Future<void> test_importLibrary_withFunction() async {
+    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+void foo() {}
+''');
+    fileResolver.resolve(path: a.path);
+
+    await _compute(r'''
+void f() {
+  foo();^
+}
+''');
+
+    assertHasFix(DartFixKind.IMPORT_LIBRARY_PROJECT1, r'''
+import 'a.dart';
+
+void f() {
+  foo();
+}
+''');
+  }
+
+  Future<void> test_importLibrary_withMixin() async {
+    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+mixin Test {}
+''');
+    fileResolver.resolve(path: a.path);
+
+    await _compute(r'''
+void f(Test a) {}^
+''');
+
+    assertHasFix(DartFixKind.IMPORT_LIBRARY_PROJECT1, r'''
+import 'a.dart';
+
+void f(Test a) {}
+''');
+  }
+
+  Future<void> test_importLibrary_withTopLevelVariable() async {
+    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+var a = 0;
+''');
+    fileResolver.resolve(path: a.path);
+
+    await _compute(r'''
+void f() {
+  a;^
+}
+''');
+
+    assertHasFix(DartFixKind.IMPORT_LIBRARY_PROJECT1, r'''
+import 'a.dart';
+
+void f() {
+  a;
+}
+''');
+  }
+
   Future<void> test_insertSemicolon() async {
     await _compute(r'''
 var v = 0^
diff --git a/pkg/analysis_server/test/src/domain_abstract_test.dart b/pkg/analysis_server/test/src/domain_abstract_test.dart
index 36ca0d3..1116cbf 100644
--- a/pkg/analysis_server/test/src/domain_abstract_test.dart
+++ b/pkg/analysis_server/test/src/domain_abstract_test.dart
@@ -32,7 +32,8 @@
   Future<void> test_waitForResponses_empty_timeout() async {
     AbstractRequestHandler handler = TestAbstractRequestHandler(server);
     var futures = <PluginInfo, Future<plugin.Response>>{};
-    var responses = await handler.waitForResponses(futures, timeout: 250);
+    var responses = await handler.waitForResponses(futures,
+        timeout: const Duration(milliseconds: 250));
     expect(responses, isEmpty);
   }
 
@@ -79,7 +80,8 @@
       plugin2: Future.value(response2),
       plugin3: Future.delayed(Duration(milliseconds: 500), () => response3)
     };
-    var responses = await handler.waitForResponses(futures, timeout: 50);
+    var responses = await handler.waitForResponses(futures,
+        timeout: const Duration(milliseconds: 50));
     expect(responses, unorderedEquals([response2]));
   }
 
diff --git a/pkg/analysis_server/test/src/g3/fixes_test.dart b/pkg/analysis_server/test/src/g3/fixes_test.dart
index 7aab591..34bdfbf 100644
--- a/pkg/analysis_server/test/src/g3/fixes_test.dart
+++ b/pkg/analysis_server/test/src/g3/fixes_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/g3/fixes.dart';
 import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:linter/src/rules.dart';
@@ -18,9 +19,14 @@
 
 @reflectiveTest
 class G3FixesTest with ResourceProviderMixin {
+  Folder get sdkRoot => newFolder('/sdk');
+
   void setUp() {
     registerLintRules();
-    MockSdk(resourceProvider: resourceProvider);
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
   }
 
   Future<void> test_awaitOnlyFutures() async {
@@ -126,7 +132,7 @@
 
     var tester = LintFixTester(
       resourceProvider: resourceProvider,
-      sdkPath: convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
       packageConfigPath: null,
     );
 
@@ -157,7 +163,7 @@
 
     var tester = LintFixTester(
       resourceProvider: resourceProvider,
-      sdkPath: convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
       packageConfigPath: null,
     );
 
diff --git a/pkg/analysis_server/test/src/services/completion/dart/feature_computer_test.dart b/pkg/analysis_server/test/src/services/completion/dart/feature_computer_test.dart
index 6e27b10..bfa63e0 100644
--- a/pkg/analysis_server/test/src/services/completion/dart/feature_computer_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/dart/feature_computer_test.dart
@@ -438,6 +438,30 @@
 ''', 'num');
   }
 
+  Future<void> test_className_period() async {
+    await assertContextType('''
+int x = List.^;
+''', 'int');
+  }
+
+  Future<void> test_className_period_identifier() async {
+    await assertContextType('''
+int x = List.^;
+''', 'int');
+  }
+
+  Future<void> test_className_typeArguments_period() async {
+    await assertContextType('''
+int x = List<double>.^;
+''', 'int');
+  }
+
+  Future<void> test_className_typeArguments_period_identifier() async {
+    await assertContextType('''
+int x = List<double>.foo^;
+''', 'int');
+  }
+
   Future<void> test_fieldDeclaration_int() async {
     await assertContextType('''
 class Foo {
diff --git a/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart b/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart
index 4cc60a3..8c8bc43 100644
--- a/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart
@@ -3,12 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analysis_server/src/services/completion/completion_core.dart';
-import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
-import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
-import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -31,10 +27,10 @@
   }
 
   Future<CompletionSuggestion> forTopLevelFunction(String functionName) async {
-    var request = await DartCompletionRequestImpl.from(
-        OperationPerformanceImpl(''),
-        CompletionRequestImpl(testAnalysisResult, 0, CompletionPerformance()),
-        DartdocDirectiveInfo());
+    var request = DartCompletionRequest(
+      resolvedUnit: testAnalysisResult,
+      offset: 0,
+    );
     var builder = SuggestionBuilder(request);
     builder.suggestTopLevelFunction(findElement.topFunction('f'));
     var suggestions = builder.suggestions.toList();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_return_type_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_return_type_test.dart
index cfcabd6..1a40007 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_return_type_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_return_type_test.dart
@@ -12,10 +12,36 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddReturnTypeLintTest);
+    defineReflectiveTests(AddReturnTypeBulkTest);
   });
 }
 
 @reflectiveTest
+class AddReturnTypeBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.always_declare_return_types;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+class A {
+  get foo => 0;
+  m(p) {
+    return p;
+  }
+}
+''');
+    await assertHasFix('''
+class A {
+  int get foo => 0;
+  dynamic m(p) {
+    return p;
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
 class AddReturnTypeLintTest extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.ADD_RETURN_TYPE;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_trailing_comma_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_trailing_comma_test.dart
new file mode 100644
index 0000000..bf7c774
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_trailing_comma_test.dart
@@ -0,0 +1,89 @@
+// Copyright (c) 2021, 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:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test/expect.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AddTrailingCommaBulkTest);
+    defineReflectiveTests(AddTrailingCommaInFileTest);
+    defineReflectiveTests(AddTrailingCommaTest);
+  });
+}
+
+@reflectiveTest
+class AddTrailingCommaBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.require_trailing_commas;
+
+  Future<void> test_bulk() async {
+    await resolveTestCode('''
+Object f(a, b) {
+  f(f('a',
+      'b'), 'b');
+  return a;
+}
+''');
+    await assertHasFix('''
+Object f(a, b) {
+  f(f('a',
+      'b',), 'b',);
+  return a;
+}
+''');
+  }
+}
+
+@reflectiveTest
+class AddTrailingCommaInFileTest extends FixInFileProcessorTest {
+  Future<void> test_File() async {
+    createAnalysisOptionsFile(lints: [LintNames.require_trailing_commas]);
+    await resolveTestCode(r'''
+Object f(a, b) {
+  f(f('a',
+      'b'), 'b');
+  return a;
+}
+''');
+    var fixes = await getFixesForFirstError();
+    expect(fixes, hasLength(1));
+    assertProduces(fixes.first, r'''
+Object f(a, b) {
+  f(f('a',
+      'b',), 'b',);
+  return a;
+}
+''');
+  }
+}
+
+@reflectiveTest
+class AddTrailingCommaTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.ADD_TRAILING_COMMA;
+
+  @override
+  String get lintCode => LintNames.require_trailing_commas;
+
+  Future<void> test_comma() async {
+    await resolveTestCode('''
+void f(a, b) {
+  f('a',
+    'b');
+}
+''');
+    await assertHasFix('''
+void f(a, b) {
+  f('a',
+    'b',);
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart
index edf86dc..c693fe8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/linter/lint_names.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test/expect.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'fix_processor.dart';
@@ -12,8 +13,15 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddTypeAnnotationTest);
+    defineReflectiveTests(AlwaysSpecifyTypesBulkTest);
+    defineReflectiveTests(AlwaysSpecifyTypesInFileTest);
     defineReflectiveTests(AlwaysSpecifyTypesLintTest);
+    defineReflectiveTests(PreferTypingUninitializedVariablesBulkTest);
+    defineReflectiveTests(PreferTypingUninitializedVariablesInFileTest);
     defineReflectiveTests(PreferTypingUninitializedVariablesLintTest);
+    defineReflectiveTests(TypeAnnotatePublicAPIsBulkTest);
+    defineReflectiveTests(TypeAnnotatePublicAPIsInFileTest);
+    defineReflectiveTests(TypeAnnotatePublicAPIsLintTest);
   });
 }
 
@@ -52,6 +60,48 @@
 }
 
 @reflectiveTest
+class AlwaysSpecifyTypesBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.always_specify_types;
+
+  Future<void> test_bulk() async {
+    await resolveTestCode('''
+final a = 0;
+class A {
+  final b = 1;
+}
+''');
+    await assertHasFix('''
+final int a = 0;
+class A {
+  final int b = 1;
+}
+''');
+  }
+}
+
+@reflectiveTest
+class AlwaysSpecifyTypesInFileTest extends FixInFileProcessorTest {
+  Future<void> test_File() async {
+    createAnalysisOptionsFile(lints: [LintNames.always_specify_types]);
+    await resolveTestCode(r'''
+final a = 0;
+class A {
+  final b = 1;
+}
+''');
+    var fixes = await getFixesForFirstError();
+    expect(fixes, hasLength(1));
+    assertProduces(fixes.first, r'''
+final int a = 0;
+class A {
+  final int b = 1;
+}
+''');
+  }
+}
+
+@reflectiveTest
 class AlwaysSpecifyTypesLintTest extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.ADD_TYPE_ANNOTATION;
@@ -76,6 +126,62 @@
 }
 
 @reflectiveTest
+class PreferTypingUninitializedVariablesBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.prefer_typing_uninitialized_variables;
+
+  Future<void> test_bulk() async {
+    await resolveTestCode('''
+void f() {
+  var a, b;
+  a = 0;
+  b = 1;
+  print(a);
+  print(b);
+}
+''');
+    await assertHasFix('''
+void f() {
+  int a, b;
+  a = 0;
+  b = 1;
+  print(a);
+  print(b);
+}
+''');
+  }
+}
+
+@reflectiveTest
+class PreferTypingUninitializedVariablesInFileTest
+    extends FixInFileProcessorTest {
+  Future<void> test_File() async {
+    createAnalysisOptionsFile(
+        lints: [LintNames.prefer_typing_uninitialized_variables]);
+    await resolveTestCode(r'''
+void f() {
+  var a, b;
+  a = 0;
+  b = 1;
+  print(a);
+  print(b);
+}
+''');
+    var fixes = await getFixesForFirstError();
+    expect(fixes, hasLength(1));
+    assertProduces(fixes.first, r'''
+void f() {
+  int a, b;
+  a = 0;
+  b = 1;
+  print(a);
+  print(b);
+}
+''');
+  }
+}
+
+@reflectiveTest
 class PreferTypingUninitializedVariablesLintTest extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.ADD_TYPE_ANNOTATION;
@@ -102,3 +208,51 @@
 ''');
   }
 }
+
+@reflectiveTest
+class TypeAnnotatePublicAPIsBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.type_annotate_public_apis;
+
+  Future<void> test_bulk() async {
+    await resolveTestCode('''
+var a = '', b = '';
+''');
+    await assertHasFix('''
+String a = '', b = '';
+''');
+  }
+}
+
+@reflectiveTest
+class TypeAnnotatePublicAPIsInFileTest extends FixInFileProcessorTest {
+  Future<void> test_File() async {
+    createAnalysisOptionsFile(lints: [LintNames.type_annotate_public_apis]);
+    await resolveTestCode(r'''
+var a = '', b = '';
+''');
+    var fixes = await getFixesForFirstError();
+    expect(fixes, hasLength(1));
+    assertProduces(fixes.first, r'''
+String a = '', b = '';
+''');
+  }
+}
+
+@reflectiveTest
+class TypeAnnotatePublicAPIsLintTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.ADD_TYPE_ANNOTATION;
+
+  @override
+  String get lintCode => LintNames.type_annotate_public_apis;
+
+  Future<void> test_local() async {
+    await resolveTestCode('''
+var a = '';
+''');
+    await assertHasFix('''
+String a = '';
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart
new file mode 100644
index 0000000..8d2f3e8
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart
@@ -0,0 +1,79 @@
+// Copyright (c) 2021, 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:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConvertIntoBlockBodyTest);
+  });
+}
+
+@reflectiveTest
+class ConvertIntoBlockBodyTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.CONVERT_INTO_BLOCK_BODY;
+
+  Future<void> test_function() async {
+    await resolveTestCode('''
+void f();
+''');
+    await assertHasFix('''
+void f() {
+  // TODO: implement f
+}
+''');
+  }
+
+  Future<void> test_method_Never() async {
+    await resolveTestCode('''
+class A {
+  Never m();
+}
+''');
+    await assertHasFix('''
+class A {
+  Never m() {
+    // TODO: implement m
+    throw UnimplementedError();
+  }
+}
+''');
+  }
+
+  Future<void> test_method_nonVoid() async {
+    await resolveTestCode('''
+class A {
+  String m(int i);
+}
+''');
+    await assertHasFix('''
+class A {
+  String m(int i) {
+    // TODO: implement m
+    throw UnimplementedError();
+  }
+}
+''');
+  }
+
+  Future<void> test_method_void() async {
+    await resolveTestCode('''
+class A {
+  void m();
+}
+''');
+    await assertHasFix('''
+class A {
+  void m() {
+    // TODO: implement m
+  }
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_into_expression_body_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_into_expression_body_test.dart
index 33d2b33..638ecab 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_into_expression_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_into_expression_body_test.dart
@@ -12,10 +12,49 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertIntoExpressionBodyTest);
+    defineReflectiveTests(ConvertIntoExpressionBodyBulkTest);
   });
 }
 
 @reflectiveTest
+class ConvertIntoExpressionBodyBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.prefer_expression_function_bodies;
+
+  Future<void> test_singleFile() async {
+    // See the discussion in https://dart-review.googlesource.com/c/sdk/+/217521
+    // for the nested closure case (var f = () ...).
+    // Note this is another place where multiple passes will improve results.
+    await resolveTestCode('''
+class A {
+  mmm() async {
+    return 42;
+  }
+  int nnn() {
+    return mmm() + 1;
+  }
+}
+
+var f = () {
+  return () {
+    return 3;
+  };
+};
+''');
+    await assertHasFix('''
+class A {
+  mmm() async => 42;
+  int nnn() => mmm() + 1;
+}
+
+var f = () => () {
+    return 3;
+  };
+''');
+  }
+}
+
+@reflectiveTest
 class ConvertIntoExpressionBodyTest extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.CONVERT_INTO_EXPRESSION_BODY;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_double_quoted_string_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_double_quoted_string_test.dart
new file mode 100644
index 0000000..69058c9
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_double_quoted_string_test.dart
@@ -0,0 +1,101 @@
+// Copyright (c) 2021, 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:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test/expect.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConvertToDoubleQuotedStringBulkTest);
+    defineReflectiveTests(ConvertToDoubleQuotedStringInFileTest);
+    defineReflectiveTests(ConvertToDoubleQuotedStringTest);
+  });
+}
+
+@reflectiveTest
+class ConvertToDoubleQuotedStringBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.prefer_double_quotes;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+void f() {
+  print('abc');
+  print('e' + 'f' + 'g');
+}
+''');
+    await assertHasFix('''
+void f() {
+  print("abc");
+  print("e" + "f" + "g");
+}
+''');
+  }
+}
+
+@reflectiveTest
+class ConvertToDoubleQuotedStringInFileTest extends FixInFileProcessorTest {
+  Future<void> test_File() async {
+    createAnalysisOptionsFile(lints: [LintNames.prefer_double_quotes]);
+    await resolveTestCode(r'''
+void f() {
+  print('abc');
+  print('e' + 'f' + 'g');
+}
+''');
+    var fixes = await getFixesForFirstError();
+    expect(fixes, hasLength(1));
+    assertProduces(fixes.first, r'''
+void f() {
+  print("abc");
+  print("e" + "f" + "g");
+}
+''');
+  }
+}
+
+@reflectiveTest
+class ConvertToDoubleQuotedStringTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.CONVERT_TO_DOUBLE_QUOTED_STRING;
+
+  @override
+  String get lintCode => LintNames.prefer_double_quotes;
+
+  Future<void> test_one_interpolation() async {
+    await resolveTestCode(r'''
+void f() {
+  var b = "b";
+  var c = "c";
+  print('a $b-${c} d');
+}
+''');
+    await assertHasFix(r'''
+void f() {
+  var b = "b";
+  var c = "c";
+  print("a $b-${c} d");
+}
+''');
+  }
+
+  /// More coverage in the `convert_to_double_quoted_string_test.dart` assist test.
+  Future<void> test_one_simple() async {
+    await resolveTestCode('''
+void f() {
+  print('abc');
+}
+''');
+    await assertHasFix('''
+void f() {
+  print("abc");
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_single_quoted_string_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_single_quoted_string_test.dart
index 42e0f6e..42125b3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_single_quoted_string_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_single_quoted_string_test.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/linter/lint_names.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test/expect.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'fix_processor.dart';
@@ -12,6 +13,7 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToSingleQuotedStringBulkTest);
+    defineReflectiveTests(ConvertToSingleQuotedStringInFileTest);
     defineReflectiveTests(ConvertToSingleQuotedStringTest);
   });
 }
@@ -38,6 +40,27 @@
 }
 
 @reflectiveTest
+class ConvertToSingleQuotedStringInFileTest extends FixInFileProcessorTest {
+  Future<void> test_File() async {
+    createAnalysisOptionsFile(lints: [LintNames.prefer_single_quotes]);
+    await resolveTestCode(r'''
+void f() {
+  print("abc");
+  print("e" + "f" + "g");
+}
+''');
+    var fixes = await getFixesForFirstError();
+    expect(fixes, hasLength(1));
+    assertProduces(fixes.first, r'''
+void f() {
+  print('abc');
+  print('e' + 'f' + 'g');
+}
+''');
+  }
+}
+
+@reflectiveTest
 class ConvertToSingleQuotedStringTest extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.CONVERT_TO_SINGLE_QUOTED_STRING;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/sdk_fix_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/sdk_fix_test.dart
index a154782..72a5b03 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/sdk_fix_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/sdk_fix_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_manager.dart';
-import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'data_driven_test_support.dart';
@@ -18,7 +17,7 @@
 
 class AbstractSdkFixTest extends DataDrivenFixProcessorTest {
   void addSdkDataFile(String content) {
-    newFile('$sdkRoot/lib/_internal/${TransformSetManager.dataFileName}',
+    newFile('${sdkRoot.path}/lib/_internal/${TransformSetManager.dataFileName}',
         content: content);
   }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_processor_map_test.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_processor_map_test.dart
index 83e66a2b..763bc38 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_processor_map_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_processor_map_test.dart
@@ -19,6 +19,7 @@
     'avoid_types_on_closure_parameters',
     'empty_statements',
     'prefer_collection_literals',
+    'prefer_const_constructors',
     'prefer_inlined_adds',
   ];
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_deprecated_new_in_comment_reference_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_deprecated_new_in_comment_reference_test.dart
new file mode 100644
index 0000000..58cc478
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_deprecated_new_in_comment_reference_test.dart
@@ -0,0 +1,80 @@
+// Copyright (c) 2021, 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:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RemoveDeprecatedNewInCommentReferenceBulkTest);
+    defineReflectiveTests(RemoveDeprecatedNewInCommentReferenceTest);
+  });
+}
+
+@reflectiveTest
+class RemoveDeprecatedNewInCommentReferenceBulkTest
+    extends BulkFixProcessorTest {
+  Future<void> test_named() async {
+    await resolveTestCode('''
+/// See [new A.named].
+class A {
+  A.named();
+}
+''');
+    await assertHasFix('''
+/// See [A.named].
+class A {
+  A.named();
+}
+''');
+  }
+}
+
+@reflectiveTest
+class RemoveDeprecatedNewInCommentReferenceTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_DEPRECATED_NEW_IN_COMMENT_REFERENCE;
+
+  Future<void> test_named() async {
+    await resolveTestCode('''
+/// See [new A.named].
+class A {
+  A.named();
+}
+''');
+    await assertHasFix('''
+/// See [A.named].
+class A {
+  A.named();
+}
+''');
+  }
+
+  Future<void> test_prefixedUnnamed() async {
+    await resolveTestCode('''
+/// See [new self.A].
+import '' as self;
+class A {}
+''');
+    await assertHasFix('''
+/// See [self.A.new].
+import '' as self;
+class A {}
+''');
+  }
+
+  Future<void> test_unnamed() async {
+    await resolveTestCode('''
+/// See [new A].
+class A {}
+''');
+    await assertHasFix('''
+/// See [A.new].
+class A {}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart
index d18763d..171e2e1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -11,10 +12,38 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedCatchClauseTest);
+    defineReflectiveTests(RemoveUnusedCatchClauseMultiTest);
   });
 }
 
 @reflectiveTest
+class RemoveUnusedCatchClauseMultiTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_UNUSED_CATCH_CLAUSE_MULTI;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+main() {
+  try {
+    throw 42;
+  } on int catch (i) {
+  } on Error catch (e) {
+  }
+}
+''');
+    await assertHasFixAllFix(HintCode.UNUSED_CATCH_CLAUSE, '''
+main() {
+  try {
+    throw 42;
+  } on int {
+  } on Error {
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
 class RemoveUnusedCatchClauseTest extends FixProcessorTest {
   @override
   FixKind get kind => DartFixKind.REMOVE_UNUSED_CATCH_CLAUSE;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart
index 730f44e..f72b354 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -11,10 +12,38 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedCatchStackTest);
+    defineReflectiveTests(RemoveUnusedCatchStackMultiTest);
   });
 }
 
 @reflectiveTest
+class RemoveUnusedCatchStackMultiTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_UNUSED_CATCH_STACK_MULTI;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+main() {
+  try {
+    throw 42;
+  } on int catch (i, stack) {
+  } catch (e, stack) {
+  }
+}
+''');
+    await assertHasFixAllFix(HintCode.UNUSED_CATCH_STACK, '''
+main() {
+  try {
+    throw 42;
+  } on int catch (i) {
+  } catch (e) {
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
 class RemoveUnusedCatchStackTest extends FixProcessorTest {
   @override
   FixKind get kind => DartFixKind.REMOVE_UNUSED_CATCH_STACK;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
index 94cc847..6fbc9d8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
@@ -162,4 +162,16 @@
 }
 ''');
   }
+
+  Future<void> test_unnecessaryImport() async {
+    await resolveTestCode('''
+import 'dart:async';
+import 'dart:async' show Completer;
+f(FutureOr<int> a, Completer<int> b) {}
+''');
+    await assertHasFix('''
+import 'dart:async';
+f(FutureOr<int> a, Completer<int> b) {}
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_parameter_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_parameter_test.dart
index e421d0e..fe01fbd 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_parameter_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_parameter_test.dart
@@ -12,10 +12,32 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedParameterTest);
+    defineReflectiveTests(RemoveUnusedParameterBulkTest);
   });
 }
 
 @reflectiveTest
+class RemoveUnusedParameterBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.avoid_unused_constructor_parameters;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+class C {
+  int y;
+  C({int x = 0, this.y = 0, int z = 0});
+}
+''');
+    await assertHasFix('''
+class C {
+  int y;
+  C({this.y = 0});
+}
+''');
+  }
+}
+
+@reflectiveTest
 class RemoveUnusedParameterTest extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.REMOVE_UNUSED_PARAMETER;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_new_with_const_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_new_with_const_test.dart
index 6960bb5..4fca1eb 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_new_with_const_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_new_with_const_test.dart
@@ -21,23 +21,75 @@
   @override
   String get lintCode => LintNames.prefer_const_constructors;
 
-  /// Disabled in BulkFixProcessor.
-  @failingTest
   Future<void> test_singleFile() async {
     await resolveTestCode(r'''
-class C {
-  const C();
+class A {
+  const A();
 }
 main() {
-  print('${new C()} ${new C()}');
+  var a = new A();
+  var b = new A();
 }
 ''');
     await assertHasFix(r'''
-class C {
-  const C();
+class A {
+  const A();
 }
 main() {
-  print('${const C()} ${const C()}');
+  var a = const A();
+  var b = const A();
+}
+''');
+  }
+
+  Future<void> test_singleFile_incomplete_promotableNew() async {
+    await resolveTestCode(r'''
+class A {
+  const A({A? parent});
+  const A.a();
+}
+main() {
+  var a = new A(
+    parent: new A(),
+  );
+}
+''');
+    // The outer new should get promoted to const on a future fix pass.
+    await assertHasFix(r'''
+class A {
+  const A({A? parent});
+  const A.a();
+}
+main() {
+  var a = new A(
+    parent: const A(),
+  );
+}
+''');
+  }
+
+  Future<void> test_singleFile_incomplete_unnecessaryConst() async {
+    await resolveTestCode(r'''
+class A {
+  const A({A? parent});
+  const A.a();
+}
+main() {
+  var b = new A(
+    parent: const A.a(),
+  );
+}
+''');
+    // The inner const is unnecessary and should get removed on a future fix pass.
+    await assertHasFix(r'''
+class A {
+  const A({A? parent});
+  const A.a();
+}
+main() {
+  var b = const A(
+    parent: const A.a(),
+  );
 }
 ''');
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_eight_digit_hex_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_eight_digit_hex_test.dart
index bd4e2e1..fb67e7a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_eight_digit_hex_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_eight_digit_hex_test.dart
@@ -12,10 +12,40 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithEightDigitHexTest);
+    defineReflectiveTests(ReplaceWithEightDigitHexBulkTest);
   });
 }
 
 @reflectiveTest
+class ReplaceWithEightDigitHexBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.use_full_hex_values_for_flutter_colors;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+library dart.ui;
+
+var c = Color(1);
+var c2 = Color(0x000001);
+
+class Color {
+  Color(int value);
+}
+''');
+    await assertHasFix('''
+library dart.ui;
+
+var c = Color(0x00000001);
+var c2 = Color(0x00000001);
+
+class Color {
+  Color(int value);
+}
+''');
+  }
+}
+
+@reflectiveTest
 class ReplaceWithEightDigitHexTest extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.REPLACE_WITH_EIGHT_DIGIT_HEX;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_interpolation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_interpolation_test.dart
index 5dc54a1..64726ee 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_interpolation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_interpolation_test.dart
@@ -12,10 +12,34 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReplaceWithInterpolationTest);
+    defineReflectiveTests(ReplaceWithInterpolationBulkTest);
   });
 }
 
 @reflectiveTest
+class ReplaceWithInterpolationBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.prefer_interpolation_to_compose_strings;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode(r'''
+String f() {
+  var a = 'a';
+  var c = a + 'b';
+  return c + 'and $s';
+}
+''');
+    await assertHasFix(r'''
+String f() {
+  var a = 'a';
+  var c = '${a}b';
+  return '${c}and $s';
+}
+''');
+  }
+}
+
+@reflectiveTest
 class ReplaceWithInterpolationTest extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.REPLACE_WITH_INTERPOLATION;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
index 7422ec8..3753bfb 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
@@ -35,6 +35,7 @@
 import 'add_super_constructor_invocation_test.dart'
     as add_super_constructor_invocation;
 import 'add_switch_case_break_test.dart' as add_switch_case_break;
+import 'add_trailing_comma_test.dart' as add_trailing_comma;
 import 'add_type_annotation_test.dart' as add_type_annotation;
 import 'analysis_options/test_all.dart' as analysis_options;
 import 'bulk_fix_processor_test.dart' as bulk_fix_processor;
@@ -49,10 +50,13 @@
 import 'convert_flutter_child_test.dart' as convert_flutter_child;
 import 'convert_flutter_children_test.dart' as convert_flutter_children;
 import 'convert_for_each_to_for_loop_test.dart' as convert_for_each_to_for_loop;
+import 'convert_into_block_body_test.dart' as convert_into_block_body;
 import 'convert_into_expression_body_test.dart' as convert_into_expression_body;
 import 'convert_into_is_not_test.dart' as convert_into_is_not;
 import 'convert_quotes_test.dart' as convert_quotes;
 import 'convert_to_contains_test.dart' as convert_to_contains;
+import 'convert_to_double_quoted_string_test.dart'
+    as convert_to_double_quoted_string;
 import 'convert_to_for_element_test.dart' as convert_to_for_element;
 import 'convert_to_generic_function_syntax_test.dart'
     as convert_to_generic_function_syntax;
@@ -124,6 +128,8 @@
 import 'remove_const_test.dart' as remove_const;
 import 'remove_constructor_name_test.dart' as remove_constructor_name;
 import 'remove_dead_code_test.dart' as remove_dead_code;
+import 'remove_deprecated_new_in_comment_reference_test.dart'
+    as remove_deprecated_new_in_comment_reference;
 import 'remove_duplicate_case_test.dart' as remove_duplicate_case;
 import 'remove_empty_catch_test.dart' as remove_empty_catch;
 import 'remove_empty_constructor_body_test.dart'
@@ -232,6 +238,7 @@
     add_static.main();
     add_super_constructor_invocation.main();
     add_switch_case_break.main();
+    add_trailing_comma.main();
     add_type_annotation.main();
     analysis_options.main();
     bulk_fix_processor.main();
@@ -244,10 +251,12 @@
     convert_flutter_child.main();
     convert_flutter_children.main();
     convert_for_each_to_for_loop.main();
+    convert_into_block_body.main();
     convert_into_expression_body.main();
     convert_into_is_not.main();
     convert_quotes.main();
     convert_to_contains.main();
+    convert_to_double_quoted_string.main();
     convert_to_for_element.main();
     convert_to_generic_function_syntax.main();
     convert_to_if_element.main();
@@ -314,6 +323,7 @@
     remove_const.main();
     remove_constructor_name.main();
     remove_dead_code.main();
+    remove_deprecated_new_in_comment_reference.main();
     remove_duplicate_case.main();
     remove_empty_catch.main();
     remove_empty_constructor_body.main();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_effective_integer_division_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_effective_integer_division_test.dart
index d8a6c78..b8b788d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_effective_integer_division_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_effective_integer_division_test.dart
@@ -11,10 +11,31 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UseEffectiveIntegerDivisionTest);
+    defineReflectiveTests(UseEffectiveIntegerDivisionMultiTest);
   });
 }
 
 @reflectiveTest
+class UseEffectiveIntegerDivisionMultiTest extends BulkFixProcessorTest {
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+main() {
+  var a = 5;
+  var b = 2;
+  print((a / ((a / b).toInt())).toInt());
+}
+''');
+    await assertHasFix('''
+main() {
+  var a = 5;
+  var b = 2;
+  print(a ~/ (a ~/ b));
+}
+''');
+  }
+}
+
+@reflectiveTest
 class UseEffectiveIntegerDivisionTest extends FixProcessorTest {
   @override
   FixKind get kind => DartFixKind.USE_EFFECTIVE_INTEGER_DIVISION;
diff --git a/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
new file mode 100644
index 0000000..d4bf8fd
--- /dev/null
+++ b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
@@ -0,0 +1,345 @@
+// Copyright (c) 2021, 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:analysis_server/src/utilities/extensions/range_factory.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/source/source_range.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../abstract_single_unit.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RangeFactory_NodeInListTest);
+    defineReflectiveTests(RangeFactory_NodeInListWithCommentsTest);
+  });
+}
+
+abstract class BaseRangeFactoryTest extends AbstractSingleUnitTest {
+  /// Assuming that the test code starts with a function whose block body starts
+  /// with a method invocation, return the list of arguments in that invocation.
+  NodeList<Expression> get _argumentList {
+    var invocation = findNode.methodInvocations.single;
+    return invocation.argumentList.arguments;
+  }
+
+  void _assertRange(int index, SourceRange expectedRange) {
+    var list = _argumentList;
+    expect(range.nodeInListWithComments(testUnit.lineInfo!, list, list[index]),
+        expectedRange);
+  }
+}
+
+/// Copied from `analyzer_plugin/test/utilities/range_factory_test.dart` in
+/// order to ensure backward compatibility.
+@reflectiveTest
+class RangeFactory_NodeInListTest extends BaseRangeFactoryTest {
+  // TODO(brianwilkerson) When the tested method becomes public API then these
+  //  two classes should be merged.
+  Future<void> test_argumentList_first_named() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 1, b: 2);
+}
+void g({int? a, int? b}) {}
+''');
+    _assertRange(0, SourceRange(15, 6));
+  }
+
+  Future<void> test_argumentList_first_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(1, 2);
+}
+void g(int a, int b) {}
+''');
+    _assertRange(0, SourceRange(15, 3));
+  }
+
+  Future<void> test_argumentList_last_named() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 1, b: 2);
+}
+void g({int? a, int? b}) {}
+''');
+    _assertRange(1, SourceRange(19, 6));
+  }
+
+  Future<void> test_argumentList_last_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(1, 2);
+}
+void g(int a, int b) {}
+''');
+    _assertRange(1, SourceRange(16, 3));
+  }
+
+  Future<void> test_argumentList_middle_named() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 1, b: 2, c: 3);
+}
+void g({int? a, int? b, int? c}) {}
+''');
+    _assertRange(1, SourceRange(19, 6));
+  }
+
+  Future<void> test_argumentList_middle_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(1, 2, 3);
+}
+void g(int a, int b, int c) {}
+''');
+    _assertRange(1, SourceRange(16, 3));
+  }
+
+  Future<void> test_argumentList_only_named() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 1);
+}
+void g({int? a}) {}
+''');
+    _assertRange(0, SourceRange(15, 4));
+  }
+
+  Future<void> test_argumentList_only_named_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 1,);
+}
+void g({int? a}) {}
+''');
+    _assertRange(0, SourceRange(15, 5));
+  }
+
+  Future<void> test_argumentList_only_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(1);
+}
+void g(int a) {}
+''');
+    _assertRange(0, SourceRange(15, 1));
+  }
+
+  Future<void> test_argumentList_only_positional_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(1,);
+}
+void g(int a) {}
+''');
+    _assertRange(0, SourceRange(15, 2));
+  }
+}
+
+@reflectiveTest
+class RangeFactory_NodeInListWithCommentsTest extends BaseRangeFactoryTest {
+  Future<void> test_argumentList_first_named_leadingAndTrailingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    // comment
+    a: 1, // comment
+    // comment
+    b: 2,
+  );
+}
+void g({int? a, int? b}) {}
+''');
+    _assertRange(0, SourceRange(20, 36));
+  }
+
+  Future<void> test_argumentList_first_named_leadingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    // comment
+    a: 1,
+    // comment
+    b: 2,
+  );
+}
+void g({int? a, int? b}) {}
+''');
+    _assertRange(0, SourceRange(20, 25));
+  }
+
+  Future<void> test_argumentList_first_named_trailingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1, // comment
+    // comment
+    b: 2,
+  );
+}
+void g({int? a, int? b}) {}
+''');
+    _assertRange(0, SourceRange(20, 21));
+  }
+
+  Future<void> test_argumentList_last_named_leadingAndTrailingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1, // comment
+    // comment
+    b: 2, // comment
+  );
+}
+void g({int? a, int? b}) {}
+''');
+    _assertRange(1, SourceRange(36, 36));
+  }
+
+  Future<void> test_argumentList_last_named_leadingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1, // comment
+    // comment
+    b: 2,
+  );
+}
+void g({int? a, int? b}) {}
+''');
+    _assertRange(1, SourceRange(36, 25));
+  }
+
+  Future<void> test_argumentList_last_named_trailingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1, // comment
+    b: 2, // comment
+  );
+}
+void g({int? a, int? b}) {}
+''');
+    _assertRange(1, SourceRange(36, 21));
+  }
+
+  Future<void>
+      test_argumentList_last_named_trailingComment_commentAfterTrailing() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1, // comment
+    b: 2, // comment
+    // final comment
+  );
+}
+void g({int? a, int? b}) {}
+''');
+    _assertRange(1, SourceRange(36, 21));
+  }
+
+  Future<void>
+      test_argumentList_middle_named_leadingAndTrailingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1, // comment
+    // comment
+    b: 2, // comment
+    // comment
+    c: 3,
+  );
+}
+void g({int? a, int? b, int? c}) {}
+''');
+    _assertRange(1, SourceRange(36, 36));
+  }
+
+  Future<void> test_argumentList_middle_named_leadingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1, // comment
+    // comment
+    b: 2,
+    // comment
+    c: 3,
+  );
+}
+void g({int? a, int? b, int? c}) {}
+''');
+    _assertRange(1, SourceRange(36, 25));
+  }
+
+  Future<void> test_argumentList_middle_named_trailingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1, // comment
+    b: 2, // comment
+    // comment
+    c: 3,
+  );
+}
+void g({int? a, int? b, int? c}) {}
+''');
+    _assertRange(1, SourceRange(36, 21));
+  }
+
+  Future<void>
+      test_argumentList_middle_named_trailingComment_noTrailingOnPrevious() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1,
+    b: 2, // comment
+    c: 3,
+  );
+}
+void g({int? a, int? b, int? c}) {}
+''');
+    _assertRange(1, SourceRange(25, 21));
+  }
+
+  Future<void> test_argumentList_only_named_leadingAndTrailingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    // comment
+    a: 1, // comment
+  );
+}
+void g({int? a}) {}
+''');
+    _assertRange(0, SourceRange(20, 31));
+  }
+
+  Future<void> test_argumentList_only_named_leadingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    // comment
+    a: 1,
+  );
+}
+void g({int? a}) {}
+''');
+    _assertRange(0, SourceRange(20, 20));
+  }
+
+  Future<void> test_argumentList_only_named_trailingComment() async {
+    await resolveTestCode('''
+void f() {
+  g(
+    a: 1, // comment
+  );
+}
+void g({int? a}) {}
+''');
+    _assertRange(0, SourceRange(20, 16));
+  }
+}
diff --git a/pkg/analysis_server/test/src/utilities/extensions/test_all.dart b/pkg/analysis_server/test/src/utilities/extensions/test_all.dart
new file mode 100644
index 0000000..d4620d4
--- /dev/null
+++ b/pkg/analysis_server/test/src/utilities/extensions/test_all.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, 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:test_reflective_loader/test_reflective_loader.dart';
+
+import 'range_factory_test.dart' as range_factory;
+
+void main() {
+  defineReflectiveSuite(() {
+    range_factory.main();
+  });
+}
diff --git a/pkg/analysis_server/test/src/utilities/test_all.dart b/pkg/analysis_server/test/src/utilities/test_all.dart
index a9cd96e..6c36075 100644
--- a/pkg/analysis_server/test/src/utilities/test_all.dart
+++ b/pkg/analysis_server/test/src/utilities/test_all.dart
@@ -4,12 +4,14 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'extensions/test_all.dart' as extensions;
 import 'flutter_test.dart' as flutter_test;
 import 'profiling_test.dart' as profiling_test;
 import 'strings_test.dart' as strings_test;
 
 void main() {
   defineReflectiveSuite(() {
+    extensions.main();
     flutter_test.main();
     profiling_test.main();
     strings_test.main();
diff --git a/pkg/analysis_server/test/stress/completion/completion_runner.dart b/pkg/analysis_server/test/stress/completion/completion_runner.dart
index 16d1e81..136684a 100644
--- a/pkg/analysis_server/test/stress/completion/completion_runner.dart
+++ b/pkg/analysis_server/test/stress/completion/completion_runner.dart
@@ -2,7 +2,6 @@
 // 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:analysis_server/src/services/completion/completion_core.dart';
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/utilities/null_string_sink.dart';
@@ -58,7 +57,9 @@
     var collection = AnalysisContextCollection(
         includedPaths: <String>[analysisRoot],
         resourceProvider: resourceProvider);
-    var contributor = DartCompletionManager();
+    var contributor = DartCompletionManager(
+      budget: CompletionBudget(const Duration(seconds: 30)),
+    );
     var statistics = CompletionPerformance();
     var stamp = 1;
 
@@ -99,12 +100,15 @@
           }
 
           timer.start();
-          var request = CompletionRequestImpl(result, offset, statistics);
-          var suggestions = await request.performance.runRequestOperation(
+          var dartRequest = DartCompletionRequest(
+            resolvedUnit: result,
+            offset: offset,
+          );
+          var suggestions = await statistics.runRequestOperation(
             (performance) async {
               return await contributor.computeSuggestions(
+                dartRequest,
                 performance,
-                request,
               );
             },
           );
diff --git a/pkg/analysis_server/test/verify_sorted_test.dart b/pkg/analysis_server/test/verify_sorted_test.dart
index dc12ccc..9033b16 100644
--- a/pkg/analysis_server/test/verify_sorted_test.dart
+++ b/pkg/analysis_server/test/verify_sorted_test.dart
@@ -85,7 +85,6 @@
     packagePath: 'analyzer',
     excludedPaths: [
       'lib/src/context/packages.dart',
-      'lib/src/dart/error/syntactic_errors.g.dart',
       'lib/src/summary/format.dart',
       'test/generated/test_all.dart',
     ],
diff --git a/pkg/analysis_server/tool/bulk_fix/parse_utils.dart b/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
new file mode 100644
index 0000000..84cf49b
--- /dev/null
+++ b/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2021, 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:io';
+
+import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer_utilities/package_root.dart';
+
+class BulkFixDetails {
+  Future<Map<String, CorrectionDetails>> collectOverrides() async {
+    var overrideDetails = <String, CorrectionDetails>{};
+
+    var pkgRootPath =
+        PhysicalResourceProvider.INSTANCE.pathContext.normalize(packageRoot);
+    var directory = Directory(
+        '$pkgRootPath/analysis_server/lib/src/services/correction/dart');
+    var collection = AnalysisContextCollection(
+      includedPaths: [directory.absolute.path],
+      resourceProvider: PhysicalResourceProvider.INSTANCE,
+    );
+    var context = collection.contexts[0];
+
+    for (var file in directory.listSync()) {
+      var resolvedFile = await context.currentSession
+          .getResolvedUnit(file.absolute.path) as ResolvedUnitResult;
+      for (var classDecl
+          in resolvedFile.unit.declarations.whereType<ClassDeclaration>()) {
+        var classElement = classDecl.declaredElement;
+        if (classElement != null &&
+            classElement.allSupertypes.any(
+                (element) => element.element.name == 'CorrectionProducer')) {
+          var correctionName = classDecl.name.name;
+
+          for (var method in classDecl.members.whereType<MethodDeclaration>()) {
+            if (method.name.name == 'canBeAppliedInBulk') {
+              var hasComment =
+                  method.returnType?.beginToken.precedingComments != null;
+
+              var body = method.body;
+              if (body is BlockFunctionBody) {
+                var last = body.block.statements.last;
+                if (last is ReturnStatement) {
+                  var canBeBulkApplied =
+                      (last.expression as BooleanLiteral).value;
+                  overrideDetails[correctionName] = CorrectionDetails(
+                      canBeBulkApplied: canBeBulkApplied,
+                      hasComment: hasComment);
+                }
+              } else if (body is ExpressionFunctionBody) {
+                var expression = body.expression;
+                var canBeBulkApplied = (expression as BooleanLiteral).value;
+                overrideDetails[correctionName] = CorrectionDetails(
+                    canBeBulkApplied: canBeBulkApplied, hasComment: hasComment);
+              }
+            }
+          }
+        }
+      }
+    }
+    return overrideDetails;
+  }
+}
+
+class CorrectionDetails {
+  bool canBeBulkApplied;
+  bool hasComment;
+
+  CorrectionDetails({required this.canBeBulkApplied, required this.hasComment});
+}
diff --git a/pkg/analysis_server/tool/bulk_fix/supported_diagnostics.dart b/pkg/analysis_server/tool/bulk_fix/supported_diagnostics.dart
new file mode 100644
index 0000000..2603f84
--- /dev/null
+++ b/pkg/analysis_server/tool/bulk_fix/supported_diagnostics.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2021, 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:analysis_server/src/services/correction/fix_internal.dart';
+import 'package:analyzer/error/error.dart';
+
+import 'parse_utils.dart';
+
+/// Print diagnostic bulk-fix info.
+Future<void> main() async {
+  var overrideDetails = await BulkFixDetails().collectOverrides();
+
+  print('diagnostics w/ correction producers:\n');
+
+  var hintEntries = FixProcessor.nonLintProducerMap.entries.where((e) =>
+      e.key.type == ErrorType.HINT || e.key.type == ErrorType.STATIC_WARNING);
+
+  var diagnostics = List.from(hintEntries)
+    ..addAll(FixProcessor.lintProducerMap.entries);
+  for (var diagnostic in diagnostics) {
+    var canBeAppliedInBulk = false;
+    var missingExplanations = <String>[];
+    var hasOverride = false;
+    for (var generator in diagnostic.value) {
+      var producer = generator();
+      if (!producer.canBeAppliedInBulk) {
+        var producerName = producer.runtimeType.toString();
+        if (overrideDetails.containsKey(producerName)) {
+          hasOverride = true;
+          var override = overrideDetails[producerName];
+          var hasComment = override!.hasComment;
+          if (!hasComment) {
+            missingExplanations.add(producerName);
+          }
+        }
+      } else {
+        canBeAppliedInBulk = true;
+      }
+    }
+
+    print('${diagnostic.key} bulk fixable: $canBeAppliedInBulk');
+    if (!canBeAppliedInBulk && !hasOverride) {
+      print('  => override missing');
+    }
+    for (var producer in missingExplanations) {
+      print('  => override explanation missing for: $producer');
+    }
+  }
+}
diff --git a/pkg/analysis_server/tool/code_completion/code_metrics.dart b/pkg/analysis_server/tool/code_completion/code_metrics.dart
index 0ace057..da9d00b 100644
--- a/pkg/analysis_server/tool/code_completion/code_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/code_metrics.dart
@@ -343,7 +343,7 @@
   void visitCommentReference(CommentReference node) {
     _visitChildren(node, {
       'newKeyword': node.newKeyword,
-      'identifier': node.identifier,
+      'expression': node.expression,
     });
     super.visitCommentReference(node);
   }
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index 4522ce8..c7a90fc 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -10,7 +10,6 @@
 import 'package:analysis_server/src/domains/completion/available_suggestions.dart';
 import 'package:analysis_server/src/protocol/protocol_internal.dart';
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
-import 'package:analysis_server/src/services/completion/completion_core.dart';
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/documentation_cache.dart';
@@ -718,7 +717,7 @@
   }
 
   int forEachExpectedCompletion(
-      CompletionRequestImpl request,
+      DartCompletionRequest request,
       MetricsSuggestionListener listener,
       ExpectedCompletion expectedCompletion,
       String? completionLocation,
@@ -1200,21 +1199,19 @@
   Future<List<protocol.CompletionSuggestion>> _computeCompletionSuggestions(
       MetricsSuggestionListener listener,
       OperationPerformanceImpl performance,
-      CompletionRequestImpl request,
-      DartdocDirectiveInfo dartdocDirectiveInfo,
-      DocumentationCache? documentationCache,
+      DartCompletionRequest dartRequest,
       [DeclarationsTracker? declarationsTracker,
       protocol.CompletionAvailableSuggestionsParams?
           availableSuggestionsParams]) async {
     List<protocol.CompletionSuggestion> suggestions;
 
+    var budget = CompletionBudget(Duration(seconds: 30));
     if (declarationsTracker == null) {
       // available suggestions == false
       suggestions = await DartCompletionManager(
-        dartdocDirectiveInfo: dartdocDirectiveInfo,
+        budget: budget,
         listener: listener,
-      ).computeSuggestions(performance, request,
-          documentationCache: documentationCache);
+      ).computeSuggestions(dartRequest, performance);
     } else {
       // available suggestions == true
       var includedElementKinds = <protocol.ElementKind>{};
@@ -1223,15 +1220,14 @@
           <protocol.IncludedSuggestionRelevanceTag>[];
       var includedSuggestionSetList = <protocol.IncludedSuggestionSet>[];
       suggestions = await DartCompletionManager(
-        dartdocDirectiveInfo: dartdocDirectiveInfo,
+        budget: budget,
         includedElementKinds: includedElementKinds,
         includedElementNames: includedElementNames,
         includedSuggestionRelevanceTags: includedSuggestionRelevanceTagList,
         listener: listener,
-      ).computeSuggestions(performance, request,
-          documentationCache: documentationCache);
+      ).computeSuggestions(dartRequest, performance);
 
-      computeIncludedSetList(declarationsTracker, request.result,
+      computeIncludedSetList(declarationsTracker, dartRequest.result,
           includedSuggestionSetList, includedElementNames);
 
       var includedSuggestionSetMap = {
@@ -1373,26 +1369,21 @@
             {required MetricsSuggestionListener listener,
             required CompletionMetrics metrics}) async {
           var stopwatch = Stopwatch()..start();
-          var request = CompletionRequestImpl(
-            resolvedUnitResult,
-            expectedCompletion.offset,
-            CompletionPerformance(),
+          var request = DartCompletionRequest(
+            resolvedUnit: resolvedUnitResult,
+            offset: expectedCompletion.offset,
+            documentationCache: documentationCache,
           );
-          var directiveInfo = DartdocDirectiveInfo();
 
           late OpType opType;
           late List<protocol.CompletionSuggestion> suggestions;
-          await request.performance.runRequestOperation(
+          await CompletionPerformance().runRequestOperation(
             (performance) async {
-              var dartRequest = await DartCompletionRequestImpl.from(
-                  performance, request, directiveInfo);
-              opType = OpType.forCompletion(dartRequest.target, request.offset);
+              opType = OpType.forCompletion(request.target, request.offset);
               suggestions = await _computeCompletionSuggestions(
                 listener,
                 performance,
                 request,
-                dartdocDirectiveInfo,
-                documentationCache,
                 metrics.availableSuggestions ? declarationsTracker : null,
                 metrics.availableSuggestions
                     ? availableSuggestionsParams
@@ -1716,7 +1707,7 @@
 class CompletionResult {
   final Place place;
 
-  final CompletionRequestImpl? request;
+  final DartCompletionRequest? request;
 
   final SuggestionData actualSuggestion;
 
diff --git a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
index a505521..e5ad8cc 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
@@ -478,7 +478,7 @@
       _recordTokenType(context, node);
     }
 
-    recordDataForCommentReference('CommentReference (name)', node.identifier);
+    recordDataForCommentReference('CommentReference (name)', node.expression);
     super.visitCommentReference(node);
   }
 
diff --git a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
index e3978af..30fd62f 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
@@ -479,7 +479,7 @@
 
   @override
   void visitCommentReference(CommentReference node) {
-    _recordDataForNode('CommentReference_identifier', node.identifier);
+    _recordDataForNode('CommentReference_expression', node.expression);
     super.visitCommentReference(node);
   }
 
diff --git a/pkg/analysis_server/tool/lsp_spec/lsp_specification.md b/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
index d7c94f3..76cf862 100644
--- a/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
+++ b/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
@@ -500,7 +500,7 @@
 
 	/**
 	 * The range that should be selected and revealed when this link is being
-	 * followed, e.g the name of a function. Must be contained by the the
+	 * followed, e.g the name of a function. Must be contained by the
 	 * `targetRange`. See also `DocumentSymbol#range`
 	 */
 	targetSelectionRange: Range;
diff --git a/pkg/analysis_server/tool/spec/from_html.dart b/pkg/analysis_server/tool/spec/from_html.dart
index bf64d22..d3a1ce7 100644
--- a/pkg/analysis_server/tool/spec/from_html.dart
+++ b/pkg/analysis_server/tool/spec/from_html.dart
@@ -529,7 +529,7 @@
       throw Exception('$context: name not specified');
     }
 
-    context = '$context.$name}';
+    context = '$context.$name';
     checkAttributes(html, ['name'], context,
         optionalAttributes: [
           'optional',
diff --git a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
index 03b9cbe..9f7e268 100644
--- a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
+++ b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
@@ -402,6 +402,26 @@
   public void completion_getSuggestionDetails(String file, int id, String label, int offset, GetSuggestionDetailsConsumer consumer);
 
   /**
+   * {@code completion.getSuggestionDetails2}
+   *
+   * Clients must make this request when the user has selected a completion suggestion with the
+   * libraryUriToImportIndex field set. The server will respond with the text to insert, as well as
+   * any SourceChange that needs to be applied in case the completion requires an additional import
+   * to be added. The text to insert might be different from the original suggestion to include an
+   * import prefix if the library will be imported with a prefix to avoid shadowing conflicts in the
+   * file.
+   *
+   * @param file The path of the file into which this completion is being inserted.
+   * @param offset The offset in the file where the completion will be inserted.
+   * @param completion The completion from the selected CompletionSuggestion. It could be a name of a
+   *         class, or a name of a constructor in form "typeName.constructorName()", or an
+   *         enumeration constant in form "enumName.constantName", etc.
+   * @param libraryUri The URI of the library to import, so that the element referenced in the
+   *         completion becomes accessible.
+   */
+  public void completion_getSuggestionDetails2(String file, int offset, String completion, String libraryUri, GetSuggestionDetails2Consumer consumer);
+
+  /**
    * {@code completion.getSuggestions}
    *
    * Request that completion suggestions for the given offset in the given file be returned.
@@ -412,6 +432,19 @@
   public void completion_getSuggestions(String file, int offset, GetSuggestionsConsumer consumer);
 
   /**
+   * {@code completion.getSuggestions2}
+   *
+   * Request that completion suggestions for the given offset in the given file be returned. The
+   * suggestions will be filtered using fuzzy matching with the already existing prefix.
+   *
+   * @param file The file containing the point at which suggestions are to be made.
+   * @param offset The offset within the file at which suggestions are to be made.
+   * @param maxResults The maximum number of suggestions to return. If the number of suggestions
+   *         after filtering is greater than the maxResults, then isIncomplete is set to true.
+   */
+  public void completion_getSuggestions2(String file, int offset, int maxResults, GetSuggestions2Consumer consumer);
+
+  /**
    * {@code completion.registerLibraryPaths}
    *
    * The client can make this request to express interest in certain libraries to receive completion
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
index c9ffeeb..bf8d912 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
@@ -176,9 +176,18 @@
   private final String parameterType;
 
   /**
+   * The index in the list of libraries that could be imported to make this suggestion accessible in
+   * the file where completion was requested. The server provides this list of libraries together
+   * with suggestions, so that information about the library can be shared for multiple suggestions.
+   * This field is omitted if the library is already imported, so that the suggestion can be inserted
+   * as is, or if getSuggestions was used rather than getSuggestions2.
+   */
+  private final Integer libraryUriToImportIndex;
+
+  /**
    * Constructor for {@link CompletionSuggestion}.
    */
-  public CompletionSuggestion(String kind, int relevance, String completion, String displayText, Integer replacementOffset, Integer replacementLength, int selectionOffset, int selectionLength, boolean isDeprecated, boolean isPotential, String docSummary, String docComplete, String declaringType, String defaultArgumentListString, int[] defaultArgumentListTextRanges, Element element, String returnType, List<String> parameterNames, List<String> parameterTypes, Integer requiredParameterCount, Boolean hasNamedParameters, String parameterName, String parameterType) {
+  public CompletionSuggestion(String kind, int relevance, String completion, String displayText, Integer replacementOffset, Integer replacementLength, int selectionOffset, int selectionLength, boolean isDeprecated, boolean isPotential, String docSummary, String docComplete, String declaringType, String defaultArgumentListString, int[] defaultArgumentListTextRanges, Element element, String returnType, List<String> parameterNames, List<String> parameterTypes, Integer requiredParameterCount, Boolean hasNamedParameters, String parameterName, String parameterType, Integer libraryUriToImportIndex) {
     this.kind = kind;
     this.relevance = relevance;
     this.completion = completion;
@@ -202,6 +211,7 @@
     this.hasNamedParameters = hasNamedParameters;
     this.parameterName = parameterName;
     this.parameterType = parameterType;
+    this.libraryUriToImportIndex = libraryUriToImportIndex;
   }
 
   @Override
@@ -231,7 +241,8 @@
         ObjectUtilities.equals(other.requiredParameterCount, requiredParameterCount) &&
         ObjectUtilities.equals(other.hasNamedParameters, hasNamedParameters) &&
         ObjectUtilities.equals(other.parameterName, parameterName) &&
-        ObjectUtilities.equals(other.parameterType, parameterType);
+        ObjectUtilities.equals(other.parameterType, parameterType) &&
+        ObjectUtilities.equals(other.libraryUriToImportIndex, libraryUriToImportIndex);
     }
     return false;
   }
@@ -260,7 +271,8 @@
     Boolean hasNamedParameters = jsonObject.get("hasNamedParameters") == null ? null : jsonObject.get("hasNamedParameters").getAsBoolean();
     String parameterName = jsonObject.get("parameterName") == null ? null : jsonObject.get("parameterName").getAsString();
     String parameterType = jsonObject.get("parameterType") == null ? null : jsonObject.get("parameterType").getAsString();
-    return new CompletionSuggestion(kind, relevance, completion, displayText, replacementOffset, replacementLength, selectionOffset, selectionLength, isDeprecated, isPotential, docSummary, docComplete, declaringType, defaultArgumentListString, defaultArgumentListTextRanges, element, returnType, parameterNames, parameterTypes, requiredParameterCount, hasNamedParameters, parameterName, parameterType);
+    Integer libraryUriToImportIndex = jsonObject.get("libraryUriToImportIndex") == null ? null : jsonObject.get("libraryUriToImportIndex").getAsInt();
+    return new CompletionSuggestion(kind, relevance, completion, displayText, replacementOffset, replacementLength, selectionOffset, selectionLength, isDeprecated, isPotential, docSummary, docComplete, declaringType, defaultArgumentListString, defaultArgumentListTextRanges, element, returnType, parameterNames, parameterTypes, requiredParameterCount, hasNamedParameters, parameterName, parameterType, libraryUriToImportIndex);
   }
 
   public static List<CompletionSuggestion> fromJsonArray(JsonArray jsonArray) {
@@ -372,6 +384,17 @@
   }
 
   /**
+   * The index in the list of libraries that could be imported to make this suggestion accessible in
+   * the file where completion was requested. The server provides this list of libraries together
+   * with suggestions, so that information about the library can be shared for multiple suggestions.
+   * This field is omitted if the library is already imported, so that the suggestion can be inserted
+   * as is, or if getSuggestions was used rather than getSuggestions2.
+   */
+  public Integer getLibraryUriToImportIndex() {
+    return libraryUriToImportIndex;
+  }
+
+  /**
    * The name of the optional parameter being suggested. This field is omitted if the suggestion is
    * not the addition of an optional argument within an argument list.
    */
@@ -486,6 +509,7 @@
     builder.append(hasNamedParameters);
     builder.append(parameterName);
     builder.append(parameterType);
+    builder.append(libraryUriToImportIndex);
     return builder.toHashCode();
   }
 
@@ -558,6 +582,9 @@
     if (parameterType != null) {
       jsonObject.addProperty("parameterType", parameterType);
     }
+    if (libraryUriToImportIndex != null) {
+      jsonObject.addProperty("libraryUriToImportIndex", libraryUriToImportIndex);
+    }
     return jsonObject;
   }
 
@@ -610,7 +637,9 @@
     builder.append("parameterName=");
     builder.append(parameterName + ", ");
     builder.append("parameterType=");
-    builder.append(parameterType);
+    builder.append(parameterType + ", ");
+    builder.append("libraryUriToImportIndex=");
+    builder.append(libraryUriToImportIndex);
     builder.append("]");
     return builder.toString();
   }
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 7bb2fe0..aa08d74 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -1455,6 +1455,100 @@
       </field>
     </result>
   </request>
+  <request method="getSuggestions2" experimental="true">
+    <p>
+      Request that completion suggestions for the given offset in the given
+      file be returned. The suggestions will be filtered using fuzzy matching
+      with the already existing prefix.
+    </p>
+    <params>
+      <field name="file">
+        <ref>FilePath</ref>
+        <p>
+          The file containing the point at which suggestions are to be made.
+        </p>
+      </field>
+      <field name="offset">
+        <ref>int</ref>
+        <p>
+          The offset within the file at which suggestions are to be made.
+        </p>
+      </field>
+      <field name="maxResults">
+        <ref>int</ref>
+        <p>
+          The maximum number of suggestions to return. If the number of
+          suggestions after filtering is greater than the <tt>maxResults</tt>,
+          then <tt>isIncomplete</tt> is set to <tt>true</tt>.
+        </p>
+      </field>
+    </params>
+    <result>
+      <field name="replacementOffset">
+        <ref>int</ref>
+        <p>
+          The offset of the start of the text to be  replaced. This will be
+          different from the offset used  to request the completion suggestions
+          if there was a portion of an identifier before the original offset.
+          In particular, the replacementOffset will be the offset of the
+          beginning of said identifier.
+        </p>
+      </field>
+      <field name="replacementLength">
+        <ref>int</ref>
+        <p>
+          The length of the text to be replaced if the remainder of the
+          identifier containing the cursor is to be replaced when the
+          suggestion is applied (that is, the number of characters in the
+          existing identifier).
+        </p>
+      </field>
+      <field name="suggestions">
+        <list>
+          <ref>CompletionSuggestion</ref>
+        </list>
+        <p>
+          The completion suggestions being reported. This list is filtered
+          by the already existing prefix, and sorted first by relevance,
+          and (if the same) by the suggestion text. The list will have at
+          most <tt>maxResults</tt> items. If the user types a new keystroke,
+          the client is expected to either do local filtering (when the
+          returned list was complete), or ask the server again (if
+          <tt>isIncomplete</tt> was <tt>true</tt>).
+        </p>
+        <p>
+          This list contains suggestions from both imported, and not yet
+          imported libraries. Items from not yet imported libraries will
+          have <tt>libraryUriToImportIndex</tt> set, which is an index into
+          the <tt>libraryUrisToImport</tt> in this response.
+        </p>
+      </field>
+      <field name="libraryUrisToImport">
+        <list>
+          <ref>String</ref>
+        </list>
+        <p>
+          The list of libraries with declarations that are not yet available
+          in the file where completion was requested, most often because
+          the library is not yet imported. The declarations still might be
+          included into the <tt>suggestions</tt>, and the client should use
+          <tt>getSuggestionDetails2</tt> on selection to make the library
+          available in the file.
+        </p>
+        <p>
+          Each item is the URI of a library, such as <tt>package:foo/bar.dart</tt>
+          or <tt>file:///home/me/workspace/foo/test/bar_test.dart</tt>.
+        </p>
+      </field>
+      <field name="isIncomplete">
+        <ref>bool</ref>
+        <p>
+          True if the number of suggestions after filtering was greater than
+          the requested <tt>maxResults</tt>.
+        </p>
+      </field>
+    </result>
+  </request>
   <request method="setSubscriptions">
     <p>
       Subscribe for completion services. All previous subscriptions are
@@ -1551,6 +1645,66 @@
       </field>
     </result>
   </request>
+  <request method="getSuggestionDetails2" experimental="true">
+    <p>
+      Clients must make this request when the user has selected a completion
+      suggestion with the <tt>libraryUriToImportIndex</tt> field set.
+      The server will respond with the text to insert, as well as any
+      <tt>SourceChange</tt> that needs to be applied in case the completion
+      requires an additional import to be  added. The text to insert might be
+      different from the original suggestion to include an import prefix if the
+      library will be imported with a prefix to avoid shadowing
+      conflicts in the file.
+    </p>
+    <params>
+      <field name="file">
+        <ref>FilePath</ref>
+        <p>
+          The path of the file into which this completion is being inserted.
+        </p>
+      </field>
+      <field name="offset">
+        <ref>int</ref>
+        <p>
+          The offset in the file where the completion will be inserted.
+        </p>
+      </field>
+      <field name="completion">
+        <ref>String</ref>
+        <p>
+          The <tt>completion</tt> from the selected
+          <tt>CompletionSuggestion</tt>.  It could be a name of a class, or a
+          name of a constructor in form "typeName.constructorName()", or an
+          enumeration constant in form "enumName.constantName", etc.
+        </p>
+      </field>
+      <field name="libraryUri">
+        <ref>String</ref>
+        <p>
+          The URI of the library to import, so that the element referenced
+          in the <tt>completion</tt> becomes accessible.
+        </p>
+      </field>
+    </params>
+    <result>
+      <field name="completion">
+        <ref>String</ref>
+        <p>
+          The full text to insert, which possibly includes now an import prefix.
+          The client should insert this text, not the <tt>completion</tt> from
+          the selected <tt>CompletionSuggestion</tt>.
+        </p>
+      </field>
+      <field name="change">
+        <ref>SourceChange</ref>
+        <p>
+          A change for the client to apply to make the accepted completion
+          suggestion available. In most cases the change is to add a new
+          import directive to the file.
+        </p>
+      </field>
+    </result>
+  </request>
   <notification event="results">
     <p>
       Reports the completion suggestions that should be presented
diff --git a/pkg/analysis_server/tool/spec/to_html.dart b/pkg/analysis_server/tool/spec/to_html.dart
index 0bcc45e..6138199 100644
--- a/pkg/analysis_server/tool/spec/to_html.dart
+++ b/pkg/analysis_server/tool/spec/to_html.dart
@@ -754,6 +754,7 @@
     writeln('{');
     indent(() {
       for (var field in typeObject.fields) {
+        if (field.experimental) continue;
         write('"');
         if (fieldsToBold.contains(field.name)) {
           b(() {
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
index 4289f41..b2d7548 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
@@ -612,6 +612,15 @@
   /// if the parameterName field is omitted.
   String? parameterType;
 
+  /// The index in the list of libraries that could be imported to make this
+  /// suggestion accessible in the file where completion was requested. The
+  /// server provides this list of libraries together with suggestions, so that
+  /// information about the library can be shared for multiple suggestions.
+  /// This field is omitted if the library is already imported, so that the
+  /// suggestion can be inserted as is, or if getSuggestions was used rather
+  /// than getSuggestions2.
+  int? libraryUriToImportIndex;
+
   CompletionSuggestion(
       this.kind,
       this.relevance,
@@ -635,7 +644,8 @@
       this.requiredParameterCount,
       this.hasNamedParameters,
       this.parameterName,
-      this.parameterType});
+      this.parameterType,
+      this.libraryUriToImportIndex});
 
   factory CompletionSuggestion.fromJson(
       JsonDecoder jsonDecoder, String jsonPath, Object? json) {
@@ -774,6 +784,12 @@
         parameterType = jsonDecoder.decodeString(
             jsonPath + '.parameterType', json['parameterType']);
       }
+      int? libraryUriToImportIndex;
+      if (json.containsKey('libraryUriToImportIndex')) {
+        libraryUriToImportIndex = jsonDecoder.decodeInt(
+            jsonPath + '.libraryUriToImportIndex',
+            json['libraryUriToImportIndex']);
+      }
       return CompletionSuggestion(kind, relevance, completion, selectionOffset,
           selectionLength, isDeprecated, isPotential,
           displayText: displayText,
@@ -791,7 +807,8 @@
           requiredParameterCount: requiredParameterCount,
           hasNamedParameters: hasNamedParameters,
           parameterName: parameterName,
-          parameterType: parameterType);
+          parameterType: parameterType,
+          libraryUriToImportIndex: libraryUriToImportIndex);
     } else {
       throw jsonDecoder.mismatch(jsonPath, 'CompletionSuggestion', json);
     }
@@ -871,6 +888,10 @@
     if (parameterType != null) {
       result['parameterType'] = parameterType;
     }
+    var libraryUriToImportIndex = this.libraryUriToImportIndex;
+    if (libraryUriToImportIndex != null) {
+      result['libraryUriToImportIndex'] = libraryUriToImportIndex;
+    }
     return result;
   }
 
@@ -905,7 +926,8 @@
           requiredParameterCount == other.requiredParameterCount &&
           hasNamedParameters == other.hasNamedParameters &&
           parameterName == other.parameterName &&
-          parameterType == other.parameterType;
+          parameterType == other.parameterType &&
+          libraryUriToImportIndex == other.libraryUriToImportIndex;
     }
     return false;
   }
@@ -935,6 +957,7 @@
         hasNamedParameters,
         parameterName,
         parameterType,
+        libraryUriToImportIndex,
       ]);
 }
 
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
index 84b3a5c..2689506 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
@@ -137,10 +137,22 @@
     'replacementOffset';
 const String COMPLETION_NOTIFICATION_RESULTS_RESULTS = 'results';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS = 'completion.getSuggestions';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2 = 'completion.getSuggestions2';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2_FILE = 'file';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2_MAX_RESULTS = 'maxResults';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2_OFFSET = 'offset';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS_FILE = 'file';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS_OFFSET = 'offset';
 const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS =
     'completion.getSuggestionDetails';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2 =
+    'completion.getSuggestionDetails2';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_COMPLETION =
+    'completion';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_FILE = 'file';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_LIBRARY_URI =
+    'libraryUri';
+const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_OFFSET = 'offset';
 const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS_FILE = 'file';
 const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS_ID = 'id';
 const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS_LABEL = 'label';
@@ -152,7 +164,19 @@
     'completion.setSubscriptions';
 const String COMPLETION_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =
     'subscriptions';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_IS_INCOMPLETE =
+    'isIncomplete';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_LIBRARY_URIS_TO_IMPORT =
+    'libraryUrisToImport';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_REPLACEMENT_LENGTH =
+    'replacementLength';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_REPLACEMENT_OFFSET =
+    'replacementOffset';
+const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_SUGGESTIONS = 'suggestions';
 const String COMPLETION_RESPONSE_GET_SUGGESTIONS_ID = 'id';
+const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS2_CHANGE = 'change';
+const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS2_COMPLETION =
+    'completion';
 const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS_CHANGE = 'change';
 const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS_COMPLETION =
     'completion';
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
index 616ff13..2dcbd32 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
@@ -4292,6 +4292,202 @@
       );
 }
 
+/// completion.getSuggestionDetails2 params
+///
+/// {
+///   "file": FilePath
+///   "offset": int
+///   "completion": String
+///   "libraryUri": String
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionGetSuggestionDetails2Params implements RequestParams {
+  /// The path of the file into which this completion is being inserted.
+  String file;
+
+  /// The offset in the file where the completion will be inserted.
+  int offset;
+
+  /// The completion from the selected CompletionSuggestion. It could be a name
+  /// of a class, or a name of a constructor in form
+  /// "typeName.constructorName()", or an enumeration constant in form
+  /// "enumName.constantName", etc.
+  String completion;
+
+  /// The URI of the library to import, so that the element referenced in the
+  /// completion becomes accessible.
+  String libraryUri;
+
+  CompletionGetSuggestionDetails2Params(
+      this.file, this.offset, this.completion, this.libraryUri);
+
+  factory CompletionGetSuggestionDetails2Params.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      String file;
+      if (json.containsKey('file')) {
+        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'file');
+      }
+      int offset;
+      if (json.containsKey('offset')) {
+        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'offset');
+      }
+      String completion;
+      if (json.containsKey('completion')) {
+        completion = jsonDecoder.decodeString(
+            jsonPath + '.completion', json['completion']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'completion');
+      }
+      String libraryUri;
+      if (json.containsKey('libraryUri')) {
+        libraryUri = jsonDecoder.decodeString(
+            jsonPath + '.libraryUri', json['libraryUri']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'libraryUri');
+      }
+      return CompletionGetSuggestionDetails2Params(
+          file, offset, completion, libraryUri);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, 'completion.getSuggestionDetails2 params', json);
+    }
+  }
+
+  factory CompletionGetSuggestionDetails2Params.fromRequest(Request request) {
+    return CompletionGetSuggestionDetails2Params.fromJson(
+        RequestDecoder(request), 'params', request.params);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['file'] = file;
+    result['offset'] = offset;
+    result['completion'] = completion;
+    result['libraryUri'] = libraryUri;
+    return result;
+  }
+
+  @override
+  Request toRequest(String id) {
+    return Request(id, 'completion.getSuggestionDetails2', toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is CompletionGetSuggestionDetails2Params) {
+      return file == other.file &&
+          offset == other.offset &&
+          completion == other.completion &&
+          libraryUri == other.libraryUri;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        file,
+        offset,
+        completion,
+        libraryUri,
+      );
+}
+
+/// completion.getSuggestionDetails2 result
+///
+/// {
+///   "completion": String
+///   "change": SourceChange
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionGetSuggestionDetails2Result implements ResponseResult {
+  /// The full text to insert, which possibly includes now an import prefix.
+  /// The client should insert this text, not the completion from the selected
+  /// CompletionSuggestion.
+  String completion;
+
+  /// A change for the client to apply to make the accepted completion
+  /// suggestion available. In most cases the change is to add a new import
+  /// directive to the file.
+  SourceChange change;
+
+  CompletionGetSuggestionDetails2Result(this.completion, this.change);
+
+  factory CompletionGetSuggestionDetails2Result.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      String completion;
+      if (json.containsKey('completion')) {
+        completion = jsonDecoder.decodeString(
+            jsonPath + '.completion', json['completion']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'completion');
+      }
+      SourceChange change;
+      if (json.containsKey('change')) {
+        change = SourceChange.fromJson(
+            jsonDecoder, jsonPath + '.change', json['change']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'change');
+      }
+      return CompletionGetSuggestionDetails2Result(completion, change);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, 'completion.getSuggestionDetails2 result', json);
+    }
+  }
+
+  factory CompletionGetSuggestionDetails2Result.fromResponse(
+      Response response) {
+    return CompletionGetSuggestionDetails2Result.fromJson(
+        ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.id)),
+        'result',
+        response.result);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['completion'] = completion;
+    result['change'] = change.toJson();
+    return result;
+  }
+
+  @override
+  Response toResponse(String id) {
+    return Response(id, result: toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is CompletionGetSuggestionDetails2Result) {
+      return completion == other.completion && change == other.change;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        completion,
+        change,
+      );
+}
+
 /// completion.getSuggestionDetails params
 ///
 /// {
@@ -4481,6 +4677,261 @@
       );
 }
 
+/// completion.getSuggestions2 params
+///
+/// {
+///   "file": FilePath
+///   "offset": int
+///   "maxResults": int
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionGetSuggestions2Params implements RequestParams {
+  /// The file containing the point at which suggestions are to be made.
+  String file;
+
+  /// The offset within the file at which suggestions are to be made.
+  int offset;
+
+  /// The maximum number of suggestions to return. If the number of suggestions
+  /// after filtering is greater than the maxResults, then isIncomplete is set
+  /// to true.
+  int maxResults;
+
+  CompletionGetSuggestions2Params(this.file, this.offset, this.maxResults);
+
+  factory CompletionGetSuggestions2Params.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      String file;
+      if (json.containsKey('file')) {
+        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'file');
+      }
+      int offset;
+      if (json.containsKey('offset')) {
+        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'offset');
+      }
+      int maxResults;
+      if (json.containsKey('maxResults')) {
+        maxResults =
+            jsonDecoder.decodeInt(jsonPath + '.maxResults', json['maxResults']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'maxResults');
+      }
+      return CompletionGetSuggestions2Params(file, offset, maxResults);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, 'completion.getSuggestions2 params', json);
+    }
+  }
+
+  factory CompletionGetSuggestions2Params.fromRequest(Request request) {
+    return CompletionGetSuggestions2Params.fromJson(
+        RequestDecoder(request), 'params', request.params);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['file'] = file;
+    result['offset'] = offset;
+    result['maxResults'] = maxResults;
+    return result;
+  }
+
+  @override
+  Request toRequest(String id) {
+    return Request(id, 'completion.getSuggestions2', toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is CompletionGetSuggestions2Params) {
+      return file == other.file &&
+          offset == other.offset &&
+          maxResults == other.maxResults;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        file,
+        offset,
+        maxResults,
+      );
+}
+
+/// completion.getSuggestions2 result
+///
+/// {
+///   "replacementOffset": int
+///   "replacementLength": int
+///   "suggestions": List<CompletionSuggestion>
+///   "libraryUrisToImport": List<String>
+///   "isIncomplete": bool
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionGetSuggestions2Result implements ResponseResult {
+  /// The offset of the start of the text to be replaced. This will be
+  /// different from the offset used to request the completion suggestions if
+  /// there was a portion of an identifier before the original offset. In
+  /// particular, the replacementOffset will be the offset of the beginning of
+  /// said identifier.
+  int replacementOffset;
+
+  /// The length of the text to be replaced if the remainder of the identifier
+  /// containing the cursor is to be replaced when the suggestion is applied
+  /// (that is, the number of characters in the existing identifier).
+  int replacementLength;
+
+  /// The completion suggestions being reported. This list is filtered by the
+  /// already existing prefix, and sorted first by relevance, and (if the same)
+  /// by the suggestion text. The list will have at most maxResults items. If
+  /// the user types a new keystroke, the client is expected to either do local
+  /// filtering (when the returned list was complete), or ask the server again
+  /// (if isIncomplete was true).
+  ///
+  /// This list contains suggestions from both imported, and not yet imported
+  /// libraries. Items from not yet imported libraries will have
+  /// libraryUriToImportIndex set, which is an index into the
+  /// libraryUrisToImport in this response.
+  List<CompletionSuggestion> suggestions;
+
+  /// The list of libraries with declarations that are not yet available in the
+  /// file where completion was requested, most often because the library is
+  /// not yet imported. The declarations still might be included into the
+  /// suggestions, and the client should use getSuggestionDetails2 on selection
+  /// to make the library available in the file.
+  ///
+  /// Each item is the URI of a library, such as package:foo/bar.dart or
+  /// file:///home/me/workspace/foo/test/bar_test.dart.
+  List<String> libraryUrisToImport;
+
+  /// True if the number of suggestions after filtering was greater than the
+  /// requested maxResults.
+  bool isIncomplete;
+
+  CompletionGetSuggestions2Result(
+      this.replacementOffset,
+      this.replacementLength,
+      this.suggestions,
+      this.libraryUrisToImport,
+      this.isIncomplete);
+
+  factory CompletionGetSuggestions2Result.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      int replacementOffset;
+      if (json.containsKey('replacementOffset')) {
+        replacementOffset = jsonDecoder.decodeInt(
+            jsonPath + '.replacementOffset', json['replacementOffset']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'replacementOffset');
+      }
+      int replacementLength;
+      if (json.containsKey('replacementLength')) {
+        replacementLength = jsonDecoder.decodeInt(
+            jsonPath + '.replacementLength', json['replacementLength']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'replacementLength');
+      }
+      List<CompletionSuggestion> suggestions;
+      if (json.containsKey('suggestions')) {
+        suggestions = jsonDecoder.decodeList(
+            jsonPath + '.suggestions',
+            json['suggestions'],
+            (String jsonPath, Object? json) =>
+                CompletionSuggestion.fromJson(jsonDecoder, jsonPath, json));
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'suggestions');
+      }
+      List<String> libraryUrisToImport;
+      if (json.containsKey('libraryUrisToImport')) {
+        libraryUrisToImport = jsonDecoder.decodeList(
+            jsonPath + '.libraryUrisToImport',
+            json['libraryUrisToImport'],
+            jsonDecoder.decodeString);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'libraryUrisToImport');
+      }
+      bool isIncomplete;
+      if (json.containsKey('isIncomplete')) {
+        isIncomplete = jsonDecoder.decodeBool(
+            jsonPath + '.isIncomplete', json['isIncomplete']);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'isIncomplete');
+      }
+      return CompletionGetSuggestions2Result(replacementOffset,
+          replacementLength, suggestions, libraryUrisToImport, isIncomplete);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, 'completion.getSuggestions2 result', json);
+    }
+  }
+
+  factory CompletionGetSuggestions2Result.fromResponse(Response response) {
+    return CompletionGetSuggestions2Result.fromJson(
+        ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.id)),
+        'result',
+        response.result);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['replacementOffset'] = replacementOffset;
+    result['replacementLength'] = replacementLength;
+    result['suggestions'] = suggestions
+        .map((CompletionSuggestion value) => value.toJson())
+        .toList();
+    result['libraryUrisToImport'] = libraryUrisToImport;
+    result['isIncomplete'] = isIncomplete;
+    return result;
+  }
+
+  @override
+  Response toResponse(String id) {
+    return Response(id, result: toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is CompletionGetSuggestions2Result) {
+      return replacementOffset == other.replacementOffset &&
+          replacementLength == other.replacementLength &&
+          listEqual(suggestions, other.suggestions,
+              (CompletionSuggestion a, CompletionSuggestion b) => a == b) &&
+          listEqual(libraryUrisToImport, other.libraryUrisToImport,
+              (String a, String b) => a == b) &&
+          isIncomplete == other.isIncomplete;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        replacementOffset,
+        replacementLength,
+        suggestions,
+        libraryUrisToImport,
+        isIncomplete,
+      );
+}
+
 /// completion.getSuggestions params
 ///
 /// {
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 7007543..d672ae5 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,21 @@
+## 2.8.0-dev
+* Deprecations and renames for `getXyz` methods in `AnalysisDriver`.
+* Removed uppercase named constants from `double` in mock SDK.
+* Deprecated `path` and `uri` from `AnalysisResult`.
+
+## 2.7.0
+* Updated `ConstructorElement.displayName` to either `Class` or `Class.constructor`.
+* Deprecated `InterfaceType.getSmartLeastUpperBound`, use `TypeSystem.leastUpperBound` instead.
+* Deprecated `MockSdk`, use `createMockSdk` and `FolderBasedDartSdk` instead.
+
+## 2.6.0
+* Deprecated `AnalysisResult.state`, check for specific valid or invalid subtypes.
+* Deprecated `ResultState`.
+* Deprecated `LibraryElement.hasExtUri`, FFI should be used instead.
+
+## 2.5.0
+* Updated `MockSdk` to include more declarations.
+
 ## 2.4.0
 * Deprecated `ResourceProvider.getModificationTimes()`.
 * Deprecated `MemoryResourceProvider.newDummyLink()`.
diff --git a/pkg/analyzer/lib/dart/analysis/context_builder.dart b/pkg/analyzer/lib/dart/analysis/context_builder.dart
index d3db2f3..35da6ba 100644
--- a/pkg/analyzer/lib/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/dart/analysis/context_builder.dart
@@ -21,7 +21,7 @@
   /// Return an analysis context corresponding to the given [contextRoot].
   ///
   /// If a set of [declaredVariables] is provided, the values will be used to
-  /// map the the variable names found in `fromEnvironment` invocations to the
+  /// map the variable names found in `fromEnvironment` invocations to the
   /// constant value that will be returned. If none is given, then no variables
   /// will be defined.
   ///
diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart
index a2ca408..9264322 100644
--- a/pkg/analyzer/lib/dart/analysis/features.dart
+++ b/pkg/analyzer/lib/dart/analysis/features.dart
@@ -41,6 +41,10 @@
   /// Feature information for the triple-shift operator.
   static final triple_shift = ExperimentalFeatures.triple_shift;
 
+  /// Feature information for named arguments anywhere.
+  static final named_arguments_anywhere =
+      ExperimentalFeatures.named_arguments_anywhere;
+
   /// Feature information for non-function type aliases.
   static final nonfunction_type_aliases =
       ExperimentalFeatures.nonfunction_type_aliases;
diff --git a/pkg/analyzer/lib/dart/analysis/results.dart b/pkg/analyzer/lib/dart/analysis/results.dart
index 13500ba..a6f1df5 100644
--- a/pkg/analyzer/lib/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/dart/analysis/results.dart
@@ -16,18 +16,18 @@
 /// Clients may not extend, implement or mix-in this class.
 abstract class AnalysisResult {
   /// The absolute and normalized path of the file that was analyzed.
-  /// If [state] is not [ResultState.VALID], throws [StateError].
+  @Deprecated('Use FileResult.path instead')
   String get path;
 
   /// Return the session used to compute this result.
-  /// If [state] is not [ResultState.VALID], throws [StateError].
   AnalysisSession get session;
 
   /// The state of the results.
+  @Deprecated('Check for specific Result subtypes instead')
   ResultState get state;
 
   /// The absolute URI of the file that was analyzed.
-  /// If [state] is not [ResultState.VALID], throws [StateError].
+  @Deprecated('Use FileResult.uri instead')
   Uri get uri;
 }
 
@@ -36,7 +36,6 @@
 /// Clients may not extend, implement or mix-in this class.
 abstract class AnalysisResultWithErrors implements FileResult {
   /// The analysis errors that were computed during analysis.
-  /// If [state] is not [ResultState.VALID], throws [StateError].
   List<AnalysisError> get errors;
 }
 
@@ -82,12 +81,18 @@
 /// Clients may not extend, implement or mix-in this class.
 abstract class FileResult implements SomeFileResult, AnalysisResult {
   /// Whether the file is a part.
-  /// If [state] is not [ResultState.VALID], throws [StateError].
   bool get isPart;
 
   /// Information about lines in the content.
-  /// If [state] is not [ResultState.VALID], throws [StateError].
   LineInfo get lineInfo;
+
+  /// The absolute and normalized path of the file that was analyzed.
+  @override
+  String get path;
+
+  /// The absolute URI of the file that was analyzed.
+  @override
+  Uri get uri;
 }
 
 /// The type of [InvalidResult] returned when the given file path is invalid,
@@ -250,6 +255,7 @@
 }
 
 /// An indication of whether an analysis result is valid, and if not why.
+@Deprecated('Check for specific Result subtypes instead')
 enum ResultState {
   /// An indication that analysis could not be performed because the path
   /// represents a file of a type that cannot be analyzed.
@@ -258,6 +264,7 @@
   /// An indication that analysis could not be performed because the path does
   /// not represent a file. It might represent something else, such as a
   /// directory, or it might not represent anything.
+  @Deprecated("Check 'get exists' flag instead")
   NOT_A_FILE,
 
   /// An indication that analysis could not be performed because the path does
@@ -343,8 +350,7 @@
 /// The result of building the element model for a single file.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class UnitElementResult
-    implements SomeUnitElementResult, AnalysisResult {
+abstract class UnitElementResult implements SomeUnitElementResult, FileResult {
   /// The element of the file.
   CompilationUnitElement get element;
 
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 7dc7476..ba209b7 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -479,6 +479,8 @@
 
   R? visitImplementsClause(ImplementsClause node);
 
+  R? visitImplicitCallReference(ImplicitCallReference node);
+
   R? visitImportDirective(ImportDirective node);
 
   R? visitIndexExpression(IndexExpression node);
@@ -977,14 +979,33 @@
   List<Token> get tokens;
 }
 
+/// An interface for an [Expression] which can make up a [CommentReference].
+///
+///    commentReferableExpression ::=
+///        [ConstructorReference]
+///      | [FunctionReference]
+///      | [PrefixedIdentifier]
+///      | [PropertyAccess]
+///      | [SimpleIdentifier]
+///      | [TypeLiteral]
+///
+/// This interface should align closely with dartdoc's notion of
+/// comment-referable expressions at:
+/// https://github.com/dart-lang/dartdoc/blob/master/lib/src/comment_references/parser.dart
+abstract class CommentReferableExpression implements Expression {}
+
 /// A reference to a Dart element that is found within a documentation comment.
 ///
 ///    commentReference ::=
-///        '[' 'new'? [Identifier] ']'
+///        '[' 'new'? [CommentReferableExpression] ']'
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class CommentReference implements AstNode {
+  /// The comment-referable expression being referenced.
+  CommentReferableExpression get expression;
+
   /// Return the identifier being referenced.
+  @Deprecated('Use expression instead')
   Identifier get identifier;
 
   /// Return the token representing the 'new' keyword, or `null` if there was no
@@ -1329,7 +1350,8 @@
 /// produced at resolution time.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class ConstructorReference implements Expression {
+abstract class ConstructorReference
+    implements Expression, CommentReferableExpression {
   /// The constructor being referenced.
   ConstructorName get constructorName;
 }
@@ -2317,7 +2339,8 @@
 /// arguments applied to it, e.g. the expression `print` in `var x = print;`.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class FunctionReference implements Expression {
+abstract class FunctionReference
+    implements Expression, CommentReferableExpression {
   /// The function being referenced.
   ///
   /// In error-free code, this will be either a SimpleIdentifier (indicating a
@@ -2501,7 +2524,7 @@
 ///      | [PrefixedIdentifier]
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class Identifier implements Expression {
+abstract class Identifier implements Expression, CommentReferableExpression {
   /// Return the lexical representation of the identifier.
   String get name;
 
@@ -2599,6 +2622,33 @@
   NodeList<NamedType> get interfaces2;
 }
 
+/// An expression representing an implicit 'call' method reference.
+///
+/// Objects of this type are not produced directly by the parser (because the
+/// parser cannot tell whether an expression refers to a callable type); they
+/// are produced at resolution time.
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class ImplicitCallReference implements MethodReferenceExpression {
+  /// Return the expression from which a `call` method is being referenced.
+  Expression get expression;
+
+  /// Return the element associated with the implicit 'call' reference based on
+  /// the static types.
+  @override
+  MethodElement get staticElement;
+
+  /// The type arguments being applied to the tear-off, or `null` if there are
+  /// no type arguments.
+  TypeArgumentList? get typeArguments;
+
+  /// The actual type arguments being applied to the tear-off, either explicitly
+  /// specified in [typeArguments], or inferred.
+  ///
+  /// Returns an empty list if the 'call' method does not have type parameters.
+  List<DartType> get typeArgumentTypes;
+}
+
 /// An import directive.
 ///
 ///    importDirective ::=
@@ -3192,7 +3242,7 @@
 /// An expression that implicitly makes reference to a method.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class MethodReferenceExpression implements AstNode {
+abstract class MethodReferenceExpression implements Expression {
   /// Return the element associated with the expression based on the static
   /// types, or `null` if the AST structure has not been resolved, or there is
   /// no meaningful static element to return (e.g. because this is a
@@ -3559,7 +3609,8 @@
 ///        [Expression] '.' [SimpleIdentifier]
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class PropertyAccess implements NullShortableExpression {
+abstract class PropertyAccess
+    implements NullShortableExpression, CommentReferableExpression {
   /// Return `true` if this expression is cascaded.
   ///
   /// If it is, then the target of this expression is not stored locally but is
@@ -4260,7 +4311,7 @@
 /// use `.typeName.type`.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class TypeLiteral implements Expression {
+abstract class TypeLiteral implements Expression, CommentReferableExpression {
   /// The type represented by this literal.
   NamedType get type;
 
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index 64d8fb4..8a714a8 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -5,6 +5,8 @@
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 
 /// A collection of factory methods which may be used to create concrete
@@ -156,7 +158,8 @@
 
   /// Returns a newly created reference to a Dart element. The [newKeyword]
   /// can be `null` if the reference is not to a constructor.
-  CommentReference commentReference(Token? newKeyword, Identifier identifier);
+  CommentReference commentReference(
+      Token? newKeyword, CommentReferableExpression expression);
 
   /// Returns a newly created compilation unit to have the given directives and
   /// declarations.  The [scriptTag] can be `null` (or omitted) if there is no
@@ -580,6 +583,17 @@
   ImplementsClause implementsClause(
       Token implementsKeyword, List<NamedType> interfaces);
 
+  /// Returns a newly created implicit call reference.
+  ///
+  /// The [typeArguments] can be `null` if there are no type arguments being
+  /// applied to the reference.
+  ImplicitCallReference implicitCallReference({
+    required Expression expression,
+    required MethodElement staticElement,
+    required TypeArgumentList? typeArguments,
+    required List<DartType> typeArgumentTypes,
+  });
+
   /// Returns a newly created import directive. Either or both of the
   /// [comment] and [metadata] can be `null` if the function does not have the
   /// corresponding attribute. The [deferredKeyword] can be `null` if the import
diff --git a/pkg/analyzer/lib/dart/ast/visitor.dart b/pkg/analyzer/lib/dart/ast/visitor.dart
index 451f318..5d3dda9 100644
--- a/pkg/analyzer/lib/dart/ast/visitor.dart
+++ b/pkg/analyzer/lib/dart/ast/visitor.dart
@@ -383,6 +383,9 @@
   R? visitImplementsClause(ImplementsClause node) => visitNode(node);
 
   @override
+  R? visitImplicitCallReference(ImplicitCallReference node) => visitNode(node);
+
+  @override
   R? visitImportDirective(ImportDirective node) =>
       visitNamespaceDirective(node);
 
@@ -1035,6 +1038,12 @@
   }
 
   @override
+  R? visitImplicitCallReference(ImplicitCallReference node) {
+    node.visitChildren(this);
+    return null;
+  }
+
+  @override
   R? visitImportDirective(ImportDirective node) {
     node.visitChildren(this);
     return null;
@@ -1624,6 +1633,9 @@
   R? visitImplementsClause(ImplementsClause node) => null;
 
   @override
+  R? visitImplicitCallReference(ImplicitCallReference node) => null;
+
+  @override
   R? visitImportDirective(ImportDirective node) => null;
 
   @override
@@ -2032,6 +2044,9 @@
   R? visitImplementsClause(ImplementsClause node) => _throw(node);
 
   @override
+  R? visitImplicitCallReference(ImplicitCallReference node) => _throw(node);
+
+  @override
   R? visitImportDirective(ImportDirective node) => _throw(node);
 
   @override
@@ -2769,6 +2784,14 @@
   }
 
   @override
+  T? visitImplicitCallReference(ImplicitCallReference node) {
+    stopwatch.start();
+    T? result = _baseVisitor.visitImplicitCallReference(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T? visitImportDirective(ImportDirective node) {
     stopwatch.start();
     T? result = _baseVisitor.visitImportDirective(node);
@@ -3498,6 +3521,9 @@
   R? visitImplementsClause(ImplementsClause node) => visitNode(node);
 
   @override
+  R? visitImplicitCallReference(ImplicitCallReference node) => visitNode(node);
+
+  @override
   R? visitImportDirective(ImportDirective node) => visitNode(node);
 
   @override
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index f34732b..11b9950 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -689,7 +689,7 @@
   /// presented to users.
   ///
   /// If [withNullability] is `true`, then [NullabilitySuffix.question] and
-  /// [NullabilitySuffix.star] in types will be be represented as `?` and `*`.
+  /// [NullabilitySuffix.star] in types will be represented as `?` and `*`.
   /// [NullabilitySuffix.none] does not have any explicit presentation.
   ///
   /// If [withNullability] is `false`, nullability suffixes will not be
@@ -1331,6 +1331,7 @@
 
   /// Return `true` if the defining compilation unit of this library contains at
   /// least one import directive whose URI uses the "dart-ext" scheme.
+  @Deprecated('Support for dart-ext is replaced with FFI')
   bool get hasExtUri;
 
   /// Return `true` if this library defines a top-level function named
@@ -1619,7 +1620,11 @@
 /// variable or a parameter.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class PromotableElement implements LocalElement, VariableElement {}
+abstract class PromotableElement implements LocalElement, VariableElement {
+  // Promotable elements are guaranteed to have a name.
+  @override
+  String get name;
+}
 
 /// A getter or a setter. Note that explicitly defined property accessors
 /// implicitly define a synthetic field. Symmetrically, synthetic accessors are
@@ -1885,6 +1890,9 @@
   /// > implicitly static.
   bool get isStatic;
 
+  @override
+  String get name;
+
   /// Return the declared type of this variable.
   DartType get type;
 
diff --git a/pkg/analyzer/lib/dart/element/type.dart b/pkg/analyzer/lib/dart/element/type.dart
index 5e9079a..2ff16e0 100644
--- a/pkg/analyzer/lib/dart/element/type.dart
+++ b/pkg/analyzer/lib/dart/element/type.dart
@@ -164,7 +164,7 @@
   /// to users in contexts such as error messages.
   ///
   /// If [withNullability] is `true`, then [NullabilitySuffix.question] and
-  /// [NullabilitySuffix.star] will be be represented as `?` and `*`.
+  /// [NullabilitySuffix.star] will be represented as `?` and `*`.
   /// [NullabilitySuffix.none] does not have any explicit presentation.
   ///
   /// If [withNullability] is `false`, nullability suffixes will not be
@@ -555,7 +555,7 @@
   /// arguments, attempts to find a compatible set of type arguments.
   ///
   /// Otherwise, returns the same result as [DartType.getLeastUpperBound].
-  // TODO(brianwilkerson) This needs to be deprecated and moved to TypeSystem.
+  @Deprecated('Use TypeSystem.leastUpperBound instead')
   static InterfaceType getSmartLeastUpperBound(
           InterfaceType first, InterfaceType second) =>
       InterfaceTypeImpl.getSmartLeastUpperBound(first, second);
diff --git a/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart b/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart
index d2062c5..c87a35f 100644
--- a/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart
+++ b/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart
@@ -106,7 +106,7 @@
       Reference.root(),
     );
 
-    var linkResult = link(elementFactory, inputLibraries, false);
+    var linkResult = link(elementFactory, inputLibraries);
 
     var bundleBuilder = PackageBundleBuilder();
     for (var library in inputLibraries) {
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index cbbb42b..1c98a3a 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -226,6 +226,7 @@
   CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD,
   CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD,
   CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER,
+  CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION,
   CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY,
   CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC,
   CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS,
@@ -457,6 +458,7 @@
   CompileTimeErrorCode.URI_DOES_NOT_EXIST,
   CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED,
   CompileTimeErrorCode.URI_WITH_INTERPOLATION,
+  CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION,
   CompileTimeErrorCode.USE_OF_VOID_RESULT,
   CompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
   CompileTimeErrorCode.WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE,
@@ -480,7 +482,11 @@
   FfiCode.EMPTY_STRUCT,
   FfiCode.EXTRA_ANNOTATION_ON_STRUCT_FIELD,
   FfiCode.EXTRA_SIZE_ANNOTATION_CARRAY,
-  FfiCode.FFI_NATIVE_ONLY_STATIC,
+  FfiCode.FFI_NATIVE_MUST_BE_EXTERNAL,
+  FfiCode
+      .FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER,
+  FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS,
+  FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER,
   FfiCode.FIELD_IN_STRUCT_WITH_INITIALIZER,
   FfiCode.FIELD_INITIALIZER_IN_STRUCT,
   FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT,
@@ -524,6 +530,7 @@
   HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE,
   HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE,
   HintCode.DEPRECATED_MIXIN_FUNCTION,
+  HintCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE,
   HintCode.DIVISION_OPTIMIZATION,
   HintCode.DUPLICATE_HIDDEN_NAME,
   HintCode.DUPLICATE_IGNORE,
@@ -573,7 +580,6 @@
   HintCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER,
   HintCode.INVALID_VISIBILITY_ANNOTATION,
   HintCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION,
-  HintCode.MISSING_JS_LIB_ANNOTATION,
   HintCode.MISSING_REQUIRED_PARAM,
   HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS,
   HintCode.MISSING_RETURN,
@@ -637,7 +643,6 @@
   HintCode.UNUSED_RESULT,
   HintCode.UNUSED_RESULT_WITH_MESSAGE,
   HintCode.UNUSED_SHOWN_NAME,
-  HintCode.USE_OF_NATIVE_EXTENSION,
   LanguageCode.IMPLICIT_DYNAMIC_FIELD,
   LanguageCode.IMPLICIT_DYNAMIC_FUNCTION,
   LanguageCode.IMPLICIT_DYNAMIC_INVOKE,
@@ -968,7 +973,7 @@
 
   /// The correction to be displayed for this error, or `null` if there is no
   /// correction information for this error.
-  String? _correction;
+  String? _correctionMessage;
 
   /// The source in which the error occurred, or `null` if unknown.
   final Source source;
@@ -982,22 +987,27 @@
       [List<Object?>? arguments,
       List<DiagnosticMessage> contextMessages = const []])
       : _contextMessages = contextMessages {
-    String message = formatList(errorCode.message, arguments);
-    String? correctionTemplate = errorCode.correction;
+    assert(
+        (arguments ?? const []).length == errorCode.numParameters,
+        'Message $errorCode requires ${errorCode.numParameters} '
+        'argument(s), but ${(arguments ?? const []).length} argument(s) were '
+        'provided');
+    String problemMessage = formatList(errorCode.problemMessage, arguments);
+    String? correctionTemplate = errorCode.correctionMessage;
     if (correctionTemplate != null) {
-      _correction = formatList(correctionTemplate, arguments);
+      _correctionMessage = formatList(correctionTemplate, arguments);
     }
     _problemMessage = DiagnosticMessageImpl(
         filePath: source.fullName,
         length: length,
-        message: message,
+        message: problemMessage,
         offset: offset,
         url: null);
   }
 
   /// Initialize a newly created analysis error with given values.
   AnalysisError.forValues(this.source, int offset, int length, this.errorCode,
-      String message, this._correction,
+      String message, this._correctionMessage,
       {List<DiagnosticMessage> contextMessages = const []})
       : _contextMessages = contextMessages {
     _problemMessage = DiagnosticMessageImpl(
@@ -1029,10 +1039,10 @@
   /// Return the template used to create the correction to be displayed for this
   /// error, or `null` if there is no correction information for this error. The
   /// correction should indicate how the user can fix the error.
-  String? get correction => _correction;
+  String? get correction => _correctionMessage;
 
   @override
-  String? get correctionMessage => _correction;
+  String? get correctionMessage => _correctionMessage;
 
   @override
   int get hashCode {
diff --git a/pkg/analyzer/lib/error/listener.dart b/pkg/analyzer/lib/error/listener.dart
index 346f462..ba45f03 100644
--- a/pkg/analyzer/lib/error/listener.dart
+++ b/pkg/analyzer/lib/error/listener.dart
@@ -94,7 +94,7 @@
   /// Report an error with the given [errorCode] and [arguments].
   /// The [node] is used to compute the location of the error.
   void reportErrorForNode(ErrorCode errorCode, AstNode node,
-      [List<Object?>? arguments, List<DiagnosticMessage>? messages]) {
+      [List<Object>? arguments, List<DiagnosticMessage>? messages]) {
     reportErrorForOffset(
         errorCode, node.offset, node.length, arguments, messages);
   }
@@ -102,7 +102,7 @@
   /// Report an error with the given [errorCode] and [arguments]. The location
   /// of the error is specified by the given [offset] and [length].
   void reportErrorForOffset(ErrorCode errorCode, int offset, int length,
-      [List<Object?>? arguments, List<DiagnosticMessage>? messages]) {
+      [List<Object>? arguments, List<DiagnosticMessage>? messages]) {
     _convertElements(arguments);
     messages ??= [];
     messages.addAll(_convertTypeNames(arguments));
@@ -113,14 +113,14 @@
   /// Report an error with the given [errorCode] and [arguments]. The location
   /// of the error is specified by the given [span].
   void reportErrorForSpan(ErrorCode errorCode, SourceSpan span,
-      [List<Object?>? arguments]) {
+      [List<Object>? arguments]) {
     reportErrorForOffset(errorCode, span.start.offset, span.length, arguments);
   }
 
   /// Report an error with the given [errorCode] and [arguments]. The [token] is
   /// used to compute the location of the error.
   void reportErrorForToken(ErrorCode errorCode, Token token,
-      [List<Object?>? arguments, List<DiagnosticMessage>? messages]) {
+      [List<Object>? arguments, List<DiagnosticMessage>? messages]) {
     reportErrorForOffset(
         errorCode, token.offset, token.length, arguments, messages);
   }
@@ -154,7 +154,7 @@
   }
 
   /// Convert all [Element]s in the [arguments] into their display strings.
-  void _convertElements(List<Object?>? arguments) {
+  void _convertElements(List<Object>? arguments) {
     if (arguments == null) {
       return;
     }
diff --git a/pkg/analyzer/lib/file_system/file_system.dart b/pkg/analyzer/lib/file_system/file_system.dart
index e71b153..52bb3d7 100644
--- a/pkg/analyzer/lib/file_system/file_system.dart
+++ b/pkg/analyzer/lib/file_system/file_system.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/src/generated/source.dart';
 import 'package:path/path.dart';
 import 'package:watcher/watcher.dart';
@@ -29,7 +31,7 @@
 
   /// Synchronously read the entire file contents as a list of bytes.
   /// Throws a [FileSystemException] if the operation fails.
-  List<int> readAsBytesSync();
+  Uint8List readAsBytesSync();
 
   /// Synchronously read the entire file contents as a [String].
   /// Throws [FileSystemException] if the file does not exist.
diff --git a/pkg/analyzer/lib/file_system/memory_file_system.dart b/pkg/analyzer/lib/file_system/memory_file_system.dart
index 76b90a1..f6d3b10 100644
--- a/pkg/analyzer/lib/file_system/memory_file_system.dart
+++ b/pkg/analyzer/lib/file_system/memory_file_system.dart
@@ -159,21 +159,31 @@
     return link;
   }
 
-  File newFile(String path, String content, [int? stamp]) {
-    var bytes = utf8.encode(content);
+  File newFile(
+    String path,
+    String content, [
+    @Deprecated('This parameter is not used and will be removed') int? stamp,
+  ]) {
+    var bytes = utf8.encode(content) as Uint8List;
+    // ignore: deprecated_member_use_from_same_package
     return newFileWithBytes(path, bytes, stamp);
   }
 
-  File newFileWithBytes(String path, List<int> bytes, [int? stamp]) {
+  File newFileWithBytes(
+    String path,
+    List<int> bytes, [
+    @Deprecated('This parameter is not used and will be removed') int? stamp,
+  ]) {
     _ensureAbsoluteAndNormalized(path);
+    bytes = bytes is Uint8List ? bytes : Uint8List.fromList(bytes);
 
     var parentPath = pathContext.dirname(path);
     var parentData = _newFolder(parentPath);
     _addToParentFolderData(parentData, path);
 
     _pathToData[path] = _FileData(
-      bytes: Uint8List.fromList(bytes),
-      timeStamp: stamp ?? nextStamp++,
+      bytes: bytes,
+      timeStamp: nextStamp++,
     );
     _notifyWatchers(path, ChangeType.ADD);
 
@@ -322,13 +332,13 @@
     return result;
   }
 
-  void _setFileContent(String path, List<int> bytes) {
+  void _setFileContent(String path, Uint8List bytes) {
     var parentPath = pathContext.dirname(path);
     var parentData = _newFolder(parentPath);
     _addToParentFolderData(parentData, path);
 
     _pathToData[path] = _FileData(
-      bytes: Uint8List.fromList(bytes),
+      bytes: bytes,
       timeStamp: nextStamp++,
     );
     _notifyWatchers(path, ChangeType.MODIFY);
@@ -511,12 +521,13 @@
 
   @override
   void writeAsBytesSync(List<int> bytes) {
+    bytes = bytes is Uint8List ? bytes : Uint8List.fromList(bytes);
     provider._setFileContent(path, bytes);
   }
 
   @override
   void writeAsStringSync(String content) {
-    var bytes = utf8.encode(content);
+    var bytes = utf8.encode(content) as Uint8List;
     writeAsBytesSync(bytes);
   }
 }
diff --git a/pkg/analyzer/lib/file_system/overlay_file_system.dart b/pkg/analyzer/lib/file_system/overlay_file_system.dart
index e66c643..dbac07b 100644
--- a/pkg/analyzer/lib/file_system/overlay_file_system.dart
+++ b/pkg/analyzer/lib/file_system/overlay_file_system.dart
@@ -189,7 +189,7 @@
   }
 
   @override
-  List<int> readAsBytesSync() {
+  Uint8List readAsBytesSync() {
     String? content = provider._getOverlayContent(path);
     if (content != null) {
       return utf8.encode(content) as Uint8List;
diff --git a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
index 4c95c70..be84490 100644
--- a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
+++ b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
@@ -44,17 +44,17 @@
   /// Initialize a newly created error code to have the given [name].
   const AnalysisOptionsErrorCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'AnalysisOptionsErrorCode.${uniqueName ?? name}',
         );
 
@@ -74,7 +74,7 @@
       AnalysisOptionsHintCode(
     'PREVIEW_DART_2_SETTING_DEPRECATED',
     "The 'enablePreviewDart2' setting is deprecated.",
-    correction: "It is no longer necessary to explicitly enable Dart 2.",
+    correctionMessage: "It is no longer necessary to explicitly enable Dart 2.",
   );
 
   /**
@@ -84,7 +84,8 @@
       AnalysisOptionsHintCode(
     'STRONG_MODE_SETTING_DEPRECATED',
     "The 'strong-mode: true' setting is deprecated.",
-    correction: "It is no longer necessary to explicitly enable strong mode.",
+    correctionMessage:
+        "It is no longer necessary to explicitly enable strong mode.",
   );
 
   /**
@@ -95,24 +96,24 @@
       AnalysisOptionsHintCode(
     'SUPER_MIXINS_SETTING_DEPRECATED',
     "The 'enableSuperMixins' setting is deprecated.",
-    correction:
+    correctionMessage:
         "Support has been added to the language for 'mixin' based mixins.",
   );
 
   /// Initialize a newly created error code to have the given [name].
   const AnalysisOptionsHintCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'AnalysisOptionsHintCode.${uniqueName ?? name}',
         );
 
@@ -191,7 +192,7 @@
       AnalysisOptionsWarningCode(
     'SPEC_MODE_REMOVED',
     "The option 'strong-mode: false' is no longer supported.",
-    correction:
+    correctionMessage:
         "It's recommended to remove the 'strong-mode:' setting (and make your code Dart 2 compliant).",
   );
 
@@ -250,7 +251,7 @@
       AnalysisOptionsWarningCode(
     'UNSUPPORTED_OPTION_WITH_LEGAL_VALUES',
     "The option '{1}' isn't supported by '{0}'.",
-    correction: "Try using one of the supported options: {2}.",
+    correctionMessage: "Try using one of the supported options: {2}.",
   );
 
   /**
@@ -266,23 +267,23 @@
       AnalysisOptionsWarningCode(
     'UNSUPPORTED_VALUE',
     "The value '{1}' isn't supported by '{0}'.",
-    correction: "Try using one of the supported options: {2}.",
+    correctionMessage: "Try using one of the supported options: {2}.",
   );
 
   /// Initialize a newly created error code to have the given [name].
   const AnalysisOptionsWarningCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'AnalysisOptionsWarningCode.${uniqueName ?? name}',
         );
 
diff --git a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
new file mode 100644
index 0000000..9becaf1
--- /dev/null
+++ b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
@@ -0,0 +1,97 @@
+// Copyright (c) 2021, 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:typed_data';
+
+import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/context/packages.dart';
+import 'package:analyzer/src/dart/analysis/byte_store.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/performance_logger.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/summary/package_bundle_reader.dart';
+import 'package:analyzer/src/summary/summary_sdk.dart';
+import 'package:analyzer/src/summary2/package_bundle_format.dart';
+
+export 'package:analyzer/src/context/packages.dart' show Packages, Package;
+export 'package:analyzer/src/dart/analysis/experiments.dart'
+    show ExperimentStatus;
+export 'package:analyzer/src/generated/engine.dart'
+    show AnalysisOptions, AnalysisOptionsImpl;
+export 'package:analyzer/src/generated/source.dart' show Source, UriResolver;
+
+/// A somewhat low level API to create [AnalysisSession].
+///
+/// Ideally we want clients to use [AnalysisContextCollection], which
+/// encapsulates any internals and is driven by `package_config.json` and
+/// `analysis_options.yaml` files. But so far it looks that `build_resolvers`
+/// wants to provide [UriResolver], and push [Packages] created by other means
+/// than parsing `package_config.json`.
+AnalysisDriverForPackageBuild createAnalysisDriver({
+  required ResourceProvider resourceProvider,
+  required Uint8List sdkSummaryBytes,
+  required AnalysisOptions analysisOptions,
+  required List<UriResolver> uriResolvers,
+  required Packages packages,
+}) {
+  var sdkBundle = PackageBundleReader(sdkSummaryBytes);
+  var sdk = SummaryBasedDartSdk.forBundle(sdkBundle);
+
+  var sourceFactory = SourceFactory([
+    DartUriResolver(sdk),
+    ...uriResolvers,
+  ]);
+
+  var dataStore = SummaryDataStore([]);
+  dataStore.addBundle('', sdkBundle);
+
+  var logger = PerformanceLog(null);
+  var scheduler = AnalysisDriverScheduler(logger);
+  var driver = AnalysisDriver.tmp1(
+    scheduler: scheduler,
+    logger: logger,
+    resourceProvider: resourceProvider,
+    byteStore: MemoryByteStore(),
+    sourceFactory: sourceFactory,
+    analysisOptions: analysisOptions as AnalysisOptionsImpl,
+    externalSummaries: dataStore,
+    packages: packages,
+  );
+
+  scheduler.start();
+
+  return AnalysisDriverForPackageBuild._(driver);
+}
+
+/// [AnalysisSession] plus a tiny bit more.
+class AnalysisDriverForPackageBuild {
+  final AnalysisDriver _driver;
+
+  AnalysisDriverForPackageBuild._(this._driver);
+
+  AnalysisSession get currentSession {
+    return _driver.currentSession;
+  }
+
+  /// The file with the given [path] might have changed - updated, added or
+  /// removed. Or not, we don't know. Or it might have, but then changed back.
+  ///
+  /// The [path] must be absolute and normalized.
+  ///
+  /// The [currentSession] most probably will be invalidated.
+  /// Note, is does NOT at the time of writing this comment.
+  /// But we are going to fix this.
+  void changeFile(String path) {
+    _driver.changeFile(path);
+  }
+
+  /// Return `true` if the [uri] can be resolved to an existing file.
+  bool isUriOfExistingFile(Uri uri) {
+    var source = _driver.sourceFactory.forUri2(uri);
+    return source != null && source.exists();
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/byte_store.dart b/pkg/analyzer/lib/src/dart/analysis/byte_store.dart
index 740ddc2..7fa38f7 100644
--- a/pkg/analyzer/lib/src/dart/analysis/byte_store.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/byte_store.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/src/dart/analysis/cache.dart';
 
 /// Store of bytes associated with string keys.
@@ -17,23 +19,23 @@
 abstract class ByteStore {
   /// Return the bytes associated with the given [key].
   /// Return `null` if the association does not exist.
-  List<int>? get(String key);
+  Uint8List? get(String key);
 
   /// Associate the given [bytes] with the [key].
-  void put(String key, List<int> bytes);
+  void put(String key, Uint8List bytes);
 }
 
 /// [ByteStore] which stores data only in memory.
 class MemoryByteStore implements ByteStore {
-  final Map<String, List<int>> _map = {};
+  final Map<String, Uint8List> _map = {};
 
   @override
-  List<int>? get(String key) {
+  Uint8List? get(String key) {
     return _map[key];
   }
 
   @override
-  void put(String key, List<int> bytes) {
+  void put(String key, Uint8List bytes) {
     _map[key] = bytes;
   }
 }
@@ -41,18 +43,18 @@
 /// A wrapper around [ByteStore] which adds an in-memory LRU cache to it.
 class MemoryCachingByteStore implements ByteStore {
   final ByteStore _store;
-  final Cache<String, List<int>> _cache;
+  final Cache<String, Uint8List> _cache;
 
   MemoryCachingByteStore(this._store, int maxSizeBytes)
-      : _cache = Cache<String, List<int>>(maxSizeBytes, (v) => v.length);
+      : _cache = Cache<String, Uint8List>(maxSizeBytes, (v) => v.length);
 
   @override
-  List<int>? get(String key) {
+  Uint8List? get(String key) {
     return _cache.get(key, () => _store.get(key));
   }
 
   @override
-  void put(String key, List<int> bytes) {
+  void put(String key, Uint8List bytes) {
     _store.put(key, bytes);
     _cache.put(key, bytes);
   }
@@ -61,8 +63,8 @@
 /// [ByteStore] which does not store any data.
 class NullByteStore implements ByteStore {
   @override
-  List<int>? get(String key) => null;
+  Uint8List? get(String key) => null;
 
   @override
-  void put(String key, List<int> bytes) {}
+  void put(String key, Uint8List bytes) {}
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index 3e2f98b..d8131da 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
@@ -25,6 +25,7 @@
 import 'package:analyzer/src/hint/sdk_constraint_extractor.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart';
+import 'package:analyzer/src/summary2/package_bundle_format.dart';
 import 'package:analyzer/src/task/options.dart';
 import 'package:analyzer/src/workspace/workspace.dart';
 import 'package:cli_util/cli_util.dart';
@@ -150,8 +151,11 @@
     String? sdkSummaryPath,
   }) {
     if (sdkSummaryPath != null) {
-      return SummaryBasedDartSdk(sdkSummaryPath, true,
-          resourceProvider: resourceProvider);
+      var file = resourceProvider.getFile(sdkSummaryPath);
+      var bytes = file.readAsBytesSync();
+      return SummaryBasedDartSdk.forBundle(
+        PackageBundleReader(bytes),
+      );
     }
 
     var folderSdk = FolderBasedDartSdk(
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
index 437064a..d65f695 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/analysis/dependency/node.dart';
@@ -140,7 +142,7 @@
   /// It is mixed into every API token signature, because for example even
   /// though types of two functions might be the same, their locations
   /// are different.
-  late List<int> uriSignature;
+  late Uint8List uriSignature;
 
   /// The precomputed signature of the enclosing class name, or `null` if
   /// outside a class.
@@ -148,7 +150,7 @@
   /// It is mixed into every API token signature of every class member, because
   /// for example even though types of two methods might be the same, their
   /// locations are different.
-  List<int>? enclosingClassNameSignature;
+  Uint8List? enclosingClassNameSignature;
 
   _LibraryBuilder(this.uri, this.units);
 
@@ -669,15 +671,15 @@
   }
 
   /// Return the signature for all tokens of the [node].
-  List<int> _computeNodeTokenSignature(AstNode? node) {
+  Uint8List _computeNodeTokenSignature(AstNode? node) {
     if (node == null) {
-      return const <int>[];
+      return Uint8List(0);
     }
     return _computeTokenSignature(node.beginToken, node.endToken);
   }
 
   /// Return the signature for tokens from [begin] to [end] (both including).
-  List<int> _computeTokenSignature(Token begin, Token end) {
+  Uint8List _computeTokenSignature(Token begin, Token end) {
     var signature = _newApiSignatureBuilder();
     _appendTokens(signature, begin, end);
     return signature.toByteList();
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/node.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/node.dart
index 70eb2fa..1243762 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/node.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/node.dart
@@ -22,7 +22,7 @@
   final int hashCode;
 
   ClassMemberReference(this.target, this.name)
-      : hashCode = Object.hash(target.hashCode, name.hashCode);
+      : hashCode = Object.hash(target, name);
 
   @override
   bool operator ==(Object other) {
@@ -46,11 +46,11 @@
 
 /// The dependencies of the API or implementation portion of a node.
 class Dependencies {
-  static final none = Dependencies([], [], [], [], [], []);
+  static final none = Dependencies(Uint8List(0), [], [], [], [], []);
 
   /// The token signature of this portion of the node. It depends on all
   /// tokens that might affect the node API or implementation resolution.
-  final List<int> tokenSignature;
+  final Uint8List tokenSignature;
 
   /// The names that appear unprefixed in this portion of the node, and are
   /// not defined locally in the node. Locally defined names themselves
@@ -87,7 +87,7 @@
   /// The transitive signature of this portion of the node, computed using
   /// the [tokenSignature] of this node, and API signatures of the
   /// [referencedNodes].
-  List<int>? transitiveSignature;
+  Uint8List? transitiveSignature;
 
   Dependencies(
       this.tokenSignature,
@@ -120,7 +120,7 @@
 
   factory LibraryQualifiedName(Uri libraryUri, String name) {
     var isPrivate = name.startsWith('_');
-    var hashCode = Object.hash(libraryUri.hashCode, name.hashCode);
+    var hashCode = Object.hash(libraryUri, name);
     return LibraryQualifiedName._internal(
         libraryUri, name, isPrivate, hashCode);
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
index 96ec456..b9b7403 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -52,7 +54,7 @@
 
   /// Construct and return a new [Dependencies] with the given [tokenSignature]
   /// and all recorded references to external nodes in the given AST nodes.
-  Dependencies collect(List<int> tokenSignature,
+  Dependencies collect(Uint8List tokenSignature,
       {String? enclosingClassName,
       String? thisNodeName,
       List<ConstructorInitializer>? constructorInitializers,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 474f80d..32ea11f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -80,7 +80,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 = 182;
+  static const int DATA_VERSION = 190;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
@@ -139,11 +139,11 @@
   final _priorityFiles = <String>{};
 
   /// The mapping from the files for which analysis was requested using
-  /// [getResult2] to the [Completer]s to report the result.
+  /// [getResult] to the [Completer]s to report the result.
   final _requestedFiles = <String, List<Completer<ResolvedUnitResult>>>{};
 
   /// The mapping from the files for which analysis was requested using
-  /// [getResolvedLibrary2] to the [Completer]s to report the result.
+  /// [getResolvedLibrary] to the [Completer]s to report the result.
   final _requestedLibraries =
       <String, List<Completer<ResolvedLibraryResult>>>{};
 
@@ -159,7 +159,7 @@
   final _referencingNameTasks = <_FilesReferencingNameTask>[];
 
   /// The mapping from the files for which errors were requested using
-  /// [getErrors2] to the [Completer]s to report the result.
+  /// [getErrors] to the [Completer]s to report the result.
   final _errorsRequestedFiles = <String, List<Completer<ErrorsResult>>>{};
 
   /// The requests from [_errorsRequestedFiles] for files which were found to
@@ -172,18 +172,18 @@
       <String, List<Completer<AnalysisDriverUnitIndex>>>{};
 
   /// The mapping from the files for which the unit element was requested using
-  /// [getUnitElement2] to the [Completer]s to report the result.
+  /// [getUnitElement] to the [Completer]s to report the result.
   final _unitElementRequestedFiles =
       <String, List<Completer<UnitElementResult>>>{};
 
   /// The mapping from the files for which the unit element was requested using
-  /// [getUnitElement2], and which were found to be parts without known
+  /// [getUnitElement], and which were found to be parts without known
   /// libraries, to the [Completer]s to report the result.
   final _unitElementRequestedParts =
       <String, List<Completer<UnitElementResult>>>{};
 
   /// The mapping from the files for which analysis was requested using
-  /// [getResult2], and which were found to be parts without known libraries,
+  /// [getResult], and which were found to be parts without known libraries,
   /// to the [Completer]s to report the result.
   final _requestedParts = <String, List<Completer<ResolvedUnitResult>>>{};
 
@@ -335,6 +335,20 @@
   /// not been processed yet, it might be missing.
   Set<String> get knownFiles => _fsState.knownFilePaths;
 
+  /// Return the context in which libraries should be analyzed.
+  LibraryContext get libraryContext {
+    return _libraryContext ??= LibraryContext(
+      testView: _testView.libraryContextTestView,
+      session: currentSession,
+      logger: _logger,
+      byteStore: _byteStore,
+      analysisOptions: _analysisOptions,
+      declaredVariables: declaredVariables,
+      sourceFactory: _sourceFactory,
+      externalSummaries: _externalSummaries,
+    );
+  }
+
   /// Return the path of the folder at the root of the context.
   String get name => analysisContext?.contextRoot.root.path ?? '';
 
@@ -368,7 +382,7 @@
   /// the analysis state transitions to "idle".
   ///
   /// [ResolvedUnitResult]s are produced for:
-  /// 1. Files requested using [getResult2].
+  /// 1. Files requested using [getResult].
   /// 2. Files passed to [addFile] which are also in [priorityFiles].
   ///
   /// [ErrorsResult]s are produced for:
@@ -384,7 +398,7 @@
   /// client does not change the state of the files.
   ///
   /// Results might be produced even for files that have never been added
-  /// using [addFile], for example when [getResult2] was called for a file.
+  /// using [addFile], for example when [getResult] was called for a file.
   Stream<Object> get results => _onResults;
 
   /// Return the search support for the driver.
@@ -480,7 +494,7 @@
   /// transitions to "idle".
   ///
   /// Invocation of this method will not prevent a [Future] returned from
-  /// [getResult2] from completing with a result, but the result is not
+  /// [getResult] from completing with a result, but the result is not
   /// guaranteed to be consistent with the new current file state after this
   /// [changeFile] invocation.
   void changeFile(String path) {
@@ -579,7 +593,7 @@
   ///
   /// This method does not use analysis priorities, and must not be used in
   /// interactive analysis, such as Analysis Server or its plugins.
-  Future<SomeErrorsResult> getErrors2(String path) async {
+  Future<SomeErrorsResult> getErrors(String path) async {
     if (!_isAbsolutePath(path)) {
       return Future.value(
         InvalidPathResult(),
@@ -600,6 +614,18 @@
     return completer.future;
   }
 
+  /// Return a [Future] that completes with the [ErrorsResult] for the Dart
+  /// file with the given [path].
+  ///
+  /// The [path] must be absolute and normalized.
+  ///
+  /// This method does not use analysis priorities, and must not be used in
+  /// interactive analysis, such as Analysis Server or its plugins.
+  @Deprecated('Use getErrors() instead')
+  Future<SomeErrorsResult> getErrors2(String path) async {
+    return getErrors(path);
+  }
+
   /// Return a [Future] that completes with the list of added files that
   /// define a class member with the given [name].
   Future<List<String>> getFilesDefiningClassMemberName(String name) {
@@ -623,7 +649,7 @@
   /// Return the [FileResult] for the Dart file with the given [path].
   ///
   /// The [path] must be absolute and normalized.
-  SomeFileResult getFileSync2(String path) {
+  SomeFileResult getFileSync(String path) {
     if (!_isAbsolutePath(path)) {
       return InvalidPathResult();
     }
@@ -633,6 +659,14 @@
         _currentSession, path, file.uri, file.lineInfo, file.isPart);
   }
 
+  /// Return the [FileResult] for the Dart file with the given [path].
+  ///
+  /// The [path] must be absolute and normalized.
+  @Deprecated('Use getFileSync() instead')
+  SomeFileResult getFileSync2(String path) {
+    return getFileSync(path);
+  }
+
   /// Return a [Future] that completes with the [AnalysisDriverUnitIndex] for
   /// the file with the given [path], or with `null` if the file cannot be
   /// analyzed.
@@ -655,7 +689,7 @@
   /// Return a [Future] that completes with [LibraryElementResult] for the given
   /// [uri], which is either resynthesized from the provided external summary
   /// store, or built for a file to which the given [uri] is resolved.
-  Future<SomeLibraryElementResult> getLibraryByUri2(String uri) async {
+  Future<SomeLibraryElementResult> getLibraryByUri(String uri) async {
     var uriObj = Uri.parse(uri);
     var fileOr = _fsState.getFileForUri(uriObj);
     return fileOr.map(
@@ -668,7 +702,7 @@
           return NotLibraryButPartResult();
         }
 
-        var unitResult = await getUnitElement2(file.path);
+        var unitResult = await getUnitElement(file.path);
         if (unitResult is UnitElementResult) {
           return LibraryElementResultImpl(unitResult.element.library);
         }
@@ -684,33 +718,24 @@
         return UnspecifiedInvalidResult();
       },
       (externalLibrary) async {
-        var libraryContext = _createLibraryContext(null);
         var element = libraryContext.getLibraryElement(externalLibrary.uri);
         return LibraryElementResultImpl(element);
       },
     );
   }
 
-  /// Return a [ParsedLibraryResult] for the library with the given [path].
-  ///
-  /// Throw [ArgumentError] if the given [path] is not the defining compilation
-  /// unit for a library (that is, is a part of a library).
-  ///
-  /// The [path] must be absolute and normalized.
-  ParsedLibraryResult getParsedLibrary(String path) {
-    var result = getParsedLibrary2(path);
-
-    if (result is NotLibraryButPartResult) {
-      throw ArgumentError('Is a part: $path');
-    }
-
-    return result as ParsedLibraryResult;
+  /// Return a [Future] that completes with [LibraryElementResult] for the given
+  /// [uri], which is either resynthesized from the provided external summary
+  /// store, or built for a file to which the given [uri] is resolved.
+  @Deprecated('Use getLibraryByUri() instead')
+  Future<SomeLibraryElementResult> getLibraryByUri2(String uri) async {
+    return getLibraryByUri(uri);
   }
 
   /// Return a [ParsedLibraryResult] for the library with the given [path].
   ///
   /// The [path] must be absolute and normalized.
-  SomeParsedLibraryResult getParsedLibrary2(String path) {
+  SomeParsedLibraryResult getParsedLibrary(String path) {
     if (!_isAbsolutePath(path)) {
       return InvalidPathResult();
     }
@@ -728,7 +753,7 @@
     var units = <ParsedUnitResult>[];
     for (var unitFile in file.libraryFiles) {
       var unitPath = unitFile.path;
-      var unitResult = parseFileSync2(unitPath);
+      var unitResult = parseFileSync(unitPath);
       if (unitResult is! ParsedUnitResult) {
         return UnspecifiedInvalidResult();
       }
@@ -739,7 +764,7 @@
   }
 
   /// Return a [ParsedLibraryResult] for the library with the given [uri].
-  SomeParsedLibraryResult getParsedLibraryByUri2(Uri uri) {
+  SomeParsedLibraryResult getParsedLibraryByUri(Uri uri) {
     var fileOr = _fsState.getFileForUri(uri);
     return fileOr.map(
       (file) {
@@ -771,7 +796,7 @@
   /// state (including new states of the files previously reported using
   /// [changeFile]), prior to the next time the analysis state transitions
   /// to "idle".
-  Future<SomeResolvedLibraryResult> getResolvedLibrary2(String path) {
+  Future<SomeResolvedLibraryResult> getResolvedLibrary(String path) {
     if (!_isAbsolutePath(path)) {
       return Future.value(
         InvalidPathResult(),
@@ -811,7 +836,7 @@
   /// state (including new states of the files previously reported using
   /// [changeFile]), prior to the next time the analysis state transitions
   /// to "idle".
-  Future<SomeResolvedLibraryResult> getResolvedLibraryByUri2(Uri uri) {
+  Future<SomeResolvedLibraryResult> getResolvedLibraryByUri(Uri uri) {
     var fileOr = _fsState.getFileForUri(uri);
     return fileOr.map(
       (file) async {
@@ -821,7 +846,7 @@
         if (file.isPart) {
           return NotLibraryButPartResult();
         }
-        return getResolvedLibrary2(file.path);
+        return getResolvedLibrary(file.path);
       },
       (externalLibrary) async {
         return UriOfExternalLibraryResult();
@@ -846,7 +871,7 @@
   /// it, which is consistent with the current file state (including new states
   /// of the files previously reported using [changeFile]), prior to the next
   /// time the analysis state transitions to "idle".
-  Future<SomeResolvedUnitResult> getResult2(String path,
+  Future<SomeResolvedUnitResult> getResult(String path,
       {bool sendCachedToStream = false}) {
     if (!_isAbsolutePath(path)) {
       return Future.value(
@@ -880,9 +905,32 @@
     return completer.future;
   }
 
+  /// Return a [Future] that completes with a [SomeResolvedUnitResult] for the
+  /// Dart file with the given [path].  If the file cannot be analyzed,
+  /// the [Future] completes with an [InvalidResult].
+  ///
+  /// The [path] must be absolute and normalized.
+  ///
+  /// The [path] can be any file - explicitly or implicitly analyzed, or neither.
+  ///
+  /// If the driver has the cached analysis result for the file, it is returned.
+  /// If [sendCachedToStream] is `true`, then the result is also reported into
+  /// the [results] stream, just as if it were freshly computed.
+  ///
+  /// Otherwise causes the analysis state to transition to "analyzing" (if it is
+  /// not in that state already), the driver will produce the analysis result for
+  /// it, which is consistent with the current file state (including new states
+  /// of the files previously reported using [changeFile]), prior to the next
+  /// time the analysis state transitions to "idle".
+  @Deprecated('Use getResult() instead')
+  Future<SomeResolvedUnitResult> getResult2(String path,
+      {bool sendCachedToStream = false}) {
+    return getResult(path);
+  }
+
   /// Return a [Future] that completes with the [SomeUnitElementResult]
   /// for the file with the given [path].
-  Future<SomeUnitElementResult> getUnitElement2(String path) {
+  Future<SomeUnitElementResult> getUnitElement(String path) {
     if (!_isAbsolutePath(path)) {
       return Future.value(
         InvalidPathResult(),
@@ -930,6 +978,7 @@
   /// The parsing is performed in the method itself, and the result is not
   /// produced through the [results] stream (just because it is not a fully
   /// resolved unit).
+  @Deprecated('Use parseFileSync() instead')
   Future<SomeParsedUnitResult> parseFile2(String path) async {
     return parseFileSync2(path);
   }
@@ -943,7 +992,7 @@
   /// The parsing is performed in the method itself, and the result is not
   /// produced through the [results] stream (just because it is not a fully
   /// resolved unit).
-  SomeParsedUnitResult parseFileSync2(String path) {
+  SomeParsedUnitResult parseFileSync(String path) {
     if (!_isAbsolutePath(path)) {
       return InvalidPathResult();
     }
@@ -955,6 +1004,20 @@
         file.content, file.lineInfo, file.isPart, unit, listener.errors);
   }
 
+  /// Return a [ParsedUnitResult] for the file with the given [path].
+  ///
+  /// The [path] must be absolute and normalized.
+  ///
+  /// The [path] can be any file - explicitly or implicitly analyzed, or neither.
+  ///
+  /// The parsing is performed in the method itself, and the result is not
+  /// produced through the [results] stream (just because it is not a fully
+  /// resolved unit).
+  @Deprecated('Use parseFileSync() instead')
+  SomeParsedUnitResult parseFileSync2(String path) {
+    return parseFileSync(path);
+  }
+
   @override
   Future<void> performWork() async {
     if (_fileTracker.verifyChangedFilesIfNeeded()) {
@@ -1218,16 +1281,6 @@
     }
   }
 
-  /// Reset URI resolution, read again all files, build files graph, and ensure
-  /// that for all added files new results are reported.
-  void resetUriResolution() {
-    _priorityResults.clear();
-    clearLibraryContext();
-    _fsState.resetUriResolution();
-    _fileTracker.scheduleAllAddedFiles();
-    _scheduler.notify(this);
-  }
-
   void _addDeclaredVariablesToSignature(ApiSignature buffer) {
     var variableNames = declaredVariables.variableNames;
     buffer.addInt(variableNames.length);
@@ -1291,7 +1344,7 @@
 
     // If we don't need the fully resolved unit, check for the cached result.
     if (!withUnit) {
-      List<int>? bytes = _byteStore.get(key);
+      var bytes = _byteStore.get(key);
       if (bytes != null) {
         return _getAnalysisResultFromBytes(file, signature, bytes);
       }
@@ -1311,7 +1364,7 @@
           return _newMissingDartLibraryResult(file, 'dart:async');
         }
 
-        var libraryContext = _createLibraryContext(library!);
+        libraryContext.load2(library!);
 
         LibraryAnalyzer analyzer = LibraryAnalyzer(
             analysisOptions as AnalysisOptionsImpl,
@@ -1324,11 +1377,11 @@
             testingData: testingData);
         Map<FileState, UnitAnalysisResult> results = analyzer.analyze();
 
-        late List<int> bytes;
+        late Uint8List bytes;
         late CompilationUnit resolvedUnit;
         for (FileState unitFile in results.keys) {
           UnitAnalysisResult unitResult = results[unitFile]!;
-          List<int> unitBytes =
+          var unitBytes =
               _serializeResolvedUnit(unitResult.unit, unitResult.errors);
           String unitSignature = _getResolvedUnitSignature(library, unitFile);
           String unitKey = _getResolvedUnitKey(unitSignature);
@@ -1383,7 +1436,7 @@
 
     return _logger.run('Compute resolved library $path', () {
       _testView.numOfAnalyzedLibraries++;
-      var libraryContext = _createLibraryContext(library);
+      libraryContext.load2(library);
 
       LibraryAnalyzer analyzer = LibraryAnalyzer(
           analysisOptions as AnalysisOptionsImpl,
@@ -1441,12 +1494,14 @@
 
     return _logger.run('Compute unit element for $path', () {
       _logger.writeln('Work in $name');
-      var libraryContext = _createLibraryContext(library!);
+      libraryContext.load2(library!);
       var element = libraryContext.computeUnitElement(library, file);
       return UnitElementResultImpl(
         currentSession,
         path,
         file.uri,
+        file.lineInfo,
+        file.isPart,
         library.transitiveSignature,
         element,
       );
@@ -1488,36 +1543,6 @@
     _fileTracker = FileTracker(_logger, _fsState);
   }
 
-  /// Return the context in which the [library] should be analyzed.
-  LibraryContext _createLibraryContext(FileState? library) {
-    {
-      var libraryContext = _libraryContext;
-      if (libraryContext != null) {
-        if (libraryContext.pack()) {
-          clearLibraryContext();
-        }
-      }
-    }
-
-    var libraryContext = _libraryContext;
-    libraryContext ??= _libraryContext = LibraryContext(
-      testView: _testView.libraryContextTestView,
-      session: currentSession,
-      logger: _logger,
-      byteStore: _byteStore,
-      analysisOptions: _analysisOptions,
-      declaredVariables: declaredVariables,
-      sourceFactory: _sourceFactory,
-      externalSummaries: _externalSummaries,
-    );
-
-    if (library != null) {
-      libraryContext.load2(library);
-    }
-
-    return libraryContext;
-  }
-
   /// If this has not been done yet, schedule discovery of all files that are
   /// potentially available, so that they are included in [knownFiles].
   void _discoverAvailableFiles() {
@@ -1586,7 +1611,7 @@
   /// Load the [AnalysisResult] for the given [file] from the [bytes]. Set
   /// optional [content] and [resolvedUnit].
   AnalysisResult _getAnalysisResultFromBytes(
-      FileState file, String signature, List<int> bytes,
+      FileState file, String signature, Uint8List bytes,
       {String? content, CompilationUnit? resolvedUnit}) {
     var unit = AnalysisDriverResolvedUnit.fromBuffer(bytes);
     List<AnalysisError> errors = _getErrorsFromSerialized(file, unit.errors);
@@ -1732,7 +1757,7 @@
   }
 
   /// Serialize the given [resolvedUnit] errors and index into bytes.
-  List<int> _serializeResolvedUnit(
+  Uint8List _serializeResolvedUnit(
       CompilationUnit resolvedUnit, List<AnalysisError> errors) {
     AnalysisDriverUnitIndexBuilder index = enableIndex
         ? indexUnit(resolvedUnit)
@@ -1765,7 +1790,7 @@
               exception: exception.toString(),
               stackTrace: stackTrace.toString(),
               files: contextFiles);
-      List<int> bytes = contextBuilder.toBuffer();
+      var bytes = contextBuilder.toBuffer();
 
       String _twoDigits(int n) {
         if (n >= 10) return '$n';
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index f6dab0b..ce99ad0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -17,14 +17,18 @@
   EnableString.constructor_tearoffs: ExperimentalFeatures.constructor_tearoffs,
   EnableString.control_flow_collections:
       ExperimentalFeatures.control_flow_collections,
+  EnableString.enhanced_enums: ExperimentalFeatures.enhanced_enums,
   EnableString.extension_methods: ExperimentalFeatures.extension_methods,
   EnableString.extension_types: ExperimentalFeatures.extension_types,
   EnableString.generic_metadata: ExperimentalFeatures.generic_metadata,
+  EnableString.named_arguments_anywhere:
+      ExperimentalFeatures.named_arguments_anywhere,
   EnableString.non_nullable: ExperimentalFeatures.non_nullable,
   EnableString.nonfunction_type_aliases:
       ExperimentalFeatures.nonfunction_type_aliases,
   EnableString.set_literals: ExperimentalFeatures.set_literals,
   EnableString.spread_collections: ExperimentalFeatures.spread_collections,
+  EnableString.super_parameters: ExperimentalFeatures.super_parameters,
   EnableString.test_experiment: ExperimentalFeatures.test_experiment,
   EnableString.triple_shift: ExperimentalFeatures.triple_shift,
   EnableString.value_class: ExperimentalFeatures.value_class,
@@ -46,6 +50,9 @@
   /// String to enable the experiment "control-flow-collections"
   static const String control_flow_collections = 'control-flow-collections';
 
+  /// String to enable the experiment "enhanced-enums"
+  static const String enhanced_enums = 'enhanced-enums';
+
   /// String to enable the experiment "extension-methods"
   static const String extension_methods = 'extension-methods';
 
@@ -55,6 +62,9 @@
   /// String to enable the experiment "generic-metadata"
   static const String generic_metadata = 'generic-metadata';
 
+  /// String to enable the experiment "named-arguments-anywhere"
+  static const String named_arguments_anywhere = 'named-arguments-anywhere';
+
   /// String to enable the experiment "non-nullable"
   static const String non_nullable = 'non-nullable';
 
@@ -67,6 +77,9 @@
   /// String to enable the experiment "spread-collections"
   static const String spread_collections = 'spread-collections';
 
+  /// String to enable the experiment "super-parameters"
+  static const String super_parameters = 'super-parameters';
+
   /// String to enable the experiment "test-experiment"
   static const String test_experiment = 'test-experiment';
 
@@ -123,8 +136,18 @@
     releaseVersion: Version.parse('2.0.0'),
   );
 
-  static final extension_methods = ExperimentalFeature(
+  static final enhanced_enums = ExperimentalFeature(
     index: 4,
+    enableString: EnableString.enhanced_enums,
+    isEnabledByDefault: IsEnabledByDefault.enhanced_enums,
+    isExpired: IsExpired.enhanced_enums,
+    documentation: 'Enhanced Enums',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
+  static final extension_methods = ExperimentalFeature(
+    index: 5,
     enableString: EnableString.extension_methods,
     isEnabledByDefault: IsEnabledByDefault.extension_methods,
     isExpired: IsExpired.extension_methods,
@@ -134,7 +157,7 @@
   );
 
   static final extension_types = ExperimentalFeature(
-    index: 5,
+    index: 6,
     enableString: EnableString.extension_types,
     isEnabledByDefault: IsEnabledByDefault.extension_types,
     isExpired: IsExpired.extension_types,
@@ -144,7 +167,7 @@
   );
 
   static final generic_metadata = ExperimentalFeature(
-    index: 6,
+    index: 7,
     enableString: EnableString.generic_metadata,
     isEnabledByDefault: IsEnabledByDefault.generic_metadata,
     isExpired: IsExpired.generic_metadata,
@@ -154,8 +177,18 @@
     releaseVersion: Version.parse('2.14.0'),
   );
 
+  static final named_arguments_anywhere = ExperimentalFeature(
+    index: 8,
+    enableString: EnableString.named_arguments_anywhere,
+    isEnabledByDefault: IsEnabledByDefault.named_arguments_anywhere,
+    isExpired: IsExpired.named_arguments_anywhere,
+    documentation: 'Named Arguments Anywhere',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
   static final non_nullable = ExperimentalFeature(
-    index: 7,
+    index: 9,
     enableString: EnableString.non_nullable,
     isEnabledByDefault: IsEnabledByDefault.non_nullable,
     isExpired: IsExpired.non_nullable,
@@ -165,7 +198,7 @@
   );
 
   static final nonfunction_type_aliases = ExperimentalFeature(
-    index: 8,
+    index: 10,
     enableString: EnableString.nonfunction_type_aliases,
     isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases,
     isExpired: IsExpired.nonfunction_type_aliases,
@@ -175,7 +208,7 @@
   );
 
   static final set_literals = ExperimentalFeature(
-    index: 9,
+    index: 11,
     enableString: EnableString.set_literals,
     isEnabledByDefault: IsEnabledByDefault.set_literals,
     isExpired: IsExpired.set_literals,
@@ -185,7 +218,7 @@
   );
 
   static final spread_collections = ExperimentalFeature(
-    index: 10,
+    index: 12,
     enableString: EnableString.spread_collections,
     isEnabledByDefault: IsEnabledByDefault.spread_collections,
     isExpired: IsExpired.spread_collections,
@@ -194,8 +227,18 @@
     releaseVersion: Version.parse('2.0.0'),
   );
 
+  static final super_parameters = ExperimentalFeature(
+    index: 13,
+    enableString: EnableString.super_parameters,
+    isEnabledByDefault: IsEnabledByDefault.super_parameters,
+    isExpired: IsExpired.super_parameters,
+    documentation: 'Super-Initializer Parameters',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
   static final test_experiment = ExperimentalFeature(
-    index: 11,
+    index: 14,
     enableString: EnableString.test_experiment,
     isEnabledByDefault: IsEnabledByDefault.test_experiment,
     isExpired: IsExpired.test_experiment,
@@ -206,7 +249,7 @@
   );
 
   static final triple_shift = ExperimentalFeature(
-    index: 12,
+    index: 15,
     enableString: EnableString.triple_shift,
     isEnabledByDefault: IsEnabledByDefault.triple_shift,
     isExpired: IsExpired.triple_shift,
@@ -216,7 +259,7 @@
   );
 
   static final value_class = ExperimentalFeature(
-    index: 13,
+    index: 16,
     enableString: EnableString.value_class,
     isEnabledByDefault: IsEnabledByDefault.value_class,
     isExpired: IsExpired.value_class,
@@ -226,7 +269,7 @@
   );
 
   static final variance = ExperimentalFeature(
-    index: 14,
+    index: 17,
     enableString: EnableString.variance,
     isEnabledByDefault: IsEnabledByDefault.variance,
     isExpired: IsExpired.variance,
@@ -251,6 +294,9 @@
   /// Default state of the experiment "control-flow-collections"
   static const bool control_flow_collections = true;
 
+  /// Default state of the experiment "enhanced-enums"
+  static const bool enhanced_enums = false;
+
   /// Default state of the experiment "extension-methods"
   static const bool extension_methods = true;
 
@@ -260,6 +306,9 @@
   /// Default state of the experiment "generic-metadata"
   static const bool generic_metadata = true;
 
+  /// Default state of the experiment "named-arguments-anywhere"
+  static const bool named_arguments_anywhere = false;
+
   /// Default state of the experiment "non-nullable"
   static const bool non_nullable = true;
 
@@ -272,6 +321,9 @@
   /// Default state of the experiment "spread-collections"
   static const bool spread_collections = true;
 
+  /// Default state of the experiment "super-parameters"
+  static const bool super_parameters = false;
+
   /// Default state of the experiment "test-experiment"
   static const bool test_experiment = false;
 
@@ -301,6 +353,9 @@
   /// Expiration status of the experiment "control-flow-collections"
   static const bool control_flow_collections = true;
 
+  /// Expiration status of the experiment "enhanced-enums"
+  static const bool enhanced_enums = false;
+
   /// Expiration status of the experiment "extension-methods"
   static const bool extension_methods = false;
 
@@ -310,6 +365,9 @@
   /// Expiration status of the experiment "generic-metadata"
   static const bool generic_metadata = false;
 
+  /// Expiration status of the experiment "named-arguments-anywhere"
+  static const bool named_arguments_anywhere = false;
+
   /// Expiration status of the experiment "non-nullable"
   static const bool non_nullable = false;
 
@@ -322,6 +380,9 @@
   /// Expiration status of the experiment "spread-collections"
   static const bool spread_collections = true;
 
+  /// Expiration status of the experiment "super-parameters"
+  static const bool super_parameters = false;
+
   /// Expiration status of the experiment "test-experiment"
   static const bool test_experiment = false;
 
@@ -351,6 +412,9 @@
   bool get control_flow_collections =>
       isEnabled(ExperimentalFeatures.control_flow_collections);
 
+  /// Current state for the flag "enhanced-enums"
+  bool get enhanced_enums => isEnabled(ExperimentalFeatures.enhanced_enums);
+
   /// Current state for the flag "extension-methods"
   bool get extension_methods =>
       isEnabled(ExperimentalFeatures.extension_methods);
@@ -361,6 +425,10 @@
   /// Current state for the flag "generic-metadata"
   bool get generic_metadata => isEnabled(ExperimentalFeatures.generic_metadata);
 
+  /// Current state for the flag "named-arguments-anywhere"
+  bool get named_arguments_anywhere =>
+      isEnabled(ExperimentalFeatures.named_arguments_anywhere);
+
   /// Current state for the flag "non-nullable"
   bool get non_nullable => isEnabled(ExperimentalFeatures.non_nullable);
 
@@ -375,6 +443,9 @@
   bool get spread_collections =>
       isEnabled(ExperimentalFeatures.spread_collections);
 
+  /// Current state for the flag "super-parameters"
+  bool get super_parameters => isEnabled(ExperimentalFeatures.super_parameters);
+
   /// Current state for the flag "test-experiment"
   bool get test_experiment => isEnabled(ExperimentalFeatures.test_experiment);
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart b/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart
index d4d3e04..99140ad 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_byte_store.dart
@@ -41,10 +41,10 @@
   }
 
   @override
-  List<int>? get(String key) => _fileByteStore.get(key);
+  Uint8List? get(String key) => _fileByteStore.get(key);
 
   @override
-  void put(String key, List<int> bytes) {
+  void put(String key, Uint8List bytes) {
     _fileByteStore.put(key, bytes);
     // Update the current size.
     _bytesWrittenSinceCleanup += bytes.length;
@@ -146,7 +146,7 @@
 
   final String _cachePath;
   final String _tempSuffix;
-  final Map<String, List<int>> _writeInProgress = {};
+  final Map<String, Uint8List> _writeInProgress = {};
   final FuturePool _pool = FuturePool(20);
 
   /// If the same cache path is used from more than one isolate of the same
@@ -156,7 +156,7 @@
             '-temp-$pid${tempNameSuffix.isEmpty ? '' : '-$tempNameSuffix'}';
 
   @override
-  List<int>? get(String key) {
+  Uint8List? get(String key) {
     if (!_canShard(key)) return null;
 
     var bytes = _writeInProgress[key];
@@ -176,12 +176,12 @@
   }
 
   @override
-  void put(String key, List<int> bytes) {
+  void put(String key, Uint8List bytes) {
     if (!_canShard(key)) return;
 
     _writeInProgress[key] = bytes;
 
-    final List<int> wrappedBytes = _validator.wrapData(bytes);
+    final wrappedBytes = _validator.wrapData(bytes);
 
     // We don't wait for the write and rename to complete.
     _pool.execute(() async {
@@ -225,7 +225,7 @@
 
   /// If the [rawBytes] have the valid version and checksum, extract and
   /// return the data from it. Otherwise return `null`.
-  List<int>? getData(List<int> rawBytes) {
+  Uint8List? getData(Uint8List rawBytes) {
     // There must be at least the version and the checksum in the raw bytes.
     if (rawBytes.length < 4) {
       return null;
@@ -238,7 +238,7 @@
     }
 
     // Check the checksum of the data.
-    List<int> data = rawBytes.sublist(0, len);
+    var data = rawBytes.sublist(0, len);
     int checksum = fletcher16(data);
     if (rawBytes[len + 2] != checksum & 0xFF ||
         rawBytes[len + 3] != (checksum >> 8) & 0xFF) {
@@ -251,7 +251,7 @@
 
   /// Return bytes that include the given [data] plus the current version and
   /// the checksum of the [data].
-  List<int> wrapData(List<int> data) {
+  Uint8List wrapData(Uint8List data) {
     int len = data.length;
     var bytes = Uint8List(len + 4);
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_content_cache.dart b/pkg/analyzer/lib/src/dart/analysis/file_content_cache.dart
index 4e1e989..f87ee8e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_content_cache.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_content_cache.dart
@@ -42,7 +42,7 @@
   void invalidateAll() {}
 
   FileContent _read(String path) {
-    List<int> contentBytes;
+    Uint8List contentBytes;
     String content;
     bool exists;
     try {
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 410a7ce..f0f35eb 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -21,6 +21,7 @@
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/analysis/referenced_names.dart';
 import 'package:analyzer/src/dart/analysis/unlinked_api_signature.dart';
+import 'package:analyzer/src/dart/analysis/unlinked_data.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/scanner/reader.dart';
 import 'package:analyzer/src/dart/scanner/scanner.dart';
@@ -31,8 +32,6 @@
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/source/source_resource.dart';
 import 'package:analyzer/src/summary/api_signature.dart';
-import 'package:analyzer/src/summary/format.dart';
-import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary2/informative_data.dart';
 import 'package:analyzer/src/util/either.dart';
@@ -120,16 +119,12 @@
   String? _content;
   String? _contentHash;
   LineInfo? _lineInfo;
-  Set<String>? _definedClassMemberNames;
-  Set<String>? _definedTopLevelNames;
-  Set<String>? _referencedNames;
-  List<int>? _unlinkedSignature;
+  Uint8List? _unlinkedSignature;
   String? _unlinkedKey;
-  String? _informativeKey;
   AnalysisDriverUnlinkedUnit? _driverUnlinkedUnit;
-  List<int>? _apiSignature;
+  Uint8List? _apiSignature;
 
-  UnlinkedUnit2? _unlinked2;
+  UnlinkedUnit? _unlinked2;
 
   List<FileState?>? _importedFiles;
   List<FileState?>? _exportedFiles;
@@ -140,7 +135,6 @@
   Set<FileState>? _directReferencedLibraries;
 
   LibraryCycle? _libraryCycle;
-  String? _transitiveSignature;
 
   /// The flag that shows whether the file has an error or warning that
   /// might be fixed by a change to another file.
@@ -157,7 +151,7 @@
   );
 
   /// The unlinked API signature of the file.
-  List<int> get apiSignature => _apiSignature!;
+  Uint8List get apiSignature => _apiSignature!;
 
   /// The content of the file.
   String get content => _content!;
@@ -167,14 +161,12 @@
 
   /// The class member names defined by the file.
   Set<String> get definedClassMemberNames {
-    return _definedClassMemberNames ??=
-        _driverUnlinkedUnit!.definedClassMemberNames.toSet();
+    return _driverUnlinkedUnit!.definedClassMemberNames;
   }
 
   /// The top-level names defined by the file.
   Set<String> get definedTopLevelNames {
-    return _definedTopLevelNames ??=
-        _driverUnlinkedUnit!.definedTopLevelNames.toSet();
+    return _driverUnlinkedUnit!.definedTopLevelNames;
   }
 
   /// Return the set of all directly referenced files - imported, exported or
@@ -297,7 +289,7 @@
 
   /// The external names referenced by the file.
   Set<String> get referencedNames {
-    return _referencedNames ??= _driverUnlinkedUnit!.referencedNames.toSet();
+    return _driverUnlinkedUnit!.referencedNames;
   }
 
   @visibleForTesting
@@ -320,51 +312,30 @@
 
   /// Return the signature of the file, based on API signatures of the
   /// transitive closure of imported / exported files.
+  /// TODO(scheglov) Remove it.
   String get transitiveSignature {
-    libraryCycle; // sets _transitiveSignature
-    _transitiveSignature ??= _invalidTransitiveSignature;
-    return _transitiveSignature!;
+    var librarySignatureBuilder = ApiSignature()
+      ..addString(uriStr)
+      ..addString(libraryCycle.transitiveSignature);
+    return librarySignatureBuilder.toHex();
   }
 
-  /// The [UnlinkedUnit2] of the file.
-  UnlinkedUnit2 get unlinked2 => _unlinked2!;
+  /// The [UnlinkedUnit] of the file.
+  UnlinkedUnit get unlinked2 => _unlinked2!;
 
   /// The MD5 signature based on the content, feature sets, language version.
-  List<int> get unlinkedSignature => _unlinkedSignature!;
+  Uint8List get unlinkedSignature => _unlinkedSignature!;
 
   /// Return the [uri] string.
   String get uriStr => uri.toString();
 
-  String get _invalidTransitiveSignature {
-    return (ApiSignature()
-          ..addString(path)
-          ..addBytes(unlinkedSignature))
-        .toHex();
-  }
-
   @override
   bool operator ==(Object other) {
     return other is FileState && other.uri == uri;
   }
 
-  Uint8List getInformativeBytes({CompilationUnit? unit}) {
-    var bytes = _fsState._byteStore.get(_informativeKey!) as Uint8List?;
-    if (bytes == null) {
-      unit ??= parse();
-      bytes = writeUnitInformative(unit);
-      _fsState._byteStore.put(_informativeKey!, bytes);
-    }
-    return bytes;
-  }
-
-  void internal_setLibraryCycle(LibraryCycle? cycle, String? signature) {
-    if (cycle == null) {
-      _libraryCycle = null;
-      _transitiveSignature = null;
-    } else {
-      _libraryCycle = cycle;
-      _transitiveSignature = signature;
-    }
+  void internal_setLibraryCycle(LibraryCycle? cycle) {
+    _libraryCycle = cycle;
   }
 
   /// Return a new parsed unresolved [CompilationUnit].
@@ -412,21 +383,17 @@
       signature.addBool(_exists!);
       _unlinkedSignature = signature.toByteList();
       var signatureHex = hex.encode(_unlinkedSignature!);
-      _unlinkedKey = '$signatureHex.unlinked2';
       // TODO(scheglov) Use the path as the key, and store the signature.
-      _informativeKey = '$signatureHex.ast';
+      _unlinkedKey = '$signatureHex.unlinked2';
     }
 
-    // Prepare bytes of the unlinked bundle - existing or new.
-    var bytes = _getUnlinkedBytes();
-
-    // Read the unlinked bundle.
-    _driverUnlinkedUnit = AnalysisDriverUnlinkedUnit.fromBuffer(bytes);
-    _unlinked2 = _driverUnlinkedUnit!.unit2;
+    // Prepare the unlinked unit.
+    _driverUnlinkedUnit = _getUnlinkedUnit();
+    _unlinked2 = _driverUnlinkedUnit!.unit;
     _lineInfo = LineInfo(_unlinked2!.lineStarts);
 
     // Prepare API signature.
-    var newApiSignature = Uint8List.fromList(_unlinked2!.apiSignature);
+    var newApiSignature = _unlinked2!.apiSignature;
     bool apiSignatureChanged = _apiSignature != null &&
         !_equalByteLists(_apiSignature, newApiSignature);
     _apiSignature = newApiSignature;
@@ -506,41 +473,37 @@
     return _fsState.getFileForUri(absoluteUri);
   }
 
-  /// Return the bytes of the unlinked summary - existing or new.
-  List<int> _getUnlinkedBytes() {
+  /// Return the unlinked unit, from bytes or new.
+  AnalysisDriverUnlinkedUnit _getUnlinkedUnit() {
     var bytes = _fsState._byteStore.get(_unlinkedKey!);
     if (bytes != null && bytes.isNotEmpty) {
-      return bytes;
+      return AnalysisDriverUnlinkedUnit.fromBytes(bytes);
     }
 
     var unit = parse();
     return _fsState._logger.run('Create unlinked for $path', () {
       var unlinkedUnit = serializeAstUnlinked2(unit);
       var definedNames = computeDefinedNames(unit);
-      var referencedNames = computeReferencedNames(unit).toList();
-      var subtypedNames = computeSubtypedNames(unit).toList();
-      var bytes = AnalysisDriverUnlinkedUnitBuilder(
-        unit2: unlinkedUnit,
-        definedTopLevelNames: definedNames.topLevelNames.toList(),
-        definedClassMemberNames: definedNames.classMemberNames.toList(),
+      var referencedNames = computeReferencedNames(unit);
+      var subtypedNames = computeSubtypedNames(unit);
+      var driverUnlinkedUnit = AnalysisDriverUnlinkedUnit(
+        definedTopLevelNames: definedNames.topLevelNames,
+        definedClassMemberNames: definedNames.classMemberNames,
         referencedNames: referencedNames,
         subtypedNames: subtypedNames,
-      ).toBuffer();
+        unit: unlinkedUnit,
+      );
+      var bytes = driverUnlinkedUnit.toBytes();
       _fsState._byteStore.put(_unlinkedKey!, bytes);
       counterUnlinkedBytes += bytes.length;
       counterUnlinkedLinkedBytes += bytes.length;
-      return bytes;
+      return driverUnlinkedUnit;
     });
   }
 
   /// Invalidate any data that depends on the current unlinked data of the file,
   /// because [refresh] is going to recompute the unlinked data.
   void _invalidateCurrentUnresolvedData() {
-    // Invalidate unlinked information.
-    _definedTopLevelNames = null;
-    _definedClassMemberNames = null;
-    _referencedNames = null;
-
     if (_driverUnlinkedUnit != null) {
       for (var name in _driverUnlinkedUnit!.subtypedNames) {
         var files = _fsState._subtypedNameToFiles[name];
@@ -596,9 +559,9 @@
     return directive.uri;
   }
 
-  static UnlinkedUnit2Builder serializeAstUnlinked2(CompilationUnit unit) {
-    var exports = <UnlinkedNamespaceDirectiveBuilder>[];
-    var imports = <UnlinkedNamespaceDirectiveBuilder>[];
+  static UnlinkedUnit serializeAstUnlinked2(CompilationUnit unit) {
+    var exports = <UnlinkedNamespaceDirective>[];
+    var imports = <UnlinkedNamespaceDirective>[];
     var parts = <String>[];
     var hasDartCoreImport = false;
     var hasLibraryDirective = false;
@@ -624,19 +587,23 @@
     }
     if (!hasDartCoreImport) {
       imports.add(
-        UnlinkedNamespaceDirectiveBuilder(
+        UnlinkedNamespaceDirective(
+          configurations: [],
           uri: 'dart:core',
         ),
       );
     }
-    return UnlinkedUnit2Builder(
-      apiSignature: computeUnlinkedApiSignature(unit),
+    return UnlinkedUnit(
+      apiSignature: Uint8List.fromList(computeUnlinkedApiSignature(unit)),
       exports: exports,
-      imports: imports,
-      parts: parts,
       hasLibraryDirective: hasLibraryDirective,
       hasPartOfDirective: hasPartOfDirective,
-      lineStarts: unit.lineInfo!.lineStarts,
+      imports: imports,
+      informativeBytes: writeUnitInformative(unit),
+      lineStarts: Uint32List.fromList(unit.lineInfo!.lineStarts),
+      partOfName: null,
+      partOfUri: null,
+      parts: parts,
     );
   }
 
@@ -658,13 +625,13 @@
     return true;
   }
 
-  static UnlinkedNamespaceDirectiveBuilder _serializeNamespaceDirective(
+  static UnlinkedNamespaceDirective _serializeNamespaceDirective(
       NamespaceDirective directive) {
-    return UnlinkedNamespaceDirectiveBuilder(
+    return UnlinkedNamespaceDirective(
       configurations: directive.configurations.map((configuration) {
         var name = configuration.name.components.join('.');
         var value = configuration.value?.stringValue ?? '';
-        return UnlinkedNamespaceDirectiveConfigurationBuilder(
+        return UnlinkedNamespaceDirectiveConfiguration(
           name: name,
           value: value,
           uri: configuration.uri.stringValue ?? '',
@@ -966,15 +933,6 @@
     _clearFiles();
   }
 
-  /// Reset URI resolution, and forget all files. So, the next time any file is
-  /// requested, it will be read, and its whole (potentially different) graph
-  /// will be built.
-  void resetUriResolution() {
-    _sourceFactory.clearCache();
-    _fileContentCache.invalidateAll();
-    _clearFiles();
-  }
-
   void _addFileWithPath(String path, FileState file) {
     var files = _pathToFiles[path];
     if (files == null) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_tracker.dart b/pkg/analyzer/lib/src/dart/analysis/file_tracker.dart
index 45ea739..d183ecc 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_tracker.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_tracker.dart
@@ -160,11 +160,6 @@
     _pendingFiles.addAll(addedFiles);
   }
 
-  /// Schedule all added files for analysis.
-  void scheduleAllAddedFiles() {
-    _pendingFiles.addAll(addedFiles);
-  }
-
   /// Verify the API signature for the file with the given [path], and decide
   /// which linked libraries should be invalidated, and files reanalyzed.
   FileState verifyApiSignature(String path) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 5c8d8e7..e3b952f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -579,21 +579,26 @@
 
   @override
   visitCommentReference(CommentReference node) {
-    var identifier = node.identifier;
-    var element = identifier.staticElement;
-    if (element is ConstructorElement) {
-      if (identifier is PrefixedIdentifier) {
-        var offset = identifier.prefix.end;
-        var length = identifier.end - offset;
-        recordRelationOffset(
-            element, IndexRelationKind.IS_REFERENCED_BY, offset, length, true);
-        return;
-      } else {
-        var offset = identifier.end;
-        recordRelationOffset(
-            element, IndexRelationKind.IS_REFERENCED_BY, offset, 0, true);
-        return;
+    var expression = node.expression;
+    if (expression is Identifier) {
+      var element = expression.staticElement;
+      if (element is ConstructorElement) {
+        if (expression is PrefixedIdentifier) {
+          var offset = expression.prefix.end;
+          var length = expression.end - offset;
+          recordRelationOffset(element, IndexRelationKind.IS_REFERENCED_BY,
+              offset, length, true);
+          return;
+        } else {
+          var offset = expression.end;
+          recordRelationOffset(
+              element, IndexRelationKind.IS_REFERENCED_BY, offset, 0, true);
+          return;
+        }
       }
+    } else {
+      throw UnimplementedError('Unhandled CommentReference expression type: '
+          '${expression.runtimeType}');
     }
 
     return super.visitCommentReference(node);
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 04235d9..315b856 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -532,10 +532,14 @@
             var importedLibrary = importElement.importedLibrary;
             if (importedLibrary is LibraryElementImpl) {
               if (importedLibrary.hasPartOfDirective) {
+                // It is safe to assume that `directive.uri.stringValue` is
+                // non-`null`, because the only time it is `null` is if the URI
+                // contains a string interpolation, in which case the import
+                // would never have resolved in the first place.
                 libraryErrorReporter.reportErrorForNode(
                     CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY,
                     directive.uri,
-                    [directive.uri]);
+                    [directive.uri.stringValue!]);
               }
             }
           }
@@ -547,10 +551,14 @@
             var exportedLibrary = exportElement.exportedLibrary;
             if (exportedLibrary is LibraryElementImpl) {
               if (exportedLibrary.hasPartOfDirective) {
+                // It is safe to assume that `directive.uri.stringValue` is
+                // non-`null`, because the only time it is `null` is if the URI
+                // contains a string interpolation, in which case the export
+                // would never have resolved in the first place.
                 libraryErrorReporter.reportErrorForNode(
                     CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
                     directive.uri,
-                    [directive.uri]);
+                    [directive.uri.stringValue!]);
               }
             }
           }
@@ -640,17 +648,6 @@
 
     var unitElement = unit.declaredElement as CompilationUnitElementImpl;
 
-    // TODO(scheglov) Hack: set types for top-level variables
-    // Otherwise TypeResolverVisitor will set declared types, and because we
-    // don't run InferStaticVariableTypeTask, we will stuck with these declared
-    // types. And we don't need to run this task - resynthesized elements have
-    // inferred types.
-    for (var e in unitElement.topLevelVariables) {
-      if (!e.isSynthetic) {
-        e.type;
-      }
-    }
-
     unit.accept(
       ResolutionVisitor(
         unitElement: unitElement,
@@ -696,15 +693,18 @@
         return null;
       }
       return _sourceFactory.resolveUri(file.source, uriContent);
-    } else if (code == UriValidationCode.URI_WITH_DART_EXT_SCHEME) {
-      return null;
     } else if (code == UriValidationCode.URI_WITH_INTERPOLATION) {
       _getErrorReporter(file).reportErrorForNode(
           CompileTimeErrorCode.URI_WITH_INTERPOLATION, uriLiteral);
       return null;
     } else if (code == UriValidationCode.INVALID_URI) {
+      // It is safe to assume [uriContent] is non-null because the only way for
+      // it to be null is if the string literal contained an interpolation, and
+      // in that case the validation code would have been
+      // UriValidationCode.URI_WITH_INTERPOLATION.
+      assert(uriContent != null);
       _getErrorReporter(file).reportErrorForNode(
-          CompileTimeErrorCode.INVALID_URI, uriLiteral, [uriContent]);
+          CompileTimeErrorCode.INVALID_URI, uriLiteral, [uriContent!]);
       return null;
     }
     return null;
@@ -783,13 +783,25 @@
         return;
       }
     }
-    StringLiteral uriLiteral = directive.uri;
+
+    if (uriContent != null && uriContent.startsWith('dart-ext:')) {
+      _getErrorReporter(file).reportErrorForNode(
+        CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION,
+        directive.uri,
+      );
+      return;
+    }
+
     CompileTimeErrorCode errorCode = CompileTimeErrorCode.URI_DOES_NOT_EXIST;
     if (isGeneratedSource(source)) {
       errorCode = CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED;
     }
+    // It is safe to assume that [uriContent] is non-null because the only way
+    // for it to be null is if the string literal contained an interpolation,
+    // and in that case the call to `directive.validate()` above would have
+    // returned a non-null validation code.
     _getErrorReporter(file)
-        .reportErrorForNode(errorCode, uriLiteral, [uriContent]);
+        .reportErrorForNode(errorCode, directive.uri, [uriContent!]);
   }
 
   /// Check each directive in the given [unit] to see if the referenced source
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 461b256..dbdb140 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -36,8 +36,6 @@
 ///
 /// Currently this is implemented as a wrapper around [AnalysisContext].
 class LibraryContext {
-  static const _maxLinkedDataInBytes = 64 * 1024 * 1024;
-
   final LibraryContextTestView testView;
   final PerformanceLog logger;
   final ByteStore byteStore;
@@ -45,11 +43,6 @@
   final SummaryDataStore? externalSummaries;
   final SummaryDataStore store = SummaryDataStore([]);
 
-  /// The size of the linked data that is loaded by this context.
-  /// When it reaches [_maxLinkedDataInBytes] the whole context is thrown away.
-  /// We use it as an approximation for the heap size of elements.
-  final int _linkedDataInBytes = 0;
-
   late final AnalysisContextImpl analysisContext;
   late LinkedElementFactory elementFactory;
 
@@ -117,12 +110,12 @@
       var unitsInformativeBytes = <Uri, Uint8List>{};
       for (var library in cycle.libraries) {
         for (var file in library.libraryFiles) {
-          unitsInformativeBytes[file.uri] = file.getInformativeBytes();
+          unitsInformativeBytes[file.uri] = file.unlinked2.informativeBytes;
         }
       }
 
-      var resolutionKey = cycle.transitiveSignature! + '.linked_bundle';
-      var resolutionBytes = byteStore.get(resolutionKey) as Uint8List?;
+      var resolutionKey = cycle.transitiveSignature + '.linked_bundle';
+      var resolutionBytes = byteStore.get(resolutionKey);
 
       if (resolutionBytes == null) {
         librariesLinkedTimer.start();
@@ -175,7 +168,7 @@
         link2.LinkResult linkResult;
         try {
           timerLinking.start();
-          linkResult = link2.link(elementFactory, inputLibraries, true);
+          linkResult = link2.link(elementFactory, inputLibraries);
           librariesLinked += cycle.libraries.length;
           counterLinkedLibraries += inputLibraries.length;
           timerLinking.stop();
@@ -224,15 +217,6 @@
     timerLoad2.stop();
   }
 
-  /// Return `true` if this context grew too large, and should be recreated.
-  ///
-  /// It might have been used to analyze libraries that we don't need anymore,
-  /// and because loading libraries is not very expensive (but not free), the
-  /// simplest way to get rid of the garbage is to throw away everything.
-  bool pack() {
-    return _linkedDataInBytes > _maxLinkedDataInBytes;
-  }
-
   void _createElementFactory() {
     elementFactory = LinkedElementFactory(
       analysisContext,
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_graph.dart b/pkg/analyzer/lib/src/dart/analysis/library_graph.dart
index 2d5b660..ff481c5 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_graph.dart
@@ -20,10 +20,10 @@
 /// Information about libraries that reference each other, so form a cycle.
 class LibraryCycle {
   /// The libraries that belong to this cycle.
-  final List<FileState> libraries = [];
+  final List<FileState> libraries;
 
   /// The library cycles that this cycle references directly.
-  final Set<LibraryCycle> directDependencies = <LibraryCycle>{};
+  final Set<LibraryCycle> directDependencies;
 
   /// The cycles that use this cycle, used to [invalidate] transitively.
   final List<LibraryCycle> _directUsers = [];
@@ -34,7 +34,17 @@
   /// transitive signatures of the cycles that the [libraries] reference
   /// directly.  So, indirectly it is based on the transitive closure of all
   /// files that [libraries] reference (but we don't compute these files).
-  String? transitiveSignature;
+  String transitiveSignature;
+
+  LibraryCycle({
+    required this.libraries,
+    required this.directDependencies,
+    required this.transitiveSignature,
+  }) {
+    for (var directDependency in directDependencies) {
+      directDependency._directUsers.add(this);
+    }
+  }
 
   /// Invalidate this cycle and any cycles that directly or indirectly use it.
   ///
@@ -42,12 +52,14 @@
   /// [libraries] that share this [LibraryCycle] instance.
   void invalidate() {
     for (var library in libraries) {
-      library.internal_setLibraryCycle(null, null);
+      library.internal_setLibraryCycle(null);
     }
-    for (var user in _directUsers) {
+    for (var user in _directUsers.toList()) {
       user.invalidate();
     }
-    _directUsers.clear();
+    for (var directDependency in directDependencies) {
+      directDependency._directUsers.remove(this);
+    }
   }
 
   @override
@@ -87,8 +99,6 @@
 
   @override
   void evaluateScc(List<_LibraryNode> scc) {
-    var cycle = LibraryCycle();
-
     var signature = ApiSignature();
     signature.addUint32List(_salt);
 
@@ -100,17 +110,20 @@
     });
 
     // Append direct referenced cycles.
+    var directDependencies = <LibraryCycle>{};
     for (var node in scc) {
       var file = node.file;
       _appendDirectlyReferenced(
-          cycle, signature, file.importedFiles.whereNotNull().toList());
-      _appendDirectlyReferenced(
-          cycle, signature, file.exportedFiles.whereNotNull().toList());
+        directDependencies,
+        signature,
+        file.directReferencedLibraries.whereNotNull().toList(),
+      );
     }
 
     // Fill the cycle with libraries.
+    var libraries = <FileState>[];
     for (var node in scc) {
-      cycle.libraries.add(node.file);
+      libraries.add(node.file);
 
       signature.addLanguageVersion(node.file.packageLanguageVersion);
       signature.addString(node.file.uriStr);
@@ -122,20 +135,16 @@
       }
     }
 
-    // Compute the general library cycle signature.
-    cycle.transitiveSignature = signature.toHex();
+    // Create the LibraryCycle instance for the cycle.
+    var cycle = LibraryCycle(
+      libraries: libraries,
+      directDependencies: directDependencies,
+      transitiveSignature: signature.toHex(),
+    );
 
-    // Compute library specific signatures.
+    // Set the instance into the libraries.
     for (var node in scc) {
-      var librarySignatureBuilder = ApiSignature()
-        ..addString(node.file.uriStr)
-        ..addString(cycle.transitiveSignature!);
-      var librarySignature = librarySignatureBuilder.toHex();
-
-      node.file.internal_setLibraryCycle(
-        cycle,
-        librarySignature,
-      );
+      node.file.internal_setLibraryCycle(cycle);
     }
   }
 
@@ -144,7 +153,7 @@
   }
 
   void _appendDirectlyReferenced(
-    LibraryCycle cycle,
+    Set<LibraryCycle> directDependencies,
     ApiSignature signature,
     List<FileState> directlyReferenced,
   ) {
@@ -155,9 +164,8 @@
       // We get null when the library is a part of the cycle being build.
       if (referencedCycle == null) continue;
 
-      if (cycle.directDependencies.add(referencedCycle)) {
-        referencedCycle._directUsers.add(cycle);
-        signature.addString(referencedCycle.transitiveSignature!);
+      if (directDependencies.add(referencedCycle)) {
+        signature.addString(referencedCycle.transitiveSignature);
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index 9db2ec6..4856a55 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -16,9 +16,11 @@
   @override
   final AnalysisSession session;
 
+  @Deprecated('Use FileResult.path instead')
   @override
   final String path;
 
+  @Deprecated('Use FileResult.uri instead')
   @override
   final Uri uri;
 
@@ -63,7 +65,18 @@
       : super(session, path, uri);
 
   @override
+  // TODO(scheglov) Convert into a field.
+  // ignore: deprecated_member_use_from_same_package, unnecessary_overrides
+  String get path => super.path;
+
+  @Deprecated('Check for specific Result subtypes instead')
+  @override
   ResultState get state => ResultState.VALID;
+
+  @override
+  // TODO(scheglov) Convert into a field.
+  // ignore: deprecated_member_use_from_same_package, unnecessary_overrides
+  Uri get uri => super.uri;
 }
 
 class LibraryElementResultImpl implements LibraryElementResult {
@@ -82,6 +95,7 @@
       AnalysisSession session, String path, Uri uri, this.units)
       : super(session, path, uri);
 
+  @Deprecated('Check for specific Result subtypes instead')
   @override
   ResultState get state {
     return ResultState.VALID;
@@ -89,10 +103,6 @@
 
   @override
   ElementDeclarationResult? getElementDeclaration(Element element) {
-    if (state != ResultState.VALID) {
-      throw StateError('The result is not valid: $state');
-    }
-
     if (element is CompilationUnitElement ||
         element is LibraryElement ||
         element.isSynthetic ||
@@ -136,6 +146,7 @@
       this.content, LineInfo lineInfo, bool isPart, this.unit, this.errors)
       : super(session, path, uri, lineInfo, isPart);
 
+  @Deprecated('Check for specific Result subtypes instead')
   @override
   ResultState get state => ResultState.VALID;
 }
@@ -168,6 +179,7 @@
       AnalysisSession session, String path, Uri uri, this.element, this.units)
       : super(session, path, uri);
 
+  @Deprecated('Check for specific Result subtypes instead')
   @override
   ResultState get state {
     return ResultState.VALID;
@@ -178,10 +190,6 @@
 
   @override
   ElementDeclarationResult? getElementDeclaration(Element element) {
-    if (state != ResultState.VALID) {
-      throw StateError('The result is not valid: $state');
-    }
-
     if (element is CompilationUnitElement ||
         element is LibraryElement ||
         element.isSynthetic ||
@@ -194,13 +202,8 @@
       (r) => r.path == elementPath,
       orElse: () {
         var elementStr = element.getDisplayString(withNullability: true);
-        var buffer = StringBuffer();
-        buffer.write('Element (${element.runtimeType}) $elementStr');
-        buffer.writeln(' is not defined in this library.');
-        // TODO(scheglov) https://github.com/dart-lang/sdk/issues/45430
-        buffer.writeln('elementPath: $elementPath');
-        buffer.writeln('unitPaths: ${units.map((e) => e.path).toList()}');
-        throw ArgumentError('$buffer');
+        throw ArgumentError('Element (${element.runtimeType}) $elementStr is '
+            'not defined in this library.');
       },
     );
 
@@ -247,8 +250,9 @@
     return unit.declaredElement!.library;
   }
 
+  @Deprecated('Check for specific Result subtypes instead')
   @override
-  ResultState get state => exists ? ResultState.VALID : ResultState.NOT_A_FILE;
+  ResultState get state => ResultState.VALID;
 
   @override
   TypeProvider get typeProvider => libraryElement.typeProvider;
@@ -257,7 +261,7 @@
   TypeSystemImpl get typeSystem => libraryElement.typeSystem as TypeSystemImpl;
 }
 
-class UnitElementResultImpl extends AnalysisResultImpl
+class UnitElementResultImpl extends FileResultImpl
     implements UnitElementResult {
   @override
   final String signature;
@@ -266,9 +270,10 @@
   final CompilationUnitElement element;
 
   UnitElementResultImpl(AnalysisSession session, String path, Uri uri,
-      this.signature, this.element)
-      : super(session, path, uri);
+      LineInfo lineInfo, bool isPart, this.signature, this.element)
+      : super(session, path, uri, lineInfo, isPart);
 
+  @Deprecated('Check for specific Result subtypes instead')
   @override
   ResultState get state => ResultState.VALID;
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 9a79ce1..4e0449b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -54,7 +54,7 @@
     List<String> files = await _driver.getFilesDefiningClassMemberName(name);
     for (String file in files) {
       if (searchedFiles.add(file, this)) {
-        var unitResult = await _driver.getUnitElement2(file);
+        var unitResult = await _driver.getUnitElement(file);
         if (unitResult is UnitElementResult) {
           unitResult.element.classes.forEach(addElements);
           unitResult.element.mixins.forEach(addElements);
@@ -175,7 +175,7 @@
 
     List<FileState> knownFiles = _driver.fsState.knownFiles.toList();
     for (FileState file in knownFiles) {
-      var unitResult = await _driver.getUnitElement2(file.path);
+      var unitResult = await _driver.getUnitElement(file.path);
       if (unitResult is UnitElementResult) {
         CompilationUnitElement unitElement = unitResult.element;
         unitElement.accessors.forEach(addElement);
@@ -284,7 +284,7 @@
   }
 
   Future<CompilationUnitElement?> _getUnitElement(String file) async {
-    var result = await _driver.getUnitElement2(file);
+    var result = await _driver.getUnitElement(file);
     return result is UnitElementResult ? result.element : null;
   }
 
@@ -391,7 +391,7 @@
     LibraryElement libraryElement = element.library;
     for (CompilationUnitElement unitElement in libraryElement.units) {
       String unitPath = unitElement.source.fullName;
-      var unitResult = await _driver.getResult2(unitPath);
+      var unitResult = await _driver.getResult(unitPath);
       if (unitResult is ResolvedUnitResult) {
         var visitor = _ImportElementReferencesVisitor(element, unitElement);
         unitResult.unit.accept(visitor);
@@ -411,7 +411,7 @@
     List<SearchResult> results = <SearchResult>[];
     for (CompilationUnitElement unitElement in element.units) {
       String unitPath = unitElement.source.fullName;
-      var unitResult = await _driver.getResult2(unitPath);
+      var unitResult = await _driver.getResult(unitPath);
       if (unitResult is ResolvedUnitResult) {
         CompilationUnit unit = unitResult.unit;
         for (Directive directive in unit.directives) {
@@ -441,7 +441,7 @@
     }
 
     // Prepare the unit.
-    var unitResult = await _driver.getResult2(path);
+    var unitResult = await _driver.getResult(path);
     if (unitResult is! ResolvedUnitResult) {
       return const <SearchResult>[];
     }
@@ -494,7 +494,7 @@
     LibraryElement libraryElement = element.library;
     for (CompilationUnitElement unitElement in libraryElement.units) {
       String unitPath = unitElement.source.fullName;
-      var unitResult = await _driver.getResult2(unitPath);
+      var unitResult = await _driver.getResult(unitPath);
       if (unitResult is ResolvedUnitResult) {
         var visitor = _LocalReferencesVisitor(element, unitElement);
         unitResult.unit.accept(visitor);
diff --git a/pkg/analyzer/lib/src/dart/analysis/session.dart b/pkg/analyzer/lib/src/dart/analysis/session.dart
index 5bc5a9c..319ddc6 100644
--- a/pkg/analyzer/lib/src/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/session.dart
@@ -57,7 +57,7 @@
   @override
   Future<SomeErrorsResult> getErrors(String path) {
     _checkConsistency();
-    return _driver.getErrors2(path);
+    return _driver.getErrors(path);
   }
 
   @Deprecated('Use getErrors() instead')
@@ -69,7 +69,7 @@
   @override
   SomeFileResult getFile(String path) {
     _checkConsistency();
-    return _driver.getFileSync2(path);
+    return _driver.getFileSync(path);
   }
 
   @Deprecated('Use getFile() instead')
@@ -81,7 +81,7 @@
   @override
   Future<SomeLibraryElementResult> getLibraryByUri(String uri) {
     _checkConsistency();
-    return _driver.getLibraryByUri2(uri);
+    return _driver.getLibraryByUri(uri);
   }
 
   @Deprecated('Use getLibraryByUri() instead')
@@ -93,7 +93,7 @@
   @override
   SomeParsedLibraryResult getParsedLibrary(String path) {
     _checkConsistency();
-    return _driver.getParsedLibrary2(path);
+    return _driver.getParsedLibrary(path);
   }
 
   @Deprecated('Use getParsedLibrary() instead')
@@ -110,7 +110,7 @@
       return NotElementOfThisSessionResult();
     }
 
-    return _driver.getParsedLibraryByUri2(element.source.uri);
+    return _driver.getParsedLibraryByUri(element.source.uri);
   }
 
   @Deprecated('Use getParsedLibraryByElement() instead')
@@ -122,7 +122,7 @@
   @override
   SomeParsedUnitResult getParsedUnit(String path) {
     _checkConsistency();
-    return _driver.parseFileSync2(path);
+    return _driver.parseFileSync(path);
   }
 
   @Deprecated('Use getParsedUnit() instead')
@@ -134,7 +134,7 @@
   @override
   Future<SomeResolvedLibraryResult> getResolvedLibrary(String path) {
     _checkConsistency();
-    return _driver.getResolvedLibrary2(path);
+    return _driver.getResolvedLibrary(path);
   }
 
   @Deprecated('Use getResolvedLibrary() instead')
@@ -155,7 +155,7 @@
       );
     }
 
-    return _driver.getResolvedLibraryByUri2(element.source.uri);
+    return _driver.getResolvedLibraryByUri(element.source.uri);
   }
 
   @Deprecated('Use getResolvedLibraryByElement() instead')
@@ -169,7 +169,7 @@
   @override
   Future<SomeResolvedUnitResult> getResolvedUnit(String path) {
     _checkConsistency();
-    return _driver.getResult2(path);
+    return _driver.getResult(path);
   }
 
   @Deprecated('Use getResolvedUnit() instead')
@@ -181,7 +181,7 @@
   @override
   Future<SomeUnitElementResult> getUnitElement(String path) {
     _checkConsistency();
-    return _driver.getUnitElement2(path);
+    return _driver.getUnitElement(path);
   }
 
   @Deprecated('Use getUnitElement() instead')
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 6dc30c4..1658a93 100644
--- a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
@@ -10,7 +12,7 @@
 /// Return the bytes of the unlinked API signature of the given [unit].
 ///
 /// If API signatures of two units are different, they may have different APIs.
-List<int> computeUnlinkedApiSignature(CompilationUnit unit) {
+Uint8List computeUnlinkedApiSignature(CompilationUnit unit) {
   var computer = _UnitApiSignatureComputer();
   computer.compute(unit);
   return computer.signature.toByteList();
diff --git a/pkg/analyzer/lib/src/dart/analysis/unlinked_data.dart b/pkg/analyzer/lib/src/dart/analysis/unlinked_data.dart
new file mode 100644
index 0000000..5ab1857
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/analysis/unlinked_data.dart
@@ -0,0 +1,219 @@
+// Copyright (c) 2021, 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:typed_data';
+
+import 'package:analyzer/src/summary2/data_reader.dart';
+import 'package:analyzer/src/summary2/data_writer.dart';
+
+/// Unlinked information about a compilation unit.
+class AnalysisDriverUnlinkedUnit {
+  /// Set of class member names defined by the unit.
+  final Set<String> definedClassMemberNames;
+
+  /// Set of top-level names defined by the unit.
+  final Set<String> definedTopLevelNames;
+
+  /// Set of external names referenced by the unit.
+  final Set<String> referencedNames;
+
+  /// Set of names which are used in `extends`, `with` or `implements` clauses
+  /// in the file. Import prefixes and type arguments are not included.
+  final Set<String> subtypedNames;
+
+  /// Unlinked information for the unit.
+  final UnlinkedUnit unit;
+
+  AnalysisDriverUnlinkedUnit({
+    required this.definedClassMemberNames,
+    required this.definedTopLevelNames,
+    required this.referencedNames,
+    required this.subtypedNames,
+    required this.unit,
+  });
+
+  factory AnalysisDriverUnlinkedUnit.fromBytes(Uint8List bytes) {
+    return AnalysisDriverUnlinkedUnit.read(
+      SummaryDataReader(bytes),
+    );
+  }
+
+  factory AnalysisDriverUnlinkedUnit.read(SummaryDataReader reader) {
+    return AnalysisDriverUnlinkedUnit(
+      definedClassMemberNames: reader.readStringUtf8Set(),
+      definedTopLevelNames: reader.readStringUtf8Set(),
+      referencedNames: reader.readStringUtf8Set(),
+      subtypedNames: reader.readStringUtf8Set(),
+      unit: UnlinkedUnit.read(reader),
+    );
+  }
+
+  Uint8List toBytes() {
+    var byteSink = ByteSink();
+    var sink = BufferedSink(byteSink);
+    write(sink);
+    return sink.flushAndTake();
+  }
+
+  void write(BufferedSink sink) {
+    sink.writeStringUtf8Iterable(definedClassMemberNames);
+    sink.writeStringUtf8Iterable(definedTopLevelNames);
+    sink.writeStringUtf8Iterable(referencedNames);
+    sink.writeStringUtf8Iterable(subtypedNames);
+    unit.write(sink);
+  }
+}
+
+/// Unlinked information about a namespace directive.
+class UnlinkedNamespaceDirective {
+  /// The configurations that control which library will actually be used.
+  final List<UnlinkedNamespaceDirectiveConfiguration> configurations;
+
+  /// The URI referenced by this directive, nad used by default when none
+  /// of the [configurations] matches.
+  final String uri;
+
+  UnlinkedNamespaceDirective({
+    required this.configurations,
+    required this.uri,
+  });
+
+  factory UnlinkedNamespaceDirective.read(SummaryDataReader reader) {
+    return UnlinkedNamespaceDirective(
+      configurations: reader.readTypedList(
+        () => UnlinkedNamespaceDirectiveConfiguration.read(reader),
+      ),
+      uri: reader.readStringUtf8(),
+    );
+  }
+
+  void write(BufferedSink sink) {
+    sink.writeList<UnlinkedNamespaceDirectiveConfiguration>(
+      configurations,
+      (x) {
+        x.write(sink);
+      },
+    );
+    sink.writeStringUtf8(uri);
+  }
+}
+
+/// Unlinked information about a namespace directive configuration.
+class UnlinkedNamespaceDirectiveConfiguration {
+  /// The name of the declared variable used in the condition.
+  final String name;
+
+  /// The URI to be used if the condition is true.
+  final String uri;
+
+  /// The value to which the value of the declared variable will be compared,
+  /// or the empty string if the condition does not include an equality test.
+  final String value;
+
+  UnlinkedNamespaceDirectiveConfiguration({
+    required this.name,
+    required this.uri,
+    required this.value,
+  });
+
+  factory UnlinkedNamespaceDirectiveConfiguration.read(
+    SummaryDataReader reader,
+  ) {
+    return UnlinkedNamespaceDirectiveConfiguration(
+      name: reader.readStringUtf8(),
+      uri: reader.readStringUtf8(),
+      value: reader.readStringUtf8(),
+    );
+  }
+
+  void write(BufferedSink sink) {
+    sink.writeStringUtf8(name);
+    sink.writeStringUtf8(uri);
+    sink.writeStringUtf8(value);
+  }
+}
+
+/// Unlinked information about a compilation unit.
+class UnlinkedUnit {
+  /// The MD5 hash signature of the API portion of this unit. It depends on all
+  /// tokens that might affect APIs of declarations in the unit.
+  /// TODO(scheglov) Do we need it?
+  final Uint8List apiSignature;
+
+  /// URIs of `export` directives.
+  final List<UnlinkedNamespaceDirective> exports;
+
+  /// Is `true` if the unit contains a `library` directive.
+  final bool hasLibraryDirective;
+
+  /// Is `true` if the unit contains a `part of` directive.
+  final bool hasPartOfDirective;
+
+  /// URIs of `import` directives.
+  final List<UnlinkedNamespaceDirective> imports;
+
+  /// Encoded informative data.
+  final Uint8List informativeBytes;
+
+  /// Offsets of the first character of each line in the source code.
+  final Uint32List lineStarts;
+
+  /// The library name of the `part of my.name;` directive.
+  final String? partOfName;
+
+  /// URI of the `part of 'uri';` directive.
+  final String? partOfUri;
+
+  /// URIs of `part` directives.
+  final List<String> parts;
+
+  UnlinkedUnit({
+    required this.apiSignature,
+    required this.exports,
+    required this.hasLibraryDirective,
+    required this.hasPartOfDirective,
+    required this.imports,
+    required this.informativeBytes,
+    required this.lineStarts,
+    required this.partOfName,
+    required this.partOfUri,
+    required this.parts,
+  });
+
+  factory UnlinkedUnit.read(SummaryDataReader reader) {
+    return UnlinkedUnit(
+      apiSignature: reader.readUint8List(),
+      exports: reader.readTypedList(
+        () => UnlinkedNamespaceDirective.read(reader),
+      ),
+      hasLibraryDirective: reader.readBool(),
+      hasPartOfDirective: reader.readBool(),
+      imports: reader.readTypedList(
+        () => UnlinkedNamespaceDirective.read(reader),
+      ),
+      informativeBytes: reader.readUint8List(),
+      lineStarts: reader.readUInt30List(),
+      partOfName: reader.readOptionalStringUtf8(),
+      partOfUri: reader.readOptionalStringUtf8(),
+      parts: reader.readStringUtf8List(),
+    );
+  }
+
+  void write(BufferedSink sink) {
+    sink.writeUint8List(apiSignature);
+    sink.writeList<UnlinkedNamespaceDirective>(exports, (x) {
+      x.write(sink);
+    });
+    sink.writeBool(hasLibraryDirective);
+    sink.writeBool(hasPartOfDirective);
+    sink.writeList<UnlinkedNamespaceDirective>(imports, (x) {
+      x.write(sink);
+    });
+    sink.writeUint8List(informativeBytes);
+    sink.writeUint30List(lineStarts);
+    sink.writeOptionalStringUtf8(partOfName);
+    sink.writeOptionalStringUtf8(partOfUri);
+    sink.writeStringUtf8Iterable(parts);
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 187181e..24e1241 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -1644,7 +1644,7 @@
   Token? abstractKeyword;
 
   /// The name of the superclass of the class being declared.
-  TypeNameImpl _superclass;
+  NamedTypeImpl _superclass;
 
   /// The with clause for this class.
   WithClauseImpl _withClause;
@@ -1711,14 +1711,14 @@
 
   @Deprecated('Use superclass2 instead')
   @override
-  TypeNameImpl get superclass => _superclass;
+  NamedTypeImpl get superclass => _superclass;
 
   set superclass(NamedType superclass) {
-    _superclass = _becomeParentOf(superclass as TypeNameImpl);
+    _superclass = _becomeParentOf(superclass as NamedTypeImpl);
   }
 
   @override
-  TypeNameImpl get superclass2 => _superclass;
+  NamedTypeImpl get superclass2 => _superclass;
 
   @override
   TypeParameterListImpl? get typeParameters => _typeParameters;
@@ -1856,6 +1856,9 @@
       CommentImpl(tokens, CommentType.END_OF_LINE, const <CommentReference>[]);
 }
 
+abstract class CommentReferableExpressionImpl extends ExpressionImpl
+    implements CommentReferableExpression {}
+
 /// A reference to a Dart element that is found within a documentation comment.
 ///
 ///    commentReference ::=
@@ -1866,31 +1869,40 @@
   @override
   Token? newKeyword;
 
-  /// The identifier being referenced.
-  IdentifierImpl _identifier;
+  /// The expression being referenced.
+  CommentReferableExpressionImpl _expression;
 
   /// Initialize a newly created reference to a Dart element. The [newKeyword]
   /// can be `null` if the reference is not to a constructor.
-  CommentReferenceImpl(this.newKeyword, this._identifier) {
-    _becomeParentOf(_identifier);
+  CommentReferenceImpl(this.newKeyword, this._expression) {
+    _becomeParentOf(_expression);
   }
 
   @override
-  Token get beginToken => newKeyword ?? _identifier.beginToken;
+  Token get beginToken => newKeyword ?? _expression.beginToken;
 
   @override
   Iterable<SyntacticEntity> get childEntities => ChildEntities()
     ..add(newKeyword)
-    ..add(_identifier);
+    ..add(_expression);
 
   @override
-  Token get endToken => _identifier.endToken;
+  Token get endToken => _expression.endToken;
 
   @override
-  IdentifierImpl get identifier => _identifier;
+  CommentReferableExpression get expression => _expression;
 
+  set expression(CommentReferableExpression expression) {
+    _expression = _becomeParentOf(expression as CommentReferableExpressionImpl);
+  }
+
+  @override
+  @Deprecated('Use expression instead')
+  IdentifierImpl get identifier => _expression as IdentifierImpl;
+
+  @Deprecated('Use expression= instead')
   set identifier(Identifier identifier) {
-    _identifier = _becomeParentOf(identifier as IdentifierImpl);
+    _expression = _becomeParentOf(identifier as CommentReferableExpressionImpl);
   }
 
   @override
@@ -1898,7 +1910,7 @@
 
   @override
   void visitChildren(AstVisitor visitor) {
-    _identifier.accept(visitor);
+    _expression.accept(visitor);
   }
 }
 
@@ -2594,7 +2606,7 @@
 ///        type ('.' identifier)?
 class ConstructorNameImpl extends AstNodeImpl implements ConstructorName {
   /// The name of the type defining the constructor.
-  TypeNameImpl _type;
+  NamedTypeImpl _type;
 
   /// The token for the period before the constructor name, or `null` if the
   /// specified constructor is the unnamed constructor.
@@ -2644,14 +2656,14 @@
 
   @Deprecated('Use type2 instead')
   @override
-  TypeNameImpl get type => _type;
+  NamedTypeImpl get type => _type;
 
   set type(NamedType type) {
-    _type = _becomeParentOf(type as TypeNameImpl);
+    _type = _becomeParentOf(type as NamedTypeImpl);
   }
 
   @override
-  TypeNameImpl get type2 => _type;
+  NamedTypeImpl get type2 => _type;
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitConstructorName(this);
@@ -2669,7 +2681,7 @@
 /// Objects of this type are not produced directly by the parser (because the
 /// parser cannot tell whether an identifier refers to a type); they are
 /// produced at resolution time.
-class ConstructorReferenceImpl extends ExpressionImpl
+class ConstructorReferenceImpl extends CommentReferableExpressionImpl
     implements ConstructorReference {
   ConstructorNameImpl _constructorName;
 
@@ -3638,7 +3650,7 @@
   Token extendsKeyword;
 
   /// The name of the class that is being extended.
-  TypeNameImpl _superclass;
+  NamedTypeImpl _superclass;
 
   /// Initialize a newly created extends clause.
   ExtendsClauseImpl(this.extendsKeyword, this._superclass) {
@@ -3658,14 +3670,14 @@
 
   @Deprecated('Use superclass2 instead')
   @override
-  TypeNameImpl get superclass => _superclass;
+  NamedTypeImpl get superclass => _superclass;
 
   set superclass(NamedType name) {
-    _superclass = _becomeParentOf(name as TypeNameImpl);
+    _superclass = _becomeParentOf(name as NamedTypeImpl);
   }
 
   @override
-  TypeNameImpl get superclass2 => _superclass;
+  NamedTypeImpl get superclass2 => _superclass;
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitExtendsClause(this);
@@ -5038,7 +5050,7 @@
 
 /// An expression representing a reference to a function, possibly with type
 /// arguments applied to it, e.g. the expression `print` in `var x = print;`.
-class FunctionReferenceImpl extends ExpressionImpl
+class FunctionReferenceImpl extends CommentReferableExpressionImpl
     implements FunctionReference {
   ExpressionImpl _function;
 
@@ -5573,7 +5585,8 @@
 ///    identifier ::=
 ///        [SimpleIdentifier]
 ///      | [PrefixedIdentifier]
-abstract class IdentifierImpl extends ExpressionImpl implements Identifier {
+abstract class IdentifierImpl extends CommentReferableExpressionImpl
+    implements Identifier {
   @override
   bool get isAssignable => true;
 }
@@ -5803,6 +5816,69 @@
   }
 }
 
+class ImplicitCallReferenceImpl extends ExpressionImpl
+    implements ImplicitCallReference {
+  ExpressionImpl _expression;
+
+  TypeArgumentListImpl? _typeArguments;
+
+  @override
+  List<DartType> typeArgumentTypes;
+
+  @override
+  MethodElement staticElement;
+
+  ImplicitCallReferenceImpl(
+    this._expression, {
+    required this.staticElement,
+    required TypeArgumentListImpl? typeArguments,
+    required this.typeArgumentTypes,
+  }) : _typeArguments = typeArguments {
+    _becomeParentOf(_expression);
+    _becomeParentOf(_typeArguments);
+  }
+
+  @override
+  Token get beginToken => expression.beginToken;
+
+  @override
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(expression)
+    ..add(typeArguments);
+
+  @override
+  Token get endToken => typeArguments?.endToken ?? expression.endToken;
+
+  @override
+  ExpressionImpl get expression => _expression;
+
+  set expression(ExpressionImpl value) {
+    _expression = _becomeParentOf(value);
+  }
+
+  @override
+  Precedence get precedence =>
+      typeArguments == null ? expression.precedence : Precedence.postfix;
+
+  @override
+  TypeArgumentListImpl? get typeArguments => _typeArguments;
+
+  set typeArguments(TypeArgumentListImpl? value) {
+    _typeArguments = _becomeParentOf(value);
+  }
+
+  @override
+  E? accept<E>(AstVisitor<E> visitor) {
+    return visitor.visitImplicitCallReference(this);
+  }
+
+  @override
+  void visitChildren(AstVisitor visitor) {
+    expression.accept(visitor);
+    typeArguments?.accept(visitor);
+  }
+}
+
 /// An import directive.
 ///
 ///    importDirective ::=
@@ -7378,6 +7454,82 @@
   }
 }
 
+/// The name of a type, which can optionally include type arguments.
+///
+///    typeName ::=
+///        [Identifier] typeArguments? '?'?
+/// ignore: deprecated_member_use_from_same_package
+class NamedTypeImpl extends TypeAnnotationImpl implements TypeName {
+  /// The name of the type.
+  IdentifierImpl _name;
+
+  /// The type arguments associated with the type, or `null` if there are no
+  /// type arguments.
+  TypeArgumentListImpl? _typeArguments;
+
+  @override
+  Token? question;
+
+  /// The type being named, or `null` if the AST structure has not been
+  /// resolved, or if this is part of a [ConstructorReference].
+  @override
+  DartType? type;
+
+  /// Initialize a newly created type name. The [typeArguments] can be `null` if
+  /// there are no type arguments.
+  NamedTypeImpl(this._name, this._typeArguments, {this.question}) {
+    _becomeParentOf(_name);
+    _becomeParentOf(_typeArguments);
+  }
+
+  @override
+  Token get beginToken => _name.beginToken;
+
+  @override
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_name)
+    ..add(_typeArguments)
+    ..add(question);
+
+  @override
+  Token get endToken => question ?? _typeArguments?.endToken ?? _name.endToken;
+
+  @override
+  bool get isDeferred {
+    Identifier identifier = name;
+    if (identifier is! PrefixedIdentifier) {
+      return false;
+    }
+    return identifier.isDeferred;
+  }
+
+  @override
+  bool get isSynthetic => _name.isSynthetic && _typeArguments == null;
+
+  @override
+  IdentifierImpl get name => _name;
+
+  set name(Identifier identifier) {
+    _name = _becomeParentOf(identifier as IdentifierImpl);
+  }
+
+  @override
+  TypeArgumentListImpl? get typeArguments => _typeArguments;
+
+  set typeArguments(TypeArgumentList? typeArguments) {
+    _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl?);
+  }
+
+  @override
+  E? accept<E>(AstVisitor<E> visitor) => visitor.visitNamedType(this);
+
+  @override
+  void visitChildren(AstVisitor visitor) {
+    _name.accept(visitor);
+    _typeArguments?.accept(visitor);
+  }
+}
+
 /// A node that represents a directive that impacts the namespace of a library.
 ///
 ///    directive ::=
@@ -8310,7 +8462,7 @@
 ///
 ///    propertyAccess ::=
 ///        [Expression] '.' [SimpleIdentifier]
-class PropertyAccessImpl extends ExpressionImpl
+class PropertyAccessImpl extends CommentReferableExpressionImpl
     with NullShortableExpressionImpl
     implements PropertyAccess {
   /// The expression computing the object defining the property being accessed.
@@ -10214,8 +10366,9 @@
 /// The `.staticType` getter returns the type of the expression (which will
 /// always be the type `Type`).  To see the type represented by the type literal
 /// use `.typeName.type`.
-class TypeLiteralImpl extends ExpressionImpl implements TypeLiteral {
-  TypeNameImpl _typeName;
+class TypeLiteralImpl extends CommentReferableExpressionImpl
+    implements TypeLiteral {
+  NamedTypeImpl _typeName;
 
   TypeLiteralImpl(this._typeName) {
     _becomeParentOf(_typeName);
@@ -10237,13 +10390,13 @@
       : Precedence.postfix;
 
   @override
-  TypeNameImpl get type => _typeName;
+  NamedTypeImpl get type => _typeName;
 
   @Deprecated('Use namedType instead')
   @override
-  TypeNameImpl get typeName => _typeName;
+  NamedTypeImpl get typeName => _typeName;
 
-  set typeName(TypeNameImpl value) {
+  set typeName(NamedTypeImpl value) {
     _typeName = _becomeParentOf(value);
   }
 
@@ -10256,82 +10409,6 @@
   }
 }
 
-/// The name of a type, which can optionally include type arguments.
-///
-///    typeName ::=
-///        [Identifier] typeArguments? '?'?
-/// ignore: deprecated_member_use_from_same_package
-class TypeNameImpl extends TypeAnnotationImpl implements TypeName {
-  /// The name of the type.
-  IdentifierImpl _name;
-
-  /// The type arguments associated with the type, or `null` if there are no
-  /// type arguments.
-  TypeArgumentListImpl? _typeArguments;
-
-  @override
-  Token? question;
-
-  /// The type being named, or `null` if the AST structure has not been
-  /// resolved, or if this is part of a [ConstructorReference].
-  @override
-  DartType? type;
-
-  /// Initialize a newly created type name. The [typeArguments] can be `null` if
-  /// there are no type arguments.
-  TypeNameImpl(this._name, this._typeArguments, {this.question}) {
-    _becomeParentOf(_name);
-    _becomeParentOf(_typeArguments);
-  }
-
-  @override
-  Token get beginToken => _name.beginToken;
-
-  @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_name)
-    ..add(_typeArguments)
-    ..add(question);
-
-  @override
-  Token get endToken => question ?? _typeArguments?.endToken ?? _name.endToken;
-
-  @override
-  bool get isDeferred {
-    Identifier identifier = name;
-    if (identifier is! PrefixedIdentifier) {
-      return false;
-    }
-    return identifier.isDeferred;
-  }
-
-  @override
-  bool get isSynthetic => _name.isSynthetic && _typeArguments == null;
-
-  @override
-  IdentifierImpl get name => _name;
-
-  set name(Identifier identifier) {
-    _name = _becomeParentOf(identifier as IdentifierImpl);
-  }
-
-  @override
-  TypeArgumentListImpl? get typeArguments => _typeArguments;
-
-  set typeArguments(TypeArgumentList? typeArguments) {
-    _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl?);
-  }
-
-  @override
-  E? accept<E>(AstVisitor<E> visitor) => visitor.visitNamedType(this);
-
-  @override
-  void visitChildren(AstVisitor visitor) {
-    _name.accept(visitor);
-    _typeArguments?.accept(visitor);
-  }
-}
-
 /// A type parameter.
 ///
 ///    typeParameter ::=
@@ -10466,10 +10543,6 @@
 ///      | [PartDirective]
 abstract class UriBasedDirectiveImpl extends DirectiveImpl
     implements UriBasedDirective {
-  /// The prefix of a URI using the `dart-ext` scheme to reference a native code
-  /// library.
-  static const String _DART_EXT_SCHEME = "dart-ext:";
-
   /// The URI referenced by this directive.
   StringLiteralImpl _uri;
 
@@ -10518,9 +10591,6 @@
     if (uriContent.isEmpty) {
       return null;
     }
-    if (isImport && uriContent.startsWith(_DART_EXT_SCHEME)) {
-      return UriValidationCode.URI_WITH_DART_EXT_SCHEME;
-    }
     Uri uri;
     try {
       uri = Uri.parse(Uri.encodeFull(uriContent));
@@ -10541,9 +10611,6 @@
   static const UriValidationCode URI_WITH_INTERPOLATION =
       UriValidationCode('URI_WITH_INTERPOLATION');
 
-  static const UriValidationCode URI_WITH_DART_EXT_SCHEME =
-      UriValidationCode('URI_WITH_DART_EXT_SCHEME');
-
   /// The name of the validation code.
   final String name;
 
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index e12111d..23b899cdf 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -6,6 +6,8 @@
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/ast_factory.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 
@@ -197,15 +199,16 @@
           typeParameters as TypeParameterListImpl?,
           equals,
           abstractKeyword,
-          superclass as TypeNameImpl,
+          superclass as NamedTypeImpl,
           withClause as WithClauseImpl,
           implementsClause as ImplementsClauseImpl?,
           semicolon);
 
   @override
   CommentReferenceImpl commentReference(
-          Token? newKeyword, Identifier identifier) =>
-      CommentReferenceImpl(newKeyword, identifier as IdentifierImpl);
+          Token? newKeyword, CommentReferableExpression expression) =>
+      CommentReferenceImpl(
+          newKeyword, expression as CommentReferableExpressionImpl);
 
   @override
   CompilationUnitImpl compilationUnit(
@@ -298,7 +301,7 @@
   ConstructorNameImpl constructorName(
           NamedType type, Token? period, SimpleIdentifier? name) =>
       ConstructorNameImpl(
-          type as TypeNameImpl, period, name as SimpleIdentifierImpl?);
+          type as NamedTypeImpl, period, name as SimpleIdentifierImpl?);
 
   @override
   ConstructorReferenceImpl constructorReference(
@@ -434,7 +437,7 @@
 
   @override
   ExtendsClauseImpl extendsClause(Token extendsKeyword, NamedType superclass) =>
-      ExtendsClauseImpl(extendsKeyword, superclass as TypeNameImpl);
+      ExtendsClauseImpl(extendsKeyword, superclass as NamedTypeImpl);
 
   @override
   ExtensionDeclarationImpl extensionDeclaration(
@@ -786,6 +789,18 @@
       ImplementsClauseImpl(implementsKeyword, interfaces);
 
   @override
+  ImplicitCallReferenceImpl implicitCallReference({
+    required Expression expression,
+    required MethodElement staticElement,
+    required TypeArgumentList? typeArguments,
+    required List<DartType> typeArgumentTypes,
+  }) =>
+      ImplicitCallReferenceImpl(expression as ExpressionImpl,
+          staticElement: staticElement,
+          typeArguments: typeArguments as TypeArgumentListImpl?,
+          typeArgumentTypes: typeArgumentTypes);
+
+  @override
   ImportDirectiveImpl importDirective(
           Comment? comment,
           List<Annotation>? metadata,
@@ -980,12 +995,12 @@
       NamedExpressionImpl(name as LabelImpl, expression as ExpressionImpl);
 
   @override
-  TypeNameImpl namedType({
+  NamedTypeImpl namedType({
     required Identifier name,
     TypeArgumentList? typeArguments,
     Token? question,
   }) =>
-      TypeNameImpl(
+      NamedTypeImpl(
           name as IdentifierImpl, typeArguments as TypeArgumentListImpl?,
           question: question);
 
@@ -1242,13 +1257,13 @@
 
   @override
   TypeLiteralImpl typeLiteral({required NamedType typeName}) =>
-      TypeLiteralImpl(typeName as TypeNameImpl);
+      TypeLiteralImpl(typeName as NamedTypeImpl);
 
   @Deprecated('Use namedType() instead')
   @override
-  TypeNameImpl typeName(Identifier name, TypeArgumentList? typeArguments,
+  NamedTypeImpl typeName(Identifier name, TypeArgumentList? typeArguments,
           {Token? question}) =>
-      TypeNameImpl(
+      NamedTypeImpl(
           name as IdentifierImpl, typeArguments as TypeArgumentListImpl?,
           question: question);
 
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 b912645..f9ac572 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -54,7 +54,7 @@
       sink.write(', ');
       _visitNode(node.message);
     }
-    sink.write(');');
+    sink.write(')');
   }
 
   @override
@@ -565,6 +565,7 @@
     _visitNode(node.typeParameters);
     sink.write(' = ');
     _visitNode(node.type);
+    sink.write(';');
   }
 
   @override
@@ -604,6 +605,12 @@
   }
 
   @override
+  void visitImplicitCallReference(ImplicitCallReference node) {
+    _visitNode(node.expression);
+    _visitNode(node.typeArguments);
+  }
+
+  @override
   void visitImportDirective(ImportDirective node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     sink.write('import ');
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 0a2871d..1b2249a 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -272,7 +272,7 @@
   bool visitCommentReference(CommentReference node) {
     CommentReference other = _other as CommentReference;
     return isEqualTokens(node.newKeyword, other.newKeyword) &&
-        isEqualNodes(node.identifier, other.identifier);
+        isEqualNodes(node.expression, other.expression);
   }
 
   @override
@@ -723,6 +723,13 @@
   }
 
   @override
+  bool visitImplicitCallReference(ImplicitCallReference node) {
+    ImplicitCallReference other = _other as ImplicitCallReference;
+    return isEqualNodes(node.expression, other.expression) &&
+        isEqualNodes(node.typeArguments, other.typeArguments);
+  }
+
+  @override
   bool visitImportDirective(ImportDirective node) {
     ImportDirective other = _other as ImportDirective;
     return isEqualNodes(
@@ -1789,8 +1796,8 @@
 
   @override
   bool visitCommentReference(covariant CommentReferenceImpl node) {
-    if (identical(node.identifier, _oldNode)) {
-      node.identifier = _newNode as Identifier;
+    if (identical(node.expression, _oldNode)) {
+      node.expression = _newNode as Identifier;
       return true;
     }
     return visitNode(node);
@@ -2345,6 +2352,18 @@
   }
 
   @override
+  bool visitImplicitCallReference(covariant ImplicitCallReferenceImpl node) {
+    if (identical(node.expression, _oldNode)) {
+      node.expression = _newNode as ExpressionImpl;
+      return true;
+    } else if (identical(node.typeArguments, _oldNode)) {
+      node.typeArguments = _newNode as TypeArgumentListImpl;
+      return true;
+    }
+    return visitNode(node);
+  }
+
+  @override
   bool visitImportDirective(covariant ImportDirectiveImpl node) {
     if (identical(node.prefix, _oldNode)) {
       node.prefix = _newNode as SimpleIdentifier;
@@ -2534,7 +2553,7 @@
   }
 
   @override
-  bool? visitNamedType(covariant TypeNameImpl node) {
+  bool? visitNamedType(covariant NamedTypeImpl node) {
     if (identical(node.name, _oldNode)) {
       node.name = _newNode as Identifier;
       return true;
@@ -2864,14 +2883,14 @@
   @override
   bool visitTypeLiteral(covariant TypeLiteralImpl node) {
     if (identical(node.type, _oldNode)) {
-      node.typeName = _newNode as TypeNameImpl;
+      node.typeName = _newNode as NamedTypeImpl;
       return true;
     }
     return visitNode(node);
   }
 
   @override
-  bool visitTypeName(covariant TypeNameImpl node) {
+  bool visitTypeName(covariant NamedTypeImpl node) {
     throw StateError('Should not be invoked');
   }
 
@@ -2985,11 +3004,15 @@
   ///
   /// Throws an [ArgumentError] if either node is `null`, if the old node does
   /// not have a parent node, or if the AST structure has been corrupted.
-  static bool replace(AstNode oldNode, AstNode newNode) {
+  ///
+  /// If [newNode] is the parent of [oldNode] already (because [newNode] became
+  /// the parent of [oldNode] in its constructor), this action will loop
+  /// infinitely; pass [oldNode]'s previous parent as [parent] to avoid this.
+  static bool replace(AstNode oldNode, AstNode newNode, {AstNode? parent}) {
     if (identical(oldNode, newNode)) {
       return true;
     }
-    var parent = oldNode.parent;
+    parent ??= oldNode.parent;
     if (parent == null) {
       throw ArgumentError("The old node is not a child of another node");
     }
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index 4a5e452..bcbe8fa 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -171,6 +171,7 @@
         _evaluationEngine.evaluateConstructorCall(
             _currentLibrary,
             node,
+            constructor.returnType.typeArguments,
             node.argumentList.arguments,
             constructor,
             constantVisitor,
@@ -340,9 +341,9 @@
 
   /// @return `true` if given [Type] implements operator <i>==</i>, and it is
   ///         not <i>int</i> or <i>String</i>.
-  bool _implementsEqualsWhenNotAllowed(DartType? type) {
+  bool _implementsEqualsWhenNotAllowed(DartType type) {
     // ignore int or String
-    if (type == null || type.isDartCoreInt || type.isDartCoreString) {
+    if (type.isDartCoreInt || type.isDartCoreString) {
       return false;
     } else if (type.isDartCoreDouble) {
       return true;
@@ -372,7 +373,7 @@
   ///        consists of a reference to a deferred library
   void _reportErrorIfFromDeferredLibrary(
       Expression expression, ErrorCode errorCode,
-      [List<Object?>? arguments, List<DiagnosticMessage>? messages]) {
+      [List<Object>? arguments, List<DiagnosticMessage>? messages]) {
     DeferredLibraryReferenceDetector referenceDetector =
         DeferredLibraryReferenceDetector();
     expression.accept(referenceDetector);
@@ -627,7 +628,7 @@
       return;
     }
 
-    if (_implementsEqualsWhenNotAllowed(firstType)) {
+    if (firstType != null && _implementsEqualsWhenNotAllowed(firstType)) {
       _errorReporter.reportErrorForToken(
         CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS,
         node.switchKeyword,
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 70f5d10..dc0030a 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -4,6 +4,7 @@
 
 import 'dart:collection';
 
+import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -141,6 +142,7 @@
         var result = evaluateConstructorCall(
             library,
             constNode,
+            element.returnType.typeArguments,
             constNode.arguments!.arguments,
             element,
             constantVisitor,
@@ -272,15 +274,26 @@
   DartObjectImpl? evaluateConstructorCall(
     LibraryElementImpl library,
     AstNode node,
+    List<DartType>? typeArguments,
     List<Expression> arguments,
     ConstructorElement constructor,
     ConstantVisitor constantVisitor,
     ErrorReporter errorReporter, {
     ConstructorInvocation? invocation,
   }) {
-    return _InstanceCreationEvaluator.evaluate(this, _declaredVariables,
-        errorReporter, library, node, constructor, arguments, constantVisitor,
-        isNullSafe: _isNonNullableByDefault, invocation: invocation);
+    return _InstanceCreationEvaluator.evaluate(
+      this,
+      _declaredVariables,
+      errorReporter,
+      library,
+      node,
+      constructor,
+      typeArguments,
+      arguments,
+      constantVisitor,
+      isNullSafe: _isNonNullableByDefault,
+      invocation: invocation,
+    );
   }
 
   /// Generate an error indicating that the given [constant] is not a valid
@@ -430,7 +443,12 @@
   /// The library that contains the constant expression being evaluated.
   final LibraryElementImpl _library;
 
+  /// A mapping of variable names to runtime values.
   final Map<String, DartObjectImpl>? _lexicalEnvironment;
+
+  /// A mapping of type parameter names to runtime values (types).
+  final Map<TypeParameterElement, DartType>? _lexicalTypeEnvironment;
+
   final Substitution? _substitution;
 
   /// Error reporter that we use to report errors accumulated while computing
@@ -453,8 +471,10 @@
     this._library,
     this._errorReporter, {
     Map<String, DartObjectImpl>? lexicalEnvironment,
+    Map<TypeParameterElement, DartType>? lexicalTypeEnvironment,
     Substitution? substitution,
   })  : _lexicalEnvironment = lexicalEnvironment,
+        _lexicalTypeEnvironment = lexicalTypeEnvironment,
         _substitution = substitution {
     _dartObjectComputer = DartObjectComputer(
       typeSystem,
@@ -590,10 +610,15 @@
     if (conditionResult == null) {
       return conditionResult;
     }
-    if (conditionResult.toBoolValue() == true) {
+
+    var conditionResultBool = conditionResult.toBoolValue();
+    if (conditionResultBool == null) {
+      node.thenExpression.accept(this);
+      node.elseExpression.accept(this);
+    } else if (conditionResultBool == true) {
       _reportNotPotentialConstants(node.elseExpression);
       return node.thenExpression.accept(this);
-    } else if (conditionResult.toBoolValue() == false) {
+    } else if (conditionResultBool == false) {
       _reportNotPotentialConstants(node.thenExpression);
       return node.elseExpression.accept(this);
     }
@@ -657,27 +682,48 @@
     if (functionResult == null) {
       return functionResult;
     }
+
+    // Report an error if any of the _inferred_ type argument types refer to a
+    // type parameter. If, however, `node.typeArguments` is not `null`, then
+    // any type parameters contained therein are reported as non-constant in
+    // [ConstantVerifier].
+    if (node.typeArguments == null) {
+      var typeArgumentTypes = node.typeArgumentTypes;
+      if (typeArgumentTypes != null) {
+        var instantiatedTypeArgumentTypes = typeArgumentTypes.map((type) {
+          if (type is TypeParameterType) {
+            return _lexicalTypeEnvironment?[type.element] ?? type;
+          } else {
+            return type;
+          }
+        });
+        if (instantiatedTypeArgumentTypes.any(hasTypeParameterReference)) {
+          _error(node, null);
+        }
+      }
+    }
+
     var typeArgumentList = node.typeArguments;
     if (typeArgumentList == null) {
-      return functionResult;
-    } else {
-      var typeArguments = <DartType>[];
-      for (var typeArgument in typeArgumentList.arguments) {
-        var object = typeArgument.accept(this);
-        if (object == null) {
-          return null;
-        }
-        var typeArgumentType = object.toTypeValue();
-        if (typeArgumentType == null) {
-          return null;
-        }
-        // TODO(srawlins): Test type alias types (`typedef i = int`) used as
-        // type arguments. Possibly change implementation based on
-        // canonicalization rules.
-        typeArguments.add(typeArgumentType);
-      }
-      return _dartObjectComputer.typeInstantiate(functionResult, typeArguments);
+      return _instantiateFunctionType(node, functionResult);
     }
+
+    var typeArguments = <DartType>[];
+    for (var typeArgument in typeArgumentList.arguments) {
+      var object = typeArgument.accept(this);
+      if (object == null) {
+        return null;
+      }
+      var typeArgumentType = object.toTypeValue();
+      if (typeArgumentType == null) {
+        return null;
+      }
+      // TODO(srawlins): Test type alias types (`typedef i = int`) used as
+      // type arguments. Possibly change implementation based on
+      // canonicalization rules.
+      typeArguments.add(typeArgumentType);
+    }
+    return _dartObjectComputer.typeInstantiate(functionResult, typeArguments);
   }
 
   @override
@@ -705,8 +751,15 @@
       return null;
     }
 
-    return evaluationEngine.evaluateConstructorCall(_library, node,
-        node.argumentList.arguments, constructor, this, _errorReporter);
+    return evaluationEngine.evaluateConstructorCall(
+      _library,
+      node,
+      constructor.returnType.typeArguments,
+      node.argumentList.arguments,
+      constructor,
+      this,
+      _errorReporter,
+    );
   }
 
   @override
@@ -867,8 +920,8 @@
         return null;
       }
     }
-    // validate prefixed identifier
-    return _getConstantValue(node, node.staticElement);
+    // Validate prefixed identifier.
+    return _getConstantValue(node, node.identifier);
   }
 
   @override
@@ -902,7 +955,7 @@
         return prefixResult.stringLength(typeSystem);
       }
     }
-    return _getConstantValue(node, node.propertyName.staticElement);
+    return _getConstantValue(node, node.propertyName);
   }
 
   @override
@@ -968,10 +1021,10 @@
   DartObjectImpl? visitSimpleIdentifier(SimpleIdentifier node) {
     var value = _lexicalEnvironment?[node.name];
     if (value != null) {
-      return _instantiateFunctionType(node, value);
+      return _instantiateFunctionTypeForSimpleIdentifier(node, value);
     }
 
-    return _getConstantValue(node, node.staticElement);
+    return _getConstantValue(node, node);
   }
 
   @override
@@ -1171,13 +1224,17 @@
   }
 
   /// Return the constant value of the static constant represented by the given
-  /// [element]. The [node] is the node to be used if an error needs to be
+  /// [identifier]. The [node] is the node to be used if an error needs to be
   /// reported.
-  DartObjectImpl? _getConstantValue(Expression node, Element? element) {
+  DartObjectImpl? _getConstantValue(
+      Expression node, SimpleIdentifier identifier) {
+    var element = identifier.staticElement;
     element = element?.declaration;
     var variableElement =
         element is PropertyAccessorElement ? element.variable : element;
 
+    // TODO(srawlins): Remove this check when [FunctionReference]s are inserted
+    // for generic function instantiation for pre-constructor-references code.
     if (node is SimpleIdentifier &&
         (node.tearOffTypeArgumentTypes?.any(hasTypeParameterReference) ??
             false)) {
@@ -1196,7 +1253,7 @@
         if (value == null) {
           return value;
         }
-        return _instantiateFunctionType(node, value);
+        return _instantiateFunctionTypeForSimpleIdentifier(identifier, value);
       }
     } else if (variableElement is ConstructorElement) {
       return DartObjectImpl(
@@ -1207,11 +1264,12 @@
     } else if (variableElement is ExecutableElement) {
       var function = element as ExecutableElement;
       if (function.isStatic) {
-        return DartObjectImpl(
+        var rawType = DartObjectImpl(
           typeSystem,
-          node.typeOrThrow,
+          function.type,
           FunctionState(function),
         );
+        return _instantiateFunctionTypeForSimpleIdentifier(identifier, rawType);
       }
     } else if (variableElement is ClassElement) {
       var type = variableElement.instantiate(
@@ -1250,7 +1308,18 @@
         TypeState(_typeProvider.neverType),
       );
     } else if (variableElement is TypeParameterElement) {
-      // Constants may not refer to type parameters.
+      // Constants may refer to type parameters only if the constructor-tearoffs
+      // feature is enabled.
+      if (_library.featureSet.isEnabled(Feature.constructor_tearoffs)) {
+        var typeArgument = _lexicalTypeEnvironment?[identifier.staticElement];
+        if (typeArgument != null) {
+          return DartObjectImpl(
+            typeSystem,
+            _typeProvider.typeType,
+            TypeState(typeArgument),
+          );
+        }
+      }
     }
 
     // TODO(https://github.com/dart-lang/sdk/issues/47061): Use a specific
@@ -1259,15 +1328,41 @@
     return null;
   }
 
+  /// If the type of [value] is a generic [FunctionType], and [node] has type
+  /// argument types, returns [value] type-instantiated with those [node]'s
+  /// type argument types, otherwise returns [value].
+  DartObjectImpl? _instantiateFunctionType(
+      FunctionReference node, DartObjectImpl value) {
+    var functionElement = value.toFunctionValue();
+    if (functionElement is! ExecutableElement) {
+      return value;
+    }
+    var valueType = functionElement.type;
+    if (valueType.typeFormals.isNotEmpty) {
+      var typeArgumentTypes = node.typeArgumentTypes;
+      if (typeArgumentTypes != null && typeArgumentTypes.isNotEmpty) {
+        var instantiatedType =
+            functionElement.type.instantiate(typeArgumentTypes);
+        var substitution = _substitution;
+        if (substitution != null) {
+          instantiatedType =
+              substitution.substituteType(instantiatedType) as FunctionType;
+        }
+        return value.typeInstantiate(
+            typeSystem, instantiatedType, typeArgumentTypes);
+      }
+    }
+    return value;
+  }
+
   /// If the type of [value] is a generic [FunctionType], and [node] is a
   /// [SimpleIdentifier] with tear-off type argument types, returns [value]
   /// type-instantiated with those [node]'s tear-off type argument types,
   /// otherwise returns [value].
-  DartObjectImpl? _instantiateFunctionType(
-      Expression node, DartObjectImpl value) {
-    if (node is! SimpleIdentifier) {
-      return value;
-    }
+  DartObjectImpl? _instantiateFunctionTypeForSimpleIdentifier(
+      SimpleIdentifier node, DartObjectImpl value) {
+    // TODO(srawlins): When all code uses [FunctionReference]s generated via
+    // generic function instantiation, remove this method and all call sites.
     var functionElement = value.toFunctionValue();
     if (functionElement is! ExecutableElement) {
       return value;
@@ -1926,13 +2021,17 @@
     _constructor.library as LibraryElementImpl,
     _externalErrorReporter,
     lexicalEnvironment: _parameterMap,
+    lexicalTypeEnvironment: _typeParameterMap,
     substitution: Substitution.fromInterfaceType(definingType),
   );
 
-  final AstNode _node;
+  /// The node used for most error reporting.
+  final AstNode _errorNode;
 
   final ConstructorElement _constructor;
 
+  final List<DartType>? _typeArguments;
+
   final ConstructorInvocation _invocation;
 
   final Map<String, NamedExpression> _namedNodes;
@@ -1941,17 +2040,25 @@
 
   final List<DartObjectImpl> _argumentValues;
 
+  final Map<TypeParameterElement, DartType> _typeParameterMap = HashMap();
+
   final Map<String, DartObjectImpl> _parameterMap = HashMap();
 
   final Map<String, DartObjectImpl> _fieldMap = HashMap();
 
-  _InstanceCreationEvaluator.generative(
+  /// Constructor for [_InstanceCreationEvaluator].
+  ///
+  /// This constructor is private, as the entry point for using a
+  /// [_InstanceCreationEvaluator] is the static method,
+  /// [_InstanceCreationEvaluator.evaluate].
+  _InstanceCreationEvaluator._(
     this._evaluationEngine,
     this._declaredVariables,
     this._errorReporter,
     this._library,
-    this._node,
-    this._constructor, {
+    this._errorNode,
+    this._constructor,
+    this._typeArguments, {
     required Map<String, NamedExpression> namedNodes,
     required Map<String, DartObjectImpl> namedValues,
     required List<DartObjectImpl> argumentValues,
@@ -1979,7 +2086,7 @@
     if (_constructor.name == "fromEnvironment") {
       if (!_checkFromEnvironmentArguments(arguments, definingType)) {
         _errorReporter.reportErrorForNode(
-            CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _node);
+            CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _errorNode);
         return null;
       }
       String? variableName =
@@ -2004,7 +2111,7 @@
         argumentCount == 1) {
       if (!_checkSymbolArguments(arguments, isNullSafe: isNullSafe)) {
         _errorReporter.reportErrorForNode(
-            CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _node);
+            CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _errorNode);
         return null;
       }
       return DartObjectImpl(
@@ -2028,6 +2135,7 @@
     // Start with final fields that are initialized at their declaration site.
     _checkFields();
 
+    _checkTypeParameters();
     _checkParameters(arguments);
     var evaluationResult = _checkInitializers();
     if (evaluationResult.evaluationIsComplete) {
@@ -2038,7 +2146,7 @@
         superArguments: evaluationResult.superArguments);
     if (_externalErrorListener.errorReported) {
       _errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _node);
+          CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _errorNode);
     }
     return DartObjectImpl(
       typeSystem,
@@ -2049,8 +2157,7 @@
 
   void _checkFields() {
     var fields = _constructor.enclosingElement.fields;
-    for (var i = 0; i < fields.length; i++) {
-      var field = fields[i];
+    for (var field in fields) {
       if ((field.isFinal || field.isConst) &&
           !field.isStatic &&
           field is ConstFieldElementImpl) {
@@ -2067,7 +2174,7 @@
         if (!typeSystem.runtimeTypeMatch(fieldValue, fieldType)) {
           _errorReporter.reportErrorForNode(
               CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
-              _node,
+              _errorNode,
               [fieldValue.type, field.name, fieldType]);
         }
         _fieldMap[field.name] = fieldValue;
@@ -2130,7 +2237,7 @@
           var fieldName = initializer.fieldName.name;
           if (_fieldMap.containsKey(fieldName)) {
             _errorReporter.reportErrorForNode(
-                CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _node);
+                CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _errorNode);
           }
           _fieldMap[fieldName] = evaluationResult;
           var getter = definingType.getGetter(fieldName);
@@ -2139,13 +2246,13 @@
             if (!typeSystem.runtimeTypeMatch(evaluationResult, field.type)) {
               _errorReporter.reportErrorForNode(
                   CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
-                  _node,
+                  _errorNode,
                   [evaluationResult.type, fieldName, field.type]);
             }
           }
         } else {
           _errorReporter.reportErrorForNode(
-              CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _node);
+              CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _errorNode);
         }
       } else if (initializer is SuperConstructorInvocation) {
         var name = initializer.constructorName;
@@ -2162,7 +2269,8 @@
           constructor = ConstructorMember.from(constructor, definingType);
           var result = _evaluationEngine.evaluateConstructorCall(
               _library,
-              _node,
+              _errorNode,
+              _typeArguments,
               initializer.argumentList.arguments,
               constructor,
               _initializerVisitor,
@@ -2170,7 +2278,7 @@
               invocation: _invocation);
           if (_externalErrorListener.errorReported) {
             _errorReporter.reportErrorForNode(
-                CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _node);
+                CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _errorNode);
           }
           return _InitializersEvaluationResult(result,
               evaluationIsComplete: true);
@@ -2182,7 +2290,7 @@
             !evaluationResult.isBool ||
             evaluationResult.toBoolValue() == false) {
           _errorReporter.reportErrorForNode(
-              CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _node);
+              CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _errorNode);
           return _InitializersEvaluationResult(null,
               evaluationIsComplete: true);
         }
@@ -2206,14 +2314,14 @@
       if (baseParameter.isNamed) {
         argumentValue = _namedValues[baseParameter.name];
         errorTarget = _namedNodes[baseParameter.name];
-      } else if (i < arguments.length) {
+      } else if (i < _argumentValues.length) {
         argumentValue = _argumentValues[i];
         errorTarget = arguments[i];
       }
       // No argument node that we can direct error messages to, because we
       // are handling an optional parameter that wasn't specified.  So just
       // direct error messages to the constructor call.
-      errorTarget ??= _node;
+      errorTarget ??= _errorNode;
       if (argumentValue == null && baseParameter is ParameterElementImpl) {
         // The parameter is an optional positional parameter for which no value
         // was provided, so use the default value.
@@ -2252,7 +2360,7 @@
             var fieldName = field.name;
             if (_fieldMap.containsKey(fieldName)) {
               _errorReporter.reportErrorForNode(
-                  CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _node);
+                  CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, _errorNode);
             }
             _fieldMap[fieldName] = argumentValue;
           }
@@ -2288,8 +2396,9 @@
       if (superConstructor.isConst) {
         var evaluationResult = _evaluationEngine.evaluateConstructorCall(
           _library,
-          _node,
-          superArguments ?? astFactory.nodeList(_node),
+          _errorNode,
+          superclass.typeArguments,
+          superArguments ?? astFactory.nodeList(_errorNode),
           superConstructor,
           _initializerVisitor,
           _externalErrorReporter,
@@ -2328,6 +2437,20 @@
     return _isValidPublicSymbol(name);
   }
 
+  void _checkTypeParameters() {
+    var typeParameters = _constructor.enclosingElement.typeParameters;
+    var typeArguments = _typeArguments;
+    if (typeParameters.isNotEmpty &&
+        typeArguments != null &&
+        typeParameters.length == typeArguments.length) {
+      for (int i = 0; i < typeParameters.length; i++) {
+        var typeParameter = typeParameters[i];
+        var typeArgument = typeArguments[i];
+        _typeParameterMap[typeParameter] = typeArgument;
+      }
+    }
+  }
+
   /// Evaluates [node] as an instance creation expression using [constructor].
   static DartObjectImpl? evaluate(
     ConstantEvaluationEngine evaluationEngine,
@@ -2336,6 +2459,7 @@
     LibraryElementImpl library,
     AstNode node,
     ConstructorElement constructor,
+    List<DartType>? typeArguments,
     List<Expression> arguments,
     ConstantVisitor constantVisitor, {
     required bool isNullSafe,
@@ -2386,13 +2510,14 @@
 
     constructor = _followConstantRedirectionChain(constructor);
 
-    var evaluator = _InstanceCreationEvaluator.generative(
+    var evaluator = _InstanceCreationEvaluator._(
       evaluationEngine,
       declaredVariables,
       errorReporter,
       library,
       node,
       constructor,
+      typeArguments,
       namedNodes: namedNodes,
       namedValues: namedValues,
       argumentValues: argumentValues,
diff --git a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
index 6f0eed7..ae554f5 100644
--- a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
+++ b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
@@ -94,7 +94,7 @@
     }
 
     if (node is TypedLiteral) {
-      return _typeLiteral(node);
+      return _typedLiteral(node);
     }
 
     if (node is ParenthesizedExpression) {
@@ -187,6 +187,22 @@
       return;
     }
 
+    if (node is ConstructorReference) {
+      _typeArgumentList(node.constructorName.type2.typeArguments);
+      return;
+    }
+
+    if (node is FunctionReference) {
+      _typeArgumentList(node.typeArguments);
+      collect(node.function);
+      return;
+    }
+
+    if (node is TypeLiteral) {
+      _typeArgumentList(node.type.typeArguments);
+      return;
+    }
+
     nodes.add(node);
   }
 
@@ -261,6 +277,7 @@
         return;
       }
     }
+    // TODO(srawlins): collect type arguments.
     nodes.add(node);
   }
 
@@ -292,7 +309,18 @@
     nodes.add(node);
   }
 
-  void _typeLiteral(TypedLiteral node) {
+  void _typeArgumentList(TypeArgumentList? typeArgumentList) {
+    var typeArguments = typeArgumentList?.arguments;
+    if (typeArguments != null) {
+      for (var typeArgument in typeArguments) {
+        if (!isPotentiallyConstantTypeExpression(typeArgument)) {
+          nodes.add(typeArgument);
+        }
+      }
+    }
+  }
+
+  void _typedLiteral(TypedLiteral node) {
     if (!node.isConst) {
       nodes.add(node);
       return;
@@ -302,7 +330,7 @@
       var typeArguments = node.typeArguments?.arguments;
       if (typeArguments != null && typeArguments.length == 1) {
         var elementType = typeArguments[0];
-        if (!isConstantTypeExpression(elementType)) {
+        if (!isPotentiallyConstantTypeExpression(elementType)) {
           nodes.add(elementType);
         }
       }
@@ -317,7 +345,7 @@
       var typeArguments = node.typeArguments?.arguments;
       if (typeArguments != null && typeArguments.length == 1) {
         var elementType = typeArguments[0];
-        if (!isConstantTypeExpression(elementType)) {
+        if (!isPotentiallyConstantTypeExpression(elementType)) {
           nodes.add(elementType);
         }
       }
@@ -350,16 +378,12 @@
 
   _ConstantTypeChecker({required this.potentially});
 
-  /// Return `true` if the [node] is a constant type expression.
+  /// Return `true` if the [node] is a (potentially) constant type expression.
   bool check(TypeAnnotation? node) {
-    if (potentially) {
-      if (node is NamedType) {
-        var element = node.name.staticElement;
-        if (element is TypeParameterElement) {
-          var enclosing = element.enclosingElement;
-          return enclosing is ClassElement && !enclosing.isMixin;
-        }
-      }
+    if (potentially &&
+        node is NamedType &&
+        node.name.staticElement is TypeParameterElement) {
+      return true;
     }
 
     if (node is NamedType) {
@@ -374,10 +398,8 @@
         }
         return true;
       }
-      if (node.type is DynamicTypeImpl) {
-        return true;
-      }
-      if (node.type is VoidType) {
+      var type = node.type;
+      if (type is DynamicTypeImpl || type is NeverType || type is VoidType) {
         return true;
       }
       return false;
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index 6d3ec97..227abea 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -184,7 +184,7 @@
   Map<String, DartObjectImpl>? get fields => _state.fields;
 
   @override
-  int get hashCode => Object.hash(type.hashCode, _state.hashCode);
+  int get hashCode => Object.hash(type, _state);
 
   @override
   bool get hasKnownValue => !_state.isUnknown;
@@ -487,15 +487,7 @@
     _assertType(testedType);
     var typeType = (testedType._state as TypeState)._type;
     BoolState state;
-    if (isNull) {
-      if (typeType == typeSystem.typeProvider.objectType ||
-          typeType == typeSystem.typeProvider.dynamicType ||
-          typeType == typeSystem.typeProvider.nullType) {
-        state = BoolState.TRUE_STATE;
-      } else {
-        state = BoolState.FALSE_STATE;
-      }
-    } else if (typeType == null) {
+    if (typeType == null) {
       state = BoolState.TRUE_STATE;
     } else {
       state = BoolState.from(typeSystem.isSubtypeOf(type, typeType));
@@ -537,13 +529,12 @@
   DartObjectImpl isIdentical2(
       TypeSystemImpl typeSystem, DartObjectImpl rightOperand) {
     // Workaround for Flutter `const kIsWeb = identical(0, 0.0)`.
-    if (type.isDartCoreInt && rightOperand.type.isDartCoreDouble) {
+    if (type.isDartCoreInt && rightOperand.type.isDartCoreDouble ||
+        type.isDartCoreDouble && rightOperand.type.isDartCoreInt) {
       return DartObjectImpl(
         typeSystem,
         typeSystem.typeProvider.boolType,
-        BoolState(
-          toIntValue() == 0 && rightOperand.toDoubleValue() == 0.0,
-        ),
+        BoolState.UNKNOWN_VALUE,
       );
     }
 
@@ -1315,12 +1306,7 @@
 
       var element = _element;
       var otherElement = rightOperand._element;
-      var elementsAreEqual = identical(element, otherElement) ||
-          (element != null &&
-              otherElement != null &&
-              otherElement.kind == element.kind &&
-              otherElement.location == element.location);
-      if (!elementsAreEqual) {
+      if (element?.declaration != otherElement?.declaration) {
         return BoolState.FALSE_STATE;
       }
       var typeArguments = _typeArguments;
@@ -1333,7 +1319,10 @@
         return BoolState.FALSE_STATE;
       }
       for (var i = 0; i < typeArguments.length; i++) {
-        if (typeArguments[i] != otherTypeArguments[i]) {
+        if (!typeSystem.runtimeTypesEqual(
+          typeArguments[i],
+          otherTypeArguments[i],
+        )) {
           return BoolState.FALSE_STATE;
         }
       }
diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
index 612db53..27fbe85 100644
--- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
@@ -57,11 +57,7 @@
     _writeType(element.returnType);
     _write(' ');
 
-    _write(element.enclosingElement.displayName);
-    if (element.displayName.isNotEmpty) {
-      _write('.');
-      _write(element.displayName);
-    }
+    _write(element.displayName);
 
     _writeFormalParameters(
       element.parameters,
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index f1b79a3..549136f 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1451,12 +1451,13 @@
 
   @override
   String get displayName {
-    final linkedData = this.linkedData;
-    if (linkedData != null) {
-      return linkedData.reference.name;
+    var className = enclosingElement.name;
+    var name = this.name;
+    if (name.isNotEmpty) {
+      return '$className.$name';
+    } else {
+      return className;
     }
-
-    return super.displayName;
   }
 
   @override
@@ -3786,15 +3787,9 @@
     return _exports;
   }
 
+  @Deprecated('Support for dart-ext is replaced with FFI')
   @override
-  bool get hasExtUri {
-    return hasModifier(Modifier.HAS_EXT_URI);
-  }
-
-  /// Set whether this library has an import of a "dart-ext" URI.
-  set hasExtUri(bool hasExtUri) {
-    setModifier(Modifier.HAS_EXT_URI, hasExtUri);
-  }
+  bool get hasExtUri => false;
 
   @Deprecated('Not useful for clients')
   @override
@@ -4193,12 +4188,17 @@
   /// this variable is not a subject of type inference, or there was no error.
   TopLevelInferenceError? typeInferenceError;
 
+  /// If this method is a synthetic element which is based on another method
+  /// with some modifications (such as making some parameters covariant),
+  /// this field contains the base method.
+  MethodElement? prototype;
+
   /// Initialize a newly created method element to have the given [name] at the
   /// given [offset].
   MethodElementImpl(String name, int offset) : super(name, offset);
 
   @override
-  MethodElement get declaration => this;
+  MethodElement get declaration => prototype ?? this;
 
   @override
   String get displayName {
@@ -4354,47 +4354,42 @@
   /// Indicates that the pseudo-modifier 'get' was applied to the element.
   static const Modifier GETTER = Modifier('GETTER', 11);
 
-  /// A flag used for libraries indicating that the defining compilation unit
-  /// contains at least one import directive whose URI uses the "dart-ext"
-  /// scheme.
-  static const Modifier HAS_EXT_URI = Modifier('HAS_EXT_URI', 12);
-
   /// A flag used for libraries indicating that the variable has an explicit
   /// initializer.
-  static const Modifier HAS_INITIALIZER = Modifier('HAS_INITIALIZER', 13);
+  static const Modifier HAS_INITIALIZER = Modifier('HAS_INITIALIZER', 12);
 
   /// A flag used for fields and top-level variables that have implicit type,
   /// and specify when the type has been inferred.
-  static const Modifier HAS_TYPE_INFERRED = Modifier('HAS_TYPE_INFERRED', 14);
+  static const Modifier HAS_TYPE_INFERRED = Modifier('HAS_TYPE_INFERRED', 13);
 
   /// A flag used for libraries indicating that the defining compilation unit
   /// has a `part of` directive, meaning that this unit should be a part,
   /// but is used as a library.
   static const Modifier HAS_PART_OF_DIRECTIVE =
-      Modifier('HAS_PART_OF_DIRECTIVE', 15);
+      Modifier('HAS_PART_OF_DIRECTIVE', 14);
 
   /// Indicates that the associated element did not have an explicit type
   /// associated with it. If the element is an [ExecutableElement], then the
   /// type being referred to is the return type.
-  static const Modifier IMPLICIT_TYPE = Modifier('IMPLICIT_TYPE', 16);
+  static const Modifier IMPLICIT_TYPE = Modifier('IMPLICIT_TYPE', 15);
 
   /// Indicates that modifier 'lazy' was applied to the element.
-  static const Modifier LATE = Modifier('LATE', 17);
+  static const Modifier LATE = Modifier('LATE', 16);
 
   /// Indicates that a class is a mixin application.
-  static const Modifier MIXIN_APPLICATION = Modifier('MIXIN_APPLICATION', 18);
+  static const Modifier MIXIN_APPLICATION = Modifier('MIXIN_APPLICATION', 17);
 
   /// Indicates that the pseudo-modifier 'set' was applied to the element.
-  static const Modifier SETTER = Modifier('SETTER', 19);
+  static const Modifier SETTER = Modifier('SETTER', 18);
 
   /// Indicates that the modifier 'static' was applied to the element.
-  static const Modifier STATIC = Modifier('STATIC', 20);
+  static const Modifier STATIC = Modifier('STATIC', 19);
 
   /// Indicates that the element does not appear in the source code but was
   /// implicitly created. For example, if a class does not define any
   /// constructors, an implicit zero-argument constructor will be created and it
   /// will be marked as being synthetic.
-  static const Modifier SYNTHETIC = Modifier('SYNTHETIC', 21);
+  static const Modifier SYNTHETIC = Modifier('SYNTHETIC', 20);
 
   static const List<Modifier> values = [
     ABSTRACT,
@@ -4409,7 +4404,6 @@
     FINAL,
     GENERATOR,
     GETTER,
-    HAS_EXT_URI,
     HAS_INITIALIZER,
     HAS_PART_OF_DIRECTIVE,
     IMPLICIT_TYPE,
@@ -4999,6 +4993,11 @@
   @override
   late PropertyInducingElement variable;
 
+  /// If this method is a synthetic element which is based on another method
+  /// with some modifications (such as making some parameters covariant),
+  /// this field contains the base method.
+  PropertyAccessorElement? prototype;
+
   /// Initialize a newly created property accessor element to have the given
   /// [name] and [offset].
   PropertyAccessorElementImpl(String name, int offset) : super(name, offset);
@@ -5031,7 +5030,7 @@
   }
 
   @override
-  PropertyAccessorElement get declaration => this;
+  PropertyAccessorElement get declaration => prototype ?? this;
 
   @override
   String get identifier {
diff --git a/pkg/analyzer/lib/src/dart/element/extensions.dart b/pkg/analyzer/lib/src/dart/element/extensions.dart
index 66ba586..6eaa94a 100644
--- a/pkg/analyzer/lib/src/dart/element/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/element/extensions.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/src/generated/utilities_dart.dart';
 
 extension ElementExtension on Element {
-  /// Return `true` if this element is an instance member.
+  /// Return `true` if this element is an instance member of a class or mixin.
   ///
   /// Only [MethodElement]s and [PropertyAccessorElement]s are supported.
   /// We intentionally exclude [ConstructorElement]s - they can only be
@@ -18,7 +18,7 @@
   bool get isInstanceMember {
     var this_ = this;
     var enclosing = this_.enclosingElement;
-    if (enclosing is ClassElement || enclosing is ExtensionElement) {
+    if (enclosing is ClassElement) {
       return this_ is MethodElement && !this_.isStatic ||
           this_ is PropertyAccessorElement && !this_.isStatic;
     }
@@ -53,12 +53,16 @@
 
 extension ParameterElementExtensions on ParameterElement {
   /// Return [ParameterElement] with the specified properties replaced.
-  ParameterElement copyWith({DartType? type, ParameterKind? kind}) {
+  ParameterElement copyWith({
+    DartType? type,
+    ParameterKind? kind,
+    bool? isCovariant,
+  }) {
     return ParameterElementImpl.synthetic(
       name,
       type ?? this.type,
       // ignore: deprecated_member_use_from_same_package
       kind ?? parameterKind,
-    )..isExplicitlyCovariant = isCovariant;
+    )..isExplicitlyCovariant = isCovariant ?? this.isCovariant;
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 1be5afd..cf52a23 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/extensions.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/element/type_algebra.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
@@ -251,7 +252,7 @@
 
   /// Return the member with the given [name].
   ///
-  /// If [concrete] is `true`, the the concrete implementation is returned,
+  /// If [concrete] is `true`, the concrete implementation is returned,
   /// from the given [element], or its superclass.
   ///
   /// If [forSuper] is `true`, then [concrete] is implied, and only concrete
@@ -626,6 +627,11 @@
       }
     }
 
+    implemented = implemented.map<Name, ExecutableElement>((key, value) {
+      var result = _inheritCovariance(element, namedCandidates, key, value);
+      return MapEntry(key, result);
+    });
+
     return Interface._(
       interface,
       declared,
@@ -697,6 +703,102 @@
     );
   }
 
+  /// If a candidate from [namedCandidates] has covariant parameters, return
+  /// a copy of the [executable] with the corresponding parameters marked
+  /// covariant. If there are no covariant parameters, or parameters to
+  /// update are already covariant, return the [executable] itself.
+  ExecutableElement _inheritCovariance(
+    ClassElement class_,
+    Map<Name, List<ExecutableElement>> namedCandidates,
+    Name name,
+    ExecutableElement executable,
+  ) {
+    if (executable.enclosingElement == class_) {
+      return executable;
+    }
+
+    var parameters = executable.parameters;
+    if (parameters.isEmpty) {
+      return executable;
+    }
+
+    var candidates = namedCandidates[name];
+    if (candidates == null) {
+      return executable;
+    }
+
+    // Find parameters that are covariant (by declaration) in any overridden.
+    Set<_ParameterDesc>? covariantParameters;
+    for (var candidate in candidates) {
+      var parameters = candidate.parameters;
+      for (var i = 0; i < parameters.length; i++) {
+        var parameter = parameters[i];
+        if (parameter.isCovariant) {
+          covariantParameters ??= {};
+          covariantParameters.add(
+            _ParameterDesc(i, parameter),
+          );
+        }
+      }
+    }
+
+    if (covariantParameters == null) {
+      return executable;
+    }
+
+    // Update covariance of the parameters of the chosen executable.
+    List<ParameterElement>? transformedParameters;
+    for (var index = 0; index < parameters.length; index++) {
+      var parameter = parameters[index];
+      var shouldBeCovariant = covariantParameters.contains(
+        _ParameterDesc(index, parameter),
+      );
+      if (parameter.isCovariant != shouldBeCovariant) {
+        transformedParameters ??= parameters.toList();
+        transformedParameters[index] = parameter.copyWith(
+          isCovariant: shouldBeCovariant,
+        );
+      }
+    }
+
+    if (transformedParameters == null) {
+      return executable;
+    }
+
+    if (executable is MethodElement) {
+      var result = MethodElementImpl(executable.name, -1);
+      result.enclosingElement = class_;
+      result.isSynthetic = true;
+      result.parameters = transformedParameters;
+      result.prototype = executable;
+      result.returnType = executable.returnType;
+      result.typeParameters = executable.typeParameters;
+      return result;
+    }
+
+    if (executable is PropertyAccessorElement) {
+      assert(executable.isSetter);
+      var result = PropertyAccessorElementImpl(executable.name, -1);
+      result.enclosingElement = class_;
+      result.isSynthetic = true;
+      result.parameters = transformedParameters;
+      result.prototype = executable;
+      result.returnType = executable.returnType;
+
+      var field = executable.variable;
+      var resultField = FieldElementImpl(field.name, -1);
+      resultField.enclosingElement = class_;
+      resultField.getter = field.getter;
+      resultField.setter = executable;
+      resultField.type = executable.parameters[0].type;
+      result.variable = resultField;
+
+      return result;
+    }
+
+    return executable;
+  }
+
   /// Given one or more [validOverrides], merge them into a single resulting
   /// signature. This signature always exists.
   ExecutableElement _topMerge(
@@ -884,7 +986,7 @@
 
   factory Name(Uri? libraryUri, String name) {
     if (name.startsWith('_')) {
-      var hashCode = Object.hash(libraryUri.hashCode, name.hashCode);
+      var hashCode = Object.hash(libraryUri, name);
       return Name._internal(libraryUri, name, false, hashCode);
     } else {
       return Name._internal(null, name, true, name.hashCode);
@@ -907,3 +1009,34 @@
   @override
   String toString() => libraryUri != null ? '$libraryUri::$name' : name;
 }
+
+class _ParameterDesc {
+  final int? index;
+  final String? name;
+
+  factory _ParameterDesc(int index, ParameterElement element) {
+    return element.isNamed
+        ? _ParameterDesc.name(element.name)
+        : _ParameterDesc.index(index);
+  }
+
+  _ParameterDesc.index(int index)
+      : index = index,
+        name = null;
+
+  _ParameterDesc.name(String name)
+      : index = null,
+        name = name;
+
+  @override
+  int get hashCode {
+    return index?.hashCode ?? name?.hashCode ?? 0;
+  }
+
+  @override
+  bool operator ==(other) {
+    return other is _ParameterDesc &&
+        other.index == index &&
+        other.name == name;
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index 5e1f329..7561115 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -310,168 +310,6 @@
     }
   }
 
-  /// Compares two function types [t] and [s] to see if their corresponding
-  /// parameter types match [parameterRelation], return types match
-  /// [returnRelation], and type parameter bounds match [boundsRelation].
-  ///
-  /// Used for the various relations on function types which have the same
-  /// structural rules for handling optional parameters and arity, but use their
-  /// own relation for comparing corresponding parameters or return types.
-  ///
-  /// If [parameterRelation] is omitted, uses [returnRelation] for both. This
-  /// is convenient for Dart 1 type system methods.
-  ///
-  /// If [boundsRelation] is omitted, uses [returnRelation]. This is for
-  /// backwards compatibility, and convenience for Dart 1 type system methods.
-  static bool relate(FunctionType t, DartType? other,
-      bool Function(DartType t, DartType s) returnRelation,
-      {bool Function(ParameterElement t, ParameterElement s)? parameterRelation,
-      bool Function(DartType bound2, DartType bound1,
-              TypeParameterElement formal2, TypeParameterElement formal1)?
-          boundsRelation}) {
-    parameterRelation ??= (t, s) => returnRelation(t.type, s.type);
-    boundsRelation ??= (t, s, _, __) => returnRelation(t, s);
-
-    // Trivial base cases.
-    if (other == null) {
-      return false;
-    } else if (identical(t, other) ||
-        other.isDynamic ||
-        other.isDartCoreFunction ||
-        other.isDartCoreObject) {
-      return true;
-    } else if (other is! FunctionType) {
-      return false;
-    }
-
-    // This type cast is safe, because we checked it above.
-    FunctionType s = other;
-    if (t.typeFormals.isNotEmpty) {
-      var freshVariables = relateTypeFormals(t, s, boundsRelation);
-      if (freshVariables == null) {
-        return false;
-      }
-      t = t.instantiate(freshVariables);
-      s = s.instantiate(freshVariables);
-    } else if (s.typeFormals.isNotEmpty) {
-      return false;
-    }
-
-    // Test the return types.
-    DartType sRetType = s.returnType;
-    if (!sRetType.isVoid && !returnRelation(t.returnType, sRetType)) {
-      return false;
-    }
-
-    // Test the parameter types.
-    return relateParameters(t.parameters, s.parameters, parameterRelation);
-  }
-
-  /// Compares parameters [tParams] and [sParams] of two function types, taking
-  /// corresponding parameters from the lists, and see if they match
-  /// [parameterRelation].
-  ///
-  /// Corresponding parameters are defined as a pair `(t, s)` where `t` is a
-  /// parameter from [tParams] and `s` is a parameter from [sParams], and both
-  /// `t` and `s` are at the same position (for positional parameters)
-  /// or have the same name (for named parameters).
-  ///
-  /// Used for the various relations on function types which have the same
-  /// structural rules for handling optional parameters and arity, but use their
-  /// own relation for comparing the parameters.
-  static bool relateParameters(
-      List<ParameterElement> tParams,
-      List<ParameterElement> sParams,
-      bool Function(ParameterElement t, ParameterElement s) parameterRelation) {
-    // TODO(jmesserly): this could be implemented with less allocation if we
-    // wanted, by taking advantage of the fact that positional arguments must
-    // appear before named ones.
-    var tRequired = <ParameterElement>[];
-    var tOptional = <ParameterElement>[];
-    var tNamed = <String, ParameterElement>{};
-    for (var p in tParams) {
-      if (p.isRequiredPositional) {
-        tRequired.add(p);
-      } else if (p.isOptionalPositional) {
-        tOptional.add(p);
-      } else {
-        assert(p.isNamed);
-        tNamed[p.name] = p;
-      }
-    }
-
-    var sRequired = <ParameterElement>[];
-    var sOptional = <ParameterElement>[];
-    var sNamed = <String, ParameterElement>{};
-    for (var p in sParams) {
-      if (p.isRequiredPositional) {
-        sRequired.add(p);
-      } else if (p.isOptionalPositional) {
-        sOptional.add(p);
-      } else {
-        assert(p.isNamed);
-        sNamed[p.name] = p;
-      }
-    }
-
-    // If one function has positional and the other has named parameters,
-    // they don't relate.
-    if (sOptional.isNotEmpty && tNamed.isNotEmpty ||
-        tOptional.isNotEmpty && sNamed.isNotEmpty) {
-      return false;
-    }
-
-    // If the passed function includes more named parameters than we do, we
-    // don't relate.
-    if (tNamed.length < sNamed.length) {
-      return false;
-    }
-
-    // For each named parameter in s, make sure we have a corresponding one
-    // that relates.
-    for (String key in sNamed.keys) {
-      var tParam = tNamed[key];
-      if (tParam == null) {
-        return false;
-      }
-      var sParam = sNamed[key]!;
-      if (!parameterRelation(tParam, sParam)) {
-        return false;
-      }
-    }
-
-    // Make sure all of the positional parameters (both required and optional)
-    // relate to each other.
-    var tPositional = tRequired;
-    var sPositional = sRequired;
-
-    if (tOptional.isNotEmpty) {
-      tPositional = tPositional.toList()..addAll(tOptional);
-    }
-
-    if (sOptional.isNotEmpty) {
-      sPositional = sPositional.toList()..addAll(sOptional);
-    }
-
-    // Check that s has enough required parameters.
-    if (sRequired.length < tRequired.length) {
-      return false;
-    }
-
-    // Check that s does not include more positional parameters than we do.
-    if (tPositional.length < sPositional.length) {
-      return false;
-    }
-
-    for (int i = 0; i < sPositional.length; i++) {
-      if (!parameterRelation(tPositional[i], sPositional[i])) {
-        return false;
-      }
-    }
-
-    return true;
-  }
-
   /// Given two functions [f1] and [f2] where f1 and f2 are known to be
   /// generic function types (both have type formals), this checks that they
   /// have the same number of formals, and that those formals have bounds
@@ -1354,6 +1192,7 @@
   /// arguments, attempts to find a compatible set of type arguments.
   ///
   /// Otherwise, calls [DartType.getLeastUpperBound].
+  @Deprecated('Use TypeSystem.leastUpperBound instead')
   static InterfaceType getSmartLeastUpperBound(
       InterfaceType first, InterfaceType second) {
     // TODO(paulberry): this needs to be deprecated and replaced with a method
diff --git a/pkg/analyzer/lib/src/dart/element/type_system.dart b/pkg/analyzer/lib/src/dart/element/type_system.dart
index ce90a43..ef329f4 100644
--- a/pkg/analyzer/lib/src/dart/element/type_system.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_system.dart
@@ -312,8 +312,12 @@
         .toList();
   }
 
-  /// Given a type t, if t is an interface type with a call method defined,
-  /// return the function type for the call method, otherwise return null.
+  /// Given a type [t], if [t] is an interface type with a `call` method
+  /// defined, return the function type for the `call` method, otherwise return
+  /// `null`.
+  ///
+  /// This does not find extension methods (which are not defined on an
+  /// interface type); it is meant to find implicit call references.
   FunctionType? getCallMethodType(DartType t) {
     if (t is InterfaceType) {
       return t
@@ -685,7 +689,7 @@
       return true;
     }
 
-    // A call method tearoff
+    // A 'call' method tearoff.
     if (fromType is InterfaceType &&
         !isNullable(fromType) &&
         acceptsFunctionType(toType)) {
diff --git a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
index 8edc5cf..4264f45 100644
--- a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
@@ -21,7 +21,7 @@
   static const FfiCode ANNOTATION_ON_POINTER_FIELD = FfiCode(
     'ANNOTATION_ON_POINTER_FIELD',
     "Fields in a struct class whose type is 'Pointer' should not have any annotations.",
-    correction: "Try removing the annotation.",
+    correctionMessage: "Try removing the annotation.",
   );
 
   /**
@@ -31,7 +31,7 @@
   static const FfiCode ARGUMENT_MUST_BE_A_CONSTANT = FfiCode(
     'ARGUMENT_MUST_BE_A_CONSTANT',
     "Argument '{0}' must be a constant.",
-    correction: "Try replacing the value with a literal or const.",
+    correctionMessage: "Try replacing the value with a literal or const.",
   );
 
   /**
@@ -40,17 +40,20 @@
   static const FfiCode CREATION_OF_STRUCT_OR_UNION = FfiCode(
     'CREATION_OF_STRUCT_OR_UNION',
     "Subclasses of 'Struct' and 'Union' are backed by native memory, and can't be instantiated by a generative constructor.",
-    correction: "Try allocating it via allocation, or load from a 'Pointer'.",
+    correctionMessage:
+        "Try allocating it via allocation, or load from a 'Pointer'.",
   );
 
   /**
    * Parameters:
-   * 0: the name of the struct class
+   * 0: the name of the subclass
+   * 1: the name of the superclass
    */
   static const FfiCode EMPTY_STRUCT = FfiCode(
     'EMPTY_STRUCT',
-    "Struct '{0}' is empty. Empty structs are undefined behavior.",
-    correction: "Try adding a field to '{0}' or use a different Struct.",
+    "The class '{0}' can’t be empty because it's a subclass of '{1}'.",
+    correctionMessage:
+        "Try adding a field to '{0}' or use a different superclass.",
   );
 
   /**
@@ -59,7 +62,7 @@
   static const FfiCode EXTRA_ANNOTATION_ON_STRUCT_FIELD = FfiCode(
     'EXTRA_ANNOTATION_ON_STRUCT_FIELD',
     "Fields in a struct class must have exactly one annotation indicating the native type.",
-    correction: "Try removing the extra annotation.",
+    correctionMessage: "Try removing the extra annotation.",
   );
 
   /**
@@ -68,16 +71,51 @@
   static const FfiCode EXTRA_SIZE_ANNOTATION_CARRAY = FfiCode(
     'EXTRA_SIZE_ANNOTATION_CARRAY',
     "'Array's must have exactly one 'Array' annotation.",
-    correction: "Try removing the extra annotation.",
+    correctionMessage: "Try removing the extra annotation.",
   );
 
   /**
    * No parameters.
    */
-  static const FfiCode FFI_NATIVE_ONLY_STATIC = FfiCode(
-    'FFI_NATIVE_ONLY_STATIC',
-    "FfiNative annotations can only be used on static functions.",
-    correction: "Change the method to static.",
+  static const FfiCode FFI_NATIVE_MUST_BE_EXTERNAL = FfiCode(
+    'FFI_NATIVE_MUST_BE_EXTERNAL',
+    "FfiNative functions must be declared external.",
+    correctionMessage: "Add the `external` keyword to the function.",
+  );
+
+  /**
+   * No parameters.
+   */
+  static const FfiCode
+      FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER =
+      FfiCode(
+    'FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER',
+    "Only classes extending NativeFieldWrapperClass1 can be passed as Pointer.",
+    correctionMessage: "Pass as Handle instead.",
+  );
+
+  /**
+   * Parameters:
+   * 0: the expected number of parameters
+   * 1: the actual number of parameters
+   */
+  static const FfiCode FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS = FfiCode(
+    'FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS',
+    "Unexpected number of FfiNative annotation parameters. Expected {0} but has {1}.",
+    correctionMessage: "Make sure parameters match the function annotated.",
+  );
+
+  /**
+   * Parameters:
+   * 0: the expected number of parameters
+   * 1: the actual number of parameters
+   */
+  static const FfiCode
+      FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER = FfiCode(
+    'FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER',
+    "Unexpected number of FfiNative annotation parameters. Expected {0} but has {1}. FfiNative instance method annotation must have receiver as first argument.",
+    correctionMessage:
+        "Make sure parameters match the function annotated, including an extra first parameter for the receiver.",
   );
 
   /**
@@ -86,7 +124,7 @@
   static const FfiCode FIELD_INITIALIZER_IN_STRUCT = FfiCode(
     'FIELD_INITIALIZER_IN_STRUCT',
     "Constructors in subclasses of 'Struct' and 'Union' can't have field initializers.",
-    correction:
+    correctionMessage:
         "Try removing the field initializer and marking the field as external.",
   );
 
@@ -96,7 +134,7 @@
   static const FfiCode FIELD_IN_STRUCT_WITH_INITIALIZER = FfiCode(
     'FIELD_IN_STRUCT_WITH_INITIALIZER',
     "Fields in subclasses of 'Struct' and 'Union' can't have initializers.",
-    correction:
+    correctionMessage:
         "Try removing the initializer and marking the field as external.",
   );
 
@@ -106,7 +144,7 @@
   static const FfiCode FIELD_MUST_BE_EXTERNAL_IN_STRUCT = FfiCode(
     'FIELD_MUST_BE_EXTERNAL_IN_STRUCT',
     "Fields of 'Struct' and 'Union' subclasses must be marked external.",
-    correction: "Try adding the 'external' modifier.",
+    correctionMessage: "Try adding the 'external' modifier.",
   );
 
   /**
@@ -116,7 +154,7 @@
   static const FfiCode GENERIC_STRUCT_SUBCLASS = FfiCode(
     'GENERIC_STRUCT_SUBCLASS',
     "The class '{0}' can't extend 'Struct' or 'Union' because it is generic.",
-    correction: "Try removing the type parameters from '{0}'.",
+    correctionMessage: "Try removing the type parameters from '{0}'.",
   );
 
   /**
@@ -125,7 +163,7 @@
   static const FfiCode INVALID_EXCEPTION_VALUE = FfiCode(
     'INVALID_EXCEPTION_VALUE',
     "The method 'Pointer.fromFunction' must not have an exceptional return value (the second argument) when the return type of the function is either 'void', 'Handle' or 'Pointer'.",
-    correction: "Try removing the exceptional return value.",
+    correctionMessage: "Try removing the exceptional return value.",
   );
 
   /**
@@ -135,7 +173,7 @@
   static const FfiCode INVALID_FIELD_TYPE_IN_STRUCT = FfiCode(
     'INVALID_FIELD_TYPE_IN_STRUCT',
     "Fields in struct classes can't have the type '{0}'. They can only be declared as 'int', 'double', 'Array', 'Pointer', or subtype of 'Struct' or 'Union'.",
-    correction:
+    correctionMessage:
         "Try using 'int', 'double', 'Array', 'Pointer', or subtype of 'Struct' or 'Union'.",
   );
 
@@ -145,7 +183,7 @@
   static const FfiCode LEAF_CALL_MUST_NOT_RETURN_HANDLE = FfiCode(
     'LEAF_CALL_MUST_NOT_RETURN_HANDLE',
     "FFI leaf call must not return a Handle.",
-    correction: "Try changing the return type to primitive or struct.",
+    correctionMessage: "Try changing the return type to primitive or struct.",
   );
 
   /**
@@ -154,7 +192,7 @@
   static const FfiCode LEAF_CALL_MUST_NOT_TAKE_HANDLE = FfiCode(
     'LEAF_CALL_MUST_NOT_TAKE_HANDLE',
     "FFI leaf call must not take arguments of type Handle.",
-    correction: "Try changing the argument type to primitive or struct.",
+    correctionMessage: "Try changing the argument type to primitive or struct.",
   );
 
   /**
@@ -163,7 +201,7 @@
   static const FfiCode MISMATCHED_ANNOTATION_ON_STRUCT_FIELD = FfiCode(
     'MISMATCHED_ANNOTATION_ON_STRUCT_FIELD',
     "The annotation does not match the declared type of the field.",
-    correction:
+    correctionMessage:
         "Try using a different annotation or changing the declared type to match.",
   );
 
@@ -173,7 +211,7 @@
   static const FfiCode MISSING_ANNOTATION_ON_STRUCT_FIELD = FfiCode(
     'MISSING_ANNOTATION_ON_STRUCT_FIELD',
     "Fields in a struct class must either have the type 'Pointer' or an annotation indicating the native type.",
-    correction: "Try adding an annotation.",
+    correctionMessage: "Try adding an annotation.",
   );
 
   /**
@@ -182,7 +220,7 @@
   static const FfiCode MISSING_EXCEPTION_VALUE = FfiCode(
     'MISSING_EXCEPTION_VALUE',
     "The method 'Pointer.fromFunction' must have an exceptional return value (the second argument) when the return type of the function is neither 'void', 'Handle' or 'Pointer'.",
-    correction: "Try adding an exceptional return value.",
+    correctionMessage: "Try adding an exceptional return value.",
   );
 
   /**
@@ -192,7 +230,7 @@
   static const FfiCode MISSING_FIELD_TYPE_IN_STRUCT = FfiCode(
     'MISSING_FIELD_TYPE_IN_STRUCT',
     "Fields in struct classes must have an explicitly declared type of 'int', 'double' or 'Pointer'.",
-    correction: "Try using 'int', 'double' or 'Pointer'.",
+    correctionMessage: "Try using 'int', 'double' or 'Pointer'.",
   );
 
   /**
@@ -201,7 +239,7 @@
   static const FfiCode MISSING_SIZE_ANNOTATION_CARRAY = FfiCode(
     'MISSING_SIZE_ANNOTATION_CARRAY',
     "'Array's must have exactly one 'Array' annotation.",
-    correction: "Try adding a 'Array' annotation.",
+    correctionMessage: "Try adding a 'Array' annotation.",
   );
 
   /**
@@ -212,7 +250,8 @@
   static const FfiCode MUST_BE_A_NATIVE_FUNCTION_TYPE = FfiCode(
     'MUST_BE_A_NATIVE_FUNCTION_TYPE',
     "The type '{0}' given to '{1}' must be a valid 'dart:ffi' native function type.",
-    correction: "Try changing the type to only use members for 'dart:ffi'.",
+    correctionMessage:
+        "Try changing the type to only use members for 'dart:ffi'.",
   );
 
   /**
@@ -224,7 +263,7 @@
   static const FfiCode MUST_BE_A_SUBTYPE = FfiCode(
     'MUST_BE_A_SUBTYPE',
     "The type '{0}' must be a subtype of '{1}' for '{2}'.",
-    correction: "Try changing one or both of the type arguments.",
+    correctionMessage: "Try changing one or both of the type arguments.",
   );
 
   /**
@@ -234,7 +273,7 @@
   static const FfiCode NON_CONSTANT_TYPE_ARGUMENT = FfiCode(
     'NON_CONSTANT_TYPE_ARGUMENT',
     "The type arguments to '{0}' must be compile time constants but type parameters are not constants.",
-    correction: "Try changing the type argument to be a constant type.",
+    correctionMessage: "Try changing the type argument to be a constant type.",
   );
 
   /**
@@ -243,8 +282,9 @@
    */
   static const FfiCode NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER = FfiCode(
     'NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER',
-    "The type argument for the pointer '{0}' must be a 'NativeFunction' in order to use 'asFunction'.",
-    correction: "Try changing the type argument to be a 'NativeFunction'.",
+    "The type argument for the pointer '{0}' must be a valid 'NativeFunction' in order to use 'asFunction'.",
+    correctionMessage:
+        "Try changing the function argument in 'NativeFunction' to only use NativeTypes.",
   );
 
   /**
@@ -253,7 +293,7 @@
   static const FfiCode NON_POSITIVE_ARRAY_DIMENSION = FfiCode(
     'NON_POSITIVE_ARRAY_DIMENSION',
     "Array dimensions must be positive numbers.",
-    correction: "Try changing the input to a positive number.",
+    correctionMessage: "Try changing the input to a positive number.",
   );
 
   /**
@@ -263,7 +303,7 @@
   static const FfiCode NON_SIZED_TYPE_ARGUMENT = FfiCode(
     'NON_SIZED_TYPE_ARGUMENT',
     "Type arguments to '{0}' can't have the type '{1}'. They can only be declared as native integer, 'Float', 'Double', 'Pointer', or subtype of 'Struct' or 'Union'.",
-    correction:
+    correctionMessage:
         "Try using a native integer, 'Float', 'Double', 'Pointer', or subtype of 'Struct' or 'Union'.",
   );
 
@@ -273,7 +313,7 @@
   static const FfiCode PACKED_ANNOTATION = FfiCode(
     'PACKED_ANNOTATION',
     "Structs must have at most one 'Packed' annotation.",
-    correction: "Try removing extra 'Packed' annotations.",
+    correctionMessage: "Try removing extra 'Packed' annotations.",
   );
 
   /**
@@ -282,7 +322,7 @@
   static const FfiCode PACKED_ANNOTATION_ALIGNMENT = FfiCode(
     'PACKED_ANNOTATION_ALIGNMENT',
     "Only packing to 1, 2, 4, 8, and 16 bytes is supported.",
-    correction:
+    correctionMessage:
         "Try changing the 'Packed' annotation alignment to 1, 2, 4, 8, or 16.",
   );
 
@@ -294,7 +334,7 @@
   static const FfiCode PACKED_NESTING_NON_PACKED = FfiCode(
     'PACKED_NESTING_NON_PACKED',
     "Nesting the non-packed or less tightly packed struct '{0}' in a packed struct '{1}' is not supported.",
-    correction:
+    correctionMessage:
         "Try packing the nested struct or packing the nested struct more tightly.",
   );
 
@@ -304,7 +344,7 @@
   static const FfiCode SIZE_ANNOTATION_DIMENSIONS = FfiCode(
     'SIZE_ANNOTATION_DIMENSIONS',
     "'Array's must have an 'Array' annotation that matches the dimensions.",
-    correction: "Try adjusting the arguments in the 'Array' annotation.",
+    correctionMessage: "Try adjusting the arguments in the 'Array' annotation.",
   );
 
   /**
@@ -315,7 +355,7 @@
   static const FfiCode SUBTYPE_OF_FFI_CLASS_IN_EXTENDS = FfiCode(
     'SUBTYPE_OF_FFI_CLASS',
     "The class '{0}' can't extend '{1}'.",
-    correction: "Try extending 'Struct' or 'Union'.",
+    correctionMessage: "Try extending 'Struct' or 'Union'.",
     uniqueName: 'SUBTYPE_OF_FFI_CLASS_IN_EXTENDS',
   );
 
@@ -327,7 +367,7 @@
   static const FfiCode SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS = FfiCode(
     'SUBTYPE_OF_FFI_CLASS',
     "The class '{0}' can't implement '{1}'.",
-    correction: "Try extending 'Struct' or 'Union'.",
+    correctionMessage: "Try extending 'Struct' or 'Union'.",
     uniqueName: 'SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS',
   );
 
@@ -339,7 +379,7 @@
   static const FfiCode SUBTYPE_OF_FFI_CLASS_IN_WITH = FfiCode(
     'SUBTYPE_OF_FFI_CLASS',
     "The class '{0}' can't mix in '{1}'.",
-    correction: "Try extending 'Struct' or 'Union'.",
+    correctionMessage: "Try extending 'Struct' or 'Union'.",
     uniqueName: 'SUBTYPE_OF_FFI_CLASS_IN_WITH',
   );
 
@@ -351,7 +391,7 @@
   static const FfiCode SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS = FfiCode(
     'SUBTYPE_OF_STRUCT_CLASS',
     "The class '{0}' can't extend '{1}' because '{1}' is a subtype of 'Struct' or 'Union'.",
-    correction: "Try extending 'Struct' or 'Union' directly.",
+    correctionMessage: "Try extending 'Struct' or 'Union' directly.",
     uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS',
   );
 
@@ -363,7 +403,7 @@
   static const FfiCode SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS = FfiCode(
     'SUBTYPE_OF_STRUCT_CLASS',
     "The class '{0}' can't implement '{1}' because '{1}' is a subtype of 'Struct' or 'Union'.",
-    correction: "Try extending 'Struct' or 'Union' directly.",
+    correctionMessage: "Try extending 'Struct' or 'Union' directly.",
     uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS',
   );
 
@@ -375,24 +415,24 @@
   static const FfiCode SUBTYPE_OF_STRUCT_CLASS_IN_WITH = FfiCode(
     'SUBTYPE_OF_STRUCT_CLASS',
     "The class '{0}' can't mix in '{1}' because '{1}' is a subtype of 'Struct' or 'Union'.",
-    correction: "Try extending 'Struct' or 'Union' directly.",
+    correctionMessage: "Try extending 'Struct' or 'Union' directly.",
     uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_WITH',
   );
 
   /// Initialize a newly created error code to have the given [name].
   const FfiCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'FfiCode.${uniqueName ?? name}',
         );
 
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
index f1f850a..8dc8f2a 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
@@ -30,7 +30,7 @@
   // to have either a single parameter of type `Object` or two parameters of
   // type `Object` and `StackTrace`.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the closure being
   // passed to `catchError` doesn't take any parameters, but the function is
@@ -85,7 +85,7 @@
   static const HintCode ASSIGNMENT_OF_DO_NOT_STORE = HintCode(
     'ASSIGNMENT_OF_DO_NOT_STORE',
     "'{0}' is marked 'doNotStore' and shouldn't be assigned to a field or top-level variable.",
-    correction: "Try removing the assignment.",
+    correctionMessage: "Try removing the assignment.",
   );
 
   /**
@@ -95,7 +95,7 @@
   static const HintCode CAN_BE_NULL_AFTER_NULL_AWARE = HintCode(
     'CAN_BE_NULL_AFTER_NULL_AWARE',
     "The receiver uses '?.', so its value can be null.",
-    correction: "Replace the '.' with a '?.' in the invocation.",
+    correctionMessage: "Replace the '.' with a '?.' in the invocation.",
   );
 
   /**
@@ -109,7 +109,7 @@
   // The analyzer produces this diagnostic when code is found that won't be
   // executed because execution will never reach the code.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the invocation of
   // `print` occurs after the function has returned:
@@ -154,7 +154,7 @@
   static const HintCode DEAD_CODE = HintCode(
     'DEAD_CODE',
     "Dead code.",
-    correction:
+    correctionMessage:
         "Try removing the code, or fixing the code before it so that it can be reached.",
     hasPublishedDocs: true,
   );
@@ -173,7 +173,7 @@
   // the thrown object is selected, and both of those forms will match any
   // object, so no `catch` clauses that follow them will be selected.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -212,7 +212,7 @@
   static const HintCode DEAD_CODE_CATCH_FOLLOWING_CATCH = HintCode(
     'DEAD_CODE_CATCH_FOLLOWING_CATCH',
     "Dead code: Catch clauses after a 'catch (e)' or an 'on Object catch (e)' are never reached.",
-    correction:
+    correctionMessage:
         "Try reordering the catch clauses so that they can be reached, or removing the unreachable catch clauses.",
     hasPublishedDocs: true,
   );
@@ -235,7 +235,7 @@
   // matches anything matchable by the highlighted clause, so the highlighted
   // clause will never be selected.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -274,7 +274,7 @@
   static const HintCode DEAD_CODE_ON_CATCH_SUBTYPE = HintCode(
     'DEAD_CODE_ON_CATCH_SUBTYPE',
     "Dead code: This on-catch block won’t be executed because '{0}' is a subtype of '{1}' and hence will have been caught already.",
-    correction:
+    correctionMessage:
         "Try reordering the catch clauses so that this block can be reached, or removing the unreachable catch clause.",
     hasPublishedDocs: true,
   );
@@ -309,7 +309,7 @@
   static const HintCode DEPRECATED_EXTENDS_FUNCTION = HintCode(
     'DEPRECATED_SUBTYPE_OF_FUNCTION',
     "Extending 'Function' is deprecated.",
-    correction: "Try removing 'Function' from the 'extends' clause.",
+    correctionMessage: "Try removing 'Function' from the 'extends' clause.",
     hasPublishedDocs: true,
     uniqueName: 'DEPRECATED_EXTENDS_FUNCTION',
   );
@@ -320,7 +320,7 @@
   static const HintCode DEPRECATED_FUNCTION_CLASS_DECLARATION = HintCode(
     'DEPRECATED_FUNCTION_CLASS_DECLARATION',
     "Declaring a class named 'Function' is deprecated.",
-    correction: "Try renaming the class.",
+    correctionMessage: "Try renaming the class.",
   );
 
   /**
@@ -329,7 +329,7 @@
   static const HintCode DEPRECATED_IMPLEMENTS_FUNCTION = HintCode(
     'DEPRECATED_SUBTYPE_OF_FUNCTION',
     "Implementing 'Function' has no effect.",
-    correction: "Try removing 'Function' from the 'implements' clause.",
+    correctionMessage: "Try removing 'Function' from the 'implements' clause.",
     hasPublishedDocs: true,
     uniqueName: 'DEPRECATED_IMPLEMENTS_FUNCTION',
   );
@@ -343,7 +343,7 @@
   // The analyzer produces this diagnostic when a deprecated library or class
   // member is used in a different package.
   //
-  // #### Examples
+  // #### Example
   //
   // If the method `m` in the class `C` is annotated with `@deprecated`, then
   // the following code produces this diagnostic:
@@ -361,7 +361,7 @@
   static const HintCode DEPRECATED_MEMBER_USE = HintCode(
     'DEPRECATED_MEMBER_USE',
     "'{0}' is deprecated and shouldn't be used.",
-    correction:
+    correctionMessage:
         "Try replacing the use of the deprecated member with the replacement.",
     hasPublishedDocs: true,
   );
@@ -375,7 +375,7 @@
   // The analyzer produces this diagnostic when a deprecated library member or
   // class member is used in the same package in which it's declared.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` is deprecated:
   //
@@ -393,7 +393,7 @@
   static const HintCode DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE = HintCode(
     'DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE',
     "'{0}' is deprecated and shouldn't be used.",
-    correction:
+    correctionMessage:
         "Try replacing the use of the deprecated member with the replacement.",
     hasPublishedDocs: true,
   );
@@ -407,7 +407,7 @@
       HintCode(
     'DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE',
     "'{0}' is deprecated and shouldn't be used. {1}.",
-    correction:
+    correctionMessage:
         "Try replacing the use of the deprecated member with the replacement.",
     hasPublishedDocs: true,
     uniqueName: 'DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE',
@@ -421,7 +421,7 @@
   static const HintCode DEPRECATED_MEMBER_USE_WITH_MESSAGE = HintCode(
     'DEPRECATED_MEMBER_USE',
     "'{0}' is deprecated and shouldn't be used. {1}.",
-    correction:
+    correctionMessage:
         "Try replacing the use of the deprecated member with the replacement.",
     hasPublishedDocs: true,
     uniqueName: 'DEPRECATED_MEMBER_USE_WITH_MESSAGE',
@@ -433,18 +433,28 @@
   static const HintCode DEPRECATED_MIXIN_FUNCTION = HintCode(
     'DEPRECATED_SUBTYPE_OF_FUNCTION',
     "Mixing in 'Function' is deprecated.",
-    correction: "Try removing 'Function' from the 'with' clause.",
+    correctionMessage: "Try removing 'Function' from the 'with' clause.",
     hasPublishedDocs: true,
     uniqueName: 'DEPRECATED_MIXIN_FUNCTION',
   );
 
   /**
+   * No parameters.
+   */
+  static const HintCode DEPRECATED_NEW_IN_COMMENT_REFERENCE = HintCode(
+    'DEPRECATED_NEW_IN_COMMENT_REFERENCE',
+    "Using the 'new' keyword in a comment reference is deprecated.",
+    correctionMessage: "Try referring to a constructor by its name.",
+  );
+
+  /**
    * Hint to use the ~/ operator.
    */
   static const HintCode DIVISION_OPTIMIZATION = HintCode(
     'DIVISION_OPTIMIZATION',
     "The operator x ~/ y is more efficient than (x / y).toInt().",
-    correction: "Try re-writing the expression to use the '~/' operator.",
+    correctionMessage:
+        "Try re-writing the expression to use the '~/' operator.",
   );
 
   /**
@@ -488,7 +498,7 @@
   static const HintCode DUPLICATE_HIDDEN_NAME = HintCode(
     'DUPLICATE_HIDDEN_NAME',
     "Duplicate hidden name.",
-    correction:
+    correctionMessage:
         "Try removing the repeated name from the list of hidden members.",
     hasPublishedDocs: true,
   );
@@ -504,7 +514,7 @@
   // because it's already included in the same `ignore` comment or because it
   // appears in an `ignore-in-file` comment.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the diagnostic named
   // `unused_local_variable` is already being ignored for the whole file so it
@@ -542,7 +552,7 @@
   static const HintCode DUPLICATE_IGNORE = HintCode(
     'DUPLICATE_IGNORE',
     "The diagnostic '{0}' doesn't need to be ignored here because it's already being ignored.",
-    correction:
+    correctionMessage:
         "Try removing the name from the list, or removing the whole comment if this is the only name in the list.",
     hasPublishedDocs: true,
   );
@@ -558,7 +568,7 @@
   // that is the same as an import before it in the file. The second import
   // doesn’t add value and should be removed.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -581,7 +591,7 @@
   static const HintCode DUPLICATE_IMPORT = HintCode(
     'DUPLICATE_IMPORT',
     "Duplicate import.",
-    correction: "Try removing all but one import of the library.",
+    correctionMessage: "Try removing all but one import of the library.",
     hasPublishedDocs: true,
   );
 
@@ -626,7 +636,7 @@
   static const HintCode DUPLICATE_SHOWN_NAME = HintCode(
     'DUPLICATE_SHOWN_NAME',
     "Duplicate shown name.",
-    correction:
+    correctionMessage:
         "Try removing the repeated name from the list of shown members.",
     hasPublishedDocs: true,
   );
@@ -677,7 +687,7 @@
   static const HintCode EQUAL_ELEMENTS_IN_SET = HintCode(
     'EQUAL_ELEMENTS_IN_SET',
     "Two elements in a set literal shouldn't be equal.",
-    correction: "Change or remove the duplicate element.",
+    correctionMessage: "Change or remove the duplicate element.",
     hasPublishedDocs: true,
   );
 
@@ -726,7 +736,7 @@
   static const HintCode EQUAL_KEYS_IN_MAP = HintCode(
     'EQUAL_KEYS_IN_MAP',
     "Two keys in a map literal shouldn't be equal.",
-    correction: "Change or remove the duplicate key.",
+    correctionMessage: "Change or remove the duplicate key.",
     hasPublishedDocs: true,
   );
 
@@ -741,7 +751,7 @@
       HintCode(
     'FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE',
     "A file in the 'lib' directory shouldn't import a file outside the 'lib' directory.",
-    correction:
+    correctionMessage:
         "Try removing the import, or moving the imported file inside the 'lib' directory.",
   );
 
@@ -756,7 +766,7 @@
       HintCode(
     'FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE',
     "A file outside the 'lib' directory shouldn't reference a file inside the 'lib' directory using a relative path.",
-    correction: "Try using a package: URI instead.",
+    correctionMessage: "Try using a package: URI instead.",
   );
 
   /**
@@ -835,7 +845,7 @@
   static const HintCode IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION = HintCode(
     'IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION',
     "The imported library defines a top-level function named 'loadLibrary' that is hidden by deferring this library.",
-    correction:
+    correctionMessage:
         "Try changing the import to not be deferred, or rename the function in the imported library.",
     hasPublishedDocs: true,
   );
@@ -846,7 +856,7 @@
   static const HintCode IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE = HintCode(
     'IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE',
     "The library '{0}' is legacy, and should not be imported into a null safe library.",
-    correction: "Try migrating the imported library.",
+    correctionMessage: "Try migrating the imported library.",
   );
 
   /**
@@ -856,7 +866,7 @@
   static const HintCode INFERENCE_FAILURE_ON_COLLECTION_LITERAL = HintCode(
     'INFERENCE_FAILURE_ON_COLLECTION_LITERAL',
     "The type argument(s) of '{0}' can't be inferred.",
-    correction: "Use explicit type argument(s) for '{0}'.",
+    correctionMessage: "Use explicit type argument(s) for '{0}'.",
   );
 
   /**
@@ -866,7 +876,7 @@
   static const HintCode INFERENCE_FAILURE_ON_FUNCTION_INVOCATION = HintCode(
     'INFERENCE_FAILURE_ON_FUNCTION_INVOCATION',
     "The type argument(s) of the function '{0}' can't be inferred.",
-    correction: "Use explicit type argument(s) for '{0}'.",
+    correctionMessage: "Use explicit type argument(s) for '{0}'.",
   );
 
   /**
@@ -879,7 +889,7 @@
   static const HintCode INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE = HintCode(
     'INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE',
     "The return type of '{0}' cannot be inferred.",
-    correction: "Declare the return type of '{0}'.",
+    correctionMessage: "Declare the return type of '{0}'.",
   );
 
   /**
@@ -889,7 +899,7 @@
   static const HintCode INFERENCE_FAILURE_ON_GENERIC_INVOCATION = HintCode(
     'INFERENCE_FAILURE_ON_GENERIC_INVOCATION',
     "The type argument(s) of the generic function type '{0}' can't be inferred.",
-    correction: "Use explicit type argument(s) for '{0}'.",
+    correctionMessage: "Use explicit type argument(s) for '{0}'.",
   );
 
   /**
@@ -900,7 +910,7 @@
   static const HintCode INFERENCE_FAILURE_ON_INSTANCE_CREATION = HintCode(
     'INFERENCE_FAILURE_ON_INSTANCE_CREATION',
     "The type argument(s) of the constructor '{0}' can't be inferred.",
-    correction: "Use explicit type argument(s) for '{0}'.",
+    correctionMessage: "Use explicit type argument(s) for '{0}'.",
   );
 
   /**
@@ -910,7 +920,7 @@
   static const HintCode INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE = HintCode(
     'INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE',
     "The type of {0} can't be inferred without either a type or initializer.",
-    correction: "Try specifying the type of the variable.",
+    correctionMessage: "Try specifying the type of the variable.",
   );
 
   /**
@@ -920,7 +930,7 @@
   static const HintCode INFERENCE_FAILURE_ON_UNTYPED_PARAMETER = HintCode(
     'INFERENCE_FAILURE_ON_UNTYPED_PARAMETER',
     "The type of {0} can't be inferred; a type must be explicitly provided.",
-    correction: "Try specifying the type of the parameter.",
+    correctionMessage: "Try specifying the type of the parameter.",
   );
 
   /**
@@ -943,7 +953,7 @@
   static const HintCode INVALID_EXPORT_OF_INTERNAL_ELEMENT = HintCode(
     'INVALID_EXPORT_OF_INTERNAL_ELEMENT',
     "The member '{0}' can't be exported as a part of a package's public API.",
-    correction: "Try using a hide clause to hide '{0}'.",
+    correctionMessage: "Try using a hide clause to hide '{0}'.",
   );
 
   /**
@@ -957,7 +967,7 @@
       HintCode(
     'INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY',
     "The member '{0}' can't be exported as a part of a package's public API, but is indirectly exported as part of the signature of '{1}'.",
-    correction: "Try using a hide clause to hide '{0}'.",
+    correctionMessage: "Try using a hide clause to hide '{0}'.",
   );
 
   /**
@@ -1024,7 +1034,7 @@
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override number must begin with '@dart'",
-    correction:
+    correctionMessage:
         "Specify a Dart language version override with a comment like '// @dart = 2.0'.",
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN',
   );
@@ -1044,7 +1054,7 @@
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override comment must be specified with an '=' character",
-    correction:
+    correctionMessage:
         "Specify a Dart language version override with a comment like '// @dart = 2.0'.",
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS',
   );
@@ -1052,14 +1062,14 @@
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The language version override can't specify a version greater than the latest known language version: {0}.{1}",
-    correction: "Try removing the language version override.",
+    correctionMessage: "Try removing the language version override.",
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER',
   );
 
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The language version override must be before any declaration or directive.",
-    correction:
+    correctionMessage:
         "Try moving the language version override to the top of the file.",
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION',
   );
@@ -1079,7 +1089,7 @@
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override comment must be specified with the word 'dart' in all lower case",
-    correction:
+    correctionMessage:
         "Specify a Dart language version override with a comment like '// @dart = 2.0'.",
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE',
   );
@@ -1099,7 +1109,7 @@
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override comment must be specified with a version number, like '2.0', after the '=' character.",
-    correction:
+    correctionMessage:
         "Specify a Dart language version override with a comment like '// @dart = 2.0'.",
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER',
   );
@@ -1119,7 +1129,7 @@
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override number can't be prefixed with a letter",
-    correction:
+    correctionMessage:
         "Specify a Dart language version override with a comment like '// @dart = 2.0'.",
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX',
   );
@@ -1140,7 +1150,7 @@
       HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override comment can't be followed by any non-whitespace characters",
-    correction:
+    correctionMessage:
         "Specify a Dart language version override with a comment like '// @dart = 2.0'.",
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS',
   );
@@ -1161,7 +1171,7 @@
       HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override comment must be specified with exactly two slashes.",
-    correction:
+    correctionMessage:
         "Specify a Dart language version override with a comment like '// @dart = 2.0'.",
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES',
   );
@@ -1231,13 +1241,12 @@
    * This hint is generated anywhere where `@nonVirtual` annotates something
    * other than a non-abstract instance member in a class or mixin.
    *
-   * Parameters:
-   * 0: the name of the member
+   * No Parameters.
    */
   static const HintCode INVALID_NON_VIRTUAL_ANNOTATION = HintCode(
     'INVALID_NON_VIRTUAL_ANNOTATION',
-    "The member '{0}' can't be '@nonVirtual' because it isn't a concrete instance member.",
-    correction: "Try removing @nonVirtual.",
+    "The annotation '@nonVirtual' can only be applied to a concrete instance member.",
+    correctionMessage: "Try removing @nonVirtual.",
   );
 
   /**
@@ -1263,7 +1272,7 @@
   static const HintCode INVALID_REQUIRED_NAMED_PARAM = HintCode(
     'INVALID_REQUIRED_NAMED_PARAM',
     "The type parameter '{0}' is annotated with @required but only named parameters without a default value can be annotated with it.",
-    correction: "Remove @required.",
+    correctionMessage: "Remove @required.",
   );
 
   /**
@@ -1276,7 +1285,7 @@
   static const HintCode INVALID_REQUIRED_OPTIONAL_POSITIONAL_PARAM = HintCode(
     'INVALID_REQUIRED_OPTIONAL_POSITIONAL_PARAM',
     "Incorrect use of the annotation @required on the optional positional parameter '{0}'. Optional positional parameters cannot be required.",
-    correction: "Remove @required.",
+    correctionMessage: "Remove @required.",
   );
 
   /**
@@ -1289,20 +1298,19 @@
   static const HintCode INVALID_REQUIRED_POSITIONAL_PARAM = HintCode(
     'INVALID_REQUIRED_POSITIONAL_PARAM',
     "Redundant use of the annotation @required on the required positional parameter '{0}'.",
-    correction: "Remove @required.",
+    correctionMessage: "Remove @required.",
   );
 
   /**
    * This hint is generated anywhere where `@sealed` annotates something other
    * than a class.
    *
-   * Parameters:
-   * 0: the name of the member
+   * No parameters.
    */
   static const HintCode INVALID_SEALED_ANNOTATION = HintCode(
     'INVALID_SEALED_ANNOTATION',
-    "The member '{0}' is annotated with '@sealed' but only classes can be annotated with it.",
-    correction: "Remove @sealed.",
+    "The annotation '@sealed' can only be applied to classes.",
+    correctionMessage: "Remove @sealed.",
   );
 
   /**
@@ -1374,6 +1382,7 @@
   static const HintCode INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER = HintCode(
     'INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER',
     "The member '{0}' can only be used for overriding.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1415,7 +1424,7 @@
   // The analyzer produces this diagnostic when either the `@visibleForTemplate`
   // or `@visibleForTesting` annotation is applied to a non-public declaration.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -1486,17 +1495,8 @@
   // ```
   static const HintCode INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION = HintCode(
     'INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION',
-    "The declaration '{0}' is annotated with 'visibleForOverriding'. Because '{0}' isn't an interface member that could be overridden, the annotation is meaningless.",
-  );
-
-  /**
-   * Generate a hint for an element that is annotated with `@JS(...)` whose
-   * library declaration is not similarly annotated.
-   */
-  static const HintCode MISSING_JS_LIB_ANNOTATION = HintCode(
-    'MISSING_JS_LIB_ANNOTATION',
-    "The @JS() annotation can only be used if it is also declared on the library directive.",
-    correction: "Try adding the annotation to the library directive.",
+    "The annotation 'visibleForOverriding' can only be applied to a public instance member that can be overridden.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1512,7 +1512,7 @@
   // named parameter that is annotated as being required is invoked without
   // providing a value for the parameter.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the named parameter `x`
   // is required:
@@ -1573,7 +1573,7 @@
   // throw implicitly returns `null`. This is rarely the desired behavior. The
   // analyzer produces this diagnostic when it finds an implicit return.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` doesn't end with a
   // return:
@@ -1594,7 +1594,7 @@
   static const HintCode MISSING_RETURN = HintCode(
     'MISSING_RETURN',
     "This function has a return type of '{0}', but doesn't end with a return statement.",
-    correction:
+    correctionMessage:
         "Try adding a return statement, or changing the return type to 'void'.",
     hasPublishedDocs: true,
   );
@@ -1613,7 +1613,7 @@
   // Classes that are sealed can't be extended, implemented, mixed in, or used
   // as a superclass constraint.
   //
-  // #### Examples
+  // #### Example
   //
   // If the package `p` defines a sealed class:
   //
@@ -1642,7 +1642,7 @@
   static const HintCode MIXIN_ON_SEALED_CLASS = HintCode(
     'MIXIN_ON_SEALED_CLASS',
     "The class '{0}' shouldn't be used as a mixin constraint because it is sealed, and any class mixing in this mixin must have '{0}' as a superclass.",
-    correction:
+    correctionMessage:
         "Try composing with this class, or refer to its documentation for more information.",
     hasPublishedDocs: true,
   );
@@ -1658,7 +1658,7 @@
   // marked as being immutable using the annotation `@immutable` or if it's a
   // subclass of an immutable class.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the field `x` isn't
   // final:
@@ -1717,7 +1717,7 @@
   // that is annotated as `@mustCallSuper` doesn't invoke the overridden method
   // as required.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the method `m` in `B`
   // doesn't invoke the overridden method `m` in `A`:
@@ -1776,7 +1776,7 @@
   // that the constructor should be used to create a constant value whenever
   // possible.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -1808,7 +1808,7 @@
   static const HintCode NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR = HintCode(
     'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR',
     "This instance creation must be 'const', because the {0} constructor is marked as '@literal'.",
-    correction: "Try adding a 'const' keyword.",
+    correctionMessage: "Try adding a 'const' keyword.",
     hasPublishedDocs: true,
   );
 
@@ -1823,7 +1823,7 @@
       HintCode(
     'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR',
     "This instance creation must be 'const', because the {0} constructor is marked as '@literal'.",
-    correction: "Try replacing the 'new' keyword with 'const'.",
+    correctionMessage: "Try replacing the 'new' keyword with 'const'.",
     hasPublishedDocs: true,
     uniqueName: 'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW',
   );
@@ -1867,7 +1867,7 @@
   static const HintCode NULLABLE_TYPE_IN_CATCH_CLAUSE = HintCode(
     'NULLABLE_TYPE_IN_CATCH_CLAUSE',
     "A potentially nullable type can't be used in an 'on' clause because it isn't valid to throw a nullable expression.",
-    correction: "Try using a non-nullable type.",
+    correctionMessage: "Try using a non-nullable type.",
     hasPublishedDocs: true,
   );
 
@@ -1908,7 +1908,8 @@
   static const HintCode NULL_ARGUMENT_TO_NON_NULL_TYPE = HintCode(
     'NULL_ARGUMENT_TO_NON_NULL_TYPE',
     "'{0}' shouldn't be called with a null argument for the non-nullable type argument '{1}'.",
-    correction: "Try adding a non-null argument.",
+    correctionMessage: "Try adding a non-null argument.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1927,7 +1928,7 @@
   static const HintCode NULL_AWARE_IN_CONDITION = HintCode(
     'NULL_AWARE_IN_CONDITION',
     "The value of the '?.' operator can be 'null', which isn't appropriate in a condition.",
-    correction:
+    correctionMessage:
         "Try replacing the '?.' with a '.', testing the left-hand side for null if necessary.",
   );
 
@@ -1957,7 +1958,7 @@
   static const HintCode OVERRIDE_ON_NON_OVERRIDING_FIELD = HintCode(
     'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
     "The field doesn't override an inherited getter or setter.",
-    correction:
+    correctionMessage:
         "Try updating this class to match the superclass, or removing the override annotation.",
     hasPublishedDocs: true,
     uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_FIELD',
@@ -1971,7 +1972,7 @@
   static const HintCode OVERRIDE_ON_NON_OVERRIDING_GETTER = HintCode(
     'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
     "The getter doesn't override an inherited getter.",
-    correction:
+    correctionMessage:
         "Try updating this class to match the superclass, or removing the override annotation.",
     hasPublishedDocs: true,
     uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_GETTER',
@@ -1988,7 +1989,7 @@
   // the `@override` annotation, but the member isn’t declared in any of the
   // supertypes of the class.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `m` isn't declared in
   // any of the supertypes of `C`:
@@ -2019,7 +2020,7 @@
   static const HintCode OVERRIDE_ON_NON_OVERRIDING_METHOD = HintCode(
     'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
     "The method doesn't override an inherited method.",
-    correction:
+    correctionMessage:
         "Try updating this class to match the superclass, or removing the override annotation.",
     hasPublishedDocs: true,
     uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_METHOD',
@@ -2033,7 +2034,7 @@
   static const HintCode OVERRIDE_ON_NON_OVERRIDING_SETTER = HintCode(
     'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
     "The setter doesn't override an inherited setter.",
-    correction:
+    correctionMessage:
         "Try updating this class to match the superclass, or removing the override annotation.",
     hasPublishedDocs: true,
     uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_SETTER',
@@ -2067,7 +2068,7 @@
   static const HintCode RECEIVER_OF_TYPE_NEVER = HintCode(
     'RECEIVER_OF_TYPE_NEVER',
     "The receiver is of type 'Never', and will never complete with a value.",
-    correction:
+    correctionMessage:
         "Try checking for throw expressions or type errors in the receiver",
   );
 
@@ -2078,7 +2079,7 @@
   static const HintCode RETURN_OF_DO_NOT_STORE = HintCode(
     'RETURN_OF_DO_NOT_STORE',
     "'{0}' is annotated with 'doNotStore' and shouldn't be returned unless '{1}' is also annotated.",
-    correction: "Annotate '{1}' with 'doNotStore'.",
+    correctionMessage: "Annotate '{1}' with 'doNotStore'.",
   );
 
   /**
@@ -2094,7 +2095,7 @@
   // `catchError` attempts to return the value from the callback as the result
   // of the future, which results in another exception being thrown.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `future` is declared to
   // return an `int` while `callback` is declared to return a `String`, and
@@ -2165,7 +2166,7 @@
   // earlier versions, these classes weren't defined in `dart:core`, so the
   // import was necessary.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.1.0:
@@ -2204,7 +2205,7 @@
   static const HintCode SDK_VERSION_ASYNC_EXPORTED_FROM_CORE = HintCode(
     'SDK_VERSION_ASYNC_EXPORTED_FROM_CORE',
     "The class '{0}' wasn't exported from 'dart:core' until version 2.1, but this code is required to be able to run on earlier versions.",
-    correction:
+    correctionMessage:
         "Try either importing 'dart:async' or updating the SDK constraints.",
     hasPublishedDocs: true,
   );
@@ -2220,7 +2221,7 @@
   // [constant context][] wasn't supported in earlier versions, so this code
   // won't be able to run against earlier versions of the SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.3.2:
@@ -2260,7 +2261,7 @@
   static const HintCode SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT = HintCode(
     'SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT',
     "The use of an as expression in a constant expression wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
     hasPublishedDocs: true,
   );
 
@@ -2276,7 +2277,7 @@
   // versions, so this code won't be able to run against earlier versions of the
   // SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.3.2:
@@ -2318,7 +2319,7 @@
   static const HintCode SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT = HintCode(
     'SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT',
     "The use of the operator '{0}' for 'bool' operands in a constant context wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
     hasPublishedDocs: true,
   );
 
@@ -2376,8 +2377,9 @@
   static const HintCode SDK_VERSION_CONSTRUCTOR_TEAROFFS = HintCode(
     'SDK_VERSION_CONSTRUCTOR_TEAROFFS',
     "Tearing off a constructor requires the 'constructor-tearoffs' language feature.",
-    correction:
+    correctionMessage:
         "Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -2391,7 +2393,7 @@
   // in a [constant context][] wasn't supported in earlier versions, so this
   // code won't be able to run against earlier versions of the SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.3.2:
@@ -2437,7 +2439,7 @@
   static const HintCode SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT = HintCode(
     'SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT',
     "Using the operator '==' for non-primitive types wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
     hasPublishedDocs: true,
   );
 
@@ -2452,7 +2454,7 @@
   // versions, so this code won't be able to run against earlier versions of the
   // SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.6.0:
@@ -2497,7 +2499,7 @@
   static const HintCode SDK_VERSION_EXTENSION_METHODS = HintCode(
     'SDK_VERSION_EXTENSION_METHODS',
     "Extension methods weren't supported until version 2.6.0, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
     hasPublishedDocs: true,
   );
 
@@ -2511,7 +2513,7 @@
   // operator wasn't supported in earlier versions, so this code won't be able
   // to run against earlier versions of the SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.14.0:
@@ -2556,7 +2558,8 @@
   static const HintCode SDK_VERSION_GT_GT_GT_OPERATOR = HintCode(
     'SDK_VERSION_GT_GT_GT_OPERATOR',
     "The operator '>>>' wasn't supported until version 2.14.0, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -2570,7 +2573,7 @@
   // [constant context][] wasn't supported in earlier versions, so this code
   // won't be able to run against earlier versions of the SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.3.2:
@@ -2611,7 +2614,7 @@
   static const HintCode SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT = HintCode(
     'SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT',
     "The use of an is expression in a constant context wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
     hasPublishedDocs: true,
   );
 
@@ -2625,7 +2628,7 @@
   // 2.12.0. This class wasn't defined in earlier versions, so this code won't
   // be able to run against earlier versions of the SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.12.0:
@@ -2663,7 +2666,7 @@
   static const HintCode SDK_VERSION_NEVER = HintCode(
     'SDK_VERSION_NEVER',
     "The type 'Never' wasn't supported until version 2.12.0, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
     hasPublishedDocs: true,
   );
 
@@ -2677,7 +2680,7 @@
   // literals weren't supported in earlier versions, so this code won't be able
   // to run against earlier versions of the SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.2.0:
@@ -2714,7 +2717,7 @@
   static const HintCode SDK_VERSION_SET_LITERAL = HintCode(
     'SDK_VERSION_SET_LITERAL',
     "Set literals weren't supported until version 2.2, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
     hasPublishedDocs: true,
   );
 
@@ -2729,7 +2732,7 @@
   // versions, so this code won't be able to run against earlier versions of the
   // SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.3.0:
@@ -2774,7 +2777,7 @@
   static const HintCode SDK_VERSION_UI_AS_CODE = HintCode(
     'SDK_VERSION_UI_AS_CODE',
     "The for, if, and spread elements weren't supported until version 2.3.0, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
     hasPublishedDocs: true,
   );
 
@@ -2789,7 +2792,7 @@
   // [constant context][] wasn't supported in earlier versions, so this code
   // won't be able to run against earlier versions of the SDK.
   //
-  // #### Examples
+  // #### Example
   //
   // Here's an example of a pubspec that defines an SDK constraint with a lower
   // bound of less than 2.5.0:
@@ -2836,7 +2839,7 @@
   static const HintCode SDK_VERSION_UI_AS_CODE_IN_CONST_CONTEXT = HintCode(
     'SDK_VERSION_UI_AS_CODE_IN_CONST_CONTEXT',
     "The if and spread elements weren't supported in constant expressions until version 2.5.0, but this code is required to be able to run on earlier versions.",
-    correction: "Try updating the SDK constraints.",
+    correctionMessage: "Try updating the SDK constraints.",
     hasPublishedDocs: true,
   );
 
@@ -2849,7 +2852,7 @@
   static const HintCode STRICT_RAW_TYPE = HintCode(
     'STRICT_RAW_TYPE',
     "The generic type '{0}' should have explicit type arguments but doesn't.",
-    correction: "Use explicit type arguments for '{0}'.",
+    correctionMessage: "Use explicit type arguments for '{0}'.",
   );
 
   /**
@@ -2905,7 +2908,7 @@
   static const HintCode SUBTYPE_OF_SEALED_CLASS = HintCode(
     'SUBTYPE_OF_SEALED_CLASS',
     "The class '{0}' shouldn't be extended, mixed in, or implemented because it's sealed.",
-    correction:
+    correctionMessage:
         "Try composing instead of inheriting, or refer to the documentation of '{0}' for more information.",
     hasPublishedDocs: true,
   );
@@ -2920,7 +2923,7 @@
   // is `Null`, so the code is both more readable and more performant when it
   // tests for `null` explicitly.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the code is testing to
   // see whether the value of `s` is `null` by using a type check:
@@ -2961,7 +2964,7 @@
   static const HintCode TYPE_CHECK_IS_NOT_NULL = HintCode(
     'TYPE_CHECK_WITH_NULL',
     "Tests for non-null should be done with '!= null'.",
-    correction: "Try replacing the 'is! Null' check with '!= null'.",
+    correctionMessage: "Try replacing the 'is! Null' check with '!= null'.",
     hasPublishedDocs: true,
     uniqueName: 'TYPE_CHECK_IS_NOT_NULL',
   );
@@ -2972,7 +2975,7 @@
   static const HintCode TYPE_CHECK_IS_NULL = HintCode(
     'TYPE_CHECK_WITH_NULL',
     "Tests for null should be done with '== null'.",
-    correction: "Try replacing the 'is Null' check with '== null'.",
+    correctionMessage: "Try replacing the 'is Null' check with '== null'.",
     hasPublishedDocs: true,
     uniqueName: 'TYPE_CHECK_IS_NULL',
   );
@@ -2987,7 +2990,7 @@
   // The analyzer produces this diagnostic when a hide combinator includes a
   // name that isn't defined by the library being imported.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `dart:math` doesn't
   // define the name `String`:
@@ -3011,7 +3014,7 @@
   static const HintCode UNDEFINED_HIDDEN_NAME = HintCode(
     'UNDEFINED_HIDDEN_NAME',
     "The library '{0}' doesn't export a member with the hidden name '{1}'.",
-    correction: "Try removing the name from the list of hidden members.",
+    correctionMessage: "Try removing the name from the list of hidden members.",
     hasPublishedDocs: true,
   );
 
@@ -3052,6 +3055,7 @@
   static const HintCode UNDEFINED_REFERENCED_PARAMETER = HintCode(
     'UNDEFINED_REFERENCED_PARAMETER',
     "The parameter '{0}' is not defined by '{1}'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -3064,7 +3068,7 @@
   // The analyzer produces this diagnostic when a show combinator includes a
   // name that isn't defined by the library being imported.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `dart:math` doesn't
   // define the name `String`:
@@ -3088,7 +3092,7 @@
   static const HintCode UNDEFINED_SHOWN_NAME = HintCode(
     'UNDEFINED_SHOWN_NAME',
     "The library '{0}' doesn't export a member with the shown name '{1}'.",
-    correction: "Try removing the name from the list of shown members.",
+    correctionMessage: "Try removing the name from the list of shown members.",
     hasPublishedDocs: true,
   );
 
@@ -3099,7 +3103,7 @@
   static const HintCode UNIGNORABLE_IGNORE = HintCode(
     'UNIGNORABLE_IGNORE',
     "The diagnostic '{0}' can't be ignored.",
-    correction:
+    correctionMessage:
         "Try removing the name from the list, or removing the whole comment if this is the only name in the list.",
   );
 
@@ -3111,7 +3115,7 @@
   // The analyzer produces this diagnostic when the value being cast is already
   // known to be of the type that it's being cast to.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `n` is already known to
   // be an `int` as a result of the `is` test:
@@ -3138,7 +3142,7 @@
   static const HintCode UNNECESSARY_CAST = HintCode(
     'UNNECESSARY_CAST',
     "Unnecessary cast.",
-    correction: "Try removing the cast.",
+    correctionMessage: "Try removing the cast.",
     hasPublishedDocs: true,
   );
 
@@ -3149,7 +3153,7 @@
   static const HintCode UNNECESSARY_IGNORE = HintCode(
     'UNNECESSARY_IGNORE',
     "The diagnostic '{0}' isn't produced at this location so it doesn't need to be ignored.",
-    correction:
+    correctionMessage:
         "Try removing the name from the list, or removing the whole comment if this is the only name in the list.",
   );
 
@@ -3203,7 +3207,8 @@
   static const HintCode UNNECESSARY_IMPORT = HintCode(
     'UNNECESSARY_IMPORT',
     "The import of '{0}' is unnecessary because all of the used elements are also provided by the import of '{1}'.",
-    correction: "Try removing the import directive.",
+    correctionMessage: "Try removing the import directive.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -3255,7 +3260,7 @@
   static const HintCode UNNECESSARY_NO_SUCH_METHOD = HintCode(
     'UNNECESSARY_NO_SUCH_METHOD',
     "Unnecessary 'noSuchMethod' declaration.",
-    correction: "Try removing the declaration of 'noSuchMethod'.",
+    correctionMessage: "Try removing the declaration of 'noSuchMethod'.",
     hasPublishedDocs: true,
   );
 
@@ -3269,7 +3274,7 @@
   // can't be `null`. Such comparisons are always either `true` or `false`, so
   // they serve no purpose.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `x` can never be
   // `null`, so the comparison always evaluates to `true`:
@@ -3316,7 +3321,7 @@
   static const HintCode UNNECESSARY_NULL_COMPARISON_FALSE = HintCode(
     'UNNECESSARY_NULL_COMPARISON',
     "The operand can't be null, so the condition is always false.",
-    correction:
+    correctionMessage:
         "Try removing the condition, an enclosing condition, or the whole conditional statement.",
     hasPublishedDocs: true,
     uniqueName: 'UNNECESSARY_NULL_COMPARISON_FALSE',
@@ -3328,7 +3333,7 @@
   static const HintCode UNNECESSARY_NULL_COMPARISON_TRUE = HintCode(
     'UNNECESSARY_NULL_COMPARISON',
     "The operand can't be null, so the condition is always true.",
-    correction: "Remove the condition.",
+    correctionMessage: "Remove the condition.",
     hasPublishedDocs: true,
     uniqueName: 'UNNECESSARY_NULL_COMPARISON_TRUE',
   );
@@ -3362,6 +3367,7 @@
   static const HintCode UNNECESSARY_QUESTION_MARK = HintCode(
     'UNNECESSARY_QUESTION_MARK',
     "The '?' is unnecessary because '{0}' is nullable without it.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -3399,7 +3405,8 @@
   static const HintCode UNNECESSARY_TYPE_CHECK_FALSE = HintCode(
     'UNNECESSARY_TYPE_CHECK',
     "Unnecessary type check; the result is always 'false'.",
-    correction: "Try correcting the type check, or removing the type check.",
+    correctionMessage:
+        "Try correcting the type check, or removing the type check.",
     hasPublishedDocs: true,
     uniqueName: 'UNNECESSARY_TYPE_CHECK_FALSE',
   );
@@ -3410,7 +3417,8 @@
   static const HintCode UNNECESSARY_TYPE_CHECK_TRUE = HintCode(
     'UNNECESSARY_TYPE_CHECK',
     "Unnecessary type check; the result is always 'true'.",
-    correction: "Try correcting the type check, or removing the type check.",
+    correctionMessage:
+        "Try correcting the type check, or removing the type check.",
     hasPublishedDocs: true,
     uniqueName: 'UNNECESSARY_TYPE_CHECK_TRUE',
   );
@@ -3425,7 +3433,7 @@
   // neither the exception parameter nor the optional stack trace parameter are
   // used in the `catch` block.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `e` isn't referenced:
   //
@@ -3455,7 +3463,7 @@
   static const HintCode UNUSED_CATCH_CLAUSE = HintCode(
     'UNUSED_CATCH_CLAUSE',
     "The exception variable '{0}' isn't used, so the 'catch' clause can be removed.",
-    correction: "Try removing the catch clause.",
+    correctionMessage: "Try removing the catch clause.",
     hasPublishedDocs: true,
   );
 
@@ -3468,7 +3476,7 @@
   // The analyzer produces this diagnostic when the stack trace parameter in a
   // `catch` clause isn't referenced within the body of the `catch` block.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `stackTrace` isn't
   // referenced:
@@ -3500,7 +3508,7 @@
   static const HintCode UNUSED_CATCH_STACK = HintCode(
     'UNUSED_CATCH_STACK',
     "The stack trace variable '{0}' isn't used and can be removed.",
-    correction: "Try removing the stack trace variable, or using it.",
+    correctionMessage: "Try removing the stack trace variable, or using it.",
     hasPublishedDocs: true,
   );
 
@@ -3519,7 +3527,7 @@
   // - Optional parameters of private functions for which a value is never
   //   passed, even when the parameter doesn't have a private name
   //
-  // #### Examples
+  // #### Example
   //
   // Assuming that no code in the library references `_C`, the following code
   // produces this diagnostic:
@@ -3556,7 +3564,7 @@
   static const HintCode UNUSED_ELEMENT = HintCode(
     'UNUSED_ELEMENT',
     "The declaration '{0}' isn't referenced.",
-    correction: "Try removing the declaration of '{0}'.",
+    correctionMessage: "Try removing the declaration of '{0}'.",
     hasPublishedDocs: true,
   );
 
@@ -3567,7 +3575,7 @@
   static const HintCode UNUSED_ELEMENT_PARAMETER = HintCode(
     'UNUSED_ELEMENT',
     "A value for optional parameter '{0}' isn't ever given.",
-    correction: "Try removing the unused parameter.",
+    correctionMessage: "Try removing the unused parameter.",
     hasPublishedDocs: true,
     uniqueName: 'UNUSED_ELEMENT_PARAMETER',
   );
@@ -3581,7 +3589,7 @@
   // The analyzer produces this diagnostic when a private field is declared but
   // never read, even if it's written in one or more places.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the field
   // `_originalValue` isn't read anywhere in the library:
@@ -3609,7 +3617,7 @@
   static const HintCode UNUSED_FIELD = HintCode(
     'UNUSED_FIELD',
     "The value of the field '{0}' isn't used.",
-    correction: "Try removing the field, or using it.",
+    correctionMessage: "Try removing the field, or using it.",
     hasPublishedDocs: true,
   );
 
@@ -3623,7 +3631,7 @@
   // none of the names that are imported are referenced within the importing
   // library.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because nothing defined in
   // `dart:async` is referenced in the library:
@@ -3643,7 +3651,7 @@
   static const HintCode UNUSED_IMPORT = HintCode(
     'UNUSED_IMPORT',
     "Unused import: '{0}'.",
-    correction: "Try removing the import directive.",
+    correctionMessage: "Try removing the import directive.",
     hasPublishedDocs: true,
   );
 
@@ -3656,7 +3664,7 @@
   // The analyzer produces this diagnostic when a label that isn't used is
   // found.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the label `loop` isn't
   // referenced anywhere in the method:
@@ -3695,7 +3703,7 @@
   static const HintCode UNUSED_LABEL = HintCode(
     'UNUSED_LABEL',
     "The label '{0}' isn't used.",
-    correction:
+    correctionMessage:
         "Try removing the label, or using it in either a 'break' or 'continue' statement.",
     hasPublishedDocs: true,
   );
@@ -3709,7 +3717,7 @@
   // The analyzer produces this diagnostic when a local variable is declared but
   // never read, even if it's written in one or more places.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the value of `count` is
   // never read:
@@ -3728,7 +3736,7 @@
   static const HintCode UNUSED_LOCAL_VARIABLE = HintCode(
     'UNUSED_LOCAL_VARIABLE',
     "The value of the local variable '{0}' isn't used.",
-    correction: "Try removing the variable or using it.",
+    correctionMessage: "Try removing the variable or using it.",
     hasPublishedDocs: true,
   );
 
@@ -3805,8 +3813,9 @@
   static const HintCode UNUSED_RESULT = HintCode(
     'UNUSED_RESULT',
     "The value of '{0}' should be used.",
-    correction:
+    correctionMessage:
         "Try using the result by invoking a member, passing it to a function, or returning it from this function.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -3821,8 +3830,9 @@
   static const HintCode UNUSED_RESULT_WITH_MESSAGE = HintCode(
     'UNUSED_RESULT',
     "'{0}' should be used. {1}.",
-    correction:
+    correctionMessage:
         "Try using the result by invoking a member, passing it to a function, or returning it from this function.",
+    hasPublishedDocs: true,
     uniqueName: 'UNUSED_RESULT_WITH_MESSAGE',
   );
 
@@ -3836,7 +3846,7 @@
   // name that isn't used within the library. Because it isn't referenced, the
   // name can be removed.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the function `max`
   // isn't used:
@@ -3859,52 +3869,24 @@
   static const HintCode UNUSED_SHOWN_NAME = HintCode(
     'UNUSED_SHOWN_NAME',
     "The name {0} is shown, but isn’t used.",
-    correction: "Try removing the name from the list of shown members.",
+    correctionMessage: "Try removing the name from the list of shown members.",
     hasPublishedDocs: true,
   );
 
-  /**
-   * No parameters.
-   */
-  // #### Description
-  //
-  // The analyzer produces this diagnostic when a library is imported using the
-  // `dart-ext` scheme.
-  //
-  // #### Example
-  //
-  // The following code produces this diagnostic because the native library `x`
-  // is being imported using a scheme of `dart-ext`:
-  //
-  // ```dart
-  // [!import 'dart-ext:x';!]
-  // int f() native 'string';
-  // ```
-  //
-  // #### Common fixes
-  //
-  // Rewrite the code to use `dart:ffi` as a way of invoking the contents of the
-  // native library.
-  static const HintCode USE_OF_NATIVE_EXTENSION = HintCode(
-    'USE_OF_NATIVE_EXTENSION',
-    "Dart native extensions are deprecated and aren’t available in Dart 2.15.",
-    correction: "Try using dart:ffi for C interop.",
-  );
-
   /// Initialize a newly created error code to have the given [name].
   const HintCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'HintCode.${uniqueName ?? name}',
         );
 
diff --git a/pkg/analyzer/lib/src/dart/error/lint_codes.dart b/pkg/analyzer/lib/src/dart/error/lint_codes.dart
index 536a0cb..45983c4 100644
--- a/pkg/analyzer/lib/src/dart/error/lint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/lint_codes.dart
@@ -12,12 +12,13 @@
 class LintCode extends ErrorCode {
   const LintCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    @Deprecated('Use correctionMessage instead') String? correction,
+    String? correctionMessage,
     String? uniqueName,
   }) : super(
-          correction: correction,
-          message: message,
+          correctionMessage: correctionMessage ?? correction,
+          problemMessage: problemMessage,
           name: name,
           uniqueName: uniqueName ?? 'LintCode.$name',
         );
@@ -28,6 +29,9 @@
   @override
   int get hashCode => uniqueName.hashCode;
 
+  @Deprecated('Use problemMessage instead')
+  String get message => problemMessage;
+
   @override
   ErrorType get type => ErrorType.LINT;
 
@@ -44,10 +48,11 @@
 /// The primary difference from [LintCode]s is that these codes cannot be
 /// suppressed with `// ignore:` or `// ignore_for_file:` comments.
 class SecurityLintCode extends LintCode {
-  const SecurityLintCode(String name, String message,
-      {String? uniqueName, String? correction})
-      : super(name, message,
-            uniqueName: uniqueName ?? 'LintCode.$name', correction: correction);
+  const SecurityLintCode(String name, String problemMessage,
+      {String? uniqueName, String? correctionMessage})
+      : super(name, problemMessage,
+            uniqueName: uniqueName ?? 'LintCode.$name',
+            correctionMessage: correctionMessage);
 
   @override
   bool get isIgnorable => false;
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.analyzer.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.analyzer.g.dart
deleted file mode 100644
index 88cb1ff..0000000
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.analyzer.g.dart
+++ /dev/null
@@ -1,1080 +0,0 @@
-// Copyright (c) 2021, 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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
-
-import "package:analyzer/error/error.dart";
-
-part "syntactic_errors.g.dart";
-
-// It is hard to visually separate each code's _doc comment_ from its published
-// _documentation comment_ when each is written as an end-of-line comment.
-// ignore_for_file: slash_for_doc_comments
-
-class ParserErrorCode extends ErrorCode {
-  static const ParserErrorCode ABSTRACT_CLASS_MEMBER = _ABSTRACT_CLASS_MEMBER;
-
-  static const ParserErrorCode ABSTRACT_ENUM = ParserErrorCode(
-    'ABSTRACT_ENUM',
-    "Enums can't be declared to be 'abstract'.",
-    correction: "Try removing the keyword 'abstract'.",
-  );
-
-  static const ParserErrorCode ABSTRACT_EXTERNAL_FIELD =
-      _ABSTRACT_EXTERNAL_FIELD;
-
-  static const ParserErrorCode ABSTRACT_LATE_FIELD = _ABSTRACT_LATE_FIELD;
-
-  static const ParserErrorCode ABSTRACT_STATIC_FIELD = _ABSTRACT_STATIC_FIELD;
-
-  static const ParserErrorCode ABSTRACT_STATIC_METHOD = ParserErrorCode(
-    'ABSTRACT_STATIC_METHOD',
-    "Static methods can't be declared to be 'abstract'.",
-    correction: "Try removing the keyword 'abstract'.",
-  );
-
-  static const ParserErrorCode ABSTRACT_TOP_LEVEL_FUNCTION = ParserErrorCode(
-    'ABSTRACT_TOP_LEVEL_FUNCTION',
-    "Top-level functions can't be declared to be 'abstract'.",
-    correction: "Try removing the keyword 'abstract'.",
-  );
-
-  static const ParserErrorCode ABSTRACT_TOP_LEVEL_VARIABLE = ParserErrorCode(
-    'ABSTRACT_TOP_LEVEL_VARIABLE',
-    "Top-level variables can't be declared to be 'abstract'.",
-    correction: "Try removing the keyword 'abstract'.",
-  );
-
-  static const ParserErrorCode ABSTRACT_TYPEDEF = ParserErrorCode(
-    'ABSTRACT_TYPEDEF',
-    "Typedefs can't be declared to be 'abstract'.",
-    correction: "Try removing the keyword 'abstract'.",
-  );
-
-  static const ParserErrorCode ANNOTATION_ON_TYPE_ARGUMENT =
-      _ANNOTATION_ON_TYPE_ARGUMENT;
-
-  static const ParserErrorCode ANNOTATION_WITH_TYPE_ARGUMENTS =
-      _ANNOTATION_WITH_TYPE_ARGUMENTS;
-
-  static const ParserErrorCode ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED =
-      _ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED;
-
-  /**
-   * 16.32 Identifier Reference: It is a compile-time error if any of the
-   * identifiers async, await, or yield is used as an identifier in a function
-   * body marked with either async, async, or sync.
-   */
-  static const ParserErrorCode ASYNC_KEYWORD_USED_AS_IDENTIFIER =
-      ParserErrorCode(
-    'ASYNC_KEYWORD_USED_AS_IDENTIFIER',
-    "The keywords 'await' and 'yield' can't be used as identifiers in an asynchronous or generator function.",
-  );
-
-  static const ParserErrorCode BINARY_OPERATOR_WRITTEN_OUT =
-      _BINARY_OPERATOR_WRITTEN_OUT;
-
-  static const ParserErrorCode BREAK_OUTSIDE_OF_LOOP = _BREAK_OUTSIDE_OF_LOOP;
-
-  static const ParserErrorCode CATCH_SYNTAX = _CATCH_SYNTAX;
-
-  static const ParserErrorCode CATCH_SYNTAX_EXTRA_PARAMETERS =
-      _CATCH_SYNTAX_EXTRA_PARAMETERS;
-
-  static const ParserErrorCode CLASS_IN_CLASS = _CLASS_IN_CLASS;
-
-  static const ParserErrorCode COLON_IN_PLACE_OF_IN = _COLON_IN_PLACE_OF_IN;
-
-  static const ParserErrorCode CONFLICTING_MODIFIERS = _CONFLICTING_MODIFIERS;
-
-  static const ParserErrorCode CONSTRUCTOR_WITH_RETURN_TYPE =
-      _CONSTRUCTOR_WITH_RETURN_TYPE;
-
-  static const ParserErrorCode CONSTRUCTOR_WITH_TYPE_ARGUMENTS =
-      _CONSTRUCTOR_WITH_TYPE_ARGUMENTS;
-
-  static const ParserErrorCode CONST_AND_FINAL = _CONST_AND_FINAL;
-
-  static const ParserErrorCode CONST_CLASS = _CONST_CLASS;
-
-  static const ParserErrorCode CONST_CONSTRUCTOR_WITH_BODY = ParserErrorCode(
-    'CONST_CONSTRUCTOR_WITH_BODY',
-    "Const constructors can't have a body.",
-    correction: "Try removing either the 'const' keyword or the body.",
-  );
-
-  static const ParserErrorCode CONST_ENUM = ParserErrorCode(
-    'CONST_ENUM',
-    "Enums can't be declared to be 'const'.",
-    correction: "Try removing the 'const' keyword.",
-  );
-
-  static const ParserErrorCode CONST_FACTORY = _CONST_FACTORY;
-
-  static const ParserErrorCode CONST_METHOD = _CONST_METHOD;
-
-  static const ParserErrorCode CONST_TYPEDEF = ParserErrorCode(
-    'CONST_TYPEDEF',
-    "Type aliases can't be declared to be 'const'.",
-    correction: "Try removing the 'const' keyword.",
-  );
-
-  static const ParserErrorCode CONTINUE_OUTSIDE_OF_LOOP =
-      _CONTINUE_OUTSIDE_OF_LOOP;
-
-  static const ParserErrorCode CONTINUE_WITHOUT_LABEL_IN_CASE =
-      _CONTINUE_WITHOUT_LABEL_IN_CASE;
-
-  static const ParserErrorCode COVARIANT_AND_STATIC = _COVARIANT_AND_STATIC;
-
-  static const ParserErrorCode COVARIANT_CONSTRUCTOR = ParserErrorCode(
-    'COVARIANT_CONSTRUCTOR',
-    "A constructor can't be declared to be 'covariant'.",
-    correction: "Try removing the keyword 'covariant'.",
-  );
-
-  static const ParserErrorCode COVARIANT_MEMBER = _COVARIANT_MEMBER;
-
-  static const ParserErrorCode COVARIANT_TOP_LEVEL_DECLARATION =
-      ParserErrorCode(
-    'COVARIANT_TOP_LEVEL_DECLARATION',
-    "Top-level declarations can't be declared to be covariant.",
-    correction: "Try removing the keyword 'covariant'.",
-  );
-
-  /**
-   * No parameters.
-   */
-  // #### Description
-  //
-  // The analyzer produces this diagnostic when a function type associated with
-  // a parameter includes optional parameters that have a default value. This
-  // isn't allowed because the default values of parameters aren't part of the
-  // function's type, and therefore including them doesn't provide any value.
-  //
-  // #### Example
-  //
-  // The following code produces this diagnostic because the parameter `p` has a
-  // default value even though it's part of the type of the parameter `g`:
-  //
-  // ```dart
-  // void f(void Function([int p [!=!] 0]) g) {
-  // }
-  // ```
-  //
-  // #### Common fixes
-  //
-  // Remove the default value from the function-type's parameter:
-  //
-  // ```dart
-  // void f(void Function([int p]) g) {
-  // }
-  // ```
-  static const ParserErrorCode DEFAULT_VALUE_IN_FUNCTION_TYPE = ParserErrorCode(
-    'DEFAULT_VALUE_IN_FUNCTION_TYPE',
-    "Parameters in a function type can't have default values.",
-    correction: "Try removing the default value.",
-    hasPublishedDocs: true,
-  );
-
-  static const ParserErrorCode DEFERRED_AFTER_PREFIX = _DEFERRED_AFTER_PREFIX;
-
-  static const ParserErrorCode DIRECTIVE_AFTER_DECLARATION =
-      _DIRECTIVE_AFTER_DECLARATION;
-
-  /**
-   * Parameters:
-   * 0: the modifier that was duplicated
-   */
-  static const ParserErrorCode DUPLICATED_MODIFIER = _DUPLICATED_MODIFIER;
-
-  static const ParserErrorCode DUPLICATE_DEFERRED = _DUPLICATE_DEFERRED;
-
-  /**
-   * Parameters:
-   * 0: the label that was duplicated
-   */
-  static const ParserErrorCode DUPLICATE_LABEL_IN_SWITCH_STATEMENT =
-      _DUPLICATE_LABEL_IN_SWITCH_STATEMENT;
-
-  static const ParserErrorCode DUPLICATE_PREFIX = _DUPLICATE_PREFIX;
-
-  static const ParserErrorCode EMPTY_ENUM_BODY = ParserErrorCode(
-    'EMPTY_ENUM_BODY',
-    "An enum must declare at least one constant name.",
-    correction: "Try declaring a constant.",
-  );
-
-  static const ParserErrorCode ENUM_IN_CLASS = _ENUM_IN_CLASS;
-
-  static const ParserErrorCode EQUALITY_CANNOT_BE_EQUALITY_OPERAND =
-      _EQUALITY_CANNOT_BE_EQUALITY_OPERAND;
-
-  static const ParserErrorCode EXPECTED_BODY = _EXPECTED_BODY;
-
-  static const ParserErrorCode EXPECTED_CASE_OR_DEFAULT = ParserErrorCode(
-    'EXPECTED_CASE_OR_DEFAULT',
-    "Expected 'case' or 'default'.",
-    correction: "Try placing this code inside a case clause.",
-  );
-
-  static const ParserErrorCode EXPECTED_CLASS_MEMBER = ParserErrorCode(
-    'EXPECTED_CLASS_MEMBER',
-    "Expected a class member.",
-    correction: "Try placing this code inside a class member.",
-  );
-
-  static const ParserErrorCode EXPECTED_ELSE_OR_COMMA = _EXPECTED_ELSE_OR_COMMA;
-
-  static const ParserErrorCode EXPECTED_EXECUTABLE = ParserErrorCode(
-    'EXPECTED_EXECUTABLE',
-    "Expected a method, getter, setter or operator declaration.",
-    correction:
-        "This appears to be incomplete code. Try removing it or completing it.",
-  );
-
-  static const ParserErrorCode EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD =
-      _EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD;
-
-  static const ParserErrorCode EXPECTED_INSTEAD = _EXPECTED_INSTEAD;
-
-  static const ParserErrorCode EXPECTED_LIST_OR_MAP_LITERAL = ParserErrorCode(
-    'EXPECTED_LIST_OR_MAP_LITERAL',
-    "Expected a list or map literal.",
-    correction:
-        "Try inserting a list or map literal, or remove the type arguments.",
-  );
-
-  static const ParserErrorCode EXPECTED_STRING_LITERAL = ParserErrorCode(
-    'EXPECTED_STRING_LITERAL',
-    "Expected a string literal.",
-  );
-
-  /**
-   * Parameters:
-   * 0: the token that was expected but not found
-   */
-  static const ParserErrorCode EXPECTED_TOKEN = ParserErrorCode(
-    'EXPECTED_TOKEN',
-    "Expected to find '{0}'.",
-  );
-
-  static const ParserErrorCode EXPECTED_TYPE_NAME = ParserErrorCode(
-    'EXPECTED_TYPE_NAME',
-    "Expected a type name.",
-  );
-
-  static const ParserErrorCode EXPERIMENT_NOT_ENABLED = _EXPERIMENT_NOT_ENABLED;
-
-  static const ParserErrorCode EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
-      _EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE;
-
-  /**
-   * No parameters.
-   */
-  // #### Description
-  //
-  // The analyzer produces this diagnostic when an abstract declaration is
-  // declared in an extension. Extensions can declare only concrete members.
-  //
-  // #### Examples
-  //
-  // The following code produces this diagnostic because the method `a` doesn't
-  // have a body:
-  //
-  // ```dart
-  // extension E on String {
-  //   int [!a!]();
-  // }
-  // ```
-  //
-  // #### Common fixes
-  //
-  // Either provide an implementation for the member or remove it.
-  static const ParserErrorCode EXTENSION_DECLARES_ABSTRACT_MEMBER =
-      _EXTENSION_DECLARES_ABSTRACT_MEMBER;
-
-  /**
-   * No parameters.
-   */
-  // #### Description
-  //
-  // The analyzer produces this diagnostic when a constructor declaration is
-  // found in an extension. It isn't valid to define a constructor because
-  // extensions aren't classes, and it isn't possible to create an instance of
-  // an extension.
-  //
-  // #### Examples
-  //
-  // The following code produces this diagnostic because there is a constructor
-  // declaration in `E`:
-  //
-  // ```dart
-  // extension E on String {
-  //   [!E!]() : super();
-  // }
-  // ```
-  //
-  // #### Common fixes
-  //
-  // Remove the constructor or replace it with a static method.
-  static const ParserErrorCode EXTENSION_DECLARES_CONSTRUCTOR =
-      _EXTENSION_DECLARES_CONSTRUCTOR;
-
-  /**
-   * No parameters.
-   */
-  // #### Description
-  //
-  // The analyzer produces this diagnostic when an instance field declaration is
-  // found in an extension. It isn't valid to define an instance field because
-  // extensions can only add behavior, not state.
-  //
-  // #### Examples
-  //
-  // The following code produces this diagnostic because `s` is an instance
-  // field:
-  //
-  // ```dart
-  // %language=2.9
-  // extension E on String {
-  //   String [!s!];
-  // }
-  // ```
-  //
-  // #### Common fixes
-  //
-  // Remove the field, make it a static field, or convert it to be a getter,
-  // setter, or method.
-  static const ParserErrorCode EXTENSION_DECLARES_INSTANCE_FIELD =
-      _EXTENSION_DECLARES_INSTANCE_FIELD;
-
-  static const ParserErrorCode EXTERNAL_CLASS = _EXTERNAL_CLASS;
-
-  static const ParserErrorCode EXTERNAL_CONSTRUCTOR_WITH_BODY =
-      _EXTERNAL_CONSTRUCTOR_WITH_BODY;
-
-  static const ParserErrorCode EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER =
-      _EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER;
-
-  static const ParserErrorCode EXTERNAL_ENUM = _EXTERNAL_ENUM;
-
-  static const ParserErrorCode EXTERNAL_FACTORY_REDIRECTION =
-      _EXTERNAL_FACTORY_REDIRECTION;
-
-  static const ParserErrorCode EXTERNAL_FACTORY_WITH_BODY =
-      _EXTERNAL_FACTORY_WITH_BODY;
-
-  static const ParserErrorCode EXTERNAL_FIELD = _EXTERNAL_FIELD;
-
-  static const ParserErrorCode EXTERNAL_GETTER_WITH_BODY = ParserErrorCode(
-    'EXTERNAL_GETTER_WITH_BODY',
-    "External getters can't have a body.",
-    correction:
-        "Try removing the body of the getter, or removing the keyword 'external'.",
-  );
-
-  static const ParserErrorCode EXTERNAL_LATE_FIELD = _EXTERNAL_LATE_FIELD;
-
-  static const ParserErrorCode EXTERNAL_METHOD_WITH_BODY =
-      _EXTERNAL_METHOD_WITH_BODY;
-
-  static const ParserErrorCode EXTERNAL_OPERATOR_WITH_BODY = ParserErrorCode(
-    'EXTERNAL_OPERATOR_WITH_BODY',
-    "External operators can't have a body.",
-    correction:
-        "Try removing the body of the operator, or removing the keyword 'external'.",
-  );
-
-  static const ParserErrorCode EXTERNAL_SETTER_WITH_BODY = ParserErrorCode(
-    'EXTERNAL_SETTER_WITH_BODY',
-    "External setters can't have a body.",
-    correction:
-        "Try removing the body of the setter, or removing the keyword 'external'.",
-  );
-
-  static const ParserErrorCode EXTERNAL_TYPEDEF = _EXTERNAL_TYPEDEF;
-
-  static const ParserErrorCode EXTRANEOUS_MODIFIER = _EXTRANEOUS_MODIFIER;
-
-  static const ParserErrorCode FACTORY_TOP_LEVEL_DECLARATION =
-      _FACTORY_TOP_LEVEL_DECLARATION;
-
-  static const ParserErrorCode FACTORY_WITHOUT_BODY = ParserErrorCode(
-    'FACTORY_WITHOUT_BODY',
-    "A non-redirecting 'factory' constructor must have a body.",
-    correction: "Try adding a body to the constructor.",
-  );
-
-  static const ParserErrorCode FACTORY_WITH_INITIALIZERS = ParserErrorCode(
-    'FACTORY_WITH_INITIALIZERS',
-    "A 'factory' constructor can't have initializers.",
-    correction:
-        "Try removing the 'factory' keyword to make this a generative constructor, or removing the initializers.",
-  );
-
-  static const ParserErrorCode FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS =
-      _FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS;
-
-  static const ParserErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR =
-      _FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR;
-
-  static const ParserErrorCode FINAL_AND_COVARIANT = _FINAL_AND_COVARIANT;
-
-  static const ParserErrorCode FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER =
-      _FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER;
-
-  static const ParserErrorCode FINAL_AND_VAR = _FINAL_AND_VAR;
-
-  static const ParserErrorCode FINAL_CLASS = ParserErrorCode(
-    'FINAL_CLASS',
-    "Classes can't be declared to be 'final'.",
-    correction: "Try removing the keyword 'final'.",
-  );
-
-  static const ParserErrorCode FINAL_CONSTRUCTOR = ParserErrorCode(
-    'FINAL_CONSTRUCTOR',
-    "A constructor can't be declared to be 'final'.",
-    correction: "Try removing the keyword 'final'.",
-  );
-
-  static const ParserErrorCode FINAL_ENUM = ParserErrorCode(
-    'FINAL_ENUM',
-    "Enums can't be declared to be 'final'.",
-    correction: "Try removing the keyword 'final'.",
-  );
-
-  static const ParserErrorCode FINAL_METHOD = ParserErrorCode(
-    'FINAL_METHOD',
-    "Getters, setters and methods can't be declared to be 'final'.",
-    correction: "Try removing the keyword 'final'.",
-  );
-
-  static const ParserErrorCode FINAL_TYPEDEF = ParserErrorCode(
-    'FINAL_TYPEDEF',
-    "Typedefs can't be declared to be 'final'.",
-    correction: "Try removing the keyword 'final'.",
-  );
-
-  static const ParserErrorCode FUNCTION_TYPED_PARAMETER_VAR = ParserErrorCode(
-    'FUNCTION_TYPED_PARAMETER_VAR',
-    "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type.",
-    correction: "Try replacing the keyword with a return type.",
-  );
-
-  static const ParserErrorCode GETTER_CONSTRUCTOR = _GETTER_CONSTRUCTOR;
-
-  static const ParserErrorCode GETTER_IN_FUNCTION = ParserErrorCode(
-    'GETTER_IN_FUNCTION',
-    "Getters can't be defined within methods or functions.",
-    correction:
-        "Try moving the getter outside the method or function, or converting the getter to a function.",
-  );
-
-  static const ParserErrorCode GETTER_WITH_PARAMETERS = ParserErrorCode(
-    'GETTER_WITH_PARAMETERS',
-    "Getters must be declared without a parameter list.",
-    correction:
-        "Try removing the parameter list, or removing the keyword 'get' to define a method rather than a getter.",
-  );
-
-  static const ParserErrorCode ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE =
-      _ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE;
-
-  static const ParserErrorCode IMPLEMENTS_BEFORE_EXTENDS =
-      _IMPLEMENTS_BEFORE_EXTENDS;
-
-  static const ParserErrorCode IMPLEMENTS_BEFORE_ON = _IMPLEMENTS_BEFORE_ON;
-
-  static const ParserErrorCode IMPLEMENTS_BEFORE_WITH = _IMPLEMENTS_BEFORE_WITH;
-
-  static const ParserErrorCode IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
-      _IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE;
-
-  static const ParserErrorCode INITIALIZED_VARIABLE_IN_FOR_EACH =
-      _INITIALIZED_VARIABLE_IN_FOR_EACH;
-
-  static const ParserErrorCode INVALID_AWAIT_IN_FOR = _INVALID_AWAIT_IN_FOR;
-
-  /**
-   * Parameters:
-   * 0: the invalid escape sequence
-   */
-  static const ParserErrorCode INVALID_CODE_POINT = ParserErrorCode(
-    'INVALID_CODE_POINT',
-    "The escape sequence '{0}' isn't a valid code point.",
-  );
-
-  static const ParserErrorCode INVALID_COMMENT_REFERENCE = ParserErrorCode(
-    'INVALID_COMMENT_REFERENCE',
-    "Comment references should contain a possibly prefixed identifier and can start with 'new', but shouldn't contain anything else.",
-  );
-
-  static const ParserErrorCode INVALID_CONSTRUCTOR_NAME =
-      _INVALID_CONSTRUCTOR_NAME;
-
-  static const ParserErrorCode INVALID_GENERIC_FUNCTION_TYPE = ParserErrorCode(
-    'INVALID_GENERIC_FUNCTION_TYPE',
-    "Invalid generic function type.",
-    correction:
-        "Try using a generic function type (returnType 'Function(' parameters ')').",
-  );
-
-  static const ParserErrorCode INVALID_HEX_ESCAPE = _INVALID_HEX_ESCAPE;
-
-  static const ParserErrorCode INVALID_INITIALIZER = _INVALID_INITIALIZER;
-
-  static const ParserErrorCode INVALID_LITERAL_IN_CONFIGURATION =
-      ParserErrorCode(
-    'INVALID_LITERAL_IN_CONFIGURATION',
-    "The literal in a configuration can't contain interpolation.",
-    correction: "Try removing the interpolation expressions.",
-  );
-
-  /**
-   * Parameters:
-   * 0: the operator that is invalid
-   */
-  static const ParserErrorCode INVALID_OPERATOR = _INVALID_OPERATOR;
-
-  /**
-   * Parameters:
-   * 0: the operator being applied to 'super'
-   *
-   * Only generated by the old parser.
-   * Replaced by INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER.
-   */
-  static const ParserErrorCode INVALID_OPERATOR_FOR_SUPER = ParserErrorCode(
-    'INVALID_OPERATOR_FOR_SUPER',
-    "The operator '{0}' can't be used with 'super'.",
-  );
-
-  static const ParserErrorCode INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER =
-      _INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER;
-
-  static const ParserErrorCode INVALID_STAR_AFTER_ASYNC = ParserErrorCode(
-    'INVALID_STAR_AFTER_ASYNC',
-    "The modifier 'async*' isn't allowed for an expression function body.",
-    correction: "Try converting the body to a block.",
-  );
-
-  static const ParserErrorCode INVALID_SUPER_IN_INITIALIZER =
-      _INVALID_SUPER_IN_INITIALIZER;
-
-  static const ParserErrorCode INVALID_SYNC = ParserErrorCode(
-    'INVALID_SYNC',
-    "The modifier 'sync' isn't allowed for an expression function body.",
-    correction: "Try converting the body to a block.",
-  );
-
-  static const ParserErrorCode INVALID_THIS_IN_INITIALIZER =
-      _INVALID_THIS_IN_INITIALIZER;
-
-  static const ParserErrorCode INVALID_UNICODE_ESCAPE = _INVALID_UNICODE_ESCAPE;
-
-  /**
-   * No parameters.
-   */
-  // #### Description
-  //
-  // The analyzer produces this diagnostic when a member declared inside an
-  // extension uses the keyword `covariant` in the declaration of a parameter.
-  // Extensions aren't classes and don't have subclasses, so the keyword serves
-  // no purpose.
-  //
-  // #### Examples
-  //
-  // The following code produces this diagnostic because `i` is marked as being
-  // covariant:
-  //
-  // ```dart
-  // extension E on String {
-  //   void a([!covariant!] int i) {}
-  // }
-  // ```
-  //
-  // #### Common fixes
-  //
-  // Remove the `covariant` keyword:
-  //
-  // ```dart
-  // extension E on String {
-  //   void a(int i) {}
-  // }
-  // ```
-  static const ParserErrorCode INVALID_USE_OF_COVARIANT_IN_EXTENSION =
-      _INVALID_USE_OF_COVARIANT_IN_EXTENSION;
-
-  static const ParserErrorCode LIBRARY_DIRECTIVE_NOT_FIRST =
-      _LIBRARY_DIRECTIVE_NOT_FIRST;
-
-  static const ParserErrorCode LITERAL_WITH_CLASS = _LITERAL_WITH_CLASS;
-
-  static const ParserErrorCode LITERAL_WITH_CLASS_AND_NEW =
-      _LITERAL_WITH_CLASS_AND_NEW;
-
-  static const ParserErrorCode LITERAL_WITH_NEW = _LITERAL_WITH_NEW;
-
-  static const ParserErrorCode LOCAL_FUNCTION_DECLARATION_MODIFIER =
-      ParserErrorCode(
-    'LOCAL_FUNCTION_DECLARATION_MODIFIER',
-    "Local function declarations can't specify any modifiers.",
-    correction: "Try removing the modifier.",
-  );
-
-  static const ParserErrorCode MEMBER_WITH_CLASS_NAME = _MEMBER_WITH_CLASS_NAME;
-
-  static const ParserErrorCode MISSING_ASSIGNABLE_SELECTOR =
-      _MISSING_ASSIGNABLE_SELECTOR;
-
-  static const ParserErrorCode MISSING_ASSIGNMENT_IN_INITIALIZER =
-      _MISSING_ASSIGNMENT_IN_INITIALIZER;
-
-  static const ParserErrorCode MISSING_CATCH_OR_FINALLY =
-      _MISSING_CATCH_OR_FINALLY;
-
-  static const ParserErrorCode MISSING_CLOSING_PARENTHESIS = ParserErrorCode(
-    'MISSING_CLOSING_PARENTHESIS',
-    "The closing parenthesis is missing.",
-    correction: "Try adding the closing parenthesis.",
-  );
-
-  static const ParserErrorCode MISSING_CONST_FINAL_VAR_OR_TYPE =
-      _MISSING_CONST_FINAL_VAR_OR_TYPE;
-
-  static const ParserErrorCode MISSING_ENUM_BODY = ParserErrorCode(
-    'MISSING_ENUM_BODY',
-    "An enum definition must have a body with at least one constant name.",
-    correction: "Try adding a body and defining at least one constant.",
-  );
-
-  static const ParserErrorCode MISSING_EXPRESSION_IN_INITIALIZER =
-      ParserErrorCode(
-    'MISSING_EXPRESSION_IN_INITIALIZER',
-    "Expected an expression after the assignment operator.",
-    correction:
-        "Try adding the value to be assigned, or remove the assignment operator.",
-  );
-
-  static const ParserErrorCode MISSING_EXPRESSION_IN_THROW =
-      _MISSING_EXPRESSION_IN_THROW;
-
-  static const ParserErrorCode MISSING_FUNCTION_BODY = ParserErrorCode(
-    'MISSING_FUNCTION_BODY',
-    "A function body must be provided.",
-    correction: "Try adding a function body.",
-  );
-
-  static const ParserErrorCode MISSING_FUNCTION_KEYWORD = ParserErrorCode(
-    'MISSING_FUNCTION_KEYWORD',
-    "Function types must have the keyword 'Function' before the parameter list.",
-    correction: "Try adding the keyword 'Function'.",
-  );
-
-  static const ParserErrorCode MISSING_FUNCTION_PARAMETERS = ParserErrorCode(
-    'MISSING_FUNCTION_PARAMETERS',
-    "Functions must have an explicit list of parameters.",
-    correction: "Try adding a parameter list.",
-  );
-
-  static const ParserErrorCode MISSING_GET = ParserErrorCode(
-    'MISSING_GET',
-    "Getters must have the keyword 'get' before the getter name.",
-    correction: "Try adding the keyword 'get'.",
-  );
-
-  static const ParserErrorCode MISSING_IDENTIFIER = ParserErrorCode(
-    'MISSING_IDENTIFIER',
-    "Expected an identifier.",
-  );
-
-  static const ParserErrorCode MISSING_INITIALIZER = _MISSING_INITIALIZER;
-
-  static const ParserErrorCode MISSING_KEYWORD_OPERATOR =
-      _MISSING_KEYWORD_OPERATOR;
-
-  static const ParserErrorCode MISSING_METHOD_PARAMETERS = ParserErrorCode(
-    'MISSING_METHOD_PARAMETERS',
-    "Methods must have an explicit list of parameters.",
-    correction: "Try adding a parameter list.",
-  );
-
-  static const ParserErrorCode MISSING_NAME_FOR_NAMED_PARAMETER =
-      ParserErrorCode(
-    'MISSING_NAME_FOR_NAMED_PARAMETER',
-    "Named parameters in a function type must have a name",
-    correction:
-        "Try providing a name for the parameter or removing the curly braces.",
-  );
-
-  static const ParserErrorCode MISSING_NAME_IN_LIBRARY_DIRECTIVE =
-      ParserErrorCode(
-    'MISSING_NAME_IN_LIBRARY_DIRECTIVE',
-    "Library directives must include a library name.",
-    correction:
-        "Try adding a library name after the keyword 'library', or remove the library directive if the library doesn't have any parts.",
-  );
-
-  static const ParserErrorCode MISSING_NAME_IN_PART_OF_DIRECTIVE =
-      ParserErrorCode(
-    'MISSING_NAME_IN_PART_OF_DIRECTIVE',
-    "Part-of directives must include a library name.",
-    correction: "Try adding a library name after the 'of'.",
-  );
-
-  static const ParserErrorCode MISSING_PREFIX_IN_DEFERRED_IMPORT =
-      _MISSING_PREFIX_IN_DEFERRED_IMPORT;
-
-  static const ParserErrorCode MISSING_STAR_AFTER_SYNC = ParserErrorCode(
-    'MISSING_STAR_AFTER_SYNC',
-    "The modifier 'sync' must be followed by a star ('*').",
-    correction: "Try removing the modifier, or add a star.",
-  );
-
-  static const ParserErrorCode MISSING_STATEMENT = _MISSING_STATEMENT;
-
-  /**
-   * Parameters:
-   * 0: the terminator that is missing
-   */
-  static const ParserErrorCode MISSING_TERMINATOR_FOR_PARAMETER_GROUP =
-      ParserErrorCode(
-    'MISSING_TERMINATOR_FOR_PARAMETER_GROUP',
-    "There is no '{0}' to close the parameter group.",
-    correction: "Try inserting a '{0}' at the end of the group.",
-  );
-
-  static const ParserErrorCode MISSING_TYPEDEF_PARAMETERS = ParserErrorCode(
-    'MISSING_TYPEDEF_PARAMETERS',
-    "Typedefs must have an explicit list of parameters.",
-    correction: "Try adding a parameter list.",
-  );
-
-  static const ParserErrorCode MISSING_VARIABLE_IN_FOR_EACH = ParserErrorCode(
-    'MISSING_VARIABLE_IN_FOR_EACH',
-    "A loop variable must be declared in a for-each loop before the 'in', but none was found.",
-    correction: "Try declaring a loop variable.",
-  );
-
-  static const ParserErrorCode MIXED_PARAMETER_GROUPS = ParserErrorCode(
-    'MIXED_PARAMETER_GROUPS',
-    "Can't have both positional and named parameters in a single parameter list.",
-    correction: "Try choosing a single style of optional parameters.",
-  );
-
-  static const ParserErrorCode MIXIN_DECLARES_CONSTRUCTOR =
-      _MIXIN_DECLARES_CONSTRUCTOR;
-
-  static const ParserErrorCode MODIFIER_OUT_OF_ORDER = _MODIFIER_OUT_OF_ORDER;
-
-  static const ParserErrorCode MULTIPLE_EXTENDS_CLAUSES =
-      _MULTIPLE_EXTENDS_CLAUSES;
-
-  static const ParserErrorCode MULTIPLE_IMPLEMENTS_CLAUSES = ParserErrorCode(
-    'MULTIPLE_IMPLEMENTS_CLAUSES',
-    "Each class or mixin definition can have at most one implements clause.",
-    correction:
-        "Try combining all of the implements clauses into a single clause.",
-  );
-
-  static const ParserErrorCode MULTIPLE_LIBRARY_DIRECTIVES =
-      _MULTIPLE_LIBRARY_DIRECTIVES;
-
-  static const ParserErrorCode MULTIPLE_NAMED_PARAMETER_GROUPS =
-      ParserErrorCode(
-    'MULTIPLE_NAMED_PARAMETER_GROUPS',
-    "Can't have multiple groups of named parameters in a single parameter list.",
-    correction: "Try combining all of the groups into a single group.",
-  );
-
-  static const ParserErrorCode MULTIPLE_ON_CLAUSES = _MULTIPLE_ON_CLAUSES;
-
-  static const ParserErrorCode MULTIPLE_PART_OF_DIRECTIVES =
-      _MULTIPLE_PART_OF_DIRECTIVES;
-
-  static const ParserErrorCode MULTIPLE_POSITIONAL_PARAMETER_GROUPS =
-      ParserErrorCode(
-    'MULTIPLE_POSITIONAL_PARAMETER_GROUPS',
-    "Can't have multiple groups of positional parameters in a single parameter list.",
-    correction: "Try combining all of the groups into a single group.",
-  );
-
-  /**
-   * Parameters:
-   * 0: the number of variables being declared
-   */
-  static const ParserErrorCode MULTIPLE_VARIABLES_IN_FOR_EACH = ParserErrorCode(
-    'MULTIPLE_VARIABLES_IN_FOR_EACH',
-    "A single loop variable must be declared in a for-each loop before the 'in', but {0} were found.",
-    correction:
-        "Try moving all but one of the declarations inside the loop body.",
-  );
-
-  static const ParserErrorCode MULTIPLE_VARIANCE_MODIFIERS =
-      _MULTIPLE_VARIANCE_MODIFIERS;
-
-  static const ParserErrorCode MULTIPLE_WITH_CLAUSES = _MULTIPLE_WITH_CLAUSES;
-
-  static const ParserErrorCode NAMED_FUNCTION_EXPRESSION = ParserErrorCode(
-    'NAMED_FUNCTION_EXPRESSION',
-    "Function expressions can't be named.",
-    correction:
-        "Try removing the name, or moving the function expression to a function declaration statement.",
-  );
-
-  static const ParserErrorCode NAMED_FUNCTION_TYPE = ParserErrorCode(
-    'NAMED_FUNCTION_TYPE',
-    "Function types can't be named.",
-    correction: "Try replacing the name with the keyword 'Function'.",
-  );
-
-  static const ParserErrorCode NAMED_PARAMETER_OUTSIDE_GROUP = ParserErrorCode(
-    'NAMED_PARAMETER_OUTSIDE_GROUP',
-    "Named parameters must be enclosed in curly braces ('{' and '}').",
-    correction: "Try surrounding the named parameters in curly braces.",
-  );
-
-  static const ParserErrorCode NATIVE_CLAUSE_IN_NON_SDK_CODE = ParserErrorCode(
-    'NATIVE_CLAUSE_IN_NON_SDK_CODE',
-    "Native clause can only be used in the SDK and code that is loaded through native extensions.",
-    correction: "Try removing the native clause.",
-  );
-
-  static const ParserErrorCode NATIVE_CLAUSE_SHOULD_BE_ANNOTATION =
-      _NATIVE_CLAUSE_SHOULD_BE_ANNOTATION;
-
-  static const ParserErrorCode NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE =
-      ParserErrorCode(
-    'NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE',
-    "Native functions can only be declared in the SDK and code that is loaded through native extensions.",
-    correction: "Try removing the word 'native'.",
-  );
-
-  static const ParserErrorCode NON_CONSTRUCTOR_FACTORY = ParserErrorCode(
-    'NON_CONSTRUCTOR_FACTORY',
-    "Only a constructor can be declared to be a factory.",
-    correction: "Try removing the keyword 'factory'.",
-  );
-
-  static const ParserErrorCode NON_IDENTIFIER_LIBRARY_NAME = ParserErrorCode(
-    'NON_IDENTIFIER_LIBRARY_NAME',
-    "The name of a library must be an identifier.",
-    correction: "Try using an identifier as the name of the library.",
-  );
-
-  static const ParserErrorCode NON_PART_OF_DIRECTIVE_IN_PART = ParserErrorCode(
-    'NON_PART_OF_DIRECTIVE_IN_PART',
-    "The part-of directive must be the only directive in a part.",
-    correction:
-        "Try removing the other directives, or moving them to the library for which this is a part.",
-  );
-
-  static const ParserErrorCode NON_STRING_LITERAL_AS_URI = ParserErrorCode(
-    'NON_STRING_LITERAL_AS_URI',
-    "The URI must be a string literal.",
-    correction: "Try enclosing the URI in either single or double quotes.",
-  );
-
-  /**
-   * Parameters:
-   * 0: the operator that the user is trying to define
-   */
-  static const ParserErrorCode NON_USER_DEFINABLE_OPERATOR = ParserErrorCode(
-    'NON_USER_DEFINABLE_OPERATOR',
-    "The operator '{0}' isn't user definable.",
-  );
-
-  static const ParserErrorCode NORMAL_BEFORE_OPTIONAL_PARAMETERS =
-      ParserErrorCode(
-    'NORMAL_BEFORE_OPTIONAL_PARAMETERS',
-    "Normal parameters must occur before optional parameters.",
-    correction:
-        "Try moving all of the normal parameters before the optional parameters.",
-  );
-
-  static const ParserErrorCode NULL_AWARE_CASCADE_OUT_OF_ORDER =
-      _NULL_AWARE_CASCADE_OUT_OF_ORDER;
-
-  static const ParserErrorCode POSITIONAL_AFTER_NAMED_ARGUMENT =
-      ParserErrorCode(
-    'POSITIONAL_AFTER_NAMED_ARGUMENT',
-    "Positional arguments must occur before named arguments.",
-    correction:
-        "Try moving all of the positional arguments before the named arguments.",
-  );
-
-  static const ParserErrorCode POSITIONAL_PARAMETER_OUTSIDE_GROUP =
-      ParserErrorCode(
-    'POSITIONAL_PARAMETER_OUTSIDE_GROUP',
-    "Positional parameters must be enclosed in square brackets ('[' and ']').",
-    correction: "Try surrounding the positional parameters in square brackets.",
-  );
-
-  static const ParserErrorCode PREFIX_AFTER_COMBINATOR =
-      _PREFIX_AFTER_COMBINATOR;
-
-  static const ParserErrorCode REDIRECTING_CONSTRUCTOR_WITH_BODY =
-      _REDIRECTING_CONSTRUCTOR_WITH_BODY;
-
-  static const ParserErrorCode REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR =
-      _REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR;
-
-  static const ParserErrorCode SETTER_CONSTRUCTOR = _SETTER_CONSTRUCTOR;
-
-  static const ParserErrorCode SETTER_IN_FUNCTION = ParserErrorCode(
-    'SETTER_IN_FUNCTION',
-    "Setters can't be defined within methods or functions.",
-    correction: "Try moving the setter outside the method or function.",
-  );
-
-  static const ParserErrorCode STACK_OVERFLOW = _STACK_OVERFLOW;
-
-  static const ParserErrorCode STATIC_CONSTRUCTOR = _STATIC_CONSTRUCTOR;
-
-  static const ParserErrorCode STATIC_GETTER_WITHOUT_BODY = ParserErrorCode(
-    'STATIC_GETTER_WITHOUT_BODY',
-    "A 'static' getter must have a body.",
-    correction:
-        "Try adding a body to the getter, or removing the keyword 'static'.",
-  );
-
-  static const ParserErrorCode STATIC_OPERATOR = _STATIC_OPERATOR;
-
-  static const ParserErrorCode STATIC_SETTER_WITHOUT_BODY = ParserErrorCode(
-    'STATIC_SETTER_WITHOUT_BODY',
-    "A 'static' setter must have a body.",
-    correction:
-        "Try adding a body to the setter, or removing the keyword 'static'.",
-  );
-
-  static const ParserErrorCode STATIC_TOP_LEVEL_DECLARATION = ParserErrorCode(
-    'STATIC_TOP_LEVEL_DECLARATION',
-    "Top-level declarations can't be declared to be static.",
-    correction: "Try removing the keyword 'static'.",
-  );
-
-  static const ParserErrorCode SWITCH_HAS_CASE_AFTER_DEFAULT_CASE =
-      _SWITCH_HAS_CASE_AFTER_DEFAULT_CASE;
-
-  static const ParserErrorCode SWITCH_HAS_MULTIPLE_DEFAULT_CASES =
-      _SWITCH_HAS_MULTIPLE_DEFAULT_CASES;
-
-  static const ParserErrorCode TOP_LEVEL_OPERATOR = _TOP_LEVEL_OPERATOR;
-
-  static const ParserErrorCode TYPEDEF_IN_CLASS = _TYPEDEF_IN_CLASS;
-
-  static const ParserErrorCode TYPE_ARGUMENTS_ON_TYPE_VARIABLE =
-      _TYPE_ARGUMENTS_ON_TYPE_VARIABLE;
-
-  static const ParserErrorCode TYPE_BEFORE_FACTORY = _TYPE_BEFORE_FACTORY;
-
-  static const ParserErrorCode TYPE_PARAMETER_ON_CONSTRUCTOR =
-      _TYPE_PARAMETER_ON_CONSTRUCTOR;
-
-  /**
-   * 7.1.1 Operators: Type parameters are not syntactically supported on an
-   * operator.
-   */
-  static const ParserErrorCode TYPE_PARAMETER_ON_OPERATOR = ParserErrorCode(
-    'TYPE_PARAMETER_ON_OPERATOR',
-    "Types parameters aren't allowed when defining an operator.",
-    correction: "Try removing the type parameters.",
-  );
-
-  /**
-   * Parameters:
-   * 0: the starting character that was missing
-   */
-  static const ParserErrorCode UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP =
-      ParserErrorCode(
-    'UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP',
-    "There is no '{0}' to open a parameter group.",
-    correction: "Try inserting the '{0}' at the appropriate location.",
-  );
-
-  /**
-   * Parameters:
-   * 0: the unexpected text that was found
-   */
-  static const ParserErrorCode UNEXPECTED_TOKEN = ParserErrorCode(
-    'UNEXPECTED_TOKEN',
-    "Unexpected text '{0}'.",
-    correction: "Try removing the text.",
-  );
-
-  static const ParserErrorCode VAR_AND_TYPE = _VAR_AND_TYPE;
-
-  static const ParserErrorCode VAR_AS_TYPE_NAME = _VAR_AS_TYPE_NAME;
-
-  static const ParserErrorCode VAR_CLASS = ParserErrorCode(
-    'VAR_CLASS',
-    "Classes can't be declared to be 'var'.",
-    correction: "Try removing the keyword 'var'.",
-  );
-
-  static const ParserErrorCode VAR_ENUM = ParserErrorCode(
-    'VAR_ENUM',
-    "Enums can't be declared to be 'var'.",
-    correction: "Try removing the keyword 'var'.",
-  );
-
-  static const ParserErrorCode VAR_RETURN_TYPE = _VAR_RETURN_TYPE;
-
-  static const ParserErrorCode VAR_TYPEDEF = ParserErrorCode(
-    'VAR_TYPEDEF',
-    "Typedefs can't be declared to be 'var'.",
-    correction:
-        "Try removing the keyword 'var', or replacing it with the name of the return type.",
-  );
-
-  static const ParserErrorCode VOID_WITH_TYPE_ARGUMENTS =
-      _VOID_WITH_TYPE_ARGUMENTS;
-
-  static const ParserErrorCode WITH_BEFORE_EXTENDS = _WITH_BEFORE_EXTENDS;
-
-  static const ParserErrorCode WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER =
-      ParserErrorCode(
-    'WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER',
-    "The default value of a positional parameter should be preceded by '='.",
-    correction: "Try replacing the ':' with '='.",
-  );
-
-  /**
-   * Parameters:
-   * 0: the terminator that was expected
-   * 1: the terminator that was found
-   */
-  static const ParserErrorCode WRONG_TERMINATOR_FOR_PARAMETER_GROUP =
-      ParserErrorCode(
-    'WRONG_TERMINATOR_FOR_PARAMETER_GROUP',
-    "Expected '{0}' to close parameter group.",
-    correction: "Try replacing '{0}' with '{1}'.",
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const ParserErrorCode(
-    String name,
-    String message, {
-    String? correction,
-    bool hasPublishedDocs = false,
-    bool isUnresolvedIdentifier = false,
-    String? uniqueName,
-  }) : super(
-          correction: correction,
-          hasPublishedDocs: hasPublishedDocs,
-          isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
-          name: name,
-          uniqueName: 'ParserErrorCode.${uniqueName ?? name}',
-        );
-
-  @override
-  ErrorSeverity get errorSeverity => ErrorSeverity.ERROR;
-
-  @override
-  ErrorType get type => ErrorType.SYNTACTIC_ERROR;
-}
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
index 6d60a5f..84e0d7e 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
@@ -4,4 +4,4 @@
 
 export 'package:_fe_analyzer_shared/src/scanner/errors.dart'
     show ScannerErrorCode;
-export 'package:analyzer/src/dart/error/syntactic_errors.analyzer.g.dart';
+export 'package:analyzer/src/dart/error/syntactic_errors.g.dart';
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index 4db09fe..0bec5ea 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -1,851 +1,1667 @@
-//
+// Copyright (c) 2021, 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.
+
 // THIS FILE IS GENERATED. DO NOT EDIT.
 //
-// Instead modify 'pkg/front_end/messages.yaml' and run
+// Instead modify 'pkg/analyzer/messages.yaml' and run
 // 'dart pkg/analyzer/tool/messages/generate.dart' to update.
 
-part of 'syntactic_errors.analyzer.g.dart';
+import "package:analyzer/error/error.dart";
+
+// It is hard to visually separate each code's _doc comment_ from its published
+// _documentation comment_ when each is written as an end-of-line comment.
+// ignore_for_file: slash_for_doc_comments
 
 final fastaAnalyzerErrorCodes = <ErrorCode?>[
   null,
-  _EQUALITY_CANNOT_BE_EQUALITY_OPERAND,
-  _CONTINUE_OUTSIDE_OF_LOOP,
-  _EXTERNAL_CLASS,
-  _STATIC_CONSTRUCTOR,
-  _EXTERNAL_ENUM,
-  _PREFIX_AFTER_COMBINATOR,
-  _TYPEDEF_IN_CLASS,
-  _EXPECTED_BODY,
-  _INVALID_AWAIT_IN_FOR,
-  _IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
-  _WITH_BEFORE_EXTENDS,
-  _VAR_RETURN_TYPE,
-  _TYPE_ARGUMENTS_ON_TYPE_VARIABLE,
-  _TOP_LEVEL_OPERATOR,
-  _SWITCH_HAS_MULTIPLE_DEFAULT_CASES,
-  _SWITCH_HAS_CASE_AFTER_DEFAULT_CASE,
-  _STATIC_OPERATOR,
-  _INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER,
-  _STACK_OVERFLOW,
-  _MISSING_CATCH_OR_FINALLY,
-  _REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR,
-  _REDIRECTING_CONSTRUCTOR_WITH_BODY,
-  _NATIVE_CLAUSE_SHOULD_BE_ANNOTATION,
-  _MULTIPLE_WITH_CLAUSES,
-  _MULTIPLE_PART_OF_DIRECTIVES,
-  _MULTIPLE_ON_CLAUSES,
-  _MULTIPLE_LIBRARY_DIRECTIVES,
-  _MULTIPLE_EXTENDS_CLAUSES,
-  _MISSING_STATEMENT,
-  _MISSING_PREFIX_IN_DEFERRED_IMPORT,
-  _MISSING_KEYWORD_OPERATOR,
-  _MISSING_EXPRESSION_IN_THROW,
-  _MISSING_CONST_FINAL_VAR_OR_TYPE,
-  _MISSING_ASSIGNMENT_IN_INITIALIZER,
-  _MISSING_ASSIGNABLE_SELECTOR,
-  _MISSING_INITIALIZER,
-  _LIBRARY_DIRECTIVE_NOT_FIRST,
-  _INVALID_UNICODE_ESCAPE,
-  _INVALID_OPERATOR,
-  _INVALID_HEX_ESCAPE,
-  _EXPECTED_INSTEAD,
-  _IMPLEMENTS_BEFORE_WITH,
-  _IMPLEMENTS_BEFORE_ON,
-  _IMPLEMENTS_BEFORE_EXTENDS,
-  _ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE,
-  _EXPECTED_ELSE_OR_COMMA,
-  _INVALID_SUPER_IN_INITIALIZER,
-  _EXPERIMENT_NOT_ENABLED,
-  _EXTERNAL_METHOD_WITH_BODY,
-  _EXTERNAL_FIELD,
-  _ABSTRACT_CLASS_MEMBER,
-  _BREAK_OUTSIDE_OF_LOOP,
-  _CLASS_IN_CLASS,
-  _COLON_IN_PLACE_OF_IN,
-  _CONSTRUCTOR_WITH_RETURN_TYPE,
-  _MODIFIER_OUT_OF_ORDER,
-  _TYPE_BEFORE_FACTORY,
-  _CONST_AND_FINAL,
-  _CONFLICTING_MODIFIERS,
-  _CONST_CLASS,
-  _VAR_AS_TYPE_NAME,
-  _CONST_FACTORY,
-  _CONST_METHOD,
-  _CONTINUE_WITHOUT_LABEL_IN_CASE,
-  _INVALID_THIS_IN_INITIALIZER,
-  _COVARIANT_AND_STATIC,
-  _COVARIANT_MEMBER,
-  _DEFERRED_AFTER_PREFIX,
-  _DIRECTIVE_AFTER_DECLARATION,
-  _DUPLICATED_MODIFIER,
-  _DUPLICATE_DEFERRED,
-  _DUPLICATE_LABEL_IN_SWITCH_STATEMENT,
-  _DUPLICATE_PREFIX,
-  _ENUM_IN_CLASS,
-  _EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
-  _EXTERNAL_TYPEDEF,
-  _EXTRANEOUS_MODIFIER,
-  _FACTORY_TOP_LEVEL_DECLARATION,
-  _FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
-  _FINAL_AND_COVARIANT,
-  _FINAL_AND_VAR,
-  _INITIALIZED_VARIABLE_IN_FOR_EACH,
-  _CATCH_SYNTAX_EXTRA_PARAMETERS,
-  _CATCH_SYNTAX,
-  _EXTERNAL_FACTORY_REDIRECTION,
-  _EXTERNAL_FACTORY_WITH_BODY,
-  _EXTERNAL_CONSTRUCTOR_WITH_BODY,
-  _FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS,
-  _VAR_AND_TYPE,
-  _INVALID_INITIALIZER,
-  _ANNOTATION_WITH_TYPE_ARGUMENTS,
-  _EXTENSION_DECLARES_CONSTRUCTOR,
-  _EXTENSION_DECLARES_INSTANCE_FIELD,
-  _EXTENSION_DECLARES_ABSTRACT_MEMBER,
-  _MIXIN_DECLARES_CONSTRUCTOR,
-  _NULL_AWARE_CASCADE_OUT_OF_ORDER,
-  _MULTIPLE_VARIANCE_MODIFIERS,
-  _INVALID_USE_OF_COVARIANT_IN_EXTENSION,
-  _TYPE_PARAMETER_ON_CONSTRUCTOR,
-  _VOID_WITH_TYPE_ARGUMENTS,
-  _FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER,
-  _INVALID_CONSTRUCTOR_NAME,
-  _GETTER_CONSTRUCTOR,
-  _SETTER_CONSTRUCTOR,
-  _MEMBER_WITH_CLASS_NAME,
-  _EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER,
-  _ABSTRACT_STATIC_FIELD,
-  _ABSTRACT_LATE_FIELD,
-  _EXTERNAL_LATE_FIELD,
-  _ABSTRACT_EXTERNAL_FIELD,
-  _ANNOTATION_ON_TYPE_ARGUMENT,
-  _BINARY_OPERATOR_WRITTEN_OUT,
-  _EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD,
-  _ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED,
-  _LITERAL_WITH_CLASS_AND_NEW,
-  _LITERAL_WITH_CLASS,
-  _LITERAL_WITH_NEW,
-  _CONSTRUCTOR_WITH_TYPE_ARGUMENTS,
+  ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND,
+  ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP,
+  ParserErrorCode.EXTERNAL_CLASS,
+  ParserErrorCode.STATIC_CONSTRUCTOR,
+  ParserErrorCode.EXTERNAL_ENUM,
+  ParserErrorCode.PREFIX_AFTER_COMBINATOR,
+  ParserErrorCode.TYPEDEF_IN_CLASS,
+  ParserErrorCode.EXPECTED_BODY,
+  ParserErrorCode.INVALID_AWAIT_IN_FOR,
+  ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
+  ParserErrorCode.WITH_BEFORE_EXTENDS,
+  ParserErrorCode.VAR_RETURN_TYPE,
+  ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE,
+  ParserErrorCode.TOP_LEVEL_OPERATOR,
+  ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES,
+  ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE,
+  ParserErrorCode.STATIC_OPERATOR,
+  ParserErrorCode.INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER,
+  ParserErrorCode.STACK_OVERFLOW,
+  ParserErrorCode.MISSING_CATCH_OR_FINALLY,
+  ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR,
+  ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY,
+  ParserErrorCode.NATIVE_CLAUSE_SHOULD_BE_ANNOTATION,
+  ParserErrorCode.MULTIPLE_WITH_CLAUSES,
+  ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES,
+  ParserErrorCode.MULTIPLE_ON_CLAUSES,
+  ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES,
+  ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES,
+  ParserErrorCode.MISSING_STATEMENT,
+  ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT,
+  ParserErrorCode.MISSING_KEYWORD_OPERATOR,
+  ParserErrorCode.MISSING_EXPRESSION_IN_THROW,
+  ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE,
+  ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER,
+  ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR,
+  ParserErrorCode.MISSING_INITIALIZER,
+  ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST,
+  ParserErrorCode.INVALID_UNICODE_ESCAPE,
+  ParserErrorCode.INVALID_OPERATOR,
+  ParserErrorCode.INVALID_HEX_ESCAPE,
+  ParserErrorCode.EXPECTED_INSTEAD,
+  ParserErrorCode.IMPLEMENTS_BEFORE_WITH,
+  ParserErrorCode.IMPLEMENTS_BEFORE_ON,
+  ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS,
+  ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE,
+  ParserErrorCode.EXPECTED_ELSE_OR_COMMA,
+  ParserErrorCode.INVALID_SUPER_IN_INITIALIZER,
+  ParserErrorCode.EXPERIMENT_NOT_ENABLED,
+  ParserErrorCode.EXTERNAL_METHOD_WITH_BODY,
+  ParserErrorCode.EXTERNAL_FIELD,
+  ParserErrorCode.ABSTRACT_CLASS_MEMBER,
+  ParserErrorCode.BREAK_OUTSIDE_OF_LOOP,
+  ParserErrorCode.CLASS_IN_CLASS,
+  ParserErrorCode.COLON_IN_PLACE_OF_IN,
+  ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE,
+  ParserErrorCode.MODIFIER_OUT_OF_ORDER,
+  ParserErrorCode.TYPE_BEFORE_FACTORY,
+  ParserErrorCode.CONST_AND_FINAL,
+  ParserErrorCode.CONFLICTING_MODIFIERS,
+  ParserErrorCode.CONST_CLASS,
+  ParserErrorCode.VAR_AS_TYPE_NAME,
+  ParserErrorCode.CONST_FACTORY,
+  ParserErrorCode.CONST_METHOD,
+  ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE,
+  ParserErrorCode.INVALID_THIS_IN_INITIALIZER,
+  ParserErrorCode.COVARIANT_AND_STATIC,
+  ParserErrorCode.COVARIANT_MEMBER,
+  ParserErrorCode.DEFERRED_AFTER_PREFIX,
+  ParserErrorCode.DIRECTIVE_AFTER_DECLARATION,
+  ParserErrorCode.DUPLICATED_MODIFIER,
+  ParserErrorCode.DUPLICATE_DEFERRED,
+  ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT,
+  ParserErrorCode.DUPLICATE_PREFIX,
+  ParserErrorCode.ENUM_IN_CLASS,
+  ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
+  ParserErrorCode.EXTERNAL_TYPEDEF,
+  ParserErrorCode.EXTRANEOUS_MODIFIER,
+  ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION,
+  ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
+  ParserErrorCode.FINAL_AND_COVARIANT,
+  ParserErrorCode.FINAL_AND_VAR,
+  ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH,
+  ParserErrorCode.CATCH_SYNTAX_EXTRA_PARAMETERS,
+  ParserErrorCode.CATCH_SYNTAX,
+  ParserErrorCode.EXTERNAL_FACTORY_REDIRECTION,
+  ParserErrorCode.EXTERNAL_FACTORY_WITH_BODY,
+  ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY,
+  ParserErrorCode.FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS,
+  ParserErrorCode.VAR_AND_TYPE,
+  ParserErrorCode.INVALID_INITIALIZER,
+  ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS,
+  ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR,
+  ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD,
+  ParserErrorCode.EXTENSION_DECLARES_ABSTRACT_MEMBER,
+  ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR,
+  ParserErrorCode.NULL_AWARE_CASCADE_OUT_OF_ORDER,
+  ParserErrorCode.MULTIPLE_VARIANCE_MODIFIERS,
+  ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION,
+  ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR,
+  ParserErrorCode.VOID_WITH_TYPE_ARGUMENTS,
+  ParserErrorCode.FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER,
+  ParserErrorCode.INVALID_CONSTRUCTOR_NAME,
+  ParserErrorCode.GETTER_CONSTRUCTOR,
+  ParserErrorCode.SETTER_CONSTRUCTOR,
+  ParserErrorCode.MEMBER_WITH_CLASS_NAME,
+  ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER,
+  ParserErrorCode.ABSTRACT_STATIC_FIELD,
+  ParserErrorCode.ABSTRACT_LATE_FIELD,
+  ParserErrorCode.EXTERNAL_LATE_FIELD,
+  ParserErrorCode.ABSTRACT_EXTERNAL_FIELD,
+  ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT,
+  ParserErrorCode.BINARY_OPERATOR_WRITTEN_OUT,
+  ParserErrorCode.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD,
+  ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED,
+  ParserErrorCode.LITERAL_WITH_CLASS_AND_NEW,
+  ParserErrorCode.LITERAL_WITH_CLASS,
+  ParserErrorCode.LITERAL_WITH_NEW,
+  ParserErrorCode.CONSTRUCTOR_WITH_TYPE_ARGUMENTS,
+  ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR,
+  ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR,
 ];
 
-const ParserErrorCode _ABSTRACT_CLASS_MEMBER = ParserErrorCode(
-  'ABSTRACT_CLASS_MEMBER',
-  "Members of classes can't be declared to be 'abstract'.",
-  correction:
-      "Try removing the 'abstract' keyword. You can add the 'abstract' keyword before the class declaration.",
-);
+class ParserErrorCode extends ErrorCode {
+  static const ParserErrorCode ABSTRACT_CLASS_MEMBER = ParserErrorCode(
+    'ABSTRACT_CLASS_MEMBER',
+    "Members of classes can't be declared to be 'abstract'.",
+    correctionMessage:
+        "Try removing the 'abstract' keyword. You can add the 'abstract' keyword before the class declaration.",
+  );
 
-const ParserErrorCode _ABSTRACT_EXTERNAL_FIELD = ParserErrorCode(
-  'ABSTRACT_EXTERNAL_FIELD',
-  "Fields can't be declared both 'abstract' and 'external'.",
-  correction: "Try removing the 'abstract' or 'external' keyword.",
-);
+  static const ParserErrorCode ABSTRACT_ENUM = ParserErrorCode(
+    'ABSTRACT_ENUM',
+    "Enums can't be declared to be 'abstract'.",
+    correctionMessage: "Try removing the keyword 'abstract'.",
+  );
 
-const ParserErrorCode _ABSTRACT_LATE_FIELD = ParserErrorCode(
-  'ABSTRACT_LATE_FIELD',
-  "Abstract fields cannot be late.",
-  correction: "Try removing the 'abstract' or 'late' keyword.",
-);
+  static const ParserErrorCode ABSTRACT_EXTERNAL_FIELD = ParserErrorCode(
+    'ABSTRACT_EXTERNAL_FIELD',
+    "Fields can't be declared both 'abstract' and 'external'.",
+    correctionMessage: "Try removing the 'abstract' or 'external' keyword.",
+  );
 
-const ParserErrorCode _ABSTRACT_STATIC_FIELD = ParserErrorCode(
-  'ABSTRACT_STATIC_FIELD',
-  "Static fields can't be declared 'abstract'.",
-  correction: "Try removing the 'abstract' or 'static' keyword.",
-);
+  static const ParserErrorCode ABSTRACT_LATE_FIELD = ParserErrorCode(
+    'ABSTRACT_LATE_FIELD',
+    "Abstract fields cannot be late.",
+    correctionMessage: "Try removing the 'abstract' or 'late' keyword.",
+  );
 
-const ParserErrorCode _ANNOTATION_ON_TYPE_ARGUMENT = ParserErrorCode(
-  'ANNOTATION_ON_TYPE_ARGUMENT',
-  "Type arguments can't have annotations because they aren't declarations.",
-);
+  static const ParserErrorCode ABSTRACT_STATIC_FIELD = ParserErrorCode(
+    'ABSTRACT_STATIC_FIELD',
+    "Static fields can't be declared 'abstract'.",
+    correctionMessage: "Try removing the 'abstract' or 'static' keyword.",
+  );
 
-const ParserErrorCode _ANNOTATION_WITH_TYPE_ARGUMENTS = ParserErrorCode(
-  'ANNOTATION_WITH_TYPE_ARGUMENTS',
-  "An annotation can't use type arguments.",
-);
+  static const ParserErrorCode ABSTRACT_STATIC_METHOD = ParserErrorCode(
+    'ABSTRACT_STATIC_METHOD',
+    "Static methods can't be declared to be 'abstract'.",
+    correctionMessage: "Try removing the keyword 'abstract'.",
+  );
 
-const ParserErrorCode _ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED =
-    ParserErrorCode(
-  'ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED',
-  "An annotation with type arguments must be followed by an argument list.",
-);
+  static const ParserErrorCode ABSTRACT_TOP_LEVEL_FUNCTION = ParserErrorCode(
+    'ABSTRACT_TOP_LEVEL_FUNCTION',
+    "Top-level functions can't be declared to be 'abstract'.",
+    correctionMessage: "Try removing the keyword 'abstract'.",
+  );
 
-const ParserErrorCode _BINARY_OPERATOR_WRITTEN_OUT = ParserErrorCode(
-  'BINARY_OPERATOR_WRITTEN_OUT',
-  "Binary operator '{0}' is written as '{1}' instead of the written out word.",
-  correction: "Try replacing '{0}' with '{1}'.",
-);
+  static const ParserErrorCode ABSTRACT_TOP_LEVEL_VARIABLE = ParserErrorCode(
+    'ABSTRACT_TOP_LEVEL_VARIABLE',
+    "Top-level variables can't be declared to be 'abstract'.",
+    correctionMessage: "Try removing the keyword 'abstract'.",
+  );
 
-const ParserErrorCode _BREAK_OUTSIDE_OF_LOOP = ParserErrorCode(
-  'BREAK_OUTSIDE_OF_LOOP',
-  "A break statement can't be used outside of a loop or switch statement.",
-  correction: "Try removing the break statement.",
-);
+  static const ParserErrorCode ABSTRACT_TYPEDEF = ParserErrorCode(
+    'ABSTRACT_TYPEDEF',
+    "Typedefs can't be declared to be 'abstract'.",
+    correctionMessage: "Try removing the keyword 'abstract'.",
+  );
 
-const ParserErrorCode _CATCH_SYNTAX = ParserErrorCode(
-  'CATCH_SYNTAX',
-  "'catch' must be followed by '(identifier)' or '(identifier, identifier)'.",
-  correction:
-      "No types are needed, the first is given by 'on', the second is always 'StackTrace'.",
-);
+  static const ParserErrorCode ANNOTATION_ON_TYPE_ARGUMENT = ParserErrorCode(
+    'ANNOTATION_ON_TYPE_ARGUMENT',
+    "Type arguments can't have annotations because they aren't declarations.",
+  );
 
-const ParserErrorCode _CATCH_SYNTAX_EXTRA_PARAMETERS = ParserErrorCode(
-  'CATCH_SYNTAX_EXTRA_PARAMETERS',
-  "'catch' must be followed by '(identifier)' or '(identifier, identifier)'.",
-  correction:
-      "No types are needed, the first is given by 'on', the second is always 'StackTrace'.",
-);
+  static const ParserErrorCode ANNOTATION_WITH_TYPE_ARGUMENTS = ParserErrorCode(
+    'ANNOTATION_WITH_TYPE_ARGUMENTS',
+    "An annotation can't use type arguments.",
+  );
 
-const ParserErrorCode _CLASS_IN_CLASS = ParserErrorCode(
-  'CLASS_IN_CLASS',
-  "Classes can't be declared inside other classes.",
-  correction: "Try moving the class to the top-level.",
-);
+  static const ParserErrorCode ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED =
+      ParserErrorCode(
+    'ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED',
+    "An annotation with type arguments must be followed by an argument list.",
+  );
 
-const ParserErrorCode _COLON_IN_PLACE_OF_IN = ParserErrorCode(
-  'COLON_IN_PLACE_OF_IN',
-  "For-in loops use 'in' rather than a colon.",
-  correction: "Try replacing the colon with the keyword 'in'.",
-);
+  /**
+   * 16.32 Identifier Reference: It is a compile-time error if any of the
+   * identifiers async, await, or yield is used as an identifier in a function
+   * body marked with either async, async, or sync.
+   */
+  static const ParserErrorCode ASYNC_KEYWORD_USED_AS_IDENTIFIER =
+      ParserErrorCode(
+    'ASYNC_KEYWORD_USED_AS_IDENTIFIER',
+    "The keywords 'await' and 'yield' can't be used as identifiers in an asynchronous or generator function.",
+  );
 
-const ParserErrorCode _CONFLICTING_MODIFIERS = ParserErrorCode(
-  'CONFLICTING_MODIFIERS',
-  "Members can't be declared to be both '{0}' and '{1}'.",
-  correction: "Try removing one of the keywords.",
-);
+  static const ParserErrorCode BINARY_OPERATOR_WRITTEN_OUT = ParserErrorCode(
+    'BINARY_OPERATOR_WRITTEN_OUT',
+    "Binary operator '{0}' is written as '{1}' instead of the written out word.",
+    correctionMessage: "Try replacing '{0}' with '{1}'.",
+  );
 
-const ParserErrorCode _CONSTRUCTOR_WITH_RETURN_TYPE = ParserErrorCode(
-  'CONSTRUCTOR_WITH_RETURN_TYPE',
-  "Constructors can't have a return type.",
-  correction: "Try removing the return type.",
-);
+  static const ParserErrorCode BREAK_OUTSIDE_OF_LOOP = ParserErrorCode(
+    'BREAK_OUTSIDE_OF_LOOP',
+    "A break statement can't be used outside of a loop or switch statement.",
+    correctionMessage: "Try removing the break statement.",
+  );
 
-const ParserErrorCode _CONSTRUCTOR_WITH_TYPE_ARGUMENTS = ParserErrorCode(
-  'CONSTRUCTOR_WITH_TYPE_ARGUMENTS',
-  "A constructor invocation can't have type arguments after the constructor name.",
-  correction:
-      "Try removing the type arguments or placing them after the class name.",
-);
+  static const ParserErrorCode CATCH_SYNTAX = ParserErrorCode(
+    'CATCH_SYNTAX',
+    "'catch' must be followed by '(identifier)' or '(identifier, identifier)'.",
+    correctionMessage:
+        "No types are needed, the first is given by 'on', the second is always 'StackTrace'.",
+  );
 
-const ParserErrorCode _CONST_AND_FINAL = ParserErrorCode(
-  'CONST_AND_FINAL',
-  "Members can't be declared to be both 'const' and 'final'.",
-  correction: "Try removing either the 'const' or 'final' keyword.",
-);
+  static const ParserErrorCode CATCH_SYNTAX_EXTRA_PARAMETERS = ParserErrorCode(
+    'CATCH_SYNTAX_EXTRA_PARAMETERS',
+    "'catch' must be followed by '(identifier)' or '(identifier, identifier)'.",
+    correctionMessage:
+        "No types are needed, the first is given by 'on', the second is always 'StackTrace'.",
+  );
 
-const ParserErrorCode _CONST_CLASS = ParserErrorCode(
-  'CONST_CLASS',
-  "Classes can't be declared to be 'const'.",
-  correction:
-      "Try removing the 'const' keyword. If you're trying to indicate that instances of the class can be constants, place the 'const' keyword on  the class' constructor(s).",
-);
+  static const ParserErrorCode CLASS_IN_CLASS = ParserErrorCode(
+    'CLASS_IN_CLASS',
+    "Classes can't be declared inside other classes.",
+    correctionMessage: "Try moving the class to the top-level.",
+  );
 
-const ParserErrorCode _CONST_FACTORY = ParserErrorCode(
-  'CONST_FACTORY',
-  "Only redirecting factory constructors can be declared to be 'const'.",
-  correction:
-      "Try removing the 'const' keyword, or replacing the body with '=' followed by a valid target.",
-);
+  static const ParserErrorCode COLON_IN_PLACE_OF_IN = ParserErrorCode(
+    'COLON_IN_PLACE_OF_IN',
+    "For-in loops use 'in' rather than a colon.",
+    correctionMessage: "Try replacing the colon with the keyword 'in'.",
+  );
 
-const ParserErrorCode _CONST_METHOD = ParserErrorCode(
-  'CONST_METHOD',
-  "Getters, setters and methods can't be declared to be 'const'.",
-  correction: "Try removing the 'const' keyword.",
-);
+  static const ParserErrorCode CONFLICTING_MODIFIERS = ParserErrorCode(
+    'CONFLICTING_MODIFIERS',
+    "Members can't be declared to be both '{0}' and '{1}'.",
+    correctionMessage: "Try removing one of the keywords.",
+  );
 
-const ParserErrorCode _CONTINUE_OUTSIDE_OF_LOOP = ParserErrorCode(
-  'CONTINUE_OUTSIDE_OF_LOOP',
-  "A continue statement can't be used outside of a loop or switch statement.",
-  correction: "Try removing the continue statement.",
-);
+  static const ParserErrorCode CONSTRUCTOR_WITH_RETURN_TYPE = ParserErrorCode(
+    'CONSTRUCTOR_WITH_RETURN_TYPE',
+    "Constructors can't have a return type.",
+    correctionMessage: "Try removing the return type.",
+  );
 
-const ParserErrorCode _CONTINUE_WITHOUT_LABEL_IN_CASE = ParserErrorCode(
-  'CONTINUE_WITHOUT_LABEL_IN_CASE',
-  "A continue statement in a switch statement must have a label as a target.",
-  correction:
-      "Try adding a label associated with one of the case clauses to the continue statement.",
-);
+  static const ParserErrorCode CONSTRUCTOR_WITH_TYPE_ARGUMENTS =
+      ParserErrorCode(
+    'CONSTRUCTOR_WITH_TYPE_ARGUMENTS',
+    "A constructor invocation can't have type arguments after the constructor name.",
+    correctionMessage:
+        "Try removing the type arguments or placing them after the class name.",
+  );
 
-const ParserErrorCode _COVARIANT_AND_STATIC = ParserErrorCode(
-  'COVARIANT_AND_STATIC',
-  "Members can't be declared to be both 'covariant' and 'static'.",
-  correction: "Try removing either the 'covariant' or 'static' keyword.",
-);
+  static const ParserErrorCode CONST_AND_FINAL = ParserErrorCode(
+    'CONST_AND_FINAL',
+    "Members can't be declared to be both 'const' and 'final'.",
+    correctionMessage: "Try removing either the 'const' or 'final' keyword.",
+  );
 
-const ParserErrorCode _COVARIANT_MEMBER = ParserErrorCode(
-  'COVARIANT_MEMBER',
-  "Getters, setters and methods can't be declared to be 'covariant'.",
-  correction: "Try removing the 'covariant' keyword.",
-);
+  static const ParserErrorCode CONST_CLASS = ParserErrorCode(
+    'CONST_CLASS',
+    "Classes can't be declared to be 'const'.",
+    correctionMessage:
+        "Try removing the 'const' keyword. If you're trying to indicate that instances of the class can be constants, place the 'const' keyword on  the class' constructor(s).",
+  );
 
-const ParserErrorCode _DEFERRED_AFTER_PREFIX = ParserErrorCode(
-  'DEFERRED_AFTER_PREFIX',
-  "The deferred keyword should come immediately before the prefix ('as' clause).",
-  correction: "Try moving the deferred keyword before the prefix.",
-);
+  static const ParserErrorCode CONST_CONSTRUCTOR_WITH_BODY = ParserErrorCode(
+    'CONST_CONSTRUCTOR_WITH_BODY',
+    "Const constructors can't have a body.",
+    correctionMessage: "Try removing either the 'const' keyword or the body.",
+  );
 
-const ParserErrorCode _DIRECTIVE_AFTER_DECLARATION = ParserErrorCode(
-  'DIRECTIVE_AFTER_DECLARATION',
-  "Directives must appear before any declarations.",
-  correction: "Try moving the directive before any declarations.",
-);
+  static const ParserErrorCode CONST_ENUM = ParserErrorCode(
+    'CONST_ENUM',
+    "Enums can't be declared to be 'const'.",
+    correctionMessage: "Try removing the 'const' keyword.",
+  );
 
-const ParserErrorCode _DUPLICATED_MODIFIER = ParserErrorCode(
-  'DUPLICATED_MODIFIER',
-  "The modifier '{0}' was already specified.",
-  correction: "Try removing all but one occurrence of the modifier.",
-);
+  static const ParserErrorCode CONST_FACTORY = ParserErrorCode(
+    'CONST_FACTORY',
+    "Only redirecting factory constructors can be declared to be 'const'.",
+    correctionMessage:
+        "Try removing the 'const' keyword, or replacing the body with '=' followed by a valid target.",
+  );
+
+  static const ParserErrorCode CONST_METHOD = ParserErrorCode(
+    'CONST_METHOD',
+    "Getters, setters and methods can't be declared to be 'const'.",
+    correctionMessage: "Try removing the 'const' keyword.",
+  );
+
+  static const ParserErrorCode CONST_TYPEDEF = ParserErrorCode(
+    'CONST_TYPEDEF',
+    "Type aliases can't be declared to be 'const'.",
+    correctionMessage: "Try removing the 'const' keyword.",
+  );
+
+  static const ParserErrorCode CONTINUE_OUTSIDE_OF_LOOP = ParserErrorCode(
+    'CONTINUE_OUTSIDE_OF_LOOP',
+    "A continue statement can't be used outside of a loop or switch statement.",
+    correctionMessage: "Try removing the continue statement.",
+  );
+
+  static const ParserErrorCode CONTINUE_WITHOUT_LABEL_IN_CASE = ParserErrorCode(
+    'CONTINUE_WITHOUT_LABEL_IN_CASE',
+    "A continue statement in a switch statement must have a label as a target.",
+    correctionMessage:
+        "Try adding a label associated with one of the case clauses to the continue statement.",
+  );
+
+  static const ParserErrorCode COVARIANT_AND_STATIC = ParserErrorCode(
+    'COVARIANT_AND_STATIC',
+    "Members can't be declared to be both 'covariant' and 'static'.",
+    correctionMessage:
+        "Try removing either the 'covariant' or 'static' keyword.",
+  );
+
+  static const ParserErrorCode COVARIANT_CONSTRUCTOR = ParserErrorCode(
+    'COVARIANT_CONSTRUCTOR',
+    "A constructor can't be declared to be 'covariant'.",
+    correctionMessage: "Try removing the keyword 'covariant'.",
+  );
+
+  static const ParserErrorCode COVARIANT_MEMBER = ParserErrorCode(
+    'COVARIANT_MEMBER',
+    "Getters, setters and methods can't be declared to be 'covariant'.",
+    correctionMessage: "Try removing the 'covariant' keyword.",
+  );
+
+  static const ParserErrorCode COVARIANT_TOP_LEVEL_DECLARATION =
+      ParserErrorCode(
+    'COVARIANT_TOP_LEVEL_DECLARATION',
+    "Top-level declarations can't be declared to be covariant.",
+    correctionMessage: "Try removing the keyword 'covariant'.",
+  );
+
+  /**
+   * No parameters.
+   */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a function type associated with
+  // a parameter includes optional parameters that have a default value. This
+  // isn't allowed because the default values of parameters aren't part of the
+  // function's type, and therefore including them doesn't provide any value.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the parameter `p` has a
+  // default value even though it's part of the type of the parameter `g`:
+  //
+  // ```dart
+  // void f(void Function([int p [!=!] 0]) g) {
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove the default value from the function-type's parameter:
+  //
+  // ```dart
+  // void f(void Function([int p]) g) {
+  // }
+  // ```
+  static const ParserErrorCode DEFAULT_VALUE_IN_FUNCTION_TYPE = ParserErrorCode(
+    'DEFAULT_VALUE_IN_FUNCTION_TYPE',
+    "Parameters in a function type can't have default values.",
+    correctionMessage: "Try removing the default value.",
+    hasPublishedDocs: true,
+  );
+
+  static const ParserErrorCode DEFERRED_AFTER_PREFIX = ParserErrorCode(
+    'DEFERRED_AFTER_PREFIX',
+    "The deferred keyword should come immediately before the prefix ('as' clause).",
+    correctionMessage: "Try moving the deferred keyword before the prefix.",
+  );
+
+  static const ParserErrorCode DIRECTIVE_AFTER_DECLARATION = ParserErrorCode(
+    'DIRECTIVE_AFTER_DECLARATION',
+    "Directives must appear before any declarations.",
+    correctionMessage: "Try moving the directive before any declarations.",
+  );
+
+  /**
+   * Parameters:
+   * 0: the modifier that was duplicated
+   */
+  static const ParserErrorCode DUPLICATED_MODIFIER = ParserErrorCode(
+    'DUPLICATED_MODIFIER',
+    "The modifier '{0}' was already specified.",
+    correctionMessage: "Try removing all but one occurrence of the modifier.",
+  );
+
+  static const ParserErrorCode DUPLICATE_DEFERRED = ParserErrorCode(
+    'DUPLICATE_DEFERRED',
+    "An import directive can only have one 'deferred' keyword.",
+    correctionMessage: "Try removing all but one 'deferred' keyword.",
+  );
+
+  /**
+   * Parameters:
+   * 0: the label that was duplicated
+   */
+  static const ParserErrorCode DUPLICATE_LABEL_IN_SWITCH_STATEMENT =
+      ParserErrorCode(
+    'DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
+    "The label '{0}' was already used in this switch statement.",
+    correctionMessage: "Try choosing a different name for this label.",
+  );
+
+  static const ParserErrorCode DUPLICATE_PREFIX = ParserErrorCode(
+    'DUPLICATE_PREFIX',
+    "An import directive can only have one prefix ('as' clause).",
+    correctionMessage: "Try removing all but one prefix.",
+  );
+
+  static const ParserErrorCode EMPTY_ENUM_BODY = ParserErrorCode(
+    'EMPTY_ENUM_BODY',
+    "An enum must declare at least one constant name.",
+    correctionMessage: "Try declaring a constant.",
+  );
+
+  static const ParserErrorCode ENUM_IN_CLASS = ParserErrorCode(
+    'ENUM_IN_CLASS',
+    "Enums can't be declared inside classes.",
+    correctionMessage: "Try moving the enum to the top-level.",
+  );
+
+  static const ParserErrorCode EQUALITY_CANNOT_BE_EQUALITY_OPERAND =
+      ParserErrorCode(
+    'EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
+    "A comparison expression can't be an operand of another comparison expression.",
+    correctionMessage: "Try putting parentheses around one of the comparisons.",
+  );
+
+  static const ParserErrorCode EXPECTED_BODY = ParserErrorCode(
+    'EXPECTED_BODY',
+    "A {0} must have a body, even if it is empty.",
+    correctionMessage: "Try adding an empty body.",
+  );
+
+  static const ParserErrorCode EXPECTED_CASE_OR_DEFAULT = ParserErrorCode(
+    'EXPECTED_CASE_OR_DEFAULT',
+    "Expected 'case' or 'default'.",
+    correctionMessage: "Try placing this code inside a case clause.",
+  );
+
+  static const ParserErrorCode EXPECTED_CLASS_MEMBER = ParserErrorCode(
+    'EXPECTED_CLASS_MEMBER',
+    "Expected a class member.",
+    correctionMessage: "Try placing this code inside a class member.",
+  );
+
+  static const ParserErrorCode EXPECTED_ELSE_OR_COMMA = ParserErrorCode(
+    'EXPECTED_ELSE_OR_COMMA',
+    "Expected 'else' or comma.",
+  );
+
+  static const ParserErrorCode EXPECTED_EXECUTABLE = ParserErrorCode(
+    'EXPECTED_EXECUTABLE',
+    "Expected a method, getter, setter or operator declaration.",
+    correctionMessage:
+        "This appears to be incomplete code. Try removing it or completing it.",
+  );
+
+  static const ParserErrorCode EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD =
+      ParserErrorCode(
+    'EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD',
+    "'{0}' can't be used as an identifier because it's a keyword.",
+    correctionMessage:
+        "Try renaming this to be an identifier that isn't a keyword.",
+  );
+
+  static const ParserErrorCode EXPECTED_INSTEAD = ParserErrorCode(
+    'EXPECTED_INSTEAD',
+    "Expected '{0}' instead of this.",
+  );
+
+  static const ParserErrorCode EXPECTED_LIST_OR_MAP_LITERAL = ParserErrorCode(
+    'EXPECTED_LIST_OR_MAP_LITERAL',
+    "Expected a list or map literal.",
+    correctionMessage:
+        "Try inserting a list or map literal, or remove the type arguments.",
+  );
+
+  static const ParserErrorCode EXPECTED_STRING_LITERAL = ParserErrorCode(
+    'EXPECTED_STRING_LITERAL',
+    "Expected a string literal.",
+  );
+
+  /**
+   * Parameters:
+   * 0: the token that was expected but not found
+   */
+  static const ParserErrorCode EXPECTED_TOKEN = ParserErrorCode(
+    'EXPECTED_TOKEN',
+    "Expected to find '{0}'.",
+  );
+
+  static const ParserErrorCode EXPECTED_TYPE_NAME = ParserErrorCode(
+    'EXPECTED_TYPE_NAME',
+    "Expected a type name.",
+  );
+
+  static const ParserErrorCode EXPERIMENT_NOT_ENABLED = ParserErrorCode(
+    'EXPERIMENT_NOT_ENABLED',
+    "This requires the '{0}' language feature to be enabled.",
+    correctionMessage:
+        "Try updating your pubspec.yaml to set the minimum SDK constraint to {1} or higher, and running 'pub get'.",
+  );
+
+  static const ParserErrorCode EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
+      ParserErrorCode(
+    'EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+    "Export directives must precede part directives.",
+    correctionMessage:
+        "Try moving the export directives before the part directives.",
+  );
+
+  /**
+   * No parameters.
+   */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an abstract declaration is
+  // declared in an extension. Extensions can declare only concrete members.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the method `a` doesn't
+  // have a body:
+  //
+  // ```dart
+  // extension E on String {
+  //   int [!a!]();
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Either provide an implementation for the member or remove it.
+  static const ParserErrorCode EXTENSION_DECLARES_ABSTRACT_MEMBER =
+      ParserErrorCode(
+    'EXTENSION_DECLARES_ABSTRACT_MEMBER',
+    "Extensions can't declare abstract members.",
+    correctionMessage: "Try providing an implementation for the member.",
+    hasPublishedDocs: true,
+  );
+
+  /**
+   * No parameters.
+   */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a constructor declaration is
+  // found in an extension. It isn't valid to define a constructor because
+  // extensions aren't classes, and it isn't possible to create an instance of
+  // an extension.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because there is a constructor
+  // declaration in `E`:
+  //
+  // ```dart
+  // extension E on String {
+  //   [!E!]() : super();
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove the constructor or replace it with a static method.
+  static const ParserErrorCode EXTENSION_DECLARES_CONSTRUCTOR = ParserErrorCode(
+    'EXTENSION_DECLARES_CONSTRUCTOR',
+    "Extensions can't declare constructors.",
+    correctionMessage: "Try removing the constructor declaration.",
+    hasPublishedDocs: true,
+  );
+
+  /**
+   * No parameters.
+   */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an instance field declaration is
+  // found in an extension. It isn't valid to define an instance field because
+  // extensions can only add behavior, not state.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because `s` is an instance
+  // field:
+  //
+  // ```dart
+  // %language=2.9
+  // extension E on String {
+  //   String [!s!];
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove the field, make it a static field, or convert it to be a getter,
+  // setter, or method.
+  static const ParserErrorCode EXTENSION_DECLARES_INSTANCE_FIELD =
+      ParserErrorCode(
+    'EXTENSION_DECLARES_INSTANCE_FIELD',
+    "Extensions can't declare instance fields",
+    correctionMessage:
+        "Try removing the field declaration or making it a static field",
+    hasPublishedDocs: true,
+  );
+
+  static const ParserErrorCode EXTERNAL_CLASS = ParserErrorCode(
+    'EXTERNAL_CLASS',
+    "Classes can't be declared to be 'external'.",
+    correctionMessage: "Try removing the keyword 'external'.",
+  );
+
+  static const ParserErrorCode EXTERNAL_CONSTRUCTOR_WITH_BODY = ParserErrorCode(
+    'EXTERNAL_CONSTRUCTOR_WITH_BODY',
+    "External constructors can't have a body.",
+    correctionMessage:
+        "Try removing the body of the constructor, or removing the keyword 'external'.",
+  );
+
+  static const ParserErrorCode EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER =
+      ParserErrorCode(
+    'EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER',
+    "An external constructor can't have any initializers.",
+  );
+
+  static const ParserErrorCode EXTERNAL_ENUM = ParserErrorCode(
+    'EXTERNAL_ENUM',
+    "Enums can't be declared to be 'external'.",
+    correctionMessage: "Try removing the keyword 'external'.",
+  );
+
+  static const ParserErrorCode EXTERNAL_FACTORY_REDIRECTION = ParserErrorCode(
+    'EXTERNAL_FACTORY_REDIRECTION',
+    "A redirecting factory can't be external.",
+    correctionMessage: "Try removing the 'external' modifier.",
+  );
+
+  static const ParserErrorCode EXTERNAL_FACTORY_WITH_BODY = ParserErrorCode(
+    'EXTERNAL_FACTORY_WITH_BODY',
+    "External factories can't have a body.",
+    correctionMessage:
+        "Try removing the body of the factory, or removing the keyword 'external'.",
+  );
+
+  static const ParserErrorCode EXTERNAL_FIELD = ParserErrorCode(
+    'EXTERNAL_FIELD',
+    "Fields can't be declared to be 'external'.",
+    correctionMessage:
+        "Try removing the keyword 'external', or replacing the field by an external getter and/or setter.",
+  );
+
+  static const ParserErrorCode EXTERNAL_GETTER_WITH_BODY = ParserErrorCode(
+    'EXTERNAL_GETTER_WITH_BODY',
+    "External getters can't have a body.",
+    correctionMessage:
+        "Try removing the body of the getter, or removing the keyword 'external'.",
+  );
+
+  static const ParserErrorCode EXTERNAL_LATE_FIELD = ParserErrorCode(
+    'EXTERNAL_LATE_FIELD',
+    "External fields cannot be late.",
+    correctionMessage: "Try removing the 'external' or 'late' keyword.",
+  );
+
+  static const ParserErrorCode EXTERNAL_METHOD_WITH_BODY = ParserErrorCode(
+    'EXTERNAL_METHOD_WITH_BODY',
+    "An external or native method can't have a body.",
+  );
+
+  static const ParserErrorCode EXTERNAL_OPERATOR_WITH_BODY = ParserErrorCode(
+    'EXTERNAL_OPERATOR_WITH_BODY',
+    "External operators can't have a body.",
+    correctionMessage:
+        "Try removing the body of the operator, or removing the keyword 'external'.",
+  );
+
+  static const ParserErrorCode EXTERNAL_SETTER_WITH_BODY = ParserErrorCode(
+    'EXTERNAL_SETTER_WITH_BODY',
+    "External setters can't have a body.",
+    correctionMessage:
+        "Try removing the body of the setter, or removing the keyword 'external'.",
+  );
+
+  static const ParserErrorCode EXTERNAL_TYPEDEF = ParserErrorCode(
+    'EXTERNAL_TYPEDEF',
+    "Typedefs can't be declared to be 'external'.",
+    correctionMessage: "Try removing the keyword 'external'.",
+  );
+
+  static const ParserErrorCode EXTRANEOUS_MODIFIER = ParserErrorCode(
+    'EXTRANEOUS_MODIFIER',
+    "Can't have modifier '{0}' here.",
+    correctionMessage: "Try removing '{0}'.",
+  );
+
+  static const ParserErrorCode FACTORY_TOP_LEVEL_DECLARATION = ParserErrorCode(
+    'FACTORY_TOP_LEVEL_DECLARATION',
+    "Top-level declarations can't be declared to be 'factory'.",
+    correctionMessage: "Try removing the keyword 'factory'.",
+  );
+
+  static const ParserErrorCode FACTORY_WITHOUT_BODY = ParserErrorCode(
+    'FACTORY_WITHOUT_BODY',
+    "A non-redirecting 'factory' constructor must have a body.",
+    correctionMessage: "Try adding a body to the constructor.",
+  );
+
+  static const ParserErrorCode FACTORY_WITH_INITIALIZERS = ParserErrorCode(
+    'FACTORY_WITH_INITIALIZERS',
+    "A 'factory' constructor can't have initializers.",
+    correctionMessage:
+        "Try removing the 'factory' keyword to make this a generative constructor, or removing the initializers.",
+  );
+
+  static const ParserErrorCode FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS =
+      ParserErrorCode(
+    'FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS',
+    "A field can only be initialized in its declaring class",
+    correctionMessage:
+        "Try passing a value into the superclass constructor, or moving the initialization into the constructor body.",
+  );
+
+  static const ParserErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR =
+      ParserErrorCode(
+    'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
+    "Field formal parameters can only be used in a constructor.",
+    correctionMessage: "Try removing 'this.'.",
+  );
+
+  static const ParserErrorCode FINAL_AND_COVARIANT = ParserErrorCode(
+    'FINAL_AND_COVARIANT',
+    "Members can't be declared to be both 'final' and 'covariant'.",
+    correctionMessage:
+        "Try removing either the 'final' or 'covariant' keyword.",
+  );
+
+  static const ParserErrorCode FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER =
+      ParserErrorCode(
+    'FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER',
+    "Members marked 'late' with an initializer can't be declared to be both 'final' and 'covariant'.",
+    correctionMessage:
+        "Try removing either the 'final' or 'covariant' keyword, or removing the initializer.",
+  );
+
+  static const ParserErrorCode FINAL_AND_VAR = ParserErrorCode(
+    'FINAL_AND_VAR',
+    "Members can't be declared to be both 'final' and 'var'.",
+    correctionMessage: "Try removing the keyword 'var'.",
+  );
+
+  static const ParserErrorCode FINAL_CLASS = ParserErrorCode(
+    'FINAL_CLASS',
+    "Classes can't be declared to be 'final'.",
+    correctionMessage: "Try removing the keyword 'final'.",
+  );
+
+  static const ParserErrorCode FINAL_CONSTRUCTOR = ParserErrorCode(
+    'FINAL_CONSTRUCTOR',
+    "A constructor can't be declared to be 'final'.",
+    correctionMessage: "Try removing the keyword 'final'.",
+  );
+
+  static const ParserErrorCode FINAL_ENUM = ParserErrorCode(
+    'FINAL_ENUM',
+    "Enums can't be declared to be 'final'.",
+    correctionMessage: "Try removing the keyword 'final'.",
+  );
+
+  static const ParserErrorCode FINAL_METHOD = ParserErrorCode(
+    'FINAL_METHOD',
+    "Getters, setters and methods can't be declared to be 'final'.",
+    correctionMessage: "Try removing the keyword 'final'.",
+  );
+
+  static const ParserErrorCode FINAL_TYPEDEF = ParserErrorCode(
+    'FINAL_TYPEDEF',
+    "Typedefs can't be declared to be 'final'.",
+    correctionMessage: "Try removing the keyword 'final'.",
+  );
+
+  static const ParserErrorCode FUNCTION_TYPED_PARAMETER_VAR = ParserErrorCode(
+    'FUNCTION_TYPED_PARAMETER_VAR',
+    "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type.",
+    correctionMessage: "Try replacing the keyword with a return type.",
+  );
+
+  static const ParserErrorCode GETTER_CONSTRUCTOR = ParserErrorCode(
+    'GETTER_CONSTRUCTOR',
+    "Constructors can't be a getter.",
+    correctionMessage: "Try removing 'get'.",
+  );
+
+  static const ParserErrorCode GETTER_IN_FUNCTION = ParserErrorCode(
+    'GETTER_IN_FUNCTION',
+    "Getters can't be defined within methods or functions.",
+    correctionMessage:
+        "Try moving the getter outside the method or function, or converting the getter to a function.",
+  );
+
+  static const ParserErrorCode GETTER_WITH_PARAMETERS = ParserErrorCode(
+    'GETTER_WITH_PARAMETERS',
+    "Getters must be declared without a parameter list.",
+    correctionMessage:
+        "Try removing the parameter list, or removing the keyword 'get' to define a method rather than a getter.",
+  );
+
+  static const ParserErrorCode ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE =
+      ParserErrorCode(
+    'ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE',
+    "Illegal assignment to non-assignable expression.",
+  );
+
+  static const ParserErrorCode IMPLEMENTS_BEFORE_EXTENDS = ParserErrorCode(
+    'IMPLEMENTS_BEFORE_EXTENDS',
+    "The extends clause must be before the implements clause.",
+    correctionMessage:
+        "Try moving the extends clause before the implements clause.",
+  );
+
+  static const ParserErrorCode IMPLEMENTS_BEFORE_ON = ParserErrorCode(
+    'IMPLEMENTS_BEFORE_ON',
+    "The on clause must be before the implements clause.",
+    correctionMessage: "Try moving the on clause before the implements clause.",
+  );
+
+  static const ParserErrorCode IMPLEMENTS_BEFORE_WITH = ParserErrorCode(
+    'IMPLEMENTS_BEFORE_WITH',
+    "The with clause must be before the implements clause.",
+    correctionMessage:
+        "Try moving the with clause before the implements clause.",
+  );
+
+  static const ParserErrorCode IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
+      ParserErrorCode(
+    'IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+    "Import directives must precede part directives.",
+    correctionMessage:
+        "Try moving the import directives before the part directives.",
+  );
+
+  static const ParserErrorCode INITIALIZED_VARIABLE_IN_FOR_EACH =
+      ParserErrorCode(
+    'INITIALIZED_VARIABLE_IN_FOR_EACH',
+    "The loop variable in a for-each loop can't be initialized.",
+    correctionMessage:
+        "Try removing the initializer, or using a different kind of loop.",
+  );
+
+  static const ParserErrorCode INVALID_AWAIT_IN_FOR = ParserErrorCode(
+    'INVALID_AWAIT_IN_FOR',
+    "The keyword 'await' isn't allowed for a normal 'for' statement.",
+    correctionMessage: "Try removing the keyword, or use a for-each statement.",
+  );
+
+  /**
+   * Parameters:
+   * 0: the invalid escape sequence
+   */
+  static const ParserErrorCode INVALID_CODE_POINT = ParserErrorCode(
+    'INVALID_CODE_POINT',
+    "The escape sequence '{0}' isn't a valid code point.",
+  );
+
+  static const ParserErrorCode INVALID_COMMENT_REFERENCE = ParserErrorCode(
+    'INVALID_COMMENT_REFERENCE',
+    "Comment references should contain a possibly prefixed identifier and can start with 'new', but shouldn't contain anything else.",
+  );
+
+  static const ParserErrorCode INVALID_CONSTRUCTOR_NAME = ParserErrorCode(
+    'INVALID_CONSTRUCTOR_NAME',
+    "The name of a constructor must match the name of the enclosing class.",
+  );
+
+  static const ParserErrorCode INVALID_GENERIC_FUNCTION_TYPE = ParserErrorCode(
+    'INVALID_GENERIC_FUNCTION_TYPE',
+    "Invalid generic function type.",
+    correctionMessage:
+        "Try using a generic function type (returnType 'Function(' parameters ')').",
+  );
+
+  static const ParserErrorCode INVALID_HEX_ESCAPE = ParserErrorCode(
+    'INVALID_HEX_ESCAPE',
+    "An escape sequence starting with '\\x' must be followed by 2 hexadecimal digits.",
+  );
+
+  static const ParserErrorCode INVALID_INITIALIZER = ParserErrorCode(
+    'INVALID_INITIALIZER',
+    "Not a valid initializer.",
+    correctionMessage: "To initialize a field, use the syntax 'name = value'.",
+  );
+
+  static const ParserErrorCode INVALID_LITERAL_IN_CONFIGURATION =
+      ParserErrorCode(
+    'INVALID_LITERAL_IN_CONFIGURATION',
+    "The literal in a configuration can't contain interpolation.",
+    correctionMessage: "Try removing the interpolation expressions.",
+  );
+
+  /**
+   * Parameters:
+   * 0: the operator that is invalid
+   */
+  static const ParserErrorCode INVALID_OPERATOR = ParserErrorCode(
+    'INVALID_OPERATOR',
+    "The string '{0}' isn't a user-definable operator.",
+  );
+
+  /**
+   * Parameters:
+   * 0: the operator being applied to 'super'
+   *
+   * Only generated by the old parser.
+   * Replaced by INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER.
+   */
+  static const ParserErrorCode INVALID_OPERATOR_FOR_SUPER = ParserErrorCode(
+    'INVALID_OPERATOR_FOR_SUPER',
+    "The operator '{0}' can't be used with 'super'.",
+  );
+
+  static const ParserErrorCode INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER =
+      ParserErrorCode(
+    'INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER',
+    "The operator '?.' cannot be used with 'super' because 'super' cannot be null.",
+    correctionMessage: "Try replacing '?.' with '.'",
+  );
+
+  static const ParserErrorCode INVALID_STAR_AFTER_ASYNC = ParserErrorCode(
+    'INVALID_STAR_AFTER_ASYNC',
+    "The modifier 'async*' isn't allowed for an expression function body.",
+    correctionMessage: "Try converting the body to a block.",
+  );
+
+  static const ParserErrorCode INVALID_SUPER_IN_INITIALIZER = ParserErrorCode(
+    'INVALID_SUPER_IN_INITIALIZER',
+    "Can only use 'super' in an initializer for calling the superclass constructor (e.g. 'super()' or 'super.namedConstructor()')",
+  );
+
+  static const ParserErrorCode INVALID_SYNC = ParserErrorCode(
+    'INVALID_SYNC',
+    "The modifier 'sync' isn't allowed for an expression function body.",
+    correctionMessage: "Try converting the body to a block.",
+  );
+
+  static const ParserErrorCode INVALID_THIS_IN_INITIALIZER = ParserErrorCode(
+    'INVALID_THIS_IN_INITIALIZER',
+    "Can only use 'this' in an initializer for field initialization (e.g. 'this.x = something') and constructor redirection (e.g. 'this()' or 'this.namedConstructor())",
+  );
+
+  static const ParserErrorCode INVALID_UNICODE_ESCAPE = ParserErrorCode(
+    'INVALID_UNICODE_ESCAPE',
+    "An escape sequence starting with '\\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.",
+  );
+
+  /**
+   * No parameters.
+   */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a member declared inside an
+  // extension uses the keyword `covariant` in the declaration of a parameter.
+  // Extensions aren't classes and don't have subclasses, so the keyword serves
+  // no purpose.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because `i` is marked as being
+  // covariant:
+  //
+  // ```dart
+  // extension E on String {
+  //   void a([!covariant!] int i) {}
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove the `covariant` keyword:
+  //
+  // ```dart
+  // extension E on String {
+  //   void a(int i) {}
+  // }
+  // ```
+  static const ParserErrorCode INVALID_USE_OF_COVARIANT_IN_EXTENSION =
+      ParserErrorCode(
+    'INVALID_USE_OF_COVARIANT_IN_EXTENSION',
+    "Can't have modifier '{0}' in an extension.",
+    correctionMessage: "Try removing '{0}'.",
+    hasPublishedDocs: true,
+  );
+
+  static const ParserErrorCode LIBRARY_DIRECTIVE_NOT_FIRST = ParserErrorCode(
+    'LIBRARY_DIRECTIVE_NOT_FIRST',
+    "The library directive must appear before all other directives.",
+    correctionMessage:
+        "Try moving the library directive before any other directives.",
+  );
+
+  static const ParserErrorCode LITERAL_WITH_CLASS = ParserErrorCode(
+    'LITERAL_WITH_CLASS',
+    "A {0} literal can't be prefixed by '{1}'.",
+    correctionMessage: "Try removing '{1}'",
+  );
 
-const ParserErrorCode _DUPLICATE_DEFERRED = ParserErrorCode(
-  'DUPLICATE_DEFERRED',
-  "An import directive can only have one 'deferred' keyword.",
-  correction: "Try removing all but one 'deferred' keyword.",
-);
+  static const ParserErrorCode LITERAL_WITH_CLASS_AND_NEW = ParserErrorCode(
+    'LITERAL_WITH_CLASS_AND_NEW',
+    "A {0} literal can't be prefixed by 'new {1}'.",
+    correctionMessage: "Try removing 'new' and '{1}'",
+  );
 
-const ParserErrorCode _DUPLICATE_LABEL_IN_SWITCH_STATEMENT = ParserErrorCode(
-  'DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
-  "The label '{0}' was already used in this switch statement.",
-  correction: "Try choosing a different name for this label.",
-);
+  static const ParserErrorCode LITERAL_WITH_NEW = ParserErrorCode(
+    'LITERAL_WITH_NEW',
+    "A literal can't be prefixed by 'new'.",
+    correctionMessage: "Try removing 'new'",
+  );
 
-const ParserErrorCode _DUPLICATE_PREFIX = ParserErrorCode(
-  'DUPLICATE_PREFIX',
-  "An import directive can only have one prefix ('as' clause).",
-  correction: "Try removing all but one prefix.",
-);
+  static const ParserErrorCode LOCAL_FUNCTION_DECLARATION_MODIFIER =
+      ParserErrorCode(
+    'LOCAL_FUNCTION_DECLARATION_MODIFIER',
+    "Local function declarations can't specify any modifiers.",
+    correctionMessage: "Try removing the modifier.",
+  );
 
-const ParserErrorCode _ENUM_IN_CLASS = ParserErrorCode(
-  'ENUM_IN_CLASS',
-  "Enums can't be declared inside classes.",
-  correction: "Try moving the enum to the top-level.",
-);
+  static const ParserErrorCode MEMBER_WITH_CLASS_NAME = ParserErrorCode(
+    'MEMBER_WITH_CLASS_NAME',
+    "A class member can't have the same name as the enclosing class.",
+    correctionMessage: "Try renaming the member.",
+  );
 
-const ParserErrorCode _EQUALITY_CANNOT_BE_EQUALITY_OPERAND = ParserErrorCode(
-  'EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
-  "A comparison expression can't be an operand of another comparison expression.",
-  correction: "Try putting parentheses around one of the comparisons.",
-);
+  static const ParserErrorCode MISSING_ASSIGNABLE_SELECTOR = ParserErrorCode(
+    'MISSING_ASSIGNABLE_SELECTOR',
+    "Missing selector such as '.identifier' or '[0]'.",
+    correctionMessage: "Try adding a selector.",
+  );
 
-const ParserErrorCode _EXPECTED_BODY = ParserErrorCode(
-  'EXPECTED_BODY',
-  "A {0} must have a body, even if it is empty.",
-  correction: "Try adding an empty body.",
-);
+  static const ParserErrorCode MISSING_ASSIGNMENT_IN_INITIALIZER =
+      ParserErrorCode(
+    'MISSING_ASSIGNMENT_IN_INITIALIZER',
+    "Expected an assignment after the field name.",
+    correctionMessage: "To initialize a field, use the syntax 'name = value'.",
+  );
 
-const ParserErrorCode _EXPECTED_ELSE_OR_COMMA = ParserErrorCode(
-  'EXPECTED_ELSE_OR_COMMA',
-  "Expected 'else' or comma.",
-);
+  static const ParserErrorCode MISSING_CATCH_OR_FINALLY = ParserErrorCode(
+    'MISSING_CATCH_OR_FINALLY',
+    "A try block must be followed by an 'on', 'catch', or 'finally' clause.",
+    correctionMessage:
+        "Try adding either a catch or finally clause, or remove the try statement.",
+  );
 
-const ParserErrorCode _EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD = ParserErrorCode(
-  'EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD',
-  "'{0}' can't be used as an identifier because it's a keyword.",
-  correction: "Try renaming this to be an identifier that isn't a keyword.",
-);
+  static const ParserErrorCode MISSING_CLOSING_PARENTHESIS = ParserErrorCode(
+    'MISSING_CLOSING_PARENTHESIS',
+    "The closing parenthesis is missing.",
+    correctionMessage: "Try adding the closing parenthesis.",
+  );
 
-const ParserErrorCode _EXPECTED_INSTEAD = ParserErrorCode(
-  'EXPECTED_INSTEAD',
-  "Expected '{0}' instead of this.",
-);
+  static const ParserErrorCode MISSING_CONST_FINAL_VAR_OR_TYPE =
+      ParserErrorCode(
+    'MISSING_CONST_FINAL_VAR_OR_TYPE',
+    "Variables must be declared using the keywords 'const', 'final', 'var' or a type name.",
+    correctionMessage:
+        "Try adding the name of the type of the variable or the keyword 'var'.",
+  );
 
-const ParserErrorCode _EXPERIMENT_NOT_ENABLED = ParserErrorCode(
-  'EXPERIMENT_NOT_ENABLED',
-  "This requires the '{0}' language feature to be enabled.",
-  correction:
-      "Try updating your pubspec.yaml to set the minimum SDK constraint to {1} or higher, and running 'pub get'.",
-);
+  static const ParserErrorCode MISSING_ENUM_BODY = ParserErrorCode(
+    'MISSING_ENUM_BODY',
+    "An enum definition must have a body with at least one constant name.",
+    correctionMessage: "Try adding a body and defining at least one constant.",
+  );
 
-const ParserErrorCode _EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE = ParserErrorCode(
-  'EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
-  "Export directives must precede part directives.",
-  correction: "Try moving the export directives before the part directives.",
-);
+  static const ParserErrorCode MISSING_EXPRESSION_IN_INITIALIZER =
+      ParserErrorCode(
+    'MISSING_EXPRESSION_IN_INITIALIZER',
+    "Expected an expression after the assignment operator.",
+    correctionMessage:
+        "Try adding the value to be assigned, or remove the assignment operator.",
+  );
 
-const ParserErrorCode _EXTENSION_DECLARES_ABSTRACT_MEMBER = ParserErrorCode(
-  'EXTENSION_DECLARES_ABSTRACT_MEMBER',
-  "Extensions can't declare abstract members.",
-  correction: "Try providing an implementation for the member.",
-  hasPublishedDocs: true,
-);
+  static const ParserErrorCode MISSING_EXPRESSION_IN_THROW = ParserErrorCode(
+    'MISSING_EXPRESSION_IN_THROW',
+    "Missing expression after 'throw'.",
+    correctionMessage:
+        "Add an expression after 'throw' or use 'rethrow' to throw a caught exception",
+  );
 
-const ParserErrorCode _EXTENSION_DECLARES_CONSTRUCTOR = ParserErrorCode(
-  'EXTENSION_DECLARES_CONSTRUCTOR',
-  "Extensions can't declare constructors.",
-  correction: "Try removing the constructor declaration.",
-  hasPublishedDocs: true,
-);
+  static const ParserErrorCode MISSING_FUNCTION_BODY = ParserErrorCode(
+    'MISSING_FUNCTION_BODY',
+    "A function body must be provided.",
+    correctionMessage: "Try adding a function body.",
+  );
 
-const ParserErrorCode _EXTENSION_DECLARES_INSTANCE_FIELD = ParserErrorCode(
-  'EXTENSION_DECLARES_INSTANCE_FIELD',
-  "Extensions can't declare instance fields",
-  correction: "Try removing the field declaration or making it a static field",
-  hasPublishedDocs: true,
-);
+  static const ParserErrorCode MISSING_FUNCTION_KEYWORD = ParserErrorCode(
+    'MISSING_FUNCTION_KEYWORD',
+    "Function types must have the keyword 'Function' before the parameter list.",
+    correctionMessage: "Try adding the keyword 'Function'.",
+  );
 
-const ParserErrorCode _EXTERNAL_CLASS = ParserErrorCode(
-  'EXTERNAL_CLASS',
-  "Classes can't be declared to be 'external'.",
-  correction: "Try removing the keyword 'external'.",
-);
+  static const ParserErrorCode MISSING_FUNCTION_PARAMETERS = ParserErrorCode(
+    'MISSING_FUNCTION_PARAMETERS',
+    "Functions must have an explicit list of parameters.",
+    correctionMessage: "Try adding a parameter list.",
+  );
 
-const ParserErrorCode _EXTERNAL_CONSTRUCTOR_WITH_BODY = ParserErrorCode(
-  'EXTERNAL_CONSTRUCTOR_WITH_BODY',
-  "External constructors can't have a body.",
-  correction:
-      "Try removing the body of the constructor, or removing the keyword 'external'.",
-);
+  static const ParserErrorCode MISSING_GET = ParserErrorCode(
+    'MISSING_GET',
+    "Getters must have the keyword 'get' before the getter name.",
+    correctionMessage: "Try adding the keyword 'get'.",
+  );
 
-const ParserErrorCode _EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER = ParserErrorCode(
-  'EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER',
-  "An external constructor can't have any initializers.",
-);
+  static const ParserErrorCode MISSING_IDENTIFIER = ParserErrorCode(
+    'MISSING_IDENTIFIER',
+    "Expected an identifier.",
+  );
 
-const ParserErrorCode _EXTERNAL_ENUM = ParserErrorCode(
-  'EXTERNAL_ENUM',
-  "Enums can't be declared to be 'external'.",
-  correction: "Try removing the keyword 'external'.",
-);
+  static const ParserErrorCode MISSING_INITIALIZER = ParserErrorCode(
+    'MISSING_INITIALIZER',
+    "Expected an initializer.",
+  );
 
-const ParserErrorCode _EXTERNAL_FACTORY_REDIRECTION = ParserErrorCode(
-  'EXTERNAL_FACTORY_REDIRECTION',
-  "A redirecting factory can't be external.",
-  correction: "Try removing the 'external' modifier.",
-);
+  static const ParserErrorCode MISSING_KEYWORD_OPERATOR = ParserErrorCode(
+    'MISSING_KEYWORD_OPERATOR',
+    "Operator declarations must be preceded by the keyword 'operator'.",
+    correctionMessage: "Try adding the keyword 'operator'.",
+  );
 
-const ParserErrorCode _EXTERNAL_FACTORY_WITH_BODY = ParserErrorCode(
-  'EXTERNAL_FACTORY_WITH_BODY',
-  "External factories can't have a body.",
-  correction:
-      "Try removing the body of the factory, or removing the keyword 'external'.",
-);
+  static const ParserErrorCode MISSING_METHOD_PARAMETERS = ParserErrorCode(
+    'MISSING_METHOD_PARAMETERS',
+    "Methods must have an explicit list of parameters.",
+    correctionMessage: "Try adding a parameter list.",
+  );
 
-const ParserErrorCode _EXTERNAL_FIELD = ParserErrorCode(
-  'EXTERNAL_FIELD',
-  "Fields can't be declared to be 'external'.",
-  correction:
-      "Try removing the keyword 'external', or replacing the field by an external getter and/or setter.",
-);
+  static const ParserErrorCode MISSING_NAME_FOR_NAMED_PARAMETER =
+      ParserErrorCode(
+    'MISSING_NAME_FOR_NAMED_PARAMETER',
+    "Named parameters in a function type must have a name",
+    correctionMessage:
+        "Try providing a name for the parameter or removing the curly braces.",
+  );
 
-const ParserErrorCode _EXTERNAL_LATE_FIELD = ParserErrorCode(
-  'EXTERNAL_LATE_FIELD',
-  "External fields cannot be late.",
-  correction: "Try removing the 'external' or 'late' keyword.",
-);
+  static const ParserErrorCode MISSING_NAME_IN_LIBRARY_DIRECTIVE =
+      ParserErrorCode(
+    'MISSING_NAME_IN_LIBRARY_DIRECTIVE',
+    "Library directives must include a library name.",
+    correctionMessage:
+        "Try adding a library name after the keyword 'library', or remove the library directive if the library doesn't have any parts.",
+  );
 
-const ParserErrorCode _EXTERNAL_METHOD_WITH_BODY = ParserErrorCode(
-  'EXTERNAL_METHOD_WITH_BODY',
-  "An external or native method can't have a body.",
-);
+  static const ParserErrorCode MISSING_NAME_IN_PART_OF_DIRECTIVE =
+      ParserErrorCode(
+    'MISSING_NAME_IN_PART_OF_DIRECTIVE',
+    "Part-of directives must include a library name.",
+    correctionMessage: "Try adding a library name after the 'of'.",
+  );
 
-const ParserErrorCode _EXTERNAL_TYPEDEF = ParserErrorCode(
-  'EXTERNAL_TYPEDEF',
-  "Typedefs can't be declared to be 'external'.",
-  correction: "Try removing the keyword 'external'.",
-);
+  static const ParserErrorCode MISSING_PREFIX_IN_DEFERRED_IMPORT =
+      ParserErrorCode(
+    'MISSING_PREFIX_IN_DEFERRED_IMPORT',
+    "Deferred imports should have a prefix.",
+    correctionMessage:
+        "Try adding a prefix to the import by adding an 'as' clause.",
+  );
 
-const ParserErrorCode _EXTRANEOUS_MODIFIER = ParserErrorCode(
-  'EXTRANEOUS_MODIFIER',
-  "Can't have modifier '{0}' here.",
-  correction: "Try removing '{0}'.",
-);
+  static const ParserErrorCode MISSING_STAR_AFTER_SYNC = ParserErrorCode(
+    'MISSING_STAR_AFTER_SYNC',
+    "The modifier 'sync' must be followed by a star ('*').",
+    correctionMessage: "Try removing the modifier, or add a star.",
+  );
 
-const ParserErrorCode _FACTORY_TOP_LEVEL_DECLARATION = ParserErrorCode(
-  'FACTORY_TOP_LEVEL_DECLARATION',
-  "Top-level declarations can't be declared to be 'factory'.",
-  correction: "Try removing the keyword 'factory'.",
-);
+  static const ParserErrorCode MISSING_STATEMENT = ParserErrorCode(
+    'MISSING_STATEMENT',
+    "Expected a statement.",
+  );
 
-const ParserErrorCode _FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS =
-    ParserErrorCode(
-  'FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS',
-  "A field can only be initialized in its declaring class",
-  correction:
-      "Try passing a value into the superclass constructor, or moving the initialization into the constructor body.",
-);
+  /**
+   * Parameters:
+   * 0: the terminator that is missing
+   */
+  static const ParserErrorCode MISSING_TERMINATOR_FOR_PARAMETER_GROUP =
+      ParserErrorCode(
+    'MISSING_TERMINATOR_FOR_PARAMETER_GROUP',
+    "There is no '{0}' to close the parameter group.",
+    correctionMessage: "Try inserting a '{0}' at the end of the group.",
+  );
 
-const ParserErrorCode _FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR = ParserErrorCode(
-  'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
-  "Field formal parameters can only be used in a constructor.",
-  correction: "Try removing 'this.'.",
-);
+  static const ParserErrorCode MISSING_TYPEDEF_PARAMETERS = ParserErrorCode(
+    'MISSING_TYPEDEF_PARAMETERS',
+    "Typedefs must have an explicit list of parameters.",
+    correctionMessage: "Try adding a parameter list.",
+  );
 
-const ParserErrorCode _FINAL_AND_COVARIANT = ParserErrorCode(
-  'FINAL_AND_COVARIANT',
-  "Members can't be declared to be both 'final' and 'covariant'.",
-  correction: "Try removing either the 'final' or 'covariant' keyword.",
-);
+  static const ParserErrorCode MISSING_VARIABLE_IN_FOR_EACH = ParserErrorCode(
+    'MISSING_VARIABLE_IN_FOR_EACH',
+    "A loop variable must be declared in a for-each loop before the 'in', but none was found.",
+    correctionMessage: "Try declaring a loop variable.",
+  );
 
-const ParserErrorCode _FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER =
-    ParserErrorCode(
-  'FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER',
-  "Members marked 'late' with an initializer can't be declared to be both 'final' and 'covariant'.",
-  correction:
-      "Try removing either the 'final' or 'covariant' keyword, or removing the initializer.",
-);
+  static const ParserErrorCode MIXED_PARAMETER_GROUPS = ParserErrorCode(
+    'MIXED_PARAMETER_GROUPS',
+    "Can't have both positional and named parameters in a single parameter list.",
+    correctionMessage: "Try choosing a single style of optional parameters.",
+  );
 
-const ParserErrorCode _FINAL_AND_VAR = ParserErrorCode(
-  'FINAL_AND_VAR',
-  "Members can't be declared to be both 'final' and 'var'.",
-  correction: "Try removing the keyword 'var'.",
-);
+  static const ParserErrorCode MIXIN_DECLARES_CONSTRUCTOR = ParserErrorCode(
+    'MIXIN_DECLARES_CONSTRUCTOR',
+    "Mixins can't declare constructors.",
+  );
 
-const ParserErrorCode _GETTER_CONSTRUCTOR = ParserErrorCode(
-  'GETTER_CONSTRUCTOR',
-  "Constructors can't be a getter.",
-  correction: "Try removing 'get'.",
-);
+  static const ParserErrorCode MODIFIER_OUT_OF_ORDER = ParserErrorCode(
+    'MODIFIER_OUT_OF_ORDER',
+    "The modifier '{0}' should be before the modifier '{1}'.",
+    correctionMessage: "Try re-ordering the modifiers.",
+  );
 
-const ParserErrorCode _ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE = ParserErrorCode(
-  'ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE',
-  "Illegal assignment to non-assignable expression.",
-);
+  static const ParserErrorCode MULTIPLE_EXTENDS_CLAUSES = ParserErrorCode(
+    'MULTIPLE_EXTENDS_CLAUSES',
+    "Each class definition can have at most one extends clause.",
+    correctionMessage:
+        "Try choosing one superclass and define your class to implement (or mix in) the others.",
+  );
 
-const ParserErrorCode _IMPLEMENTS_BEFORE_EXTENDS = ParserErrorCode(
-  'IMPLEMENTS_BEFORE_EXTENDS',
-  "The extends clause must be before the implements clause.",
-  correction: "Try moving the extends clause before the implements clause.",
-);
+  static const ParserErrorCode MULTIPLE_IMPLEMENTS_CLAUSES = ParserErrorCode(
+    'MULTIPLE_IMPLEMENTS_CLAUSES',
+    "Each class or mixin definition can have at most one implements clause.",
+    correctionMessage:
+        "Try combining all of the implements clauses into a single clause.",
+  );
 
-const ParserErrorCode _IMPLEMENTS_BEFORE_ON = ParserErrorCode(
-  'IMPLEMENTS_BEFORE_ON',
-  "The on clause must be before the implements clause.",
-  correction: "Try moving the on clause before the implements clause.",
-);
+  static const ParserErrorCode MULTIPLE_LIBRARY_DIRECTIVES = ParserErrorCode(
+    'MULTIPLE_LIBRARY_DIRECTIVES',
+    "Only one library directive may be declared in a file.",
+    correctionMessage: "Try removing all but one of the library directives.",
+  );
 
-const ParserErrorCode _IMPLEMENTS_BEFORE_WITH = ParserErrorCode(
-  'IMPLEMENTS_BEFORE_WITH',
-  "The with clause must be before the implements clause.",
-  correction: "Try moving the with clause before the implements clause.",
-);
+  static const ParserErrorCode MULTIPLE_NAMED_PARAMETER_GROUPS =
+      ParserErrorCode(
+    'MULTIPLE_NAMED_PARAMETER_GROUPS',
+    "Can't have multiple groups of named parameters in a single parameter list.",
+    correctionMessage: "Try combining all of the groups into a single group.",
+  );
 
-const ParserErrorCode _IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE = ParserErrorCode(
-  'IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
-  "Import directives must precede part directives.",
-  correction: "Try moving the import directives before the part directives.",
-);
+  static const ParserErrorCode MULTIPLE_ON_CLAUSES = ParserErrorCode(
+    'MULTIPLE_ON_CLAUSES',
+    "Each mixin definition can have at most one on clause.",
+    correctionMessage:
+        "Try combining all of the on clauses into a single clause.",
+  );
 
-const ParserErrorCode _INITIALIZED_VARIABLE_IN_FOR_EACH = ParserErrorCode(
-  'INITIALIZED_VARIABLE_IN_FOR_EACH',
-  "The loop variable in a for-each loop can't be initialized.",
-  correction:
-      "Try removing the initializer, or using a different kind of loop.",
-);
+  static const ParserErrorCode MULTIPLE_PART_OF_DIRECTIVES = ParserErrorCode(
+    'MULTIPLE_PART_OF_DIRECTIVES',
+    "Only one part-of directive may be declared in a file.",
+    correctionMessage: "Try removing all but one of the part-of directives.",
+  );
 
-const ParserErrorCode _INVALID_AWAIT_IN_FOR = ParserErrorCode(
-  'INVALID_AWAIT_IN_FOR',
-  "The keyword 'await' isn't allowed for a normal 'for' statement.",
-  correction: "Try removing the keyword, or use a for-each statement.",
-);
+  static const ParserErrorCode MULTIPLE_POSITIONAL_PARAMETER_GROUPS =
+      ParserErrorCode(
+    'MULTIPLE_POSITIONAL_PARAMETER_GROUPS',
+    "Can't have multiple groups of positional parameters in a single parameter list.",
+    correctionMessage: "Try combining all of the groups into a single group.",
+  );
 
-const ParserErrorCode _INVALID_CONSTRUCTOR_NAME = ParserErrorCode(
-  'INVALID_CONSTRUCTOR_NAME',
-  "The name of a constructor must match the name of the enclosing class.",
-);
+  /**
+   * Parameters:
+   * 0: the number of variables being declared
+   */
+  static const ParserErrorCode MULTIPLE_VARIABLES_IN_FOR_EACH = ParserErrorCode(
+    'MULTIPLE_VARIABLES_IN_FOR_EACH',
+    "A single loop variable must be declared in a for-each loop before the 'in', but {0} were found.",
+    correctionMessage:
+        "Try moving all but one of the declarations inside the loop body.",
+  );
 
-const ParserErrorCode _INVALID_HEX_ESCAPE = ParserErrorCode(
-  'INVALID_HEX_ESCAPE',
-  "An escape sequence starting with '\\x' must be followed by 2 hexadecimal digits.",
-);
+  static const ParserErrorCode MULTIPLE_VARIANCE_MODIFIERS = ParserErrorCode(
+    'MULTIPLE_VARIANCE_MODIFIERS',
+    "Each type parameter can have at most one variance modifier.",
+    correctionMessage:
+        "Use at most one of the 'in', 'out', or 'inout' modifiers.",
+  );
 
-const ParserErrorCode _INVALID_INITIALIZER = ParserErrorCode(
-  'INVALID_INITIALIZER',
-  "Not a valid initializer.",
-  correction: "To initialize a field, use the syntax 'name = value'.",
-);
+  static const ParserErrorCode MULTIPLE_WITH_CLAUSES = ParserErrorCode(
+    'MULTIPLE_WITH_CLAUSES',
+    "Each class definition can have at most one with clause.",
+    correctionMessage:
+        "Try combining all of the with clauses into a single clause.",
+  );
 
-const ParserErrorCode _INVALID_OPERATOR = ParserErrorCode(
-  'INVALID_OPERATOR',
-  "The string '{0}' isn't a user-definable operator.",
-);
+  static const ParserErrorCode NAMED_FUNCTION_EXPRESSION = ParserErrorCode(
+    'NAMED_FUNCTION_EXPRESSION',
+    "Function expressions can't be named.",
+    correctionMessage:
+        "Try removing the name, or moving the function expression to a function declaration statement.",
+  );
 
-const ParserErrorCode _INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER =
-    ParserErrorCode(
-  'INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER',
-  "The operator '?.' cannot be used with 'super' because 'super' cannot be null.",
-  correction: "Try replacing '?.' with '.'",
-);
+  static const ParserErrorCode NAMED_FUNCTION_TYPE = ParserErrorCode(
+    'NAMED_FUNCTION_TYPE',
+    "Function types can't be named.",
+    correctionMessage: "Try replacing the name with the keyword 'Function'.",
+  );
 
-const ParserErrorCode _INVALID_SUPER_IN_INITIALIZER = ParserErrorCode(
-  'INVALID_SUPER_IN_INITIALIZER',
-  "Can only use 'super' in an initializer for calling the superclass constructor (e.g. 'super()' or 'super.namedConstructor()')",
-);
+  static const ParserErrorCode NAMED_PARAMETER_OUTSIDE_GROUP = ParserErrorCode(
+    'NAMED_PARAMETER_OUTSIDE_GROUP',
+    "Named parameters must be enclosed in curly braces ('{' and '}').",
+    correctionMessage: "Try surrounding the named parameters in curly braces.",
+  );
 
-const ParserErrorCode _INVALID_THIS_IN_INITIALIZER = ParserErrorCode(
-  'INVALID_THIS_IN_INITIALIZER',
-  "Can only use 'this' in an initializer for field initialization (e.g. 'this.x = something') and constructor redirection (e.g. 'this()' or 'this.namedConstructor())",
-);
+  static const ParserErrorCode NATIVE_CLAUSE_IN_NON_SDK_CODE = ParserErrorCode(
+    'NATIVE_CLAUSE_IN_NON_SDK_CODE',
+    "Native clause can only be used in the SDK and code that is loaded through native extensions.",
+    correctionMessage: "Try removing the native clause.",
+  );
 
-const ParserErrorCode _INVALID_UNICODE_ESCAPE = ParserErrorCode(
-  'INVALID_UNICODE_ESCAPE',
-  "An escape sequence starting with '\\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.",
-);
+  static const ParserErrorCode NATIVE_CLAUSE_SHOULD_BE_ANNOTATION =
+      ParserErrorCode(
+    'NATIVE_CLAUSE_SHOULD_BE_ANNOTATION',
+    "Native clause in this form is deprecated.",
+    correctionMessage:
+        "Try removing this native clause and adding @native() or @native('native-name') before the declaration.",
+  );
 
-const ParserErrorCode _INVALID_USE_OF_COVARIANT_IN_EXTENSION = ParserErrorCode(
-  'INVALID_USE_OF_COVARIANT_IN_EXTENSION',
-  "Can't have modifier '{0}' in an extension.",
-  correction: "Try removing '{0}'.",
-  hasPublishedDocs: true,
-);
+  static const ParserErrorCode NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE =
+      ParserErrorCode(
+    'NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE',
+    "Native functions can only be declared in the SDK and code that is loaded through native extensions.",
+    correctionMessage: "Try removing the word 'native'.",
+  );
 
-const ParserErrorCode _LIBRARY_DIRECTIVE_NOT_FIRST = ParserErrorCode(
-  'LIBRARY_DIRECTIVE_NOT_FIRST',
-  "The library directive must appear before all other directives.",
-  correction: "Try moving the library directive before any other directives.",
-);
+  static const ParserErrorCode NON_CONSTRUCTOR_FACTORY = ParserErrorCode(
+    'NON_CONSTRUCTOR_FACTORY',
+    "Only a constructor can be declared to be a factory.",
+    correctionMessage: "Try removing the keyword 'factory'.",
+  );
 
-const ParserErrorCode _LITERAL_WITH_CLASS = ParserErrorCode(
-  'LITERAL_WITH_CLASS',
-  "A {0} literal can't be prefixed by '{1}'.",
-  correction: "Try removing '{1}'",
-);
+  static const ParserErrorCode NON_IDENTIFIER_LIBRARY_NAME = ParserErrorCode(
+    'NON_IDENTIFIER_LIBRARY_NAME',
+    "The name of a library must be an identifier.",
+    correctionMessage: "Try using an identifier as the name of the library.",
+  );
 
-const ParserErrorCode _LITERAL_WITH_CLASS_AND_NEW = ParserErrorCode(
-  'LITERAL_WITH_CLASS_AND_NEW',
-  "A {0} literal can't be prefixed by 'new {1}'.",
-  correction: "Try removing 'new' and '{1}'",
-);
+  static const ParserErrorCode NON_PART_OF_DIRECTIVE_IN_PART = ParserErrorCode(
+    'NON_PART_OF_DIRECTIVE_IN_PART',
+    "The part-of directive must be the only directive in a part.",
+    correctionMessage:
+        "Try removing the other directives, or moving them to the library for which this is a part.",
+  );
 
-const ParserErrorCode _LITERAL_WITH_NEW = ParserErrorCode(
-  'LITERAL_WITH_NEW',
-  "A literal can't be prefixed by 'new'.",
-  correction: "Try removing 'new'",
-);
+  static const ParserErrorCode NON_STRING_LITERAL_AS_URI = ParserErrorCode(
+    'NON_STRING_LITERAL_AS_URI',
+    "The URI must be a string literal.",
+    correctionMessage:
+        "Try enclosing the URI in either single or double quotes.",
+  );
 
-const ParserErrorCode _MEMBER_WITH_CLASS_NAME = ParserErrorCode(
-  'MEMBER_WITH_CLASS_NAME',
-  "A class member can't have the same name as the enclosing class.",
-  correction: "Try renaming the member.",
-);
+  /**
+   * Parameters:
+   * 0: the operator that the user is trying to define
+   */
+  static const ParserErrorCode NON_USER_DEFINABLE_OPERATOR = ParserErrorCode(
+    'NON_USER_DEFINABLE_OPERATOR',
+    "The operator '{0}' isn't user definable.",
+  );
 
-const ParserErrorCode _MISSING_ASSIGNABLE_SELECTOR = ParserErrorCode(
-  'MISSING_ASSIGNABLE_SELECTOR',
-  "Missing selector such as '.identifier' or '[0]'.",
-  correction: "Try adding a selector.",
-);
+  static const ParserErrorCode NORMAL_BEFORE_OPTIONAL_PARAMETERS =
+      ParserErrorCode(
+    'NORMAL_BEFORE_OPTIONAL_PARAMETERS',
+    "Normal parameters must occur before optional parameters.",
+    correctionMessage:
+        "Try moving all of the normal parameters before the optional parameters.",
+  );
 
-const ParserErrorCode _MISSING_ASSIGNMENT_IN_INITIALIZER = ParserErrorCode(
-  'MISSING_ASSIGNMENT_IN_INITIALIZER',
-  "Expected an assignment after the field name.",
-  correction: "To initialize a field, use the syntax 'name = value'.",
-);
+  static const ParserErrorCode NULL_AWARE_CASCADE_OUT_OF_ORDER =
+      ParserErrorCode(
+    'NULL_AWARE_CASCADE_OUT_OF_ORDER',
+    "The '?..' cascade operator must be first in the cascade sequence.",
+    correctionMessage:
+        "Try moving the '?..' operator to be the first cascade operator in the sequence.",
+  );
 
-const ParserErrorCode _MISSING_CATCH_OR_FINALLY = ParserErrorCode(
-  'MISSING_CATCH_OR_FINALLY',
-  "A try block must be followed by an 'on', 'catch', or 'finally' clause.",
-  correction:
-      "Try adding either a catch or finally clause, or remove the try statement.",
-);
+  static const ParserErrorCode POSITIONAL_AFTER_NAMED_ARGUMENT =
+      ParserErrorCode(
+    'POSITIONAL_AFTER_NAMED_ARGUMENT',
+    "Positional arguments must occur before named arguments.",
+    correctionMessage:
+        "Try moving all of the positional arguments before the named arguments.",
+  );
 
-const ParserErrorCode _MISSING_CONST_FINAL_VAR_OR_TYPE = ParserErrorCode(
-  'MISSING_CONST_FINAL_VAR_OR_TYPE',
-  "Variables must be declared using the keywords 'const', 'final', 'var' or a type name.",
-  correction:
-      "Try adding the name of the type of the variable or the keyword 'var'.",
-);
+  static const ParserErrorCode POSITIONAL_PARAMETER_OUTSIDE_GROUP =
+      ParserErrorCode(
+    'POSITIONAL_PARAMETER_OUTSIDE_GROUP',
+    "Positional parameters must be enclosed in square brackets ('[' and ']').",
+    correctionMessage:
+        "Try surrounding the positional parameters in square brackets.",
+  );
 
-const ParserErrorCode _MISSING_EXPRESSION_IN_THROW = ParserErrorCode(
-  'MISSING_EXPRESSION_IN_THROW',
-  "Missing expression after 'throw'.",
-  correction:
-      "Add an expression after 'throw' or use 'rethrow' to throw a caught exception",
-);
+  static const ParserErrorCode PREFIX_AFTER_COMBINATOR = ParserErrorCode(
+    'PREFIX_AFTER_COMBINATOR',
+    "The prefix ('as' clause) should come before any show/hide combinators.",
+    correctionMessage: "Try moving the prefix before the combinators.",
+  );
 
-const ParserErrorCode _MISSING_INITIALIZER = ParserErrorCode(
-  'MISSING_INITIALIZER',
-  "Expected an initializer.",
-);
+  static const ParserErrorCode REDIRECTING_CONSTRUCTOR_WITH_BODY =
+      ParserErrorCode(
+    'REDIRECTING_CONSTRUCTOR_WITH_BODY',
+    "Redirecting constructors can't have a body.",
+    correctionMessage:
+        "Try removing the body, or not making this a redirecting constructor.",
+  );
 
-const ParserErrorCode _MISSING_KEYWORD_OPERATOR = ParserErrorCode(
-  'MISSING_KEYWORD_OPERATOR',
-  "Operator declarations must be preceded by the keyword 'operator'.",
-  correction: "Try adding the keyword 'operator'.",
-);
+  static const ParserErrorCode REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR =
+      ParserErrorCode(
+    'REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
+    "Only factory constructor can specify '=' redirection.",
+    correctionMessage:
+        "Try making this a factory constructor, or remove the redirection.",
+  );
 
-const ParserErrorCode _MISSING_PREFIX_IN_DEFERRED_IMPORT = ParserErrorCode(
-  'MISSING_PREFIX_IN_DEFERRED_IMPORT',
-  "Deferred imports should have a prefix.",
-  correction: "Try adding a prefix to the import by adding an 'as' clause.",
-);
+  static const ParserErrorCode SETTER_CONSTRUCTOR = ParserErrorCode(
+    'SETTER_CONSTRUCTOR',
+    "Constructors can't be a setter.",
+    correctionMessage: "Try removing 'set'.",
+  );
 
-const ParserErrorCode _MISSING_STATEMENT = ParserErrorCode(
-  'MISSING_STATEMENT',
-  "Expected a statement.",
-);
+  static const ParserErrorCode SETTER_IN_FUNCTION = ParserErrorCode(
+    'SETTER_IN_FUNCTION',
+    "Setters can't be defined within methods or functions.",
+    correctionMessage: "Try moving the setter outside the method or function.",
+  );
 
-const ParserErrorCode _MIXIN_DECLARES_CONSTRUCTOR = ParserErrorCode(
-  'MIXIN_DECLARES_CONSTRUCTOR',
-  "Mixins can't declare constructors.",
-);
+  static const ParserErrorCode STACK_OVERFLOW = ParserErrorCode(
+    'STACK_OVERFLOW',
+    "The file has too many nested expressions or statements.",
+    correctionMessage: "Try simplifying the code.",
+  );
 
-const ParserErrorCode _MODIFIER_OUT_OF_ORDER = ParserErrorCode(
-  'MODIFIER_OUT_OF_ORDER',
-  "The modifier '{0}' should be before the modifier '{1}'.",
-  correction: "Try re-ordering the modifiers.",
-);
+  static const ParserErrorCode STATIC_CONSTRUCTOR = ParserErrorCode(
+    'STATIC_CONSTRUCTOR',
+    "Constructors can't be static.",
+    correctionMessage: "Try removing the keyword 'static'.",
+  );
 
-const ParserErrorCode _MULTIPLE_EXTENDS_CLAUSES = ParserErrorCode(
-  'MULTIPLE_EXTENDS_CLAUSES',
-  "Each class definition can have at most one extends clause.",
-  correction:
-      "Try choosing one superclass and define your class to implement (or mix in) the others.",
-);
+  static const ParserErrorCode STATIC_GETTER_WITHOUT_BODY = ParserErrorCode(
+    'STATIC_GETTER_WITHOUT_BODY',
+    "A 'static' getter must have a body.",
+    correctionMessage:
+        "Try adding a body to the getter, or removing the keyword 'static'.",
+  );
 
-const ParserErrorCode _MULTIPLE_LIBRARY_DIRECTIVES = ParserErrorCode(
-  'MULTIPLE_LIBRARY_DIRECTIVES',
-  "Only one library directive may be declared in a file.",
-  correction: "Try removing all but one of the library directives.",
-);
+  static const ParserErrorCode STATIC_OPERATOR = ParserErrorCode(
+    'STATIC_OPERATOR',
+    "Operators can't be static.",
+    correctionMessage: "Try removing the keyword 'static'.",
+  );
 
-const ParserErrorCode _MULTIPLE_ON_CLAUSES = ParserErrorCode(
-  'MULTIPLE_ON_CLAUSES',
-  "Each mixin definition can have at most one on clause.",
-  correction: "Try combining all of the on clauses into a single clause.",
-);
+  static const ParserErrorCode STATIC_SETTER_WITHOUT_BODY = ParserErrorCode(
+    'STATIC_SETTER_WITHOUT_BODY',
+    "A 'static' setter must have a body.",
+    correctionMessage:
+        "Try adding a body to the setter, or removing the keyword 'static'.",
+  );
 
-const ParserErrorCode _MULTIPLE_PART_OF_DIRECTIVES = ParserErrorCode(
-  'MULTIPLE_PART_OF_DIRECTIVES',
-  "Only one part-of directive may be declared in a file.",
-  correction: "Try removing all but one of the part-of directives.",
-);
+  static const ParserErrorCode STATIC_TOP_LEVEL_DECLARATION = ParserErrorCode(
+    'STATIC_TOP_LEVEL_DECLARATION',
+    "Top-level declarations can't be declared to be static.",
+    correctionMessage: "Try removing the keyword 'static'.",
+  );
 
-const ParserErrorCode _MULTIPLE_VARIANCE_MODIFIERS = ParserErrorCode(
-  'MULTIPLE_VARIANCE_MODIFIERS',
-  "Each type parameter can have at most one variance modifier.",
-  correction: "Use at most one of the 'in', 'out', or 'inout' modifiers.",
-);
+  static const ParserErrorCode SWITCH_HAS_CASE_AFTER_DEFAULT_CASE =
+      ParserErrorCode(
+    'SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
+    "The default case should be the last case in a switch statement.",
+    correctionMessage:
+        "Try moving the default case after the other case clauses.",
+  );
 
-const ParserErrorCode _MULTIPLE_WITH_CLAUSES = ParserErrorCode(
-  'MULTIPLE_WITH_CLAUSES',
-  "Each class definition can have at most one with clause.",
-  correction: "Try combining all of the with clauses into a single clause.",
-);
+  static const ParserErrorCode SWITCH_HAS_MULTIPLE_DEFAULT_CASES =
+      ParserErrorCode(
+    'SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
+    "The 'default' case can only be declared once.",
+    correctionMessage: "Try removing all but one default case.",
+  );
 
-const ParserErrorCode _NATIVE_CLAUSE_SHOULD_BE_ANNOTATION = ParserErrorCode(
-  'NATIVE_CLAUSE_SHOULD_BE_ANNOTATION',
-  "Native clause in this form is deprecated.",
-  correction:
-      "Try removing this native clause and adding @native() or @native('native-name') before the declaration.",
-);
+  static const ParserErrorCode TOP_LEVEL_OPERATOR = ParserErrorCode(
+    'TOP_LEVEL_OPERATOR',
+    "Operators must be declared within a class.",
+    correctionMessage:
+        "Try removing the operator, moving it to a class, or converting it to be a function.",
+  );
 
-const ParserErrorCode _NULL_AWARE_CASCADE_OUT_OF_ORDER = ParserErrorCode(
-  'NULL_AWARE_CASCADE_OUT_OF_ORDER',
-  "The '?..' cascade operator must be first in the cascade sequence.",
-  correction:
-      "Try moving the '?..' operator to be the first cascade operator in the sequence.",
-);
+  static const ParserErrorCode TYPEDEF_IN_CLASS = ParserErrorCode(
+    'TYPEDEF_IN_CLASS',
+    "Typedefs can't be declared inside classes.",
+    correctionMessage: "Try moving the typedef to the top-level.",
+  );
 
-const ParserErrorCode _PREFIX_AFTER_COMBINATOR = ParserErrorCode(
-  'PREFIX_AFTER_COMBINATOR',
-  "The prefix ('as' clause) should come before any show/hide combinators.",
-  correction: "Try moving the prefix before the combinators.",
-);
+  static const ParserErrorCode TYPE_ARGUMENTS_ON_TYPE_VARIABLE =
+      ParserErrorCode(
+    'TYPE_ARGUMENTS_ON_TYPE_VARIABLE',
+    "Can't use type arguments with type variable '{0}'.",
+    correctionMessage: "Try removing the type arguments.",
+  );
 
-const ParserErrorCode _REDIRECTING_CONSTRUCTOR_WITH_BODY = ParserErrorCode(
-  'REDIRECTING_CONSTRUCTOR_WITH_BODY',
-  "Redirecting constructors can't have a body.",
-  correction:
-      "Try removing the body, or not making this a redirecting constructor.",
-);
+  static const ParserErrorCode TYPE_BEFORE_FACTORY = ParserErrorCode(
+    'TYPE_BEFORE_FACTORY',
+    "Factory constructors cannot have a return type.",
+    correctionMessage: "Try removing the type appearing before 'factory'.",
+  );
 
-const ParserErrorCode _REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR = ParserErrorCode(
-  'REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
-  "Only factory constructor can specify '=' redirection.",
-  correction:
-      "Try making this a factory constructor, or remove the redirection.",
-);
+  static const ParserErrorCode TYPE_PARAMETER_ON_CONSTRUCTOR = ParserErrorCode(
+    'TYPE_PARAMETER_ON_CONSTRUCTOR',
+    "Constructors can't have type parameters.",
+    correctionMessage: "Try removing the type parameters.",
+  );
 
-const ParserErrorCode _SETTER_CONSTRUCTOR = ParserErrorCode(
-  'SETTER_CONSTRUCTOR',
-  "Constructors can't be a setter.",
-  correction: "Try removing 'set'.",
-);
+  /**
+   * 7.1.1 Operators: Type parameters are not syntactically supported on an
+   * operator.
+   */
+  static const ParserErrorCode TYPE_PARAMETER_ON_OPERATOR = ParserErrorCode(
+    'TYPE_PARAMETER_ON_OPERATOR',
+    "Types parameters aren't allowed when defining an operator.",
+    correctionMessage: "Try removing the type parameters.",
+  );
 
-const ParserErrorCode _STACK_OVERFLOW = ParserErrorCode(
-  'STACK_OVERFLOW',
-  "The file has too many nested expressions or statements.",
-  correction: "Try simplifying the code.",
-);
+  /**
+   * Parameters:
+   * 0: the starting character that was missing
+   */
+  static const ParserErrorCode UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP =
+      ParserErrorCode(
+    'UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP',
+    "There is no '{0}' to open a parameter group.",
+    correctionMessage: "Try inserting the '{0}' at the appropriate location.",
+  );
 
-const ParserErrorCode _STATIC_CONSTRUCTOR = ParserErrorCode(
-  'STATIC_CONSTRUCTOR',
-  "Constructors can't be static.",
-  correction: "Try removing the keyword 'static'.",
-);
+  /**
+   * Parameters:
+   * 0: the unexpected text that was found
+   */
+  static const ParserErrorCode UNEXPECTED_TOKEN = ParserErrorCode(
+    'UNEXPECTED_TOKEN',
+    "Unexpected text '{0}'.",
+    correctionMessage: "Try removing the text.",
+  );
 
-const ParserErrorCode _STATIC_OPERATOR = ParserErrorCode(
-  'STATIC_OPERATOR',
-  "Operators can't be static.",
-  correction: "Try removing the keyword 'static'.",
-);
+  static const ParserErrorCode VAR_AND_TYPE = ParserErrorCode(
+    'VAR_AND_TYPE',
+    "Variables can't be declared using both 'var' and a type name.",
+    correctionMessage: "Try removing 'var.'",
+  );
 
-const ParserErrorCode _SWITCH_HAS_CASE_AFTER_DEFAULT_CASE = ParserErrorCode(
-  'SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
-  "The default case should be the last case in a switch statement.",
-  correction: "Try moving the default case after the other case clauses.",
-);
+  static const ParserErrorCode VAR_AS_TYPE_NAME = ParserErrorCode(
+    'VAR_AS_TYPE_NAME',
+    "The keyword 'var' can't be used as a type name.",
+  );
 
-const ParserErrorCode _SWITCH_HAS_MULTIPLE_DEFAULT_CASES = ParserErrorCode(
-  'SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
-  "The 'default' case can only be declared once.",
-  correction: "Try removing all but one default case.",
-);
+  static const ParserErrorCode VAR_CLASS = ParserErrorCode(
+    'VAR_CLASS',
+    "Classes can't be declared to be 'var'.",
+    correctionMessage: "Try removing the keyword 'var'.",
+  );
 
-const ParserErrorCode _TOP_LEVEL_OPERATOR = ParserErrorCode(
-  'TOP_LEVEL_OPERATOR',
-  "Operators must be declared within a class.",
-  correction:
-      "Try removing the operator, moving it to a class, or converting it to be a function.",
-);
+  static const ParserErrorCode VAR_ENUM = ParserErrorCode(
+    'VAR_ENUM',
+    "Enums can't be declared to be 'var'.",
+    correctionMessage: "Try removing the keyword 'var'.",
+  );
 
-const ParserErrorCode _TYPEDEF_IN_CLASS = ParserErrorCode(
-  'TYPEDEF_IN_CLASS',
-  "Typedefs can't be declared inside classes.",
-  correction: "Try moving the typedef to the top-level.",
-);
+  static const ParserErrorCode VAR_RETURN_TYPE = ParserErrorCode(
+    'VAR_RETURN_TYPE',
+    "The return type can't be 'var'.",
+    correctionMessage:
+        "Try removing the keyword 'var', or replacing it with the name of the return type.",
+  );
 
-const ParserErrorCode _TYPE_ARGUMENTS_ON_TYPE_VARIABLE = ParserErrorCode(
-  'TYPE_ARGUMENTS_ON_TYPE_VARIABLE',
-  "Can't use type arguments with type variable '{0}'.",
-  correction: "Try removing the type arguments.",
-);
+  static const ParserErrorCode VAR_TYPEDEF = ParserErrorCode(
+    'VAR_TYPEDEF',
+    "Typedefs can't be declared to be 'var'.",
+    correctionMessage:
+        "Try removing the keyword 'var', or replacing it with the name of the return type.",
+  );
 
-const ParserErrorCode _TYPE_BEFORE_FACTORY = ParserErrorCode(
-  'TYPE_BEFORE_FACTORY',
-  "Factory constructors cannot have a return type.",
-  correction: "Try removing the type appearing before 'factory'.",
-);
+  static const ParserErrorCode VOID_WITH_TYPE_ARGUMENTS = ParserErrorCode(
+    'VOID_WITH_TYPE_ARGUMENTS',
+    "Type 'void' can't have type arguments.",
+    correctionMessage: "Try removing the type arguments.",
+  );
 
-const ParserErrorCode _TYPE_PARAMETER_ON_CONSTRUCTOR = ParserErrorCode(
-  'TYPE_PARAMETER_ON_CONSTRUCTOR',
-  "Constructors can't have type parameters.",
-  correction: "Try removing the type parameters.",
-);
+  static const ParserErrorCode WITH_BEFORE_EXTENDS = ParserErrorCode(
+    'WITH_BEFORE_EXTENDS',
+    "The extends clause must be before the with clause.",
+    correctionMessage: "Try moving the extends clause before the with clause.",
+  );
 
-const ParserErrorCode _VAR_AND_TYPE = ParserErrorCode(
-  'VAR_AND_TYPE',
-  "Variables can't be declared using both 'var' and a type name.",
-  correction: "Try removing 'var.'",
-);
+  static const ParserErrorCode WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER =
+      ParserErrorCode(
+    'WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER',
+    "The default value of a positional parameter should be preceded by '='.",
+    correctionMessage: "Try replacing the ':' with '='.",
+  );
 
-const ParserErrorCode _VAR_AS_TYPE_NAME = ParserErrorCode(
-  'VAR_AS_TYPE_NAME',
-  "The keyword 'var' can't be used as a type name.",
-);
+  /**
+   * Parameters:
+   * 0: the terminator that was expected
+   * 1: the terminator that was found
+   */
+  static const ParserErrorCode WRONG_TERMINATOR_FOR_PARAMETER_GROUP =
+      ParserErrorCode(
+    'WRONG_TERMINATOR_FOR_PARAMETER_GROUP',
+    "Expected '{0}' to close parameter group.",
+    correctionMessage: "Try replacing '{0}' with '{1}'.",
+  );
 
-const ParserErrorCode _VAR_RETURN_TYPE = ParserErrorCode(
-  'VAR_RETURN_TYPE',
-  "The return type can't be 'var'.",
-  correction:
-      "Try removing the keyword 'var', or replacing it with the name of the return type.",
-);
+  /// Initialize a newly created error code to have the given [name].
+  const ParserErrorCode(
+    String name,
+    String problemMessage, {
+    String? correctionMessage,
+    bool hasPublishedDocs = false,
+    bool isUnresolvedIdentifier = false,
+    String? uniqueName,
+  }) : super(
+          correctionMessage: correctionMessage,
+          hasPublishedDocs: hasPublishedDocs,
+          isUnresolvedIdentifier: isUnresolvedIdentifier,
+          name: name,
+          problemMessage: problemMessage,
+          uniqueName: 'ParserErrorCode.${uniqueName ?? name}',
+        );
 
-const ParserErrorCode _VOID_WITH_TYPE_ARGUMENTS = ParserErrorCode(
-  'VOID_WITH_TYPE_ARGUMENTS',
-  "Type 'void' can't have type arguments.",
-  correction: "Try removing the type arguments.",
-);
+  @override
+  ErrorSeverity get errorSeverity => ErrorSeverity.ERROR;
 
-const ParserErrorCode _WITH_BEFORE_EXTENDS = ParserErrorCode(
-  'WITH_BEFORE_EXTENDS',
-  "The extends clause must be before the with clause.",
-  correction: "Try moving the extends clause before the with clause.",
-);
+  @override
+  ErrorType get type => ErrorType.SYNTACTIC_ERROR;
+}
diff --git a/pkg/analyzer/lib/src/dart/error/todo_codes.dart b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
index e1f955a..175ed0a 100644
--- a/pkg/analyzer/lib/src/dart/error/todo_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
@@ -83,7 +83,7 @@
    */
   const TodoCode(String name)
       : super(
-          message: "{0}",
+          problemMessage: "{0}",
           name: name,
           uniqueName: 'TodoCode.$name',
         );
diff --git a/pkg/analyzer/lib/src/dart/micro/cider_byte_store.dart b/pkg/analyzer/lib/src/dart/micro/cider_byte_store.dart
index fc56800..dc78189 100644
--- a/pkg/analyzer/lib/src/dart/micro/cider_byte_store.dart
+++ b/pkg/analyzer/lib/src/dart/micro/cider_byte_store.dart
@@ -2,12 +2,14 @@
 // 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:typed_data';
+
 import 'package:analyzer/src/dart/analysis/cache.dart';
 import 'package:collection/collection.dart';
 
 class CacheData {
   final int id;
-  final List<int> bytes;
+  final Uint8List bytes;
 
   CacheData(this.id, this.bytes);
 }
@@ -25,11 +27,11 @@
   /// [signature].
   ///
   /// Return `null` if the association does not exist.
-  CacheData? get(String key, List<int> signature);
+  CacheData? get(String key, Uint8List signature);
 
   /// Associate the given [bytes] with the [key] and [signature]. Return the
   /// [CacheData].
-  CacheData putGet(String key, List<int> signature, List<int> bytes);
+  CacheData putGet(String key, Uint8List signature, Uint8List bytes);
 
   ///  Used to decrement reference count for the given ids, if implemented.
   void release(Iterable<int> ids);
@@ -51,7 +53,7 @@
             maxCacheSize, (v) => v.data.bytes.length);
 
   @override
-  CacheData? get(String key, List<int> signature) {
+  CacheData? get(String key, Uint8List signature) {
     var entry = _cache.get(key, () => null);
 
     if (entry != null &&
@@ -62,7 +64,7 @@
   }
 
   @override
-  CacheData putGet(String key, List<int> signature, List<int> bytes) {
+  CacheData putGet(String key, Uint8List signature, Uint8List bytes) {
     idCounter++;
     var entry = CiderCacheEntry(signature, CacheData(idCounter, bytes));
     _cache.put(key, entry);
@@ -78,7 +80,7 @@
 
 class CiderCacheEntry {
   final CacheData data;
-  final List<int> signature;
+  final Uint8List signature;
 
   CiderCacheEntry(this.signature, this.data);
 }
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index 1fa7152..be5b2ba 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -110,7 +110,7 @@
 
     // Parse all files.
     performance.run('parse', (performance) {
-      for (FileState file in _library.libraryFiles) {
+      for (FileState file in _library.files().ofLibrary) {
         if (completionPath == null || file.path == completionPath) {
           units[file] = _parse(
             file: file,
@@ -231,19 +231,19 @@
 
     if (_analysisOptions.lint) {
       performance.run('computeLints', (performance) {
-        var allUnits = _library.libraryFiles.map((file) {
+        var allUnits = _library.files().ofLibrary.map((file) {
           var content = getFileContent(file);
           return LinterContextUnit(content, units[file]!);
         }).toList();
         for (int i = 0; i < allUnits.length; i++) {
-          _computeLints(_library.libraryFiles[i], allUnits[i], allUnits);
+          _computeLints(_library.files().ofLibrary[i], allUnits[i], allUnits);
         }
       });
     }
 
     // This must happen after all other diagnostics have been computed but
     // before the list of diagnostics has been filtered.
-    for (var file in _library.libraryFiles) {
+    for (var file in _library.files().ofLibrary) {
       IgnoreValidator(
         _getErrorReporter(file),
         _getErrorListener(file).errors,
@@ -472,7 +472,7 @@
   }
 
   bool _isExistingSource(Source source) {
-    for (var file in _library.directReferencedFiles) {
+    for (var file in _library.files().directReferencedFiles) {
       if (file.uri == source.uri) {
         return file.exists;
       }
@@ -565,9 +565,13 @@
             directive.prefix?.staticElement = importElement.prefix;
             var source = importElement.importedLibrary?.source;
             if (source != null && !_isLibrarySource(source)) {
+              // It is safe to assume that `directive.uri.stringValue` is
+              // non-`null`, because the only time it is `null` is if the URI
+              // contains a string interpolation, in which case the import
+              // would never have resolved in the first place.
               ErrorCode errorCode = CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY;
               libraryErrorReporter.reportErrorForNode(
-                  errorCode, directive.uri, [directive.uri]);
+                  errorCode, directive.uri, [directive.uri.stringValue!]);
             }
           }
         }
@@ -577,17 +581,21 @@
             directive.element = exportElement;
             var source = exportElement.exportedLibrary?.source;
             if (source != null && !_isLibrarySource(source)) {
+              // It is safe to assume that `directive.uri.stringValue` is
+              // non-`null`, because the only time it is `null` is if the URI
+              // contains a string interpolation, in which case the export
+              // would never have resolved in the first place.
               libraryErrorReporter.reportErrorForNode(
                   CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
                   directive.uri,
-                  [directive.uri]);
+                  [directive.uri.stringValue!]);
             }
           }
         }
       } else if (directive is PartDirectiveImpl) {
         StringLiteral partUri = directive.uri;
 
-        FileState partFile = _library.partedFiles[partIndex];
+        FileState partFile = _library.files().parted[partIndex];
         var partUnit = units[partFile]!;
         CompilationUnitElement partElement = _libraryElement.parts[partIndex];
         partUnit.element = partElement;
@@ -671,17 +679,6 @@
 
     var unitElement = unit.declaredElement as CompilationUnitElementImpl;
 
-    // TODO(scheglov) Hack: set types for top-level variables
-    // Otherwise TypeResolverVisitor will set declared types, and because we
-    // don't run InferStaticVariableTypeTask, we will stuck with these declared
-    // types. And we don't need to run this task - resynthesized elements have
-    // inferred types.
-    for (var e in unitElement.topLevelVariables) {
-      if (!e.isSynthetic) {
-        e.type;
-      }
-    }
-
     unit.accept(
       ResolutionVisitor(
         unitElement: unitElement,
@@ -737,15 +734,17 @@
         UriBasedDirectiveImpl.validateUri(isImport, uriLiteral, uriContent);
     if (code == null) {
       return _sourceFactory.resolveUri(file.source, uriContent);
-    } else if (code == UriValidationCode.URI_WITH_DART_EXT_SCHEME) {
-      return null;
     } else if (code == UriValidationCode.URI_WITH_INTERPOLATION) {
       _getErrorReporter(file).reportErrorForNode(
           CompileTimeErrorCode.URI_WITH_INTERPOLATION, uriLiteral);
       return null;
     } else if (code == UriValidationCode.INVALID_URI) {
+      // It is safe to assume [uriContent] is non-null because the only way for
+      // it to be null is if the string literal contained an interpolation, and
+      // in that case the validation code would have been
+      // UriValidationCode.URI_WITH_INTERPOLATION.
       _getErrorReporter(file).reportErrorForNode(
-          CompileTimeErrorCode.INVALID_URI, uriLiteral, [uriContent]);
+          CompileTimeErrorCode.INVALID_URI, uriLiteral, [uriContent!]);
       return null;
     }
     return null;
@@ -798,13 +797,27 @@
         return;
       }
     }
+
+    var uriContent = directive.uriContent;
+    if (uriContent != null && uriContent.startsWith('dart-ext:')) {
+      _getErrorReporter(file).reportErrorForNode(
+        CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION,
+        directive.uri,
+      );
+      return;
+    }
+
     StringLiteral uriLiteral = directive.uri;
     CompileTimeErrorCode errorCode = CompileTimeErrorCode.URI_DOES_NOT_EXIST;
     if (isGeneratedSource(source)) {
       errorCode = CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED;
     }
+    // It is safe to assume that `uriContent` is non-null because the only way
+    // for it to be null is if the string literal contained an interpolation,
+    // and in that case the call to `directive.validate()` above would have
+    // returned a non-null validation code.
     _getErrorReporter(file)
-        .reportErrorForNode(errorCode, uriLiteral, [directive.uriContent]);
+        .reportErrorForNode(errorCode, uriLiteral, [uriContent!]);
   }
 
   /// Check each directive in the given [unit] to see if the referenced source
diff --git a/pkg/analyzer/lib/src/dart/micro/library_graph.dart b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
index cbee620..7bd4630 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
@@ -15,19 +15,19 @@
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/analysis/feature_set_provider.dart';
 import 'package:analyzer/src/dart/analysis/unlinked_api_signature.dart';
+import 'package:analyzer/src/dart/analysis/unlinked_data.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/micro/cider_byte_store.dart';
 import 'package:analyzer/src/dart/scanner/reader.dart';
 import 'package:analyzer/src/dart/scanner/scanner.dart';
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/api_signature.dart';
-import 'package:analyzer/src/summary/format.dart';
-import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/link.dart' as graph
     show DependencyWalker, Node;
+import 'package:analyzer/src/summary2/data_reader.dart';
+import 'package:analyzer/src/summary2/data_writer.dart';
 import 'package:analyzer/src/summary2/informative_data.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/performance/operation_performance.dart';
@@ -43,77 +43,91 @@
   libraryWalker.walk(libraryWalker.getNode(file));
 }
 
+class CiderUnitTopLevelDeclarations {
+  final List<String> extensionNames;
+  final List<String> functionNames;
+  final List<String> typeNames;
+  final List<String> variableNames;
+
+  CiderUnitTopLevelDeclarations({
+    required this.extensionNames,
+    required this.functionNames,
+    required this.typeNames,
+    required this.variableNames,
+  });
+
+  factory CiderUnitTopLevelDeclarations.read(SummaryDataReader reader) {
+    return CiderUnitTopLevelDeclarations(
+      extensionNames: reader.readStringUtf8List(),
+      functionNames: reader.readStringUtf8List(),
+      typeNames: reader.readStringUtf8List(),
+      variableNames: reader.readStringUtf8List(),
+    );
+  }
+
+  void write(BufferedSink sink) {
+    sink.writeStringUtf8Iterable(extensionNames);
+    sink.writeStringUtf8Iterable(functionNames);
+    sink.writeStringUtf8Iterable(typeNames);
+    sink.writeStringUtf8Iterable(variableNames);
+  }
+}
+
+class CiderUnlinkedUnit {
+  /// Top-level declarations of the unit.
+  final CiderUnitTopLevelDeclarations topLevelDeclarations;
+
+  /// Unlinked summary of the compilation unit.
+  final UnlinkedUnit unit;
+
+  CiderUnlinkedUnit({
+    required this.topLevelDeclarations,
+    required this.unit,
+  });
+
+  factory CiderUnlinkedUnit.fromBytes(Uint8List bytes) {
+    return CiderUnlinkedUnit.read(
+      SummaryDataReader(bytes),
+    );
+  }
+
+  factory CiderUnlinkedUnit.read(SummaryDataReader reader) {
+    return CiderUnlinkedUnit(
+      topLevelDeclarations: CiderUnitTopLevelDeclarations.read(reader),
+      unit: UnlinkedUnit.read(reader),
+    );
+  }
+
+  Uint8List toBytes() {
+    var byteSink = ByteSink();
+    var sink = BufferedSink(byteSink);
+    write(sink);
+    return sink.flushAndTake();
+  }
+
+  void write(BufferedSink sink) {
+    topLevelDeclarations.write(sink);
+    unit.write(sink);
+  }
+}
+
 class FileState {
-  final FileSystemState _fsState;
-
-  /// The path of the file.
-  final String path;
-
-  /// The URI of the file.
-  final Uri uri;
-
-  /// The [Source] of the file with the [uri].
-  final Source source;
-
-  /// The [WorkspacePackage] that contains this file.
-  ///
-  /// It might be `null` if the file is outside of the workspace.
-  final WorkspacePackage? workspacePackage;
-
-  /// The [FeatureSet] for all files in the analysis context.
-  ///
-  /// Usually it is the feature set of the latest language version, plus
-  /// possibly additional enabled experiments (from the analysis options file,
-  /// or from SDK allowed experiments).
-  ///
-  /// This feature set is then restricted, with the [_packageLanguageVersion],
-  /// or with a `@dart` language override token in the file header.
-  final FeatureSet _contextFeatureSet;
-
-  /// The language version for the package that contains this file.
-  final Version _packageLanguageVersion;
+  final _FileStateUnlinked _unlinked;
 
   /// Files that reference this file.
   final List<FileState> referencingFiles = [];
 
-  final List<FileState> importedFiles = [];
-  final List<FileState> exportedFiles = [];
-  final List<FileState> partedFiles = [];
-  final Set<FileState> directReferencedFiles = {};
-  final Set<FileState> directReferencedLibraries = {};
-  final List<FileState> libraryFiles = [];
-  FileState? partOfLibrary;
+  _FileStateFiles? _files;
 
-  late List<int> _digest;
-  late bool _exists;
-  late List<int> _apiSignature;
-  late UnlinkedUnit2 unlinked2;
-  Uint8List? informativeBytes;
   LibraryCycle? _libraryCycle;
 
-  /// id of the cache entry with unlinked data.
-  late int unlinkedId;
+  FileState._(this._unlinked);
 
-  /// id of the cache entry with informative data.
-  /// We use a separate entry because there is no good way to efficiently
-  /// store a raw byte array.
-  late int informativeId;
+  Uint8List get apiSignature => unlinkedUnit.apiSignature;
 
-  FileState._(
-    this._fsState,
-    this.path,
-    this.uri,
-    this.source,
-    this.workspacePackage,
-    this._contextFeatureSet,
-    this._packageLanguageVersion,
-  );
+  Uint8List get digest => _unlinked.digest;
 
-  List<int> get apiSignature => _apiSignature;
-
-  List<int> get digest => _digest;
-
-  bool get exists => _exists;
+  bool get exists => _unlinked.exists;
 
   /// Return the [LibraryCycle] this file belongs to, even if it consists of
   /// just this file.  If the library cycle is not known yet, compute it.
@@ -124,7 +138,11 @@
     return _libraryCycle!;
   }
 
-  LineInfo get lineInfo => LineInfo(unlinked2.lineStarts);
+  LineInfo get lineInfo => LineInfo(unlinkedUnit.lineStarts);
+
+  FileState? get partOfLibrary => _unlinked.partOfLibrary;
+
+  String get path => _location.path;
 
   /// The resolved signature of the file, that depends on the [libraryCycle]
   /// signature, and the content of the file.
@@ -133,47 +151,62 @@
     signatureBuilder.addString(path);
     signatureBuilder.addBytes(libraryCycle.signature);
 
-    var content = getContentWithSameDigest();
+    var content = getContent();
     signatureBuilder.addString(content);
 
     return signatureBuilder.toHex();
   }
 
+  Source get source => _location.source;
+
+  int get unlinkedId => _unlinked.unlinkedId;
+
+  UnlinkedUnit get unlinkedUnit => _unlinked.unlinked.unit;
+
+  Uri get uri => _location.uri;
+
   /// Return the [uri] string.
   String get uriStr => uri.toString();
 
+  WorkspacePackage? get workspacePackage => _location.workspacePackage;
+
+  FileSystemState get _fsState => _location._fsState;
+
+  _FileStateLocation get _location => _unlinked.location;
+
   /// Collect all files that are transitively referenced by this file via
   /// imports, exports, and parts.
   void collectAllReferencedFiles(Set<String> referencedFiles) {
-    for (var file in {...importedFiles, ...exportedFiles, ...partedFiles}) {
+    for (var file in files().directReferencedFiles) {
       if (referencedFiles.add(file.path)) {
         file.collectAllReferencedFiles(referencedFiles);
       }
     }
   }
 
-  /// Return the content of the file, the empty string if cannot be read.
-  String getContent() {
-    try {
-      var resource = _fsState._resourceProvider.getFile(path);
-      return resource.readAsStringSync();
-    } catch (_) {
-      return '';
-    }
+  _FileStateFiles files({
+    OperationPerformanceImpl? performance,
+  }) {
+    return _files ??= _FileStateFiles(
+      owner: this,
+      performance: performance ?? OperationPerformanceImpl('<root>'),
+    );
   }
 
   /// Return the content of the file, the empty string if cannot be read.
   ///
-  /// Additionally, we read the file digest, end verify that it is the same
-  /// as the [_digest] that we recorded in [refresh]. If it is not, then the
-  /// file was changed, and we failed to call [FileSystemState.changeFile]
-  String getContentWithSameDigest() {
-    var digest = utf8.encode(_fsState.getFileDigest(path));
-    if (!const ListEquality<int>().equals(digest, _digest)) {
+  /// We read the file digest, end verify that it is the same as the digest
+  /// that was recorded during the file creation. If it is not, then the file
+  /// was changed, and we failed to call [FileSystemState.changeFile].
+  String getContent() {
+    var contentWithDigest = _location._getContent();
+
+    var digest = contentWithDigest.digest;
+    if (!const ListEquality<int>().equals(digest, _unlinked.digest)) {
       throw StateError('File was changed, but not invalidated: $path');
     }
 
-    return getContent();
+    return contentWithDigest.content;
   }
 
   void internal_setLibraryCycle(LibraryCycle cycle, String signature) {
@@ -182,347 +215,13 @@
 
   CompilationUnitImpl parse(
       AnalysisErrorListener errorListener, String content) {
-    CharSequenceReader reader = CharSequenceReader(content);
-    Scanner scanner = Scanner(source, reader, errorListener)
-      ..configureFeatures(
-        featureSetForOverriding: _contextFeatureSet,
-        featureSet: _contextFeatureSet.restrictToVersion(
-          _packageLanguageVersion,
-        ),
-      );
-    Token token = scanner.tokenize(reportScannerErrors: false);
-    LineInfo lineInfo = LineInfo(scanner.lineStarts);
-
-    // Pass the feature set from the scanner to the parser
-    // because the scanner may have detected a language version comment
-    // and downgraded the feature set it holds.
-    Parser parser = Parser(
-      source,
-      errorListener,
-      featureSet: scanner.featureSet,
-    );
-    parser.enableOptionalNewAndConst = true;
-    var unit = parser.parseCompilationUnit(token);
-    unit.lineInfo = lineInfo;
-
-    // StringToken uses a static instance of StringCanonicalizer, so we need
-    // to clear it explicitly once we are done using it for this file.
-    StringToken.canonicalizer.clear();
-
-    // TODO(scheglov) Use actual versions.
-    unit.languageVersion = LibraryLanguageVersion(
-      package: ExperimentStatus.currentVersion,
-      override: null,
-    );
-
-    return unit;
-  }
-
-  void refresh({
-    FileState? containingLibrary,
-    required OperationPerformanceImpl performance,
-  }) {
-    _fsState.testView.refreshedFiles.add(path);
-    performance.getDataInt('count').increment();
-
-    performance.run('digest', (_) {
-      _digest = utf8.encode(_fsState.getFileDigest(path));
-      _exists = _digest.isNotEmpty;
-    });
-
-    String unlinkedKey = '$path.unlinked';
-    String informativeKey = '$path.informative';
-
-    // Prepare bytes of the unlinked bundle - existing or new.
-    // TODO(migration): should not be nullable
-    List<int>? unlinkedBytes;
-    List<int>? informativeBytes;
-    {
-      var unlinkedData = _fsState._byteStore.get(unlinkedKey, _digest);
-      var informativeData = _fsState._byteStore.get(informativeKey, _digest);
-      unlinkedBytes = unlinkedData?.bytes;
-      informativeBytes = informativeData?.bytes;
-
-      if (unlinkedBytes == null ||
-          unlinkedBytes.isEmpty ||
-          informativeBytes == null ||
-          informativeBytes.isEmpty) {
-        var content = performance.run('content', (_) {
-          return getContent();
-        });
-
-        var unit = performance.run('parse', (performance) {
-          performance.getDataInt('count').increment();
-          performance.getDataInt('length').add(content.length);
-          return parse(AnalysisErrorListener.NULL_LISTENER, content);
-        });
-
-        performance.run('unlinked', (performance) {
-          var unlinkedBuilder = serializeAstCiderUnlinked(_digest, unit);
-          unlinkedBytes = unlinkedBuilder.toBuffer();
-          performance.getDataInt('length').add(unlinkedBytes!.length);
-          unlinkedData =
-              _fsState._byteStore.putGet(unlinkedKey, _digest, unlinkedBytes!);
-          unlinkedBytes = unlinkedData!.bytes;
-        });
-
-        performance.run('informative', (performance) {
-          informativeBytes = writeUnitInformative(unit);
-          performance.getDataInt('length').add(informativeBytes!.length);
-          informativeData = _fsState._byteStore
-              .putGet(informativeKey, _digest, informativeBytes!);
-          informativeBytes = informativeData!.bytes;
-        });
-
-        performance.run('prefetch', (_) {
-          var decoded = CiderUnlinkedUnit.fromBuffer(unlinkedBytes!);
-          unlinked2 = decoded.unlinkedUnit!;
-          _prefetchDirectReferences(unlinked2);
-        });
-      }
-      unlinkedId = unlinkedData!.id;
-      informativeId = informativeData!.id;
-      this.informativeBytes = Uint8List.fromList(informativeBytes!);
-    }
-
-    // Read the unlinked bundle.
-    unlinked2 = CiderUnlinkedUnit.fromBuffer(unlinkedBytes!).unlinkedUnit!;
-    _apiSignature = Uint8List.fromList(unlinked2.apiSignature);
-
-    // Build the graph.
-    for (var directive in unlinked2.imports) {
-      var file = _fileForRelativeUri(
-        relativeUri: directive.uri,
-        performance: performance,
-      );
-      if (file != null) {
-        importedFiles.add(file);
-      }
-    }
-    for (var directive in unlinked2.exports) {
-      var file = _fileForRelativeUri(
-        relativeUri: directive.uri,
-        performance: performance,
-      );
-      if (file != null) {
-        exportedFiles.add(file);
-      }
-    }
-    for (var uri in unlinked2.parts) {
-      var file = _fileForRelativeUri(
-        containingLibrary: this,
-        relativeUri: uri,
-        performance: performance,
-      );
-      if (file != null) {
-        partedFiles.add(file);
-      }
-    }
-    if (unlinked2.hasPartOfDirective) {
-      if (containingLibrary == null) {
-        _fsState.testView.partsDiscoveredLibraries.add(path);
-        var libraryName = unlinked2.partOfName;
-        var libraryUri = unlinked2.partOfUri;
-        partOfLibrary = null;
-        if (libraryName.isNotEmpty) {
-          _findPartOfNameLibrary(performance: performance);
-        } else if (libraryUri.isNotEmpty) {
-          partOfLibrary = _fileForRelativeUri(
-            relativeUri: libraryUri,
-            performance: performance,
-          );
-        }
-      } else {
-        partOfLibrary = containingLibrary;
-      }
-      if (partOfLibrary != null) {
-        directReferencedFiles.add(partOfLibrary!);
-      }
-    }
-    libraryFiles.add(this);
-    libraryFiles.addAll(partedFiles);
-
-    // Compute referenced files.
-    directReferencedFiles
-      ..addAll(importedFiles)
-      ..addAll(exportedFiles)
-      ..addAll(partedFiles);
-    directReferencedLibraries
-      ..addAll(importedFiles)
-      ..addAll(exportedFiles);
+    return _FileStateUnlinked.parse(errorListener, _location, content);
   }
 
   @override
   String toString() {
     return path;
   }
-
-  FileState? _fileForRelativeUri({
-    FileState? containingLibrary,
-    required String relativeUri,
-    required OperationPerformanceImpl performance,
-  }) {
-    if (relativeUri.isEmpty) {
-      return null;
-    }
-
-    Uri absoluteUri;
-    try {
-      absoluteUri = resolveRelativeUri(uri, Uri.parse(relativeUri));
-    } on FormatException {
-      return null;
-    }
-
-    var file = _fsState.getFileForUri(
-      containingLibrary: containingLibrary,
-      uri: absoluteUri,
-      performance: performance,
-    );
-    if (file == null) {
-      return null;
-    }
-
-    file.referencingFiles.add(this);
-    return file;
-  }
-
-  /// This file has a `part of some.library;` directive. Because it does not
-  /// specify the URI of the library, we don't know the library for sure.
-  /// But usually the library is one of the sibling files.
-  void _findPartOfNameLibrary({
-    required OperationPerformanceImpl performance,
-  }) {
-    var resourceProvider = _fsState._resourceProvider;
-    var pathContext = resourceProvider.pathContext;
-
-    var children = <Resource>[];
-    try {
-      var parent = resourceProvider.getFile(path).parent2;
-      children = parent.getChildren();
-    } catch (_) {}
-
-    for (var siblingFile in children) {
-      if (file_paths.isDart(pathContext, siblingFile.path)) {
-        var childState = _fsState.getFileForPath(
-          path: siblingFile.path,
-          performance: performance,
-        );
-        if (childState.partedFiles.contains(this)) {
-          partOfLibrary = childState;
-          break;
-        }
-      }
-    }
-  }
-
-  void _prefetchDirectReferences(UnlinkedUnit2 unlinkedUnit2) {
-    if (_fsState.prefetchFiles == null) {
-      return;
-    }
-
-    var paths = <String>{};
-
-    void findPathForUri(String relativeUri) {
-      if (relativeUri.isEmpty) {
-        return;
-      }
-      Uri absoluteUri;
-      try {
-        absoluteUri = resolveRelativeUri(uri, Uri.parse(relativeUri));
-      } on FormatException {
-        return;
-      }
-      var p = _fsState.getPathForUri(absoluteUri);
-      if (p != null) {
-        paths.add(p);
-      }
-    }
-
-    for (var directive in unlinked2.imports) {
-      findPathForUri(directive.uri);
-    }
-    for (var directive in unlinked2.exports) {
-      findPathForUri(directive.uri);
-    }
-    for (var uri in unlinked2.parts) {
-      findPathForUri(uri);
-    }
-    _fsState.prefetchFiles!(paths.toList());
-  }
-
-  static CiderUnlinkedUnitBuilder serializeAstCiderUnlinked(
-      List<int> digest, CompilationUnit unit) {
-    var exports = <UnlinkedNamespaceDirectiveBuilder>[];
-    var imports = <UnlinkedNamespaceDirectiveBuilder>[];
-    var parts = <String>[];
-    var hasDartCoreImport = false;
-    var hasLibraryDirective = false;
-    var hasPartOfDirective = false;
-    var partOfUriStr = '';
-    var partOfName = '';
-    for (var directive in unit.directives) {
-      if (directive is ExportDirective) {
-        var builder = _serializeNamespaceDirective(directive);
-        exports.add(builder);
-      } else if (directive is ImportDirective) {
-        var builder = _serializeNamespaceDirective(directive);
-        imports.add(builder);
-        if (builder.uri == 'dart:core') {
-          hasDartCoreImport = true;
-        }
-      } else if (directive is LibraryDirective) {
-        hasLibraryDirective = true;
-      } else if (directive is PartDirective) {
-        var uriStr = directive.uri.stringValue;
-        parts.add(uriStr ?? '');
-      } else if (directive is PartOfDirective) {
-        hasPartOfDirective = true;
-        var libraryName = directive.libraryName;
-        var uriStr = directive.uri?.stringValue;
-        if (libraryName != null) {
-          partOfName = libraryName.components.map((e) => e.name).join('.');
-        } else if (uriStr != null) {
-          partOfUriStr = uriStr;
-        }
-      }
-    }
-    if (!hasDartCoreImport) {
-      imports.add(
-        UnlinkedNamespaceDirectiveBuilder(
-          uri: 'dart:core',
-        ),
-      );
-    }
-    var unlinkedBuilder = UnlinkedUnit2Builder(
-      apiSignature: computeUnlinkedApiSignature(unit),
-      exports: exports,
-      imports: imports,
-      parts: parts,
-      hasLibraryDirective: hasLibraryDirective,
-      hasPartOfDirective: hasPartOfDirective,
-      partOfName: partOfName,
-      partOfUri: partOfUriStr,
-      lineStarts: unit.lineInfo!.lineStarts,
-    );
-    return CiderUnlinkedUnitBuilder(
-        contentDigest: digest, unlinkedUnit: unlinkedBuilder);
-  }
-
-  static UnlinkedNamespaceDirectiveBuilder _serializeNamespaceDirective(
-      NamespaceDirective directive) {
-    return UnlinkedNamespaceDirectiveBuilder(
-      configurations: directive.configurations.map((configuration) {
-        var name = configuration.name.components.join('.');
-        var value = configuration.value?.stringValue ?? '';
-        return UnlinkedNamespaceDirectiveConfigurationBuilder(
-          name: name,
-          value: value,
-          uri: configuration.uri.stringValue ?? '',
-        );
-      }).toList(),
-      uri: directive.uri.stringValue ?? '',
-    );
-  }
 }
 
 class FileSystemState {
@@ -559,8 +258,6 @@
     this._byteStore,
     this._sourceFactory,
     this._workspace,
-    @Deprecated('No longer used; will be removed')
-        AnalysisOptions analysisOptions,
     this._linkedSalt,
     this.featureSetProvider,
     this.getFileDigest,
@@ -581,7 +278,7 @@
     _uriToFile.remove(file.uri);
 
     // The removed file does not reference other file anymore.
-    for (var referencedFile in file.directReferencedFiles) {
+    for (var referencedFile in file.files().directReferencedFiles) {
       referencedFile.referencingFiles.remove(file);
     }
 
@@ -596,8 +293,7 @@
   Set<int> collectSharedDataIdentifiers() {
     var result = <int>{};
     for (var file in _pathToFile.values) {
-      result.add(file.unlinkedId);
-      result.add(file.informativeId);
+      result.add(file._unlinked.unlinkedId);
     }
     return result;
   }
@@ -635,37 +331,27 @@
     required OperationPerformanceImpl performance,
   }) {
     var file = _pathToFile[path];
-    if (file == null) {
-      var fileUri = _resourceProvider.pathContext.toUri(path);
-      var uri = _sourceFactory.restoreUri(
-        _FakeSource(path, fileUri),
-      );
-      if (uri == null) {
-        throw StateError('Unable to convert path to URI: $path');
-      }
-
-      var source = _sourceFactory.forUri2(uri);
-      if (source == null) {
-        throw StateError('Unable to resolve URI: $uri, path: $path');
-      }
-
-      var workspacePackage = _workspace.findPackageFor(path);
-      var featureSet = contextFeatureSet(path, uri, workspacePackage);
-      var packageLanguageVersion =
-          contextLanguageVersion(path, uri, workspacePackage);
-      file = FileState._(this, path, uri, source, workspacePackage, featureSet,
-          packageLanguageVersion);
-
-      _pathToFile[path] = file;
-      _uriToFile[uri] = file;
-
-      performance.run('refresh', (performance) {
-        file!.refresh(
-          performance: performance,
-        );
-      });
+    if (file != null) {
+      return file;
     }
-    return file;
+
+    var fileUri = _resourceProvider.pathContext.toUri(path);
+    var uri = _sourceFactory.restoreUri(
+      _FakeSource(path, fileUri),
+    );
+    if (uri == null) {
+      throw StateError('Unable to convert path to URI: $path');
+    }
+
+    var source = _sourceFactory.forUri2(uri);
+    if (source == null) {
+      throw StateError('Unable to resolve URI: $uri, path: $path');
+    }
+
+    return _newFile(
+      source: source,
+      performance: performance,
+    );
   }
 
   FileState? getFileForUri({
@@ -674,29 +360,19 @@
     required OperationPerformanceImpl performance,
   }) {
     var file = _uriToFile[uri];
-    if (file == null) {
-      var source = _sourceFactory.forUri2(uri);
-      if (source == null) {
-        return null;
-      }
-      var path = source.fullName;
-
-      var workspacePackage = _workspace.findPackageFor(path);
-      var featureSet = contextFeatureSet(path, uri, workspacePackage);
-      var packageLanguageVersion =
-          contextLanguageVersion(path, uri, workspacePackage);
-
-      file = FileState._(this, path, uri, source, workspacePackage, featureSet,
-          packageLanguageVersion);
-      _pathToFile[path] = file;
-      _uriToFile[uri] = file;
-
-      file.refresh(
-        containingLibrary: containingLibrary,
-        performance: performance,
-      );
+    if (file != null) {
+      return file;
     }
-    return file;
+
+    var source = _sourceFactory.forUri2(uri);
+    if (source == null) {
+      return null;
+    }
+
+    return _newFile(
+      source: source,
+      performance: performance,
+    );
   }
 
   /// Returns a list of files whose contents contains the given string.
@@ -712,6 +388,45 @@
     return result;
   }
 
+  /// Return files that have a top-level declaration with the [name].
+  List<FileWithTopLevelDeclaration> getFilesWithTopLevelDeclarations(
+    String name,
+  ) {
+    var result = <FileWithTopLevelDeclaration>[];
+
+    for (var file in _pathToFile.values) {
+      void addDeclaration(
+        List<String> names,
+        FileTopLevelDeclarationKind kind,
+      ) {
+        if (names.contains(name)) {
+          result.add(
+            FileWithTopLevelDeclaration(file: file, kind: kind),
+          );
+        }
+      }
+
+      var topLevelDeclarations = file._unlinked.unlinked.topLevelDeclarations;
+      addDeclaration(
+        topLevelDeclarations.extensionNames,
+        FileTopLevelDeclarationKind.extension,
+      );
+      addDeclaration(
+        topLevelDeclarations.functionNames,
+        FileTopLevelDeclarationKind.function,
+      );
+      addDeclaration(
+        topLevelDeclarations.typeNames,
+        FileTopLevelDeclarationKind.type,
+      );
+      addDeclaration(
+        topLevelDeclarations.variableNames,
+        FileTopLevelDeclarationKind.variable,
+      );
+    }
+    return result;
+  }
+
   String? getPathForUri(Uri uri) {
     var source = _sourceFactory.forUri2(uri);
     if (source == null) {
@@ -743,6 +458,36 @@
 
     return removedFiles;
   }
+
+  FileState _newFile({
+    required Source source,
+    required OperationPerformanceImpl performance,
+  }) {
+    var path = source.fullName;
+    var uri = source.uri;
+
+    var workspacePackage = _workspace.findPackageFor(path);
+    var featureSet = contextFeatureSet(path, uri, workspacePackage);
+    var packageLanguageVersion =
+        contextLanguageVersion(path, uri, workspacePackage);
+
+    var location = _FileStateLocation._(this, path, uri, source,
+        workspacePackage, featureSet, packageLanguageVersion);
+    var file = FileState._(
+      _FileStateUnlinked(
+        location: location,
+        partOfLibrary: null,
+        performance: performance,
+      ),
+    );
+    _pathToFile[path] = file;
+    _uriToFile[uri] = file;
+
+    // Recurse with recording performance.
+    file.files(performance: performance);
+
+    return file;
+  }
 }
 
 class FileSystemStateTestView {
@@ -789,6 +534,20 @@
   }
 }
 
+/// The kind in [FileWithTopLevelDeclaration].
+enum FileTopLevelDeclarationKind { extension, function, type, variable }
+
+/// The data structure for top-level declarations response.
+class FileWithTopLevelDeclaration {
+  final FileState file;
+  final FileTopLevelDeclarationKind kind;
+
+  FileWithTopLevelDeclaration({
+    required this.file,
+    required this.kind,
+  });
+}
+
 /// Information about libraries that reference each other, so form a cycle.
 class LibraryCycle {
   /// The libraries that belong to this cycle.
@@ -803,7 +562,7 @@
   /// the signatures of the cycles that the [libraries] reference
   /// directly.  So, indirectly it is based on the transitive closure of all
   /// files that [libraries] reference (but we don't compute these files).
-  late List<int> signature;
+  late Uint8List signature;
 
   /// The hash of all the paths of the files in this cycle.
   late String cyclePathsHash;
@@ -824,6 +583,16 @@
   }
 }
 
+class _ContentWithDigest {
+  final String content;
+  final Uint8List digest;
+
+  _ContentWithDigest({
+    required this.content,
+    required this.digest,
+  });
+}
+
 class _FakeSource implements Source {
   @override
   final String fullName;
@@ -837,6 +606,486 @@
   dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
 
+class _FileStateFiles {
+  final List<FileState> imported = [];
+  final List<FileState> exported = [];
+  final List<FileState> parted = [];
+  final List<FileState> ofLibrary = [];
+
+  _FileStateFiles({
+    required FileState owner,
+    required OperationPerformanceImpl performance,
+  }) {
+    var unlinked = owner._unlinked;
+    var location = unlinked.location;
+    var unlinkedUnit = unlinked.unlinked.unit;
+
+    // Build the graph.
+    for (var directive in unlinkedUnit.imports) {
+      var file = location._fileForRelativeUri(
+        relativeUri: directive.uri,
+        performance: performance,
+      );
+      if (file != null) {
+        file.referencingFiles.add(owner);
+        imported.add(file);
+      }
+    }
+    for (var directive in unlinkedUnit.exports) {
+      var file = location._fileForRelativeUri(
+        relativeUri: directive.uri,
+        performance: performance,
+      );
+      if (file != null) {
+        exported.add(file);
+        file.referencingFiles.add(owner);
+      }
+    }
+    for (var uri in unlinkedUnit.parts) {
+      var file = location._fileForRelativeUri(
+        containingLibrary: owner,
+        relativeUri: uri,
+        performance: performance,
+      );
+      if (file != null) {
+        parted.add(file);
+        file.referencingFiles.add(owner);
+      }
+    }
+
+    ofLibrary.add(owner);
+    ofLibrary.addAll(parted);
+  }
+
+  /// Return all directly referenced files - imported, exported or parted.
+  Set<FileState> get directReferencedFiles {
+    return <FileState>{...imported, ...exported, ...parted};
+  }
+
+  /// Return all directly referenced libraries - imported or exported.
+  Set<FileState> get directReferencedLibraries {
+    return <FileState>{...imported, ...exported};
+  }
+}
+
+class _FileStateLocation {
+  final FileSystemState _fsState;
+
+  /// The path of the file.
+  final String path;
+
+  /// The URI of the file.
+  final Uri uri;
+
+  /// The [Source] of the file with the [uri].
+  final Source source;
+
+  /// The [WorkspacePackage] that contains this file.
+  ///
+  /// It might be `null` if the file is outside of the workspace.
+  final WorkspacePackage? workspacePackage;
+
+  /// The [FeatureSet] for all files in the analysis context.
+  ///
+  /// Usually it is the feature set of the latest language version, plus
+  /// possibly additional enabled experiments (from the analysis options file,
+  /// or from SDK allowed experiments).
+  ///
+  /// This feature set is then restricted, with the [_packageLanguageVersion],
+  /// or with a `@dart` language override token in the file header.
+  final FeatureSet _contextFeatureSet;
+
+  /// The language version for the package that contains this file.
+  final Version _packageLanguageVersion;
+
+  _FileStateLocation._(
+    this._fsState,
+    this.path,
+    this.uri,
+    this.source,
+    this.workspacePackage,
+    this._contextFeatureSet,
+    this._packageLanguageVersion,
+  );
+
+  File get resource {
+    return _fsState._resourceProvider.getFile(path);
+  }
+
+  FileState? _fileForRelativeUri({
+    FileState? containingLibrary,
+    required String relativeUri,
+    required OperationPerformanceImpl performance,
+  }) {
+    if (relativeUri.isEmpty) {
+      return null;
+    }
+
+    Uri absoluteUri;
+    try {
+      absoluteUri = resolveRelativeUri(uri, Uri.parse(relativeUri));
+    } on FormatException {
+      return null;
+    }
+
+    return _fsState.getFileForUri(
+      containingLibrary: containingLibrary,
+      uri: absoluteUri,
+      performance: performance,
+    );
+  }
+
+  /// This file has a `part of some.library;` directive. Because it does not
+  /// specify the URI of the library, we don't know the library for sure.
+  /// But usually the library is one of the sibling files.
+  FileState? _findPartOfNameLibrary({
+    required OperationPerformanceImpl performance,
+  }) {
+    var resourceProvider = _fsState._resourceProvider;
+    var pathContext = resourceProvider.pathContext;
+
+    var siblings = <Resource>[];
+    try {
+      siblings = resource.parent2.getChildren();
+    } catch (_) {}
+
+    for (var sibling in siblings) {
+      if (file_paths.isDart(pathContext, sibling.path)) {
+        var siblingState = _fsState.getFileForPath(
+          path: sibling.path,
+          performance: performance,
+        );
+        if (siblingState.files().parted.any((part) => part.path == path)) {
+          return siblingState;
+        }
+      }
+    }
+  }
+
+  _ContentWithDigest _getContent() {
+    String content;
+    try {
+      content = resource.readAsStringSync();
+    } catch (_) {
+      content = '';
+    }
+
+    var digestStr = _fsState.getFileDigest(path);
+    var digest = utf8.encode(digestStr) as Uint8List;
+
+    return _ContentWithDigest(content: content, digest: digest);
+  }
+}
+
+class _FileStateUnlinked {
+  final _FileStateLocation location;
+  FileState? _partOfLibrary;
+
+  final Uint8List digest;
+  final bool exists;
+  final CiderUnlinkedUnit unlinked;
+
+  /// id of the cache entry with unlinked data.
+  final int unlinkedId;
+
+  factory _FileStateUnlinked({
+    required _FileStateLocation location,
+    required FileState? partOfLibrary,
+    required OperationPerformanceImpl performance,
+  }) {
+    location._fsState.testView.refreshedFiles.add(location.path);
+
+    int unlinkedId;
+    CiderUnlinkedUnit unlinked;
+
+    var digest = performance.run('digest', (performance) {
+      performance.getDataInt('count').increment();
+      var digestStr = location._fsState.getFileDigest(location.path);
+      return utf8.encode(digestStr) as Uint8List;
+    });
+
+    var exists = digest.isNotEmpty;
+
+    var unlinkedKey = '${location.path}.unlinked';
+    var isUnlinkedFromCache = true;
+
+    // Prepare bytes of the unlinked bundle - existing or new.
+    // TODO(migration): should not be nullable
+    Uint8List? unlinkedBytes;
+    {
+      var unlinkedData = location._fsState._byteStore.get(unlinkedKey, digest);
+      unlinkedBytes = unlinkedData?.bytes;
+
+      if (unlinkedBytes == null || unlinkedBytes.isEmpty) {
+        isUnlinkedFromCache = false;
+
+        var contentWithDigest = performance.run('content', (_) {
+          return location._getContent();
+        });
+        digest = contentWithDigest.digest;
+        var content = contentWithDigest.content;
+
+        var unit = performance.run('parse', (performance) {
+          performance.getDataInt('count').increment();
+          performance.getDataInt('length').add(content.length);
+          return parse(AnalysisErrorListener.NULL_LISTENER, location, content);
+        });
+
+        performance.run('unlinked', (performance) {
+          var unlinkedUnit = serializeAstCiderUnlinked(unit);
+          unlinkedBytes = unlinkedUnit.toBytes();
+          performance.getDataInt('length').add(unlinkedBytes!.length);
+          unlinkedData = location._fsState._byteStore
+              .putGet(unlinkedKey, digest, unlinkedBytes!);
+          unlinkedBytes = unlinkedData!.bytes;
+        });
+
+        unlinked = CiderUnlinkedUnit.fromBytes(unlinkedBytes!);
+      }
+      unlinkedId = unlinkedData!.id;
+    }
+
+    // Read the unlinked bundle.
+    unlinked = CiderUnlinkedUnit.fromBytes(unlinkedBytes!);
+
+    var result = _FileStateUnlinked._(
+      location: location,
+      partOfLibrary: partOfLibrary,
+      digest: digest,
+      exists: exists,
+      unlinked: unlinked,
+      unlinkedId: unlinkedId,
+    );
+    if (isUnlinkedFromCache) {
+      performance.run('prefetch', (_) {
+        result._prefetchDirectReferences();
+      });
+    }
+    return result;
+  }
+
+  _FileStateUnlinked._({
+    required this.location,
+    required FileState? partOfLibrary,
+    required this.digest,
+    required this.exists,
+    required this.unlinked,
+    required this.unlinkedId,
+  }) : _partOfLibrary = partOfLibrary;
+
+  FileState? get partOfLibrary {
+    var partOfLibrary = _partOfLibrary;
+    if (partOfLibrary != null) {
+      return partOfLibrary;
+    }
+
+    var performance = OperationPerformanceImpl('<root>');
+
+    var libraryName = unlinked.unit.partOfName;
+    if (libraryName != null) {
+      location._fsState.testView.partsDiscoveredLibraries.add(location.path);
+      return _partOfLibrary = location._findPartOfNameLibrary(
+        performance: performance,
+      );
+    }
+
+    var libraryUri = unlinked.unit.partOfUri;
+    if (libraryUri != null) {
+      location._fsState.testView.partsDiscoveredLibraries.add(location.path);
+      return _partOfLibrary = location._fileForRelativeUri(
+        relativeUri: libraryUri,
+        performance: performance,
+      );
+    }
+  }
+
+  void _prefetchDirectReferences() {
+    if (location._fsState.prefetchFiles == null) {
+      return;
+    }
+
+    var paths = <String>{};
+
+    /// TODO(scheglov) This is duplicate.
+    void findPathForUri(String relativeUri) {
+      if (relativeUri.isEmpty) {
+        return;
+      }
+      Uri absoluteUri;
+      try {
+        absoluteUri = resolveRelativeUri(location.uri, Uri.parse(relativeUri));
+      } on FormatException {
+        return;
+      }
+      var p = location._fsState.getPathForUri(absoluteUri);
+      if (p != null) {
+        paths.add(p);
+      }
+    }
+
+    var unlinkedUnit = unlinked.unit;
+    for (var directive in unlinkedUnit.imports) {
+      findPathForUri(directive.uri);
+    }
+    for (var directive in unlinkedUnit.exports) {
+      findPathForUri(directive.uri);
+    }
+    for (var uri in unlinkedUnit.parts) {
+      findPathForUri(uri);
+    }
+
+    location._fsState.prefetchFiles!(paths.toList());
+  }
+
+  static CompilationUnitImpl parse(AnalysisErrorListener errorListener,
+      _FileStateLocation location, String content) {
+    CharSequenceReader reader = CharSequenceReader(content);
+    Scanner scanner = Scanner(location.source, reader, errorListener)
+      ..configureFeatures(
+        featureSetForOverriding: location._contextFeatureSet,
+        featureSet: location._contextFeatureSet.restrictToVersion(
+          location._packageLanguageVersion,
+        ),
+      );
+    Token token = scanner.tokenize(reportScannerErrors: false);
+    LineInfo lineInfo = LineInfo(scanner.lineStarts);
+
+    // Pass the feature set from the scanner to the parser
+    // because the scanner may have detected a language version comment
+    // and downgraded the feature set it holds.
+    Parser parser = Parser(
+      location.source,
+      errorListener,
+      featureSet: scanner.featureSet,
+    );
+    parser.enableOptionalNewAndConst = true;
+    var unit = parser.parseCompilationUnit(token);
+    unit.lineInfo = lineInfo;
+
+    // StringToken uses a static instance of StringCanonicalizer, so we need
+    // to clear it explicitly once we are done using it for this file.
+    StringToken.canonicalizer.clear();
+
+    // TODO(scheglov) Use actual versions.
+    unit.languageVersion = LibraryLanguageVersion(
+      package: ExperimentStatus.currentVersion,
+      override: null,
+    );
+
+    return unit;
+  }
+
+  static CiderUnlinkedUnit serializeAstCiderUnlinked(CompilationUnit unit) {
+    var exports = <UnlinkedNamespaceDirective>[];
+    var imports = <UnlinkedNamespaceDirective>[];
+    var parts = <String>[];
+    var hasDartCoreImport = false;
+    var hasLibraryDirective = false;
+    var hasPartOfDirective = false;
+    String? partOfName;
+    String? partOfUriStr;
+    for (var directive in unit.directives) {
+      if (directive is ExportDirective) {
+        var builder = _serializeNamespaceDirective(directive);
+        exports.add(builder);
+      } else if (directive is ImportDirective) {
+        var builder = _serializeNamespaceDirective(directive);
+        imports.add(builder);
+        if (builder.uri == 'dart:core') {
+          hasDartCoreImport = true;
+        }
+      } else if (directive is LibraryDirective) {
+        hasLibraryDirective = true;
+      } else if (directive is PartDirective) {
+        var uriStr = directive.uri.stringValue;
+        parts.add(uriStr ?? '');
+      } else if (directive is PartOfDirective) {
+        hasPartOfDirective = true;
+        var libraryName = directive.libraryName;
+        var uriStr = directive.uri?.stringValue;
+        if (libraryName != null) {
+          partOfName = libraryName.components.map((e) => e.name).join('.');
+        } else if (uriStr != null) {
+          partOfUriStr = uriStr;
+        }
+      }
+    }
+    if (!hasDartCoreImport) {
+      imports.add(
+        UnlinkedNamespaceDirective(
+          configurations: [],
+          uri: 'dart:core',
+        ),
+      );
+    }
+
+    var declaredExtensions = <String>[];
+    var declaredFunctions = <String>[];
+    var declaredTypes = <String>[];
+    var declaredVariables = <String>[];
+    for (var declaration in unit.declarations) {
+      if (declaration is ClassDeclaration) {
+        declaredTypes.add(declaration.name.name);
+      } else if (declaration is EnumDeclaration) {
+        declaredTypes.add(declaration.name.name);
+      } else if (declaration is ExtensionDeclaration) {
+        var name = declaration.name;
+        if (name != null) {
+          declaredExtensions.add(name.name);
+        }
+      } else if (declaration is FunctionDeclaration) {
+        declaredFunctions.add(declaration.name.name);
+      } else if (declaration is MixinDeclaration) {
+        declaredTypes.add(declaration.name.name);
+      } else if (declaration is TopLevelVariableDeclaration) {
+        for (var variable in declaration.variables.variables) {
+          declaredVariables.add(variable.name.name);
+        }
+      }
+    }
+
+    var unlinkedUnit = UnlinkedUnit(
+      apiSignature: computeUnlinkedApiSignature(unit),
+      exports: exports,
+      hasLibraryDirective: hasLibraryDirective,
+      hasPartOfDirective: hasPartOfDirective,
+      imports: imports,
+      informativeBytes: writeUnitInformative(unit),
+      lineStarts: Uint32List.fromList(unit.lineInfo!.lineStarts),
+      partOfName: partOfName,
+      partOfUri: partOfUriStr,
+      parts: parts,
+    );
+
+    return CiderUnlinkedUnit(
+      unit: unlinkedUnit,
+      topLevelDeclarations: CiderUnitTopLevelDeclarations(
+        extensionNames: declaredExtensions,
+        functionNames: declaredFunctions,
+        typeNames: declaredTypes,
+        variableNames: declaredVariables,
+      ),
+    );
+  }
+
+  static UnlinkedNamespaceDirective _serializeNamespaceDirective(
+    NamespaceDirective directive,
+  ) {
+    return UnlinkedNamespaceDirective(
+      configurations: directive.configurations.map((configuration) {
+        var name = configuration.name.components.join('.');
+        var value = configuration.value?.stringValue ?? '';
+        return UnlinkedNamespaceDirectiveConfiguration(
+          name: name,
+          value: value,
+          uri: configuration.uri.stringValue ?? '',
+        );
+      }).toList(),
+      uri: directive.uri.stringValue ?? '',
+    );
+  }
+}
+
 /// Node in [_LibraryWalker].
 class _LibraryNode extends graph.Node<_LibraryNode> {
   final _LibraryWalker walker;
@@ -849,7 +1098,7 @@
 
   @override
   List<_LibraryNode> computeDependencies() {
-    return file.directReferencedLibraries.map(walker.getNode).toList();
+    return file.files().directReferencedLibraries.map(walker.getNode).toList();
   }
 }
 
@@ -883,8 +1132,8 @@
     // Append direct referenced cycles.
     for (var node in scc) {
       var file = node.file;
-      _appendDirectlyReferenced(cycle, signature, file.importedFiles);
-      _appendDirectlyReferenced(cycle, signature, file.exportedFiles);
+      _appendDirectlyReferenced(cycle, signature, file.files().imported);
+      _appendDirectlyReferenced(cycle, signature, file.files().exported);
     }
 
     // Fill the cycle with libraries.
@@ -893,8 +1142,8 @@
 
       signature.addString(node.file.uriStr);
 
-      signature.addInt(node.file.libraryFiles.length);
-      for (var file in node.file.libraryFiles) {
+      signature.addInt(node.file.files().ofLibrary.length);
+      for (var file in node.file.files().ofLibrary) {
         signature.addBool(file.exists);
         signature.addBytes(file.apiSignature);
       }
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index daf5dbd..89c1fe0 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -11,7 +11,6 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
 import 'package:analyzer/src/context/packages.dart';
-import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/context_root.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart' show ErrorEncoding;
 import 'package:analyzer/src/dart/analysis/experiments.dart';
@@ -116,13 +115,11 @@
   FileResolver(
     PerformanceLog logger,
     ResourceProvider resourceProvider,
-    @deprecated ByteStore byteStore,
     SourceFactory sourceFactory,
     String Function(String path) getFileDigest,
     void Function(List<String> paths)? prefetchFiles, {
     required Workspace workspace,
     bool Function(String path)? isGenerated,
-    @deprecated Duration? libraryContextResetTimeout,
   }) : this.from(
           logger: logger,
           resourceProvider: resourceProvider,
@@ -131,9 +128,6 @@
           prefetchFiles: prefetchFiles,
           workspace: workspace,
           isGenerated: isGenerated,
-
-          // ignore: deprecated_member_use_from_same_package
-          libraryContextResetTimeout: libraryContextResetTimeout,
         );
 
   FileResolver.from({
@@ -145,7 +139,6 @@
     required Workspace workspace,
     bool Function(String path)? isGenerated,
     CiderByteStore? byteStore,
-    @deprecated Duration? libraryContextResetTimeout,
   })  : logger = logger,
         sourceFactory = sourceFactory,
         resourceProvider = resourceProvider,
@@ -175,7 +168,6 @@
     // Schedule disposing references to cached unlinked data.
     for (var removedFile in removedFiles) {
       removedCacheIds.add(removedFile.unlinkedId);
-      removedCacheIds.add(removedFile.informativeId);
     }
 
     // Remove libraries represented by removed files.
@@ -192,9 +184,6 @@
     removedCacheIds.addAll(libraryContext!.collectSharedDataIdentifiers());
   }
 
-  @deprecated
-  void dispose() {}
-
   /// Looks for references to the Element at the given offset and path. All the
   /// files currently cached by the resolver are searched, generated files are
   /// ignored.
@@ -275,17 +264,6 @@
     });
   }
 
-  @deprecated
-  ErrorsResult getErrors2({
-    required String path,
-    OperationPerformanceImpl? performance,
-  }) {
-    return getErrors(
-      path: path,
-      performance: performance,
-    );
-  }
-
   FileContext getFileContext({
     required String path,
     required OperationPerformanceImpl performance,
@@ -313,6 +291,17 @@
     });
   }
 
+  /// Return files that have a top-level declaration with the [name].
+  List<FileWithTopLevelDeclaration> getFilesWithTopLevelDeclarations(
+    String name,
+  ) {
+    final fsState = this.fsState;
+    if (fsState == null) {
+      return const [];
+    }
+    return fsState.getFilesWithTopLevelDeclarations(name);
+  }
+
   LibraryElement getLibraryByUri({
     required String uriStr,
     OperationPerformanceImpl? performance,
@@ -415,7 +404,6 @@
     var removedFiles = fsState!.removeUnusedFiles(files);
     for (var removedFile in removedFiles) {
       removedCacheIds.add(removedFile.unlinkedId);
-      removedCacheIds.add(removedFile.informativeId);
     }
   }
 
@@ -442,7 +430,7 @@
       var libraryFile = file;
       var partOfLibrary = file.partOfLibrary;
       if (partOfLibrary != null) {
-        if (partOfLibrary.libraryFiles.contains(file)) {
+        if (partOfLibrary.files().ofLibrary.contains(file)) {
           libraryFile = partOfLibrary;
         }
       }
@@ -489,7 +477,7 @@
       var libraryFile = file;
       var partOfLibrary = file.partOfLibrary;
       if (partOfLibrary != null) {
-        if (partOfLibrary.libraryFiles.contains(file)) {
+        if (partOfLibrary.files().ofLibrary.contains(file)) {
           libraryFile = partOfLibrary;
         }
       }
@@ -521,7 +509,7 @@
           libraryContext!.elementFactory,
           contextObjects!.inheritanceManager,
           libraryFile,
-          (file) => file.getContentWithSameDigest(),
+          (file) => file.getContent(),
         );
 
         try {
@@ -534,7 +522,7 @@
           });
         } catch (exception, stackTrace) {
           var fileContentMap = <String, String>{};
-          for (var file in libraryFile.libraryFiles) {
+          for (var file in libraryFile.files().ofLibrary) {
             var path = file.path;
             fileContentMap[path] = _getFileContent(path);
           }
@@ -555,7 +543,7 @@
           file.exists,
           file.getContent(),
           file.lineInfo,
-          file.unlinked2.hasPartOfDirective,
+          file.unlinkedUnit.hasPartOfDirective,
           fileResult.unit,
           fileResult.errors,
         );
@@ -610,9 +598,7 @@
         byteStore,
         sourceFactory,
         workspace,
-        analysisOptions,
-        Uint32List(0),
-        // linkedSalt
+        Uint32List(0), // linkedSalt
         featureSetProvider,
         getFileDigest,
         prefetchFiles,
@@ -836,11 +822,9 @@
 
       var unitsInformativeBytes = <Uri, Uint8List>{};
       for (var library in cycle.libraries) {
-        for (var file in library.libraryFiles) {
-          var informativeBytes = file.informativeBytes;
-          if (informativeBytes != null) {
-            unitsInformativeBytes[file.uri] = informativeBytes;
-          }
+        for (var file in library.files().ofLibrary) {
+          var informativeBytes = file.unlinkedUnit.informativeBytes;
+          unitsInformativeBytes[file.uri] = informativeBytes;
         }
       }
 
@@ -854,10 +838,10 @@
 
           var inputUnits = <link2.LinkInputUnit>[];
           var partIndex = -1;
-          for (var file in libraryFile.libraryFiles) {
+          for (var file in libraryFile.files().ofLibrary) {
             var isSynthetic = !file.exists;
 
-            var content = file.getContentWithSameDigest();
+            var content = file.getContent();
             performance.getDataInt('parseCount').increment();
             performance.getDataInt('parseLength').add(content.length);
 
@@ -868,7 +852,7 @@
 
             String? partUriStr;
             if (partIndex >= 0) {
-              partUriStr = libraryFile.unlinked2.parts[partIndex];
+              partUriStr = libraryFile.unlinkedUnit.parts[partIndex];
             }
             partIndex++;
 
@@ -893,7 +877,7 @@
         }
         inputsTimer.stop();
 
-        var linkResult = link2.link(elementFactory, inputLibraries, true);
+        var linkResult = link2.link(elementFactory, inputLibraries);
         librariesLinked += cycle.libraries.length;
 
         resolutionBytes = linkResult.resolutionBytes;
@@ -910,7 +894,7 @@
           BundleReader(
             elementFactory: elementFactory,
             unitsInformativeBytes: unitsInformativeBytes,
-            resolutionBytes: resolutionBytes as Uint8List,
+            resolutionBytes: resolutionBytes,
           ),
         );
       }
diff --git a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
index 7882635..718c99b 100644
--- a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
@@ -128,7 +128,7 @@
   /// when it returns 'void'. Or, in rare cases, when other types of expressions
   /// are void, such as identifiers.
   ///
-  /// See [StaticWarningCode.USE_OF_VOID_RESULT].
+  /// See [CompileTimeErrorCode.USE_OF_VOID_RESULT].
   /// TODO(scheglov) this is duplicate
   bool _checkForUseOfVoidResult(Expression expression) {
     if (!identical(expression.staticType, VoidTypeImpl.instance)) {
@@ -204,9 +204,10 @@
     DartType assignedType;
     DartType nodeType;
 
+    var rightHandSide = node.rightHandSide;
     var operator = node.operator.type;
     if (operator == TokenType.EQ) {
-      assignedType = node.rightHandSide.typeOrThrow;
+      assignedType = rightHandSide.typeOrThrow;
       nodeType = assignedType;
     } else if (operator == TokenType.QUESTION_QUESTION_EQ) {
       var leftType = node.readType!;
@@ -216,7 +217,7 @@
         leftType = _typeSystem.promoteToNonNull(leftType);
       }
 
-      assignedType = node.rightHandSide.typeOrThrow;
+      assignedType = rightHandSide.typeOrThrow;
       nodeType = _typeSystem.getLeastUpperBound(leftType, assignedType);
     } else if (operator == TokenType.AMPERSAND_AMPERSAND_EQ ||
         operator == TokenType.BAR_BAR_EQ) {
@@ -226,7 +227,7 @@
       var operatorElement = node.staticElement;
       if (operatorElement != null) {
         var leftType = node.readType!;
-        var rightType = node.rightHandSide.typeOrThrow;
+        var rightType = rightHandSide.typeOrThrow;
         assignedType = _typeSystem.refineBinaryExpressionType(
           leftType,
           operator,
@@ -241,6 +242,10 @@
     }
 
     _inferenceHelper.recordStaticType(node, nodeType);
+    var callReference = _resolver.insertImplicitCallReference(rightHandSide);
+    if (callReference != rightHandSide) {
+      assignedType = callReference.typeOrThrow;
+    }
 
     // TODO(scheglov) Remove from ErrorVerifier?
     _checkForInvalidAssignment(
diff --git a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
index 1b78dc9..25dfe1a 100644
--- a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
@@ -282,11 +282,6 @@
       return node;
     }
     var receiver = node.target!;
-    var propertyName = node.propertyName;
-    if (propertyName.isSynthetic) {
-      // This isn't a constructor reference.
-      return node;
-    }
 
     Identifier receiverIdentifier;
     TypeArgumentList? typeArguments;
@@ -388,7 +383,7 @@
       _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
           typeArguments,
-          [classElement.name, constructorElement.name]);
+          [typeNameIdentifier.toString(), constructorIdentifier.name]);
     }
 
     var typeName = astFactory.namedType(
@@ -506,7 +501,7 @@
       _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
           typeArguments,
-          [classElement.name, constructorElement.name]);
+          [typeIdentifier.name, constructorIdentifier.name]);
     }
     var typeName = astFactory.namedType(name: typeIdentifier);
     var constructorName = astFactory.constructorName(
diff --git a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
index 6ec66b7..ad08e2b 100644
--- a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
@@ -285,10 +285,12 @@
           leftOperand.extensionName.staticElement as ExtensionElement;
       var member = extension.getMethod(methodName);
       if (member == null) {
+        // Extension overrides can only be used with named extensions so it is
+        // safe to assume `extension.name` is non-`null`.
         _errorReporter.reportErrorForToken(
           CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
           node.operator,
-          [methodName, extension.name],
+          [methodName, extension.name!],
         );
       }
       node.staticElement = member;
diff --git a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
index a9fd9af..ceecf70 100644
--- a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
@@ -70,7 +70,7 @@
             node,
             [name.name],
           );
-        } else {
+        } else if (!name.isSynthetic) {
           _resolver.errorReporter.reportErrorForNode(
             CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER,
             node,
diff --git a/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart b/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart
index 7a39ba8..077946d 100644
--- a/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart
@@ -369,6 +369,11 @@
   }
 
   @override
+  bool visitImplicitCallReference(ImplicitCallReference node) {
+    return _nodeExits(node.expression);
+  }
+
+  @override
   bool visitIndexExpression(IndexExpression node) {
     Expression target = node.realTarget;
     if (_nodeExits(target)) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
index 3f5ac4f..c7afae0 100644
--- a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
@@ -35,6 +35,9 @@
   bool get _genericMetadataIsEnabled =>
       _resolver.definingLibrary.featureSet.isEnabled(Feature.generic_metadata);
 
+  bool get _isNonNullableByDefault =>
+      _resolver.definingLibrary.featureSet.isEnabled(Feature.non_nullable);
+
   TypeProvider get _typeProvider => _resolver.typeProvider;
 
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
@@ -73,9 +76,15 @@
           nameEntity.length,
           [
             name,
-            noneMoreSpecific
-                .map((e) => e.extension.name ?? '<unnamed>')
-                .quotedAndCommaSeparatedWithAnd,
+            noneMoreSpecific.map((e) {
+              var name = e.extension.name;
+              if (name != null) {
+                return "extension '$name'";
+              }
+              var type = e.extension.extendedType
+                  .getDisplayString(withNullability: _isNonNullableByDefault);
+              return "unnamed extension on '$type'";
+            }).commaSeparatedWithAnd,
           ],
         );
         return ResolutionResult.ambiguous;
@@ -163,7 +172,8 @@
       typeArgumentTypes,
     );
 
-    nodeImpl.extendedType = substitution.substituteType(element.extendedType);
+    var extendedType = nodeImpl.extendedType =
+        substitution.substituteType(element.extendedType);
 
     _checkTypeArgumentsMatchingBounds(
       typeParameters,
@@ -175,13 +185,13 @@
     if (receiverType.isVoid) {
       _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.USE_OF_VOID_RESULT, receiverExpression);
-    } else if (!_typeSystem.isAssignableTo(receiverType, node.extendedType!)) {
+    } else if (!_typeSystem.isAssignableTo(receiverType, extendedType)) {
       var whyNotPromoted =
           whyNotPromotedList.isEmpty ? null : whyNotPromotedList[0];
       _errorReporter.reportErrorForNode(
         CompileTimeErrorCode.EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE,
         receiverExpression,
-        [receiverType, node.extendedType],
+        [receiverType, extendedType],
         _resolver.computeWhyNotPromotedMessages(
             receiverExpression, whyNotPromoted?.call()),
       );
@@ -422,10 +432,13 @@
         }
         return arguments.map((a) => a.typeOrThrow).toList();
       } else {
+        // We can safely assume `element.name` is non-`null` because type
+        // arguments can only be applied to explicit extension overrides, and
+        // explicit extension overrides cannot refer to unnamed extensions.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION,
           typeArguments,
-          [element.name, typeParameters.length, arguments.length],
+          [element.name!, typeParameters.length, arguments.length],
         );
         return _listOfDynamic(typeParameters);
       }
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_expression_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_expression_invocation_resolver.dart
index 48a6c65..42070dc 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_expression_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_expression_invocation_resolver.dart
@@ -84,7 +84,7 @@
   /// when it returns 'void'. Or, in rare cases, when other types of expressions
   /// are void, such as identifiers.
   ///
-  /// See [StaticWarningCode.USE_OF_VOID_RESULT].
+  /// See [CompileTimeErrorCode.USE_OF_VOID_RESULT].
   ///
   /// TODO(scheglov) this is duplicate
   bool _checkForUseOfVoidResult(Expression expression, DartType type) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
index a611f9f..da8742a 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -58,10 +58,13 @@
       if (typeArguments != null) {
         // Something like `List.filled<int>`.
         function.accept(_resolver);
+        // We can safely assume `function.constructorName.name` is non-null
+        // because if no name had been given, the construct would have been
+        // interpreted as a type literal (e.g. `List<int>`).
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
           typeArguments,
-          [function.constructorName.type2.name, function.constructorName.name],
+          [function.constructorName.type2.name, function.constructorName.name!],
         );
         _resolve(node: node, rawType: function.staticType);
       }
@@ -75,10 +78,10 @@
       } else if (functionType is FunctionType) {
         _resolve(node: node, rawType: functionType);
       } else {
-        var callMethodType =
-            _resolver.typeSystem.getCallMethodType(functionType);
-        if (callMethodType != null) {
-          _resolve(node: node, rawType: callMethodType);
+        var callMethod = _getCallMethod(node, function.staticType);
+        if (callMethod is MethodElement) {
+          _resolveAsImplicitCallReference(node, callMethod);
+          return;
         } else {
           _resolveDisallowedExpression(node, functionType);
         }
@@ -95,7 +98,7 @@
     if (prefixElement is VariableElement) {
       prefixType = prefixElement.type;
     } else if (prefixElement is PropertyAccessorElement) {
-      prefixType = prefixElement.returnType;
+      prefixType = prefixElement.variable.type;
     }
 
     if (prefixType != null && prefixType.isDynamic) {
@@ -132,7 +135,7 @@
         _errorReporter.reportErrorForNode(
           errorCode,
           typeArgumentList,
-          [name, typeParameters.length, typeArgumentList.arguments.length],
+          [name!, typeParameters.length, typeArgumentList.arguments.length],
         );
       }
       return List.filled(typeParameters.length, DynamicTypeImpl.instance);
@@ -143,32 +146,71 @@
     }
   }
 
+  ExecutableElement? _getCallMethod(
+      FunctionReferenceImpl node, DartType? type) {
+    if (type is! InterfaceType) {
+      return null;
+    }
+    if (type.nullabilitySuffix == NullabilitySuffix.question) {
+      // If the interface type is nullable, only an applicable extension method
+      // applies.
+      return _extensionResolver
+          .findExtension(type, node, FunctionElement.CALL_METHOD_NAME)
+          .getter;
+    }
+    // Otherwise, a 'call' method on the interface, or on an applicable
+    // extension method applies.
+    return type.lookUpMethod2(
+            FunctionElement.CALL_METHOD_NAME, type.element.library) ??
+        _extensionResolver
+            .findExtension(type, node, FunctionElement.CALL_METHOD_NAME)
+            .getter;
+  }
+
   void _reportInvalidAccessToStaticMember(
     SimpleIdentifier nameNode,
     ExecutableElement element, {
     required bool implicitReceiver,
   }) {
-    if (_resolver.enclosingExtension != null) {
+    var enclosingElement = element.enclosingElement;
+    if (implicitReceiver) {
+      if (_resolver.enclosingExtension != null) {
+        _resolver.errorReporter.reportErrorForNode(
+          CompileTimeErrorCode
+              .UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,
+          nameNode,
+          [enclosingElement.displayName],
+        );
+      } else {
+        _resolver.errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER,
+          nameNode,
+          [enclosingElement.displayName],
+        );
+      }
+    } else if (enclosingElement is ExtensionElement &&
+        enclosingElement.name == null) {
       _resolver.errorReporter.reportErrorForNode(
-        CompileTimeErrorCode
-            .UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,
-        nameNode,
-        [element.enclosingElement.displayName],
-      );
-    } else if (implicitReceiver) {
-      _resolver.errorReporter.reportErrorForNode(
-        CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER,
-        nameNode,
-        [element.enclosingElement.displayName],
-      );
+          CompileTimeErrorCode
+              .INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION,
+          nameNode,
+          [
+            nameNode.name,
+            element.kind.displayName,
+          ]);
     } else {
+      // It is safe to assume that `enclosingElement.name` is non-`null` because
+      // it can only be `null` for extensions, and we handle that case above.
       _resolver.errorReporter.reportErrorForNode(
         CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER,
         nameNode,
         [
           nameNode.name,
           element.kind.displayName,
-          element.enclosingElement.displayName,
+          enclosingElement.name!,
+          enclosingElement is ClassElement && enclosingElement.isMixin
+              ? 'mixin'
+              : enclosingElement.kind.displayName,
         ],
       );
     }
@@ -200,15 +242,21 @@
       if (node.function is ConstructorReference) {
         node.staticType = DynamicTypeImpl.instance;
       } else {
-        var typeArguments = _checkTypeArguments(
-          // `node.typeArguments`, coming from the parser, is never null.
-          node.typeArguments!, name, rawType.typeFormals,
-          CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION,
-        );
+        var typeArguments = node.typeArguments;
+        if (typeArguments == null) {
+          node.staticType = rawType;
+        } else {
+          var typeArgumentTypes = _checkTypeArguments(
+            typeArguments,
+            name,
+            rawType.typeFormals,
+            CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION,
+          );
 
-        var invokeType = rawType.instantiate(typeArguments);
-        node.typeArgumentTypes = typeArguments;
-        node.staticType = invokeType;
+          var invokeType = rawType.instantiate(typeArgumentTypes);
+          node.typeArgumentTypes = typeArgumentTypes;
+          node.staticType = invokeType;
+        }
       }
     } else {
       if (_resolver.isConstructorTearoffsEnabled) {
@@ -224,6 +272,27 @@
     }
   }
 
+  void _resolveAsImplicitCallReference(
+      FunctionReferenceImpl node, MethodElement callMethod) {
+    // `node<...>` is to be treated as `node.call<...>`.
+    var callMethodType = callMethod.type;
+    var typeArgumentTypes = _checkTypeArguments(
+      // `node.typeArguments`, coming from the parser, is never null.
+      node.typeArguments!, FunctionElement.CALL_METHOD_NAME,
+      callMethodType.typeFormals,
+      CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION,
+    );
+    var callReference = astFactory.implicitCallReference(
+      expression: node.function,
+      staticElement: callMethod,
+      typeArguments: node.typeArguments,
+      typeArgumentTypes: typeArgumentTypes,
+    );
+    NodeReplacer.replace(node, callReference);
+    var instantiatedType = callMethodType.instantiate(typeArgumentTypes);
+    callReference.staticType = instantiatedType;
+  }
+
   void _resolveConstructorReference(FunctionReferenceImpl node) {
     // TODO(srawlins): Rewrite and resolve [node] as a constructor reference.
     node.function.accept(_resolver);
@@ -406,6 +475,11 @@
   void _resolvePropertyAccessFunction(
       FunctionReferenceImpl node, PropertyAccessImpl function) {
     function.accept(_resolver);
+    var callMethod = _getCallMethod(node, function.staticType);
+    if (callMethod is MethodElement) {
+      _resolveAsImplicitCallReference(node, callMethod);
+      return;
+    }
     var target = function.realTarget;
 
     DartType targetType;
@@ -418,7 +492,7 @@
       if (targetElement is VariableElement) {
         targetType = targetElement.type;
       } else if (targetElement is PropertyAccessorElement) {
-        targetType = targetElement.returnType;
+        targetType = targetElement.variable.type;
       } else {
         // TODO(srawlins): Can we get here?
         node.staticType = DynamicTypeImpl.instance;
@@ -519,6 +593,11 @@
       }
     } else if (element is ExecutableElement) {
       node.function.accept(_resolver);
+      var callMethod = _getCallMethod(node, node.function.staticType);
+      if (callMethod is MethodElement) {
+        _resolveAsImplicitCallReference(node, callMethod);
+        return;
+      }
       _resolve(
         node: node,
         rawType: node.function.typeOrThrow as FunctionType,
@@ -583,7 +662,9 @@
         }
 
         if (method is PropertyAccessorElement) {
-          _resolve(node: node, rawType: method.returnType);
+          function.staticElement = method;
+          function.staticType = method.returnType;
+          _resolve(node: node, rawType: method.variable.type);
           return;
         }
 
@@ -595,7 +676,7 @@
         _resolver.errorReporter.reportErrorForNode(
           CompileTimeErrorCode.UNDEFINED_METHOD,
           function,
-          [function.name, enclosingClass],
+          [function.name, receiverType],
         );
         function.staticType = DynamicTypeImpl.instance;
         node.staticType = DynamicTypeImpl.instance;
@@ -640,7 +721,12 @@
       return;
     } else if (element is PropertyAccessorElement) {
       function.staticElement = element;
-      function.staticType = element.returnType;
+      function.staticType = element.variable.type;
+      var callMethod = _getCallMethod(node, element.variable.type);
+      if (callMethod is MethodElement) {
+        _resolveAsImplicitCallReference(node, callMethod);
+        return;
+      }
       _resolve(node: node, rawType: element.returnType);
       return;
     } else if (element is ExecutableElement) {
@@ -651,6 +737,11 @@
     } else if (element is VariableElement) {
       function.staticElement = element;
       function.staticType = element.type;
+      var callMethod = _getCallMethod(node, element.type);
+      if (callMethod is MethodElement) {
+        _resolveAsImplicitCallReference(node, callMethod);
+        return;
+      }
       _resolve(node: node, rawType: element.type);
       return;
     } else if (element is ExtensionElement) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index 6833dd3..ab438c7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -218,27 +218,45 @@
     ExecutableElement element,
     bool nullReceiver,
   ) {
-    if (_resolver.enclosingExtension != null) {
+    var enclosingElement = element.enclosingElement;
+    if (nullReceiver) {
+      if (_resolver.enclosingExtension != null) {
+        _resolver.errorReporter.reportErrorForNode(
+          CompileTimeErrorCode
+              .UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,
+          nameNode,
+          [enclosingElement.displayName],
+        );
+      } else {
+        _resolver.errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER,
+          nameNode,
+          [enclosingElement.displayName],
+        );
+      }
+    } else if (enclosingElement is ExtensionElement &&
+        enclosingElement.name == null) {
       _resolver.errorReporter.reportErrorForNode(
-        CompileTimeErrorCode
-            .UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,
-        nameNode,
-        [element.enclosingElement.displayName],
-      );
-    } else if (nullReceiver) {
-      _resolver.errorReporter.reportErrorForNode(
-        CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER,
-        nameNode,
-        [element.enclosingElement.displayName],
-      );
+          CompileTimeErrorCode
+              .INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION,
+          nameNode,
+          [
+            nameNode.name,
+            element.kind.displayName,
+          ]);
     } else {
+      // It is safe to assume that `enclosingElement.name` is non-`null` because
+      // it can only be `null` for extensions, and we handle that case above.
       _resolver.errorReporter.reportErrorForNode(
         CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER,
         nameNode,
         [
           nameNode.name,
           element.kind.displayName,
-          element.enclosingElement.displayName,
+          enclosingElement.name!,
+          enclosingElement is ClassElement && enclosingElement.isMixin
+              ? 'mixin'
+              : enclosingElement.kind.displayName,
         ],
       );
     }
@@ -375,10 +393,12 @@
     }
 
     _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+    // This method is only called for named extensions, so we know that
+    // `extension.name` is non-`null`.
     _resolver.errorReporter.reportErrorForNode(
       CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD,
       nameNode,
-      [name, extension.name],
+      [name, extension.name!],
     );
   }
 
@@ -393,10 +413,12 @@
 
     if (member == null) {
       _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+      // Extension overrides always refer to named extensions, so we can safely
+      // assume `override.staticElement!.name` is non-`null`.
       _resolver.errorReporter.reportErrorForNode(
         CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD,
         nameNode,
-        [name, override.staticElement!.name],
+        [name, override.staticElement!.name!],
       );
       return;
     }
diff --git a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
index 9cf8cfd..969d189 100644
--- a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
@@ -74,7 +74,7 @@
   /// given [node] is resolved, all its children must be already resolved.
   ///
   /// The client must set [nameScope] before calling [resolve].
-  void resolve(TypeNameImpl node) {
+  void resolve(NamedTypeImpl node) {
     rewriteResult = null;
     hasErrorReported = false;
 
@@ -283,7 +283,7 @@
     }
   }
 
-  void _resolveToElement(TypeNameImpl node, Element? element) {
+  void _resolveToElement(NamedTypeImpl node, Element? element) {
     if (element == null) {
       node.type = dynamicType;
       if (!_libraryElement.shouldIgnoreUndefinedIdentifier(node.name)) {
@@ -306,7 +306,7 @@
   /// will be a [PrefixElement]. But when we resolved the `prefix` it turned
   /// out to be a [ClassElement], so it is probably a `Class.constructor`.
   void _rewriteToConstructorName(
-    TypeNameImpl node,
+    NamedTypeImpl node,
     PrefixedIdentifier typeIdentifier,
   ) {
     var constructorName = node.parent;
diff --git a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
index 87aa6c6..e4476e7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
@@ -146,10 +146,12 @@
         var element = operand.extensionName.staticElement as ExtensionElement;
         var member = element.getMethod(methodName);
         if (member == null) {
+          // Extension overrides always refer to named extensions, so we can
+          // safely assume `element.name` is non-`null`.
           _errorReporter.reportErrorForToken(
               CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
               node.operator,
-              [methodName, element.name]);
+              [methodName, element.name!]);
         }
         node.staticElement = member;
         return;
diff --git a/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
index 14d554a..eb97c1f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
@@ -83,8 +83,15 @@
       type = result.functionTypeCallType!;
     }
 
-    type = _inferenceHelper.inferTearOff(node, identifier, type);
-
+    if (!_resolver.isConstructorTearoffsEnabled) {
+      // Only perform a generic function instantiation on a [PrefixedIdentifier]
+      // in pre-constructor-tearoffs code. In constructor-tearoffs-enabled code,
+      // generic function instantiation is performed at assignability check
+      // sites.
+      // TODO(srawlins): Switch all resolution to use the latter method, in a
+      // breaking change release.
+      type = _inferenceHelper.inferTearOff(node, identifier, type);
+    }
     _recordStaticType(identifier, type);
     _recordStaticType(node, type);
   }
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index e8f3c35..157ba4c 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -45,18 +45,22 @@
 
       // TODO(scheglov) Change ExtensionResolver to set `needsGetterError`.
       if (hasRead && result.getter == null && !result.isAmbiguous) {
+        // Extension overrides can only refer to named extensions, so it is safe
+        // to assume that `target.staticElement!.name` is non-`null`.
         _reportUnresolvedIndex(
           node,
           CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
-          ['[]', target.staticElement!.name],
+          ['[]', target.staticElement!.name!],
         );
       }
 
       if (hasWrite && result.setter == null && !result.isAmbiguous) {
+        // Extension overrides can only refer to named extensions, so it is safe
+        // to assume that `target.staticElement!.name` is non-`null`.
         _reportUnresolvedIndex(
           node,
           CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
-          ['[]=', target.staticElement!.name],
+          ['[]=', target.staticElement!.name!],
         );
       }
 
@@ -248,18 +252,6 @@
     );
   }
 
-  void _checkExtensionOverrideStaticMember(
-    SimpleIdentifier propertyName,
-    ExecutableElement? element,
-  ) {
-    if (element != null && element.isStatic) {
-      _errorReporter.reportErrorForNode(
-        CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER,
-        propertyName,
-      );
-    }
-  }
-
   /// If the [element] is not static, report the error on the [identifier].
   void _checkForStaticAccessToInstanceMember(
     SimpleIdentifier identifier,
@@ -274,6 +266,48 @@
     );
   }
 
+  void _checkForStaticMember(
+    Expression target,
+    SimpleIdentifier propertyName,
+    ExecutableElement? element,
+  ) {
+    if (element != null && element.isStatic) {
+      if (target is ExtensionOverride) {
+        _errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER,
+          propertyName,
+        );
+      } else {
+        var enclosingElement = element.enclosingElement;
+        if (enclosingElement is ExtensionElement &&
+            enclosingElement.name == null) {
+          _resolver.errorReporter.reportErrorForNode(
+              CompileTimeErrorCode
+                  .INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION,
+              propertyName,
+              [
+                propertyName.name,
+                element.kind.displayName,
+              ]);
+        } else {
+          // It is safe to assume that `enclosingElement.name` is non-`null`
+          // because it can only be `null` for extensions, and we handle that
+          // case above.
+          _errorReporter.reportErrorForNode(
+              CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER,
+              propertyName, [
+            propertyName.name,
+            element.kind.displayName,
+            enclosingElement.name!,
+            enclosingElement is ClassElement && enclosingElement.isMixin
+                ? 'mixin'
+                : enclosingElement.kind.displayName,
+          ]);
+        }
+      }
+    }
+  }
+
   DartType? _computeIndexContextType({
     required ExecutableElement? readElement,
     required ExecutableElement? writeElement,
@@ -295,7 +329,7 @@
   void _reportUnresolvedIndex(
     IndexExpression node,
     ErrorCode errorCode, [
-    List<Object?> arguments = const [],
+    List<Object> arguments = const [],
   ]) {
     var leftBracket = node.leftBracket;
     var rightBracket = node.rightBracket;
@@ -417,21 +451,27 @@
         result.getter,
         result.getter?.returnType ?? _typeSystem.typeProvider.dynamicType);
 
-    if (hasRead && result.needsGetterError) {
-      _errorReporter.reportErrorForNode(
-        CompileTimeErrorCode.UNDEFINED_GETTER,
-        propertyName,
-        [propertyName.name, targetType],
-      );
+    if (hasRead) {
+      _checkForStaticMember(target, propertyName, result.getter);
+      if (result.needsGetterError) {
+        _errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.UNDEFINED_GETTER,
+          propertyName,
+          [propertyName.name, targetType],
+        );
+      }
     }
 
-    if (hasWrite && result.needsSetterError) {
-      AssignmentVerifier(_definingLibrary, _errorReporter).verify(
-        node: propertyName,
-        requested: null,
-        recovery: result.getter,
-        receiverTypeObject: targetType,
-      );
+    if (hasWrite) {
+      _checkForStaticMember(target, propertyName, result.setter);
+      if (result.needsSetterError) {
+        AssignmentVerifier(_definingLibrary, _errorReporter).verify(
+          node: propertyName,
+          requested: null,
+          recovery: result.getter,
+          receiverTypeObject: targetType,
+        );
+      }
     }
 
     return PropertyElementResolverResult(
@@ -529,10 +569,13 @@
       readElement ??= extension.getMethod(memberName);
 
       if (readElement == null) {
+        // This method is only called for extension overrides, and extension
+        // overrides can only refer to named extensions.  So it is safe to
+        // assume that `extension.name` is non-`null`.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER,
           propertyName,
-          [memberName, extension.name],
+          [memberName, extension.name!],
         );
       } else {
         readElement = _resolver.toLegacyElement(readElement);
@@ -546,9 +589,12 @@
 
       if (writeElement == null) {
         _errorReporter.reportErrorForNode(
+          // This method is only called for extension overrides, and extension
+          // overrides can only refer to named extensions.  So it is safe to
+          // assume that `extension.name` is non-`null`.
           CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER,
           propertyName,
-          [memberName, extension.name],
+          [memberName, extension.name!],
         );
       } else {
         writeElement = _resolver.toLegacyElement(writeElement);
@@ -585,26 +631,32 @@
     if (hasRead) {
       readElement = result.getter;
       if (readElement == null) {
+        // This method is only called for extension overrides, and extension
+        // overrides can only refer to named extensions.  So it is safe to
+        // assume that `element.name` is non-`null`.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER,
           propertyName,
-          [memberName, element.name],
+          [memberName, element.name!],
         );
       }
-      _checkExtensionOverrideStaticMember(propertyName, readElement);
+      _checkForStaticMember(target, propertyName, readElement);
     }
 
     ExecutableElement? writeElement;
     if (hasWrite) {
       writeElement = result.setter;
       if (writeElement == null) {
+        // This method is only called for extension overrides, and extension
+        // overrides can only refer to named extensions.  So it is safe to
+        // assume that `element.name` is non-`null`.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER,
           propertyName,
-          [memberName, element.name],
+          [memberName, element.name!],
         );
       }
-      _checkExtensionOverrideStaticMember(propertyName, writeElement);
+      _checkForStaticMember(target, propertyName, writeElement);
     }
 
     return PropertyElementResolverResult(
@@ -670,6 +722,7 @@
 
         if (readElement != null) {
           readElement = _resolver.toLegacyElement(readElement);
+          _checkForStaticMember(target, propertyName, readElement);
         } else {
           // We were not able to find the concrete dispatch target.
           // But we would like to give the user at least some resolution.
@@ -708,6 +761,7 @@
 
         if (writeElement != null) {
           writeElement = _resolver.toLegacyElement(writeElement);
+          _checkForStaticMember(target, propertyName, writeElement);
         } else {
           // We were not able to find the concrete dispatch target.
           // But we would like to give the user at least some resolution.
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 1793675..0fb4f74 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -882,7 +882,7 @@
   }
 
   @override
-  void visitNamedType(covariant TypeNameImpl node) {
+  void visitNamedType(covariant NamedTypeImpl node) {
     node.typeArguments?.accept(this);
 
     _typeNameResolver.nameScope = _nameScope;
@@ -1256,7 +1256,7 @@
   /// The flag [asClass] specifies if the type will be used as a class, so mixin
   /// declarations are not valid (they declare interfaces and mixins, but not
   /// classes).
-  void _resolveType(TypeNameImpl namedType, ErrorCode errorCode,
+  void _resolveType(NamedTypeImpl namedType, ErrorCode errorCode,
       {bool asClass = false}) {
     _typeNameResolver.classHierarchy_namedType = namedType;
     visitNamedType(namedType);
@@ -1295,7 +1295,7 @@
   /// @return an array containing all of the types that were resolved.
   void _resolveTypes(NodeList<NamedType> namedTypes, ErrorCode errorCode) {
     for (var namedType in namedTypes) {
-      _resolveType(namedType as TypeNameImpl, errorCode);
+      _resolveType(namedType as NamedTypeImpl, errorCode);
     }
   }
 
@@ -1305,7 +1305,7 @@
     for (var namedType in clause.mixinTypes2) {
       _typeNameResolver.withClause_namedType = namedType;
       _resolveType(
-        namedType as TypeNameImpl,
+        namedType as NamedTypeImpl,
         CompileTimeErrorCode.MIXIN_OF_NON_CLASS,
       );
       _typeNameResolver.withClause_namedType = null;
diff --git a/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
index 198ba56..1f9befa 100644
--- a/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
@@ -12,7 +12,6 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
-import 'package:analyzer/src/dart/resolver/invocation_inference_helper.dart';
 import 'package:analyzer/src/dart/resolver/property_element_resolver.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/resolver.dart';
@@ -25,8 +24,6 @@
 
   ErrorReporter get _errorReporter => _resolver.errorReporter;
 
-  InvocationInferenceHelper get _inferenceHelper => _resolver.inferenceHelper;
-
   TypeProviderImpl get _typeProvider => _resolver.typeProvider;
 
   void resolve(SimpleIdentifierImpl node) {
@@ -183,8 +180,8 @@
         !identical(element, enclosingClass)) {
       // This error is now reported by the parser.
       element = null;
-    } else if (element == null ||
-        (element is PrefixElement && !_isValidAsPrefix(node))) {
+    } else if ((element is PrefixElement?) &&
+        (element == null || !_isValidAsPrefix(node))) {
       // TODO(brianwilkerson) Recover from this error.
       if (_isConstructorReturnType(node)) {
         _errorReporter.reportErrorForNode(
@@ -259,7 +256,17 @@
     } else {
       staticType = DynamicTypeImpl.instance;
     }
-    staticType = _inferenceHelper.inferTearOff(node, node, staticType);
+
+    if (!_resolver.isConstructorTearoffsEnabled) {
+      // Only perform a generic function instantiation on a [PrefixedIdentifier]
+      // in pre-constructor-tearoffs code. In constructor-tearoffs-enabled code,
+      // generic function instantiation is performed at assignability check
+      // sites.
+      // TODO(srawlins): Switch all resolution to use the latter method, in a
+      // breaking change release.
+      staticType =
+          _resolver.inferenceHelper.inferTearOff(node, node, staticType);
+    }
     _recordStaticType(node, staticType);
   }
 
diff --git a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
index e781de9..a9fce6a 100644
--- a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
@@ -98,6 +98,7 @@
     }
 
     node.visitChildren(_resolver);
+    _insertImplicitCallReferences(node);
     _resolveListLiteral2(node);
   }
 
@@ -154,6 +155,7 @@
     }
 
     node.visitChildren(_resolver);
+    _insertImplicitCallReferences(node);
     _resolveSetOrMapLiteral2(node);
   }
 
@@ -597,6 +599,34 @@
     );
   }
 
+  void _insertImplicitCallReference(CollectionElement? node) {
+    if (node is Expression) {
+      _resolver.insertImplicitCallReference(node);
+    } else if (node is MapLiteralEntry) {
+      _insertImplicitCallReference(node.key);
+      _insertImplicitCallReference(node.value);
+    } else if (node is IfElement) {
+      _insertImplicitCallReference(node.thenElement);
+      _insertImplicitCallReference(node.elseElement);
+    } else if (node is ForElement) {
+      _insertImplicitCallReference(node.body);
+    }
+    // Nothing to do for [SpreadElement] as analyzer does not desugar this
+    // element.
+  }
+
+  void _insertImplicitCallReferences(TypedLiteral node) {
+    if (node is ListLiteral) {
+      for (var element in node.elements) {
+        _insertImplicitCallReference(element);
+      }
+    } else if (node is SetOrMapLiteral) {
+      for (var element in node.elements) {
+        _insertImplicitCallReference(element);
+      }
+    }
+  }
+
   void _pushCollectionTypesDown(CollectionElement? element,
       {DartType? elementType,
       required DartType iterableType,
diff --git a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
index 1e41759..ca56632 100644
--- a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
@@ -65,6 +65,8 @@
       _resolver.flowAnalysis.flow?.lateInitializer_end();
     }
 
+    initializer = _resolver.insertImplicitCallReference(initializer);
+
     // Initializers of top-level variables and fields are already included
     // into elements during linking.
     if (element is ConstLocalVariableElementImpl) {
diff --git a/pkg/analyzer/lib/src/error/analyzer_error_code.dart b/pkg/analyzer/lib/src/error/analyzer_error_code.dart
index 2b07046..5d99bf3 100644
--- a/pkg/analyzer/lib/src/error/analyzer_error_code.dart
+++ b/pkg/analyzer/lib/src/error/analyzer_error_code.dart
@@ -8,18 +8,18 @@
 abstract class AnalyzerErrorCode extends ErrorCode {
   /// Initialize a newly created error code.
   const AnalyzerErrorCode({
-    String? correction,
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
-    required String message,
     required String name,
+    required String problemMessage,
     required String uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: uniqueName,
         );
 }
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index 62bf4a9..85441dc 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -4,6 +4,7 @@
 
 import 'dart:collection';
 
+import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
@@ -201,46 +202,40 @@
       if (parent is FieldDeclaration) {
         if (parent.isStatic) {
           _errorReporter.reportErrorForNode(
-              HintCode.INVALID_NON_VIRTUAL_ANNOTATION,
-              node,
-              [node.element!.name]);
+              HintCode.INVALID_NON_VIRTUAL_ANNOTATION, node);
         }
       } else if (parent is MethodDeclaration) {
         if (parent.parent is ExtensionDeclaration ||
             parent.isStatic ||
             parent.isAbstract) {
           _errorReporter.reportErrorForNode(
-              HintCode.INVALID_NON_VIRTUAL_ANNOTATION,
-              node,
-              [node.element!.name]);
+              HintCode.INVALID_NON_VIRTUAL_ANNOTATION, node);
         }
       } else {
         _errorReporter.reportErrorForNode(
-            HintCode.INVALID_NON_VIRTUAL_ANNOTATION,
-            node,
-            [node.element!.name]);
+            HintCode.INVALID_NON_VIRTUAL_ANNOTATION, node);
       }
     } else if (element.isSealed == true) {
       if (!(parent is ClassDeclaration || parent is ClassTypeAlias)) {
         _errorReporter.reportErrorForNode(
-            HintCode.INVALID_SEALED_ANNOTATION, node, [node.element!.name]);
+            HintCode.INVALID_SEALED_ANNOTATION, node);
       }
     } else if (element.isVisibleForTemplate == true ||
         element.isVisibleForTesting == true ||
         element.isVisibleForOverriding == true) {
       if (parent is Declaration) {
         void reportInvalidAnnotation(Element declaredElement) {
+          // This method is only called on named elements, so it is safe to
+          // assume that `declaredElement.name` is non-`null`.
           _errorReporter.reportErrorForNode(
               HintCode.INVALID_VISIBILITY_ANNOTATION,
               node,
-              [declaredElement.name, node.name.name]);
+              [declaredElement.name!, node.name.name]);
         }
 
         void reportInvalidVisibleForOverriding(Element declaredElement) {
           _errorReporter.reportErrorForNode(
-              HintCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION,
-              node,
-              [declaredElement.name]);
+              HintCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION, node);
         }
 
         if (parent is TopLevelVariableDeclaration) {
@@ -271,12 +266,12 @@
         } else if (parent.declaredElement != null) {
           final declaredElement = parent.declaredElement!;
           if (element.isVisibleForOverriding &&
-              (!declaredElement.isInstanceMember ||
-                  declaredElement.enclosingElement is ExtensionElement)) {
+              !declaredElement.isInstanceMember) {
             reportInvalidVisibleForOverriding(declaredElement);
           }
 
-          if (Identifier.isPrivateName(declaredElement.name!)) {
+          var name = declaredElement.name;
+          if (name != null && Identifier.isPrivateName(name)) {
             reportInvalidAnnotation(declaredElement);
           }
         }
@@ -326,8 +321,10 @@
         var kindNames = kinds.map((kind) => kind.displayString).toList()
           ..sort();
         var validKinds = kindNames.commaSeparatedWithOr;
+        // Annotations always refer to named elements, so we can safely assume
+        // that `name` is non-`null`.
         _errorReporter.reportErrorForNode(
-            HintCode.INVALID_ANNOTATION_TARGET, node.name, [name, validKinds]);
+            HintCode.INVALID_ANNOTATION_TARGET, node.name, [name!, validKinds]);
         return;
       }
     }
@@ -397,6 +394,17 @@
   }
 
   @override
+  void visitCommentReference(CommentReference node) {
+    var newKeyword = node.newKeyword;
+    if (newKeyword != null &&
+        _currentLibrary.featureSet.isEnabled(Feature.constructor_tearoffs)) {
+      _errorReporter.reportErrorForToken(
+          HintCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE, newKeyword, []);
+    }
+    super.visitCommentReference(node);
+  }
+
+  @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
     var element = node.declaredElement as ConstructorElementImpl;
     if (!_isNonNullableByDefault && node.declaredElement!.isFactory) {
@@ -428,7 +436,6 @@
   void visitExportDirective(ExportDirective node) {
     _deprecatedVerifier.exportDirective(node);
     _checkForInternalExport(node);
-    _checkForUseOfNativeExtension(node);
     super.visitExportDirective(node);
   }
 
@@ -450,7 +457,7 @@
         ExecutableElement? getOverriddenPropertyAccessor() {
           final element = field.declaredElement;
           if (element is PropertyAccessorElement || element is FieldElement) {
-            Name name = Name(_currentLibrary.source.uri, element!.name!);
+            Name name = Name(_currentLibrary.source.uri, element!.name);
             Element enclosingElement = element.enclosingElement!;
             if (enclosingElement is ClassElement) {
               var overridden = _inheritanceManager
@@ -471,10 +478,13 @@
         final overriddenElement = getOverriddenPropertyAccessor();
         if (overriddenElement != null &&
             _hasNonVirtualAnnotation(overriddenElement)) {
+          // Overridden members are always inside classes or mixins, which are
+          // always named, so we can safely assume
+          // `overriddenElement.enclosingElement.name` is non-`null`.
           _errorReporter.reportErrorForNode(
               HintCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER,
               field.name,
-              [field.name, overriddenElement.enclosingElement.name]);
+              [field.name, overriddenElement.enclosingElement.name!]);
         }
         if (!_invalidAccessVerifier._inTestDirectory) {
           _checkForAssignmentOfDoNotStore(field.initializer);
@@ -583,7 +593,6 @@
     }
     _invalidAccessVerifier.verifyImport(node);
     _checkForImportOfLegacyLibraryIntoNullSafe(node);
-    _checkForUseOfNativeExtension(node);
     super.visitImportDirective(node);
   }
 
@@ -656,10 +665,13 @@
 
       if (overriddenElement != null &&
           _hasNonVirtualAnnotation(overriddenElement)) {
+        // Overridden members are always inside classes or mixins, which are
+        // always named, so we can safely assume
+        // `overriddenElement.enclosingElement.name` is non-`null`.
         _errorReporter.reportErrorForNode(
             HintCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER,
             node.name,
-            [node.name, overriddenElement.enclosingElement.name]);
+            [node.name, overriddenElement.enclosingElement.name!]);
       }
 
       super.visitMethodDeclaration(node);
@@ -856,10 +868,13 @@
   void _checkForAssignmentOfDoNotStore(Expression? expression) {
     var expressionMap = _getSubExpressionsMarkedDoNotStore(expression);
     for (var entry in expressionMap.entries) {
+      // All the elements returned by [_getSubExpressionsMarkedDoNotStore] are
+      // named elements, so we can safely assume `entry.value.name` is
+      // non-`null`.
       _errorReporter.reportErrorForNode(
         HintCode.ASSIGNMENT_OF_DO_NOT_STORE,
         entry.key,
-        [entry.value.name],
+        [entry.value.name!],
       );
     }
   }
@@ -1388,10 +1403,13 @@
         return;
       }
       for (var entry in expressionMap.entries) {
+        // All the elements returned by [_getSubExpressionsMarkedDoNotStore] are
+        // named elements, so we can safely assume `entry.value.name` is
+        // non-`null`.
         _errorReporter.reportErrorForNode(
           HintCode.RETURN_OF_DO_NOT_STORE,
           entry.key,
-          [entry.value.name, parent.declaredElement!.displayName],
+          [entry.value.name!, parent.declaredElement!.displayName],
         );
       }
     }
@@ -1443,16 +1461,6 @@
     return false;
   }
 
-  void _checkForUseOfNativeExtension(UriBasedDirective node) {
-    var uri = node.uriContent;
-    if (uri == null) {
-      return;
-    }
-    if (uri.startsWith('dart-ext:')) {
-      _errorReporter.reportErrorForNode(HintCode.USE_OF_NATIVE_EXTENSION, node);
-    }
-  }
-
   void _checkRequiredParameter(FormalParameterList node) {
     final requiredParameters =
         node.parameters.where((p) => p.declaredElement?.hasRequired == true);
@@ -1905,8 +1913,12 @@
     var element = node.uriElement;
     if (_hasInternal(element) &&
         !_isLibraryInWorkspacePackage(element!.library)) {
+      // The only way for an import directive's URI to have a `null`
+      // `stringValue` is if its string contains an interpolation, in which case
+      // the element would never have resolved in the first place.  So we can
+      // safely assume `node.uri.stringValue` is non-`null`.
       _errorReporter.reportErrorForNode(HintCode.INVALID_USE_OF_INTERNAL_MEMBER,
-          node, [node.uri.stringValue]);
+          node, [node.uri.stringValue!]);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
index eb89966..cd94929 100644
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ b/pkg/analyzer/lib/src/error/codes.g.dart
@@ -23,7 +23,7 @@
   // The analyzer produces this diagnostic when a field that has the `abstract`
   // modifier also has an initializer.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `f` is marked as
   // `abstract` and has an initializer:
@@ -66,7 +66,7 @@
       CompileTimeErrorCode(
     'ABSTRACT_FIELD_INITIALIZER',
     "Abstract fields can't have initializers.",
-    correction:
+    correctionMessage:
         "Try removing the field initializer or the 'abstract' keyword from the field declaration.",
     hasPublishedDocs: true,
     uniqueName: 'ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER',
@@ -79,7 +79,8 @@
       CompileTimeErrorCode(
     'ABSTRACT_FIELD_INITIALIZER',
     "Abstract fields can't have initializers.",
-    correction: "Try removing the initializer or the 'abstract' keyword.",
+    correctionMessage:
+        "Try removing the initializer or the 'abstract' keyword.",
     hasPublishedDocs: true,
   );
 
@@ -94,7 +95,7 @@
   // referenced using `super`, but there is no concrete implementation of the
   // member in the superclass chain. Abstract members can't be invoked.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `B` doesn't inherit a
   // concrete implementation of `a`:
@@ -175,7 +176,7 @@
   static const CompileTimeErrorCode AMBIGUOUS_EXPORT = CompileTimeErrorCode(
     'AMBIGUOUS_EXPORT',
     "The name '{0}' is defined in the libraries '{1}' and '{2}'.",
-    correction:
+    correctionMessage:
         "Try removing the export of one of the libraries, or explicitly hiding the name in one of the export directives.",
     hasPublishedDocs: true,
   );
@@ -183,8 +184,7 @@
   /**
    * Parameters:
    * 0: the name of the member
-   * 1: the name of the first declaring extension
-   * 2: the name of the second declaring extension
+   * 1: the names of the declaring extensions
    */
   // #### Description
   //
@@ -201,7 +201,7 @@
   // extended type that's more specific than the extended types of all of the
   // other extensions, making the reference to the member ambiguous.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because there's no way to
   // choose between the member in `E1` and the member in `E2`:
@@ -243,8 +243,8 @@
   static const CompileTimeErrorCode AMBIGUOUS_EXTENSION_MEMBER_ACCESS =
       CompileTimeErrorCode(
     'AMBIGUOUS_EXTENSION_MEMBER_ACCESS',
-    "A member named '{0}' is defined in extensions {1}, and none are more specific.",
-    correction:
+    "A member named '{0}' is defined in {1}, and none are more specific.",
+    correctionMessage:
         "Try using an extension override to specify the extension you want to be chosen.",
     hasPublishedDocs: true,
   );
@@ -260,7 +260,7 @@
   // The analyzer produces this diagnostic when a name is referenced that is
   // declared in two or more imported libraries.
   //
-  // #### Examples
+  // #### Example
   //
   // Given a library (`a.dart`) that defines a class (`C` in this example):
   //
@@ -321,7 +321,7 @@
   static const CompileTimeErrorCode AMBIGUOUS_IMPORT = CompileTimeErrorCode(
     'AMBIGUOUS_IMPORT',
     "The name '{0}' is defined in the libraries {1}.",
-    correction:
+    correctionMessage:
         "Try using 'as prefix' for one of the import directives, or hiding the name from all but one of the imports.",
     hasPublishedDocs: true,
   );
@@ -345,7 +345,7 @@
   // element is neither of these, making it impossible for the analyzer to
   // determine whether you are writing a map literal or a set literal.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -381,7 +381,7 @@
       CompileTimeErrorCode(
     'AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH',
     "The literal can't be either a map or a set because it contains at least one literal map entry or a spread operator spreading a 'Map', and at least one element which is neither of these.",
-    correction:
+    correctionMessage:
         "Try removing or changing some of the elements so that all of the elements are consistent.",
     hasPublishedDocs: true,
   );
@@ -403,7 +403,7 @@
   // a type that allows the analyzer to decide whether you were writing a map
   // literal or a set literal.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -461,7 +461,7 @@
       CompileTimeErrorCode(
     'AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER',
     "This literal must be either a map or a set, but the elements don't have enough information for type inference to work.",
-    correction:
+    correctionMessage:
         "Try adding type arguments to the literal (one for sets, two for maps).",
     hasPublishedDocs: true,
   );
@@ -476,7 +476,7 @@
   // The analyzer produces this diagnostic when the static type of an argument
   // can't be assigned to the static type of the corresponding parameter.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because a `num` can't be
   // assigned to a `String`:
@@ -634,7 +634,7 @@
   static const CompileTimeErrorCode ASSIGNMENT_TO_CONST = CompileTimeErrorCode(
     'ASSIGNMENT_TO_CONST',
     "Constant variables can't be assigned a value.",
-    correction:
+    correctionMessage:
         "Try removing the assignment, or remove the modifier 'const' from the variable.",
     hasPublishedDocs: true,
   );
@@ -649,7 +649,7 @@
   // setter, but there's no setter because the field with the same name was
   // declared to be `final` or `const`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `v` is final:
   //
@@ -680,7 +680,8 @@
   static const CompileTimeErrorCode ASSIGNMENT_TO_FINAL = CompileTimeErrorCode(
     'ASSIGNMENT_TO_FINAL',
     "'{0}' can't be used as a setter because it's final.",
-    correction: "Try finding a different setter, or making '{0}' non-final.",
+    correctionMessage:
+        "Try finding a different setter, or making '{0}' non-final.",
     hasPublishedDocs: true,
   );
 
@@ -692,7 +693,7 @@
   // The analyzer produces this diagnostic when a local variable that was
   // declared to be final is assigned after it was initialized.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` is final, so it
   // can't have a value assigned to it after it was initialized:
@@ -721,7 +722,7 @@
       CompileTimeErrorCode(
     'ASSIGNMENT_TO_FINAL_LOCAL',
     "The final variable '{0}' can only be set once.",
-    correction: "Try making '{0}' non-final.",
+    correctionMessage: "Try making '{0}' non-final.",
     hasPublishedDocs: true,
   );
 
@@ -734,7 +735,7 @@
   // found; there is no setter defined for the type; but there is a getter
   // defined with the same name.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because there is no setter
   // named `x` in `C`, but there is a getter named `x`:
@@ -783,7 +784,7 @@
       CompileTimeErrorCode(
     'ASSIGNMENT_TO_FINAL_NO_SETTER',
     "There isn’t a setter named '{0}' in class '{1}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to reference an existing setter, or declare the setter.",
     hasPublishedDocs: true,
   );
@@ -848,7 +849,7 @@
   // The analyzer produces this diagnostic when the target of an assignment is a
   // method.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` can't be assigned a
   // value because it's a method:
@@ -972,7 +973,7 @@
       CompileTimeErrorCode(
     'ASYNC_FOR_IN_WRONG_CONTEXT',
     "The async for-in loop can only be used in an async function.",
-    correction:
+    correctionMessage:
         "Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for-in loop.",
     hasPublishedDocs: true,
   );
@@ -1020,7 +1021,7 @@
       CompileTimeErrorCode(
     'AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER',
     "The 'await' expression can't be used in a 'late' local variable's initializer.",
-    correction:
+    correctionMessage:
         "Try removing the 'late' modifier, or rewriting the initializer without using the 'await' expression.",
     hasPublishedDocs: true,
   );
@@ -1034,7 +1035,7 @@
       CompileTimeErrorCode(
     'AWAIT_IN_WRONG_CONTEXT',
     "The await expression can only be used in an async function.",
-    correction:
+    correctionMessage:
         "Try marking the function body with either 'async' or 'async*'.",
   );
 
@@ -1047,7 +1048,7 @@
   // return type that's [potentially non-nullable][] but would implicitly return
   // `null` if control reached the end of the function.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the method `m` has an
   // implicit return of `null` inserted at the end of the method, but the method
@@ -1114,7 +1115,8 @@
       CompileTimeErrorCode(
     'BODY_MIGHT_COMPLETE_NORMALLY',
     "The body might complete normally, causing 'null' to be returned, but the return type is a potentially non-nullable type.",
-    correction: "Try adding either a return or a throw statement at the end.",
+    correctionMessage:
+        "Try adding either a return or a throw statement at the end.",
     hasPublishedDocs: true,
   );
 
@@ -1205,7 +1207,7 @@
       CompileTimeErrorCode(
     'BUILT_IN_IDENTIFIER_IN_DECLARATION',
     "The built-in identifier '{0}' can't be used as an extension name.",
-    correction: "Try choosing a different name for the extension.",
+    correctionMessage: "Try choosing a different name for the extension.",
     hasPublishedDocs: true,
     uniqueName: 'BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME',
   );
@@ -1218,7 +1220,7 @@
       CompileTimeErrorCode(
     'BUILT_IN_IDENTIFIER_IN_DECLARATION',
     "The built-in identifier '{0}' can't be used as a prefix name.",
-    correction: "Try choosing a different name for the prefix.",
+    correctionMessage: "Try choosing a different name for the prefix.",
     hasPublishedDocs: true,
     uniqueName: 'BUILT_IN_IDENTIFIER_AS_PREFIX_NAME',
   );
@@ -1232,7 +1234,7 @@
   // The analyzer produces this diagnostic when a built-in identifier is used
   // where a type name is expected.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `import` can't be used
   // as a type because it's a built-in identifier:
@@ -1252,7 +1254,7 @@
       CompileTimeErrorCode(
     'BUILT_IN_IDENTIFIER_AS_TYPE',
     "The built-in identifier '{0}' can't be used as a type.",
-    correction: "Try correcting the name to match an existing type.",
+    correctionMessage: "Try correcting the name to match an existing type.",
     hasPublishedDocs: true,
   );
 
@@ -1264,7 +1266,7 @@
       CompileTimeErrorCode(
     'BUILT_IN_IDENTIFIER_IN_DECLARATION',
     "The built-in identifier '{0}' can't be used as a typedef name.",
-    correction: "Try choosing a different name for the typedef.",
+    correctionMessage: "Try choosing a different name for the typedef.",
     hasPublishedDocs: true,
     uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME',
   );
@@ -1277,7 +1279,7 @@
       CompileTimeErrorCode(
     'BUILT_IN_IDENTIFIER_IN_DECLARATION',
     "The built-in identifier '{0}' can't be used as a type name.",
-    correction: "Try choosing a different name for the type.",
+    correctionMessage: "Try choosing a different name for the type.",
     hasPublishedDocs: true,
     uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPE_NAME',
   );
@@ -1290,7 +1292,7 @@
       CompileTimeErrorCode(
     'BUILT_IN_IDENTIFIER_IN_DECLARATION',
     "The built-in identifier '{0}' can't be used as a type parameter name.",
-    correction: "Try choosing a different name for the type parameter.",
+    correctionMessage: "Try choosing a different name for the type parameter.",
     hasPublishedDocs: true,
     uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME',
   );
@@ -1304,7 +1306,7 @@
   // block isn't one of the required terminators: `break`, `continue`,
   // `rethrow`, `return`, or `throw`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the `case` block ends
   // with an assignment:
@@ -1341,7 +1343,7 @@
       CompileTimeErrorCode(
     'CASE_BLOCK_NOT_TERMINATED',
     "The last statement of the 'case' should be 'break', 'continue', 'rethrow', 'return', or 'throw'.",
-    correction: "Try adding one of the required statements.",
+    correctionMessage: "Try adding one of the required statements.",
     hasPublishedDocs: true,
   );
 
@@ -1516,7 +1518,7 @@
   // The analyzer produces this diagnostic when the name following the `as` in a
   // cast expression is defined to be something other than a type.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` is a variable, not
   // a type:
@@ -1537,7 +1539,7 @@
   static const CompileTimeErrorCode CAST_TO_NON_TYPE = CompileTimeErrorCode(
     'CAST_TO_NON_TYPE',
     "The name '{0}' isn't a type, so it can't be used in an 'as' expression.",
-    correction:
+    correctionMessage:
         "Try changing the name to the name of an existing type, or creating a type with the name '{0}'.",
     hasPublishedDocs: true,
   );
@@ -1550,7 +1552,8 @@
       CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER = CompileTimeErrorCode(
     'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
     "The instance member '{0}' can't be accessed on a class instantiation.",
-    correction: "Try changing the member name to the name of a constructor.",
+    correctionMessage:
+        "Try changing the member name to the name of a constructor.",
     uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER',
   );
 
@@ -1562,7 +1565,7 @@
       CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER = CompileTimeErrorCode(
     'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
     "The static member '{0}' can't be accessed on a class instantiation.",
-    correction:
+    correctionMessage:
         "Try removing the type arguments from the class name, or changing the member name to the name of a constructor.",
     uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER',
   );
@@ -1575,7 +1578,7 @@
       CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER = CompileTimeErrorCode(
     'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
     "The class '{0} doesn't have a constructor named '{1}.",
-    correction:
+    correctionMessage:
         "Try invoking a different constructor, or defining a constructor named '{1}'.",
     uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER',
   );
@@ -1591,7 +1594,7 @@
   // found that doesn't have a concrete implementation. Concrete classes aren't
   // allowed to contain abstract members.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `m` is an abstract
   // method but `C` isn't an abstract class:
@@ -1625,7 +1628,7 @@
       CompileTimeErrorCode(
     'CONCRETE_CLASS_WITH_ABSTRACT_MEMBER',
     "'{0}' must have a method body because '{1}' isn't abstract.",
-    correction: "Try making '{1}' abstract, or adding a body to '{0}'.",
+    correctionMessage: "Try making '{1}' abstract, or adding a body to '{0}'.",
     hasPublishedDocs: true,
   );
 
@@ -1640,7 +1643,7 @@
   // the name of the class, so having the same name makes the reference
   // ambiguous.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the static field `foo`
   // and the named constructor `foo` have the same name:
@@ -1669,7 +1672,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
     "'{0}' can't be used to name both a constructor and a static field in this class.",
-    correction: "Try renaming either the constructor or the field.",
+    correctionMessage: "Try renaming either the constructor or the field.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD',
   );
@@ -1682,7 +1685,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
     "'{0}' can't be used to name both a constructor and a static getter in this class.",
-    correction: "Try renaming either the constructor or the getter.",
+    correctionMessage: "Try renaming either the constructor or the getter.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER',
   );
@@ -1695,7 +1698,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
     "'{0}' can't be used to name both a constructor and a static method in this class.",
-    correction: "Try renaming either the constructor or the method.",
+    correctionMessage: "Try renaming either the constructor or the method.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD',
   );
@@ -1708,7 +1711,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
     "'{0}' can't be used to name both a constructor and a static setter in this class.",
-    correction: "Try renaming either the constructor or the setter.",
+    correctionMessage: "Try renaming either the constructor or the setter.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER',
   );
@@ -1727,7 +1730,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_FIELD_AND_METHOD',
     "Class '{0}' can't define field '{1}' and have method '{2}.{1}' with the same name.",
-    correction:
+    correctionMessage:
         "Try converting the getter to a method, or renaming the field to a name that doesn't conflict.",
   );
 
@@ -1789,7 +1792,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_METHOD_AND_FIELD',
     "Class '{0}' can't define method '{1}' and have field '{2}.{1}' with the same name.",
-    correction:
+    correctionMessage:
         "Try converting the method to a getter, or renaming the method to a name that doesn't conflict.",
   );
 
@@ -1807,7 +1810,8 @@
       CompileTimeErrorCode(
     'CONFLICTING_STATIC_AND_INSTANCE',
     "Class '{0}' can't define static member '{1}' and have instance member '{2}.{1}' with the same name.",
-    correction: "Try renaming the member to a name that doesn't conflict.",
+    correctionMessage:
+        "Try renaming the member to a name that doesn't conflict.",
   );
 
   /**
@@ -1840,7 +1844,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
     "'{0}' can't be used to name both a type variable and the class in which the type variable is defined.",
-    correction: "Try renaming either the type variable or the class.",
+    correctionMessage: "Try renaming either the type variable or the class.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_CLASS',
   );
@@ -1853,7 +1857,8 @@
       CompileTimeErrorCode(
     'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
     "'{0}' can't be used to name both a type variable and the extension in which the type variable is defined.",
-    correction: "Try renaming either the type variable or the extension.",
+    correctionMessage:
+        "Try renaming either the type variable or the extension.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_EXTENSION',
   );
@@ -1892,7 +1897,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
     "'{0}' can't be used to name both a type variable and a member in this class.",
-    correction: "Try renaming either the type variable or the member.",
+    correctionMessage: "Try renaming either the type variable or the member.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS',
   );
@@ -1905,7 +1910,7 @@
       CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION = CompileTimeErrorCode(
     'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
     "'{0}' can't be used to name both a type variable and a member in this extension.",
-    correction: "Try renaming either the type variable or the member.",
+    correctionMessage: "Try renaming either the type variable or the member.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION',
   );
@@ -1918,7 +1923,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
     "'{0}' can't be used to name both a type variable and a member in this mixin.",
-    correction: "Try renaming either the type variable or the member.",
+    correctionMessage: "Try renaming either the type variable or the member.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN',
   );
@@ -1931,7 +1936,7 @@
       CompileTimeErrorCode(
     'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
     "'{0}' can't be used to name both a type variable and the mixin in which the type variable is defined.",
-    correction: "Try renaming either the type variable or the mixin.",
+    correctionMessage: "Try renaming either the type variable or the mixin.",
     hasPublishedDocs: true,
     uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MIXIN',
   );
@@ -1944,7 +1949,7 @@
       CompileTimeErrorCode(
     'CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH',
     "In a const constructor, a value of type '{0}' can't be assigned to the field '{1}', which has type '{2}'.",
-    correction: "Try using a subtype, or removing the keyword 'const'.",
+    correctionMessage: "Try using a subtype, or removing the keyword 'const'.",
   );
 
   /**
@@ -1998,7 +2003,7 @@
       CompileTimeErrorCode(
     'CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH',
     "A value of type '{0}' can't be assigned to a parameter of type '{1}' in a const constructor.",
-    correction: "Try using a subtype, or removing the keyword 'const'.",
+    correctionMessage: "Try using a subtype, or removing the keyword 'const'.",
     hasPublishedDocs: true,
   );
 
@@ -2010,7 +2015,7 @@
       CompileTimeErrorCode(
     'CONST_CONSTRUCTOR_THROWS_EXCEPTION',
     "Const constructors can't throw exceptions.",
-    correction:
+    correctionMessage:
         "Try removing the throw statement, or removing the keyword 'const'.",
   );
 
@@ -2061,7 +2066,7 @@
       CompileTimeErrorCode(
     'CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST',
     "Can't define the 'const' constructor because the field '{0}' is initialized with a non-constant value.",
-    correction:
+    correctionMessage:
         "Try initializing the field to a constant value, or removing the keyword 'const' from the constructor.",
     hasPublishedDocs: true,
   );
@@ -2084,7 +2089,7 @@
       CompileTimeErrorCode(
     'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD',
     "This constructor can't be declared 'const' because a mixin adds the instance field: {0}.",
-    correction:
+    correctionMessage:
         "Try removing the 'const' keyword or removing the 'with' clause from the class declaration, or removing the field from the mixin class.",
   );
 
@@ -2106,7 +2111,7 @@
       CompileTimeErrorCode(
     'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD',
     "This constructor can't be declared 'const' because the mixins add the instance fields: {0}.",
-    correction:
+    correctionMessage:
         "Try removing the 'const' keyword or removing the 'with' clause from the class declaration, or removing the fields from the mixin classes.",
     uniqueName: 'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS',
   );
@@ -2186,7 +2191,7 @@
       CompileTimeErrorCode(
     'CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER',
     "A constant constructor can't call a non-constant super constructor of '{0}'.",
-    correction:
+    correctionMessage:
         "Try calling a constant constructor in the superclass, or removing the keyword 'const' from the constructor.",
     hasPublishedDocs: true,
   );
@@ -2200,7 +2205,7 @@
   // const constructor, but the constructor is defined in a class that has at
   // least one non-final instance field (either directly or by inheritance).
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the field `x` isn't
   // final:
@@ -2239,7 +2244,7 @@
       CompileTimeErrorCode(
     'CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD',
     "Can't define a const constructor for a class with non-final fields.",
-    correction:
+    correctionMessage:
         "Try making all of the fields final, or removing the keyword 'const' from the constructor.",
     hasPublishedDocs: true,
   );
@@ -2290,7 +2295,7 @@
   static const CompileTimeErrorCode CONST_DEFERRED_CLASS = CompileTimeErrorCode(
     'CONST_DEFERRED_CLASS',
     "Deferred classes can't be created with 'const'.",
-    correction:
+    correctionMessage:
         "Try using 'new' to create the instance, or changing the import to not be deferred.",
     hasPublishedDocs: true,
   );
@@ -2382,7 +2387,7 @@
       CompileTimeErrorCode(
     'FIELD_INITIALIZER_NOT_ASSIGNABLE',
     "The initializer type '{0}' can't be assigned to the field type '{1}' in a const constructor.",
-    correction: "Try using a subtype, or removing the 'const' keyword",
+    correctionMessage: "Try using a subtype, or removing the 'const' keyword",
     hasPublishedDocs: true,
     uniqueName: 'CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE',
   );
@@ -2396,7 +2401,7 @@
   // known to be a constant is assigned to a variable that's declared to be a
   // `const` variable.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` isn't declared to
   // be `const`:
@@ -2427,7 +2432,8 @@
       CompileTimeErrorCode(
     'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE',
     "Const variables must be initialized with a constant value.",
-    correction: "Try changing the initializer to be a constant expression.",
+    correctionMessage:
+        "Try changing the initializer to be a constant expression.",
     hasPublishedDocs: true,
   );
 
@@ -2478,7 +2484,7 @@
       CompileTimeErrorCode(
     'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used to initialize a 'const' variable.",
-    correction:
+    correctionMessage:
         "Try initializing the variable without referencing members of the deferred library, or changing the import to not be deferred.",
     hasPublishedDocs: true,
   );
@@ -2491,7 +2497,7 @@
   // The analyzer produces this diagnostic when an instance field is marked as
   // being const.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` is an instance
   // field:
@@ -2523,7 +2529,7 @@
   static const CompileTimeErrorCode CONST_INSTANCE_FIELD = CompileTimeErrorCode(
     'CONST_INSTANCE_FIELD',
     "Only static fields can be declared as const.",
-    correction:
+    correctionMessage:
         "Try declaring the field as final, or adding the keyword 'static'.",
     hasPublishedDocs: true,
   );
@@ -2584,7 +2590,7 @@
       CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS = CompileTimeErrorCode(
     'CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS',
     "The type of a key in a constant map can't override the '==' operator, but the class '{0}' does.",
-    correction:
+    correctionMessage:
         "Try using a different value for the key, or removing the keyword 'const' from the map.",
     hasPublishedDocs: true,
   );
@@ -2598,7 +2604,7 @@
   // The analyzer produces this diagnostic when a variable that is declared to
   // be a constant doesn't have an initializer.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `c` isn't initialized:
   //
@@ -2617,7 +2623,7 @@
       CompileTimeErrorCode(
     'CONST_NOT_INITIALIZED',
     "The constant '{0}' must be initialized.",
-    correction: "Try adding an initialization to the declaration.",
+    correctionMessage: "Try adding an initialization to the declaration.",
     hasPublishedDocs: true,
   );
 
@@ -2677,7 +2683,7 @@
       CompileTimeErrorCode(
     'CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS',
     "The type of an element in a constant set can't override the '==' operator, but the type '{0}' does.",
-    correction:
+    correctionMessage:
         "Try using a different value for the element, or removing the keyword 'const' from the set.",
     hasPublishedDocs: true,
   );
@@ -2691,7 +2697,7 @@
   // operator in a constant list or set evaluates to something other than a list
   // or a set.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the value of `list1` is
   // `null`, which is neither a list nor a set:
@@ -2727,7 +2733,7 @@
   // The analyzer produces this diagnostic when the expression of a spread
   // operator in a constant map evaluates to something other than a map.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the value of `map1` is
   // `null`, which isn't a map:
@@ -2762,7 +2768,7 @@
   // The analyzer produces this diagnostic when the keyword `const` is used to
   // invoke a constructor that isn't marked with `const`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the constructor in `A`
   // isn't a const constructor:
@@ -2801,7 +2807,7 @@
   static const CompileTimeErrorCode CONST_WITH_NON_CONST = CompileTimeErrorCode(
     'CONST_WITH_NON_CONST',
     "The constructor being called isn't a const constructor.",
-    correction: "Try removing 'const' from the constructor invocation.",
+    correctionMessage: "Try removing 'const' from the constructor invocation.",
     hasPublishedDocs: true,
   );
 
@@ -2813,7 +2819,7 @@
   // The analyzer produces this diagnostic when a const constructor is invoked
   // with an argument that isn't a constant expression.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `i` isn't a constant:
   //
@@ -2841,7 +2847,7 @@
       CompileTimeErrorCode(
     'CONST_WITH_NON_CONSTANT_ARGUMENT',
     "Arguments of a constant creation must be constant expressions.",
-    correction:
+    correctionMessage:
         "Try making the argument a valid constant, or use 'new' to call the constructor.",
     hasPublishedDocs: true,
   );
@@ -2853,7 +2859,7 @@
   static const CompileTimeErrorCode CONST_WITH_NON_TYPE = CompileTimeErrorCode(
     'CREATION_WITH_NON_TYPE',
     "The name '{0}' isn't a class.",
-    correction: "Try correcting the name to match an existing class.",
+    correctionMessage: "Try correcting the name to match an existing class.",
     hasPublishedDocs: true,
     isUnresolvedIdentifier: true,
     uniqueName: 'CONST_WITH_NON_TYPE',
@@ -2909,7 +2915,8 @@
       CompileTimeErrorCode(
     'CONST_WITH_TYPE_PARAMETERS',
     "A constant creation can't use a type parameter as a type argument.",
-    correction: "Try replacing the type parameter with a different type.",
+    correctionMessage:
+        "Try replacing the type parameter with a different type.",
     hasPublishedDocs: true,
   );
 
@@ -2920,7 +2927,8 @@
       CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF = CompileTimeErrorCode(
     'CONST_WITH_TYPE_PARAMETERS',
     "A constant constructor tearoff can't use a type parameter as a type argument.",
-    correction: "Try replacing the type parameter with a different type.",
+    correctionMessage:
+        "Try replacing the type parameter with a different type.",
     hasPublishedDocs: true,
     uniqueName: 'CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF',
   );
@@ -2932,7 +2940,8 @@
       CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF = CompileTimeErrorCode(
     'CONST_WITH_TYPE_PARAMETERS',
     "A constant function tearoff can't use a type parameter as a type argument.",
-    correction: "Try replacing the type parameter with a different type.",
+    correctionMessage:
+        "Try replacing the type parameter with a different type.",
     hasPublishedDocs: true,
     uniqueName: 'CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF',
   );
@@ -2949,7 +2958,7 @@
       CompileTimeErrorCode(
     'CONST_WITH_UNDEFINED_CONSTRUCTOR',
     "The class '{0}' doesn't have a constant constructor '{1}'.",
-    correction: "Try calling a different constructor.",
+    correctionMessage: "Try calling a different constructor.",
   );
 
   /**
@@ -2963,7 +2972,7 @@
       CompileTimeErrorCode(
     'CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
     "The class '{0}' doesn't have an unnamed constant constructor.",
-    correction: "Try calling a different constructor.",
+    correctionMessage: "Try calling a different constructor.",
   );
 
   static const CompileTimeErrorCode CONTINUE_LABEL_ON_SWITCH =
@@ -3025,7 +3034,8 @@
       CompileTimeErrorCode(
     'DEFAULT_LIST_CONSTRUCTOR',
     "The default 'List' constructor isn't available when null safety is enabled.",
-    correction: "Try using a list literal, 'List.filled' or 'List.generate'.",
+    correctionMessage:
+        "Try using a list literal, 'List.filled' or 'List.generate'.",
     hasPublishedDocs: true,
   );
 
@@ -3084,7 +3094,7 @@
       DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR = CompileTimeErrorCode(
     'DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR',
     "Default values aren't allowed in factory constructors that redirect to another constructor.",
-    correction: "Try removing the default value.",
+    correctionMessage: "Try removing the default value.",
     hasPublishedDocs: true,
   );
 
@@ -3098,7 +3108,7 @@
   // a value for the parameter is always provided at the call sites, so the
   // default value can never be used.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code generates this diagnostic:
   //
@@ -3124,8 +3134,9 @@
       CompileTimeErrorCode(
     'DEFAULT_VALUE_ON_REQUIRED_PARAMETER',
     "Required named parameters can't have a default value.",
-    correction:
+    correctionMessage:
         "Try removing either the default value or the 'required' modifier.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -3208,7 +3219,7 @@
       CompileTimeErrorCode(
     'DEFERRED_IMPORT_OF_EXTENSION',
     "Imports of deferred libraries must hide all extensions.",
-    correction:
+    correctionMessage:
         "Try adding either a show combinator listing the names you need to reference or a hide combinator listing all of the extensions.",
     hasPublishedDocs: true,
   );
@@ -3250,7 +3261,8 @@
       CompileTimeErrorCode(
     'DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE',
     "The late local variable '{0}' is definitely unassigned at this point.",
-    correction: "Ensure that it is assigned on necessary execution paths.",
+    correctionMessage:
+        "Ensure that it is assigned on necessary execution paths.",
     hasPublishedDocs: true,
   );
 
@@ -3261,7 +3273,7 @@
       CompileTimeErrorCode(
     'DISALLOWED_TYPE_INSTANTIATION_EXPRESSION',
     "Only a generic type, generic function, generic instance method, or generic constructor can be type instantiated.",
-    correction:
+    correctionMessage:
         "Try instantiating the type(s) of a generic type, generic function, generic instance method, or generic constructor.",
   );
 
@@ -3343,7 +3355,7 @@
       CompileTimeErrorCode(
     'DUPLICATE_CONSTRUCTOR',
     "The unnamed constructor is already defined.",
-    correction: "Try giving one of the constructors a name.",
+    correctionMessage: "Try giving one of the constructors a name.",
     hasPublishedDocs: true,
     uniqueName: 'DUPLICATE_CONSTRUCTOR_DEFAULT',
   );
@@ -3356,7 +3368,7 @@
       CompileTimeErrorCode(
     'DUPLICATE_CONSTRUCTOR',
     "The constructor with name '{0}' is already defined.",
-    correction: "Try renaming one of the constructors.",
+    correctionMessage: "Try renaming one of the constructors.",
     hasPublishedDocs: true,
     uniqueName: 'DUPLICATE_CONSTRUCTOR_NAME',
   );
@@ -3370,7 +3382,7 @@
   // The analyzer produces this diagnostic when a name is declared, and there is
   // a previous declaration with the same name in the same scope.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the name `x` is
   // declared twice:
@@ -3391,7 +3403,7 @@
   static const CompileTimeErrorCode DUPLICATE_DEFINITION = CompileTimeErrorCode(
     'DUPLICATE_DEFINITION',
     "The name '{0}' is already defined.",
-    correction: "Try renaming one of the declarations.",
+    correctionMessage: "Try renaming one of the declarations.",
     hasPublishedDocs: true,
   );
 
@@ -3433,7 +3445,7 @@
       CompileTimeErrorCode(
     'DUPLICATE_FIELD_FORMAL_PARAMETER',
     "The field '{0}' can't be initialized by multiple parameters in the same constructor.",
-    correction:
+    correctionMessage:
         "Try removing one of the parameters, or using different fields.",
     hasPublishedDocs: true,
   );
@@ -3447,7 +3459,7 @@
   // The analyzer produces this diagnostic when an invocation has two or more
   // named arguments that have the same name.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because there are two arguments
   // with the name `a`:
@@ -3494,7 +3506,7 @@
       CompileTimeErrorCode(
     'DUPLICATE_NAMED_ARGUMENT',
     "The argument for the named parameter '{0}' was already specified.",
-    correction:
+    correctionMessage:
         "Try removing one of the named arguments, or correcting one of the names to reference a different named parameter.",
     hasPublishedDocs: true,
   );
@@ -3539,7 +3551,7 @@
   static const CompileTimeErrorCode DUPLICATE_PART = CompileTimeErrorCode(
     'DUPLICATE_PART',
     "The library already contains a part with the URI '{0}'.",
-    correction:
+    correctionMessage:
         "Try removing all except one of the duplicated part directives.",
     hasPublishedDocs: true,
   );
@@ -3548,7 +3560,7 @@
       CompileTimeErrorCode(
     'ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING',
     "The name of the enum constant can't be the same as the enum's name.",
-    correction: "Try renaming the constant.",
+    correctionMessage: "Try renaming the constant.",
   );
 
   /**
@@ -3560,7 +3572,7 @@
   // literal have the same value. The set can only contain each value once,
   // which means that one of the values is unnecessary.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the string `'a'` is
   // specified twice:
@@ -3584,7 +3596,7 @@
       CompileTimeErrorCode(
     'EQUAL_ELEMENTS_IN_CONST_SET',
     "Two elements in a constant set literal can't be equal.",
-    correction: "Change or remove the duplicate element.",
+    correctionMessage: "Change or remove the duplicate element.",
     hasPublishedDocs: true,
   );
 
@@ -3598,7 +3610,7 @@
   // second value would overwrite the first value, which makes having both pairs
   // pointless.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the key `1` is used
   // twice:
@@ -3630,7 +3642,7 @@
       CompileTimeErrorCode(
     'EQUAL_KEYS_IN_CONST_MAP',
     "Two keys in a constant map literal can't be equal.",
-    correction: "Change or remove the duplicate key.",
+    correctionMessage: "Change or remove the duplicate key.",
     hasPublishedDocs: true,
   );
 
@@ -3663,7 +3675,7 @@
       CompileTimeErrorCode(
     'EXPECTED_ONE_LIST_TYPE_ARGUMENTS',
     "List literals require one type argument or none, but {0} found.",
-    correction: "Try adjusting the number of type arguments.",
+    correctionMessage: "Try adjusting the number of type arguments.",
     hasPublishedDocs: true,
   );
 
@@ -3696,7 +3708,7 @@
       CompileTimeErrorCode(
     'EXPECTED_ONE_SET_TYPE_ARGUMENTS',
     "Set literals require one type argument or none, but {0} were found.",
-    correction: "Try adjusting the number of type arguments.",
+    correctionMessage: "Try adjusting the number of type arguments.",
     hasPublishedDocs: true,
   );
 
@@ -3729,7 +3741,7 @@
       CompileTimeErrorCode(
     'EXPECTED_TWO_MAP_TYPE_ARGUMENTS',
     "Map literals require two type arguments or none, but {0} found.",
-    correction: "Try adjusting the number of type arguments.",
+    correctionMessage: "Try adjusting the number of type arguments.",
     hasPublishedDocs: true,
   );
 
@@ -3813,7 +3825,8 @@
   static const CompileTimeErrorCode EXPORT_LEGACY_SYMBOL = CompileTimeErrorCode(
     'EXPORT_LEGACY_SYMBOL',
     "The symbol '{0}' is defined in a legacy library, and can't be re-exported from a library with null safety enabled.",
-    correction: "Try removing the export or migrating the legacy library.",
+    correctionMessage:
+        "Try removing the export or migrating the legacy library.",
     hasPublishedDocs: true,
   );
 
@@ -3852,7 +3865,7 @@
       CompileTimeErrorCode(
     'EXPORT_OF_NON_LIBRARY',
     "The exported library '{0}' can't have a part-of directive.",
-    correction: "Try exporting the library that the part is a part of.",
+    correctionMessage: "Try exporting the library that the part is a part of.",
     hasPublishedDocs: true,
   );
 
@@ -3864,7 +3877,7 @@
   // The analyzer produces this diagnostic when the analyzer finds an
   // expression, rather than a map entry, in what appears to be a map literal.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -3884,7 +3897,7 @@
   static const CompileTimeErrorCode EXPRESSION_IN_MAP = CompileTimeErrorCode(
     'EXPRESSION_IN_MAP',
     "Expressions can't be used in a map literal.",
-    correction:
+    correctionMessage:
         "Try removing the expression or converting it to be a map entry.",
     hasPublishedDocs: true,
   );
@@ -3935,7 +3948,7 @@
       CompileTimeErrorCode(
     'SUBTYPE_OF_DEFERRED_CLASS',
     "Classes can't extend deferred classes.",
-    correction:
+    correctionMessage:
         "Try specifying a different superclass, or removing the extends clause.",
     hasPublishedDocs: true,
     uniqueName: 'EXTENDS_DEFERRED_CLASS',
@@ -3953,7 +3966,7 @@
   // are all restricted in this way, to allow for more efficient
   // implementations.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `String` is used in an
   // `extends` clause:
@@ -4001,7 +4014,7 @@
       CompileTimeErrorCode(
     'SUBTYPE_OF_DISALLOWED_TYPE',
     "Classes can't extend '{0}'.",
-    correction:
+    correctionMessage:
         "Try specifying a different superclass, or removing the extends clause.",
     hasPublishedDocs: true,
     uniqueName: 'EXTENDS_DISALLOWED_CLASS',
@@ -4016,7 +4029,7 @@
   // The analyzer produces this diagnostic when an `extends` clause contains a
   // name that is declared to be something other than a class.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` is declared to be a
   // function:
@@ -4050,7 +4063,7 @@
   static const CompileTimeErrorCode EXTENDS_NON_CLASS = CompileTimeErrorCode(
     'EXTENDS_NON_CLASS',
     "Classes can only extend other classes.",
-    correction:
+    correctionMessage:
         "Try specifying a different superclass, or removing the extends clause.",
     hasPublishedDocs: true,
     isUnresolvedIdentifier: true,
@@ -4090,7 +4103,7 @@
       EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER = CompileTimeErrorCode(
     'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
     "A type alias that expands to a type parameter can't be used as a superclass.",
-    correction:
+    correctionMessage:
         "Try specifying a different superclass, or removing the extends clause.",
     hasPublishedDocs: true,
     uniqueName: 'EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
@@ -4109,7 +4122,7 @@
   // representing the type of the class. Extensions, on the other hand, don't
   // define a type and can't be used as a type literal.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `E` is an extension:
   //
@@ -4137,14 +4150,13 @@
       CompileTimeErrorCode(
     'EXTENSION_AS_EXPRESSION',
     "Extension '{0}' can't be used as an expression.",
-    correction: "Try replacing it with a valid expression.",
+    correctionMessage: "Try replacing it with a valid expression.",
     hasPublishedDocs: true,
   );
 
   /**
    * Parameters:
-   * 0: the name of the extension defining the conflicting member
-   * 1: the name of the conflicting static member
+   * 0: the name of the conflicting static member
    */
   // #### Description
   //
@@ -4154,7 +4166,7 @@
   // because it's unclear which member is being referenced by an unqualified use
   // of the name within the body of the extension.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the name `a` is being
   // used for two different members:
@@ -4179,8 +4191,9 @@
   static const CompileTimeErrorCode EXTENSION_CONFLICTING_STATIC_AND_INSTANCE =
       CompileTimeErrorCode(
     'EXTENSION_CONFLICTING_STATIC_AND_INSTANCE',
-    "Extension '{0}' can't define static member '{1}' and an instance member with the same name.",
-    correction: "Try renaming the member to a name that doesn't conflict.",
+    "An extension can't define static member '{0}' and an instance member with the same name.",
+    correctionMessage:
+        "Try renaming the member to a name that doesn't conflict.",
     hasPublishedDocs: true,
   );
 
@@ -4194,7 +4207,7 @@
   // `Object`. Such a member can never be used because the member in `Object` is
   // always found first.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `toString` is defined
   // by `Object`:
@@ -4219,7 +4232,7 @@
       CompileTimeErrorCode(
     'EXTENSION_DECLARES_MEMBER_OF_OBJECT',
     "Extensions can't declare members with the same name as a member declared by 'Object'.",
-    correction: "Try specifying a different name for the member.",
+    correctionMessage: "Try specifying a different name for the member.",
     hasPublishedDocs: true,
   );
 
@@ -4233,7 +4246,7 @@
   // classes, the static members of an extension should be accessed using the
   // name of the extension, not an extension override.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `m` is static:
   //
@@ -4264,7 +4277,7 @@
       CompileTimeErrorCode(
     'EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER',
     "An extension override can't be used to access a static member from an extension.",
-    correction: "Try using just the name of the extension.",
+    correctionMessage: "Try using just the name of the extension.",
     hasPublishedDocs: true,
   );
 
@@ -4278,7 +4291,7 @@
   // The analyzer produces this diagnostic when the argument to an extension
   // override isn't assignable to the type being extended by the extension.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `3` isn't a `String`:
   //
@@ -4327,7 +4340,7 @@
   // extension override syntax doesn't have any runtime semantics; it only
   // controls which member is selected at compile time.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `E(i)` isn't an
   // expression:
@@ -4372,7 +4385,7 @@
       CompileTimeErrorCode(
     'EXTENSION_OVERRIDE_WITHOUT_ACCESS',
     "An extension override can only be used to access instance members.",
-    correction: "Consider adding an access to an instance member.",
+    correctionMessage: "Consider adding an access to an instance member.",
     hasPublishedDocs: true,
   );
 
@@ -4386,7 +4399,7 @@
   // `e..m` is the value of the receiver `e`, but extension overrides aren't
   // expressions and don't have a value.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `E(3)` isn't an
   // expression:
@@ -4419,7 +4432,7 @@
       CompileTimeErrorCode(
     'EXTENSION_OVERRIDE_WITH_CASCADE',
     "Extension overrides have no value so they can't be used as the receiver of a cascade expression.",
-    correction: "Try using '.' instead of '..'.",
+    correctionMessage: "Try using '.' instead of '..'.",
     hasPublishedDocs: true,
   );
 
@@ -4427,7 +4440,7 @@
       CompileTimeErrorCode(
     'EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER',
     "External fields cannot have initializers.",
-    correction:
+    correctionMessage:
         "Try removing the field initializer or the 'external' keyword from the field declaration.",
   );
 
@@ -4435,14 +4448,16 @@
       CompileTimeErrorCode(
     'EXTERNAL_FIELD_INITIALIZER',
     "External fields cannot have initializers.",
-    correction: "Try removing the initializer or the 'external' keyword.",
+    correctionMessage:
+        "Try removing the initializer or the 'external' keyword.",
   );
 
   static const CompileTimeErrorCode EXTERNAL_VARIABLE_INITIALIZER =
       CompileTimeErrorCode(
     'EXTERNAL_VARIABLE_INITIALIZER',
     "External variables cannot have initializers.",
-    correction: "Try removing the initializer or the 'external' keyword.",
+    correctionMessage:
+        "Try removing the initializer or the 'external' keyword.",
   );
 
   /**
@@ -4455,7 +4470,7 @@
   // The analyzer produces this diagnostic when a method or function invocation
   // has more positional arguments than the method or function allows.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` defines 2
   // parameters but is invoked with 3 arguments:
@@ -4481,7 +4496,7 @@
       CompileTimeErrorCode(
     'EXTRA_POSITIONAL_ARGUMENTS',
     "Too many positional arguments: {0} expected, but {1} found.",
-    correction: "Try removing the extra arguments.",
+    correctionMessage: "Try removing the extra arguments.",
     hasPublishedDocs: true,
   );
 
@@ -4496,7 +4511,7 @@
   // has more positional arguments than the method or function allows, but the
   // method or function defines named parameters.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` defines 2
   // positional parameters but has a named parameter that could be used for the
@@ -4537,7 +4552,7 @@
       CompileTimeErrorCode(
     'EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED',
     "Too many positional arguments: {0} expected, but {1} found.",
-    correction:
+    correctionMessage:
         "Try removing the extra positional arguments, or specifying the name for named arguments.",
     hasPublishedDocs: true,
   );
@@ -4580,7 +4595,7 @@
       CompileTimeErrorCode(
     'FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS',
     "The field '{0}' can't be initialized twice in the same constructor.",
-    correction: "Try removing one of the initializations.",
+    correctionMessage: "Try removing one of the initializations.",
     hasPublishedDocs: true,
   );
 
@@ -4632,7 +4647,7 @@
       FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION = CompileTimeErrorCode(
     'FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION',
     "Fields can't be initialized in the constructor if they are final and were already initialized at their declaration.",
-    correction: "Try removing one of the initializations.",
+    correctionMessage: "Try removing one of the initializations.",
     hasPublishedDocs: true,
   );
 
@@ -4695,7 +4710,7 @@
       FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER = CompileTimeErrorCode(
     'FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER',
     "Fields can't be initialized in both the parameter list and the initializers.",
-    correction: "Try removing one of the initializations.",
+    correctionMessage: "Try removing one of the initializations.",
     hasPublishedDocs: true,
   );
 
@@ -4736,7 +4751,7 @@
       CompileTimeErrorCode(
     'FIELD_INITIALIZER_FACTORY_CONSTRUCTOR',
     "Initializing formal parameters can't be used in factory constructors.",
-    correction: "Try using a normal parameter.",
+    correctionMessage: "Try using a normal parameter.",
     hasPublishedDocs: true,
   );
 
@@ -4803,7 +4818,7 @@
       CompileTimeErrorCode(
     'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
     "Initializing formal parameters can only be used in constructors.",
-    correction: "Try using a normal parameter.",
+    correctionMessage: "Try using a normal parameter.",
   );
 
   /**
@@ -4816,7 +4831,7 @@
   // that has the field hasn't been created at the point at which it should be
   // initialized.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the constructor
   // `C.zero`, which redirects to the constructor `C`, has a field formal
@@ -4877,7 +4892,7 @@
       CompileTimeErrorCode(
     'FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR',
     "The redirecting constructor can't have a field initializer.",
-    correction:
+    correctionMessage:
         "Try initializing the field in the constructor being redirected to.",
     hasPublishedDocs: true,
   );
@@ -4946,7 +4961,7 @@
       CompileTimeErrorCode(
     'FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE',
     "The parameter type '{0}' is incompatible with the field type '{1}'.",
-    correction:
+    correctionMessage:
         "Try changing or removing the parameter's type, or changing the field's type.",
     hasPublishedDocs: true,
   );
@@ -5000,7 +5015,7 @@
       FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR = CompileTimeErrorCode(
     'FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR',
     "'{0}' is final and was given a value when it was declared, so it can't be set to a new value.",
-    correction: "Try removing one of the initializations.",
+    correctionMessage: "Try removing one of the initializations.",
     hasPublishedDocs: true,
   );
 
@@ -5013,7 +5028,7 @@
   // The analyzer produces this diagnostic when a final field or variable isn't
   // initialized.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` doesn't have an
   // initializer:
@@ -5054,7 +5069,7 @@
       CompileTimeErrorCode(
     'FINAL_NOT_INITIALIZED',
     "The final variable '{0}' must be initialized.",
-    correction: "Try initializing the variable.",
+    correctionMessage: "Try initializing the variable.",
     hasPublishedDocs: true,
   );
 
@@ -5070,7 +5085,7 @@
   // initialized when the instance is created, either by the field's initializer
   // or by the constructor.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -5147,7 +5162,7 @@
       CompileTimeErrorCode(
     'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
     "All final variables must be initialized, but '{0}' isn't.",
-    correction: "Try adding an initializer for the field.",
+    correctionMessage: "Try adding an initializer for the field.",
     hasPublishedDocs: true,
     uniqueName: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR_1',
   );
@@ -5161,7 +5176,7 @@
       CompileTimeErrorCode(
     'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
     "All final variables must be initialized, but '{0}' and '{1}' aren't.",
-    correction: "Try adding initializers for the fields.",
+    correctionMessage: "Try adding initializers for the fields.",
     hasPublishedDocs: true,
     uniqueName: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR_2',
   );
@@ -5176,7 +5191,7 @@
       CompileTimeErrorCode(
     'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
     "All final variables must be initialized, but '{0}', '{1}', and {2} others aren't.",
-    correction: "Try adding initializers for the fields.",
+    correctionMessage: "Try adding initializers for the fields.",
     hasPublishedDocs: true,
     uniqueName: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS',
   );
@@ -5247,7 +5262,7 @@
   // The analyzer produces this diagnostic when the expression following `in` in
   // a for-in loop has a type that isn't a subclass of `Iterable`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `m` is a `Map`, and
   // `Map` isn't a subclass of `Iterable`:
@@ -5319,7 +5334,7 @@
       CompileTimeErrorCode(
     'FOR_IN_WITH_CONST_VARIABLE',
     "A for-in loop variable can't be a 'const'.",
-    correction:
+    correctionMessage:
         "Try removing the 'const' modifier from the variable, or use a different variable.",
     hasPublishedDocs: true,
   );
@@ -5332,7 +5347,7 @@
       CompileTimeErrorCode(
     'GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND',
     "Generic function types can't be used as type parameter bounds",
-    correction:
+    correctionMessage:
         "Try making the free variable in the function type part of the larger declaration signature",
   );
 
@@ -5344,7 +5359,7 @@
       GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT = CompileTimeErrorCode(
     'GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT',
     "A generic function type can't be a type argument.",
-    correction:
+    correctionMessage:
         "Try removing type parameters from the generic function type, or using 'dynamic' as the type argument here.",
   );
 
@@ -5393,8 +5408,9 @@
       GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC = CompileTimeErrorCode(
     'GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC',
     "A method tear-off on a receiver whose type is 'dynamic' can't have type arguments.",
-    correction:
+    correctionMessage:
         "Specify the type of the receiver, or remove the type arguments from the method tear-off.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -5408,7 +5424,7 @@
       CompileTimeErrorCode(
     'GETTER_NOT_ASSIGNABLE_SETTER_TYPES',
     "The return type of getter '{0}' is '{1}' which isn't assignable to the type '{2}' of its setter '{3}'.",
-    correction: "Try changing the types so that they are compatible.",
+    correctionMessage: "Try changing the types so that they are compatible.",
   );
 
   /**
@@ -5466,7 +5482,7 @@
       CompileTimeErrorCode(
     'GETTER_NOT_SUBTYPE_SETTER_TYPES',
     "The return type of getter '{0}' is '{1}' which isn't a subtype of the type '{2}' of its setter '{3}'.",
-    correction: "Try changing the types so that they are compatible.",
+    correctionMessage: "Try changing the types so that they are compatible.",
     hasPublishedDocs: true,
   );
 
@@ -5474,7 +5490,7 @@
       CompileTimeErrorCode(
     'IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used as values in an if condition inside a const collection literal.",
-    correction: "Try making the deferred import non-deferred.",
+    correctionMessage: "Try making the deferred import non-deferred.",
   );
 
   /**
@@ -5514,7 +5530,7 @@
       CompileTimeErrorCode(
     'ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE',
     "Functions marked 'async*' must have a return type that is a supertype of 'Stream<T>' for some type 'T'.",
-    correction:
+    correctionMessage:
         "Try fixing the return type of the function, or removing the modifier 'async*' from the function body.",
     hasPublishedDocs: true,
   );
@@ -5560,7 +5576,7 @@
       CompileTimeErrorCode(
     'ILLEGAL_ASYNC_RETURN_TYPE',
     "Functions marked 'async' must have a return type assignable to 'Future'.",
-    correction:
+    correctionMessage:
         "Try fixing the return type of the function, or removing the modifier 'async' from the function body.",
     hasPublishedDocs: true,
   );
@@ -5603,7 +5619,7 @@
       CompileTimeErrorCode(
     'ILLEGAL_SYNC_GENERATOR_RETURN_TYPE',
     "Functions marked 'sync*' must have a return type that is a supertype of 'Iterable<T>' for some type 'T'.",
-    correction:
+    correctionMessage:
         "Try fixing the return type of the function, or removing the modifier 'sync*' from the function body.",
     hasPublishedDocs: true,
   );
@@ -5615,7 +5631,7 @@
       CompileTimeErrorCode(
     'SUBTYPE_OF_DEFERRED_CLASS',
     "Classes and mixins can't implement deferred classes.",
-    correction:
+    correctionMessage:
         "Try specifying a different interface, removing the class from the list, or changing the import to not be deferred.",
     hasPublishedDocs: true,
     uniqueName: 'IMPLEMENTS_DEFERRED_CLASS',
@@ -5629,7 +5645,7 @@
       CompileTimeErrorCode(
     'SUBTYPE_OF_DISALLOWED_TYPE',
     "Classes and mixins can't implement '{0}'.",
-    correction:
+    correctionMessage:
         "Try specifying a different interface, or remove the class from the list.",
     hasPublishedDocs: true,
     uniqueName: 'IMPLEMENTS_DISALLOWED_CLASS',
@@ -5645,7 +5661,7 @@
   // clause of a class or mixin declaration is defined to be something other
   // than a class or mixin.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` is a variable
   // rather than a class or mixin:
@@ -5671,7 +5687,7 @@
   static const CompileTimeErrorCode IMPLEMENTS_NON_CLASS = CompileTimeErrorCode(
     'IMPLEMENTS_NON_CLASS',
     "Classes and mixins can only implement other classes and mixins.",
-    correction:
+    correctionMessage:
         "Try specifying a class or mixin, or remove the name from the list.",
     hasPublishedDocs: true,
   );
@@ -5685,7 +5701,7 @@
   // The analyzer produces this diagnostic when a single class is specified more
   // than once in an `implements` clause.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `A` is in the list
   // twice:
@@ -5706,7 +5722,7 @@
   static const CompileTimeErrorCode IMPLEMENTS_REPEATED = CompileTimeErrorCode(
     'IMPLEMENTS_REPEATED',
     "'{0}' can only be implemented once.",
-    correction: "Try removing all but one occurrence of the class name.",
+    correctionMessage: "Try removing all but one occurrence of the class name.",
     hasPublishedDocs: true,
   );
 
@@ -5754,7 +5770,7 @@
       CompileTimeErrorCode(
     'IMPLEMENTS_SUPER_CLASS',
     "'{0}' can't be used in both the 'extends' and 'implements' clauses.",
-    correction: "Try removing one of the occurrences.",
+    correctionMessage: "Try removing one of the occurrences.",
     hasPublishedDocs: true,
   );
 
@@ -5765,7 +5781,7 @@
       IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER = CompileTimeErrorCode(
     'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
     "A type alias that expands to a type parameter can't be implemented.",
-    correction: "Try specifying a class or mixin, or removing the list.",
+    correctionMessage: "Try specifying a class or mixin, or removing the list.",
     hasPublishedDocs: true,
     uniqueName: 'IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
   );
@@ -5779,7 +5795,7 @@
   // The analyzer produces this diagnostic when it finds a reference to an
   // instance member in a constructor's initializer list.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `defaultX` is an
   // instance member:
@@ -5824,7 +5840,7 @@
       CompileTimeErrorCode(
     'IMPLICIT_THIS_REFERENCE_IN_INITIALIZER',
     "The instance member '{0}' can't be accessed in an initializer.",
-    correction:
+    correctionMessage:
         "Try replacing the reference to the instance member with a different expression",
     hasPublishedDocs: true,
   );
@@ -5868,7 +5884,7 @@
       CompileTimeErrorCode(
     'IMPORT_OF_NON_LIBRARY',
     "The imported library '{0}' can't have a part-of directive.",
-    correction: "Try importing the library that the part is a part of.",
+    correctionMessage: "Try importing the library that the part is a part of.",
   );
 
   /**
@@ -5940,7 +5956,7 @@
       CompileTimeErrorCode(
     'INCONSISTENT_INHERITANCE',
     "Superinterfaces don't have a valid override for '{0}': {1}.",
-    correction:
+    correctionMessage:
         "Try adding an explicit override that is consistent with all of the inherited members.",
     hasPublishedDocs: true,
   );
@@ -5953,7 +5969,7 @@
    * is a getter and `m'` is a method.
    *
    * Parameters:
-   * 0: the name of the the instance member with inconsistent inheritance.
+   * 0: the name of the instance member with inconsistent inheritance.
    * 1: the name of the superinterface that declares the name as a getter.
    * 2: the name of the superinterface that declares the name as a method.
    */
@@ -5961,7 +5977,7 @@
       CompileTimeErrorCode(
     'INCONSISTENT_INHERITANCE_GETTER_AND_METHOD',
     "'{0}' is inherited as a getter (from '{1}') and also a method (from '{2}').",
-    correction:
+    correctionMessage:
         "Try adjusting the supertypes of this class to remove the inconsistency.",
   );
 
@@ -5991,7 +6007,7 @@
   // Constructors can't initialize fields that aren't declared and fields that
   // are inherited from superclasses.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the initializer is
   // initializing `x`, but `x` isn't a field in the class:
@@ -6034,7 +6050,7 @@
       CompileTimeErrorCode(
     'INITIALIZER_FOR_NON_EXISTENT_FIELD',
     "'{0}' isn't a field in the enclosing class.",
-    correction:
+    correctionMessage:
         "Try correcting the name to match an existing field, or defining a field named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -6099,7 +6115,7 @@
       CompileTimeErrorCode(
     'INITIALIZER_FOR_STATIC_FIELD',
     "'{0}' is a static field in the enclosing class. Fields initialized in a constructor can't be static.",
-    correction: "Try removing the initialization.",
+    correctionMessage: "Try removing the initialization.",
     hasPublishedDocs: true,
   );
 
@@ -6115,7 +6131,7 @@
   // initialized. Constructors can't initialize fields that aren't declared and
   // fields that are inherited from superclasses.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the field `x` isn't
   // defined:
@@ -6182,7 +6198,7 @@
       CompileTimeErrorCode(
     'INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD',
     "'{0}' isn't a field in the enclosing class.",
-    correction:
+    correctionMessage:
         "Try correcting the name to match an existing field, or defining a field named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -6191,14 +6207,15 @@
    * Parameters:
    * 0: the name of the static member
    * 1: the kind of the static member (field, getter, setter, or method)
-   * 2: the name of the defining class
+   * 2: the name of the static member's enclosing element
+   * 3: the kind of the static member's enclosing element (class, mixin, or extension)
    */
   // #### Description
   //
   // The analyzer produces this diagnostic when an access operator is used to
   // access a static member through an instance of the class.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `zero` is a static
   // field, but it’s being accessed as if it were an instance field:
@@ -6229,12 +6246,26 @@
   static const CompileTimeErrorCode INSTANCE_ACCESS_TO_STATIC_MEMBER =
       CompileTimeErrorCode(
     'INSTANCE_ACCESS_TO_STATIC_MEMBER',
-    "Static {1} '{0}' can't be accessed through an instance.",
-    correction: "Try using the class '{2}' to access the {1}.",
+    "The static {1} '{0}' can't be accessed through an instance.",
+    correctionMessage: "Try using the {3} '{2}' to access the {1}.",
     hasPublishedDocs: true,
   );
 
   /**
+   * Parameters:
+   * 0: the name of the static member
+   * 1: the kind of the static member (field, getter, setter, or method)
+   */
+  static const CompileTimeErrorCode
+      INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION =
+      CompileTimeErrorCode(
+    'INSTANCE_ACCESS_TO_STATIC_MEMBER',
+    "The static {1} '{0}' can't be accessed through an instance.",
+    hasPublishedDocs: true,
+    uniqueName: 'INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION',
+  );
+
+  /**
    * No parameters.
    */
   // #### Description
@@ -6247,7 +6278,7 @@
   // factory constructor, the instance isn't created before executing the body,
   // so `this` can't be used to reference it.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` isn't in scope in
   // the factory constructor:
@@ -6279,7 +6310,7 @@
       CompileTimeErrorCode(
     'INSTANCE_MEMBER_ACCESS_FROM_FACTORY',
     "Instance members can't be accessed from a factory constructor.",
-    correction: "Try removing the reference to the instance member.",
+    correctionMessage: "Try removing the reference to the instance member.",
     hasPublishedDocs: true,
   );
 
@@ -6291,7 +6322,7 @@
   // The analyzer produces this diagnostic when a static method contains an
   // unqualified reference to an instance member.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the instance field `x`
   // is being referenced in a static method:
@@ -6340,7 +6371,7 @@
       CompileTimeErrorCode(
     'INSTANCE_MEMBER_ACCESS_FROM_STATIC',
     "Instance members can't be accessed from a static method.",
-    correction:
+    correctionMessage:
         "Try removing the reference to the instance member, or removing the keyword 'static' from the method.",
     hasPublishedDocs: true,
   );
@@ -6355,7 +6386,7 @@
   // though you can't create an instance of an abstract class, abstract classes
   // can declare constructors that can be invoked by subclasses.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `C` is an abstract
   // class:
@@ -6374,7 +6405,7 @@
       CompileTimeErrorCode(
     'INSTANTIATE_ABSTRACT_CLASS',
     "Abstract classes can't be instantiated.",
-    correction: "Try creating an instance of a concrete subtype.",
+    correctionMessage: "Try creating an instance of a concrete subtype.",
     hasPublishedDocs: true,
   );
 
@@ -6413,7 +6444,7 @@
   static const CompileTimeErrorCode INSTANTIATE_ENUM = CompileTimeErrorCode(
     'INSTANTIATE_ENUM',
     "Enums can't be instantiated.",
-    correction: "Try using one of the defined constants.",
+    correctionMessage: "Try using one of the defined constants.",
     hasPublishedDocs: true,
   );
 
@@ -6461,7 +6492,8 @@
       INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER = CompileTimeErrorCode(
     'INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
     "Type aliases that expand to a type parameter can't be instantiated.",
-    correction: "Try replacing it with a class.",
+    correctionMessage: "Try replacing it with a class.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -6503,7 +6535,7 @@
       CompileTimeErrorCode(
     'INTEGER_LITERAL_IMPRECISE_AS_DOUBLE',
     "The integer literal is being used as a double, but can't be represented as a 64-bit double without overflow or loss of precision: '{0}'.",
-    correction:
+    correctionMessage:
         "Try using the class 'BigInt', or switch to the closest valid double: '{1}'.",
     hasPublishedDocs: true,
   );
@@ -6538,7 +6570,7 @@
       CompileTimeErrorCode(
     'INTEGER_LITERAL_OUT_OF_RANGE',
     "The integer literal {0} can't be represented in 64 bits.",
-    correction:
+    correctionMessage:
         "Try using the 'BigInt' class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.",
     hasPublishedDocs: true,
   );
@@ -6554,7 +6586,7 @@
   //
   // Getters can't be used as annotations.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the variable `v` isn't
   // a `const` variable:
@@ -6672,8 +6704,9 @@
       CompileTimeErrorCode(
     'INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used in annotations.",
-    correction:
+    correctionMessage:
         "Try moving the constant from the deferred library, or removing 'deferred' from the import.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -6725,7 +6758,7 @@
       CompileTimeErrorCode(
     'INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used as annotations.",
-    correction:
+    correctionMessage:
         "Try removing the annotation, or changing the import to not be deferred.",
     hasPublishedDocs: true,
   );
@@ -6741,7 +6774,7 @@
   // that is assigned to a variable isn't assignable to the type of the
   // variable.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the type of the
   // initializer (`int`) isn't assignable to the type of the variable
@@ -6775,7 +6808,7 @@
   static const CompileTimeErrorCode INVALID_ASSIGNMENT = CompileTimeErrorCode(
     'INVALID_ASSIGNMENT',
     "A value of type '{0}' can't be assigned to a variable of type '{1}'.",
-    correction:
+    correctionMessage:
         "Try changing the type of the variable, or casting the right-hand type to '{1}'.",
     hasPublishedDocs: true,
   );
@@ -6942,7 +6975,7 @@
       CompileTimeErrorCode(
     'INVALID_EXTENSION_ARGUMENT_COUNT',
     "Extension overrides must have exactly one argument: the value of 'this' in the extension method.",
-    correction: "Try specifying exactly one argument.",
+    correctionMessage: "Try specifying exactly one argument.",
     hasPublishedDocs: true,
   );
 
@@ -6954,7 +6987,7 @@
   // The analyzer produces this diagnostic when the name of a factory
   // constructor isn't the same as the name of the surrounding class.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the name of the factory
   // constructor (`A`) isn't the same as the surrounding class (`C`):
@@ -7137,7 +7170,7 @@
       CompileTimeErrorCode(
     'INVALID_INLINE_FUNCTION_TYPE',
     "Inline function types can't be used for parameters in a generic function type.",
-    correction:
+    correctionMessage:
         "Try using a generic function type (returnType 'Function(' parameters ')').",
     hasPublishedDocs: true,
   );
@@ -7188,7 +7221,7 @@
       CompileTimeErrorCode(
     'INVALID_MODIFIER_ON_CONSTRUCTOR',
     "The modifier '{0}' can't be applied to the body of a constructor.",
-    correction: "Try removing the modifier.",
+    correctionMessage: "Try removing the modifier.",
     hasPublishedDocs: true,
   );
 
@@ -7235,7 +7268,7 @@
       CompileTimeErrorCode(
     'INVALID_MODIFIER_ON_SETTER',
     "Setters can't use 'async', 'async*', or 'sync*'.",
-    correction: "Try removing the modifier.",
+    correctionMessage: "Try removing the modifier.",
     hasPublishedDocs: true,
   );
 
@@ -7260,7 +7293,7 @@
   // * The return type of the override is assignable to the return type of the
   //   overridden member.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the type of the
   // parameter `s` (`String`) isn't assignable to the type of the parameter `i`
@@ -7319,7 +7352,7 @@
   // only defined in the context of an instance method or a generative
   // constructor.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `v` is a top-level
   // variable:
@@ -7403,7 +7436,7 @@
   // This isn't allowed because the value of the type parameter (the actual type
   // that will be used at runtime) can't be known at compile time.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the type parameter `T`
   // is being used as a type argument when creating a constant list:
@@ -7445,7 +7478,8 @@
       CompileTimeErrorCode(
     'INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL',
     "Constant list literals can't include a type parameter as a type argument, such as '{0}'.",
-    correction: "Try replacing the type parameter with a different type.",
+    correctionMessage:
+        "Try replacing the type parameter with a different type.",
     hasPublishedDocs: true,
     uniqueName: 'INVALID_TYPE_ARGUMENT_IN_CONST_LIST',
   );
@@ -7458,7 +7492,8 @@
       CompileTimeErrorCode(
     'INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL',
     "Constant map literals can't include a type parameter as a type argument, such as '{0}'.",
-    correction: "Try replacing the type parameter with a different type.",
+    correctionMessage:
+        "Try replacing the type parameter with a different type.",
     hasPublishedDocs: true,
     uniqueName: 'INVALID_TYPE_ARGUMENT_IN_CONST_MAP',
   );
@@ -7471,7 +7506,8 @@
       CompileTimeErrorCode(
     'INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL',
     "Constant set literals can't include a type parameter as a type argument, such as '{0}'.",
-    correction: "Try replacing the type parameter with a different type.",
+    correctionMessage:
+        "Try replacing the type parameter with a different type.",
     hasPublishedDocs: true,
     uniqueName: 'INVALID_TYPE_ARGUMENT_IN_CONST_SET',
   );
@@ -7485,7 +7521,7 @@
   // The analyzer produces this diagnostic when a URI in a directive doesn't
   // conform to the syntax of a valid URI.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `'#'` isn't a valid
   // URI:
@@ -7510,7 +7546,7 @@
       CompileTimeErrorCode(
     'INVALID_USE_OF_COVARIANT',
     "The 'covariant' keyword can only be used for parameters in instance methods or before non-final instance fields.",
-    correction: "Try removing the 'covariant' keyword.",
+    correctionMessage: "Try removing the 'covariant' keyword.",
   );
 
   /**
@@ -7546,7 +7582,7 @@
       CompileTimeErrorCode(
     'INVALID_USE_OF_NULL_VALUE',
     "An expression whose value is always 'null' can't be dereferenced.",
-    correction: "Try changing the type of the expression.",
+    correctionMessage: "Try changing the type of the expression.",
     hasPublishedDocs: true,
   );
 
@@ -7559,7 +7595,7 @@
   // The analyzer produces this diagnostic when an extension override is used to
   // invoke a function but the extension doesn't declare a `call` method.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the extension `E`
   // doesn't define a `call` method:
@@ -7608,7 +7644,7 @@
   // but the name of the function being invoked is defined to be something other
   // than a function.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `Binary` is the name of
   // a function type, not a function:
@@ -7628,7 +7664,7 @@
       CompileTimeErrorCode(
     'INVOCATION_OF_NON_FUNCTION',
     "'{0}' isn't a function.",
-    correction:
+    correctionMessage:
         "Try correcting the name to match an existing function, or define a method or function named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -7807,7 +7843,7 @@
   static const CompileTimeErrorCode LABEL_UNDEFINED = CompileTimeErrorCode(
     'LABEL_UNDEFINED',
     "Can't reference an undefined label '{0}'.",
-    correction:
+    correctionMessage:
         "Try defining the label, or correcting the name to match an existing label.",
     hasPublishedDocs: true,
   );
@@ -7860,7 +7896,7 @@
       CompileTimeErrorCode(
     'LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR',
     "Can't have a late final field in a class with a generative const constructor.",
-    correction:
+    correctionMessage:
         "Try removing the 'late' modifier, or don't declare 'const' constructors.",
     hasPublishedDocs: true,
   );
@@ -7919,7 +7955,7 @@
       CompileTimeErrorCode(
     'LATE_FINAL_LOCAL_ALREADY_ASSIGNED',
     "The late final local variable is already assigned.",
-    correction:
+    correctionMessage:
         "Try removing the 'final' modifier, or don't reassign the value.",
     hasPublishedDocs: true,
   );
@@ -7934,7 +7970,7 @@
   // The analyzer produces this diagnostic when the type of an element in a list
   // literal isn't assignable to the element type of the list.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `2.5` is a double, and
   // the list can hold only integers:
@@ -8006,7 +8042,7 @@
       CompileTimeErrorCode(
     'MAIN_FIRST_POSITIONAL_PARAMETER_TYPE',
     "The type of the first positional parameter of the 'main' function must be a supertype of 'List<String>'.",
-    correction: "Try changing the type of the parameter.",
+    correctionMessage: "Try changing the type of the parameter.",
     hasPublishedDocs: true,
   );
 
@@ -8044,7 +8080,7 @@
       CompileTimeErrorCode(
     'MAIN_HAS_REQUIRED_NAMED_PARAMETERS',
     "The function 'main' can't have any required named parameters.",
-    correction:
+    correctionMessage:
         "Try using a different name for the function, or removing the 'required' modifier.",
     hasPublishedDocs: true,
   );
@@ -8092,7 +8128,7 @@
       MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS = CompileTimeErrorCode(
     'MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS',
     "The function 'main' can't have more than two required positional parameters.",
-    correction:
+    correctionMessage:
         "Try using a different name for the function, or removing extra parameters.",
     hasPublishedDocs: true,
   );
@@ -8124,7 +8160,7 @@
   static const CompileTimeErrorCode MAIN_IS_NOT_FUNCTION = CompileTimeErrorCode(
     'MAIN_IS_NOT_FUNCTION',
     "The declaration named 'main' must be a function.",
-    correction: "Try using a different name for this declaration.",
+    correctionMessage: "Try using a different name for this declaration.",
     hasPublishedDocs: true,
   );
 
@@ -8136,7 +8172,7 @@
   // The analyzer produces this diagnostic when a map entry (a key/value pair)
   // is found in a set literal.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the literal has a map
   // entry even though it's a set literal:
@@ -8168,7 +8204,7 @@
   static const CompileTimeErrorCode MAP_ENTRY_NOT_IN_MAP = CompileTimeErrorCode(
     'MAP_ENTRY_NOT_IN_MAP',
     "Map entries can only be used in a map literal.",
-    correction:
+    correctionMessage:
         "Try converting the collection to a map or removing the map entry.",
     hasPublishedDocs: true,
   );
@@ -8183,7 +8219,7 @@
   // The analyzer produces this diagnostic when a key of a key-value pair in a
   // map literal has a type that isn't assignable to the key type of the map.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `2` is an `int`, but
   // the keys of the map are required to be `String`s:
@@ -8221,10 +8257,10 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when a value of a key-value pair in a
-  // map literal has a type that isn't assignable to the the value type of the
+  // map literal has a type that isn't assignable to the value type of the
   // map.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `2` is an `int`, but/
   // the values of the map are required to be `String`s:
@@ -8261,7 +8297,7 @@
       CompileTimeErrorCode(
     'MISSING_CONST_IN_LIST_LITERAL',
     "List literals must be prefixed with 'const' when used as a constant expression.",
-    correction: "Try adding the keyword 'const' before the literal.",
+    correctionMessage: "Try adding the keyword 'const' before the literal.",
   );
 
   /**
@@ -8271,7 +8307,7 @@
       CompileTimeErrorCode(
     'MISSING_CONST_IN_MAP_LITERAL',
     "Map literals must be prefixed with 'const' when used as a constant expression.",
-    correction: "Try adding the keyword 'const' before the literal.",
+    correctionMessage: "Try adding the keyword 'const' before the literal.",
   );
 
   /**
@@ -8281,7 +8317,7 @@
       CompileTimeErrorCode(
     'MISSING_CONST_IN_SET_LITERAL',
     "Set literals must be prefixed with 'const' when used as a constant expression.",
-    correction: "Try adding the keyword 'const' before the literal.",
+    correctionMessage: "Try adding the keyword 'const' before the literal.",
   );
 
   /**
@@ -8299,7 +8335,7 @@
   static const CompileTimeErrorCode MISSING_DART_LIBRARY = CompileTimeErrorCode(
     'MISSING_DART_LIBRARY',
     "Required library '{0}' is missing.",
-    correction: "Re-install the Dart or Flutter SDK.",
+    correctionMessage: "Re-install the Dart or Flutter SDK.",
     hasPublishedDocs: true,
   );
 
@@ -8315,7 +8351,7 @@
   // parameter doesn't allow the parameter to have a value of `null`, then the
   // implicit default value isn't valid.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `x` can't be `null`,
   // and no non-`null` default value is specified:
@@ -8357,7 +8393,7 @@
       CompileTimeErrorCode(
     'MISSING_DEFAULT_VALUE_FOR_PARAMETER',
     "The parameter '{0}' can't have a value of 'null' because of its type, but the implicit default value is 'null'.",
-    correction:
+    correctionMessage:
         "Try adding either an explicit non-'null' default value or the 'required' modifier.",
     hasPublishedDocs: true,
   );
@@ -8397,7 +8433,7 @@
       CompileTimeErrorCode(
     'MISSING_REQUIRED_ARGUMENT',
     "The named parameter '{0}' is required, but there's no corresponding argument.",
-    correction: "Try adding the required argument.",
+    correctionMessage: "Try adding the required argument.",
     hasPublishedDocs: true,
   );
 
@@ -8411,7 +8447,7 @@
   static const CompileTimeErrorCode MIXINS_SUPER_CLASS = CompileTimeErrorCode(
     'MIXINS_SUPER_CLASS',
     "'{0}' can't be used in both 'extends' and 'with' clauses.",
-    correction: "Try removing one of the occurrences.",
+    correctionMessage: "Try removing one of the occurrences.",
   );
 
   /**
@@ -8565,7 +8601,7 @@
       MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE = CompileTimeErrorCode(
     'MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE',
     "'{0}' can't be mixed onto '{1}' because '{1}' doesn't implement '{2}'.",
-    correction: "Try extending the class '{0}'.",
+    correctionMessage: "Try extending the class '{0}'.",
     hasPublishedDocs: true,
   );
 
@@ -8723,7 +8759,7 @@
   static const CompileTimeErrorCode MIXIN_DEFERRED_CLASS = CompileTimeErrorCode(
     'SUBTYPE_OF_DEFERRED_CLASS',
     "Classes can't mixin deferred classes.",
-    correction: "Try changing the import to not be deferred.",
+    correctionMessage: "Try changing the import to not be deferred.",
     hasPublishedDocs: true,
     uniqueName: 'MIXIN_DEFERRED_CLASS',
   );
@@ -8847,7 +8883,7 @@
       CompileTimeErrorCode(
     'SUBTYPE_OF_DISALLOWED_TYPE',
     "Classes can't mixin '{0}'.",
-    correction:
+    correctionMessage:
         "Try specifying a different class or mixin, or remove the class or mixin from the list.",
     hasPublishedDocs: true,
     uniqueName: 'MIXIN_OF_DISALLOWED_CLASS',
@@ -8861,7 +8897,7 @@
   // The analyzer produces this diagnostic when a name in a `with` clause is
   // defined to be something other than a mixin or a class.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `F` is defined to be a
   // function type:
@@ -8917,7 +8953,7 @@
       MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS = CompileTimeErrorCode(
     'MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS',
     "Deferred classes can't be used as super-class constraints.",
-    correction: "Try changing the import to not be deferred.",
+    correctionMessage: "Try changing the import to not be deferred.",
   );
 
   /**
@@ -8928,7 +8964,7 @@
       MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS = CompileTimeErrorCode(
     'SUBTYPE_OF_DISALLOWED_TYPE',
     "''{0}' can't be used as a superclass constraint.",
-    correction:
+    correctionMessage:
         "Try specifying a different super-class constraint, or remove the 'on' clause.",
     hasPublishedDocs: true,
     uniqueName: 'MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS',
@@ -8942,7 +8978,7 @@
   // The analyzer produces this diagnostic when a type following the `on`
   // keyword in a mixin declaration is neither a class nor a mixin.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `F` is neither a class
   // nor a mixin:
@@ -8984,7 +9020,7 @@
       MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS = CompileTimeErrorCode(
     'MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS',
     "Constructors can have at most one 'this' redirection.",
-    correction: "Try removing all but one of the redirections.",
+    correctionMessage: "Try removing all but one of the redirections.",
   );
 
   /**
@@ -9075,7 +9111,7 @@
       CompileTimeErrorCode(
     'MULTIPLE_SUPER_INITIALIZERS',
     "A constructor can have at most one 'super' initializer.",
-    correction: "Try removing all but one of the 'super' initializers.",
+    correctionMessage: "Try removing all but one of the 'super' initializers.",
     hasPublishedDocs: true,
   );
 
@@ -9127,7 +9163,7 @@
   static const CompileTimeErrorCode NEW_WITH_NON_TYPE = CompileTimeErrorCode(
     'CREATION_WITH_NON_TYPE',
     "The name '{0}' isn't a class.",
-    correction: "Try correcting the name to match an existing class.",
+    correctionMessage: "Try correcting the name to match an existing class.",
     hasPublishedDocs: true,
     isUnresolvedIdentifier: true,
     uniqueName: 'NEW_WITH_NON_TYPE',
@@ -9150,7 +9186,7 @@
       CompileTimeErrorCode(
     'NEW_WITH_UNDEFINED_CONSTRUCTOR',
     "The class '{0}' doesn't have a constructor named '{1}'.",
-    correction:
+    correctionMessage:
         "Try invoking a different constructor, or define a constructor named '{1}'.",
   );
 
@@ -9164,7 +9200,7 @@
   // invoked on a class that defines named constructors but the class doesn’t
   // have an unnamed constructor.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `A` doesn't define an
   // unnamed constructor:
@@ -9204,7 +9240,8 @@
       CompileTimeErrorCode(
     'NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
     "The class '{0}' doesn't have an unnamed constructor.",
-    correction: "Try using one of the named constructors defined in '{0}'.",
+    correctionMessage:
+        "Try using one of the named constructors defined in '{0}'.",
     hasPublishedDocs: true,
   );
 
@@ -9221,7 +9258,7 @@
       CompileTimeErrorCode(
     'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
     "Missing concrete implementations of '{0}', '{1}', '{2}', '{3}', and {4} more.",
-    correction:
+    correctionMessage:
         "Try implementing the missing methods, or make the class abstract.",
     hasPublishedDocs: true,
     uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS',
@@ -9238,7 +9275,7 @@
       NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR = CompileTimeErrorCode(
     'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
     "Missing concrete implementations of '{0}', '{1}', '{2}', and '{3}'.",
-    correction:
+    correctionMessage:
         "Try implementing the missing methods, or make the class abstract.",
     hasPublishedDocs: true,
     uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR',
@@ -9254,7 +9291,7 @@
   // more abstract members, and doesn't provide or inherit an implementation for
   // at least one of those abstract members.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the class `B` doesn't
   // have a concrete implementation of `m`:
@@ -9311,7 +9348,7 @@
       NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE = CompileTimeErrorCode(
     'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
     "Missing concrete implementation of '{0}'.",
-    correction:
+    correctionMessage:
         "Try implementing the missing method, or make the class abstract.",
     hasPublishedDocs: true,
     uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE',
@@ -9327,7 +9364,7 @@
       NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE = CompileTimeErrorCode(
     'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
     "Missing concrete implementations of '{0}', '{1}', and '{2}'.",
-    correction:
+    correctionMessage:
         "Try implementing the missing methods, or make the class abstract.",
     hasPublishedDocs: true,
     uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE',
@@ -9342,7 +9379,7 @@
       NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO = CompileTimeErrorCode(
     'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
     "Missing concrete implementations of '{0}' and '{1}'.",
-    correction:
+    correctionMessage:
         "Try implementing the missing methods, or make the class abstract.",
     hasPublishedDocs: true,
     uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO',
@@ -9356,7 +9393,7 @@
   // The analyzer produces this diagnostic when a condition, such as an `if` or
   // `while` loop, doesn't have the static type `bool`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` has the static type
   // `int`:
@@ -9383,7 +9420,7 @@
   static const CompileTimeErrorCode NON_BOOL_CONDITION = CompileTimeErrorCode(
     'NON_BOOL_CONDITION',
     "Conditions must have a static type of 'bool'.",
-    correction: "Try changing the condition.",
+    correctionMessage: "Try changing the condition.",
     hasPublishedDocs: true,
   );
 
@@ -9395,7 +9432,7 @@
   // The analyzer produces this diagnostic when the first expression in an
   // assert has a type other than `bool`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the type of `p` is
   // `int`, but a `bool` is required:
@@ -9418,7 +9455,7 @@
   static const CompileTimeErrorCode NON_BOOL_EXPRESSION = CompileTimeErrorCode(
     'NON_BOOL_EXPRESSION',
     "The expression in an assert must be of type 'bool'.",
-    correction: "Try changing the expression.",
+    correctionMessage: "Try changing the expression.",
     hasPublishedDocs: true,
   );
 
@@ -9430,7 +9467,7 @@
   // The analyzer produces this diagnostic when the operand of the unary
   // negation operator (`!`) doesn't have the type `bool`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` is an `int` when it
   // must be a `bool`:
@@ -9452,7 +9489,7 @@
       CompileTimeErrorCode(
     'NON_BOOL_NEGATION_EXPRESSION',
     "A negation operand must have a static type of 'bool'.",
-    correction: "Try changing the operand to the '!' operator.",
+    correctionMessage: "Try changing the operand to the '!' operator.",
     hasPublishedDocs: true,
   );
 
@@ -9465,7 +9502,7 @@
   // The analyzer produces this diagnostic when one of the operands of either
   // the `&&` or `||` operator doesn't have the type `bool`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `a` isn't a Boolean
   // value:
@@ -9545,7 +9582,7 @@
   // The analyzer produces this diagnostic when the expression in a `case`
   // clause isn't a constant expression.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `j` isn't a constant:
   //
@@ -9664,7 +9701,7 @@
       NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY = CompileTimeErrorCode(
     'NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used as a case expression.",
-    correction:
+    correctionMessage:
         "Try re-writing the switch as a series of if statements, or changing the import to not be deferred.",
     hasPublishedDocs: true,
   );
@@ -9678,7 +9715,7 @@
   // named or positional, has a default value that isn't a compile-time
   // constant.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -9770,7 +9807,7 @@
       NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY = CompileTimeErrorCode(
     'NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used as a default parameter value.",
-    correction:
+    correctionMessage:
         "Try leaving the default as null and initializing the parameter inside the function body.",
     hasPublishedDocs: true,
   );
@@ -9785,7 +9822,7 @@
   // explicitly (because it's prefixed by the `const` keyword) or implicitly
   // (because it appears in a [constant context][]).
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` isn't a constant,
   // even though it appears in an implicitly constant list literal:
@@ -9819,7 +9856,8 @@
       CompileTimeErrorCode(
     'NON_CONSTANT_LIST_ELEMENT',
     "The values in a const list literal must be constants.",
-    correction: "Try removing the keyword 'const' from the list literal.",
+    correctionMessage:
+        "Try removing the keyword 'const' from the list literal.",
     hasPublishedDocs: true,
   );
 
@@ -9886,7 +9924,7 @@
       NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY = CompileTimeErrorCode(
     'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used as values in a 'const' list literal.",
-    correction:
+    correctionMessage:
         "Try removing the keyword 'const' from the list literal or removing the keyword 'deferred' from the import.",
     hasPublishedDocs: true,
     uniqueName: 'NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY',
@@ -9940,7 +9978,7 @@
       CompileTimeErrorCode(
     'NON_CONSTANT_MAP_ELEMENT',
     "The elements in a const map literal must be constant.",
-    correction: "Try removing the keyword 'const' from the map literal.",
+    correctionMessage: "Try removing the keyword 'const' from the map literal.",
     hasPublishedDocs: true,
   );
 
@@ -9952,7 +9990,7 @@
   // The analyzer produces this diagnostic when a key in a constant map literal
   // isn't a constant value.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic beause `a` isn't a constant:
   //
@@ -9980,7 +10018,7 @@
   static const CompileTimeErrorCode NON_CONSTANT_MAP_KEY = CompileTimeErrorCode(
     'NON_CONSTANT_MAP_KEY',
     "The keys in a const map literal must be constant.",
-    correction: "Try removing the keyword 'const' from the map literal.",
+    correctionMessage: "Try removing the keyword 'const' from the map literal.",
     hasPublishedDocs: true,
   );
 
@@ -9991,7 +10029,7 @@
       CompileTimeErrorCode(
     'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used as keys in a 'const' map literal.",
-    correction:
+    correctionMessage:
         "Try removing the keyword 'const' from the map literal or removing the keyword 'deferred' from the import.",
     hasPublishedDocs: true,
     uniqueName: 'NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY',
@@ -10005,7 +10043,7 @@
   // The analyzer produces this diagnostic when a value in a constant map
   // literal isn't a constant value.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `a` isn't a constant:
   //
@@ -10034,7 +10072,7 @@
       CompileTimeErrorCode(
     'NON_CONSTANT_MAP_VALUE',
     "The values in a const map literal must be constant.",
-    correction: "Try removing the keyword 'const' from the map literal.",
+    correctionMessage: "Try removing the keyword 'const' from the map literal.",
     hasPublishedDocs: true,
   );
 
@@ -10045,7 +10083,7 @@
       NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY = CompileTimeErrorCode(
     'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used as values in a 'const' map literal.",
-    correction:
+    correctionMessage:
         "Try removing the keyword 'const' from the map literal or removing the keyword 'deferred' from the import.",
     hasPublishedDocs: true,
     uniqueName: 'NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY',
@@ -10059,7 +10097,7 @@
   // The analyzer produces this diagnostic when a constant set literal contains
   // an element that isn't a compile-time constant.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `i` isn't a constant:
   //
@@ -10090,7 +10128,7 @@
       CompileTimeErrorCode(
     'NON_CONSTANT_SET_ELEMENT',
     "The values in a const set literal must be constants.",
-    correction: "Try removing the keyword 'const' from the set literal.",
+    correctionMessage: "Try removing the keyword 'const' from the set literal.",
     hasPublishedDocs: true,
   );
 
@@ -10153,7 +10191,7 @@
       CompileTimeErrorCode(
     'NON_GENERATIVE_CONSTRUCTOR',
     "The generative constructor '{0}' is expected, but a factory was found.",
-    correction:
+    correctionMessage:
         "Try calling a different constructor of the superclass, or making the called constructor not be a factory constructor.",
     hasPublishedDocs: true,
   );
@@ -10172,7 +10210,7 @@
       CompileTimeErrorCode(
     'NON_GENERATIVE_IMPLICIT_CONSTRUCTOR',
     "The unnamed constructor of superclass '{0}' (called by the default constructor of '{1}') must be a generative constructor, but factory found.",
-    correction:
+    correctionMessage:
         "Try adding an explicit constructor that has a different superinitializer or changing the superclass constructor '{2}' to not be a factory constructor.",
   );
 
@@ -10240,7 +10278,7 @@
   // The analyzer produces this diagnostic when an identifier that isn't a type
   // is used as a type argument.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` is a variable, not
   // a type:
@@ -10262,7 +10300,7 @@
       CompileTimeErrorCode(
     'NON_TYPE_AS_TYPE_ARGUMENT',
     "The name '{0}' isn't a type so it can't be used as a type argument.",
-    correction:
+    correctionMessage:
         "Try correcting the name to an existing type, or defining a type named '{0}'.",
     hasPublishedDocs: true,
     isUnresolvedIdentifier: true,
@@ -10277,7 +10315,7 @@
   // The analyzer produces this diagnostic when the identifier following the
   // `on` in a `catch` clause is defined to be something other than a type.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` is a function, not
   // a type:
@@ -10311,7 +10349,7 @@
       CompileTimeErrorCode(
     'NON_TYPE_IN_CATCH_CLAUSE',
     "The name '{0}' isn't a type and can't be used in an on-catch clause.",
-    correction: "Try correcting the name to match an existing class.",
+    correctionMessage: "Try correcting the name to match an existing class.",
     hasPublishedDocs: true,
   );
 
@@ -10347,7 +10385,7 @@
       CompileTimeErrorCode(
     'NON_VOID_RETURN_FOR_OPERATOR',
     "The return type of the operator []= must be 'void'.",
-    correction: "Try changing the return type to 'void'.",
+    correctionMessage: "Try changing the return type to 'void'.",
     hasPublishedDocs: true,
   );
 
@@ -10383,7 +10421,7 @@
       CompileTimeErrorCode(
     'NON_VOID_RETURN_FOR_SETTER',
     "The return type of the setter must be 'void' or absent.",
-    correction:
+    correctionMessage:
         "Try removing the return type, or define a method rather than a setter.",
     hasPublishedDocs: true,
   );
@@ -10402,7 +10440,7 @@
   // - The analyzer can't prove that the local variable will be assigned before
   //   the reference based on the specification of [definite assignment][].
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `x` can't have a value
   // of `null`, but is referenced before a value was assigned to it:
@@ -10506,7 +10544,7 @@
       CompileTimeErrorCode(
     'NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE',
     "The non-nullable local variable '{0}' must be assigned before it can be used.",
-    correction:
+    correctionMessage:
         "Try giving it an initializer expression, or ensure that it's assigned on every execution path.",
     hasPublishedDocs: true,
   );
@@ -10520,7 +10558,7 @@
   // The analyzer produces this diagnostic when a name is used as a type but
   // declared to be something other than a type.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` is a function:
   //
@@ -10535,7 +10573,7 @@
   static const CompileTimeErrorCode NOT_A_TYPE = CompileTimeErrorCode(
     'NOT_A_TYPE',
     "{0} isn't a type.",
-    correction: "Try correcting the name to match an existing type.",
+    correctionMessage: "Try correcting the name to match an existing type.",
     hasPublishedDocs: true,
   );
 
@@ -10567,6 +10605,7 @@
   static const CompileTimeErrorCode NOT_BINARY_OPERATOR = CompileTimeErrorCode(
     'NOT_BINARY_OPERATOR',
     "'{0}' isn't a binary operator.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -10580,7 +10619,7 @@
   // has fewer positional arguments than the number of required positional
   // parameters.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` declares two
   // required parameters, but only one argument is provided:
@@ -10606,7 +10645,7 @@
       CompileTimeErrorCode(
     'NOT_ENOUGH_POSITIONAL_ARGUMENTS',
     "{0} positional argument(s) expected, but {1} found.",
-    correction: "Try adding the missing arguments.",
+    correctionMessage: "Try adding the missing arguments.",
     hasPublishedDocs: true,
   );
 
@@ -10622,7 +10661,7 @@
   // - Doesn't have an initializer
   // - Isn't marked as `late`
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `x` is implicitly
   // initialized to `null` when it isn't allowed to be `null`:
@@ -10685,7 +10724,7 @@
       NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD = CompileTimeErrorCode(
     'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD',
     "Non-nullable instance field '{0}' must be initialized.",
-    correction:
+    correctionMessage:
         "Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'.",
     hasPublishedDocs: true,
   );
@@ -10699,7 +10738,7 @@
       CompileTimeErrorCode(
     'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD',
     "Non-nullable instance field '{0}' must be initialized.",
-    correction:
+    correctionMessage:
         "Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'.",
     hasPublishedDocs: true,
     uniqueName: 'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR',
@@ -10717,7 +10756,7 @@
   // initialized to `null`, but the type of the field or variable doesn't allow
   // it to be set to `null`, so an explicit initializer must be provided.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the field `f` can't be
   // initialized to `null`:
@@ -10765,7 +10804,7 @@
       CompileTimeErrorCode(
     'NOT_INITIALIZED_NON_NULLABLE_VARIABLE',
     "The non-nullable variable '{0}' must be initialized.",
-    correction: "Try adding an initializer expression.",
+    correctionMessage: "Try adding an initializer expression.",
     hasPublishedDocs: true,
   );
 
@@ -10776,7 +10815,7 @@
       CompileTimeErrorCode(
     'NOT_INSTANTIATED_BOUND',
     "Type parameter bound types must be instantiated.",
-    correction: "Try adding type arguments to the type parameter bound.",
+    correctionMessage: "Try adding type arguments to the type parameter bound.",
   );
 
   /**
@@ -10788,7 +10827,7 @@
   // expression of a spread element that appears in either a list literal or a
   // set literal doesn't implement the type `Iterable`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic:
   //
@@ -10821,7 +10860,7 @@
   // expression of a spread element that appears in a map literal doesn't
   // implement the type `Map`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `l` isn't a `Map`:
   //
@@ -10864,7 +10903,7 @@
   // variable. To create an instance of the class, the identifier must be
   // followed by an argument list.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `C` is a class, and a
   // class can't be used as an annotation without invoking a `const` constructor
@@ -10895,7 +10934,7 @@
       CompileTimeErrorCode(
     'NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS',
     "Annotation creation must have arguments.",
-    correction: "Try adding an empty argument list.",
+    correctionMessage: "Try adding an empty argument list.",
     hasPublishedDocs: true,
   );
 
@@ -10959,7 +10998,7 @@
       CompileTimeErrorCode(
     'NO_COMBINED_SUPER_SIGNATURE',
     "Can't infer missing types in '{0}' from overridden methods: {1}.",
-    correction:
+    correctionMessage:
         "Try providing explicit types for this method's parameters and return type.",
     hasPublishedDocs: true,
   );
@@ -10973,7 +11012,7 @@
       CompileTimeErrorCode(
     'NO_DEFAULT_SUPER_CONSTRUCTOR',
     "The superclass '{0}' doesn't have a zero argument constructor.",
-    correction:
+    correctionMessage:
         "Try declaring a zero argument constructor in '{0}', or explicitly invoking a different constructor in '{0}'.",
     uniqueName: 'NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT',
   );
@@ -10988,7 +11027,7 @@
       CompileTimeErrorCode(
     'NO_DEFAULT_SUPER_CONSTRUCTOR',
     "The superclass '{0}' doesn't have a zero argument constructor.",
-    correction:
+    correctionMessage:
         "Try declaring a zero argument constructor in '{0}', or declaring a constructor in {1} that explicitly invokes a constructor in '{0}'.",
     uniqueName: 'NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT',
   );
@@ -11006,7 +11045,7 @@
       CompileTimeErrorCode(
     'NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS',
     "The class '{0}' cannot extend '{1}' because '{1}' only has factory constructors (no generative constructors), and '{0}' has at least one generative constructor.",
-    correction:
+    correctionMessage:
         "Try implementing the class instead, adding a generative (not factory) constructor to the superclass {0}, or a factory constructor to the subclass.",
   );
 
@@ -11048,7 +11087,7 @@
       CompileTimeErrorCode(
     'NULLABLE_TYPE_IN_EXTENDS_CLAUSE',
     "A class can't extend a nullable type.",
-    correction: "Try removing the question mark.",
+    correctionMessage: "Try removing the question mark.",
     hasPublishedDocs: true,
   );
 
@@ -11090,7 +11129,7 @@
       CompileTimeErrorCode(
     'NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE',
     "A class or mixin can't implement a nullable type.",
-    correction: "Try removing the question mark.",
+    correctionMessage: "Try removing the question mark.",
     hasPublishedDocs: true,
   );
 
@@ -11133,7 +11172,7 @@
       CompileTimeErrorCode(
     'NULLABLE_TYPE_IN_ON_CLAUSE',
     "A mixin can't have a nullable type as a superclass constraint.",
-    correction: "Try removing the question mark.",
+    correctionMessage: "Try removing the question mark.",
     hasPublishedDocs: true,
   );
 
@@ -11174,7 +11213,7 @@
       CompileTimeErrorCode(
     'NULLABLE_TYPE_IN_WITH_CLAUSE',
     "A class or mixin can't mix in a nullable type.",
-    correction: "Try removing the question mark.",
+    correctionMessage: "Try removing the question mark.",
     hasPublishedDocs: true,
   );
 
@@ -11235,7 +11274,8 @@
   static const CompileTimeErrorCode ON_REPEATED = CompileTimeErrorCode(
     'ON_REPEATED',
     "The type '{0}' can be included in the superclass constraints only once.",
-    correction: "Try removing all except one occurrence of the type name.",
+    correctionMessage:
+        "Try removing all except one occurrence of the type name.",
     hasPublishedDocs: true,
   );
 
@@ -11271,7 +11311,7 @@
       CompileTimeErrorCode(
     'OPTIONAL_PARAMETER_IN_OPERATOR',
     "Optional parameters aren't allowed when defining an operator.",
-    correction: "Try removing the optional parameters.",
+    correctionMessage: "Try removing the optional parameters.",
     hasPublishedDocs: true,
   );
 
@@ -11315,7 +11355,7 @@
       CompileTimeErrorCode(
     'PART_OF_DIFFERENT_LIBRARY',
     "Expected this library to be part of '{0}', not '{1}'.",
-    correction:
+    correctionMessage:
         "Try including a different part, or changing the name of the library in the part's part-of directive.",
     hasPublishedDocs: true,
   );
@@ -11329,7 +11369,7 @@
   // The analyzer produces this diagnostic when a part directive is found and
   // the referenced file doesn't have a part-of directive.
   //
-  // #### Examples
+  // #### Example
   //
   // Given a file (`a.dart`) containing:
   //
@@ -11365,7 +11405,7 @@
   static const CompileTimeErrorCode PART_OF_NON_PART = CompileTimeErrorCode(
     'PART_OF_NON_PART',
     "The included part '{0}' must have a part-of directive.",
-    correction: "Try adding a part-of directive to '{0}'.",
+    correctionMessage: "Try adding a part-of directive to '{0}'.",
     hasPublishedDocs: true,
   );
 
@@ -11410,7 +11450,7 @@
       CompileTimeErrorCode(
     'PART_OF_UNNAMED_LIBRARY',
     "The library is unnamed. A URI is expected, not a library name '{0}', in the part-of directive.",
-    correction:
+    correctionMessage:
         "Try changing the part-of directive to a URI, or try including a different part.",
     hasPublishedDocs: true,
   );
@@ -11458,7 +11498,8 @@
       CompileTimeErrorCode(
     'PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER',
     "The name '{0}' is already used as an import prefix and can't be used to name a top-level element.",
-    correction: "Try renaming either the top-level element or the prefix.",
+    correctionMessage:
+        "Try renaming either the top-level element or the prefix.",
     hasPublishedDocs: true,
   );
 
@@ -11504,7 +11545,7 @@
       CompileTimeErrorCode(
     'PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT',
     "The name '{0}' refers to an import prefix, so it must be followed by '.'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to refer to something other than a prefix, or renaming the prefix.",
     hasPublishedDocs: true,
   );
@@ -11523,7 +11564,8 @@
       CompileTimeErrorCode(
     'PREFIX_SHADOWED_BY_LOCAL_DECLARATION',
     "The prefix '{0}' can't be used here because it is shadowed by a local declaration.",
-    correction: "Try renaming either the prefix or the local declaration.",
+    correctionMessage:
+        "Try renaming either the prefix or the local declaration.",
   );
 
   /**
@@ -11579,7 +11621,7 @@
       CompileTimeErrorCode(
     'PRIVATE_COLLISION_IN_MIXIN_APPLICATION',
     "The private name '{0}', defined by '{1}', conflicts with the same name defined by '{2}'.",
-    correction: "Try removing '{1}' from the 'with' clause.",
+    correctionMessage: "Try removing '{1}' from the 'with' clause.",
     hasPublishedDocs: true,
   );
 
@@ -11621,14 +11663,15 @@
   static const CompileTimeErrorCode PRIVATE_SETTER = CompileTimeErrorCode(
     'PRIVATE_SETTER',
     "The setter '{0}' is private and can't be accessed outside of the library that declares it.",
-    correction: "Try making it public.",
+    correctionMessage: "Try making it public.",
   );
 
   static const CompileTimeErrorCode READ_POTENTIALLY_UNASSIGNED_FINAL =
       CompileTimeErrorCode(
     'READ_POTENTIALLY_UNASSIGNED_FINAL',
     "The final variable '{0}' can't be read because it is potentially unassigned at this point.",
-    correction: "Ensure that it is assigned on necessary execution paths.",
+    correctionMessage:
+        "Ensure that it is assigned on necessary execution paths.",
   );
 
   /**
@@ -11680,7 +11723,7 @@
   // The analyzer produces this diagnostic when a constructor redirects to
   // itself, either directly or indirectly, creating an infinite loop.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the generative
   // constructors `C.a` and `C.b` each redirect to the other:
@@ -11762,7 +11805,7 @@
       CompileTimeErrorCode(
     'RECURSIVE_CONSTRUCTOR_REDIRECT',
     "Constructors can't redirect to themselves either directly or indirectly.",
-    correction:
+    correctionMessage:
         "Try changing one of the constructors in the loop to not redirect.",
     hasPublishedDocs: true,
   );
@@ -11774,7 +11817,7 @@
       CompileTimeErrorCode(
     'RECURSIVE_CONSTRUCTOR_REDIRECT',
     "Constructors can't redirect to themselves either directly or indirectly.",
-    correction:
+    correctionMessage:
         "Try changing one of the constructors in the loop to not redirect.",
     hasPublishedDocs: true,
     uniqueName: 'RECURSIVE_FACTORY_REDIRECT',
@@ -11928,7 +11971,7 @@
       CompileTimeErrorCode(
     'REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR',
     "The constructor '{0}' couldn't be found in '{1}'.",
-    correction:
+    correctionMessage:
         "Try redirecting to a different constructor, or defining the constructor named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -11978,7 +12021,7 @@
       REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR = CompileTimeErrorCode(
     'REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR',
     "Generative constructors can't redirect to a factory constructor.",
-    correction: "Try redirecting to a different constructor.",
+    correctionMessage: "Try redirecting to a different constructor.",
     hasPublishedDocs: true,
   );
 
@@ -11990,7 +12033,7 @@
       CompileTimeErrorCode(
     'REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR',
     "The redirecting constructor '{0}' can't redirect to a constructor of the abstract class '{1}'.",
-    correction: "Try redirecting to a constructor of a different class.",
+    correctionMessage: "Try redirecting to a constructor of a different class.",
   );
 
   /**
@@ -12068,7 +12111,7 @@
       CompileTimeErrorCode(
     'REDIRECT_TO_INVALID_FUNCTION_TYPE',
     "The redirected constructor '{0}' has incompatible parameters with '{1}'.",
-    correction: "Try redirecting to a different constructor.",
+    correctionMessage: "Try redirecting to a different constructor.",
     hasPublishedDocs: true,
   );
 
@@ -12083,7 +12126,7 @@
   // to a constructor whose return type isn't a subtype of the type that the
   // factory constructor is declared to produce.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `A` isn't a subclass
   // of `C`, which means that the value returned by the constructor `A()`
@@ -12131,7 +12174,7 @@
       CompileTimeErrorCode(
     'REDIRECT_TO_INVALID_RETURN_TYPE',
     "The return type '{0}' of the redirected constructor isn't a subtype of '{1}'.",
-    correction: "Try redirecting to a different constructor.",
+    correctionMessage: "Try redirecting to a different constructor.",
     hasPublishedDocs: true,
   );
 
@@ -12143,7 +12186,7 @@
       CompileTimeErrorCode(
     'REDIRECT_TO_MISSING_CONSTRUCTOR',
     "The constructor '{0}' couldn't be found in '{1}'.",
-    correction:
+    correctionMessage:
         "Try redirecting to a different constructor, or define the constructor named '{0}'.",
   );
 
@@ -12158,7 +12201,7 @@
   // produces this diagnostic when the redirect is to something other than a
   // constructor.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` is a function:
   //
@@ -12192,7 +12235,7 @@
       CompileTimeErrorCode(
     'REDIRECT_TO_NON_CLASS',
     "The name '{0}' isn't a type and can't be used in a redirected constructor.",
-    correction: "Try redirecting to a different constructor.",
+    correctionMessage: "Try redirecting to a different constructor.",
     hasPublishedDocs: true,
   );
 
@@ -12241,7 +12284,7 @@
       CompileTimeErrorCode(
     'REDIRECT_TO_NON_CONST_CONSTRUCTOR',
     "A constant redirecting constructor can't redirect to a non-constant constructor.",
-    correction: "Try redirecting to a different constructor.",
+    correctionMessage: "Try redirecting to a different constructor.",
     hasPublishedDocs: true,
   );
 
@@ -12287,7 +12330,8 @@
       REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER = CompileTimeErrorCode(
     'REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
     "A redirecting constructor can't redirect to a type alias that expands to a type parameter.",
-    correction: "Try replacing it with a class.",
+    correctionMessage: "Try replacing it with a class.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -12303,7 +12347,7 @@
   // The analyzer also produces a context message that indicates where the
   // declaration is located.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `i` is used before it
   // is declared:
@@ -12345,7 +12389,7 @@
       CompileTimeErrorCode(
     'REFERENCED_BEFORE_DECLARATION',
     "Local variable '{0}' can't be referenced before it is declared.",
-    correction:
+    correctionMessage:
         "Try moving the declaration to before the first use, or renaming the local variable so that it doesn't hide a name from an enclosing scope.",
     hasPublishedDocs: true,
   );
@@ -12398,7 +12442,7 @@
       CompileTimeErrorCode(
     'RETHROW_OUTSIDE_CATCH',
     "A rethrow must be inside of a catch clause.",
-    correction:
+    correctionMessage:
         "Try moving the expression into a catch clause, or using a 'throw' expression.",
     hasPublishedDocs: true,
   );
@@ -12455,7 +12499,7 @@
       CompileTimeErrorCode(
     'RETURN_IN_GENERATIVE_CONSTRUCTOR',
     "Constructors can't return values.",
-    correction:
+    correctionMessage:
         "Try removing the return statement or using a factory constructor.",
     hasPublishedDocs: true,
   );
@@ -12470,7 +12514,7 @@
   // statement to return a value or implicitly returns a value because of using
   // `=>`. In any of these cases, they should use `yield` instead of `return`.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the method `f` is a
   // generator and is using `return` to return a value:
@@ -12519,7 +12563,7 @@
   static const CompileTimeErrorCode RETURN_IN_GENERATOR = CompileTimeErrorCode(
     'RETURN_IN_GENERATOR',
     "Can't return a value from a generator function that uses the 'async*' or 'sync*' modifier.",
-    correction:
+    correctionMessage:
         "Try replacing 'return' with 'yield', using a block function body, or changing the method body modifier.",
     hasPublishedDocs: true,
   );
@@ -12535,7 +12579,7 @@
   // expression isn't assignable to the return type that the closure is required
   // to have.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` is defined to be a
   // function that returns a `String`, but the closure assigned to it returns an
@@ -12585,7 +12629,7 @@
   // The analyzer produces this diagnostic when a method or function returns a
   // value whose type isn't assignable to the declared return type.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` has a return type
   // of `String` but is returning an `int`:
@@ -12638,7 +12682,7 @@
   // The analyzer produces this diagnostic when it finds a `return` statement
   // without an expression in a function that declares a return type.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the function `f` is
   // expected to return an `int`, but no value is being returned:
@@ -12671,7 +12715,7 @@
       CompileTimeErrorCode(
     'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be used as values in a 'const' set literal.",
-    correction:
+    correctionMessage:
         "Try removing the keyword 'const' from the set literal or removing the keyword 'deferred' from the import.",
     hasPublishedDocs: true,
     uniqueName: 'SET_ELEMENT_FROM_DEFERRED_LIBRARY',
@@ -12763,7 +12807,7 @@
       CompileTimeErrorCode(
     'SHARED_DEFERRED_PREFIX',
     "The prefix of a deferred import can't be used in other import directives.",
-    correction: "Try renaming one of the prefixes.",
+    correctionMessage: "Try renaming one of the prefixes.",
     hasPublishedDocs: true,
   );
 
@@ -12771,7 +12815,7 @@
       CompileTimeErrorCode(
     'SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY',
     "Constant values from a deferred library can't be spread into a const literal.",
-    correction: "Try making the deferred import non-deferred.",
+    correctionMessage: "Try making the deferred import non-deferred.",
   );
 
   /**
@@ -12784,7 +12828,7 @@
   // an instance field. Instance fields don't exist on a class; they exist only
   // on an instance of the class.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `x` is an instance
   // field:
@@ -12856,7 +12900,7 @@
   // extension uses the `super` keyword . Extensions aren't classes and don't
   // have superclasses, so the `super` keyword serves no purpose.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `super` can't be used
   // in an extension:
@@ -12890,7 +12934,7 @@
   // The analyzer produces this diagnostic when the keyword `super` is used
   // outside of a instance method.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `super` is used in a
   // top-level function:
@@ -12961,7 +13005,7 @@
       CompileTimeErrorCode(
     'SWITCH_CASE_COMPLETES_NORMALLY',
     "The 'case' should not complete normally.",
-    correction: "Try adding 'break', or 'return', etc.",
+    correctionMessage: "Try adding 'break', or 'return', etc.",
   );
 
   /**
@@ -13057,8 +13101,9 @@
       CompileTimeErrorCode(
     'TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS',
     "A generative constructor of an abstract class can't be torn off.",
-    correction:
+    correctionMessage:
         "Try tearing off a constructor of a concrete class, or a non-generative constructor.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -13145,7 +13190,7 @@
   static const CompileTimeErrorCode TOP_LEVEL_CYCLE = CompileTimeErrorCode(
     'TOP_LEVEL_CYCLE',
     "The type of '{0}' can't be inferred because it depends on itself through the cycle: {1}.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type to one or more of the variables in the cycle in order to break the cycle.",
     hasPublishedDocs: true,
   );
@@ -13228,7 +13273,7 @@
       CompileTimeErrorCode(
     'TYPE_ANNOTATION_DEFERRED_CLASS',
     "The deferred type '{0}' can't be used in a declaration, cast, or type test.",
-    correction:
+    correctionMessage:
         "Try using a different type, or changing the import to not be deferred.",
     hasPublishedDocs: true,
   );
@@ -13245,7 +13290,7 @@
   // The analyzer produces this diagnostic when a type argument isn't the same
   // as or a subclass of the bounds of the corresponding type parameter.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `String` isn't a
   // subclass of `num`:
@@ -13269,7 +13314,7 @@
       CompileTimeErrorCode(
     'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS',
     "'{0}' doesn't conform to the bound '{2}' of the type parameter '{1}'.",
-    correction: "Try using a type that is or is a subclass of '{2}'.",
+    correctionMessage: "Try using a type that is or is a subclass of '{2}'.",
     hasPublishedDocs: true,
   );
 
@@ -13317,7 +13362,7 @@
       CompileTimeErrorCode(
     'TYPE_PARAMETER_REFERENCED_BY_STATIC',
     "Static members can't reference type parameters of the class.",
-    correction:
+    correctionMessage:
         "Try removing the reference to the type parameter, or making the member an instance member.",
     hasPublishedDocs: true,
   );
@@ -13337,7 +13382,7 @@
   // as itself or a subtype of itself or a subtype of itself isn't helpful
   // because it will always be the same as itself.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because the bound of `T` is
   // `T`:
@@ -13372,7 +13417,8 @@
       CompileTimeErrorCode(
     'TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND',
     "'{0}' can't be a supertype of its upper bound.",
-    correction: "Try using a type that is the same as or a subclass of '{1}'.",
+    correctionMessage:
+        "Try using a type that is the same as or a subclass of '{1}'.",
     hasPublishedDocs: true,
   );
 
@@ -13429,7 +13475,7 @@
       CompileTimeErrorCode(
     'TYPE_TEST_WITH_NON_TYPE',
     "The name '{0}' isn't a type and can't be used in an 'is' expression.",
-    correction: "Try correcting the name to match an existing type.",
+    correctionMessage: "Try correcting the name to match an existing type.",
     hasPublishedDocs: true,
   );
 
@@ -13441,7 +13487,7 @@
   // The analyzer produces this diagnostic when the name following the `is` in a
   // type test expression isn't defined.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the name `Srting` isn't
   // defined:
@@ -13469,7 +13515,7 @@
       CompileTimeErrorCode(
     'TYPE_TEST_WITH_UNDEFINED_NAME',
     "The name '{0}' isn't defined, so it can't be used in an 'is' expression.",
-    correction:
+    correctionMessage:
         "Try changing the name to the name of an existing type, or creating a type with the name '{0}'.",
     hasPublishedDocs: true,
   );
@@ -13478,7 +13524,7 @@
       CompileTimeErrorCode(
     'UNCHECKED_USE_OF_NULLABLE_VALUE',
     "The function can't be unconditionally invoked because it can be 'null'.",
-    correction: "Try adding a null check ('!').",
+    correctionMessage: "Try adding a null check ('!').",
     hasPublishedDocs: true,
     uniqueName: 'UNCHECKED_INVOCATION_OF_NULLABLE_VALUE',
   );
@@ -13487,7 +13533,7 @@
       UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE = CompileTimeErrorCode(
     'UNCHECKED_USE_OF_NULLABLE_VALUE',
     "The method '{0}' can't be unconditionally invoked because the receiver can be 'null'.",
-    correction:
+    correctionMessage:
         "Try making the call conditional (using '?.') or adding a null check to the target ('!').",
     hasPublishedDocs: true,
     uniqueName: 'UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE',
@@ -13497,7 +13543,7 @@
       UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE = CompileTimeErrorCode(
     'UNCHECKED_USE_OF_NULLABLE_VALUE',
     "The operator '{0}' can't be unconditionally invoked because the receiver can be 'null'.",
-    correction: "Try adding a null check to the target ('!').",
+    correctionMessage: "Try adding a null check to the target ('!').",
     hasPublishedDocs: true,
     uniqueName: 'UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE',
   );
@@ -13506,7 +13552,7 @@
       UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE = CompileTimeErrorCode(
     'UNCHECKED_USE_OF_NULLABLE_VALUE',
     "The property '{0}' can't be unconditionally accessed because the receiver can be 'null'.",
-    correction:
+    correctionMessage:
         "Try making the access conditional (using '?.') or adding a null check to the target ('!').",
     hasPublishedDocs: true,
     uniqueName: 'UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE',
@@ -13571,7 +13617,7 @@
       UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION = CompileTimeErrorCode(
     'UNCHECKED_USE_OF_NULLABLE_VALUE',
     "A nullable expression can't be used as a condition.",
-    correction:
+    correctionMessage:
         "Try checking that the value isn't 'null' before using it as a condition.",
     hasPublishedDocs: true,
     uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION',
@@ -13581,7 +13627,7 @@
       UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR = CompileTimeErrorCode(
     'UNCHECKED_USE_OF_NULLABLE_VALUE',
     "A nullable expression can't be used as an iterator in a for-in loop.",
-    correction:
+    correctionMessage:
         "Try checking that the value isn't 'null' before using it as an iterator.",
     hasPublishedDocs: true,
     uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR',
@@ -13591,7 +13637,7 @@
       CompileTimeErrorCode(
     'UNCHECKED_USE_OF_NULLABLE_VALUE',
     "A nullable expression can't be used in a spread.",
-    correction:
+    correctionMessage:
         "Try checking that the value isn't 'null' before using it in a spread, or use a null-aware spread.",
     hasPublishedDocs: true,
     uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD',
@@ -13601,7 +13647,7 @@
       UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH = CompileTimeErrorCode(
     'UNCHECKED_USE_OF_NULLABLE_VALUE',
     "A nullable expression can't be used in a yield-each statement.",
-    correction:
+    correctionMessage:
         "Try checking that the value isn't 'null' before using it in a yield-each statement.",
     hasPublishedDocs: true,
     uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH',
@@ -13615,7 +13661,7 @@
   // The analyzer produces this diagnostic when a name that isn't defined is
   // used as an annotation.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the name `undefined`
   // isn't defined:
@@ -13648,7 +13694,8 @@
   static const CompileTimeErrorCode UNDEFINED_ANNOTATION = CompileTimeErrorCode(
     'UNDEFINED_ANNOTATION',
     "Undefined name '{0}' used as an annotation.",
-    correction: "Try defining the name or importing it from another library.",
+    correctionMessage:
+        "Try defining the name or importing it from another library.",
     hasPublishedDocs: true,
     isUnresolvedIdentifier: true,
   );
@@ -13663,7 +13710,7 @@
   // appears to be the name of a class but either isn't defined or isn't visible
   // in the scope in which it's being referenced.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `Piont` isn't defined:
   //
@@ -13690,7 +13737,7 @@
   static const CompileTimeErrorCode UNDEFINED_CLASS = CompileTimeErrorCode(
     'UNDEFINED_CLASS',
     "Undefined class '{0}'.",
-    correction:
+    correctionMessage:
         "Try changing the name to the name of an existing class, or creating a class with the name '{0}'.",
     hasPublishedDocs: true,
     isUnresolvedIdentifier: true,
@@ -13707,7 +13754,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_CLASS',
     "Undefined class '{0}'.",
-    correction: "Try using the type 'bool'.",
+    correctionMessage: "Try using the type 'bool'.",
     hasPublishedDocs: true,
     isUnresolvedIdentifier: true,
     uniqueName: 'UNDEFINED_CLASS_BOOLEAN',
@@ -13780,7 +13827,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
     "The class '{0}' doesn't have a constructor named '{1}'.",
-    correction:
+    correctionMessage:
         "Try defining a constructor named '{1}' in '{0}', or invoking a different constructor.",
     hasPublishedDocs: true,
   );
@@ -13793,7 +13840,7 @@
       UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT = CompileTimeErrorCode(
     'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
     "The class '{0}' doesn't have an unnamed constructor.",
-    correction:
+    correctionMessage:
         "Try defining an unnamed constructor in '{0}', or invoking a different constructor.",
     hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT',
@@ -13810,7 +13857,7 @@
   // appears to be the name of an enum constant, and the name either isn't
   // defined or isn't visible in the scope in which it's being referenced.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `E` doesn't define a
   // constant named `c`:
@@ -13844,7 +13891,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_ENUM_CONSTANT',
     "There's no constant named '{0}' in '{1}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to the name of an existing constant, or defining a constant named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -13946,7 +13993,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_EXTENSION_GETTER',
     "The getter '{0}' isn't defined for the extension '{1}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to the name of an existing getter, or defining a getter named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -14048,7 +14095,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_EXTENSION_METHOD',
     "The method '{0}' isn't defined for the extension '{1}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to the name of an existing method, or defining a method named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -14102,7 +14149,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_EXTENSION_OPERATOR',
     "The operator '{0}' isn't defined for the extension '{1}'.",
-    correction: "Try defining the operator '{0}'.",
+    correctionMessage: "Try defining the operator '{0}'.",
     hasPublishedDocs: true,
   );
 
@@ -14205,7 +14252,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_EXTENSION_SETTER',
     "The setter '{0}' isn't defined for the extension '{1}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to the name of an existing setter, or defining a setter named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -14220,7 +14267,7 @@
   // appears to be the name of a function but either isn't defined or isn't
   // visible in the scope in which it's being referenced.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the name `emty` isn't
   // defined:
@@ -14252,7 +14299,7 @@
   static const CompileTimeErrorCode UNDEFINED_FUNCTION = CompileTimeErrorCode(
     'UNDEFINED_FUNCTION',
     "The function '{0}' isn't defined.",
-    correction:
+    correctionMessage:
         "Try importing the library that defines '{0}', correcting the name to the name of an existing function, or defining a function named '{0}'.",
     hasPublishedDocs: true,
     isUnresolvedIdentifier: true,
@@ -14269,7 +14316,7 @@
   // appears to be the name of a getter but either isn't defined or isn't
   // visible in the scope in which it's being referenced.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `String` has no member
   // named `len`:
@@ -14290,7 +14337,7 @@
   static const CompileTimeErrorCode UNDEFINED_GETTER = CompileTimeErrorCode(
     'UNDEFINED_GETTER',
     "The getter '{0}' isn't defined for the type '{1}'.",
-    correction:
+    correctionMessage:
         "Try importing the library that defines '{0}', correcting the name to the name of an existing getter, or defining a getter or field named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -14304,7 +14351,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_GETTER',
     "The getter '{0}' isn't defined for the '{1}' function type.",
-    correction:
+    correctionMessage:
         "Try wrapping the function type alias in parentheses in order to access '{0}' as an extension getter on 'Type'.",
     hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_GETTER_ON_FUNCTION_TYPE',
@@ -14320,7 +14367,7 @@
   // either isn't defined or isn't visible in the scope in which it's being
   // referenced.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the name `rihgt` isn't
   // defined:
@@ -14344,7 +14391,7 @@
   static const CompileTimeErrorCode UNDEFINED_IDENTIFIER = CompileTimeErrorCode(
     'UNDEFINED_IDENTIFIER',
     "Undefined name '{0}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to one that is defined, or defining the name.",
     hasPublishedDocs: true,
     isUnresolvedIdentifier: true,
@@ -14381,7 +14428,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_IDENTIFIER_AWAIT',
     "Undefined name 'await' in function body not marked with 'async'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to one that is defined, defining the name, or adding 'async' to the enclosing function body.",
     hasPublishedDocs: true,
   );
@@ -14397,7 +14444,7 @@
   // appears to be the name of a method but either isn't defined or isn't
   // visible in the scope in which it's being referenced.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the identifier
   // `removeMiddle` isn't defined:
@@ -14418,7 +14465,7 @@
   static const CompileTimeErrorCode UNDEFINED_METHOD = CompileTimeErrorCode(
     'UNDEFINED_METHOD',
     "The method '{0}' isn't defined for the type '{1}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to the name of an existing method, or defining a method named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -14432,7 +14479,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_METHOD',
     "The method '{0}' isn't defined for the '{1}' function type.",
-    correction:
+    correctionMessage:
         "Try wrapping the function type alias in parentheses in order to access '{0}' as an extension method on 'Type'.",
     hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_METHOD_ON_FUNCTION_TYPE',
@@ -14448,7 +14495,7 @@
   // has a named argument, but the method or function being invoked doesn't
   // define a parameter with the same name.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `m` doesn't declare a
   // named parameter named `a`:
@@ -14514,7 +14561,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_NAMED_PARAMETER',
     "The named parameter '{0}' isn't defined.",
-    correction:
+    correctionMessage:
         "Try correcting the name to an existing named parameter's name, or defining a named parameter with the name '{0}'.",
     hasPublishedDocs: true,
   );
@@ -14529,7 +14576,7 @@
   // The analyzer produces this diagnostic when a user-definable operator is
   // invoked on an object for which the operator isn't defined.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the class `C` doesn't
   // define the operator `+`:
@@ -14554,7 +14601,7 @@
   static const CompileTimeErrorCode UNDEFINED_OPERATOR = CompileTimeErrorCode(
     'UNDEFINED_OPERATOR',
     "The operator '{0}' isn't defined for the type '{1}'.",
-    correction: "Try defining the operator '{0}'.",
+    correctionMessage: "Try defining the operator '{0}'.",
     hasPublishedDocs: true,
   );
 
@@ -14567,7 +14614,7 @@
   // where the prefix is valid, but the identifier isn't declared in any of the
   // libraries imported using that prefix.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `dart:core` doesn't
   // define anything named `a`:
@@ -14591,7 +14638,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_PREFIXED_NAME',
     "The name '{0}' is being referenced through the prefix '{1}', but it isn't defined in any of the libraries imported using that prefix.",
-    correction:
+    correctionMessage:
         "Try correcting the prefix or importing the library that defines '{0}'.",
     hasPublishedDocs: true,
   );
@@ -14607,7 +14654,7 @@
   // appears to be the name of a setter but either isn't defined or isn't
   // visible in the scope in which the identifier is being referenced.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because there isn't a setter
   // named `z`:
@@ -14638,7 +14685,7 @@
   static const CompileTimeErrorCode UNDEFINED_SETTER = CompileTimeErrorCode(
     'UNDEFINED_SETTER',
     "The setter '{0}' isn't defined for the type '{1}'.",
-    correction:
+    correctionMessage:
         "Try importing the library that defines '{0}', correcting the name to the name of an existing setter, or defining a setter or field named '{0}'.",
     hasPublishedDocs: true,
   );
@@ -14652,7 +14699,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_SETTER',
     "The setter '{0}' isn't defined for the '{1}' function type.",
-    correction:
+    correctionMessage:
         "Try wrapping the function type alias in parentheses in order to access '{0}' as an extension getter on 'Type'.",
     hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_SETTER_ON_FUNCTION_TYPE',
@@ -14667,7 +14714,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_SUPER_MEMBER',
     "The getter '{0}' isn't defined in a superclass of '{1}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to the name of an existing getter, or defining a getter or field named '{0}' in a superclass.",
     hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_SUPER_GETTER',
@@ -14722,7 +14769,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_SUPER_MEMBER',
     "The method '{0}' isn't defined in a superclass of '{1}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to the name of an existing method, or defining a method named '{0}' in a superclass.",
     hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_SUPER_METHOD',
@@ -14737,7 +14784,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_SUPER_MEMBER',
     "The operator '{0}' isn't defined in a superclass of '{1}'.",
-    correction: "Try defining the operator '{0}' in a superclass.",
+    correctionMessage: "Try defining the operator '{0}' in a superclass.",
     hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_SUPER_OPERATOR',
   );
@@ -14751,7 +14798,7 @@
       CompileTimeErrorCode(
     'UNDEFINED_SUPER_MEMBER',
     "The setter '{0}' isn't defined in a superclass of '{1}'.",
-    correction:
+    correctionMessage:
         "Try correcting the name to the name of an existing setter, or defining a setter or field named '{0}' in a superclass.",
     hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_SUPER_SETTER',
@@ -14805,7 +14852,7 @@
       UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER = CompileTimeErrorCode(
     'UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER',
     "Static members from supertypes must be qualified by the name of the defining type.",
-    correction: "Try adding '{0}.' before the name.",
+    correctionMessage: "Try adding '{0}.' before the name.",
     hasPublishedDocs: true,
   );
 
@@ -14819,7 +14866,7 @@
   // the name is the same as a static member of the extended type or one of its
   // superclasses.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `m` is a static member
   // of the extended type `C`:
@@ -14874,7 +14921,7 @@
       CompileTimeErrorCode(
     'UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE',
     "Static members from the extended type or one of its superclasses must be qualified by the name of the defining type.",
-    correction: "Try adding '{0}.' before the name.",
+    correctionMessage: "Try adding '{0}.' before the name.",
     hasPublishedDocs: true,
   );
 
@@ -14887,7 +14934,7 @@
   // The analyzer produces this diagnostic when an import, export, or part
   // directive is found where the URI refers to a file that doesn't exist.
   //
-  // #### Examples
+  // #### Example
   //
   // If the file `lib.dart` doesn't exist, the following code produces this
   // diagnostic:
@@ -14904,7 +14951,7 @@
   static const CompileTimeErrorCode URI_DOES_NOT_EXIST = CompileTimeErrorCode(
     'URI_DOES_NOT_EXIST',
     "Target of URI doesn't exist: '{0}'.",
-    correction:
+    correctionMessage:
         "Try creating the file referenced by the URI, or Try using a URI for a file that does exist.",
     hasPublishedDocs: true,
   );
@@ -14926,7 +14973,7 @@
   // - `.pbjson.dart`
   // - `.template.dart`
   //
-  // #### Examples
+  // #### Example
   //
   // If the file `lib.g.dart` doesn't exist, the following code produces this
   // diagnostic:
@@ -14946,7 +14993,7 @@
       CompileTimeErrorCode(
     'URI_HAS_NOT_BEEN_GENERATED',
     "Target of URI hasn't been generated: '{0}'.",
-    correction:
+    correctionMessage:
         "Try running the generator that will generate the file referenced by the URI.",
     hasPublishedDocs: true,
   );
@@ -14994,12 +15041,41 @@
    */
   // #### Description
   //
+  // The analyzer produces this diagnostic when a library is imported using the
+  // `dart-ext` scheme.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the native library `x`
+  // is being imported using a scheme of `dart-ext`:
+  //
+  // ```dart
+  // import [!'dart-ext:x'!];
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Rewrite the code to use `dart:ffi` as a way of invoking the contents of the
+  // native library.
+  static const CompileTimeErrorCode USE_OF_NATIVE_EXTENSION =
+      CompileTimeErrorCode(
+    'USE_OF_NATIVE_EXTENSION',
+    "Dart native extensions are deprecated and aren’t available in Dart 2.15.",
+    correctionMessage: "Try using dart:ffi for C interop.",
+    hasPublishedDocs: true,
+  );
+
+  /**
+   * No parameters.
+   */
+  // #### Description
+  //
   // The analyzer produces this diagnostic when it finds an expression whose
   // type is `void`, and the expression is used in a place where a value is
   // expected, such as before a member access or on the right-hand side of an
   // assignment.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because `f` doesn't produce an
   // object on which `toString` can be invoked:
@@ -15019,7 +15095,7 @@
   static const CompileTimeErrorCode USE_OF_VOID_RESULT = CompileTimeErrorCode(
     'USE_OF_VOID_RESULT',
     "This expression has a type of 'void' so its value can't be used.",
-    correction:
+    correctionMessage:
         "Try checking to see if you're using the correct API; there might be a function or call that returns void you didn't expect. Also check type parameters and variables which might also be void.",
     hasPublishedDocs: true,
   );
@@ -15034,7 +15110,7 @@
   // The analyzer produces this diagnostic when the evaluation of a constant
   // expression would result in a `CastException`.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the value of `x` is an
   // `int`, which can't be assigned to `y` because an `int` isn't a `String`:
@@ -15068,7 +15144,7 @@
       CompileTimeErrorCode(
     'VARIABLE_TYPE_MISMATCH',
     "A value of type '{0}' can't be assigned to a const variable of type '{1}'.",
-    correction: "Try using a subtype, or removing the 'const' keyword",
+    correctionMessage: "Try using a subtype, or removing the 'const' keyword",
     hasPublishedDocs: true,
   );
 
@@ -15094,7 +15170,7 @@
       CompileTimeErrorCode(
     'WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
     "'{0}' is an '{1}' type parameter and can't be used in an '{2}' position in '{3}'.",
-    correction:
+    correctionMessage:
         "Try using 'in' type parameters in 'in' positions and 'out' type parameters in 'out' positions in the superinterface.",
   );
 
@@ -15109,7 +15185,7 @@
   // The analyzer produces this diagnostic when a declaration of an operator has
   // the wrong number of parameters.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the operator `+` must
   // have a single parameter corresponding to the right operand:
@@ -15253,7 +15329,7 @@
       CompileTimeErrorCode(
     'WRONG_NUMBER_OF_TYPE_ARGUMENTS',
     "The type '{0}' is declared with {1} type parameters, but {2} type arguments were given.",
-    correction:
+    correctionMessage:
         "Try adjusting the number of type arguments to match the number of type parameters.",
     hasPublishedDocs: true,
   );
@@ -15267,7 +15343,7 @@
       WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION = CompileTimeErrorCode(
     'WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION',
     "This function is declared with {0} type parameters, but {1} type arguments were given.",
-    correction:
+    correctionMessage:
         "Try adjusting the number of type arguments to match the number of type parameters.",
     uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION',
   );
@@ -15323,7 +15399,7 @@
       CompileTimeErrorCode(
     'WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR',
     "The constructor '{0}.{1}' doesn't have type parameters.",
-    correction: "Try moving type arguments to after the type name.",
+    correctionMessage: "Try moving type arguments to after the type name.",
     hasPublishedDocs: true,
   );
 
@@ -15373,7 +15449,7 @@
       CompileTimeErrorCode(
     'WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION',
     "The extension '{0}' is declared with {1} type parameters, but {2} type arguments were given.",
-    correction: "Try adjusting the number of type arguments.",
+    correctionMessage: "Try adjusting the number of type arguments.",
     hasPublishedDocs: true,
   );
 
@@ -15387,7 +15463,7 @@
       CompileTimeErrorCode(
     'WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION',
     "The function '{0}' is declared with {1} type parameters, but {2} type arguments were given.",
-    correction:
+    correctionMessage:
         "Try adjusting the number of type arguments to match the number of type parameters.",
   );
 
@@ -15444,7 +15520,7 @@
       CompileTimeErrorCode(
     'WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD',
     "The method '{0}' is declared with {1} type parameters, but {2} type arguments are given.",
-    correction: "Try adjusting the number of type arguments.",
+    correctionMessage: "Try adjusting the number of type arguments.",
     hasPublishedDocs: true,
   );
 
@@ -15457,7 +15533,7 @@
       WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE = CompileTimeErrorCode(
     'WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
     "'{0}' can't be used contravariantly or invariantly in '{1}'.",
-    correction:
+    correctionMessage:
         "Try not using class type parameters in types of formal parameters of function types, nor in explicitly contravariant or invariant superinterfaces.",
   );
 
@@ -15483,7 +15559,7 @@
       CompileTimeErrorCode(
     'WRONG_TYPE_PARAMETER_VARIANCE_POSITION',
     "The '{0}' type parameter '{1}' can't be used in an '{2}' position.",
-    correction:
+    correctionMessage:
         "Try removing the type parameter or change the explicit variance modifier declaration for the type parameter to another one of 'in', 'out', or 'inout'.",
   );
 
@@ -15496,7 +15572,7 @@
   // appears in a function whose body isn't marked with one of the `async*` or
   // `sync*` modifiers.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `yield` is being used
   // in a function whose body doesn't have a modifier:
@@ -15531,7 +15607,8 @@
       CompileTimeErrorCode(
     'YIELD_IN_NON_GENERATOR',
     "Yield-each statements must be in a generator function (one marked with either 'async*' or 'sync*').",
-    correction: "Try adding 'async*' or 'sync*' to the enclosing function.",
+    correctionMessage:
+        "Try adding 'async*' or 'sync*' to the enclosing function.",
     hasPublishedDocs: true,
     uniqueName: 'YIELD_EACH_IN_NON_GENERATOR',
   );
@@ -15546,7 +15623,8 @@
       CompileTimeErrorCode(
     'YIELD_IN_NON_GENERATOR',
     "Yield statements must be in a generator function (one marked with either 'async*' or 'sync*').",
-    correction: "Try adding 'async*' or 'sync*' to the enclosing function.",
+    correctionMessage:
+        "Try adding 'async*' or 'sync*' to the enclosing function.",
     hasPublishedDocs: true,
   );
 
@@ -15603,17 +15681,17 @@
   /// Initialize a newly created error code to have the given [name].
   const CompileTimeErrorCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'CompileTimeErrorCode.${uniqueName ?? name}',
         );
 
@@ -15628,87 +15706,87 @@
   static const LanguageCode IMPLICIT_DYNAMIC_FIELD = LanguageCode(
     'IMPLICIT_DYNAMIC_FIELD',
     "Missing field type for '{0}'.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   static const LanguageCode IMPLICIT_DYNAMIC_FUNCTION = LanguageCode(
     'IMPLICIT_DYNAMIC_FUNCTION',
     "Missing type arguments for generic function '{0}<{1}>'.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   static const LanguageCode IMPLICIT_DYNAMIC_INVOKE = LanguageCode(
     'IMPLICIT_DYNAMIC_INVOKE',
     "Missing type arguments for calling generic function type '{0}'.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   static const LanguageCode IMPLICIT_DYNAMIC_LIST_LITERAL = LanguageCode(
     'IMPLICIT_DYNAMIC_LIST_LITERAL',
     "Missing type argument for list literal.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   static const LanguageCode IMPLICIT_DYNAMIC_MAP_LITERAL = LanguageCode(
     'IMPLICIT_DYNAMIC_MAP_LITERAL',
     "Missing type arguments for map literal.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   static const LanguageCode IMPLICIT_DYNAMIC_METHOD = LanguageCode(
     'IMPLICIT_DYNAMIC_METHOD',
     "Missing type arguments for generic method '{0}<{1}>'.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   static const LanguageCode IMPLICIT_DYNAMIC_PARAMETER = LanguageCode(
     'IMPLICIT_DYNAMIC_PARAMETER',
     "Missing parameter type for '{0}'.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   static const LanguageCode IMPLICIT_DYNAMIC_RETURN = LanguageCode(
     'IMPLICIT_DYNAMIC_RETURN',
     "Missing return type for '{0}'.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   static const LanguageCode IMPLICIT_DYNAMIC_TYPE = LanguageCode(
     'IMPLICIT_DYNAMIC_TYPE',
     "Missing type arguments for generic type '{0}'.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   static const LanguageCode IMPLICIT_DYNAMIC_VARIABLE = LanguageCode(
     'IMPLICIT_DYNAMIC_VARIABLE',
     "Missing variable type for '{0}'.",
-    correction:
+    correctionMessage:
         "Try adding an explicit type, or remove implicit-dynamic from your analysis options file.",
   );
 
   /// Initialize a newly created error code to have the given [name].
   const LanguageCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'LanguageCode.${uniqueName ?? name}',
         );
 
@@ -15737,7 +15815,7 @@
   // left-hand side has the value `null`, and because the left-hand side can't
   // be `null`, the right-hand side is never evaluated.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `x` can't be `null`:
   //
@@ -15799,7 +15877,7 @@
   static const StaticWarningCode DEAD_NULL_AWARE_EXPRESSION = StaticWarningCode(
     'DEAD_NULL_AWARE_EXPRESSION',
     "The left operand can't be null, so the right operand is never executed.",
-    correction: "Try removing the operator and the right operand.",
+    correctionMessage: "Try removing the operator and the right operand.",
     hasPublishedDocs: true,
   );
 
@@ -15814,7 +15892,7 @@
   // `?..`, `?[`, `?..[`, or `...?`) is used on a receiver that's known to be
   // non-nullable.
   //
-  // #### Example
+  // #### Examples
   //
   // The following code produces this diagnostic because `s` can't be `null`:
   //
@@ -15880,7 +15958,7 @@
       StaticWarningCode(
     'INVALID_NULL_AWARE_OPERATOR',
     "The receiver can't be null, so the null-aware operator '{0}' is unnecessary.",
-    correction: "Try replacing the operator '{0}' with '{1}'.",
+    correctionMessage: "Try replacing the operator '{0}' with '{1}'.",
     hasPublishedDocs: true,
   );
 
@@ -15893,7 +15971,7 @@
       INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT = StaticWarningCode(
     'INVALID_NULL_AWARE_OPERATOR',
     "The receiver can't be null because of short-circuiting, so the null-aware operator '{0}' can't be used.",
-    correction: "Try replacing the operator '{0}' with '{1}'.",
+    correctionMessage: "Try replacing the operator '{0}' with '{1}'.",
     hasPublishedDocs: true,
     uniqueName: 'INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT',
   );
@@ -15909,7 +15987,7 @@
       INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED = StaticWarningCode(
     'INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED',
     "Parameters can't override default values, this method overrides '{0}.{1}' where '{2}' has a different value.",
-    correction: "Try using the same default value in both methods.",
+    correctionMessage: "Try using the same default value in both methods.",
   );
 
   /**
@@ -15923,7 +16001,7 @@
       INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL = StaticWarningCode(
     'INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL',
     "Parameters can't override default values, this method overrides '{0}.{1}' where this positional parameter has a different value.",
-    correction: "Try using the same default value in both methods.",
+    correctionMessage: "Try using the same default value in both methods.",
   );
 
   /**
@@ -15938,7 +16016,7 @@
   // Note that `null` is always a possible value for an enum and therefore also
   // must be handled.
   //
-  // #### Examples
+  // #### Example
   //
   // The following code produces this diagnostic because the enum constant `e2`
   // isn't handled:
@@ -15993,7 +16071,7 @@
       StaticWarningCode(
     'MISSING_ENUM_CONSTANT_IN_SWITCH',
     "Missing case clause for '{0}'.",
-    correction:
+    correctionMessage:
         "Try adding a case clause for the missing constant, or adding a default clause.",
     hasPublishedDocs: true,
   );
@@ -16029,24 +16107,24 @@
       StaticWarningCode(
     'UNNECESSARY_NON_NULL_ASSERTION',
     "The '!' will have no effect because the receiver can't be null.",
-    correction: "Try removing the '!' operator.",
+    correctionMessage: "Try removing the '!' operator.",
     hasPublishedDocs: true,
   );
 
   /// Initialize a newly created error code to have the given [name].
   const StaticWarningCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'StaticWarningCode.${uniqueName ?? name}',
         );
 
diff --git a/pkg/analyzer/lib/src/error/correct_override.dart b/pkg/analyzer/lib/src/error/correct_override.dart
index 4c821b5..1066a3c 100644
--- a/pkg/analyzer/lib/src/error/correct_override.dart
+++ b/pkg/analyzer/lib/src/error/correct_override.dart
@@ -52,14 +52,17 @@
   }) {
     var isCorrect = isCorrectOverrideOf(superMember: superMember);
     if (!isCorrect) {
+      // Elements enclosing members that can participate in overrides are always
+      // named, so we can safely assume `_thisMember.enclosingElement.name` and
+      // `superMember.enclosingElement.name` are non-`null`.
       errorReporter.reportErrorForNode(
         errorCode ?? CompileTimeErrorCode.INVALID_OVERRIDE,
         errorNode,
         [
           _thisMember.name,
-          _thisMember.enclosingElement.name,
+          _thisMember.enclosingElement.name!,
           _thisMember.type,
-          superMember.enclosingElement.name,
+          superMember.enclosingElement.name!,
           superMember.type,
         ],
       );
@@ -123,14 +126,18 @@
         if (!_typeSystem.isSubtypeOf(superType, thisType) &&
             !_typeSystem.isSubtypeOf(thisType, superType)) {
           var superMember = superParameter.member;
+          // Elements enclosing members that can participate in overrides are
+          // always named, so we can safely assume
+          // `_thisMember.enclosingElement.name` and
+          // `superMember.enclosingElement.name` are non-`null`.
           errorReporter.reportErrorForNode(
             CompileTimeErrorCode.INVALID_OVERRIDE,
             errorNode,
             [
               _thisMember.name,
-              _thisMember.enclosingElement.name,
+              _thisMember.enclosingElement.name!,
               _thisMember.type,
-              superMember.enclosingElement.name,
+              superMember.enclosingElement.name!,
               superMember.type,
             ],
           );
diff --git a/pkg/analyzer/lib/src/error/dead_code_verifier.dart b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
index ec56191..1890e65 100644
--- a/pkg/analyzer/lib/src/error/dead_code_verifier.dart
+++ b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
@@ -454,7 +454,7 @@
 /// When an unreachable node is found, and [_firstDeadNode] is `null`, we
 /// set [_firstDeadNode], so start a new dead nodes interval. The dead code
 /// interval ends when [flowEnd] is invoked with a node that is the start
-/// node, or contains it. So, we end the the end of the covering control flow.
+/// node, or contains it. So, we end the end of the covering control flow.
 class NullSafetyDeadCodeVerifier {
   final TypeSystemImpl _typeSystem;
   final ErrorReporter _errorReporter;
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index ca0efc9..113dae0 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -112,7 +112,7 @@
               _errorReporter.reportErrorForNode(
                 CompileTimeErrorCode.EXTENSION_CONFLICTING_STATIC_AND_INSTANCE,
                 identifier,
-                [node.declaredElement!.name, name],
+                [name],
               );
             }
           }
@@ -126,7 +126,7 @@
             _errorReporter.reportErrorForNode(
               CompileTimeErrorCode.EXTENSION_CONFLICTING_STATIC_AND_INSTANCE,
               identifier,
-              [node.declaredElement!.name, name],
+              [name],
             );
           }
         }
diff --git a/pkg/analyzer/lib/src/error/imports_verifier.dart b/pkg/analyzer/lib/src/error/imports_verifier.dart
index 878fdee..88d8a87 100644
--- a/pkg/analyzer/lib/src/error/imports_verifier.dart
+++ b/pkg/analyzer/lib/src/error/imports_verifier.dart
@@ -388,8 +388,12 @@
         }
       }
       StringLiteral uri = unusedImport.uri;
+      // We can safely assume that `uri.stringValue` is non-`null`, because the
+      // only way for it to be `null` is if the import contains a string
+      // interpolation, in which case the import wouldn't have resolved and
+      // would not have been included in [_unusedImports].
       errorReporter
-          .reportErrorForNode(HintCode.UNUSED_IMPORT, uri, [uri.stringValue]);
+          .reportErrorForNode(HintCode.UNUSED_IMPORT, uri, [uri.stringValue!]);
     }
   }
 
@@ -650,8 +654,13 @@
         if (otherElementSet.containsAll(importElementSet)) {
           if (otherElementSet.length > importElementSet.length) {
             StringLiteral uri = importDirective.uri;
+            // The only way an import URI's `stringValue` can be `null` is if
+            // the string contained interpolations, in which case the import
+            // would have failed to resolve, and we would never reach here.  So
+            // it is safe to assume that `uri.stringValue` and
+            // `otherImport.uri.stringValue` are both non-`null`.
             errorReporter.reportErrorForNode(HintCode.UNNECESSARY_IMPORT, uri,
-                [uri.stringValue, otherImport.uri.stringValue]);
+                [uri.stringValue!, otherImport.uri.stringValue!]);
             // Break out of the loop of "other imports" to prevent reporting
             // UNNECESSARY_IMPORT on [importDirective] multiple times.
             break;
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index 0746ffd..9977e73 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -621,13 +621,17 @@
     var name = conflict.name;
 
     if (conflict is GetterMethodConflict) {
+      // Members that participate in inheritance are always enclosed in named
+      // elements so it is safe to assume that
+      // `conflict.getter.enclosingElement.name` and
+      // `conflict.method.enclosingElement.name` are both non-`null`.
       reporter.reportErrorForNode(
         CompileTimeErrorCode.INCONSISTENT_INHERITANCE_GETTER_AND_METHOD,
         node,
         [
           name.name,
-          conflict.getter.enclosingElement.name,
-          conflict.method.enclosingElement.name
+          conflict.getter.enclosingElement.name!,
+          conflict.method.enclosingElement.name!
         ],
       );
     } else if (conflict is CandidatesConflict) {
diff --git a/pkg/analyzer/lib/src/error/literal_element_verifier.dart b/pkg/analyzer/lib/src/error/literal_element_verifier.dart
index b6c3c4e..a6962f4 100644
--- a/pkg/analyzer/lib/src/error/literal_element_verifier.dart
+++ b/pkg/analyzer/lib/src/error/literal_element_verifier.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/error_verifier.dart';
 
 /// Verifier for [CollectionElement]s in list, set, or map literals.
 class LiteralElementVerifier {
@@ -18,7 +19,7 @@
   final TypeSystemImpl typeSystem;
   final ErrorReporter errorReporter;
   final FeatureSet featureSet;
-  final bool Function(Expression) checkForUseOfVoidResult;
+  final ErrorVerifier _errorVerifier;
 
   final bool forList;
   final bool forSet;
@@ -32,7 +33,7 @@
     this.typeProvider,
     this.typeSystem,
     this.errorReporter,
-    this.checkForUseOfVoidResult, {
+    this._errorVerifier, {
     this.forList = false,
     this.forSet = false,
     this.elementType,
@@ -49,6 +50,7 @@
   /// Check that the given [type] is assignable to the [elementType], otherwise
   /// report the list or set error on the [errorNode].
   void _checkAssignableToElementType(DartType type, AstNode errorNode) {
+    var elementType = this.elementType;
     if (!typeSystem.isAssignableTo(type, elementType!)) {
       var errorCode = forList
           ? CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
@@ -66,7 +68,8 @@
   void _verifyElement(CollectionElement? element) {
     if (element is Expression) {
       if (forList || forSet) {
-        if (!elementType!.isVoid && checkForUseOfVoidResult(element)) {
+        if (!elementType!.isVoid &&
+            _errorVerifier.checkForUseOfVoidResult(element)) {
           return;
         }
         _checkAssignableToElementType(element.typeOrThrow, element);
@@ -100,16 +103,20 @@
   /// Verify that the [entry]'s key and value are assignable to [mapKeyType]
   /// and [mapValueType].
   void _verifyMapLiteralEntry(MapLiteralEntry entry) {
-    if (!mapKeyType!.isVoid && checkForUseOfVoidResult(entry.key)) {
+    var mapKeyType = this.mapKeyType;
+    if (!mapKeyType!.isVoid &&
+        _errorVerifier.checkForUseOfVoidResult(entry.key)) {
       return;
     }
 
-    if (!mapValueType!.isVoid && checkForUseOfVoidResult(entry.value)) {
+    var mapValueType = this.mapValueType;
+    if (!mapValueType!.isVoid &&
+        _errorVerifier.checkForUseOfVoidResult(entry.value)) {
       return;
     }
 
     var keyType = entry.key.typeOrThrow;
-    if (!typeSystem.isAssignableTo(keyType, mapKeyType!)) {
+    if (!typeSystem.isAssignableTo(keyType, mapKeyType)) {
       errorReporter.reportErrorForNode(
         CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
         entry.key,
@@ -118,7 +125,7 @@
     }
 
     var valueType = entry.value.typeOrThrow;
-    if (!typeSystem.isAssignableTo(valueType, mapValueType!)) {
+    if (!typeSystem.isAssignableTo(valueType, mapValueType)) {
       errorReporter.reportErrorForNode(
         CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
         entry.value,
@@ -172,15 +179,44 @@
     }
 
     var iterableElementType = iterableType.typeArguments[0];
+    var elementType = this.elementType;
     if (!typeSystem.isAssignableTo(iterableElementType, elementType!)) {
       var errorCode = forList
           ? CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
           : CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE;
-      errorReporter.reportErrorForNode(
-        errorCode,
-        expression,
-        [iterableElementType, elementType],
-      );
+      // Also check for an "implicit tear-off conversion" which would be applied
+      // after desugaring a spread element.
+      var implicitCallMethod = _errorVerifier.getImplicitCallMethod(
+          iterableElementType, elementType, expression);
+      if (implicitCallMethod == null) {
+        errorReporter.reportErrorForNode(
+          errorCode,
+          expression,
+          [iterableElementType, elementType],
+        );
+      } else {
+        var tearoffType = implicitCallMethod.type;
+        if (featureSet.isEnabled(Feature.constructor_tearoffs)) {
+          var typeArguments = typeSystem.inferFunctionTypeInstantiation(
+            elementType as FunctionType,
+            tearoffType,
+            errorReporter: errorReporter,
+            errorNode: expression,
+            genericMetadataIsEnabled: true,
+          )!;
+          if (typeArguments.isNotEmpty) {
+            tearoffType = tearoffType.instantiate(typeArguments);
+          }
+        }
+
+        if (!typeSystem.isAssignableTo(tearoffType, elementType)) {
+          errorReporter.reportErrorForNode(
+            errorCode,
+            expression,
+            [iterableElementType, elementType],
+          );
+        }
+      }
     }
   }
 
@@ -229,6 +265,7 @@
     }
 
     var keyType = mapType.typeArguments[0];
+    var mapKeyType = this.mapKeyType;
     if (!typeSystem.isAssignableTo(keyType, mapKeyType!)) {
       errorReporter.reportErrorForNode(
         CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
@@ -238,6 +275,7 @@
     }
 
     var valueType = mapType.typeArguments[1];
+    var mapValueType = this.mapValueType;
     if (!typeSystem.isAssignableTo(valueType, mapValueType!)) {
       errorReporter.reportErrorForNode(
         CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
diff --git a/pkg/analyzer/lib/src/error/must_call_super_verifier.dart b/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
index 31a85ca..0cb76fe 100644
--- a/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
+++ b/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
@@ -136,8 +136,10 @@
     _SuperCallVerifier verifier = _SuperCallVerifier(methodName);
     node.accept(verifier);
     if (!verifier.superIsCalled) {
+      // Overridable elements are always enclosed in named elements, so it is
+      // safe to assume [overriddenEnclosingName] is non-`null`.
       _errorReporter.reportErrorForNode(
-          HintCode.MUST_CALL_SUPER, node.name, [overriddenEnclosingName]);
+          HintCode.MUST_CALL_SUPER, node.name, [overriddenEnclosingName!]);
     }
     return;
   }
diff --git a/pkg/analyzer/lib/src/error/return_type_verifier.dart b/pkg/analyzer/lib/src/error/return_type_verifier.dart
index a4e5fe9..06ef0ed 100644
--- a/pkg/analyzer/lib/src/error/return_type_verifier.dart
+++ b/pkg/analyzer/lib/src/error/return_type_verifier.dart
@@ -161,22 +161,34 @@
           [S, T],
         );
       } else if (enclosingExecutable.isConstructor) {
+        // [EnclosingExecutableContext.displayName] will only return `null` if
+        // there is no enclosing element, in which case the `if` test above
+        // would have failed.  So it's safe to assume that
+        // `enclosingExecutable.displayName` is non-`null`.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR,
           expression,
-          [S, T, enclosingExecutable.displayName],
+          [S, T, enclosingExecutable.displayName!],
         );
       } else if (enclosingExecutable.isFunction) {
+        // [EnclosingExecutableContext.displayName] will only return `null` if
+        // there is no enclosing element, in which case the `if` test above
+        // would have failed.  So it's safe to assume that
+        // `enclosingExecutable.displayName` is non-`null`.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION,
           expression,
-          [S, T, enclosingExecutable.displayName],
+          [S, T, enclosingExecutable.displayName!],
         );
       } else if (enclosingExecutable.isMethod) {
+        // [EnclosingExecutableContext.displayName] will only return `null` if
+        // there is no enclosing element, in which case the `if` test above
+        // would have failed.  So it's safe to assume that
+        // `enclosingExecutable.displayName` is non-`null`.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD,
           expression,
-          [S, T, enclosingExecutable.displayName],
+          [S, T, enclosingExecutable.displayName!],
         );
       }
     }
@@ -268,22 +280,34 @@
           [S, T],
         );
       } else if (enclosingExecutable.isConstructor) {
+        // [EnclosingExecutableContext.displayName] will only return `null` if
+        // there is no enclosing element, in which case the `if` test above
+        // would have failed.  So it's safe to assume that
+        // `enclosingExecutable.displayName` is non-`null`.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR,
           expression,
-          [S, T, enclosingExecutable.displayName],
+          [S, T, enclosingExecutable.displayName!],
         );
       } else if (enclosingExecutable.isFunction) {
+        // [EnclosingExecutableContext.displayName] will only return `null` if
+        // there is no enclosing element, in which case the `if` test above
+        // would have failed.  So it's safe to assume that
+        // `enclosingExecutable.displayName` is non-`null`.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION,
           expression,
-          [S, T, enclosingExecutable.displayName],
+          [S, T, enclosingExecutable.displayName!],
         );
       } else if (enclosingExecutable.isMethod) {
+        // [EnclosingExecutableContext.displayName] will only return `null` if
+        // there is no enclosing element, in which case the `if` test above
+        // would have failed.  So it's safe to assume that
+        // `enclosingExecutable.displayName` is non-`null`.
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD,
           expression,
-          [S, T, enclosingExecutable.displayName],
+          [S, T, enclosingExecutable.displayName!],
         );
       }
     }
diff --git a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
index 83fbc88..c2f2f09 100644
--- a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
+++ b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
@@ -8,12 +8,14 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/type_algebra.dart';
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
 import 'package:analyzer/src/generated/resolver.dart';
@@ -249,15 +251,15 @@
       // Type has explicit type arguments.
       return;
     }
-    if (_isMissingTypeArguments(
-        node, node.typeOrThrow, node.name.staticElement, null)) {
+    var type = node.typeOrThrow;
+    if (_isMissingTypeArguments(node, type, node.name.staticElement, null)) {
       AstNode unwrappedParent = parentEscapingTypeArguments(node);
       if (unwrappedParent is AsExpression || unwrappedParent is IsExpression) {
         // Do not report a "Strict raw type" error in this case; too noisy.
         // See https://github.com/dart-lang/language/blob/master/resources/type-system/strict-raw-types.md#conditions-for-a-raw-type-hint
       } else {
         _errorReporter
-            .reportErrorForNode(HintCode.STRICT_RAW_TYPE, node, [node.type]);
+            .reportErrorForNode(HintCode.STRICT_RAW_TYPE, node, [type]);
       }
     }
   }
@@ -265,18 +267,21 @@
   /// Verify that the type arguments in the given [namedType] are all within
   /// their bounds.
   void _checkForTypeArgumentNotMatchingBounds(NamedType namedType) {
-    var type = namedType.type;
+    final type = namedType.type;
     if (type == null) {
       return;
     }
 
-    List<TypeParameterElement> typeParameters;
-    List<DartType> typeArguments;
-    var alias = type.alias;
+    final List<TypeParameterElement> typeParameters;
+    final String elementName;
+    final List<DartType> typeArguments;
+    final alias = type.alias;
     if (alias != null) {
+      elementName = alias.element.name;
       typeParameters = alias.element.typeParameters;
       typeArguments = alias.typeArguments;
     } else if (type is InterfaceType) {
+      elementName = type.element.name;
       typeParameters = type.element.typeParameters;
       typeArguments = type.typeArguments;
     } else {
@@ -289,7 +294,7 @@
 
     // Check for regular-bounded.
     List<_TypeArgumentIssue>? issues;
-    var substitution = Substitution.fromPairs(typeParameters, typeArguments);
+    final substitution = Substitution.fromPairs(typeParameters, typeArguments);
     for (var i = 0; i < typeArguments.length; i++) {
       var typeParameter = typeParameters[i];
       var typeArgument = typeArguments[i];
@@ -325,6 +330,49 @@
       return;
     }
 
+    List<DiagnosticMessage>? buildContextMessages({
+      List<DartType>? invertedTypeArguments,
+    }) {
+      final messages = <DiagnosticMessage>[];
+
+      void addMessage(String message) {
+        messages.add(
+          DiagnosticMessageImpl(
+            filePath: _errorReporter.source.fullName,
+            length: namedType.length,
+            message: message,
+            offset: namedType.offset,
+            url: null,
+          ),
+        );
+      }
+
+      String typeArgumentsToString(List<DartType> typeArguments) {
+        return typeArguments
+            .map((e) => e.getDisplayString(withNullability: true))
+            .join(', ');
+      }
+
+      if (namedType.typeArguments == null) {
+        var typeStr = '$elementName<${typeArgumentsToString(typeArguments)}>';
+        addMessage(
+          "The raw type was instantiated as '$typeStr', "
+          "and is not regular-bounded.",
+        );
+      }
+
+      if (invertedTypeArguments != null) {
+        var invertedTypeStr =
+            '$elementName<${typeArgumentsToString(invertedTypeArguments)}>';
+        addMessage(
+          "The inverted type '$invertedTypeStr' is also not regular-bounded, "
+          "so the type is not well-bounded.",
+        );
+      }
+
+      return messages.isNotEmpty ? messages : null;
+    }
+
     // If not allowed to be super-bounded, report issues.
     if (!_shouldAllowSuperBoundedTypes(namedType)) {
       for (var issue in issues) {
@@ -332,27 +380,32 @@
           CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
           _typeArgumentErrorNode(namedType, issue.index),
           [issue.argument, issue.parameter.name, issue.parameterBound],
+          buildContextMessages(),
         );
       }
       return;
     }
 
     // Prepare type arguments for checking for super-bounded.
-    type = _typeSystem.replaceTopAndBottom(type);
-    alias = type.alias;
-    if (alias != null) {
-      typeArguments = alias.typeArguments;
-    } else if (type is InterfaceType) {
-      typeArguments = type.typeArguments;
+    final invertedType = _typeSystem.replaceTopAndBottom(type);
+    final List<DartType> invertedTypeArguments;
+    final invertedAlias = invertedType.alias;
+    if (invertedAlias != null) {
+      invertedTypeArguments = invertedAlias.typeArguments;
+    } else if (invertedType is InterfaceType) {
+      invertedTypeArguments = invertedType.typeArguments;
     } else {
       return;
     }
 
     // Check for super-bounded.
-    substitution = Substitution.fromPairs(typeParameters, typeArguments);
-    for (var i = 0; i < typeArguments.length; i++) {
+    final invertedSubstitution = Substitution.fromPairs(
+      typeParameters,
+      invertedTypeArguments,
+    );
+    for (var i = 0; i < invertedTypeArguments.length; i++) {
       var typeParameter = typeParameters[i];
-      var typeArgument = typeArguments[i];
+      var typeArgument = invertedTypeArguments[i];
 
       var bound = typeParameter.bound;
       if (bound == null) {
@@ -360,13 +413,16 @@
       }
 
       bound = _libraryElement.toLegacyTypeIfOptOut(bound);
-      bound = substitution.substituteType(bound);
+      bound = invertedSubstitution.substituteType(bound);
 
       if (!_typeSystem.isSubtypeOf(typeArgument, bound)) {
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
           _typeArgumentErrorNode(namedType, i),
           [typeArgument, typeParameter.name, bound],
+          buildContextMessages(
+            invertedTypeArguments: invertedTypeArguments,
+          ),
         );
       }
     }
diff --git a/pkg/analyzer/lib/src/error/use_result_verifier.dart b/pkg/analyzer/lib/src/error/use_result_verifier.dart
index 1899064..521d5b6 100644
--- a/pkg/analyzer/lib/src/error/use_result_verifier.dart
+++ b/pkg/analyzer/lib/src/error/use_result_verifier.dart
@@ -149,11 +149,15 @@
       return parent.target == node;
     }
 
-    if (parent is ParenthesizedExpression || parent is ConditionalExpression) {
+    if (parent is ParenthesizedExpression ||
+        parent is ConditionalExpression ||
+        parent is AwaitExpression) {
       return _isUsed(parent);
     }
 
     return parent is ArgumentList ||
+        // Node should always be RHS so no need to check for a property assignment.
+        parent is AssignmentExpression ||
         parent is VariableDeclaration ||
         parent is MethodInvocation ||
         parent is PropertyAccess ||
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 9abd454..4a50a3c 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -26,6 +26,7 @@
         messageMissingAssignableSelector,
         messageNativeClauseShouldBeAnnotation,
         messageOperatorWithTypeParameters,
+        messagePositionalAfterNamedArgument,
         templateDuplicateLabelInSwitchStatement,
         templateExpectedButGot,
         templateExpectedIdentifier,
@@ -143,9 +144,12 @@
   /// `true` if constructor tearoffs are enabled
   final bool enableConstructorTearoffs;
 
-  /// `true` if extension types are enabled;
+  /// `true` if extension types are enabled
   final bool enableExtensionTypes;
 
+  /// `true` if named arguments anywhere are enabled
+  final bool enableNamedArgumentsAnywhere;
+
   final FeatureSet _featureSet;
 
   AstBuilder(ErrorReporter? errorReporter, this.fileUri, this.isFullAst,
@@ -164,6 +168,8 @@
         enableConstructorTearoffs =
             _featureSet.isEnabled(Feature.constructor_tearoffs),
         enableExtensionTypes = _featureSet.isEnabled(Feature.extension_types),
+        enableNamedArgumentsAnywhere =
+            _featureSet.isEnabled(Feature.named_arguments_anywhere),
         uri = uri ?? fileUri;
 
   NodeList<ClassMember> get currentDeclarationMembers {
@@ -268,8 +274,8 @@
   }
 
   @override
-  void beginFactoryMethod(
-      Token lastConsumed, Token? externalToken, Token? constToken) {
+  void beginFactoryMethod(DeclarationKind declarationKind, Token lastConsumed,
+      Token? externalToken, Token? constToken) {
     push(_Modifiers()
       ..externalKeyword = externalToken
       ..finalConstOrVarKeyword = constToken);
@@ -310,6 +316,7 @@
 
   @override
   void beginMethod(
+      DeclarationKind declarationKind,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -576,6 +583,20 @@
     var expressions = popTypedList2<Expression>(count);
     ArgumentList arguments =
         ast.argumentList(leftParenthesis, expressions, rightParenthesis);
+
+    if (!enableNamedArgumentsAnywhere) {
+      bool hasSeenNamedArgument = false;
+      for (Expression expression in expressions) {
+        if (expression is NamedExpression) {
+          hasSeenNamedArgument = true;
+        } else if (hasSeenNamedArgument) {
+          // Positional argument after named argument.
+          handleRecoverableError(messagePositionalAfterNamedArgument,
+              expression.beginToken, expression.endToken);
+        }
+      }
+    }
+
     push(ast.methodInvocation(
         null, null, _tmpSimpleIdentifier(), null, arguments));
   }
@@ -995,7 +1016,7 @@
   }
 
   @override
-  void endClassOrMixinBody(DeclarationKind kind, int memberCount,
+  void endClassOrMixinOrExtensionBody(DeclarationKind kind, int memberCount,
       Token leftBracket, Token rightBracket) {
     // TODO(danrubel): consider renaming endClassOrMixinBody
     // to endClassOrMixinOrExtensionBody
@@ -1574,45 +1595,6 @@
   }
 
   @override
-  void endFunctionTypeAlias(
-      Token typedefKeyword, Token? equals, Token semicolon) {
-    assert(optional('typedef', typedefKeyword));
-    assert(optionalOrNull('=', equals));
-    assert(optional(';', semicolon));
-    debugEvent("FunctionTypeAlias");
-
-    if (equals == null) {
-      var parameters = pop() as FormalParameterList;
-      var typeParameters = pop() as TypeParameterList?;
-      var name = pop() as SimpleIdentifier;
-      var returnType = pop() as TypeAnnotation?;
-      var metadata = pop() as List<Annotation>?;
-      var comment = _findComment(metadata, typedefKeyword);
-      declarations.add(ast.functionTypeAlias(comment, metadata, typedefKeyword,
-          returnType, name, typeParameters, parameters, semicolon));
-    } else {
-      var type = pop() as TypeAnnotation;
-      var templateParameters = pop() as TypeParameterList?;
-      var name = pop() as SimpleIdentifier;
-      var metadata = pop() as List<Annotation>?;
-      var comment = _findComment(metadata, typedefKeyword);
-      if (type is! GenericFunctionType && !enableNonFunctionTypeAliases) {
-        var feature = Feature.nonfunction_type_aliases;
-        handleRecoverableError(
-          templateExperimentNotEnabled.withArguments(
-            feature.enableString,
-            _versionAsString(ExperimentStatus.currentVersion),
-          ),
-          equals,
-          equals,
-        );
-      }
-      declarations.add(ast.genericTypeAlias(comment, metadata, typedefKeyword,
-          name, templateParameters, equals, type, semicolon));
-    }
-  }
-
-  @override
   void endFunctionTypedFormalParameter(Token nameToken, Token? question) {
     debugEvent("FunctionTypedFormalParameter");
     if (!enableNonNullable) {
@@ -1682,7 +1664,7 @@
   }
 
   @override
-  void endImplicitCreationExpression(Token token) {
+  void endImplicitCreationExpression(Token token, Token openAngleBracket) {
     debugEvent("ImplicitCreationExpression");
 
     _handleInstanceCreation(null);
@@ -2316,6 +2298,44 @@
   }
 
   @override
+  void endTypedef(Token typedefKeyword, Token? equals, Token semicolon) {
+    assert(optional('typedef', typedefKeyword));
+    assert(optionalOrNull('=', equals));
+    assert(optional(';', semicolon));
+    debugEvent("FunctionTypeAlias");
+
+    if (equals == null) {
+      var parameters = pop() as FormalParameterList;
+      var typeParameters = pop() as TypeParameterList?;
+      var name = pop() as SimpleIdentifier;
+      var returnType = pop() as TypeAnnotation?;
+      var metadata = pop() as List<Annotation>?;
+      var comment = _findComment(metadata, typedefKeyword);
+      declarations.add(ast.functionTypeAlias(comment, metadata, typedefKeyword,
+          returnType, name, typeParameters, parameters, semicolon));
+    } else {
+      var type = pop() as TypeAnnotation;
+      var templateParameters = pop() as TypeParameterList?;
+      var name = pop() as SimpleIdentifier;
+      var metadata = pop() as List<Annotation>?;
+      var comment = _findComment(metadata, typedefKeyword);
+      if (type is! GenericFunctionType && !enableNonFunctionTypeAliases) {
+        var feature = Feature.nonfunction_type_aliases;
+        handleRecoverableError(
+          templateExperimentNotEnabled.withArguments(
+            feature.enableString,
+            _versionAsString(ExperimentStatus.currentVersion),
+          ),
+          equals,
+          equals,
+        );
+      }
+      declarations.add(ast.genericTypeAlias(comment, metadata, typedefKeyword,
+          name, templateParameters, equals, type, semicolon));
+    }
+  }
+
+  @override
   void endTypeList(int count) {
     debugEvent("TypeList");
     push(popTypedList<NamedType>(count) ?? NullValue.TypeList);
@@ -3416,7 +3436,7 @@
     if (message == messageNativeClauseShouldBeAnnotation && allowNativeClause) {
       return;
     }
-    debugEvent("Error: ${message.message}");
+    debugEvent("Error: ${message.problemMessage}");
     if (message.code.analyzerCodes == null && startToken is ErrorToken) {
       translateErrorToken(startToken, errorReporter.reportScannerError);
     } else {
@@ -3728,7 +3748,7 @@
 
   @override
   Never internalProblem(Message message, int charOffset, Uri uri) {
-    throw UnsupportedError(message.message);
+    throw UnsupportedError(message.problemMessage);
   }
 
   /// Return `true` if [token] is either `null` or is the symbol or keyword
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index f207a06..0159195 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -114,10 +114,6 @@
             length,
             [name]);
         return;
-      case "FUNCTION_TYPED_PARAMETER_VAR":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, offset, length);
-        return;
       case "GETTER_WITH_PARAMETERS":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.GETTER_WITH_PARAMETERS, offset, length);
@@ -275,10 +271,6 @@
             offset,
             length);
         return;
-      case "TYPE_PARAMETER_ON_OPERATOR":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR, offset, length);
-        return;
       case "UNDEFINED_CLASS":
         errorReporter?.reportErrorForOffset(
             CompileTimeErrorCode.UNDEFINED_CLASS, offset, length);
@@ -349,7 +341,7 @@
   }
 
   void reportScannerError(
-      ScannerErrorCode errorCode, int offset, List<Object?>? arguments) {
+      ScannerErrorCode errorCode, int offset, List<Object>? arguments) {
     // TODO(danrubel): update client to pass length in addition to offset.
     int length = 1;
     errorReporter?.reportErrorForOffset(errorCode, offset, length, arguments);
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 7f2a709..717940b 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -125,42 +125,33 @@
 
   @override
   void visitCommentReference(covariant CommentReferenceImpl node) {
-    var identifier = node.identifier;
-    if (identifier is SimpleIdentifierImpl) {
-      var element = _resolveSimpleIdentifier(identifier);
+    var expression = node.expression;
+    if (expression is SimpleIdentifierImpl) {
+      var element = _resolveSimpleIdentifier(expression);
       if (element == null) {
-        // TODO(brianwilkerson) Report this error?
-        //        resolver.reportError(
-        //            CompileTimeErrorCode.UNDEFINED_IDENTIFIER,
-        //            simpleIdentifier,
-        //            simpleIdentifier.getName());
-      } else {
-        if (element.library == null || element.library != _definingLibrary) {
-          // TODO(brianwilkerson) Report this error?
-        }
-        identifier.staticElement = element;
-        if (node.newKeyword != null) {
-          if (element is ClassElement) {
-            var constructor = element.unnamedConstructor;
-            if (constructor == null) {
-              // TODO(brianwilkerson) Report this error.
-            } else {
-              identifier.staticElement = constructor;
-            }
-          } else {
+        return;
+      }
+      expression.staticElement = element;
+      if (node.newKeyword != null) {
+        if (element is ClassElement) {
+          var constructor = element.unnamedConstructor;
+          if (constructor == null) {
             // TODO(brianwilkerson) Report this error.
+          } else {
+            expression.staticElement = constructor;
           }
+        } else {
+          // TODO(brianwilkerson) Report this error.
         }
       }
-    } else if (identifier is PrefixedIdentifierImpl) {
-      var prefix = identifier.prefix;
+    } else if (expression is PrefixedIdentifierImpl) {
+      var prefix = expression.prefix;
       var prefixElement = _resolveSimpleIdentifier(prefix);
       prefix.staticElement = prefixElement;
 
-      var name = identifier.identifier;
+      var name = expression.identifier;
 
       if (prefixElement == null) {
-//        resolver.reportError(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, prefix, prefix.getName());
         return;
       }
 
@@ -173,11 +164,6 @@
         return;
       }
 
-      var library = prefixElement.library;
-      if (library != _definingLibrary) {
-        // TODO(brianwilkerson) Report this error.
-      }
-
       if (node.newKeyword == null) {
         if (prefixElement is ClassElement) {
           name.staticElement = prefixElement.getMethod(name.name) ??
@@ -513,7 +499,7 @@
   }
 
   @override
-  void visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclarationList(VariableDeclarationList node) {
     _resolveAnnotations(node.metadata);
   }
 
diff --git a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
index b53515f..41ecb65 100644
--- a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
+++ b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
@@ -6,6 +6,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
@@ -29,20 +30,17 @@
   /// argument.
   void checkForArgumentTypeNotAssignable(
       Expression expression,
-      DartType? expectedStaticType,
+      DartType expectedStaticType,
       DartType actualStaticType,
       ErrorCode errorCode,
       {Map<DartType, NonPromotionReason> Function()? whyNotPromoted}) {
-    // Warning case: test static type information
-    if (expectedStaticType != null) {
-      if (!expectedStaticType.isVoid && checkForUseOfVoidResult(expression)) {
-        return;
-      }
-
-      _checkForAssignableExpressionAtType(
-          expression, actualStaticType, expectedStaticType, errorCode,
-          whyNotPromoted: whyNotPromoted);
+    if (!expectedStaticType.isVoid && checkForUseOfVoidResult(expression)) {
+      return;
     }
+
+    _checkForAssignableExpressionAtType(
+        expression, actualStaticType, expectedStaticType, errorCode,
+        whyNotPromoted: whyNotPromoted);
   }
 
   /// Verify that the given [argument] can be assigned to its corresponding
@@ -51,11 +49,11 @@
   /// This method corresponds to
   /// [BestPracticesVerifier.checkForArgumentTypeNotAssignableForArgument].
   ///
-  /// See [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE].
+  /// See [CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE].
   void checkForArgumentTypeNotAssignableForArgument(Expression argument,
       {bool promoteParameterToNullable = false,
       Map<DartType, NonPromotionReason> Function()? whyNotPromoted}) {
-    _checkForArgumentTypeNotAssignableForArgument2(
+    _checkForArgumentTypeNotAssignableForArgument(
       argument: argument is NamedExpression ? argument.expression : argument,
       parameter: argument.staticParameterElement,
       promoteParameterToNullable: promoteParameterToNullable,
@@ -68,7 +66,7 @@
   /// from the name in the [ConstructorFieldInitializer].
   ///
   /// See [CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE], and
-  /// [StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE].
+  /// [CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE].
   void checkForFieldInitializerNotAssignable(
       ConstructorFieldInitializer initializer, FieldElement fieldElement,
       {required bool isConstConstructor,
@@ -160,8 +158,8 @@
       return;
     }
 
-    _checkForAssignableExpression(
-        rhs, leftType, CompileTimeErrorCode.INVALID_ASSIGNMENT,
+    _checkForAssignableExpressionAtType(
+        rhs, rhs.typeOrThrow, leftType, CompileTimeErrorCode.INVALID_ASSIGNMENT,
         whyNotPromoted: whyNotPromoted);
   }
 
@@ -169,7 +167,7 @@
   /// when it returns 'void'. Or, in rare cases, when other types of expressions
   /// are void, such as identifiers.
   ///
-  /// See [StaticWarningCode.USE_OF_VOID_RESULT].
+  /// See [CompileTimeErrorCode.USE_OF_VOID_RESULT].
   bool checkForUseOfVoidResult(Expression expression) {
     if (!identical(expression.staticType, VoidTypeImpl.instance)) {
       return false;
@@ -196,7 +194,7 @@
     if (readElement is MethodElement) {
       var parameters = readElement.parameters;
       if (parameters.isNotEmpty) {
-        _checkForArgumentTypeNotAssignableForArgument2(
+        _checkForArgumentTypeNotAssignableForArgument(
           argument: index,
           parameter: parameters[0],
           promoteParameterToNullable: false,
@@ -208,7 +206,7 @@
     if (writeElement is MethodElement) {
       var parameters = writeElement.parameters;
       if (parameters.isNotEmpty) {
-        _checkForArgumentTypeNotAssignableForArgument2(
+        _checkForArgumentTypeNotAssignableForArgument(
           argument: index,
           parameter: parameters[0],
           promoteParameterToNullable: false,
@@ -232,6 +230,27 @@
       SyntacticEntity errorEntity,
       Map<DartType, NonPromotionReason>? whyNotPromoted);
 
+  /// If an assignment from [type] to [context] is a case of an implicit 'call'
+  /// method, returns the element of the 'call' method.
+  ///
+  /// From the spec:
+  ///
+  /// > Let `e` be an expression whose static type is an interface type that has
+  /// > a method named `call`. In the case where the context type for `e`
+  /// > is a function type or the type `Function`, `e` is treated as `e.call`.
+  MethodElement? getImplicitCallMethod(
+      DartType type, DartType? context, SyntacticEntity errorNode) {
+    if (context != null &&
+        typeSystem.acceptsFunctionType(context) &&
+        type is InterfaceType &&
+        type.nullabilitySuffix != NullabilitySuffix.question) {
+      return type.lookUpMethod2(
+          FunctionElement.CALL_METHOD_NAME, type.element.library);
+    } else {
+      return null;
+    }
+  }
+
   /// Return the variable element represented by the given [expression], or
   /// `null` if there is no such element.
   VariableElement? getVariableElement(Expression? expression) {
@@ -244,51 +263,25 @@
     return null;
   }
 
-  void _checkForArgumentTypeNotAssignableForArgument2({
+  void _checkForArgumentTypeNotAssignableForArgument({
     required Expression argument,
     required ParameterElement? parameter,
     required bool promoteParameterToNullable,
     Map<DartType, NonPromotionReason> Function()? whyNotPromoted,
   }) {
     var staticParameterType = parameter?.type;
-    if (promoteParameterToNullable && staticParameterType != null) {
-      staticParameterType =
-          typeSystem.makeNullable(staticParameterType as TypeImpl);
+    if (staticParameterType != null) {
+      if (promoteParameterToNullable) {
+        staticParameterType =
+            typeSystem.makeNullable(staticParameterType as TypeImpl);
+      }
+      checkForArgumentTypeNotAssignable(
+          argument,
+          staticParameterType,
+          argument.typeOrThrow,
+          CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
+          whyNotPromoted: whyNotPromoted);
     }
-    _checkForArgumentTypeNotAssignableWithExpectedTypes(
-        argument,
-        staticParameterType,
-        CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
-        whyNotPromoted);
-  }
-
-  /// Verify that the given [expression] can be assigned to its corresponding
-  /// parameters.
-  ///
-  /// See [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE],
-  /// [CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE],
-  /// [StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE],
-  /// [CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE],
-  /// [CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE],
-  /// [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE], and
-  /// [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE].
-  void _checkForArgumentTypeNotAssignableWithExpectedTypes(
-      Expression expression,
-      DartType? expectedStaticType,
-      ErrorCode errorCode,
-      Map<DartType, NonPromotionReason> Function()? whyNotPromoted) {
-    checkForArgumentTypeNotAssignable(
-        expression, expectedStaticType, expression.typeOrThrow, errorCode,
-        whyNotPromoted: whyNotPromoted);
-  }
-
-  bool _checkForAssignableExpression(
-      Expression expression, DartType expectedStaticType, ErrorCode errorCode,
-      {required Map<DartType, NonPromotionReason> Function()? whyNotPromoted}) {
-    DartType actualStaticType = expression.typeOrThrow;
-    return _checkForAssignableExpressionAtType(
-        expression, actualStaticType, expectedStaticType, errorCode,
-        whyNotPromoted: whyNotPromoted);
   }
 
   bool _checkForAssignableExpressionAtType(
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index ecedd89..b53caa5 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -208,10 +208,6 @@
   /// A flag indicating whether the visitor is currently within code in the SDK.
   bool _isInSystemLibrary = false;
 
-  /// A flag indicating whether the current library contains at least one import
-  /// directive with a URI that uses the "dart-ext" scheme.
-  bool _hasExtUri = false;
-
   /// The class containing the AST nodes being visited, or `null` if we are not
   /// in the scope of a class.
   ClassElementImpl? _enclosingClass;
@@ -265,7 +261,6 @@
         _duplicateDefinitionVerifier =
             DuplicateDefinitionVerifier(_currentLibrary, errorReporter) {
     _isInSystemLibrary = _currentLibrary.source.isInSystemLibrary;
-    _hasExtUri = _currentLibrary.hasExtUri;
     _isInCatchClause = false;
     _isInStaticVariableDeclaration = false;
     _isInConstructorInitializer = false;
@@ -332,7 +327,6 @@
   @override
   void visitAnnotation(Annotation node) {
     _checkForInvalidAnnotationFromDeferredLibrary(node);
-    _checkForMissingJSLibAnnotation(node);
     super.visitAnnotation(node);
   }
 
@@ -1513,9 +1507,9 @@
 
   /// Verify that the given [expression] is not final.
   ///
-  /// See [StaticWarningCode.ASSIGNMENT_TO_CONST],
-  /// [StaticWarningCode.ASSIGNMENT_TO_FINAL], and
-  /// [StaticWarningCode.ASSIGNMENT_TO_METHOD].
+  /// See [CompileTimeErrorCode.ASSIGNMENT_TO_CONST],
+  /// [CompileTimeErrorCode.ASSIGNMENT_TO_FINAL], and
+  /// [CompileTimeErrorCode.ASSIGNMENT_TO_METHOD].
   void _checkForAssignmentToFinal(Expression expression) {
     // TODO(scheglov) Check SimpleIdentifier(s) as all other nodes.
     if (expression is! SimpleIdentifier) return;
@@ -1656,7 +1650,7 @@
   /// Verify that the given [switchCase] is terminated with 'break', 'continue',
   /// 'return' or 'throw'.
   ///
-  /// see [StaticWarningCode.CASE_BLOCK_NOT_TERMINATED].
+  /// see [CompileTimeErrorCode.CASE_BLOCK_NOT_TERMINATED].
   void _checkForCaseBlockNotTerminated(SwitchCase switchCase) {
     NodeList<Statement> statements = switchCase.statements;
     if (statements.isEmpty) {
@@ -1698,7 +1692,7 @@
   /// Verify that the switch cases in the given switch [statement] are
   /// terminated with 'break', 'continue', 'rethrow', 'return' or 'throw'.
   ///
-  /// See [StaticWarningCode.CASE_BLOCK_NOT_TERMINATED].
+  /// See [CompileTimeErrorCode.CASE_BLOCK_NOT_TERMINATED].
   void _checkForCaseBlocksNotTerminated(SwitchStatement statement) {
     if (_isNonNullableByDefault) return;
 
@@ -2196,9 +2190,6 @@
       awaitKeyword = parent.awaitKeyword;
     }
 
-    // Use an explicit string instead of [loopType] to remove the "<E>".
-    String loopNamedType = awaitKeyword != null ? "Stream" : "Iterable";
-
     // The object being iterated has to implement Iterable<T> for some T that
     // is assignable to the variable's type.
     // TODO(rnystrom): Move this into mostSpecificTypeArgument()?
@@ -2213,6 +2204,8 @@
     }
 
     if (!typeSystem.isAssignableTo(iterableType, requiredSequenceType)) {
+      // Use an explicit string instead of [loopType] to remove the "<E>".
+      String loopNamedType = awaitKeyword != null ? 'Stream' : 'Iterable';
       errorReporter.reportErrorForNode(
         CompileTimeErrorCode.FOR_IN_OF_INVALID_TYPE,
         node.iterable,
@@ -2237,11 +2230,48 @@
     }
 
     if (!typeSystem.isAssignableTo(sequenceElementType, variableType)) {
-      errorReporter.reportErrorForNode(
-        CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE,
-        node.iterable,
-        [iterableType, loopNamedType, variableType],
-      );
+      // Use an explicit string instead of [loopType] to remove the "<E>".
+      String loopNamedType = awaitKeyword != null ? 'Stream' : 'Iterable';
+
+      // A for-in loop is specified to desugar to a different set of statements
+      // which include an assignment of the sequence element's `iterator`'s
+      // `current` value, at which point "implicit tear-off conversion" may be
+      // performed. We do not perform this desugaring; instead we allow a
+      // special assignability here.
+      var implicitCallMethod = getImplicitCallMethod(
+          sequenceElementType, variableType, node.iterable);
+      if (implicitCallMethod == null) {
+        errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE,
+          node.iterable,
+          [iterableType, loopNamedType, variableType],
+        );
+      } else {
+        var tearoffType = implicitCallMethod.type;
+        // An implicit tear-off conversion does occur on the values of the
+        // iterator, but this does not guarantee their assignability.
+
+        if (_featureSet?.isEnabled(Feature.constructor_tearoffs) ?? true) {
+          var typeArguments = typeSystem.inferFunctionTypeInstantiation(
+            variableType as FunctionType,
+            tearoffType,
+            errorReporter: errorReporter,
+            errorNode: node.iterable,
+            genericMetadataIsEnabled: true,
+          )!;
+          if (typeArguments.isNotEmpty) {
+            tearoffType = tearoffType.instantiate(typeArguments);
+          }
+        }
+
+        if (!typeSystem.isAssignableTo(tearoffType, variableType)) {
+          errorReporter.reportErrorForNode(
+            CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE,
+            node.iterable,
+            [iterableType, loopNamedType, variableType],
+          );
+        }
+      }
     }
 
     return true;
@@ -2275,10 +2305,14 @@
       return;
     }
 
+    // It is safe to assume that `directive.uri.stringValue` is non-`null`,
+    // because the only time it is `null` is if the URI contains a string
+    // interpolation, in which case the export would never have resolved in the
+    // first place.
     errorReporter.reportErrorForNode(
         CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY,
         directive,
-        [directive.uri]);
+        [directive.uri.stringValue!]);
   }
 
   /// See [CompileTimeErrorCode.EXPORT_LEGACY_SYMBOL].
@@ -2434,7 +2468,7 @@
   /// variables if the list is final or const.
   ///
   /// See [CompileTimeErrorCode.CONST_NOT_INITIALIZED], and
-  /// [StaticWarningCode.FINAL_NOT_INITIALIZED].
+  /// [CompileTimeErrorCode.FINAL_NOT_INITIALIZED].
   void _checkForFinalNotInitialized(VariableDeclarationList list) {
     if (_isInNativeClass || list.isSynthetic) {
       return;
@@ -2483,7 +2517,7 @@
   /// constructor are handled in [_checkForAllFinalInitializedErrorCodes].
   ///
   /// See [CompileTimeErrorCode.CONST_NOT_INITIALIZED], and
-  /// [StaticWarningCode.FINAL_NOT_INITIALIZED].
+  /// [CompileTimeErrorCode.FINAL_NOT_INITIALIZED].
   void _checkForFinalNotInitializedInClass(List<ClassMember> members) {
     for (ClassMember classMember in members) {
       if (classMember is ConstructorDeclaration) {
@@ -2557,7 +2591,9 @@
       } else {
         errorCode = LanguageCode.IMPLICIT_DYNAMIC_VARIABLE;
       }
-      errorReporter.reportErrorForNode(errorCode, node, [id]);
+      // Parameters associated with a variable always have a name, so we can
+      // safely rely on [id] being non-`null`.
+      errorReporter.reportErrorForNode(errorCode, node, [id!]);
     }
   }
 
@@ -2614,11 +2650,14 @@
     if (sdkLibrary == null || !sdkLibrary.isInternal) {
       return;
     }
-
+    // The only way an import URI's `stringValue` can be `null` is if the string
+    // contained interpolations, in which case the import would have failed to
+    // resolve, and we would never reach here.  So it is safe to assume that
+    // `directive.uri.stringValue` is non-`null`.
     errorReporter.reportErrorForNode(
         CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY,
         directive.uri,
-        [directive.uri.stringValue]);
+        [directive.uri.stringValue!]);
   }
 
   /// Check that the given [typeReference] is not a type reference and that then
@@ -2660,10 +2699,6 @@
           return;
         }
       }
-      errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER,
-          name,
-          [name.name, _getKind(element), element.enclosingElement.name]);
     }
   }
 
@@ -2671,12 +2706,14 @@
   /// given [argument]. This is used for prefix and postfix expressions where
   /// the argument value is implicit.
   ///
-  /// See [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE].
+  /// See [CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE].
   void _checkForIntNotAssignable(Expression argument) {
     var staticParameterElement = argument.staticParameterElement;
     var staticParameterType = staticParameterElement?.type;
-    checkForArgumentTypeNotAssignable(argument, staticParameterType, _intType,
-        CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
+    if (staticParameterType != null) {
+      checkForArgumentTypeNotAssignable(argument, staticParameterType, _intType,
+          CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
+    }
   }
 
   /// Verify that the given [annotation] isn't defined in a deferred library.
@@ -2845,8 +2882,7 @@
   /// Verify that the elements of the given list [literal] are subtypes of the
   /// list's static type.
   ///
-  /// See [CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE], and
-  /// [StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE].
+  /// See [CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE].
   void _checkForListElementTypeNotAssignable(ListLiteral literal) {
     // Determine the list's element type. We base this on the static type and
     // not the literal's type arguments because in strong mode, the type
@@ -2865,7 +2901,7 @@
       _typeProvider,
       typeSystem,
       errorReporter,
-      checkForUseOfVoidResult,
+      this,
       forList: true,
       elementType: listElementType,
       featureSet: _featureSet!,
@@ -2953,7 +2989,7 @@
         _typeProvider,
         typeSystem,
         errorReporter,
-        checkForUseOfVoidResult,
+        this,
         forMap: true,
         mapKeyType: keyType,
         mapValueType: valueType,
@@ -3022,15 +3058,6 @@
     }
   }
 
-  void _checkForMissingJSLibAnnotation(Annotation node) {
-    if (node.elementAnnotation?.isJS ?? false) {
-      if (_currentLibrary.hasJS != true) {
-        errorReporter.reportErrorForNode(
-            HintCode.MISSING_JS_LIB_ANNOTATION, node);
-      }
-    }
-  }
-
   /// Verify that the given mixin does not have an explicitly declared
   /// constructor. The [mixinName] is the node to report problem on. The
   /// [mixinElement] is the mixing to evaluate.
@@ -3095,11 +3122,13 @@
         }
       }
       if (!isSatisfied) {
+        // This error can only occur if [mixinName] resolved to an actual mixin,
+        // so we can safely rely on `mixinName.type` being non-`null`.
         errorReporter.reportErrorForNode(
           CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
           mixinName.name,
           [
-            mixinName.type,
+            mixinName.type!,
             superType,
             constraint,
           ],
@@ -3184,11 +3213,12 @@
       if (Identifier.isPrivateName(name)) {
         Map<String, String> names =
             mixedInNames.putIfAbsent(library, () => <String, String>{});
-        if (names.containsKey(name)) {
+        var conflictingName = names[name];
+        if (conflictingName != null) {
           errorReporter.reportErrorForNode(
               CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION,
               namedType,
-              [name, namedType.name.name, names[name]]);
+              [name, namedType.name.name, conflictingName]);
           return true;
         }
         names[name] = namedType.name.name;
@@ -3198,12 +3228,15 @@
           concrete: true,
         );
         if (inheritedMember != null) {
+          // Inherited members are always contained inside named elements, so we
+          // can safely assume `inheritedMember.enclosingElement.name` is
+          // non-`null`.
           errorReporter.reportErrorForNode(
               CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION,
               namedType, [
             name,
             namedType.name.name,
-            inheritedMember.enclosingElement.name
+            inheritedMember.enclosingElement.name!
           ]);
           return true;
         }
@@ -3257,7 +3290,7 @@
   ///
   /// See [ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE].
   void _checkForNativeFunctionBodyInNonSdkCode(NativeFunctionBody body) {
-    if (!_isInSystemLibrary && !_hasExtUri) {
+    if (!_isInSystemLibrary) {
       errorReporter.reportErrorForNode(
           ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE, body);
     }
@@ -3270,7 +3303,7 @@
   /// This method assumes that the instance creation was tested to be 'new'
   /// before being called.
   ///
-  /// See [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR].
+  /// See [CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR].
   void _checkForNewWithUndefinedConstructor(
       InstanceCreationExpression expression,
       ConstructorName constructorName,
@@ -3415,7 +3448,7 @@
   /// Verify that the given method [declaration] of operator `[]=`, has `void`
   /// return type.
   ///
-  /// See [StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR].
+  /// See [CompileTimeErrorCode.NON_VOID_RETURN_FOR_OPERATOR].
   void _checkForNonVoidReturnTypeForOperator(MethodDeclaration declaration) {
     // check that []= operator
     SimpleIdentifier name = declaration.name;
@@ -3436,7 +3469,7 @@
   /// Verify the [namedType], used as the return type of a setter, is valid
   /// (either `null` or the type 'void').
   ///
-  /// See [StaticWarningCode.NON_VOID_RETURN_FOR_SETTER].
+  /// See [CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER].
   void _checkForNonVoidReturnTypeForSetter(TypeAnnotation? namedType) {
     if (namedType != null) {
       DartType type = namedType.typeOrThrow;
@@ -3895,8 +3928,7 @@
   /// Verify that the elements in the given set [literal] are subtypes of the
   /// set's static type.
   ///
-  /// See [CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE], and
-  /// [StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE].
+  /// See [CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE].
   void _checkForSetElementTypeNotAssignable3(SetOrMapLiteral literal) {
     // Determine the set's element type. We base this on the static type and
     // not the literal's type arguments because in strong mode, the type
@@ -3917,7 +3949,7 @@
         _typeProvider,
         typeSystem,
         errorReporter,
-        checkForUseOfVoidResult,
+        this,
         forSet: true,
         elementType: setElementType,
         featureSet: _featureSet!,
@@ -3931,7 +3963,7 @@
   /// Check the given [typeReference] and that the [name] is not a reference to
   /// an instance member.
   ///
-  /// See [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER].
+  /// See [CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER].
   void _checkForStaticAccessToInstanceMember(
       ClassElement? typeReference, SimpleIdentifier name) {
     // OK, in comment
@@ -3959,7 +3991,7 @@
   /// Check that the type of the expression in the given 'switch' [statement] is
   /// assignable to the type of the 'case' members.
   ///
-  /// See [StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE].
+  /// See [CompileTimeErrorCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE].
   void _checkForSwitchExpressionNotAssignable(SwitchStatement statement) {
     // For NNBD we verify runtime types of values, and subtyping.
     if (_isNonNullableByDefault) {
@@ -4025,7 +4057,7 @@
 
   /// Verify that the [type] is not a deferred type.
   ///
-  /// See [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS].
+  /// See [CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS].
   void _checkForTypeAnnotationDeferredClass(TypeAnnotation? type) {
     if (type is NamedType && type.isDeferred) {
       errorReporter.reportErrorForNode(
@@ -4059,10 +4091,12 @@
           }
           if (step == parameters.length) {
             var element = parameter.declaredElement!;
+            // This error can only occur if there is a bound, so we can saefly
+            // assume `element.bound` is non-`null`.
             errorReporter.reportErrorForNode(
               CompileTimeErrorCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND,
               parameter.name,
-              [element.displayName, element.bound],
+              [element.displayName, element.bound!],
             );
             break;
           }
@@ -4092,7 +4126,7 @@
   ///
   /// See [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT],
   /// [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR], and
-  /// [StaticWarningCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT].
+  /// [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT].
   void _checkForUndefinedConstructorInInitializerImplicit(
       ConstructorDeclaration constructor) {
     if (_enclosingClass == null) {
@@ -4862,30 +4896,6 @@
     return null;
   }
 
-  /// Return a human-readable representation of the kind of the [element].
-  String _getKind(ExecutableElement element) {
-    if (element is MethodElement) {
-      return 'method';
-    } else if (element is PropertyAccessorElement) {
-      if (element.isSynthetic) {
-        PropertyInducingElement variable = element.variable;
-        if (variable is FieldElement) {
-          return 'field';
-        }
-        return 'variable';
-      } else if (element.isGetter) {
-        return 'getter';
-      } else {
-        return 'setter';
-      }
-    } else if (element is ConstructorElement) {
-      return 'constructor';
-    } else if (element is FunctionElement) {
-      return 'function';
-    }
-    return 'member';
-  }
-
   /// Return the name of the library that defines given [element].
   String _getLibraryName(Element? element) {
     if (element == null) {
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index 76f07fd..4d6223c 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -42,6 +42,8 @@
     'Double',
   ];
 
+  static const _primitiveBoolNativeType = 'Bool';
+
   static const _structClassName = 'Struct';
 
   static const _unionClassName = 'Union';
@@ -78,7 +80,7 @@
           compound = node;
           if (node.declaredElement!.isEmptyStruct) {
             _errorReporter.reportErrorForNode(
-                FfiCode.EMPTY_STRUCT, node.name, [node.name.name]);
+                FfiCode.EMPTY_STRUCT, node.name, [node.name.name, className]);
           }
           if (className == _structClassName) {
             _validatePackedAnnotation(node.metadata);
@@ -276,24 +278,119 @@
     }
 
     for (Annotation annotation in annotations) {
-      if (annotation.name.name == _ffiNativeName) {
-        // All FFI Natives must be static.
-        final isStatic = (node is FunctionDeclaration) ||
-            ((node is MethodDeclaration) && node.isStatic);
-        if (!isStatic) {
+      if (annotation.name.name != _ffiNativeName) {
+        continue;
+      }
+
+      final NodeList<Expression> arguments = annotation.arguments!.arguments;
+      final NodeList<TypeAnnotation> typeArguments =
+          annotation.typeArguments!.arguments;
+
+      final ffiSignature = typeArguments[0].type! as FunctionType;
+
+      // Leaf call FFI Natives can't use Handles.
+      _validateFfiLeafCallUsesNoHandles(arguments, ffiSignature, node);
+
+      if (node is MethodDeclaration) {
+        if (!node.declaredElement!.isExternal) {
           _errorReporter.reportErrorForNode(
-              FfiCode.FFI_NATIVE_ONLY_STATIC, node);
+              FfiCode.FFI_NATIVE_MUST_BE_EXTERNAL, node);
         }
-        // Leaf call FFI Natives can't use Handles.
-        ArgumentList? argumentList = annotation.arguments;
-        if (argumentList != null) {
-          NodeList<Expression> arguments = argumentList.arguments;
-          TypeArgumentList? typeArgumentList = annotation.typeArguments;
-          if (typeArgumentList != null) {
-            NodeList<TypeAnnotation> typeArguments = typeArgumentList.arguments;
-            if (typeArguments.isNotEmpty && typeArguments[0].type != null) {
-              _validateFfiLeafCallUsesNoHandles(
-                  arguments, typeArguments[0].type!, node);
+
+        List<DartType> ffiParameterTypes;
+        if (!node.isStatic) {
+          // Instance methods must have the receiver as an extra parameter in the
+          // FfiNative annotation.
+          if (node.parameters!.parameters.length + 1 !=
+              ffiSignature.parameters.length) {
+            _errorReporter.reportErrorForNode(
+                FfiCode
+                    .FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER,
+                node,
+                [
+                  node.parameters!.parameters.length + 1,
+                  ffiSignature.parameters.length
+                ]);
+            return;
+          }
+
+          // Receiver can only be Pointer if the class extends
+          // NativeFieldWrapperClass1.
+          if (ffiSignature.normalParameterTypes[0].isPointer) {
+            final cls = node.declaredElement!.enclosingElement as ClassElement;
+            if (!_extendsNativeFieldWrapperClass1(cls.thisType)) {
+              _errorReporter.reportErrorForNode(
+                  FfiCode
+                      .FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER,
+                  node);
+            }
+          }
+
+          ffiParameterTypes = ffiSignature.normalParameterTypes.sublist(1);
+        } else {
+          // Number of parameters in the FfiNative annotation must match the
+          // annotated declaration.
+          if (node.parameters!.parameters.length !=
+              ffiSignature.parameters.length) {
+            _errorReporter.reportErrorForNode(
+                FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS, node, [
+              ffiSignature.parameters.length,
+              node.parameters!.parameters.length
+            ]);
+            return;
+          }
+
+          ffiParameterTypes = ffiSignature.normalParameterTypes;
+        }
+
+        // Arguments can only be Pointer if the class extends
+        // NativeFieldWrapperClass1.
+        for (var i = 0; i < node.parameters!.parameters.length; i++) {
+          if (ffiParameterTypes[i].isPointer) {
+            final type = node.parameters!.parameters[i].declaredElement!.type;
+            if (!_extendsNativeFieldWrapperClass1(type as InterfaceType)) {
+              _errorReporter.reportErrorForNode(
+                  FfiCode
+                      .FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER,
+                  node);
+            }
+          }
+        }
+
+        continue;
+      }
+
+      if (node is FunctionDeclaration) {
+        if (!node.declaredElement!.isExternal) {
+          _errorReporter.reportErrorForNode(
+              FfiCode.FFI_NATIVE_MUST_BE_EXTERNAL, node);
+        }
+
+        // Number of parameters in the FfiNative annotation must match the
+        // annotated declaration.
+        if (node.functionExpression.parameters!.parameters.length !=
+            ffiSignature.parameters.length) {
+          _errorReporter.reportErrorForNode(
+              FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS, node, [
+            ffiSignature.parameters.length,
+            node.functionExpression.parameters!.parameters.length
+          ]);
+          return;
+        }
+
+        // Arguments can only be Pointer if the class extends
+        // NativeFieldWrapperClass1.
+        for (var i = 0;
+            i < node.functionExpression.parameters!.parameters.length;
+            i++) {
+          if (ffiSignature.normalParameterTypes[i].isPointer) {
+            final type = node.functionExpression.parameters!.parameters[i]
+                .declaredElement!.type;
+            if (!_extendsNativeFieldWrapperClass1(type as InterfaceType)) {
+              _errorReporter.reportErrorForNode(
+                  FfiCode
+                      .FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER,
+                  node);
             }
           }
         }
@@ -301,6 +398,35 @@
     }
   }
 
+  bool _extendsNativeFieldWrapperClass1(InterfaceType? type) {
+    while (type != null) {
+      if (type.getDisplayString(withNullability: false) ==
+          'NativeFieldWrapperClass1') {
+        return true;
+      }
+      type = type.element.supertype;
+    }
+    return false;
+  }
+
+  bool _isConst(Expression expr) {
+    if (expr is Literal) {
+      return true;
+    }
+    if (expr is Identifier) {
+      final staticElm = expr.staticElement;
+      if (staticElm is ConstVariableElement) {
+        return true;
+      }
+      if (staticElm is PropertyAccessorElementImpl) {
+        if (staticElm.variable is ConstVariableElement) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
   /// Returns `true` if [nativeType] is a C type that has a size.
   bool _isSized(DartType nativeType) {
     switch (_primitiveNativeType(nativeType)) {
@@ -308,6 +434,8 @@
         return true;
       case _PrimitiveDartType.int:
         return true;
+      case _PrimitiveDartType.bool:
+        return true;
       case _PrimitiveDartType.void_:
         return false;
       case _PrimitiveDartType.handle:
@@ -366,6 +494,7 @@
           return allowHandle;
         case _PrimitiveDartType.double:
         case _PrimitiveDartType.int:
+        case _PrimitiveDartType.bool:
           return true;
         case _PrimitiveDartType.none:
           // These are the cases below.
@@ -404,12 +533,13 @@
     return false;
   }
 
-  // Get the const bool value of `expr` if it exists.
-  // Return null if it isn't a const bool.
+  /// Get the const bool value of [expr] if it exists.
+  /// Return null if it isn't a const bool.
   bool? _maybeGetBoolConstValue(Expression expr) {
     if (expr is BooleanLiteral) {
       return expr.value;
-    } else if (expr is Identifier) {
+    }
+    if (expr is Identifier) {
       final staticElm = expr.staticElement;
       if (staticElm is ConstVariableElement) {
         return staticElm.computeConstantValue()?.toBoolValue();
@@ -435,6 +565,9 @@
         if (_primitiveDoubleNativeTypes.contains(name)) {
           return _PrimitiveDartType.double;
         }
+        if (name == _primitiveBoolNativeType) {
+          return _PrimitiveDartType.bool;
+        }
         if (name == 'Void') {
           return _PrimitiveDartType.void_;
         }
@@ -455,6 +588,8 @@
         return _PrimitiveDartType.int;
       } else if (_primitiveDoubleNativeTypes.contains(name)) {
         return _PrimitiveDartType.double;
+      } else if (_primitiveBoolNativeType == name) {
+        return _PrimitiveDartType.bool;
       }
     }
     return _PrimitiveDartType.none;
@@ -526,9 +661,16 @@
     var targetType = target.staticType;
     if (targetType is InterfaceType && targetType.isPointer) {
       final DartType T = targetType.typeArguments[0];
-      if (!T.isNativeFunction ||
-          !_isValidFfiNativeFunctionType(
-              (T as InterfaceType).typeArguments.single)) {
+      if (!T.isNativeFunction) {
+        return;
+      }
+      final DartType pointerTypeArg = (T as InterfaceType).typeArguments.single;
+      if (pointerTypeArg is TypeParameterType) {
+        _errorReporter.reportErrorForNode(
+            FfiCode.NON_CONSTANT_TYPE_ARGUMENT, target, ['asFunction']);
+        return;
+      }
+      if (!_isValidFfiNativeFunctionType(pointerTypeArg)) {
         final AstNode errorNode =
             typeArguments != null ? typeArguments[0] : node;
         _errorReporter.reportErrorForNode(
@@ -606,6 +748,8 @@
       return dartType.isDartCoreInt;
     } else if (nativeReturnType == _PrimitiveDartType.double) {
       return dartType.isDartCoreDouble;
+    } else if (nativeReturnType == _PrimitiveDartType.bool) {
+      return dartType.isDartCoreBool;
     } else if (nativeReturnType == _PrimitiveDartType.void_) {
       return dartType.isVoid;
     } else if (nativeReturnType == _PrimitiveDartType.handle) {
@@ -639,27 +783,26 @@
 
   void _validateFfiLeafCallUsesNoHandles(
       NodeList<Expression> args, DartType nativeType, AstNode errorNode) {
-    if (args.isNotEmpty) {
-      for (final arg in args) {
-        if (arg is NamedExpression) {
-          if (arg.element?.name == _isLeafParamName) {
-            // Handles are ok for regular (non-leaf) calls. Check `isLeaf:true`.
-            final bool? isLeaf = _maybeGetBoolConstValue(arg.expression);
-            if (isLeaf != null && isLeaf) {
-              if (nativeType is FunctionType) {
-                if (_primitiveNativeType(nativeType.returnType) ==
-                    _PrimitiveDartType.handle) {
-                  _errorReporter.reportErrorForNode(
-                      FfiCode.LEAF_CALL_MUST_NOT_RETURN_HANDLE, errorNode);
-                }
-                for (final param in nativeType.normalParameterTypes) {
-                  if (_primitiveNativeType(param) ==
-                      _PrimitiveDartType.handle) {
-                    _errorReporter.reportErrorForNode(
-                        FfiCode.LEAF_CALL_MUST_NOT_TAKE_HANDLE, errorNode);
-                  }
-                }
-              }
+    if (args.isEmpty) {
+      return;
+    }
+    for (final arg in args) {
+      if (arg is! NamedExpression || arg.element?.name != _isLeafParamName) {
+        continue;
+      }
+      // Handles are ok for regular (non-leaf) calls. Check `isLeaf:true`.
+      final bool? isLeaf = _maybeGetBoolConstValue(arg.expression);
+      if (isLeaf != null && isLeaf) {
+        if (nativeType is FunctionType) {
+          if (_primitiveNativeType(nativeType.returnType) ==
+              _PrimitiveDartType.handle) {
+            _errorReporter.reportErrorForNode(
+                FfiCode.LEAF_CALL_MUST_NOT_RETURN_HANDLE, errorNode);
+          }
+          for (final param in nativeType.normalParameterTypes) {
+            if (_primitiveNativeType(param) == _PrimitiveDartType.handle) {
+              _errorReporter.reportErrorForNode(
+                  FfiCode.LEAF_CALL_MUST_NOT_TAKE_HANDLE, errorNode);
             }
           }
         }
@@ -696,6 +839,8 @@
         _validateAnnotations(fieldType, annotations, _PrimitiveDartType.int);
       } else if (declaredType.isDartCoreDouble) {
         _validateAnnotations(fieldType, annotations, _PrimitiveDartType.double);
+      } else if (declaredType.isDartCoreBool) {
+        _validateAnnotations(fieldType, annotations, _PrimitiveDartType.bool);
       } else if (declaredType.isPointer) {
         _validateNoAnnotations(annotations);
       } else if (declaredType.isArray) {
@@ -722,10 +867,10 @@
       } else if (declaredType.isCompoundSubtype) {
         final clazz = (declaredType as InterfaceType).element;
         if (clazz.isEmptyStruct) {
-          // TODO(brianwilkerson) There are no tests for this branch. Ensure
-          //  that the diagnostic is correct and add tests.
-          _errorReporter
-              .reportErrorForNode(FfiCode.EMPTY_STRUCT, node, [clazz.name]);
+          _errorReporter.reportErrorForNode(FfiCode.EMPTY_STRUCT, node, [
+            clazz.name,
+            clazz.supertype!.getDisplayString(withNullability: false)
+          ]);
         }
         _validatePackingNesting(compound!.declaredElement!, clazz,
             errorNode: fieldType);
@@ -773,7 +918,7 @@
     DartType FT = f.typeOrThrow;
     if (!_validateCompatibleFunctionTypes(FT, T)) {
       _errorReporter.reportErrorForNode(
-          FfiCode.MUST_BE_A_SUBTYPE, f, [f.staticType, T, 'fromFunction']);
+          FfiCode.MUST_BE_A_SUBTYPE, f, [FT, T, 'fromFunction']);
       return;
     }
 
@@ -792,23 +937,27 @@
           FfiCode.MISSING_EXCEPTION_VALUE, node.methodName);
     } else {
       Expression e = node.argumentList.arguments[1];
-      // TODO(brianwilkerson) Validate that `e` is a constant expression.
-      if (!_validateCompatibleNativeType(e.typeOrThrow, R, true)) {
+      var eType = e.typeOrThrow;
+      if (!_validateCompatibleNativeType(eType, R, true)) {
         _errorReporter.reportErrorForNode(
-            FfiCode.MUST_BE_A_SUBTYPE, e, [e.staticType, R, 'fromFunction']);
+            FfiCode.MUST_BE_A_SUBTYPE, e, [eType, R, 'fromFunction']);
+      }
+      if (!_isConst(e)) {
+        _errorReporter.reportErrorForNode(
+            FfiCode.ARGUMENT_MUST_BE_A_CONSTANT, e, ['exceptionalReturn']);
       }
     }
   }
 
+  /// Ensure `isLeaf` is const as we need the value at compile time to know
+  /// which trampoline to generate.
   void _validateIsLeafIsConst(MethodInvocation node) {
-    // Ensure `isLeaf` is const as we need the value at compile time to know
-    // which trampoline to generate.
     final args = node.argumentList.arguments;
     if (args.isNotEmpty) {
       for (final arg in args) {
         if (arg is NamedExpression) {
           if (arg.element?.name == _isLeafParamName) {
-            if (_maybeGetBoolConstValue(arg.expression) == null) {
+            if (!_isConst(arg.expression)) {
               _errorReporter.reportErrorForNode(
                   FfiCode.ARGUMENT_MUST_BE_A_CONSTANT,
                   arg.expression,
@@ -1028,6 +1177,7 @@
 enum _PrimitiveDartType {
   double,
   int,
+  bool,
   void_,
   handle,
   none,
@@ -1203,6 +1353,8 @@
         return false;
       } else if (declaredType.isDartCoreDouble) {
         return false;
+      } else if (declaredType.isDartCoreBool) {
+        return false;
       } else if (declaredType.isPointer) {
         return false;
       } else if (declaredType.isCompoundSubtype) {
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index d1b9366..9ffdfb3 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -56,7 +56,7 @@
 
   set enableSetLiterals(bool value) {
     // TODO(danrubel): Remove this method once the reference to this flag
-    // has been removed from dartfmt.
+    // has been removed from dart format.
   }
 
   set parseFunctionBodies(bool parseFunctionBodies) {
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 919a698..5f87d47 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -18,7 +18,9 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/dart/element/member.dart' show Member;
@@ -451,12 +453,16 @@
   /// Verify that the arguments in the given [argumentList] can be assigned to
   /// their corresponding parameters.
   ///
-  /// This method corresponds to
-  /// [BestPracticesVerifier.checkForArgumentTypesNotAssignableInList].
-  ///
-  /// See [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE].
+  /// See [CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE].
   void checkForArgumentTypesNotAssignableInList(ArgumentList argumentList,
       List<WhyNotPromotedGetter> whyNotPromotedList) {
+    for (var argument in argumentList.arguments) {
+      if (argument is NamedExpression) {
+        insertImplicitCallReference(argument.expression);
+      } else {
+        insertImplicitCallReference(argument);
+      }
+    }
     var arguments = argumentList.arguments;
     for (int i = 0; i < arguments.length; i++) {
       checkForArgumentTypeNotAssignableForArgument(arguments[i],
@@ -622,6 +628,126 @@
     return null;
   }
 
+  /// If generic function instantiation should be performed on `expression`,
+  /// inserts a [FunctionReference] node which wraps [expression].
+  ///
+  /// If an [FunctionReference] is inserted, returns it; otherwise, returns
+  /// [expression].
+  ExpressionImpl insertGenericFunctionInstantiation(Expression expression) {
+    expression as ExpressionImpl;
+    if (!isConstructorTearoffsEnabled) {
+      // Temporarily, only create [ImplicitCallReference] nodes under the
+      // 'constructor-tearoffs' feature.
+      // TODO(srawlins): When we are ready to make a breaking change release to
+      // the analyzer package, remove this exception.
+      return expression;
+    }
+
+    var staticType = expression.staticType;
+    var context = InferenceContext.getContext(expression);
+    if (context == null ||
+        staticType is! FunctionType ||
+        staticType.typeFormals.isEmpty) {
+      return expression;
+    }
+
+    context = typeSystem.flatten(context);
+    if (context is! FunctionType || context.typeFormals.isNotEmpty) {
+      return expression;
+    }
+
+    List<DartType> typeArgumentTypes =
+        typeSystem.inferFunctionTypeInstantiation(
+      context,
+      staticType,
+      errorReporter: errorReporter,
+      errorNode: expression,
+      // If the constructor-tearoffs feature is enabled, then so is
+      // generic-metadata.
+      genericMetadataIsEnabled: true,
+    )!;
+    if (typeArgumentTypes.isNotEmpty) {
+      staticType = staticType.instantiate(typeArgumentTypes);
+    }
+
+    var parent = expression.parent;
+    var genericFunctionInstantiation = astFactory.functionReference(
+      function: expression,
+      typeArguments: null,
+    );
+    NodeReplacer.replace(expression, genericFunctionInstantiation,
+        parent: parent);
+
+    genericFunctionInstantiation.typeArgumentTypes = typeArgumentTypes;
+    genericFunctionInstantiation.staticType = staticType;
+
+    return genericFunctionInstantiation;
+  }
+
+  /// If `expression` should be treated as `expression.call`, inserts an
+  /// [ImplicitCallReferece] node which wraps [expression].
+  ///
+  /// If an [ImplicitCallReferece] is inserted, returns it; otherwise, returns
+  /// [expression].
+  ExpressionImpl insertImplicitCallReference(Expression expression) {
+    expression as ExpressionImpl;
+    if (!isConstructorTearoffsEnabled) {
+      // Temporarily, only create [ImplicitCallReference] nodes under the
+      // 'constructor-tearoffs' feature.
+      // TODO(srawlins): When we are ready to make a breaking change release to
+      // the analyzer package, remove this exception.
+      return expression;
+    }
+
+    var parent = expression.parent;
+    if (parent is CascadeExpression && parent.target == expression) {
+      // Do not perform an "implicit tear-off conversion" here. It should only
+      // be performed on [parent]. See
+      // https://github.com/dart-lang/language/issues/1873.
+      return expression;
+    }
+    var context = InferenceContext.getContext(expression);
+    var callMethod =
+        getImplicitCallMethod(expression.typeOrThrow, context, expression);
+    if (callMethod == null || context == null) {
+      return expression;
+    }
+
+    // `expression` is to be treated as `expression.call`.
+    context = typeSystem.flatten(context);
+    var callMethodType = callMethod.type;
+    List<DartType> typeArgumentTypes;
+    if (isConstructorTearoffsEnabled &&
+        callMethodType.typeFormals.isNotEmpty &&
+        context is FunctionType) {
+      typeArgumentTypes = typeSystem.inferFunctionTypeInstantiation(
+        context,
+        callMethodType,
+        errorReporter: errorReporter,
+        errorNode: expression,
+        // If the constructor-tearoffs feature is enabled, then so is
+        // generic-metadata.
+        genericMetadataIsEnabled: true,
+      )!;
+      if (typeArgumentTypes.isNotEmpty) {
+        callMethodType = callMethodType.instantiate(typeArgumentTypes);
+      }
+    } else {
+      typeArgumentTypes = [];
+    }
+    var callReference = astFactory.implicitCallReference(
+      expression: expression,
+      staticElement: callMethod,
+      typeArguments: null,
+      typeArgumentTypes: typeArgumentTypes,
+    );
+    NodeReplacer.replace(expression, callReference, parent: parent);
+
+    callReference.staticType = callMethodType;
+
+    return callReference;
+  }
+
   /// If we reached a null-shorting termination, and the [node] has null
   /// shorting, make the type of the [node] nullable.
   void nullShortingTermination(ExpressionImpl node,
@@ -991,6 +1117,7 @@
   void visitAsExpression(AsExpression node) {
     super.visitAsExpression(node);
     flowAnalysis.asExpression(node);
+    insertGenericFunctionInstantiation(node);
   }
 
   @override
@@ -1026,6 +1153,7 @@
   @override
   void visitAssignmentExpression(AssignmentExpression node) {
     _assignmentExpressionResolver.resolve(node as AssignmentExpressionImpl);
+    insertGenericFunctionInstantiation(node);
   }
 
   @override
@@ -1036,11 +1164,13 @@
       InferenceContext.setType(node.expression, futureUnion);
     }
     super.visitAwaitExpression(node);
+    insertGenericFunctionInstantiation(node);
   }
 
   @override
   void visitBinaryExpression(BinaryExpression node) {
     _binaryExpressionResolver.resolve(node as BinaryExpressionImpl);
+    insertGenericFunctionInstantiation(node);
   }
 
   @override
@@ -1155,21 +1285,20 @@
     boolExpressionVerifier.checkForNonBoolCondition(condition,
         whyNotPromoted: whyNotPromoted);
 
-    Expression thenExpression = node.thenExpression;
-    InferenceContext.setTypeFromNode(thenExpression, node);
+    InferenceContext.setTypeFromNode(node.thenExpression, node);
 
     if (flow != null) {
       flow.conditional_thenBegin(condition, node);
-      checkUnreachableNode(thenExpression);
+      checkUnreachableNode(node.thenExpression);
     }
-    thenExpression.accept(this);
-    nullSafetyDeadCodeVerifier.flowEnd(thenExpression);
+    node.thenExpression.accept(this);
+    nullSafetyDeadCodeVerifier.flowEnd(node.thenExpression);
 
     Expression elseExpression = node.elseExpression;
     InferenceContext.setTypeFromNode(elseExpression, node);
 
     if (flow != null) {
-      flow.conditional_elseBegin(thenExpression);
+      flow.conditional_elseBegin(node.thenExpression);
       checkUnreachableNode(elseExpression);
       elseExpression.accept(this);
       flow.conditional_end(node, elseExpression);
@@ -1177,6 +1306,7 @@
     } else {
       elseExpression.accept(this);
     }
+    elseExpression = node.elseExpression;
 
     node.accept(elementResolver);
     node.accept(typeAnalyzer);
@@ -1227,13 +1357,23 @@
     // to be visited in the context of the constructor field initializer node.
     //
     var fieldElement = enclosingClass!.getField(node.fieldName.name);
-    InferenceContext.setType(node.expression, fieldElement?.type);
-    node.expression.accept(this);
-    var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(node.expression);
+    var fieldType = fieldElement?.type;
+    var expression = node.expression;
+    InferenceContext.setType(expression, fieldType);
+    expression.accept(this);
+    expression = node.expression;
+    var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(expression);
     node.accept(elementResolver);
     node.accept(typeAnalyzer);
-    var enclosingConstructor = enclosingFunction as ConstructorElement;
     if (fieldElement != null) {
+      if (fieldType != null && expression.staticType != null) {
+        var callReference = insertImplicitCallReference(expression);
+        if (expression != callReference) {
+          checkForInvalidAssignment(node.fieldName, callReference,
+              whyNotPromoted: whyNotPromoted);
+        }
+      }
+      var enclosingConstructor = enclosingFunction as ConstructorElement;
       checkForFieldInitializerNotAssignable(node, fieldElement,
           isConstConstructor: enclosingConstructor.isConst,
           whyNotPromoted: whyNotPromoted);
@@ -1278,11 +1418,10 @@
   void visitDoStatement(DoStatement node) {
     checkUnreachableNode(node);
 
-    var body = node.body;
     var condition = node.condition;
 
     flowAnalysis.flow?.doStatement_bodyBegin(node);
-    body.accept(this);
+    node.body.accept(this);
 
     flowAnalysis.flow?.doStatement_conditionBegin();
     InferenceContext.setType(condition, typeProvider.boolType);
@@ -1340,6 +1479,7 @@
       _thisAccessTracker.enterFunctionBody(node);
 
       super.visitExpressionFunctionBody(node);
+      insertImplicitCallReference(node.expression);
 
       flowAnalysis.flow?.handleExit();
 
@@ -1461,6 +1601,7 @@
     _enclosingFunction = node.declaredElement;
 
     _functionExpressionResolver.resolve(node);
+    insertGenericFunctionInstantiation(node);
 
     _enclosingFunction = outerFunction;
   }
@@ -1472,6 +1613,7 @@
     _functionExpressionInvocationResolver.resolve(
         node as FunctionExpressionInvocationImpl, whyNotPromotedList);
     nullShortingTermination(node);
+    insertGenericFunctionInstantiation(node);
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
   }
@@ -1520,10 +1662,9 @@
     boolExpressionVerifier.checkForNonBoolCondition(condition,
         whyNotPromoted: whyNotPromoted);
 
-    CollectionElement thenElement = node.thenElement;
     flowAnalysis.flow?.ifStatement_thenBegin(condition, node);
-    thenElement.accept(this);
-    nullSafetyDeadCodeVerifier.flowEnd(thenElement);
+    node.thenElement.accept(this);
+    nullSafetyDeadCodeVerifier.flowEnd(node.thenElement);
 
     var elseElement = node.elseElement;
     if (elseElement != null) {
@@ -1553,10 +1694,9 @@
     boolExpressionVerifier.checkForNonBoolCondition(condition,
         whyNotPromoted: whyNotPromoted);
 
-    Statement thenStatement = node.thenStatement;
     flowAnalysis.flow?.ifStatement_thenBegin(condition, node);
-    thenStatement.accept(this);
-    nullSafetyDeadCodeVerifier.flowEnd(thenStatement);
+    node.thenStatement.accept(this);
+    nullSafetyDeadCodeVerifier.flowEnd(node.thenStatement);
 
     var elseStatement = node.elseStatement;
     if (elseStatement != null) {
@@ -1604,6 +1744,7 @@
       type = DynamicTypeImpl.instance;
     }
     inferenceHelper.recordStaticType(node, type);
+    insertGenericFunctionInstantiation(node);
 
     nullShortingTermination(node);
   }
@@ -1681,6 +1822,7 @@
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     var target = node.target;
     target?.accept(this);
+    target = node.target;
 
     if (_migratableAstInfoProvider.isMethodInvocationNullAware(node)) {
       var flow = flowAnalysis.flow;
@@ -1708,6 +1850,7 @@
     } else {
       nullShortingTermination(node);
     }
+    insertGenericFunctionInstantiation(node);
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
   }
@@ -1771,16 +1914,19 @@
   @override
   void visitPostfixExpression(PostfixExpression node) {
     _postfixExpressionResolver.resolve(node as PostfixExpressionImpl);
+    insertGenericFunctionInstantiation(node);
   }
 
   @override
   void visitPrefixedIdentifier(covariant PrefixedIdentifierImpl node) {
     _prefixedIdentifierResolver.resolve(node);
+    insertGenericFunctionInstantiation(node);
   }
 
   @override
   void visitPrefixExpression(PrefixExpression node) {
     _prefixExpressionResolver.resolve(node as PrefixExpressionImpl);
+    insertGenericFunctionInstantiation(node);
   }
 
   @override
@@ -1810,10 +1956,19 @@
       type = DynamicTypeImpl.instance;
     }
 
-    type = inferenceHelper.inferTearOff(node, propertyName, type);
+    if (!isConstructorTearoffsEnabled) {
+      // Only perform a generic function instantiation on a [PrefixedIdentifier]
+      // in pre-constructor-tearoffs code. In constructor-tearoffs-enabled code,
+      // generic function instantiation is performed at assignability check
+      // sites.
+      // TODO(srawlins): Switch all resolution to use the latter method, in a
+      // breaking change release.
+      type = inferenceHelper.inferTearOff(node, propertyName, type);
+    }
 
     inferenceHelper.recordStaticType(propertyName, type);
     inferenceHelper.recordStaticType(node, type);
+    insertGenericFunctionInstantiation(node);
 
     nullShortingTermination(node);
   }
@@ -1853,6 +2008,11 @@
 
     inferenceContext.bodyContext?.addReturnExpression(node.expression);
     flowAnalysis.flow?.handleExit();
+
+    var expression = node.expression;
+    if (expression != null) {
+      insertImplicitCallReference(expression);
+    }
   }
 
   @override
@@ -1867,6 +2027,7 @@
   @override
   void visitSimpleIdentifier(covariant SimpleIdentifierImpl node) {
     _simpleIdentifierResolver.resolve(node);
+    insertGenericFunctionInstantiation(node);
   }
 
   @override
@@ -2057,9 +2218,8 @@
     boolExpressionVerifier.checkForNonBoolCondition(node.condition,
         whyNotPromoted: whyNotPromoted);
 
-    Statement body = node.body;
     flowAnalysis.flow?.whileStatement_bodyBegin(node, condition);
-    body.accept(this);
+    node.body.accept(this);
     flowAnalysis.flow?.whileStatement_end();
     nullSafetyDeadCodeVerifier.flowEnd(node.body);
     // TODO(brianwilkerson) If the loop can only be exited because the condition
@@ -3251,7 +3411,7 @@
   _WhyNotPromotedVisitor(this.source, this._errorEntity, this._dataForTesting);
 
   @override
-  DiagnosticMessage? visitDemoteViaExplicitWrite(
+  DiagnosticMessage visitDemoteViaExplicitWrite(
       DemoteViaExplicitWrite<PromotableElement> reason) {
     var node = reason.node as AstNode;
     if (node is ForEachPartsWithIdentifier) {
@@ -3261,7 +3421,6 @@
       _dataForTesting!.nonPromotionReasonTargets[node] = reason.shortName;
     }
     var variableName = reason.variable.name;
-    if (variableName == null) return null;
     return _contextMessageForWrite(variableName, node, reason);
   }
 
diff --git a/pkg/analyzer/lib/src/generated/source.dart b/pkg/analyzer/lib/src/generated/source.dart
index 2203d3d..f134a33 100644
--- a/pkg/analyzer/lib/src/generated/source.dart
+++ b/pkg/analyzer/lib/src/generated/source.dart
@@ -48,10 +48,6 @@
   /// The name of the `dart` scheme.
   static String DART_SCHEME = "dart";
 
-  /// The prefix of a URI using the dart-ext scheme to reference a native code
-  /// library.
-  static const String _DART_EXT_SCHEME = "dart-ext:";
-
   /// The Dart SDK against which URI's are to be resolved.
   final DartSdk _sdk;
 
@@ -78,13 +74,6 @@
     return dartSource?.uri;
   }
 
-  /// Return `true` if the given URI is a `dart-ext:` URI.
-  ///
-  /// @param uriContent the textual representation of the URI being tested
-  /// @return `true` if the given URI is a `dart-ext:` URI
-  static bool isDartExtUri(String? uriContent) =>
-      uriContent != null && uriContent.startsWith(_DART_EXT_SCHEME);
-
   /// Return `true` if the given URI is a `dart:` URI.
   ///
   /// @param uri the URI being tested
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index 6077d91..d722db43 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -1427,7 +1427,7 @@
   ///
   /// <b>Note:</b> This method does not correctly handle class elements that
   /// have type parameters.
-  static TypeNameImpl typeName(ClassElement element,
+  static NamedTypeImpl typeName(ClassElement element,
       [List<TypeAnnotation>? arguments]) {
     var name = identifier3(element.name);
     name.staticElement = element;
@@ -1442,14 +1442,14 @@
     return typeName;
   }
 
-  static TypeNameImpl typeName3(Identifier name,
+  static NamedTypeImpl typeName3(Identifier name,
           [List<TypeAnnotation>? arguments]) =>
       astFactory.namedType(
         name: name,
         typeArguments: typeArgumentList(arguments),
       );
 
-  static TypeNameImpl typeName4(String name,
+  static NamedTypeImpl typeName4(String name,
           [List<TypeAnnotation>? arguments, bool question = false]) =>
       astFactory.namedType(
         name: identifier3(name),
diff --git a/pkg/analyzer/lib/src/lint/analysis.dart b/pkg/analyzer/lib/src/lint/analysis.dart
index b43bd0c..2e6974e 100644
--- a/pkg/analyzer/lib/src/lint/analysis.dart
+++ b/pkg/analyzer/lib/src/lint/analysis.dart
@@ -75,6 +75,7 @@
   bool strongMode = true;
 
   /// The mock SDK (to speed up testing) or `null` to use the actual SDK.
+  @Deprecated('Use createMockSdk() and set dartSdkPath')
   DartSdk? mockSdk;
 
   /// Return `true` is the parser is able to parse asserts in the initializer
diff --git a/pkg/analyzer/lib/src/lint/linter_visitor.dart b/pkg/analyzer/lib/src/lint/linter_visitor.dart
index 7fe8635..692f0c7 100644
--- a/pkg/analyzer/lib/src/lint/linter_visitor.dart
+++ b/pkg/analyzer/lib/src/lint/linter_visitor.dart
@@ -172,6 +172,12 @@
   }
 
   @override
+  void visitConstructorReference(ConstructorReference node) {
+    _runSubscriptions(node, registry._forConstructorReference);
+    super.visitConstructorReference(node);
+  }
+
+  @override
   void visitContinueStatement(ContinueStatement node) {
     _runSubscriptions(node, registry._forContinueStatement);
     super.visitContinueStatement(node);
@@ -795,6 +801,7 @@
   final List<_Subscription<ConstructorFieldInitializer>>
       _forConstructorFieldInitializer = [];
   final List<_Subscription<ConstructorName>> _forConstructorName = [];
+  final List<_Subscription<ConstructorReference>> _forConstructorReference = [];
   final List<_Subscription<ContinueStatement>> _forContinueStatement = [];
   final List<_Subscription<DeclaredIdentifier>> _forDeclaredIdentifier = [];
   final List<_Subscription<DefaultFormalParameter>> _forDefaultFormalParameter =
@@ -1020,6 +1027,11 @@
     _forConstructorName.add(_Subscription(linter, visitor, _getTimer(linter)));
   }
 
+  void addConstructorReference(LintRule linter, AstVisitor visitor) {
+    _forConstructorReference
+        .add(_Subscription(linter, visitor, _getTimer(linter)));
+  }
+
   void addContinueStatement(LintRule linter, AstVisitor visitor) {
     _forContinueStatement
         .add(_Subscription(linter, visitor, _getTimer(linter)));
diff --git a/pkg/analyzer/lib/src/lint/options_rule_validator.dart b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
index 6f326b1..f4d536b 100644
--- a/pkg/analyzer/lib/src/lint/options_rule_validator.dart
+++ b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
@@ -29,7 +29,7 @@
 const AnalysisOptionsHintCode DUPLICATE_RULE_HINT = AnalysisOptionsHintCode(
     'DUPLICATE_RULE',
     "The rule {0} is already specified and doesn't need to be specified again.",
-    correction: "Try removing all but one specification of the rule.");
+    correctionMessage: "Try removing all but one specification of the rule.");
 
 /// An error code indicating an incompatible rule.
 ///
@@ -39,7 +39,7 @@
 const AnalysisOptionsWarningCode INCOMPATIBLE_LINT_WARNING =
     AnalysisOptionsWarningCode('INCOMPATIBLE_LINT_WARNING',
         "The rule '{0}' is incompatible with the rule '{1}'",
-        correction: "Try removing one of the incompatible rules.");
+        correctionMessage: "Try removing one of the incompatible rules.");
 
 /// An error code indicating an undefined lint rule.
 ///
diff --git a/pkg/analyzer/lib/src/manifest/manifest_validator.dart b/pkg/analyzer/lib/src/manifest/manifest_validator.dart
index a7c67f3..ff88bff 100644
--- a/pkg/analyzer/lib/src/manifest/manifest_validator.dart
+++ b/pkg/analyzer/lib/src/manifest/manifest_validator.dart
@@ -450,7 +450,7 @@
   /// Report an error for the given node.
   void _reportErrorForNode(ErrorReporter reporter, _XmlElement node,
       String? key, ErrorCode errorCode,
-      [List<Object?>? arguments]) {
+      [List<Object>? arguments]) {
     var span =
         key == null ? node.sourceSpan! : node.attributes[key]!.sourceSpan;
     reporter.reportErrorForOffset(
@@ -482,19 +482,29 @@
         .contains(element.attributes[ANDROID_NAME]?.value));
     for (var element in unsupported) {
       if (!element.attributes.containsKey(ANDROID_REQUIRED)) {
+        // Since `unsupported` is the list of elements for which
+        // `elements.attributes[ANDROID_NAME]?.value` is contained in
+        // [UNSUPPORTED_HARDWARE_FEATURES], which is a list of non-nullable
+        // strings, it follows that `element.attributes[ANDROID_NAME]` is
+        // non-`null`.
         _reportErrorForNode(
             reporter,
             element,
             ANDROID_NAME,
             ManifestWarningCode.UNSUPPORTED_CHROME_OS_HARDWARE,
-            [element.attributes[ANDROID_NAME]?.value]);
+            [element.attributes[ANDROID_NAME]!.value]);
       } else if (element.attributes[ANDROID_REQUIRED]?.value == 'true') {
+        // Since `unsupported` is the list of elements for which
+        // `elements.attributes[ANDROID_NAME]?.value` is contained in
+        // [UNSUPPORTED_HARDWARE_FEATURES], which is a list of non-nullable
+        // strings, it follows that `element.attributes[ANDROID_NAME]` is
+        // non-`null`.
         _reportErrorForNode(
             reporter,
             element,
             ANDROID_NAME,
             ManifestWarningCode.UNSUPPORTED_CHROME_OS_FEATURE,
-            [element.attributes[ANDROID_NAME]?.value]);
+            [element.attributes[ANDROID_NAME]!.value]);
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart b/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
index 73c4915..d988a94 100644
--- a/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
+++ b/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
@@ -22,7 +22,7 @@
       ManifestWarningCode(
     'CAMERA_PERMISSIONS_INCOMPATIBLE',
     "Camera permissions make app incompatible for Chrome OS, consider adding optional features \"android.hardware.camera\" and \"android.hardware.camera.autofocus\".",
-    correction:
+    correctionMessage:
         "Try adding `<uses-feature android:name=\"android.hardware.camera\"  android:required=\"false\">` `<uses-feature android:name=\"android.hardware.camera.autofocus\"  android:required=\"false\">`.",
   );
 
@@ -32,7 +32,7 @@
   static const ManifestWarningCode NON_RESIZABLE_ACTIVITY = ManifestWarningCode(
     'NON_RESIZABLE_ACTIVITY',
     "The `<activity>` element should be allowed to be resized to allow users to take advantage of the multi-window environment on Chrome OS",
-    correction:
+    correctionMessage:
         "Consider declaring the corresponding activity element with `resizableActivity=\"true\"` attribute.",
   );
 
@@ -43,7 +43,7 @@
   static const ManifestWarningCode NO_TOUCHSCREEN_FEATURE = ManifestWarningCode(
     'NO_TOUCHSCREEN_FEATURE',
     "The default \"android.hardware.touchscreen\" needs to be optional for Chrome OS. ",
-    correction:
+    correctionMessage:
         "Consider adding <uses-feature android:name=\"android.hardware.touchscreen\" android:required=\"false\" /> to the manifest.",
   );
 
@@ -55,7 +55,7 @@
       ManifestWarningCode(
     'PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE',
     "Permission makes app incompatible for Chrome OS, consider adding optional {0} feature tag, ",
-    correction:
+    correctionMessage:
         " Try adding `<uses-feature android:name=\"{0}\"  android:required=\"false\">`.",
   );
 
@@ -66,7 +66,7 @@
       ManifestWarningCode(
     'SETTING_ORIENTATION_ON_ACTIVITY',
     "The `<activity>` element should not be locked to any orientation so that users can take advantage of the multi-window environments and larger screens on Chrome OS",
-    correction:
+    correctionMessage:
         "Consider declaring the corresponding activity element with `screenOrientation=\"unspecified\"` or `\"fullSensor\"` attribute.",
   );
 
@@ -77,7 +77,7 @@
       ManifestWarningCode(
     'UNSUPPORTED_CHROME_OS_FEATURE',
     "The feature {0} is not supported on Chrome OS, consider making it optional.",
-    correction:
+    correctionMessage:
         "Try changing to `android:required=\"false\"` for this feature.",
   );
 
@@ -89,23 +89,24 @@
       ManifestWarningCode(
     'UNSUPPORTED_CHROME_OS_HARDWARE',
     "The feature {0} is not supported on Chrome OS, consider making it optional.",
-    correction: "Try adding `android:required=\"false\"` for this feature.",
+    correctionMessage:
+        "Try adding `android:required=\"false\"` for this feature.",
   );
 
   /// Initialize a newly created error code to have the given [name].
   const ManifestWarningCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'ManifestWarningCode.${uniqueName ?? name}',
         );
 
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart b/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
index fe4471c..689c4ba 100644
--- a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
+++ b/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
@@ -47,7 +47,7 @@
       PubspecWarningCode(
     'ASSET_DIRECTORY_DOES_NOT_EXIST',
     "The asset directory '{0}' doesn't exist.",
-    correction:
+    correctionMessage:
         "Try creating the directory or fixing the path to the directory.",
     hasPublishedDocs: true,
   );
@@ -83,7 +83,7 @@
   static const PubspecWarningCode ASSET_DOES_NOT_EXIST = PubspecWarningCode(
     'ASSET_DOES_NOT_EXIST',
     "The asset file '{0}' doesn't exist.",
-    correction: "Try creating the file or fixing the path to the file.",
+    correctionMessage: "Try creating the file or fixing the path to the file.",
     hasPublishedDocs: true,
   );
 
@@ -121,7 +121,8 @@
   static const PubspecWarningCode ASSET_FIELD_NOT_LIST = PubspecWarningCode(
     'ASSET_FIELD_NOT_LIST',
     "The value of the 'asset' field is expected to be a list of relative file paths.",
-    correction: "Try converting the value to be a list of relative file paths.",
+    correctionMessage:
+        "Try converting the value to be a list of relative file paths.",
     hasPublishedDocs: true,
   );
 
@@ -161,7 +162,7 @@
   static const PubspecWarningCode ASSET_NOT_STRING = PubspecWarningCode(
     'ASSET_NOT_STRING',
     "Assets are required to be file paths (strings).",
-    correction: "Try converting the value to be a string.",
+    correctionMessage: "Try converting the value to be a string.",
     hasPublishedDocs: true,
   );
 
@@ -190,7 +191,7 @@
   // Use a map as the value of the `dependencies` key:
   //
   // ```yaml
-  // %uri='pubspec.yaml'
+  // %uri="pubspec.yaml"
   // name: example
   // dependencies:
   //   meta: ^1.0.2
@@ -199,7 +200,7 @@
       PubspecWarningCode(
     'DEPENDENCIES_FIELD_NOT_MAP',
     "The value of the '{0}' field is expected to be a map.",
-    correction: "Try converting the value to be a map.",
+    correctionMessage: "Try converting the value to be a map.",
     hasPublishedDocs: true,
   );
 
@@ -234,7 +235,7 @@
   static const PubspecWarningCode DEPRECATED_FIELD = PubspecWarningCode(
     'DEPRECATED_FIELD',
     "The '{0}' field is no longer used and can be removed.",
-    correction: "Try removing the field.",
+    correctionMessage: "Try removing the field.",
     hasPublishedDocs: true,
   );
 
@@ -279,7 +280,7 @@
   static const PubspecWarningCode FLUTTER_FIELD_NOT_MAP = PubspecWarningCode(
     'FLUTTER_FIELD_NOT_MAP',
     "The value of the 'flutter' field is expected to be a map.",
-    correction: "Try converting the value to be a map.",
+    correctionMessage: "Try converting the value to be a map.",
     hasPublishedDocs: true,
   );
 
@@ -335,7 +336,7 @@
   static const PubspecWarningCode INVALID_DEPENDENCY = PubspecWarningCode(
     'INVALID_DEPENDENCY',
     "Publishable packages can't have '{0}' dependencies.",
-    correction:
+    correctionMessage:
         "Try adding a 'publish_to: none' entry to mark the package as not for publishing or remove the {0} dependency.",
     hasPublishedDocs: true,
   );
@@ -372,7 +373,7 @@
   static const PubspecWarningCode MISSING_NAME = PubspecWarningCode(
     'MISSING_NAME',
     "The 'name' field is required but missing.",
-    correction: "Try adding a field named 'name'.",
+    correctionMessage: "Try adding a field named 'name'.",
     hasPublishedDocs: true,
   );
 
@@ -406,7 +407,7 @@
   static const PubspecWarningCode NAME_NOT_STRING = PubspecWarningCode(
     'NAME_NOT_STRING',
     "The value of the 'name' field is required to be a string.",
-    correction: "Try converting the value to be a string.",
+    correctionMessage: "Try converting the value to be a string.",
     hasPublishedDocs: true,
   );
 
@@ -441,7 +442,8 @@
   static const PubspecWarningCode PATH_DOES_NOT_EXIST = PubspecWarningCode(
     'PATH_DOES_NOT_EXIST',
     "The path '{0}' doesn't exist.",
-    correction: "Try creating the referenced path or using a path that exists.",
+    correctionMessage:
+        "Try creating the referenced path or using a path that exists.",
     hasPublishedDocs: true,
   );
 
@@ -473,7 +475,7 @@
   static const PubspecWarningCode PATH_NOT_POSIX = PubspecWarningCode(
     'PATH_NOT_POSIX',
     "The path '{0}' isn't a POSIX-style path.",
-    correction: "Try converting the value to a POSIX-style path.",
+    correctionMessage: "Try converting the value to a POSIX-style path.",
     hasPublishedDocs: true,
   );
 
@@ -515,7 +517,7 @@
       PubspecWarningCode(
     'PATH_PUBSPEC_DOES_NOT_EXIST',
     "The directory '{0}' doesn't contain a pubspec.",
-    correction:
+    correctionMessage:
         "Try creating a pubspec in the referenced directory or using a path that has a pubspec.",
     hasPublishedDocs: true,
   );
@@ -537,7 +539,7 @@
   // listed under both `dependencies` and `dev_dependencies`:
   //
   // ```yaml
-  // %uri='pubspec.yaml'
+  // %uri="pubspec.yaml"
   // name: example
   // dependencies:
   //   meta: ^1.0.2
@@ -551,7 +553,7 @@
   // if that's the only package listed there):
   //
   // ```yaml
-  // %uri='pubspec.yaml'
+  // %uri="pubspec.yaml"
   // name: example
   // dependencies:
   //   meta: ^1.0.2
@@ -560,24 +562,24 @@
       PubspecWarningCode(
     'UNNECESSARY_DEV_DEPENDENCY',
     "The dev dependency on {0} is unnecessary because there is also a normal dependency on that package.",
-    correction: "Try removing the dev dependency.",
+    correctionMessage: "Try removing the dev dependency.",
     hasPublishedDocs: true,
   );
 
   /// Initialize a newly created error code to have the given [name].
   const PubspecWarningCode(
     String name,
-    String message, {
-    String? correction,
+    String problemMessage, {
+    String? correctionMessage,
     bool hasPublishedDocs = false,
     bool isUnresolvedIdentifier = false,
     String? uniqueName,
   }) : super(
-          correction: correction,
+          correctionMessage: correctionMessage,
           hasPublishedDocs: hasPublishedDocs,
           isUnresolvedIdentifier: isUnresolvedIdentifier,
-          message: message,
           name: name,
+          problemMessage: problemMessage,
           uniqueName: 'PubspecWarningCode.${uniqueName ?? name}',
         );
 
diff --git a/pkg/analyzer/lib/src/summary/api_signature.dart b/pkg/analyzer/lib/src/summary/api_signature.dart
index 3b60046..f16423a 100644
--- a/pkg/analyzer/lib/src/summary/api_signature.dart
+++ b/pkg/analyzer/lib/src/summary/api_signature.dart
@@ -108,13 +108,15 @@
 
   /// For testing only: retrieve the internal representation of the data that
   /// has been collected.
-  List<int> getBytes_forDebug() {
-    return Uint8List.view(_data.buffer, 0, _offset).toList();
+  Uint8List getBytes_forDebug() {
+    return Uint8List.view(_data.buffer, 0, _offset);
   }
 
   /// Return the bytes of the MD5 hash of the data collected so far.
-  List<int> toByteList() {
-    return md5.convert(Uint8List.view(_data.buffer, 0, _offset)).bytes;
+  Uint8List toByteList() {
+    var data = _data.buffer.asUint8List(0, _offset);
+    var bytes = md5.convert(data).bytes;
+    return bytes is Uint8List ? bytes : Uint8List.fromList(bytes);
   }
 
   /// Return a hex-encoded MD5 signature of the data collected so far.
@@ -125,7 +127,7 @@
   /// Return the MD5 hash of the data collected so far as [Uint32List].
   Uint32List toUint32List() {
     var bytes = toByteList();
-    return Uint8List.fromList(bytes).buffer.asUint32List();
+    return bytes.buffer.asUint32List();
   }
 
   /// Ensure that [spaceNeeded] bytes can be added to [_data] at [_offset]
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index 6db5b7f..e85a569 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -13,6 +13,7 @@
 library analyzer.src.summary.format;
 
 import 'dart:convert' as convert;
+import 'dart:typed_data' as typed_data;
 
 import 'package:analyzer/src/summary/api_signature.dart' as api_sig;
 import 'package:analyzer/src/summary/flat_buffers.dart' as fb;
@@ -137,7 +138,7 @@
     }
   }
 
-  List<int> toBuffer() {
+  typed_data.Uint8List toBuffer() {
     fb.Builder fbBuilder = fb.Builder();
     return fbBuilder.finish(finish(fbBuilder), "ADEC");
   }
@@ -438,7 +439,7 @@
     this._index?.collectApiSignature(signatureSink);
   }
 
-  List<int> toBuffer() {
+  typed_data.Uint8List toBuffer() {
     fb.Builder fbBuilder = fb.Builder();
     return fbBuilder.finish(finish(fbBuilder), "ADRU");
   }
@@ -1360,7 +1361,7 @@
     }
   }
 
-  List<int> toBuffer() {
+  typed_data.Uint8List toBuffer() {
     fb.Builder fbBuilder = fb.Builder();
     return fbBuilder.finish(finish(fbBuilder), "ADUI");
   }
@@ -1830,277 +1831,6 @@
   String toString() => convert.json.encode(toJson());
 }
 
-class AnalysisDriverUnlinkedUnitBuilder extends Object
-    with _AnalysisDriverUnlinkedUnitMixin
-    implements idl.AnalysisDriverUnlinkedUnit {
-  List<String>? _definedClassMemberNames;
-  List<String>? _definedTopLevelNames;
-  List<String>? _referencedNames;
-  List<String>? _subtypedNames;
-  UnlinkedUnit2Builder? _unit2;
-
-  @override
-  List<String> get definedClassMemberNames =>
-      _definedClassMemberNames ??= <String>[];
-
-  /// List of class member names defined by the unit.
-  set definedClassMemberNames(List<String> value) {
-    this._definedClassMemberNames = value;
-  }
-
-  @override
-  List<String> get definedTopLevelNames => _definedTopLevelNames ??= <String>[];
-
-  /// List of top-level names defined by the unit.
-  set definedTopLevelNames(List<String> value) {
-    this._definedTopLevelNames = value;
-  }
-
-  @override
-  List<String> get referencedNames => _referencedNames ??= <String>[];
-
-  /// List of external names referenced by the unit.
-  set referencedNames(List<String> value) {
-    this._referencedNames = value;
-  }
-
-  @override
-  List<String> get subtypedNames => _subtypedNames ??= <String>[];
-
-  /// List of names which are used in `extends`, `with` or `implements` clauses
-  /// in the file. Import prefixes and type arguments are not included.
-  set subtypedNames(List<String> value) {
-    this._subtypedNames = value;
-  }
-
-  @override
-  UnlinkedUnit2Builder? get unit2 => _unit2;
-
-  /// Unlinked information for the unit.
-  set unit2(UnlinkedUnit2Builder? value) {
-    this._unit2 = value;
-  }
-
-  AnalysisDriverUnlinkedUnitBuilder(
-      {List<String>? definedClassMemberNames,
-      List<String>? definedTopLevelNames,
-      List<String>? referencedNames,
-      List<String>? subtypedNames,
-      UnlinkedUnit2Builder? unit2})
-      : _definedClassMemberNames = definedClassMemberNames,
-        _definedTopLevelNames = definedTopLevelNames,
-        _referencedNames = referencedNames,
-        _subtypedNames = subtypedNames,
-        _unit2 = unit2;
-
-  /// Flush [informative] data recursively.
-  void flushInformative() {
-    _unit2?.flushInformative();
-  }
-
-  /// Accumulate non-[informative] data into [signature].
-  void collectApiSignature(api_sig.ApiSignature signatureSink) {
-    var referencedNames = this._referencedNames;
-    if (referencedNames == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(referencedNames.length);
-      for (var x in referencedNames) {
-        signatureSink.addString(x);
-      }
-    }
-    var definedTopLevelNames = this._definedTopLevelNames;
-    if (definedTopLevelNames == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(definedTopLevelNames.length);
-      for (var x in definedTopLevelNames) {
-        signatureSink.addString(x);
-      }
-    }
-    var definedClassMemberNames = this._definedClassMemberNames;
-    if (definedClassMemberNames == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(definedClassMemberNames.length);
-      for (var x in definedClassMemberNames) {
-        signatureSink.addString(x);
-      }
-    }
-    var subtypedNames = this._subtypedNames;
-    if (subtypedNames == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(subtypedNames.length);
-      for (var x in subtypedNames) {
-        signatureSink.addString(x);
-      }
-    }
-    signatureSink.addBool(this._unit2 != null);
-    this._unit2?.collectApiSignature(signatureSink);
-  }
-
-  List<int> toBuffer() {
-    fb.Builder fbBuilder = fb.Builder();
-    return fbBuilder.finish(finish(fbBuilder), "ADUU");
-  }
-
-  fb.Offset finish(fb.Builder fbBuilder) {
-    fb.Offset? offset_definedClassMemberNames;
-    fb.Offset? offset_definedTopLevelNames;
-    fb.Offset? offset_referencedNames;
-    fb.Offset? offset_subtypedNames;
-    fb.Offset? offset_unit2;
-    var definedClassMemberNames = _definedClassMemberNames;
-    if (!(definedClassMemberNames == null || definedClassMemberNames.isEmpty)) {
-      offset_definedClassMemberNames = fbBuilder.writeList(
-          definedClassMemberNames
-              .map((b) => fbBuilder.writeString(b))
-              .toList());
-    }
-    var definedTopLevelNames = _definedTopLevelNames;
-    if (!(definedTopLevelNames == null || definedTopLevelNames.isEmpty)) {
-      offset_definedTopLevelNames = fbBuilder.writeList(
-          definedTopLevelNames.map((b) => fbBuilder.writeString(b)).toList());
-    }
-    var referencedNames = _referencedNames;
-    if (!(referencedNames == null || referencedNames.isEmpty)) {
-      offset_referencedNames = fbBuilder.writeList(
-          referencedNames.map((b) => fbBuilder.writeString(b)).toList());
-    }
-    var subtypedNames = _subtypedNames;
-    if (!(subtypedNames == null || subtypedNames.isEmpty)) {
-      offset_subtypedNames = fbBuilder.writeList(
-          subtypedNames.map((b) => fbBuilder.writeString(b)).toList());
-    }
-    var unit2 = _unit2;
-    if (unit2 != null) {
-      offset_unit2 = unit2.finish(fbBuilder);
-    }
-    fbBuilder.startTable();
-    if (offset_definedClassMemberNames != null) {
-      fbBuilder.addOffset(2, offset_definedClassMemberNames);
-    }
-    if (offset_definedTopLevelNames != null) {
-      fbBuilder.addOffset(1, offset_definedTopLevelNames);
-    }
-    if (offset_referencedNames != null) {
-      fbBuilder.addOffset(0, offset_referencedNames);
-    }
-    if (offset_subtypedNames != null) {
-      fbBuilder.addOffset(3, offset_subtypedNames);
-    }
-    if (offset_unit2 != null) {
-      fbBuilder.addOffset(4, offset_unit2);
-    }
-    return fbBuilder.endTable();
-  }
-}
-
-idl.AnalysisDriverUnlinkedUnit readAnalysisDriverUnlinkedUnit(
-    List<int> buffer) {
-  fb.BufferContext rootRef = fb.BufferContext.fromBytes(buffer);
-  return const _AnalysisDriverUnlinkedUnitReader().read(rootRef, 0);
-}
-
-class _AnalysisDriverUnlinkedUnitReader
-    extends fb.TableReader<_AnalysisDriverUnlinkedUnitImpl> {
-  const _AnalysisDriverUnlinkedUnitReader();
-
-  @override
-  _AnalysisDriverUnlinkedUnitImpl createObject(
-          fb.BufferContext bc, int offset) =>
-      _AnalysisDriverUnlinkedUnitImpl(bc, offset);
-}
-
-class _AnalysisDriverUnlinkedUnitImpl extends Object
-    with _AnalysisDriverUnlinkedUnitMixin
-    implements idl.AnalysisDriverUnlinkedUnit {
-  final fb.BufferContext _bc;
-  final int _bcOffset;
-
-  _AnalysisDriverUnlinkedUnitImpl(this._bc, this._bcOffset);
-
-  List<String>? _definedClassMemberNames;
-  List<String>? _definedTopLevelNames;
-  List<String>? _referencedNames;
-  List<String>? _subtypedNames;
-  idl.UnlinkedUnit2? _unit2;
-
-  @override
-  List<String> get definedClassMemberNames {
-    return _definedClassMemberNames ??=
-        const fb.ListReader<String>(fb.StringReader())
-            .vTableGet(_bc, _bcOffset, 2, const <String>[]);
-  }
-
-  @override
-  List<String> get definedTopLevelNames {
-    return _definedTopLevelNames ??=
-        const fb.ListReader<String>(fb.StringReader())
-            .vTableGet(_bc, _bcOffset, 1, const <String>[]);
-  }
-
-  @override
-  List<String> get referencedNames {
-    return _referencedNames ??= const fb.ListReader<String>(fb.StringReader())
-        .vTableGet(_bc, _bcOffset, 0, const <String>[]);
-  }
-
-  @override
-  List<String> get subtypedNames {
-    return _subtypedNames ??= const fb.ListReader<String>(fb.StringReader())
-        .vTableGet(_bc, _bcOffset, 3, const <String>[]);
-  }
-
-  @override
-  idl.UnlinkedUnit2? get unit2 {
-    return _unit2 ??=
-        const _UnlinkedUnit2Reader().vTableGetOrNull(_bc, _bcOffset, 4);
-  }
-}
-
-abstract class _AnalysisDriverUnlinkedUnitMixin
-    implements idl.AnalysisDriverUnlinkedUnit {
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> _result = <String, Object>{};
-    var local_definedClassMemberNames = definedClassMemberNames;
-    if (local_definedClassMemberNames.isNotEmpty) {
-      _result["definedClassMemberNames"] = local_definedClassMemberNames;
-    }
-    var local_definedTopLevelNames = definedTopLevelNames;
-    if (local_definedTopLevelNames.isNotEmpty) {
-      _result["definedTopLevelNames"] = local_definedTopLevelNames;
-    }
-    var local_referencedNames = referencedNames;
-    if (local_referencedNames.isNotEmpty) {
-      _result["referencedNames"] = local_referencedNames;
-    }
-    var local_subtypedNames = subtypedNames;
-    if (local_subtypedNames.isNotEmpty) {
-      _result["subtypedNames"] = local_subtypedNames;
-    }
-    var local_unit2 = unit2;
-    if (local_unit2 != null) {
-      _result["unit2"] = local_unit2.toJson();
-    }
-    return _result;
-  }
-
-  @override
-  Map<String, Object?> toMap() => {
-        "definedClassMemberNames": definedClassMemberNames,
-        "definedTopLevelNames": definedTopLevelNames,
-        "referencedNames": referencedNames,
-        "subtypedNames": subtypedNames,
-        "unit2": unit2,
-      };
-
-  @override
-  String toString() => convert.json.encode(toJson());
-}
-
 class AvailableDeclarationBuilder extends Object
     with _AvailableDeclarationMixin
     implements idl.AvailableDeclaration {
@@ -3037,7 +2767,7 @@
     }
   }
 
-  List<int> toBuffer() {
+  typed_data.Uint8List toBuffer() {
     fb.Builder fbBuilder = fb.Builder();
     return fbBuilder.finish(finish(fbBuilder), "UICF");
   }
@@ -3541,7 +3271,7 @@
     }
   }
 
-  List<int> toBuffer() {
+  typed_data.Uint8List toBuffer() {
     fb.Builder fbBuilder = fb.Builder();
     return fbBuilder.finish(finish(fbBuilder), "CUEr");
   }
@@ -3633,143 +3363,6 @@
   String toString() => convert.json.encode(toJson());
 }
 
-class CiderUnlinkedUnitBuilder extends Object
-    with _CiderUnlinkedUnitMixin
-    implements idl.CiderUnlinkedUnit {
-  List<int>? _contentDigest;
-  UnlinkedUnit2Builder? _unlinkedUnit;
-
-  @override
-  List<int> get contentDigest => _contentDigest ??= <int>[];
-
-  /// The hash signature of the contents of the file.
-  set contentDigest(List<int> value) {
-    assert(value.every((e) => e >= 0));
-    this._contentDigest = value;
-  }
-
-  @override
-  UnlinkedUnit2Builder? get unlinkedUnit => _unlinkedUnit;
-
-  /// Unlinked summary of the compilation unit.
-  set unlinkedUnit(UnlinkedUnit2Builder? value) {
-    this._unlinkedUnit = value;
-  }
-
-  CiderUnlinkedUnitBuilder(
-      {List<int>? contentDigest, UnlinkedUnit2Builder? unlinkedUnit})
-      : _contentDigest = contentDigest,
-        _unlinkedUnit = unlinkedUnit;
-
-  /// Flush [informative] data recursively.
-  void flushInformative() {
-    _unlinkedUnit?.flushInformative();
-  }
-
-  /// Accumulate non-[informative] data into [signature].
-  void collectApiSignature(api_sig.ApiSignature signatureSink) {
-    var contentDigest = this._contentDigest;
-    if (contentDigest == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(contentDigest.length);
-      for (var x in contentDigest) {
-        signatureSink.addInt(x);
-      }
-    }
-    signatureSink.addBool(this._unlinkedUnit != null);
-    this._unlinkedUnit?.collectApiSignature(signatureSink);
-  }
-
-  List<int> toBuffer() {
-    fb.Builder fbBuilder = fb.Builder();
-    return fbBuilder.finish(finish(fbBuilder), "CUUN");
-  }
-
-  fb.Offset finish(fb.Builder fbBuilder) {
-    fb.Offset? offset_contentDigest;
-    fb.Offset? offset_unlinkedUnit;
-    var contentDigest = _contentDigest;
-    if (!(contentDigest == null || contentDigest.isEmpty)) {
-      offset_contentDigest = fbBuilder.writeListUint32(contentDigest);
-    }
-    var unlinkedUnit = _unlinkedUnit;
-    if (unlinkedUnit != null) {
-      offset_unlinkedUnit = unlinkedUnit.finish(fbBuilder);
-    }
-    fbBuilder.startTable();
-    if (offset_contentDigest != null) {
-      fbBuilder.addOffset(0, offset_contentDigest);
-    }
-    if (offset_unlinkedUnit != null) {
-      fbBuilder.addOffset(1, offset_unlinkedUnit);
-    }
-    return fbBuilder.endTable();
-  }
-}
-
-idl.CiderUnlinkedUnit readCiderUnlinkedUnit(List<int> buffer) {
-  fb.BufferContext rootRef = fb.BufferContext.fromBytes(buffer);
-  return const _CiderUnlinkedUnitReader().read(rootRef, 0);
-}
-
-class _CiderUnlinkedUnitReader extends fb.TableReader<_CiderUnlinkedUnitImpl> {
-  const _CiderUnlinkedUnitReader();
-
-  @override
-  _CiderUnlinkedUnitImpl createObject(fb.BufferContext bc, int offset) =>
-      _CiderUnlinkedUnitImpl(bc, offset);
-}
-
-class _CiderUnlinkedUnitImpl extends Object
-    with _CiderUnlinkedUnitMixin
-    implements idl.CiderUnlinkedUnit {
-  final fb.BufferContext _bc;
-  final int _bcOffset;
-
-  _CiderUnlinkedUnitImpl(this._bc, this._bcOffset);
-
-  List<int>? _contentDigest;
-  idl.UnlinkedUnit2? _unlinkedUnit;
-
-  @override
-  List<int> get contentDigest {
-    return _contentDigest ??=
-        const fb.Uint32ListReader().vTableGet(_bc, _bcOffset, 0, const <int>[]);
-  }
-
-  @override
-  idl.UnlinkedUnit2? get unlinkedUnit {
-    return _unlinkedUnit ??=
-        const _UnlinkedUnit2Reader().vTableGetOrNull(_bc, _bcOffset, 1);
-  }
-}
-
-abstract class _CiderUnlinkedUnitMixin implements idl.CiderUnlinkedUnit {
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> _result = <String, Object>{};
-    var local_contentDigest = contentDigest;
-    if (local_contentDigest.isNotEmpty) {
-      _result["contentDigest"] = local_contentDigest;
-    }
-    var local_unlinkedUnit = unlinkedUnit;
-    if (local_unlinkedUnit != null) {
-      _result["unlinkedUnit"] = local_unlinkedUnit.toJson();
-    }
-    return _result;
-  }
-
-  @override
-  Map<String, Object?> toMap() => {
-        "contentDigest": contentDigest,
-        "unlinkedUnit": unlinkedUnit,
-      };
-
-  @override
-  String toString() => convert.json.encode(toJson());
-}
-
 class DiagnosticMessageBuilder extends Object
     with _DiagnosticMessageMixin
     implements idl.DiagnosticMessage {
@@ -4125,7 +3718,7 @@
     signatureSink.addInt(this._fake ?? 0);
   }
 
-  List<int> toBuffer() {
+  typed_data.Uint8List toBuffer() {
     fb.Builder fbBuilder = fb.Builder();
     return fbBuilder.finish(finish(fbBuilder), "PBdl");
   }
@@ -4185,669 +3778,3 @@
   @override
   String toString() => convert.json.encode(toJson());
 }
-
-class UnlinkedNamespaceDirectiveBuilder extends Object
-    with _UnlinkedNamespaceDirectiveMixin
-    implements idl.UnlinkedNamespaceDirective {
-  List<UnlinkedNamespaceDirectiveConfigurationBuilder>? _configurations;
-  String? _uri;
-
-  @override
-  List<UnlinkedNamespaceDirectiveConfigurationBuilder> get configurations =>
-      _configurations ??= <UnlinkedNamespaceDirectiveConfigurationBuilder>[];
-
-  /// The configurations that control which library will actually be used.
-  set configurations(
-      List<UnlinkedNamespaceDirectiveConfigurationBuilder> value) {
-    this._configurations = value;
-  }
-
-  @override
-  String get uri => _uri ??= '';
-
-  /// The URI referenced by this directive, nad used by default when none
-  /// of the [configurations] matches.
-  set uri(String value) {
-    this._uri = value;
-  }
-
-  UnlinkedNamespaceDirectiveBuilder(
-      {List<UnlinkedNamespaceDirectiveConfigurationBuilder>? configurations,
-      String? uri})
-      : _configurations = configurations,
-        _uri = uri;
-
-  /// Flush [informative] data recursively.
-  void flushInformative() {
-    _configurations?.forEach((b) => b.flushInformative());
-  }
-
-  /// Accumulate non-[informative] data into [signature].
-  void collectApiSignature(api_sig.ApiSignature signatureSink) {
-    var configurations = this._configurations;
-    if (configurations == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(configurations.length);
-      for (var x in configurations) {
-        x.collectApiSignature(signatureSink);
-      }
-    }
-    signatureSink.addString(this._uri ?? '');
-  }
-
-  fb.Offset finish(fb.Builder fbBuilder) {
-    fb.Offset? offset_configurations;
-    fb.Offset? offset_uri;
-    var configurations = _configurations;
-    if (!(configurations == null || configurations.isEmpty)) {
-      offset_configurations = fbBuilder
-          .writeList(configurations.map((b) => b.finish(fbBuilder)).toList());
-    }
-    var uri = _uri;
-    if (uri != null) {
-      offset_uri = fbBuilder.writeString(uri);
-    }
-    fbBuilder.startTable();
-    if (offset_configurations != null) {
-      fbBuilder.addOffset(0, offset_configurations);
-    }
-    if (offset_uri != null) {
-      fbBuilder.addOffset(1, offset_uri);
-    }
-    return fbBuilder.endTable();
-  }
-}
-
-class _UnlinkedNamespaceDirectiveReader
-    extends fb.TableReader<_UnlinkedNamespaceDirectiveImpl> {
-  const _UnlinkedNamespaceDirectiveReader();
-
-  @override
-  _UnlinkedNamespaceDirectiveImpl createObject(
-          fb.BufferContext bc, int offset) =>
-      _UnlinkedNamespaceDirectiveImpl(bc, offset);
-}
-
-class _UnlinkedNamespaceDirectiveImpl extends Object
-    with _UnlinkedNamespaceDirectiveMixin
-    implements idl.UnlinkedNamespaceDirective {
-  final fb.BufferContext _bc;
-  final int _bcOffset;
-
-  _UnlinkedNamespaceDirectiveImpl(this._bc, this._bcOffset);
-
-  List<idl.UnlinkedNamespaceDirectiveConfiguration>? _configurations;
-  String? _uri;
-
-  @override
-  List<idl.UnlinkedNamespaceDirectiveConfiguration> get configurations {
-    return _configurations ??=
-        const fb.ListReader<idl.UnlinkedNamespaceDirectiveConfiguration>(
-                _UnlinkedNamespaceDirectiveConfigurationReader())
-            .vTableGet(_bc, _bcOffset, 0,
-                const <idl.UnlinkedNamespaceDirectiveConfiguration>[]);
-  }
-
-  @override
-  String get uri {
-    return _uri ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 1, '');
-  }
-}
-
-abstract class _UnlinkedNamespaceDirectiveMixin
-    implements idl.UnlinkedNamespaceDirective {
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> _result = <String, Object>{};
-    var local_configurations = configurations;
-    if (local_configurations.isNotEmpty) {
-      _result["configurations"] =
-          local_configurations.map((_value) => _value.toJson()).toList();
-    }
-    var local_uri = uri;
-    if (local_uri != '') {
-      _result["uri"] = local_uri;
-    }
-    return _result;
-  }
-
-  @override
-  Map<String, Object?> toMap() => {
-        "configurations": configurations,
-        "uri": uri,
-      };
-
-  @override
-  String toString() => convert.json.encode(toJson());
-}
-
-class UnlinkedNamespaceDirectiveConfigurationBuilder extends Object
-    with _UnlinkedNamespaceDirectiveConfigurationMixin
-    implements idl.UnlinkedNamespaceDirectiveConfiguration {
-  String? _name;
-  String? _uri;
-  String? _value;
-
-  @override
-  String get name => _name ??= '';
-
-  /// The name of the declared variable used in the condition.
-  set name(String value) {
-    this._name = value;
-  }
-
-  @override
-  String get uri => _uri ??= '';
-
-  /// The URI to be used if the condition is true.
-  set uri(String value) {
-    this._uri = value;
-  }
-
-  @override
-  String get value => _value ??= '';
-
-  /// The value to which the value of the declared variable will be compared,
-  /// or the empty string if the condition does not include an equality test.
-  set value(String value) {
-    this._value = value;
-  }
-
-  UnlinkedNamespaceDirectiveConfigurationBuilder(
-      {String? name, String? uri, String? value})
-      : _name = name,
-        _uri = uri,
-        _value = value;
-
-  /// Flush [informative] data recursively.
-  void flushInformative() {}
-
-  /// Accumulate non-[informative] data into [signature].
-  void collectApiSignature(api_sig.ApiSignature signatureSink) {
-    signatureSink.addString(this._name ?? '');
-    signatureSink.addString(this._value ?? '');
-    signatureSink.addString(this._uri ?? '');
-  }
-
-  fb.Offset finish(fb.Builder fbBuilder) {
-    fb.Offset? offset_name;
-    fb.Offset? offset_uri;
-    fb.Offset? offset_value;
-    var name = _name;
-    if (name != null) {
-      offset_name = fbBuilder.writeString(name);
-    }
-    var uri = _uri;
-    if (uri != null) {
-      offset_uri = fbBuilder.writeString(uri);
-    }
-    var value = _value;
-    if (value != null) {
-      offset_value = fbBuilder.writeString(value);
-    }
-    fbBuilder.startTable();
-    if (offset_name != null) {
-      fbBuilder.addOffset(0, offset_name);
-    }
-    if (offset_uri != null) {
-      fbBuilder.addOffset(2, offset_uri);
-    }
-    if (offset_value != null) {
-      fbBuilder.addOffset(1, offset_value);
-    }
-    return fbBuilder.endTable();
-  }
-}
-
-class _UnlinkedNamespaceDirectiveConfigurationReader
-    extends fb.TableReader<_UnlinkedNamespaceDirectiveConfigurationImpl> {
-  const _UnlinkedNamespaceDirectiveConfigurationReader();
-
-  @override
-  _UnlinkedNamespaceDirectiveConfigurationImpl createObject(
-          fb.BufferContext bc, int offset) =>
-      _UnlinkedNamespaceDirectiveConfigurationImpl(bc, offset);
-}
-
-class _UnlinkedNamespaceDirectiveConfigurationImpl extends Object
-    with _UnlinkedNamespaceDirectiveConfigurationMixin
-    implements idl.UnlinkedNamespaceDirectiveConfiguration {
-  final fb.BufferContext _bc;
-  final int _bcOffset;
-
-  _UnlinkedNamespaceDirectiveConfigurationImpl(this._bc, this._bcOffset);
-
-  String? _name;
-  String? _uri;
-  String? _value;
-
-  @override
-  String get name {
-    return _name ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 0, '');
-  }
-
-  @override
-  String get uri {
-    return _uri ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 2, '');
-  }
-
-  @override
-  String get value {
-    return _value ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 1, '');
-  }
-}
-
-abstract class _UnlinkedNamespaceDirectiveConfigurationMixin
-    implements idl.UnlinkedNamespaceDirectiveConfiguration {
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> _result = <String, Object>{};
-    var local_name = name;
-    if (local_name != '') {
-      _result["name"] = local_name;
-    }
-    var local_uri = uri;
-    if (local_uri != '') {
-      _result["uri"] = local_uri;
-    }
-    var local_value = value;
-    if (local_value != '') {
-      _result["value"] = local_value;
-    }
-    return _result;
-  }
-
-  @override
-  Map<String, Object?> toMap() => {
-        "name": name,
-        "uri": uri,
-        "value": value,
-      };
-
-  @override
-  String toString() => convert.json.encode(toJson());
-}
-
-class UnlinkedUnit2Builder extends Object
-    with _UnlinkedUnit2Mixin
-    implements idl.UnlinkedUnit2 {
-  List<int>? _apiSignature;
-  List<UnlinkedNamespaceDirectiveBuilder>? _exports;
-  bool? _hasLibraryDirective;
-  bool? _hasPartOfDirective;
-  List<UnlinkedNamespaceDirectiveBuilder>? _imports;
-  List<int>? _lineStarts;
-  String? _partOfName;
-  String? _partOfUri;
-  List<String>? _parts;
-
-  @override
-  List<int> get apiSignature => _apiSignature ??= <int>[];
-
-  /// The MD5 hash signature of the API portion of this unit. It depends on all
-  /// tokens that might affect APIs of declarations in the unit.
-  set apiSignature(List<int> value) {
-    assert(value.every((e) => e >= 0));
-    this._apiSignature = value;
-  }
-
-  @override
-  List<UnlinkedNamespaceDirectiveBuilder> get exports =>
-      _exports ??= <UnlinkedNamespaceDirectiveBuilder>[];
-
-  /// URIs of `export` directives.
-  set exports(List<UnlinkedNamespaceDirectiveBuilder> value) {
-    this._exports = value;
-  }
-
-  @override
-  bool get hasLibraryDirective => _hasLibraryDirective ??= false;
-
-  /// Is `true` if the unit contains a `library` directive.
-  set hasLibraryDirective(bool value) {
-    this._hasLibraryDirective = value;
-  }
-
-  @override
-  bool get hasPartOfDirective => _hasPartOfDirective ??= false;
-
-  /// Is `true` if the unit contains a `part of` directive.
-  set hasPartOfDirective(bool value) {
-    this._hasPartOfDirective = value;
-  }
-
-  @override
-  List<UnlinkedNamespaceDirectiveBuilder> get imports =>
-      _imports ??= <UnlinkedNamespaceDirectiveBuilder>[];
-
-  /// URIs of `import` directives.
-  set imports(List<UnlinkedNamespaceDirectiveBuilder> value) {
-    this._imports = value;
-  }
-
-  @override
-  List<int> get lineStarts => _lineStarts ??= <int>[];
-
-  /// Offsets of the first character of each line in the source code.
-  set lineStarts(List<int> value) {
-    assert(value.every((e) => e >= 0));
-    this._lineStarts = value;
-  }
-
-  @override
-  String get partOfName => _partOfName ??= '';
-
-  /// The library name of the `part of my.name;` directive.
-  set partOfName(String value) {
-    this._partOfName = value;
-  }
-
-  @override
-  String get partOfUri => _partOfUri ??= '';
-
-  /// URI of the `part of 'uri';` directive.
-  set partOfUri(String value) {
-    this._partOfUri = value;
-  }
-
-  @override
-  List<String> get parts => _parts ??= <String>[];
-
-  /// URIs of `part` directives.
-  set parts(List<String> value) {
-    this._parts = value;
-  }
-
-  UnlinkedUnit2Builder(
-      {List<int>? apiSignature,
-      List<UnlinkedNamespaceDirectiveBuilder>? exports,
-      bool? hasLibraryDirective,
-      bool? hasPartOfDirective,
-      List<UnlinkedNamespaceDirectiveBuilder>? imports,
-      List<int>? lineStarts,
-      String? partOfName,
-      String? partOfUri,
-      List<String>? parts})
-      : _apiSignature = apiSignature,
-        _exports = exports,
-        _hasLibraryDirective = hasLibraryDirective,
-        _hasPartOfDirective = hasPartOfDirective,
-        _imports = imports,
-        _lineStarts = lineStarts,
-        _partOfName = partOfName,
-        _partOfUri = partOfUri,
-        _parts = parts;
-
-  /// Flush [informative] data recursively.
-  void flushInformative() {
-    _exports?.forEach((b) => b.flushInformative());
-    _imports?.forEach((b) => b.flushInformative());
-    _lineStarts = null;
-  }
-
-  /// Accumulate non-[informative] data into [signature].
-  void collectApiSignature(api_sig.ApiSignature signatureSink) {
-    var apiSignature = this._apiSignature;
-    if (apiSignature == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(apiSignature.length);
-      for (var x in apiSignature) {
-        signatureSink.addInt(x);
-      }
-    }
-    var exports = this._exports;
-    if (exports == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(exports.length);
-      for (var x in exports) {
-        x.collectApiSignature(signatureSink);
-      }
-    }
-    var imports = this._imports;
-    if (imports == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(imports.length);
-      for (var x in imports) {
-        x.collectApiSignature(signatureSink);
-      }
-    }
-    signatureSink.addBool(this._hasPartOfDirective == true);
-    var parts = this._parts;
-    if (parts == null) {
-      signatureSink.addInt(0);
-    } else {
-      signatureSink.addInt(parts.length);
-      for (var x in parts) {
-        signatureSink.addString(x);
-      }
-    }
-    signatureSink.addBool(this._hasLibraryDirective == true);
-    signatureSink.addString(this._partOfUri ?? '');
-    signatureSink.addString(this._partOfName ?? '');
-  }
-
-  List<int> toBuffer() {
-    fb.Builder fbBuilder = fb.Builder();
-    return fbBuilder.finish(finish(fbBuilder), "UUN2");
-  }
-
-  fb.Offset finish(fb.Builder fbBuilder) {
-    fb.Offset? offset_apiSignature;
-    fb.Offset? offset_exports;
-    fb.Offset? offset_imports;
-    fb.Offset? offset_lineStarts;
-    fb.Offset? offset_partOfName;
-    fb.Offset? offset_partOfUri;
-    fb.Offset? offset_parts;
-    var apiSignature = _apiSignature;
-    if (!(apiSignature == null || apiSignature.isEmpty)) {
-      offset_apiSignature = fbBuilder.writeListUint32(apiSignature);
-    }
-    var exports = _exports;
-    if (!(exports == null || exports.isEmpty)) {
-      offset_exports =
-          fbBuilder.writeList(exports.map((b) => b.finish(fbBuilder)).toList());
-    }
-    var imports = _imports;
-    if (!(imports == null || imports.isEmpty)) {
-      offset_imports =
-          fbBuilder.writeList(imports.map((b) => b.finish(fbBuilder)).toList());
-    }
-    var lineStarts = _lineStarts;
-    if (!(lineStarts == null || lineStarts.isEmpty)) {
-      offset_lineStarts = fbBuilder.writeListUint32(lineStarts);
-    }
-    var partOfName = _partOfName;
-    if (partOfName != null) {
-      offset_partOfName = fbBuilder.writeString(partOfName);
-    }
-    var partOfUri = _partOfUri;
-    if (partOfUri != null) {
-      offset_partOfUri = fbBuilder.writeString(partOfUri);
-    }
-    var parts = _parts;
-    if (!(parts == null || parts.isEmpty)) {
-      offset_parts = fbBuilder
-          .writeList(parts.map((b) => fbBuilder.writeString(b)).toList());
-    }
-    fbBuilder.startTable();
-    if (offset_apiSignature != null) {
-      fbBuilder.addOffset(0, offset_apiSignature);
-    }
-    if (offset_exports != null) {
-      fbBuilder.addOffset(1, offset_exports);
-    }
-    fbBuilder.addBool(6, _hasLibraryDirective == true);
-    fbBuilder.addBool(3, _hasPartOfDirective == true);
-    if (offset_imports != null) {
-      fbBuilder.addOffset(2, offset_imports);
-    }
-    if (offset_lineStarts != null) {
-      fbBuilder.addOffset(5, offset_lineStarts);
-    }
-    if (offset_partOfName != null) {
-      fbBuilder.addOffset(8, offset_partOfName);
-    }
-    if (offset_partOfUri != null) {
-      fbBuilder.addOffset(7, offset_partOfUri);
-    }
-    if (offset_parts != null) {
-      fbBuilder.addOffset(4, offset_parts);
-    }
-    return fbBuilder.endTable();
-  }
-}
-
-idl.UnlinkedUnit2 readUnlinkedUnit2(List<int> buffer) {
-  fb.BufferContext rootRef = fb.BufferContext.fromBytes(buffer);
-  return const _UnlinkedUnit2Reader().read(rootRef, 0);
-}
-
-class _UnlinkedUnit2Reader extends fb.TableReader<_UnlinkedUnit2Impl> {
-  const _UnlinkedUnit2Reader();
-
-  @override
-  _UnlinkedUnit2Impl createObject(fb.BufferContext bc, int offset) =>
-      _UnlinkedUnit2Impl(bc, offset);
-}
-
-class _UnlinkedUnit2Impl extends Object
-    with _UnlinkedUnit2Mixin
-    implements idl.UnlinkedUnit2 {
-  final fb.BufferContext _bc;
-  final int _bcOffset;
-
-  _UnlinkedUnit2Impl(this._bc, this._bcOffset);
-
-  List<int>? _apiSignature;
-  List<idl.UnlinkedNamespaceDirective>? _exports;
-  bool? _hasLibraryDirective;
-  bool? _hasPartOfDirective;
-  List<idl.UnlinkedNamespaceDirective>? _imports;
-  List<int>? _lineStarts;
-  String? _partOfName;
-  String? _partOfUri;
-  List<String>? _parts;
-
-  @override
-  List<int> get apiSignature {
-    return _apiSignature ??=
-        const fb.Uint32ListReader().vTableGet(_bc, _bcOffset, 0, const <int>[]);
-  }
-
-  @override
-  List<idl.UnlinkedNamespaceDirective> get exports {
-    return _exports ??= const fb.ListReader<idl.UnlinkedNamespaceDirective>(
-            _UnlinkedNamespaceDirectiveReader())
-        .vTableGet(_bc, _bcOffset, 1, const <idl.UnlinkedNamespaceDirective>[]);
-  }
-
-  @override
-  bool get hasLibraryDirective {
-    return _hasLibraryDirective ??=
-        const fb.BoolReader().vTableGet(_bc, _bcOffset, 6, false);
-  }
-
-  @override
-  bool get hasPartOfDirective {
-    return _hasPartOfDirective ??=
-        const fb.BoolReader().vTableGet(_bc, _bcOffset, 3, false);
-  }
-
-  @override
-  List<idl.UnlinkedNamespaceDirective> get imports {
-    return _imports ??= const fb.ListReader<idl.UnlinkedNamespaceDirective>(
-            _UnlinkedNamespaceDirectiveReader())
-        .vTableGet(_bc, _bcOffset, 2, const <idl.UnlinkedNamespaceDirective>[]);
-  }
-
-  @override
-  List<int> get lineStarts {
-    return _lineStarts ??=
-        const fb.Uint32ListReader().vTableGet(_bc, _bcOffset, 5, const <int>[]);
-  }
-
-  @override
-  String get partOfName {
-    return _partOfName ??=
-        const fb.StringReader().vTableGet(_bc, _bcOffset, 8, '');
-  }
-
-  @override
-  String get partOfUri {
-    return _partOfUri ??=
-        const fb.StringReader().vTableGet(_bc, _bcOffset, 7, '');
-  }
-
-  @override
-  List<String> get parts {
-    return _parts ??= const fb.ListReader<String>(fb.StringReader())
-        .vTableGet(_bc, _bcOffset, 4, const <String>[]);
-  }
-}
-
-abstract class _UnlinkedUnit2Mixin implements idl.UnlinkedUnit2 {
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> _result = <String, Object>{};
-    var local_apiSignature = apiSignature;
-    if (local_apiSignature.isNotEmpty) {
-      _result["apiSignature"] = local_apiSignature;
-    }
-    var local_exports = exports;
-    if (local_exports.isNotEmpty) {
-      _result["exports"] =
-          local_exports.map((_value) => _value.toJson()).toList();
-    }
-    var local_hasLibraryDirective = hasLibraryDirective;
-    if (local_hasLibraryDirective != false) {
-      _result["hasLibraryDirective"] = local_hasLibraryDirective;
-    }
-    var local_hasPartOfDirective = hasPartOfDirective;
-    if (local_hasPartOfDirective != false) {
-      _result["hasPartOfDirective"] = local_hasPartOfDirective;
-    }
-    var local_imports = imports;
-    if (local_imports.isNotEmpty) {
-      _result["imports"] =
-          local_imports.map((_value) => _value.toJson()).toList();
-    }
-    var local_lineStarts = lineStarts;
-    if (local_lineStarts.isNotEmpty) {
-      _result["lineStarts"] = local_lineStarts;
-    }
-    var local_partOfName = partOfName;
-    if (local_partOfName != '') {
-      _result["partOfName"] = local_partOfName;
-    }
-    var local_partOfUri = partOfUri;
-    if (local_partOfUri != '') {
-      _result["partOfUri"] = local_partOfUri;
-    }
-    var local_parts = parts;
-    if (local_parts.isNotEmpty) {
-      _result["parts"] = local_parts;
-    }
-    return _result;
-  }
-
-  @override
-  Map<String, Object?> toMap() => {
-        "apiSignature": apiSignature,
-        "exports": exports,
-        "hasLibraryDirective": hasLibraryDirective,
-        "hasPartOfDirective": hasPartOfDirective,
-        "imports": imports,
-        "lineStarts": lineStarts,
-        "partOfName": partOfName,
-        "partOfUri": partOfUri,
-        "parts": parts,
-      };
-
-  @override
-  String toString() => convert.json.encode(toJson());
-}
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 75c773b..44e5dc8 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -293,25 +293,6 @@
   usedNames:[uint] (id: 14);
 }
 
-/// Information about an unlinked unit.
-table AnalysisDriverUnlinkedUnit {
-  /// List of class member names defined by the unit.
-  definedClassMemberNames:[string] (id: 2);
-
-  /// List of top-level names defined by the unit.
-  definedTopLevelNames:[string] (id: 1);
-
-  /// List of external names referenced by the unit.
-  referencedNames:[string] (id: 0);
-
-  /// List of names which are used in `extends`, `with` or `implements` clauses
-  /// in the file. Import prefixes and type arguments are not included.
-  subtypedNames:[string] (id: 3);
-
-  /// Unlinked information for the unit.
-  unit2:UnlinkedUnit2 (id: 4);
-}
-
 /// Information about a single declaration.
 table AvailableDeclaration {
   children:[AvailableDeclaration] (id: 0);
@@ -422,16 +403,6 @@
   signature:[uint] (id: 0);
 }
 
-/// Information about a compilation unit, contains the content hash
-/// and unlinked summary.
-table CiderUnlinkedUnit {
-  /// The hash signature of the contents of the file.
-  contentDigest:[uint] (id: 0);
-
-  /// Unlinked summary of the compilation unit.
-  unlinkedUnit:UnlinkedUnit2 (id: 1);
-}
-
 table DiagnosticMessage {
   /// The absolute and normalized path of the file associated with this message.
   filePath:string (id: 0);
@@ -465,60 +436,6 @@
   fake:uint (id: 0);
 }
 
-/// Unlinked summary information about a namespace directive.
-table UnlinkedNamespaceDirective {
-  /// The configurations that control which library will actually be used.
-  configurations:[UnlinkedNamespaceDirectiveConfiguration] (id: 0);
-
-  /// The URI referenced by this directive, nad used by default when none
-  /// of the [configurations] matches.
-  uri:string (id: 1);
-}
-
-/// Unlinked summary information about a namespace directive configuration.
-table UnlinkedNamespaceDirectiveConfiguration {
-  /// The name of the declared variable used in the condition.
-  name:string (id: 0);
-
-  /// The URI to be used if the condition is true.
-  uri:string (id: 2);
-
-  /// The value to which the value of the declared variable will be compared,
-  /// or the empty string if the condition does not include an equality test.
-  value:string (id: 1);
-}
-
-/// Unlinked summary information about a compilation unit.
-table UnlinkedUnit2 {
-  /// The MD5 hash signature of the API portion of this unit. It depends on all
-  /// tokens that might affect APIs of declarations in the unit.
-  apiSignature:[uint] (id: 0);
-
-  /// URIs of `export` directives.
-  exports:[UnlinkedNamespaceDirective] (id: 1);
-
-  /// Is `true` if the unit contains a `library` directive.
-  hasLibraryDirective:bool (id: 6);
-
-  /// Is `true` if the unit contains a `part of` directive.
-  hasPartOfDirective:bool (id: 3);
-
-  /// URIs of `import` directives.
-  imports:[UnlinkedNamespaceDirective] (id: 2);
-
-  /// Offsets of the first character of each line in the source code.
-  lineStarts:[uint] (id: 5);
-
-  /// The library name of the `part of my.name;` directive.
-  partOfName:string (id: 8);
-
-  /// URI of the `part of 'uri';` directive.
-  partOfUri:string (id: 7);
-
-  /// URIs of `part` directives.
-  parts:[string] (id: 4);
-}
-
 root_type PackageBundle;
 
 file_identifier "PBdl";
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index ee5b366..a17feaf 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -259,34 +259,6 @@
   List<int> get usedNames;
 }
 
-/// Information about an unlinked unit.
-@TopLevel('ADUU')
-abstract class AnalysisDriverUnlinkedUnit extends base.SummaryClass {
-  factory AnalysisDriverUnlinkedUnit.fromBuffer(List<int> buffer) =>
-      generated.readAnalysisDriverUnlinkedUnit(buffer);
-
-  /// List of class member names defined by the unit.
-  @Id(2)
-  List<String> get definedClassMemberNames;
-
-  /// List of top-level names defined by the unit.
-  @Id(1)
-  List<String> get definedTopLevelNames;
-
-  /// List of external names referenced by the unit.
-  @Id(0)
-  List<String> get referencedNames;
-
-  /// List of names which are used in `extends`, `with` or `implements` clauses
-  /// in the file. Import prefixes and type arguments are not included.
-  @Id(3)
-  List<String> get subtypedNames;
-
-  /// Unlinked information for the unit.
-  @Id(4)
-  UnlinkedUnit2? get unit2;
-}
-
 /// Information about a single declaration.
 abstract class AvailableDeclaration extends base.SummaryClass {
   @Id(0)
@@ -463,22 +435,6 @@
   List<int> get signature;
 }
 
-/// Information about a compilation unit, contains the content hash
-/// and unlinked summary.
-@TopLevel('CUUN')
-abstract class CiderUnlinkedUnit extends base.SummaryClass {
-  factory CiderUnlinkedUnit.fromBuffer(List<int> buffer) =>
-      generated.readCiderUnlinkedUnit(buffer);
-
-  /// The hash signature of the contents of the file.
-  @Id(0)
-  List<int> get contentDigest;
-
-  /// Unlinked summary of the compilation unit.
-  @Id(1)
-  UnlinkedUnit2? get unlinkedUnit;
-}
-
 abstract class DiagnosticMessage extends base.SummaryClass {
   /// The absolute and normalized path of the file associated with this message.
   @Id(0)
@@ -615,77 +571,3 @@
   @Id(0)
   int get fake;
 }
-
-/// Unlinked summary information about a namespace directive.
-abstract class UnlinkedNamespaceDirective extends base.SummaryClass {
-  /// The configurations that control which library will actually be used.
-  @Id(0)
-  List<UnlinkedNamespaceDirectiveConfiguration> get configurations;
-
-  /// The URI referenced by this directive, nad used by default when none
-  /// of the [configurations] matches.
-  @Id(1)
-  String get uri;
-}
-
-/// Unlinked summary information about a namespace directive configuration.
-abstract class UnlinkedNamespaceDirectiveConfiguration
-    extends base.SummaryClass {
-  /// The name of the declared variable used in the condition.
-  @Id(0)
-  String get name;
-
-  /// The URI to be used if the condition is true.
-  @Id(2)
-  String get uri;
-
-  /// The value to which the value of the declared variable will be compared,
-  /// or the empty string if the condition does not include an equality test.
-  @Id(1)
-  String get value;
-}
-
-/// Unlinked summary information about a compilation unit.
-@TopLevel('UUN2')
-abstract class UnlinkedUnit2 extends base.SummaryClass {
-  factory UnlinkedUnit2.fromBuffer(List<int> buffer) =>
-      generated.readUnlinkedUnit2(buffer);
-
-  /// The MD5 hash signature of the API portion of this unit. It depends on all
-  /// tokens that might affect APIs of declarations in the unit.
-  @Id(0)
-  List<int> get apiSignature;
-
-  /// URIs of `export` directives.
-  @Id(1)
-  List<UnlinkedNamespaceDirective> get exports;
-
-  /// Is `true` if the unit contains a `library` directive.
-  @Id(6)
-  bool get hasLibraryDirective;
-
-  /// Is `true` if the unit contains a `part of` directive.
-  @Id(3)
-  bool get hasPartOfDirective;
-
-  /// URIs of `import` directives.
-  @Id(2)
-  List<UnlinkedNamespaceDirective> get imports;
-
-  /// Offsets of the first character of each line in the source code.
-  @informative
-  @Id(5)
-  List<int> get lineStarts;
-
-  /// The library name of the `part of my.name;` directive.
-  @Id(8)
-  String get partOfName;
-
-  /// URI of the `part of 'uri';` directive.
-  @Id(7)
-  String get partOfUri;
-
-  /// URIs of `part` directives.
-  @Id(4)
-  List<String> get parts;
-}
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
index 557f22c..03cce04 100644
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
@@ -88,6 +88,7 @@
 /// The [UriResolver] that knows about sources that are served from their
 /// summaries.
 class InSummaryUriResolver extends UriResolver {
+  /// TODO(scheglov) Remove it, we don't need it.
   ResourceProvider? resourceProvider;
   final SummaryDataStore _dataStore;
 
@@ -162,7 +163,7 @@
     Uint8List bytes;
     if (resourceProvider != null) {
       var file = resourceProvider.getFile(path);
-      bytes = file.readAsBytesSync() as Uint8List;
+      bytes = file.readAsBytesSync();
     } else {
       io.File file = io.File(path);
       bytes = file.readAsBytesSync();
diff --git a/pkg/analyzer/lib/src/summary/summary_file_builder.dart b/pkg/analyzer/lib/src/summary/summary_file_builder.dart
index 6f9c3ed..521f24b 100644
--- a/pkg/analyzer/lib/src/summary/summary_file_builder.dart
+++ b/pkg/analyzer/lib/src/summary/summary_file_builder.dart
@@ -5,6 +5,8 @@
 @Deprecated('Use package:analyzer/dart/sdk/build_sdk_summary.dart instead')
 library summary_file_builder;
 
+import 'dart:typed_data';
+
 import 'package:analyzer/dart/sdk/build_sdk_summary.dart' as api;
 import 'package:analyzer/file_system/file_system.dart';
 
@@ -12,7 +14,7 @@
 ///
 /// If [embedderYamlPath] is provided, then libraries from this file are
 /// appended to the libraries of the specified SDK.
-List<int> buildSdkSummary({
+Uint8List buildSdkSummary({
   required ResourceProvider resourceProvider,
   required String sdkPath,
   String? embedderYamlPath,
diff --git a/pkg/analyzer/lib/src/summary/summary_sdk.dart b/pkg/analyzer/lib/src/summary/summary_sdk.dart
index 5ad073a..1ad7efe 100644
--- a/pkg/analyzer/lib/src/summary/summary_sdk.dart
+++ b/pkg/analyzer/lib/src/summary/summary_sdk.dart
@@ -14,11 +14,14 @@
 /// suitable only for command-line tools, but not for IDEs - it does not
 /// implement [sdkLibraries], [uris] and [fromFileUri].
 class SummaryBasedDartSdk implements DartSdk {
+  late final PackageBundleReader _bundle;
   late final SummaryDataStore _dataStore;
   late final InSummaryUriResolver _uriResolver;
-  late final PackageBundleReader _bundle;
+
+  /// TODO(scheglov) Remove it when the default constructor.
   ResourceProvider? resourceProvider;
 
+  @Deprecated('Use SummaryBasedDartSdk.forBundle() instead')
   SummaryBasedDartSdk(String summaryPath, bool _, {this.resourceProvider}) {
     _dataStore = SummaryDataStore(<String>[summaryPath],
         resourceProvider: resourceProvider);
@@ -26,6 +29,16 @@
     _bundle = _dataStore.bundles.single;
   }
 
+  SummaryBasedDartSdk.forBundle(PackageBundleReader bundle) {
+    _bundle = bundle;
+
+    _dataStore = SummaryDataStore([]);
+    // TODO(scheglov) We need a solution to avoid these paths at all.
+    _dataStore.addBundle('', bundle);
+
+    _uriResolver = InSummaryUriResolver(resourceProvider, _dataStore);
+  }
+
   @override
   String get allowedExperimentsJson {
     return _bundle.sdk!.allowedExperimentsJson;
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index f5a151f..c7c08cf 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -1075,6 +1075,7 @@
       StringToken(TokenType.STRING, name, -1),
     );
     node.staticElement = _reader.readElement();
+    node.tearOffTypeArgumentTypes = _reader.readOptionalTypeList();
     _readExpressionResolution(node);
     return node;
   }
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
index dfb26a2..a8033ec 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
@@ -7,16 +7,6 @@
   static const int genericFunctionElement = 1;
 }
 
-/// A `MethodInvocation` in unresolved AST might be rewritten later as
-/// another kinds of AST node. We store this rewrite with resolution data.
-class MethodInvocationRewriteTag {
-  static const int extensionOverride = 1;
-  static const int functionExpressionInvocation = 2;
-  static const int instanceCreationExpression_withName = 3;
-  static const int instanceCreationExpression_withoutName = 4;
-  static const int none = 5;
-}
-
 class Tag {
   static const int Nothing = 0;
   static const int Something = 1;
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index 6ad2224..446308d 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -663,6 +663,7 @@
     _writeStringReference(node.name);
 
     _sink.writeElement(node.staticElement);
+    _sink.writeOptionalTypeList(node.tearOffTypeArgumentTypes);
 
     _storeExpression(node);
   }
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index bd9248b..056696d 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -63,7 +63,6 @@
     });
 
     for (var libraryHeader in libraryHeaderList) {
-      _reader.offset = libraryHeader.offset;
       var uriStr = libraryHeader.uriStr;
       var reference = elementFactory.rootReference.getChild(uriStr);
       libraryMap[uriStr] = LibraryReader._(
@@ -73,7 +72,7 @@
         baseResolutionOffset: baseResolutionOffset,
         referenceReader: referenceReader,
         reference: reference,
-        offset: _reader.offset,
+        offset: libraryHeader.offset,
         classMembersLengths: libraryHeader.classMembersLengths,
       );
     }
diff --git a/pkg/analyzer/lib/src/summary2/data_reader.dart b/pkg/analyzer/lib/src/summary2/data_reader.dart
index a961d0d..ff6e1b8 100644
--- a/pkg/analyzer/lib/src/summary2/data_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/data_reader.dart
@@ -73,7 +73,8 @@
   }
 
   String readStringReference() {
-    return _stringTable[readUInt30()];
+    var index = readUInt30();
+    return stringOfIndex(index);
   }
 
   List<String> readStringReferenceList() {
@@ -85,6 +86,20 @@
     return utf8.decode(bytes);
   }
 
+  List<String> readStringUtf8List() {
+    return readTypedList(readStringUtf8);
+  }
+
+  Set<String> readStringUtf8Set() {
+    var length = readUInt30();
+    var result = <String>{};
+    for (var i = 0; i < length; i++) {
+      var item = readStringUtf8();
+      result.add(item);
+    }
+    return result;
+  }
+
   List<T> readTypedList<T>(T Function() read) {
     var length = readUInt30();
     return List<T>.generate(length, (_) {
diff --git a/pkg/analyzer/lib/src/summary2/data_writer.dart b/pkg/analyzer/lib/src/summary2/data_writer.dart
index d7aedcd..3f560a8 100644
--- a/pkg/analyzer/lib/src/summary2/data_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/data_writer.dart
@@ -161,6 +161,13 @@
     writeUint8List(bytes as Uint8List);
   }
 
+  void writeStringUtf8Iterable(Iterable<String> items) {
+    writeUInt30(items.length);
+    for (var item in items) {
+      writeStringUtf8(item);
+    }
+  }
+
   @pragma("vm:prefer-inline")
   void writeUInt30(int value) {
     assert(value >= 0 && value >> 30 == 0);
diff --git a/pkg/analyzer/lib/src/summary2/default_types_builder.dart b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
index 356de04..d565a18 100644
--- a/pkg/analyzer/lib/src/summary2/default_types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
@@ -91,7 +91,7 @@
         var boundNode = element.parameter.bound;
         if (boundNode is GenericFunctionTypeImpl) {
           boundNode.type = DynamicTypeImpl.instance;
-        } else if (boundNode is TypeNameImpl) {
+        } else if (boundNode is NamedTypeImpl) {
           boundNode.type = DynamicTypeImpl.instance;
         } else {
           throw UnimplementedError('(${boundNode.runtimeType}) $boundNode');
@@ -108,7 +108,7 @@
     for (var parameter in typeParameters) {
       parameter as TypeParameterImpl;
       var boundNode = parameter.bound;
-      if (boundNode is TypeNameImpl) {
+      if (boundNode is NamedTypeImpl) {
         if (typeParametersByName == null) {
           typeParametersByName = {};
           for (var parameterNode in typeParameters) {
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index c375b8c..5d1e535 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -8,7 +8,6 @@
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary2/library_builder.dart';
 import 'package:analyzer/src/summary2/link.dart';
@@ -24,7 +23,6 @@
   final _imports = <ImportElement>[];
   var _isFirstLibraryDirective = true;
   var _hasCoreImport = false;
-  var _hasExtUri = false;
   var _partDirectiveIndex = 0;
 
   _EnclosingContext _enclosingContext;
@@ -72,7 +70,6 @@
       );
     }
     _libraryElement.imports = _imports;
-    _libraryElement.hasExtUri = _hasExtUri;
 
     if (_isFirstLibraryDirective) {
       _isFirstLibraryDirective = false;
@@ -619,8 +616,6 @@
 
     if (uriStr == 'dart:core') {
       _hasCoreImport = true;
-    } else if (DartUriResolver.isDartExtUri(uriStr)) {
-      _hasExtUri = true;
     }
   }
 
diff --git a/pkg/analyzer/lib/src/summary2/element_flags.dart b/pkg/analyzer/lib/src/summary2/element_flags.dart
index e808000..806aab7 100644
--- a/pkg/analyzer/lib/src/summary2/element_flags.dart
+++ b/pkg/analyzer/lib/src/summary2/element_flags.dart
@@ -136,20 +136,17 @@
 }
 
 class LibraryElementFlags {
-  static const int _hasExtUri = 1 << 0;
-  static const int _hasPartOfDirective = 1 << 1;
-  static const int _isSynthetic = 1 << 2;
+  static const int _hasPartOfDirective = 1 << 0;
+  static const int _isSynthetic = 1 << 1;
 
   static void read(SummaryDataReader reader, LibraryElementImpl element) {
     var byte = reader.readByte();
-    element.hasExtUri = (byte & _hasExtUri) != 0;
     element.hasPartOfDirective = (byte & _hasPartOfDirective) != 0;
     element.isSynthetic = (byte & _isSynthetic) != 0;
   }
 
   static void write(BufferedSink sink, LibraryElementImpl element) {
     var result = 0;
-    result |= element.hasExtUri ? _hasExtUri : 0;
     result |= element.hasPartOfDirective ? _hasPartOfDirective : 0;
     result |= element.isSynthetic ? _isSynthetic : 0;
     sink.writeByte(result);
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index db4d362..d605919 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -25,13 +25,10 @@
 var timerLinkingLinkingBundle = Stopwatch();
 
 /// Note that AST units and tokens of [inputLibraries] will be damaged.
-///
-/// TODO(scheglov) deprecate `withInformative`.
 LinkResult link(
   LinkedElementFactory elementFactory,
-  List<LinkInputLibrary> inputLibraries, [
-  bool? withInformative,
-]) {
+  List<LinkInputLibrary> inputLibraries,
+) {
   var linker = Linker(elementFactory);
   linker.link(inputLibraries);
   return LinkResult(
diff --git a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
index 456548e..3833cc9 100644
--- a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
@@ -15,8 +15,8 @@
   final AnalysisContextImpl analysisContext;
   final AnalysisSessionImpl analysisSession;
   final Reference rootReference;
-  final Map<String, LibraryReader> libraryReaders = {};
-  final _exportsOfLibrary = <String, List<Reference>>{};
+  final Map<String, LibraryReader> _libraryReaders = {};
+  final Map<String, List<Reference>> _exportsOfLibrary = {};
 
   bool isApplyingInformativeData = false;
 
@@ -33,16 +33,12 @@
     return rootReference.getChild('dart:core').getChild('dynamic');
   }
 
-  bool get hasDartCore {
-    return libraryReaders.containsKey('dart:core');
-  }
-
   void addBundle(BundleReader bundle) {
     addLibraries(bundle.libraryMap);
   }
 
   void addLibraries(Map<String, LibraryReader> libraries) {
-    libraryReaders.addAll(libraries);
+    _libraryReaders.addAll(libraries);
   }
 
   Namespace buildExportNamespace(Uri uri) {
@@ -73,11 +69,11 @@
     // The URI cannot be resolved, we don't know the library.
     if (librarySource == null) return null;
 
-    var reader = libraryReaders[uriStr];
+    var reader = _libraryReaders[uriStr];
     if (reader == null) {
       throw ArgumentError(
         'Missing library: $uriStr\n'
-        'Available libraries: ${libraryReaders.keys.toList()}',
+        'Available libraries: ${_libraryReaders.keys.toList()}',
       );
     }
 
@@ -154,14 +150,19 @@
     if (exports != null) return exports;
 
     // TODO(scheglov) Use [setExportsOfLibrary] instead
-    var library = libraryReaders[uriStr];
+    var library = _libraryReaders[uriStr];
     if (library == null) return const [];
 
     return library.exports;
   }
 
   bool hasLibrary(String uriStr) {
-    return libraryReaders[uriStr] != null;
+    // We already have the element, linked or read.
+    if (rootReference[uriStr]?.element is LibraryElementImpl) {
+      return true;
+    }
+    // No element yet, but we know how to read it.
+    return _libraryReaders[uriStr] != null;
   }
 
   /// We are about to discard this factory, mark all libraries invalid.
@@ -195,7 +196,7 @@
   void removeLibraries(Set<String> uriStrSet) {
     for (var uriStr in uriStrSet) {
       _exportsOfLibrary.remove(uriStr);
-      libraryReaders.remove(uriStr);
+      _libraryReaders.remove(uriStr);
       var libraryReference = rootReference.removeChild(uriStr);
       _invalidateLibrary(libraryReference);
     }
@@ -212,10 +213,10 @@
           '${uriStrSet.toList()}',
         );
       }
-      if (libraryReaders.isNotEmpty) {
+      if (_libraryReaders.isNotEmpty) {
         throw StateError(
           'Expected to link dart:core and dart:async first: '
-          '${libraryReaders.keys.toList()}',
+          '${_libraryReaders.keys.toList()}',
         );
       }
       analysisContext.clearTypeProvider();
diff --git a/pkg/analyzer/lib/src/summary2/named_type_builder.dart b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
index 5c3473b..e6cd97a 100644
--- a/pkg/analyzer/lib/src/summary2/named_type_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
@@ -40,7 +40,7 @@
   /// The node for which this builder is created, or `null` if the builder
   /// was detached from its node, e.g. during computing default types for
   /// type parameters.
-  final TypeNameImpl? node;
+  final NamedTypeImpl? node;
 
   /// The actual built type, not a [TypeBuilder] anymore.
   ///
@@ -55,7 +55,7 @@
   factory NamedTypeBuilder.of(
     Linker linker,
     TypeSystemImpl typeSystem,
-    TypeNameImpl node,
+    NamedTypeImpl node,
     Element element,
     NullabilitySuffix nullabilitySuffix,
   ) {
diff --git a/pkg/analyzer/lib/src/summary2/reference.dart b/pkg/analyzer/lib/src/summary2/reference.dart
index 8c305bd..aea331f 100644
--- a/pkg/analyzer/lib/src/summary2/reference.dart
+++ b/pkg/analyzer/lib/src/summary2/reference.dart
@@ -56,19 +56,32 @@
 
   /// Return the child with the given name, or `null` if does not exist.
   Reference? operator [](String name) {
+    name = _rewriteDartUi(name);
     return _children?[name];
   }
 
   /// Return the child with the given name, create if does not exist yet.
   Reference getChild(String name) {
+    name = _rewriteDartUi(name);
     var map = _children ??= <String, Reference>{};
     return map[name] ??= Reference._(this, name);
   }
 
   Reference? removeChild(String name) {
+    name = _rewriteDartUi(name);
     return _children?.remove(name);
   }
 
   @override
   String toString() => parent == null ? 'root' : '$parent::$name';
+
+  /// TODO(scheglov) Remove it, once when the actual issue is fixed.
+  /// https://buganizer.corp.google.com/issues/203423390
+  static String _rewriteDartUi(String name) {
+    const srcPrefix = 'dart:ui/src/ui/';
+    if (name.startsWith(srcPrefix)) {
+      return 'dart:ui/${name.substring(srcPrefix.length)}';
+    }
+    return name;
+  }
 }
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index ef6c180..6e6cbe2 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -311,7 +311,7 @@
   }
 
   @override
-  void visitNamedType(covariant TypeNameImpl node) {
+  void visitNamedType(covariant NamedTypeImpl node) {
     var typeIdentifier = node.name;
 
     Element? element;
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 48731a7..9887d9c 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -364,7 +364,7 @@
     if (withClause == null) return;
 
     for (var mixinNode in withClause.mixinTypes2) {
-      var mixinType = _inferSingle(mixinNode as TypeNameImpl);
+      var mixinType = _inferSingle(mixinNode as NamedTypeImpl);
       interfacesMerger.addWithSupertypes(mixinType);
     }
   }
@@ -400,7 +400,7 @@
     return result;
   }
 
-  InterfaceType _inferSingle(TypeNameImpl mixinNode) {
+  InterfaceType _inferSingle(NamedTypeImpl mixinNode) {
     var mixinType = _interfaceType(mixinNode.typeOrThrow);
 
     if (mixinNode.typeArguments != null) {
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index 2efaaa1..6a393dc 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -385,7 +385,7 @@
               reporter.reportErrorForSpan(
                   AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE,
                   k.span,
-                  [k.value?.toString()]);
+                  [k.value.toString()]);
             }
           }
           if (v is YamlScalar) {
@@ -397,7 +397,7 @@
                   v.span,
                   [
                     AnalyzerOptions.errors,
-                    v.value?.toString(),
+                    v.value.toString(),
                     legalValueString
                   ]);
             }
@@ -450,11 +450,13 @@
           }
           if (validKey && v is YamlScalar) {
             value = toLowerCase(v.value);
+            // `null` is not a valid key, so we can safely assume `key` is
+            // non-`null`.
             if (!AnalyzerOptions.trueOrFalse.contains(value)) {
               reporter.reportErrorForSpan(
                   AnalysisOptionsWarningCode.UNSUPPORTED_VALUE,
                   v.span,
-                  [key, v.value, AnalyzerOptions.trueOrFalseProposal]);
+                  [key!, v.value, AnalyzerOptions.trueOrFalseProposal]);
             }
           }
         });
@@ -586,7 +588,7 @@
               reporter.reportErrorForSpan(
                   AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED,
                   k.span,
-                  [key]);
+                  [AnalyzerOptions.declarationCasts]);
             } else {
               // If we have a valid key, go on and check the value.
               validKey = true;
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 575fe79..21b51e7 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
+import 'package:analyzer/src/test_utilities/function_ast_visitor.dart';
 
 class FindNode {
   final String content;
@@ -16,6 +17,16 @@
         as LibraryDirective;
   }
 
+  List<MethodInvocation> get methodInvocations {
+    var result = <MethodInvocation>[];
+    unit.accept(
+      FunctionAstVisitor(
+        methodInvocation: result.add,
+      ),
+    );
+    return result;
+  }
+
   Annotation annotation(String search) {
     return _node(search, (n) => n is Annotation);
   }
@@ -192,6 +203,10 @@
     return _node(search, (n) => n is IfStatement);
   }
 
+  ImplicitCallReference implicitCallReference(String search) {
+    return _node(search, (n) => n is ImplicitCallReference);
+  }
+
   ImportDirective import(String search) {
     return _node(search, (n) => n is ImportDirective);
   }
diff --git a/pkg/analyzer/lib/src/test_utilities/function_ast_visitor.dart b/pkg/analyzer/lib/src/test_utilities/function_ast_visitor.dart
index 126dd97..bb1476c 100644
--- a/pkg/analyzer/lib/src/test_utilities/function_ast_visitor.dart
+++ b/pkg/analyzer/lib/src/test_utilities/function_ast_visitor.dart
@@ -12,6 +12,7 @@
       functionDeclarationStatement;
   final void Function(FunctionExpression, bool)? functionExpression;
   final void Function(Label)? label;
+  final void Function(MethodInvocation)? methodInvocation;
   final void Function(SimpleIdentifier)? simpleIdentifier;
   final void Function(VariableDeclaration)? variableDeclaration;
 
@@ -20,6 +21,7 @@
     this.functionDeclarationStatement,
     this.functionExpression,
     this.label,
+    this.methodInvocation,
     this.simpleIdentifier,
     this.variableDeclaration,
   });
@@ -59,6 +61,14 @@
   }
 
   @override
+  void visitMethodInvocation(MethodInvocation node) {
+    if (methodInvocation != null) {
+      methodInvocation!(node);
+    }
+    super.visitMethodInvocation(node);
+  }
+
+  @override
   void visitSimpleIdentifier(SimpleIdentifier node) {
     if (simpleIdentifier != null) {
       simpleIdentifier!(node);
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index a05f61d..a7ecd5a 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -9,15 +9,14 @@
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:pub_semver/src/version.dart';
+import 'package:meta/meta.dart';
 
+@Deprecated('Use createMockSdk() instead')
 const String sdkRoot = '/sdk';
 
-final MockSdkLibrary _LIB_ASYNC = MockSdkLibrary([
+final MockSdkLibrary _LIB_ASYNC = MockSdkLibrary('async', [
   MockSdkLibraryUnit(
-    'dart:async',
-    '$sdkRoot/lib/async/async.dart',
+    'async/async.dart',
     '''
 library dart.async;
 
@@ -48,7 +47,8 @@
 
   Future<T> whenComplete(action());
 
-  static Future<List<T>> wait<T>(Iterable<Future<T>> futures) => throw 0;
+  static Future<List<T>> wait<T>(Iterable<Future<T>> futures, 
+    {void cleanUp(T successValue)?}) => throw 0;
 }
 
 abstract class FutureOr<T> {}
@@ -75,8 +75,7 @@
 ''',
   ),
   MockSdkLibraryUnit(
-    'dart:async/stream.dart',
-    '$sdkRoot/lib/async/stream.dart',
+    'async/stream.dart',
     r'''
 part of dart.async;
 
@@ -113,10 +112,9 @@
   )
 ]);
 
-final MockSdkLibrary _LIB_ASYNC2 = MockSdkLibrary([
+final MockSdkLibrary _LIB_ASYNC2 = MockSdkLibrary('async2', [
   MockSdkLibraryUnit(
-    'dart:async2',
-    '$sdkRoot/lib/async2/async2.dart',
+    'async2/async2.dart',
     '''
 library dart.async2;
 
@@ -125,10 +123,9 @@
   )
 ]);
 
-final MockSdkLibrary _LIB_COLLECTION = MockSdkLibrary([
+final MockSdkLibrary _LIB_COLLECTION = MockSdkLibrary('collection', [
   MockSdkLibraryUnit(
-    'dart:collection',
-    '$sdkRoot/lib/collection/collection.dart',
+    'collection/collection.dart',
     '''
 library dart.collection;
 
@@ -162,6 +159,8 @@
   }
 }
 
+abstract class IterableMixin<E> implements Iterable<E> { }
+
 abstract class LinkedHashMap<K, V> implements Map<K, V> {
   external factory LinkedHashMap(
       {bool Function(K, K)? equals,
@@ -208,15 +207,21 @@
     throw 0;
   }
 }
+
+abstract class ListMixin<E> implements List<E> { }
+
+abstract class MapMixin<K, V> implements Map<K, V> { }
+
+abstract class SetMixin<E> implements Set<E> { }
 ''',
   )
 ]);
 
 final MockSdkLibrary _LIB_CONVERT = MockSdkLibrary(
+  'convert',
   [
     MockSdkLibraryUnit(
-      'dart:convert',
-      '$sdkRoot/lib/convert/convert.dart',
+      'convert/convert.dart',
       '''
 library dart.convert;
 
@@ -234,20 +239,24 @@
   const JsonCodec();
   String encode(Object? value, {Object? toEncodable(dynamic object)?}) => '';
 }
+
+abstract class StringConversionSink { }
+
+abstract class StringConversionSinkMixin implements StringConversionSink { }
 ''',
     )
   ],
 );
 
 final MockSdkLibrary _LIB_CORE = MockSdkLibrary(
+  'core',
   [
     MockSdkLibraryUnit(
-      'dart:core',
-      '$sdkRoot/lib/core/core.dart',
+      'core/core.dart',
       '''
 library dart.core;
 
-import 'dart:async'; // ignore: unused_import
+import "dart:_internal" hide Symbol;
 
 export 'dart:async' show Future, Stream;
 
@@ -290,7 +299,12 @@
 
 typedef Comparator<T> = int Function(T a, T b);
 
-class DateTime extends Object {}
+class DateTime extends Object {
+  external DateTime._now();
+  DateTime.now() : this._now();
+  external bool isBefore(DateTime other);
+  external int get millisecondsSinceEpoch;
+}
 
 class Deprecated extends Object {
   final String expires;
@@ -304,11 +318,11 @@
 }
 
 abstract class double extends num {
-  static const double NAN = 0.0 / 0.0;
-  static const double INFINITY = 1.0 / 0.0;
-  static const double NEGATIVE_INFINITY = -INFINITY;
-  static const double MIN_POSITIVE = 5e-324;
-  static const double MAX_FINITE = 1.7976931348623157e+308;
+  static const double nan = 0.0 / 0.0;
+  static const double infinity = 1.0 / 0.0;
+  static const double negativeInfinity = -infinity;
+  static const double minPositive = 5e-324;
+  static const double maxFinite = 1.7976931348623157e+308;
 
   double get sign;
   double operator %(num other);
@@ -360,6 +374,8 @@
 
   bool get isEven => false;
   bool get isNegative;
+  bool get isOdd;
+  int get sign;
 
   int operator &(int other);
   int operator -();
@@ -371,8 +387,10 @@
   int operator ~();
 
   int abs();
+  int ceil();
   int gcd(int other);
   String toString();
+  int truncate();
 
   external static int parse(String source,
       {int? radix, @deprecated int onError(String source)?});
@@ -389,7 +407,11 @@
   Iterator<E> get iterator;
   int get length;
 
-  bool contains(Object element);
+  const Iterable();
+
+  const factory Iterable.empty() = EmptyIterable<E>;
+
+  bool contains(Object? element);
 
   Iterable<T> expand<T>(Iterable<T> f(E element));
 
@@ -410,6 +432,7 @@
   Set<E> toSet();
 
   Iterable<E> where(bool test(E element));
+  Iterable<T> whereType<T>();
 }
 
 abstract class Iterator<E> {
@@ -436,6 +459,7 @@
   Map<int, E> asMap() {}
   void clear() {}
   int indexOf(Object element);
+  bool remove(Object? value);
   E removeLast() {}
 
   noSuchMethod(Invocation invocation) => null;
@@ -463,8 +487,11 @@
   V? operator [](Object? key);
   void operator []=(K key, V value);
 
+  void addAll(Map<K, V> other);
   Map<RK, RV> cast<RK, RV>();
   bool containsKey(Object? key);
+  void forEach(void action(K key, V value));
+  V putIfAbsent(K key, V ifAbsent());
 }
 
 class Null extends Object {
@@ -541,7 +568,7 @@
 }
 
 abstract class RegExp implements Pattern {
-  external factory RegExp(String source);
+  external factory RegExp(String source, {bool unicode = false});
 }
 
 abstract class Set<E> implements Iterable<E> {
@@ -624,10 +651,9 @@
   ],
 );
 
-final MockSdkLibrary _LIB_FFI = MockSdkLibrary([
+final MockSdkLibrary _LIB_FFI = MockSdkLibrary('ffi', [
   MockSdkLibraryUnit(
-    'dart:ffi',
-    '$sdkRoot/lib/ffi/ffi.dart',
+    'ffi/ffi.dart',
     '''
 library dart.ffi;
 
@@ -768,10 +794,10 @@
 ]);
 
 final MockSdkLibrary _LIB_HTML_DART2JS = MockSdkLibrary(
+  'html',
   [
     MockSdkLibraryUnit(
-      'dart:html',
-      '$sdkRoot/lib/html/dart2js/html_dart2js.dart',
+      'html/dart2js/html_dart2js.dart',
       '''
 library dart.dom.html;
 
@@ -895,6 +921,7 @@
       "iframe");
 
   String src;
+  set srcdoc(String? value) native;
 }
 
 class OptionElement extends HtmlElement {
@@ -976,10 +1003,10 @@
 );
 
 final MockSdkLibrary _LIB_INTERCEPTORS = MockSdkLibrary(
+  '_interceptors',
   [
     MockSdkLibraryUnit(
-      'dart:_interceptors',
-      '$sdkRoot/lib/_internal/js_runtime/lib/interceptors.dart',
+      '_internal/js_runtime/lib/interceptors.dart',
       '''
 library dart._interceptors;
 ''',
@@ -988,15 +1015,19 @@
 );
 
 final MockSdkLibrary _LIB_INTERNAL = MockSdkLibrary(
+  '_internal',
   [
     MockSdkLibraryUnit(
-      'dart:_internal',
-      '$sdkRoot/lib/_internal/internal.dart',
+      '_internal/internal.dart',
       '''
 library dart._internal;
 
 class Symbol {}
 
+class EmptyIterable<E> implements Iterable<E> {
+  const EmptyIterable();
+}
+
 class ExternalName {
   final String name;
   const ExternalName(this.name);
@@ -1004,13 +1035,14 @@
 ''',
     )
   ],
+  categories: '',
 );
 
 final MockSdkLibrary _LIB_IO = MockSdkLibrary(
+  'io',
   [
     MockSdkLibraryUnit(
-      'dart:io',
-      '$sdkRoot/lib/io/io.dart',
+      'io/io.dart',
       '''
 library dart.io;
 
@@ -1093,10 +1125,9 @@
   ],
 );
 
-final MockSdkLibrary _LIB_ISOLATE = MockSdkLibrary([
+final MockSdkLibrary _LIB_ISOLATE = MockSdkLibrary('isolate', [
   MockSdkLibraryUnit(
-    'dart:isolate',
-    '$sdkRoot/lib/isolate/isolate.dart',
+    'isolate.dart',
     '''
 library dart.isolate;
 
@@ -1124,10 +1155,10 @@
 ]);
 
 final MockSdkLibrary _LIB_MATH = MockSdkLibrary(
+  'math',
   [
     MockSdkLibraryUnit(
-      'dart:math',
-      '$sdkRoot/lib/math/math.dart',
+      'math/math.dart',
       '''
 library dart.math;
 
@@ -1170,213 +1201,111 @@
   _LIB_INTERNAL,
 ];
 
-final Map<String, String> _librariesDartEntries = {
-  'async': 'const LibraryInfo("async/async.dart")',
-  'collection': 'const LibraryInfo("collection/collection.dart")',
-  'convert': 'const LibraryInfo("convert/convert.dart")',
-  'core': 'const LibraryInfo("core/core.dart")',
-  'ffi': 'const LibraryInfo("ffi/ffi.dart")',
-  'html': 'const LibraryInfo("html/dart2js/html_dart2js.dart")',
-  'io': 'const LibraryInfo("io/io.dart")',
-  'isolate': 'const LibraryInfo("isolate/isolate.dart")',
-  'math': 'const LibraryInfo("math/math.dart")',
-  '_internal': 'const LibraryInfo("_internal/internal.dart", categories: "")',
-};
+/// Create a reduced approximation of Dart SDK in the [path].
+///
+/// It has enough libraries to run analyzer and analysis server tests,
+/// but some libraries, classes, and methods are missing.
+void createMockSdk({
+  required MemoryResourceProvider resourceProvider,
+  required Folder root,
+  @internal List<MockSdkLibrary> additionalLibraries = const [],
+}) {
+  var lib = root.getChildAssumingFolder('lib');
+  var libInternal = lib.getChildAssumingFolder('_internal');
 
-class MockSdk implements DartSdk {
-  final MemoryResourceProvider resourceProvider;
+  var currentVersion = ExperimentStatus.currentVersion;
+  var currentVersionStr = '${currentVersion.major}.${currentVersion.minor}.0';
+  root.getChildAssumingFile('version').writeAsStringSync(currentVersionStr);
 
-  final Map<String, String> uriMap = {};
+  var librariesBuffer = StringBuffer();
+  librariesBuffer.writeln(
+    'const Map<String, LibraryInfo> libraries = const {',
+  );
 
-  @override
-  final List<MockSdkLibrary> sdkLibraries = [];
-
-  late final File _versionFile;
-
-  /// Optional [additionalLibraries] should have unique URIs, and paths in
-  /// their units are relative (will be put into `sdkRoot/lib`).
-  ///
-  /// [nullSafePackages], if supplied, is a list of packages names that should
-  /// be included in the null safety allow list.
-  ///
-  /// [sdkVersion], if supplied will override the version stored in the mock
-  /// SDK's `version` file.
-  MockSdk({
-    required this.resourceProvider,
-    List<MockSdkLibrary> additionalLibraries = const [],
-    List<String> nullSafePackages = const [],
-    String? sdkVersion,
-  }) {
-    sdkVersion ??= '${ExperimentStatus.currentVersion.major}.'
-        '${ExperimentStatus.currentVersion.minor}.0';
-    _versionFile = resourceProvider
-        .getFolder(resourceProvider.convertPath(sdkRoot))
-        .getChildAssumingFile('version');
-    _versionFile.writeAsStringSync(sdkVersion);
-
-    for (MockSdkLibrary library in _LIBRARIES) {
-      var convertedLibrary = library._toProvider(resourceProvider);
-      sdkLibraries.add(convertedLibrary);
+  for (var library in [..._LIBRARIES, ...additionalLibraries]) {
+    for (var unit in library.units) {
+      var file = lib.getChildAssumingFile(unit.path);
+      file.writeAsStringSync(unit.content);
     }
-    for (MockSdkLibrary library in additionalLibraries) {
-      sdkLibraries.add(
-        MockSdkLibrary(
-          library.units.map(
-            (unit) {
-              var pathContext = resourceProvider.pathContext;
-              var absoluteUri = pathContext.join(sdkRoot, 'lib', unit.path);
-              return MockSdkLibraryUnit(
-                unit.uriStr,
-                resourceProvider.convertPath(absoluteUri),
-                unit.content,
-              );
-            },
-          ).toList(),
-        ),
-      );
-    }
-
-    for (MockSdkLibrary library in sdkLibraries) {
-      for (var unit in library.units) {
-        resourceProvider.newFile(unit.path, unit.content);
-        uriMap[unit.uriStr] = unit.path;
-      }
-    }
-
-    {
-      var buffer = StringBuffer();
-      buffer.writeln('const Map<String, LibraryInfo> libraries = const {');
-      for (var e in _librariesDartEntries.entries) {
-        buffer.writeln('"${e.key}": ${e.value},');
-      }
-      for (var library in additionalLibraries) {
-        for (var unit in library.units) {
-          var name = unit.uriStr.substring(5);
-          var libraryInfo = 'const LibraryInfo("${unit.path}")';
-          buffer.writeln('"$name": $libraryInfo,');
-        }
-      }
-      buffer.writeln('};');
-      resourceProvider.newFile(
-        resourceProvider.convertPath(
-          '$sdkRoot/lib/_internal/sdk_library_metadata/lib/libraries.dart',
-        ),
-        buffer.toString(),
-      );
-    }
-
-    resourceProvider.newFile(
-      resourceProvider.convertPath(
-        '$sdkRoot/lib/_internal/allowed_experiments.json',
-      ),
-      json.encode({
-        'version': 1,
-        'experimentSets': {
-          'nullSafety': ['non-nullable']
-        },
-        'sdk': {
-          'default': {'experimentSet': 'nullSafety'}
-        },
-        if (nullSafePackages.isNotEmpty)
-          'packages': {
-            for (var package in nullSafePackages)
-              package: {'experimentSet': 'nullSafety'}
-          }
-      }),
+    librariesBuffer.writeln(
+      '  "${library.name}": const LibraryInfo("${library.path}", '
+      'categories: "${library.categories}"),',
     );
   }
 
+  librariesBuffer.writeln('};');
+  libInternal
+      .getChildAssumingFile('sdk_library_metadata/lib/libraries.dart')
+      .writeAsStringSync('$librariesBuffer');
+
+  libInternal
+      .getChildAssumingFile('allowed_experiments.json')
+      .writeAsStringSync(
+        json.encode({
+          'version': 1,
+          'experimentSets': {
+            'sdkExperiments': <String>[],
+            'nullSafety': ['non-nullable']
+          },
+          'sdk': {
+            'default': {'experimentSet': 'sdkExperiments'},
+          },
+          'packages': <String, Object>{},
+        }),
+      );
+}
+
+@Deprecated('Use createMockSdk() and FolderBasedDartSdk instead.')
+class MockSdk extends FolderBasedDartSdk {
+  /// Optional [additionalLibraries] should have unique URIs, and paths in
+  /// their units are relative (will be put into `sdkRoot/lib`).
+  factory MockSdk({
+    required MemoryResourceProvider resourceProvider,
+    List<MockSdkLibrary> additionalLibraries = const [],
+  }) {
+    var sdkDirectory = resourceProvider.getFolder(
+      resourceProvider.convertPath(sdkRoot),
+    );
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkDirectory,
+      additionalLibraries: additionalLibraries,
+    );
+    return MockSdk._(resourceProvider, sdkDirectory);
+  }
+
+  /// Initialize a newly created SDK to represent the Dart SDK installed in the
+  /// [sdkDirectory].
+  MockSdk._(ResourceProvider resourceProvider, Folder sdkDirectory)
+      : super(resourceProvider, sdkDirectory);
+
   @override
-  String? get allowedExperimentsJson {
-    try {
-      var convertedRoot = resourceProvider.convertPath(sdkRoot);
-      return resourceProvider
-          .getFolder(convertedRoot)
-          .getChildAssumingFolder('lib')
-          .getChildAssumingFolder('_internal')
-          .getChildAssumingFile('allowed_experiments.json')
-          .readAsStringSync();
-    } catch (_) {
-      return null;
-    }
+  MemoryResourceProvider get resourceProvider {
+    return super.resourceProvider as MemoryResourceProvider;
   }
 
   @override
-  Version get languageVersion {
-    var sdkVersionStr = _versionFile.readAsStringSync();
-    return languageVersionFromSdkVersion(sdkVersionStr);
-  }
-
-  @override
-  String get sdkVersion => throw UnimplementedError();
-
-  @override
-  List<String> get uris =>
-      sdkLibraries.map((SdkLibrary library) => library.shortName).toList();
-
-  @override
-  Source? fromFileUri(Uri uri) {
-    String filePath = resourceProvider.pathContext.fromUri(uri);
-    if (!filePath.startsWith(resourceProvider.convertPath('$sdkRoot/lib/'))) {
-      return null;
-    }
-    for (SdkLibrary library in sdkLibraries) {
-      String libraryPath = library.path;
-      if (filePath == libraryPath) {
-        try {
-          var file = resourceProvider.getFile(filePath);
-          Uri dartUri = Uri.parse(library.shortName);
-          return file.createSource(dartUri);
-        } catch (exception) {
-          return null;
-        }
-      }
-      String libraryRootPath =
-          resourceProvider.pathContext.dirname(libraryPath) +
-              resourceProvider.pathContext.separator;
-      if (filePath.startsWith(libraryRootPath)) {
-        String pathInLibrary = filePath.substring(libraryRootPath.length);
-        String uriStr = '${library.shortName}/$pathInLibrary';
-        try {
-          var file = resourceProvider.getFile(filePath);
-          Uri dartUri = Uri.parse(uriStr);
-          return file.createSource(dartUri);
-        } catch (exception) {
-          return null;
-        }
-      }
-    }
-    return null;
-  }
-
-  @override
-  SdkLibrary? getSdkLibrary(String dartUri) {
-    for (SdkLibrary library in _LIBRARIES) {
-      if (library.shortName == dartUri) {
+  List<SdkLibraryImpl> get sdkLibraries {
+    return super.sdkLibraries.map((library) {
+      var pathContext = resourceProvider.pathContext;
+      var path = library.path;
+      if (pathContext.isAbsolute(path)) {
         return library;
       }
-    }
-    return null;
-  }
-
-  @override
-  Source? mapDartUri(String dartUri) {
-    var path = uriMap[dartUri];
-    if (path != null) {
-      var file = resourceProvider.getFile(path);
-      Uri uri = Uri(scheme: 'dart', path: dartUri.substring(5));
-      return file.createSource(uri);
-    }
-    // If we reach here then we tried to use a dartUri that's not in the
-    // table above.
-    return null;
+      return SdkLibraryImpl(library.shortName)
+        ..path = pathContext.join(directory.path, 'lib', path)
+        ..category = library.category
+        ..documented = library.isDocumented;
+    }).toList();
   }
 }
 
 class MockSdkLibrary implements SdkLibrary {
+  final String name;
+  final String categories;
   final List<MockSdkLibraryUnit> units;
 
-  MockSdkLibrary(this.units);
+  MockSdkLibrary(this.name, this.units, {this.categories = 'Shared'});
 
   @override
   String get category => throw UnimplementedError();
@@ -1403,27 +1332,12 @@
   String get path => units[0].path;
 
   @override
-  String get shortName => units[0].uriStr;
-
-  MockSdkLibrary _toProvider(MemoryResourceProvider provider) {
-    return MockSdkLibrary(
-      units.map((unit) => unit._toProvider(provider)).toList(),
-    );
-  }
+  String get shortName => 'dart:$name';
 }
 
 class MockSdkLibraryUnit {
-  final String uriStr;
   final String path;
   final String content;
 
-  MockSdkLibraryUnit(this.uriStr, this.path, this.content);
-
-  MockSdkLibraryUnit _toProvider(MemoryResourceProvider provider) {
-    return MockSdkLibraryUnit(
-      uriStr,
-      provider.convertPath(path),
-      content,
-    );
-  }
+  MockSdkLibraryUnit(this.path, this.content);
 }
diff --git a/pkg/analyzer/lib/src/workspace/bazel.dart b/pkg/analyzer/lib/src/workspace/bazel.dart
index b75a215..aa3aec8 100644
--- a/pkg/analyzer/lib/src/workspace/bazel.dart
+++ b/pkg/analyzer/lib/src/workspace/bazel.dart
@@ -55,6 +55,7 @@
   @override
   void clearCache() {
     _sourceCache.clear();
+    _workspace.clearCache();
   }
 
   @override
@@ -237,6 +238,10 @@
   @override
   UriResolver get packageUriResolver => BazelPackageUriResolver(this);
 
+  void clearCache() {
+    _directoryToPackage.clear();
+  }
+
   @override
   SourceFactory createSourceFactory(
     DartSdk? sdk,
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index f5cd801..3637c8d 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -171,7 +171,7 @@
       The analyzer produces this diagnostic when a field that has the `abstract`
       modifier also has an initializer.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `f` is marked as
       `abstract` and has an initializer:
@@ -229,7 +229,7 @@
       referenced using `super`, but there is no concrete implementation of the
       member in the superclass chain. Abstract members can't be invoked.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `B` doesn't inherit a
       concrete implementation of `a`:
@@ -305,14 +305,13 @@
       export 'b.dart' hide C;
       ```
   AMBIGUOUS_EXTENSION_MEMBER_ACCESS:
-    problemMessage: "A member named '{0}' is defined in extensions {1}, and none are more specific."
+    problemMessage: "A member named '{0}' is defined in {1}, and none are more specific."
     correctionMessage: Try using an extension override to specify the extension you want to be chosen.
     hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the member
-      1: the name of the first declaring extension
-      2: the name of the second declaring extension
+      1: the names of the declaring extensions
     documentation: |-
       #### Description
 
@@ -329,7 +328,7 @@
       extended type that's more specific than the extended types of all of the
       other extensions, making the reference to the member ambiguous.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because there's no way to
       choose between the member in `E1` and the member in `E2`:
@@ -383,7 +382,7 @@
       The analyzer produces this diagnostic when a name is referenced that is
       declared in two or more imported libraries.
 
-      #### Examples
+      #### Example
 
       Given a library (`a.dart`) that defines a class (`C` in this example):
 
@@ -463,7 +462,7 @@
       element is neither of these, making it impossible for the analyzer to
       determine whether you are writing a map literal or a set literal.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -515,7 +514,7 @@
       a type that allows the analyzer to decide whether you were writing a map
       literal or a set literal.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -582,7 +581,7 @@
       The analyzer produces this diagnostic when the static type of an argument
       can't be assigned to the static type of the corresponding parameter.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because a `num` can't be
       assigned to a `String`:
@@ -742,7 +741,7 @@
       setter, but there's no setter because the field with the same name was
       declared to be `final` or `const`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `v` is final:
 
@@ -781,7 +780,7 @@
       The analyzer produces this diagnostic when a local variable that was
       declared to be final is assigned after it was initialized.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` is final, so it
       can't have a value assigned to it after it was initialized:
@@ -818,7 +817,7 @@
       found; there is no setter defined for the type; but there is a getter
       defined with the same name.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because there is no setter
       named `x` in `C`, but there is a getter named `x`:
@@ -920,7 +919,7 @@
       The analyzer produces this diagnostic when the target of an assignment is a
       method.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` can't be assigned a
       value because it's a method:
@@ -1094,7 +1093,7 @@
       return type that's [potentially non-nullable][] but would implicitly return
       `null` if control reached the end of the function.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the method `m` has an
       implicit return of `null` inserted at the end of the method, but the method
@@ -1225,7 +1224,7 @@
       The analyzer produces this diagnostic when a built-in identifier is used
       where a type name is expected.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `import` can't be used
       as a type because it's a built-in identifier:
@@ -1313,7 +1312,7 @@
       block isn't one of the required terminators: `break`, `continue`,
       `rethrow`, `return`, or `throw`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the `case` block ends
       with an assignment:
@@ -1511,7 +1510,7 @@
       The analyzer produces this diagnostic when the name following the `as` in a
       cast expression is defined to be something other than a type.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` is a variable, not
       a type:
@@ -1646,7 +1645,7 @@
       found that doesn't have a concrete implementation. Concrete classes aren't
       allowed to contain abstract members.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `m` is an abstract
       method but `C` isn't an abstract class:
@@ -1692,7 +1691,7 @@
       the name of the class, so having the same name makes the reference
       ambiguous.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the static field `foo`
       and the named constructor `foo` have the same name:
@@ -2144,7 +2143,7 @@
       const constructor, but the constructor is defined in a class that has at
       least one non-final instance field (either directly or by inheritance).
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the field `x` isn't
       final:
@@ -2280,7 +2279,7 @@
       known to be a constant is assigned to a variable that's declared to be a
       `const` variable.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` isn't declared to
       be `const`:
@@ -2363,7 +2362,7 @@
       The analyzer produces this diagnostic when an instance field is marked as
       being const.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` is an instance
       field:
@@ -2461,7 +2460,7 @@
       The analyzer produces this diagnostic when a variable that is declared to
       be a constant doesn't have an initializer.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `c` isn't initialized:
 
@@ -2543,7 +2542,7 @@
       operator in a constant list or set evaluates to something other than a list
       or a set.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the value of `list1` is
       `null`, which is neither a list nor a set:
@@ -2574,7 +2573,7 @@
       The analyzer produces this diagnostic when the expression of a spread
       operator in a constant map evaluates to something other than a map.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the value of `map1` is
       `null`, which isn't a map:
@@ -2605,7 +2604,7 @@
       The analyzer produces this diagnostic when the keyword `const` is used to
       invoke a constructor that isn't marked with `const`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the constructor in `A`
       isn't a const constructor:
@@ -2652,7 +2651,7 @@
       The analyzer produces this diagnostic when a const constructor is invoked
       with an argument that isn't a constant expression.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `i` isn't a constant:
 
@@ -2923,6 +2922,7 @@
   DEFAULT_VALUE_ON_REQUIRED_PARAMETER:
     problemMessage: "Required named parameters can't have a default value."
     correctionMessage: "Try removing either the default value or the 'required' modifier."
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -2932,7 +2932,7 @@
       a value for the parameter is always provided at the call sites, so the
       default value can never be used.
 
-      #### Examples
+      #### Example
 
       The following code generates this diagnostic:
 
@@ -3173,7 +3173,7 @@
       The analyzer produces this diagnostic when a name is declared, and there is
       a previous declaration with the same name in the same scope.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the name `x` is
       declared twice:
@@ -3242,7 +3242,7 @@
       The analyzer produces this diagnostic when an invocation has two or more
       named arguments that have the same name.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because there are two arguments
       with the name `a`:
@@ -3341,7 +3341,7 @@
       literal have the same value. The set can only contain each value once,
       which means that one of the values is unnecessary.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the string `'a'` is
       specified twice:
@@ -3374,7 +3374,7 @@
       second value would overwrite the first value, which makes having both pairs
       pointless.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the key `1` is used
       twice:
@@ -3612,7 +3612,7 @@
       The analyzer produces this diagnostic when the analyzer finds an
       expression, rather than a map entry, in what appears to be a map literal.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -3643,7 +3643,7 @@
       The analyzer produces this diagnostic when an `extends` clause contains a
       name that is declared to be something other than a class.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` is declared to be a
       function:
@@ -3691,7 +3691,7 @@
       representing the type of the class. Extensions, on the other hand, don't
       define a type and can't be used as a type literal.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `E` is an extension:
 
@@ -3716,13 +3716,12 @@
       var x = E.m();
       ```
   EXTENSION_CONFLICTING_STATIC_AND_INSTANCE:
-    problemMessage: "Extension '{0}' can't define static member '{1}' and an instance member with the same name."
+    problemMessage: "An extension can't define static member '{0}' and an instance member with the same name."
     correctionMessage: "Try renaming the member to a name that doesn't conflict."
     hasPublishedDocs: true
     comment: |-
       Parameters:
-      0: the name of the extension defining the conflicting member
-      1: the name of the conflicting static member
+      0: the name of the conflicting static member
     documentation: |-
       #### Description
 
@@ -3732,7 +3731,7 @@
       because it's unclear which member is being referenced by an unqualified use
       of the name within the body of the extension.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the name `a` is being
       used for two different members:
@@ -3767,7 +3766,7 @@
       `Object`. Such a member can never be used because the member in `Object` is
       always found first.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `toString` is defined
       by `Object`:
@@ -3801,7 +3800,7 @@
       classes, the static members of an extension should be accessed using the
       name of the extension, not an extension override.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `m` is static:
 
@@ -3841,7 +3840,7 @@
       The analyzer produces this diagnostic when the argument to an extension
       override isn't assignable to the type being extended by the extension.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `3` isn't a `String`:
 
@@ -3886,7 +3885,7 @@
       extension override syntax doesn't have any runtime semantics; it only
       controls which member is selected at compile time.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `E(i)` isn't an
       expression:
@@ -3940,7 +3939,7 @@
       `e..m` is the value of the receiver `e`, but extension overrides aren't
       expressions and don't have a value.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `E(3)` isn't an
       expression:
@@ -3992,7 +3991,7 @@
       The analyzer produces this diagnostic when a method or function invocation
       has more positional arguments than the method or function allows.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` defines 2
       parameters but is invoked with 3 arguments:
@@ -4029,7 +4028,7 @@
       has more positional arguments than the method or function allows, but the
       method or function defines named parameters.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` defines 2
       positional parameters but has a named parameter that could be used for the
@@ -4324,7 +4323,7 @@
       that has the field hasn't been created at the point at which it should be
       initialized.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the constructor
       `C.zero`, which redirects to the constructor `C`, has a field formal
@@ -4507,7 +4506,7 @@
       The analyzer produces this diagnostic when a final field or variable isn't
       initialized.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` doesn't have an
       initializer:
@@ -4561,7 +4560,7 @@
       initialized when the instance is created, either by the field's initializer
       or by the constructor.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -4718,7 +4717,7 @@
       The analyzer produces this diagnostic when the expression following `in` in
       a for-in loop has a type that isn't a subclass of `Iterable`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `m` is a `Map`, and
       `Map` isn't a subclass of `Iterable`:
@@ -4797,6 +4796,7 @@
   GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC:
     problemMessage: "A method tear-off on a receiver whose type is 'dynamic' can't have type arguments."
     correctionMessage: Specify the type of the receiver, or remove the type arguments from the method tear-off.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -5031,7 +5031,7 @@
       clause of a class or mixin declaration is defined to be something other
       than a class or mixin.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` is a variable
       rather than a class or mixin:
@@ -5067,7 +5067,7 @@
       The analyzer produces this diagnostic when a single class is specified more
       than once in an `implements` clause.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `A` is in the list
       twice:
@@ -5142,7 +5142,7 @@
       The analyzer produces this diagnostic when it finds a reference to an
       instance member in a constructor's initializer list.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `defaultX` is an
       instance member:
@@ -5291,7 +5291,7 @@
       is a getter and `m'` is a method.
 
       Parameters:
-      0: the name of the the instance member with inconsistent inheritance.
+      0: the name of the instance member with inconsistent inheritance.
       1: the name of the superinterface that declares the name as a getter.
       2: the name of the superinterface that declares the name as a method.
   INCONSISTENT_LANGUAGE_VERSION_OVERRIDE:
@@ -5319,7 +5319,7 @@
       Constructors can't initialize fields that aren't declared and fields that
       are inherited from superclasses.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the initializer is
       initializing `x`, but `x` isn't a field in the class:
@@ -5434,7 +5434,7 @@
       initialized. Constructors can't initialize fields that aren't declared and
       fields that are inherited from superclasses.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the field `x` isn't
       defined:
@@ -5498,21 +5498,22 @@
       }
       ```
   INSTANCE_ACCESS_TO_STATIC_MEMBER:
-    problemMessage: "Static {1} '{0}' can't be accessed through an instance."
-    correctionMessage: "Try using the class '{2}' to access the {1}."
+    problemMessage: "The static {1} '{0}' can't be accessed through an instance."
+    correctionMessage: "Try using the {3} '{2}' to access the {1}."
     hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the static member
       1: the kind of the static member (field, getter, setter, or method)
-      2: the name of the defining class
+      2: the name of the static member's enclosing element
+      3: the kind of the static member's enclosing element (class, mixin, or extension)
     documentation: |-
       #### Description
 
       The analyzer produces this diagnostic when an access operator is used to
       access a static member through an instance of the class.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `zero` is a static
       field, but it’s being accessed as if it were an instance field:
@@ -5540,6 +5541,14 @@
         static int zero = 0;
       }
       ```
+  INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION:
+    sharedName: INSTANCE_ACCESS_TO_STATIC_MEMBER
+    problemMessage: "The static {1} '{0}' can't be accessed through an instance."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the static member
+      1: the kind of the static member (field, getter, setter, or method)
   INSTANCE_MEMBER_ACCESS_FROM_FACTORY:
     problemMessage: "Instance members can't be accessed from a factory constructor."
     correctionMessage: Try removing the reference to the instance member.
@@ -5556,7 +5565,7 @@
       factory constructor, the instance isn't created before executing the body,
       so `this` can't be used to reference it.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` isn't in scope in
       the factory constructor:
@@ -5595,7 +5604,7 @@
       The analyzer produces this diagnostic when a static method contains an
       unqualified reference to an instance member.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the instance field `x`
       is being referenced in a static method:
@@ -5653,7 +5662,7 @@
       though you can't create an instance of an abstract class, abstract classes
       can declare constructors that can be invoked by subclasses.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `C` is an abstract
       class:
@@ -5706,6 +5715,7 @@
   INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
     problemMessage: "Type aliases that expand to a type parameter can't be instantiated."
     correctionMessage: Try replacing it with a class.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -5826,7 +5836,7 @@
 
       Getters can't be used as annotations.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the variable `v` isn't
       a `const` variable:
@@ -5887,6 +5897,7 @@
   INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
     problemMessage: "Constant values from a deferred library can't be used in annotations."
     correctionMessage: "Try moving the constant from the deferred library, or removing 'deferred' from the import."
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -5998,7 +6009,7 @@
       that is assigned to a variable isn't assignable to the type of the
       variable.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the type of the
       initializer (`int`) isn't assignable to the type of the variable
@@ -6153,7 +6164,7 @@
       The analyzer produces this diagnostic when the name of a factory
       constructor isn't the same as the name of the surrounding class.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the name of the factory
       constructor (`A`) isn't the same as the surrounding class (`C`):
@@ -6437,7 +6448,7 @@
       * The return type of the override is assignable to the return type of the
         overridden member.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the type of the
       parameter `s` (`String`) isn't assignable to the type of the parameter `i`
@@ -6492,7 +6503,7 @@
       only defined in the context of an instance method or a generative
       constructor.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `v` is a top-level
       variable:
@@ -6569,7 +6580,7 @@
       This isn't allowed because the value of the type parameter (the actual type
       that will be used at runtime) can't be known at compile time.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the type parameter `T`
       is being used as a type argument when creating a constant list:
@@ -6635,7 +6646,7 @@
       The analyzer produces this diagnostic when a URI in a directive doesn't
       conform to the syntax of a valid URI.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `'#'` isn't a valid
       URI:
@@ -6695,7 +6706,7 @@
       The analyzer produces this diagnostic when an extension override is used to
       invoke a function but the extension doesn't declare a `call` method.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the extension `E`
       doesn't define a `call` method:
@@ -6741,7 +6752,7 @@
       but the name of the function being invoked is defined to be something other
       than a function.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `Binary` is the name of
       a function type, not a function:
@@ -7037,7 +7048,7 @@
       The analyzer produces this diagnostic when the type of an element in a list
       literal isn't assignable to the element type of the list.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `2.5` is a double, and
       the list can hold only integers:
@@ -7214,7 +7225,7 @@
       The analyzer produces this diagnostic when a map entry (a key/value pair)
       is found in a set literal.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the literal has a map
       entry even though it's a set literal:
@@ -7256,7 +7267,7 @@
       The analyzer produces this diagnostic when a key of a key-value pair in a
       map literal has a type that isn't assignable to the key type of the map.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `2` is an `int`, but
       the keys of the map are required to be `String`s:
@@ -7290,10 +7301,10 @@
       #### Description
 
       The analyzer produces this diagnostic when a value of a key-value pair in a
-      map literal has a type that isn't assignable to the the value type of the
+      map literal has a type that isn't assignable to the value type of the
       map.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `2` is an `int`, but/
       the values of the map are required to be `String`s:
@@ -7358,7 +7369,7 @@
       parameter doesn't allow the parameter to have a value of `null`, then the
       implicit default value isn't valid.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `x` can't be `null`,
       and no non-`null` default value is specified:
@@ -7822,7 +7833,7 @@
       The analyzer produces this diagnostic when a name in a `with` clause is
       defined to be something other than a mixin or a class.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `F` is defined to be a
       function type:
@@ -7857,7 +7868,7 @@
       The analyzer produces this diagnostic when a type following the `on`
       keyword in a mixin declaration is neither a class nor a mixin.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `F` is neither a class
       nor a mixin:
@@ -8001,7 +8012,7 @@
       invoked on a class that defines named constructors but the class doesn’t
       have an unnamed constructor.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `A` doesn't define an
       unnamed constructor:
@@ -8075,7 +8086,7 @@
       more abstract members, and doesn't provide or inherit an implementation for
       at least one of those abstract members.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the class `B` doesn't
       have a concrete implementation of `m`:
@@ -8158,7 +8169,7 @@
       The analyzer produces this diagnostic when a condition, such as an `if` or
       `while` loop, doesn't have the static type `bool`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` has the static type
       `int`:
@@ -8193,7 +8204,7 @@
       The analyzer produces this diagnostic when the first expression in an
       assert has a type other than `bool`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the type of `p` is
       `int`, but a `bool` is required:
@@ -8224,7 +8235,7 @@
       The analyzer produces this diagnostic when the operand of the unary
       negation operator (`!`) doesn't have the type `bool`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` is an `int` when it
       must be a `bool`:
@@ -8254,7 +8265,7 @@
       The analyzer produces this diagnostic when one of the operands of either
       the `&&` or `||` operator doesn't have the type `bool`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `a` isn't a Boolean
       value:
@@ -8325,7 +8336,7 @@
       The analyzer produces this diagnostic when the expression in a `case`
       clause isn't a constant expression.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `j` isn't a constant:
 
@@ -8447,7 +8458,7 @@
       named or positional, has a default value that isn't a compile-time
       constant.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -8544,7 +8555,7 @@
       explicitly (because it's prefixed by the `const` keyword) or implicitly
       (because it appears in a [constant context][]).
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` isn't a constant,
       even though it appears in an implicitly constant list literal:
@@ -8632,7 +8643,7 @@
       The analyzer produces this diagnostic when a key in a constant map literal
       isn't a constant value.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic beause `a` isn't a constant:
 
@@ -8668,7 +8679,7 @@
       The analyzer produces this diagnostic when a value in a constant map
       literal isn't a constant value.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `a` isn't a constant:
 
@@ -8704,7 +8715,7 @@
       The analyzer produces this diagnostic when a constant set literal contains
       an element that isn't a compile-time constant.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `i` isn't a constant:
 
@@ -8862,7 +8873,7 @@
       The analyzer produces this diagnostic when an identifier that isn't a type
       is used as a type argument.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` is a variable, not
       a type:
@@ -8893,7 +8904,7 @@
       The analyzer produces this diagnostic when the identifier following the
       `on` in a `catch` clause is defined to be something other than a type.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` is a function, not
       a type:
@@ -9003,7 +9014,7 @@
       - The analyzer can't prove that the local variable will be assigned before
         the reference based on the specification of [definite assignment][].
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `x` can't have a value
       of `null`, but is referenced before a value was assigned to it:
@@ -9115,7 +9126,7 @@
       The analyzer produces this diagnostic when a name is used as a type but
       declared to be something other than a type.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` is a function:
 
@@ -9129,6 +9140,7 @@
       Replace the name with the name of a type.
   NOT_BINARY_OPERATOR:
     problemMessage: "'{0}' isn't a binary operator."
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the operator that is not a binary operator.
@@ -9169,7 +9181,7 @@
       has fewer positional arguments than the number of required positional
       parameters.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` declares two
       required parameters, but only one argument is provided:
@@ -9207,7 +9219,7 @@
       - Doesn't have an initializer
       - Isn't marked as `late`
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `x` is implicitly
       initialized to `null` when it isn't allowed to be `null`:
@@ -9290,7 +9302,7 @@
       initialized to `null`, but the type of the field or variable doesn't allow
       it to be set to `null`, so an explicit initializer must be provided.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the field `f` can't be
       initialized to `null`:
@@ -9349,7 +9361,7 @@
       expression of a spread element that appears in either a list literal or a
       set literal doesn't implement the type `Iterable`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -9378,7 +9390,7 @@
       expression of a spread element that appears in a map literal doesn't
       implement the type `Map`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `l` isn't a `Map`:
 
@@ -9412,7 +9424,7 @@
       variable. To create an instance of the class, the identifier must be
       followed by an argument list.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `C` is a class, and a
       class can't be used as an annotation without invoking a `const` constructor
@@ -9812,7 +9824,7 @@
       The analyzer produces this diagnostic when a part directive is found and
       the referenced file doesn't have a part-of directive.
 
-      #### Examples
+      #### Example
 
       Given a file (`a.dart`) containing:
 
@@ -10120,7 +10132,7 @@
       The analyzer produces this diagnostic when a constructor redirects to
       itself, either directly or indirectly, creating an infinite loop.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the generative
       constructors `C.a` and `C.b` each redirect to the other:
@@ -10467,7 +10479,7 @@
       to a constructor whose return type isn't a subtype of the type that the
       factory constructor is declared to produce.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `A` isn't a subclass
       of `C`, which means that the value returned by the constructor `A()`
@@ -10532,7 +10544,7 @@
       produces this diagnostic when the redirect is to something other than a
       constructor.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` is a function:
 
@@ -10609,6 +10621,7 @@
   REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
     problemMessage: "A redirecting constructor can't redirect to a type alias that expands to a type parameter."
     correctionMessage: Try replacing it with a class.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -10662,7 +10675,7 @@
       The analyzer also produces a context message that indicates where the
       declaration is located.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `i` is used before it
       is declared:
@@ -10811,7 +10824,7 @@
       statement to return a value or implicitly returns a value because of using
       `=>`. In any of these cases, they should use `yield` instead of `return`.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the method `f` is a
       generator and is using `return` to return a value:
@@ -10881,7 +10894,7 @@
       The analyzer produces this diagnostic when a method or function returns a
       value whose type isn't assignable to the declared return type.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` has a return type
       of `String` but is returning an `int`:
@@ -10927,7 +10940,7 @@
       expression isn't assignable to the return type that the closure is required
       to have.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` is defined to be a
       function that returns a `String`, but the closure assigned to it returns an
@@ -10955,7 +10968,7 @@
       The analyzer produces this diagnostic when it finds a `return` statement
       without an expression in a function that declares a return type.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the function `f` is
       expected to return an `int`, but no value is being returned:
@@ -11072,7 +11085,7 @@
       an instance field. Instance fields don't exist on a class; they exist only
       on an instance of the class.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` is an instance
       field:
@@ -11192,7 +11205,7 @@
       are all restricted in this way, to allow for more efficient
       implementations.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `String` is used in an
       `extends` clause:
@@ -11327,7 +11340,7 @@
       extension uses the `super` keyword . Extensions aren't classes and don't
       have superclasses, so the `super` keyword serves no purpose.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `super` can't be used
       in an extension:
@@ -11357,7 +11370,7 @@
       The analyzer produces this diagnostic when the keyword `super` is used
       outside of a instance method.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `super` is used in a
       top-level function:
@@ -11473,6 +11486,7 @@
   TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS:
     problemMessage: "A generative constructor of an abstract class can't be torn off."
     correctionMessage: Try tearing off a constructor of a concrete class, or a non-generative constructor.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -11670,7 +11684,7 @@
       The analyzer produces this diagnostic when a type argument isn't the same
       as or a subclass of the bounds of the corresponding type parameter.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `String` isn't a
       subclass of `num`:
@@ -11752,7 +11766,7 @@
       as itself or a subtype of itself or a subtype of itself isn't helpful
       because it will always be the same as itself.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the bound of `T` is
       `T`:
@@ -11846,7 +11860,7 @@
       The analyzer produces this diagnostic when the name following the `is` in a
       type test expression isn't defined.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the name `Srting` isn't
       defined:
@@ -11978,7 +11992,7 @@
       The analyzer produces this diagnostic when a name that isn't defined is
       used as an annotation.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the name `undefined`
       isn't defined:
@@ -12023,7 +12037,7 @@
       appears to be the name of a class but either isn't defined or isn't visible
       in the scope in which it's being referenced.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `Piont` isn't defined:
 
@@ -12149,7 +12163,7 @@
       appears to be the name of an enum constant, and the name either isn't
       defined or isn't visible in the scope in which it's being referenced.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `E` doesn't define a
       constant named `c`:
@@ -12536,7 +12550,7 @@
       appears to be the name of a function but either isn't defined or isn't
       visible in the scope in which it's being referenced.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the name `emty` isn't
       defined:
@@ -12580,7 +12594,7 @@
       appears to be the name of a getter but either isn't defined or isn't
       visible in the scope in which it's being referenced.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `String` has no member
       named `len`:
@@ -12622,7 +12636,7 @@
       either isn't defined or isn't visible in the scope in which it's being
       referenced.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the name `rihgt` isn't
       defined:
@@ -12688,7 +12702,7 @@
       appears to be the name of a method but either isn't defined or isn't
       visible in the scope in which it's being referenced.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the identifier
       `removeMiddle` isn't defined:
@@ -12729,7 +12743,7 @@
       has a named argument, but the method or function being invoked doesn't
       define a parameter with the same name.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `m` doesn't declare a
       named parameter named `a`:
@@ -12805,7 +12819,7 @@
       The analyzer produces this diagnostic when a user-definable operator is
       invoked on an object for which the operator isn't defined.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the class `C` doesn't
       define the operator `+`:
@@ -12839,7 +12853,7 @@
       where the prefix is valid, but the identifier isn't declared in any of the
       libraries imported using that prefix.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `dart:core` doesn't
       define anything named `a`:
@@ -12874,7 +12888,7 @@
       appears to be the name of a setter but either isn't defined or isn't
       visible in the scope in which the identifier is being referenced.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because there isn't a setter
       named `z`:
@@ -13050,7 +13064,7 @@
       the name is the same as a static member of the extended type or one of its
       superclasses.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `m` is a static member
       of the extended type `C`:
@@ -13113,7 +13127,7 @@
       The analyzer produces this diagnostic when an import, export, or part
       directive is found where the URI refers to a file that doesn't exist.
 
-      #### Examples
+      #### Example
 
       If the file `lib.dart` doesn't exist, the following code produces this
       diagnostic:
@@ -13148,7 +13162,7 @@
       - `.pbjson.dart`
       - `.template.dart`
 
-      #### Examples
+      #### Example
 
       If the file `lib.g.dart` doesn't exist, the following code produces this
       diagnostic:
@@ -13197,6 +13211,30 @@
 
       var zero = min(0, 0);
       ```
+  USE_OF_NATIVE_EXTENSION:
+    problemMessage: Dart native extensions are deprecated and aren’t available in Dart 2.15.
+    correctionMessage: "Try using dart:ffi for C interop."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a library is imported using the
+      `dart-ext` scheme.
+
+      #### Example
+
+      The following code produces this diagnostic because the native library `x`
+      is being imported using a scheme of `dart-ext`:
+
+      ```dart
+      import [!'dart-ext:x'!];
+      ```
+
+      #### Common fixes
+
+      Rewrite the code to use `dart:ffi` as a way of invoking the contents of the
+      native library.
   USE_OF_VOID_RESULT:
     problemMessage: "This expression has a type of 'void' so its value can't be used."
     correctionMessage: "Try checking to see if you're using the correct API; there might be a function or call that returns void you didn't expect. Also check type parameters and variables which might also be void."
@@ -13210,7 +13248,7 @@
       expected, such as before a member access or on the right-hand side of an
       assignment.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` doesn't produce an
       object on which `toString` can be invoked:
@@ -13241,7 +13279,7 @@
       The analyzer produces this diagnostic when the evaluation of a constant
       expression would result in a `CastException`.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the value of `x` is an
       `int`, which can't be assigned to `y` because an `int` isn't a `String`:
@@ -13304,7 +13342,7 @@
       The analyzer produces this diagnostic when a declaration of an operator has
       the wrong number of parameters.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the operator `+` must
       have a single parameter corresponding to the right operand:
@@ -13637,7 +13675,7 @@
       appears in a function whose body isn't marked with one of the `async*` or
       `sync*` modifiers.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `yield` is being used
       in a function whose body doesn't have a modifier:
@@ -13739,11 +13777,12 @@
     correctionMessage: "Try allocating it via allocation, or load from a 'Pointer'."
     comment: No parameters.
   EMPTY_STRUCT:
-    problemMessage: "Struct '{0}' is empty. Empty structs are undefined behavior."
-    correctionMessage: "Try adding a field to '{0}' or use a different Struct."
+    problemMessage: "The class '{0}' can’t be empty because it's a subclass of '{1}'."
+    correctionMessage: "Try adding a field to '{0}' or use a different superclass."
     comment: |-
       Parameters:
-      0: the name of the struct class
+      0: the name of the subclass
+      1: the name of the superclass
   EXTRA_ANNOTATION_ON_STRUCT_FIELD:
     problemMessage: Fields in a struct class must have exactly one annotation indicating the native type.
     correctionMessage: Try removing the extra annotation.
@@ -13752,10 +13791,28 @@
     problemMessage: "'Array's must have exactly one 'Array' annotation."
     correctionMessage: Try removing the extra annotation.
     comment: No parameters.
-  FFI_NATIVE_ONLY_STATIC:
-    problemMessage: FfiNative annotations can only be used on static functions.
-    correctionMessage: Change the method to static.
+  FFI_NATIVE_MUST_BE_EXTERNAL:
+    problemMessage: FfiNative functions must be declared external.
+    correctionMessage: Add the `external` keyword to the function.
     comment: No parameters.
+  FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER:
+    problemMessage: Only classes extending NativeFieldWrapperClass1 can be passed as Pointer.
+    correctionMessage: Pass as Handle instead.
+    comment: No parameters.
+  FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS:
+    problemMessage: Unexpected number of FfiNative annotation parameters. Expected {0} but has {1}.
+    correctionMessage: Make sure parameters match the function annotated.
+    comment: |-
+      Parameters:
+      0: the expected number of parameters
+      1: the actual number of parameters
+  FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER:
+    problemMessage: Unexpected number of FfiNative annotation parameters. Expected {0} but has {1}. FfiNative instance method annotation must have receiver as first argument.
+    correctionMessage: Make sure parameters match the function annotated, including an extra first parameter for the receiver.
+    comment: |-
+      Parameters:
+      0: the expected number of parameters
+      1: the actual number of parameters
   FIELD_INITIALIZER_IN_STRUCT:
     problemMessage: "Constructors in subclasses of 'Struct' and 'Union' can't have field initializers."
     correctionMessage: Try removing the field initializer and marking the field as external.
@@ -13836,8 +13893,8 @@
       Parameters:
       0: the name of the function, method, or constructor having type arguments
   NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER:
-    problemMessage: "The type argument for the pointer '{0}' must be a 'NativeFunction' in order to use 'asFunction'."
-    correctionMessage: "Try changing the type argument to be a 'NativeFunction'."
+    problemMessage: "The type argument for the pointer '{0}' must be a valid 'NativeFunction' in order to use 'asFunction'."
+    correctionMessage: "Try changing the function argument in 'NativeFunction' to only use NativeTypes."
     comment: |-
       Parameters:
       0: the type that should be a valid dart:ffi native type.
@@ -13937,7 +13994,7 @@
       to have either a single parameter of type `Object` or two parameters of
       type `Object` and `StackTrace`.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the closure being
       passed to `catchError` doesn't take any parameters, but the function is
@@ -14004,7 +14061,7 @@
       The analyzer produces this diagnostic when code is found that won't be
       executed because execution will never reach the code.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the invocation of
       `print` occurs after the function has returned:
@@ -14064,7 +14121,7 @@
       the thrown object is selected, and both of those forms will match any
       object, so no `catch` clauses that follow them will be selected.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -14122,7 +14179,7 @@
       matches anything matchable by the highlighted clause, so the highlighted
       clause will never be selected.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -14175,7 +14232,7 @@
       The analyzer produces this diagnostic when a deprecated library or class
       member is used in a different package.
 
-      #### Examples
+      #### Example
 
       If the method `m` in the class `C` is annotated with `@deprecated`, then
       the following code produces this diagnostic:
@@ -14212,7 +14269,7 @@
       The analyzer produces this diagnostic when a deprecated library member or
       class member is used in the same package in which it's declared.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `x` is deprecated:
 
@@ -14236,6 +14293,10 @@
       Parameters:
       0: the name of the member
       1: message details
+  DEPRECATED_NEW_IN_COMMENT_REFERENCE:
+    problemMessage: "Using the 'new' keyword in a comment reference is deprecated."
+    correctionMessage: Try referring to a constructor by its name.
+    comment: No parameters.
   DEPRECATED_MIXIN_FUNCTION:
     sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
     problemMessage: "Mixing in 'Function' is deprecated."
@@ -14339,7 +14400,7 @@
       because it's already included in the same `ignore` comment or because it
       appears in an `ignore-in-file` comment.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the diagnostic named
       `unused_local_variable` is already being ignored for the whole file so it
@@ -14389,7 +14450,7 @@
       that is the same as an import before it in the file. The second import
       doesn’t add value and should be removed.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -14909,14 +14970,13 @@
       var x;
       ```
   INVALID_NON_VIRTUAL_ANNOTATION:
-    problemMessage: "The member '{0}' can't be '@nonVirtual' because it isn't a concrete instance member."
+    problemMessage: "The annotation '@nonVirtual' can only be applied to a concrete instance member."
     correctionMessage: Try removing @nonVirtual.
     comment: |-
       This hint is generated anywhere where `@nonVirtual` annotates something
       other than a non-abstract instance member in a class or mixin.
 
-      Parameters:
-      0: the name of the member
+      No Parameters.
   INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER:
     problemMessage: "The member '{0}' is declared non-virtual in '{1}' and can't be overridden in subclasses."
     comment: |-
@@ -14978,7 +15038,7 @@
       `catchError` attempts to return the value from the callback as the result
       of the future, which results in another exception being thrown.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `future` is declared to
       return an `int` while `callback` is declared to return a `String`, and
@@ -15020,14 +15080,13 @@
       }
       ```
   INVALID_SEALED_ANNOTATION:
-    problemMessage: "The member '{0}' is annotated with '@sealed' but only classes can be annotated with it."
+    problemMessage: "The annotation '@sealed' can only be applied to classes."
     correctionMessage: Remove @sealed.
     comment: |-
       This hint is generated anywhere where `@sealed` annotates something other
       than a class.
 
-      Parameters:
-      0: the name of the member
+      No parameters.
   INVALID_USE_OF_INTERNAL_MEMBER:
     problemMessage: "The member '{0}' can only be used within its package."
     comment: |-
@@ -15047,6 +15106,7 @@
       1: the name of the defining class
   INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER:
     problemMessage: "The member '{0}' can only be used for overriding."
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the member
@@ -15122,7 +15182,7 @@
       The analyzer produces this diagnostic when either the `@visibleForTemplate`
       or `@visibleForTesting` annotation is applied to a non-public declaration.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -15157,7 +15217,8 @@
       void f() => someFunction();
       ```
   INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION:
-    problemMessage: "The declaration '{0}' is annotated with 'visibleForOverriding'. Because '{0}' isn't an interface member that could be overridden, the annotation is meaningless."
+    problemMessage: "The annotation 'visibleForOverriding' can only be applied to a public instance member that can be overridden."
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -15186,12 +15247,6 @@
       ```dart
       class C {}
       ```
-  MISSING_JS_LIB_ANNOTATION:
-    problemMessage: The @JS() annotation can only be used if it is also declared on the library directive.
-    correctionMessage: Try adding the annotation to the library directive.
-    comment: |-
-      Generate a hint for an element that is annotated with `@JS(...)` whose
-      library declaration is not similarly annotated.
   MISSING_REQUIRED_PARAM:
     problemMessage: "The parameter '{0}' is required."
     hasPublishedDocs: true
@@ -15208,7 +15263,7 @@
       named parameter that is annotated as being required is invoked without
       providing a value for the parameter.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the named parameter `x`
       is required:
@@ -15263,7 +15318,7 @@
       throw implicitly returns `null`. This is rarely the desired behavior. The
       analyzer produces this diagnostic when it finds an implicit return.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `f` doesn't end with a
       return:
@@ -15299,7 +15354,7 @@
       Classes that are sealed can't be extended, implemented, mixed in, or used
       as a superclass constraint.
 
-      #### Examples
+      #### Example
 
       If the package `p` defines a sealed class:
 
@@ -15339,7 +15394,7 @@
       marked as being immutable using the annotation `@immutable` or if it's a
       subclass of an immutable class.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the field `x` isn't
       final:
@@ -15395,7 +15450,7 @@
       that is annotated as `@mustCallSuper` doesn't invoke the overridden method
       as required.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the method `m` in `B`
       doesn't invoke the overridden method `m` in `A`:
@@ -15463,7 +15518,7 @@
       that the constructor should be used to create a constant value whenever
       possible.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic:
 
@@ -15534,6 +15589,7 @@
   NULL_ARGUMENT_TO_NON_NULL_TYPE:
     problemMessage: "'{0}' shouldn't be called with a null argument for the non-nullable type argument '{1}'."
     correctionMessage: Try adding a non-null argument.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the method being invoked
@@ -15623,7 +15679,7 @@
       the `@override` annotation, but the member isn’t declared in any of the
       supertypes of the class.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `m` isn't declared in
       any of the supertypes of `C`:
@@ -15703,7 +15759,7 @@
       earlier versions, these classes weren't defined in `dart:core`, so the
       import was necessary.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.1.0:
@@ -15753,7 +15809,7 @@
       [constant context][] wasn't supported in earlier versions, so this code
       won't be able to run against earlier versions of the SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.3.2:
@@ -15805,7 +15861,7 @@
       versions, so this code won't be able to run against earlier versions of the
       SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.3.2:
@@ -15847,6 +15903,7 @@
   SDK_VERSION_CONSTRUCTOR_TEAROFFS:
     problemMessage: "Tearing off a constructor requires the 'constructor-tearoffs' language feature."
     correctionMessage: "Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'."
+    hasPublishedDocs: true
     comment: |-
       No parameters.
 
@@ -15912,7 +15969,7 @@
       in a [constant context][] wasn't supported in earlier versions, so this
       code won't be able to run against earlier versions of the SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.3.2:
@@ -15969,7 +16026,7 @@
       versions, so this code won't be able to run against earlier versions of the
       SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.6.0:
@@ -16014,6 +16071,7 @@
   SDK_VERSION_GT_GT_GT_OPERATOR:
     problemMessage: "The operator '>>>' wasn't supported until version 2.14.0, but this code is required to be able to run on earlier versions."
     correctionMessage: Try updating the SDK constraints.
+    hasPublishedDocs: true
     comment: No parameters.
     documentation: |-
       #### Description
@@ -16023,7 +16081,7 @@
       operator wasn't supported in earlier versions, so this code won't be able
       to run against earlier versions of the SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.14.0:
@@ -16079,7 +16137,7 @@
       [constant context][] wasn't supported in earlier versions, so this code
       won't be able to run against earlier versions of the SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.3.2:
@@ -16130,7 +16188,7 @@
       2.12.0. This class wasn't defined in earlier versions, so this code won't
       be able to run against earlier versions of the SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.12.0:
@@ -16178,7 +16236,7 @@
       literals weren't supported in earlier versions, so this code won't be able
       to run against earlier versions of the SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.2.0:
@@ -16226,7 +16284,7 @@
       versions, so this code won't be able to run against earlier versions of the
       SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.3.0:
@@ -16282,7 +16340,7 @@
       [constant context][] wasn't supported in earlier versions, so this code
       won't be able to run against earlier versions of the SDK.
 
-      #### Examples
+      #### Example
 
       Here's an example of a pubspec that defines an SDK constraint with a lower
       bound of less than 2.5.0:
@@ -16402,7 +16460,7 @@
       is `Null`, so the code is both more readable and more performant when it
       tests for `null` explicitly.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because the code is testing to
       see whether the value of `s` is `null` by using a type check:
@@ -16460,7 +16518,7 @@
       The analyzer produces this diagnostic when a hide combinator includes a
       name that isn't defined by the library being imported.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `dart:math` doesn't
       define the name `String`:
@@ -16483,6 +16541,7 @@
       ```
   UNDEFINED_REFERENCED_PARAMETER:
     problemMessage: "The parameter '{0}' is not defined by '{1}'."
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the undefined parameter
@@ -16531,7 +16590,7 @@
       The analyzer produces this diagnostic when a show combinator includes a
       name that isn't defined by the library being imported.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `dart:math` doesn't
       define the name `String`:
@@ -16569,7 +16628,7 @@
       The analyzer produces this diagnostic when the value being cast is already
       known to be of the type that it's being cast to.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `n` is already known to
       be an `int` as a result of the `is` test:
@@ -16602,6 +16661,7 @@
   UNNECESSARY_IMPORT:
     problemMessage: "The import of '{0}' is unnecessary because all of the used elements are also provided by the import of '{1}'."
     correctionMessage: Try removing the import directive.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the uri that is not necessary
@@ -16712,7 +16772,7 @@
       can't be `null`. Such comparisons are always either `true` or `false`, so
       they serve no purpose.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `x` can never be
       `null`, so the comparison always evaluates to `true`:
@@ -16764,6 +16824,7 @@
     comment: No parameters.
   UNNECESSARY_QUESTION_MARK:
     problemMessage: "The '?' is unnecessary because '{0}' is nullable without it."
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the type
@@ -16846,7 +16907,7 @@
       neither the exception parameter nor the optional stack trace parameter are
       used in the `catch` block.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `e` isn't referenced:
 
@@ -16886,7 +16947,7 @@
       The analyzer produces this diagnostic when the stack trace parameter in a
       `catch` clause isn't referenced within the body of the `catch` block.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because `stackTrace` isn't
       referenced:
@@ -16934,7 +16995,7 @@
       - Optional parameters of private functions for which a value is never
         passed, even when the parameter doesn't have a private name
 
-      #### Examples
+      #### Example
 
       Assuming that no code in the library references `_C`, the following code
       produces this diagnostic:
@@ -16989,7 +17050,7 @@
       The analyzer produces this diagnostic when a private field is declared but
       never read, even if it's written in one or more places.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the field
       `_originalValue` isn't read anywhere in the library:
@@ -17028,7 +17089,7 @@
       none of the names that are imported are referenced within the importing
       library.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because nothing defined in
       `dart:async` is referenced in the library:
@@ -17058,7 +17119,7 @@
       The analyzer produces this diagnostic when a label that isn't used is
       found.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the label `loop` isn't
       referenced anywhere in the method:
@@ -17107,7 +17168,7 @@
       The analyzer produces this diagnostic when a local variable is declared but
       never read, even if it's written in one or more places.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the value of `count` is
       never read:
@@ -17126,6 +17187,7 @@
   UNUSED_RESULT:
     problemMessage: "The value of '{0}' should be used."
     correctionMessage: Try using the result by invoking a member, passing it to a function, or returning it from this function.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the annotated method, property or function
@@ -17200,6 +17262,7 @@
     sharedName: UNUSED_RESULT
     problemMessage: "'{0}' should be used. {1}."
     correctionMessage: Try using the result by invoking a member, passing it to a function, or returning it from this function.
+    hasPublishedDocs: true
     comment: |-
       The result of invoking a method, property, or function annotated with
       `@useResult` must be used (assigned, passed to a function as an argument,
@@ -17222,7 +17285,7 @@
       name that isn't used within the library. Because it isn't referenced, the
       name can be removed.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the function `max`
       isn't used:
@@ -17242,30 +17305,6 @@
 
       var x = min(0, 1);
       ```
-  USE_OF_NATIVE_EXTENSION:
-    problemMessage: Dart native extensions are deprecated and aren’t available in Dart 2.15.
-    correctionMessage: "Try using dart:ffi for C interop."
-    comment: No parameters.
-    documentation: |-
-      #### Description
-
-      The analyzer produces this diagnostic when a library is imported using the
-      `dart-ext` scheme.
-
-      #### Example
-
-      The following code produces this diagnostic because the native library `x`
-      is being imported using a scheme of `dart-ext`:
-
-      ```dart
-      [!import 'dart-ext:x';!]
-      int f() native 'string';
-      ```
-
-      #### Common fixes
-
-      Rewrite the code to use `dart:ffi` as a way of invoking the contents of the
-      native library.
 LanguageCode:
   IMPLICIT_DYNAMIC_FIELD:
     problemMessage: "Missing field type for '{0}'."
@@ -17335,17 +17374,9 @@
       A code indicating that a specified hardware feature is not supported on
       Chrome OS.
 ParserErrorCode:
-  ABSTRACT_CLASS_MEMBER:
-    copyFromCfe: true
   ABSTRACT_ENUM:
     problemMessage: "Enums can't be declared to be 'abstract'."
     correctionMessage: "Try removing the keyword 'abstract'."
-  ABSTRACT_EXTERNAL_FIELD:
-    copyFromCfe: true
-  ABSTRACT_LATE_FIELD:
-    copyFromCfe: true
-  ABSTRACT_STATIC_FIELD:
-    copyFromCfe: true
   ABSTRACT_STATIC_METHOD:
     problemMessage: "Static methods can't be declared to be 'abstract'."
     correctionMessage: "Try removing the keyword 'abstract'."
@@ -17358,64 +17389,24 @@
   ABSTRACT_TYPEDEF:
     problemMessage: "Typedefs can't be declared to be 'abstract'."
     correctionMessage: "Try removing the keyword 'abstract'."
-  ANNOTATION_ON_TYPE_ARGUMENT:
-    copyFromCfe: true
-  ANNOTATION_WITH_TYPE_ARGUMENTS:
-    copyFromCfe: true
-  ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED:
-    copyFromCfe: true
   ASYNC_KEYWORD_USED_AS_IDENTIFIER:
     problemMessage: "The keywords 'await' and 'yield' can't be used as identifiers in an asynchronous or generator function."
     comment: |-
       16.32 Identifier Reference: It is a compile-time error if any of the
       identifiers async, await, or yield is used as an identifier in a function
       body marked with either async, async, or sync.
-  BINARY_OPERATOR_WRITTEN_OUT:
-    copyFromCfe: true
-  BREAK_OUTSIDE_OF_LOOP:
-    copyFromCfe: true
-  CATCH_SYNTAX:
-    copyFromCfe: true
-  CATCH_SYNTAX_EXTRA_PARAMETERS:
-    copyFromCfe: true
-  CLASS_IN_CLASS:
-    copyFromCfe: true
-  COLON_IN_PLACE_OF_IN:
-    copyFromCfe: true
-  CONFLICTING_MODIFIERS:
-    copyFromCfe: true
-  CONSTRUCTOR_WITH_RETURN_TYPE:
-    copyFromCfe: true
-  CONSTRUCTOR_WITH_TYPE_ARGUMENTS:
-    copyFromCfe: true
-  CONST_AND_FINAL:
-    copyFromCfe: true
-  CONST_CLASS:
-    copyFromCfe: true
   CONST_CONSTRUCTOR_WITH_BODY:
     problemMessage: "Const constructors can't have a body."
     correctionMessage: "Try removing either the 'const' keyword or the body."
   CONST_ENUM:
     problemMessage: "Enums can't be declared to be 'const'."
     correctionMessage: "Try removing the 'const' keyword."
-  CONST_FACTORY:
-    copyFromCfe: true
-  CONST_METHOD:
-    copyFromCfe: true
   CONST_TYPEDEF:
     problemMessage: "Type aliases can't be declared to be 'const'."
     correctionMessage: "Try removing the 'const' keyword."
-  CONTINUE_OUTSIDE_OF_LOOP:
-    copyFromCfe: true
-  CONTINUE_WITHOUT_LABEL_IN_CASE:
-    copyFromCfe: true
-  COVARIANT_AND_STATIC:
-    copyFromCfe: true
   COVARIANT_CONSTRUCTOR:
     problemMessage: "A constructor can't be declared to be 'covariant'."
     correctionMessage: "Try removing the keyword 'covariant'."
-  COVARIANT_MEMBER:
-    copyFromCfe: true
   COVARIANT_TOP_LEVEL_DECLARATION:
     problemMessage: "Top-level declarations can't be declared to be covariant."
     correctionMessage: "Try removing the keyword 'covariant'."
@@ -17450,48 +17441,18 @@
       void f(void Function([int p]) g) {
       }
       ```
-  DEFERRED_AFTER_PREFIX:
-    copyFromCfe: true
-  DIRECTIVE_AFTER_DECLARATION:
-    copyFromCfe: true
-  DUPLICATED_MODIFIER:
-    copyFromCfe: true
-    comment: |-
-      Parameters:
-      0: the modifier that was duplicated
-  DUPLICATE_DEFERRED:
-    copyFromCfe: true
-  DUPLICATE_LABEL_IN_SWITCH_STATEMENT:
-    copyFromCfe: true
-    comment: |-
-      Parameters:
-      0: the label that was duplicated
-  DUPLICATE_PREFIX:
-    copyFromCfe: true
   EMPTY_ENUM_BODY:
     problemMessage: An enum must declare at least one constant name.
     correctionMessage: Try declaring a constant.
-  ENUM_IN_CLASS:
-    copyFromCfe: true
-  EQUALITY_CANNOT_BE_EQUALITY_OPERAND:
-    copyFromCfe: true
-  EXPECTED_BODY:
-    copyFromCfe: true
   EXPECTED_CASE_OR_DEFAULT:
     problemMessage: "Expected 'case' or 'default'."
     correctionMessage: Try placing this code inside a case clause.
   EXPECTED_CLASS_MEMBER:
     problemMessage: Expected a class member.
     correctionMessage: Try placing this code inside a class member.
-  EXPECTED_ELSE_OR_COMMA:
-    copyFromCfe: true
   EXPECTED_EXECUTABLE:
     problemMessage: Expected a method, getter, setter or operator declaration.
     correctionMessage: This appears to be incomplete code. Try removing it or completing it.
-  EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD:
-    copyFromCfe: true
-  EXPECTED_INSTEAD:
-    copyFromCfe: true
   EXPECTED_LIST_OR_MAP_LITERAL:
     problemMessage: Expected a list or map literal.
     correctionMessage: Try inserting a list or map literal, or remove the type arguments.
@@ -17504,133 +17465,21 @@
       0: the token that was expected but not found
   EXPECTED_TYPE_NAME:
     problemMessage: Expected a type name.
-  EXPERIMENT_NOT_ENABLED:
-    copyFromCfe: true
-  EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
-    copyFromCfe: true
-  EXTENSION_DECLARES_ABSTRACT_MEMBER:
-    copyFromCfe: true
-    comment: No parameters.
-    documentation: |-
-      #### Description
-
-      The analyzer produces this diagnostic when an abstract declaration is
-      declared in an extension. Extensions can declare only concrete members.
-
-      #### Examples
-
-      The following code produces this diagnostic because the method `a` doesn't
-      have a body:
-
-      ```dart
-      extension E on String {
-        int [!a!]();
-      }
-      ```
-
-      #### Common fixes
-
-      Either provide an implementation for the member or remove it.
-  EXTENSION_DECLARES_CONSTRUCTOR:
-    copyFromCfe: true
-    comment: No parameters.
-    documentation: |-
-      #### Description
-
-      The analyzer produces this diagnostic when a constructor declaration is
-      found in an extension. It isn't valid to define a constructor because
-      extensions aren't classes, and it isn't possible to create an instance of
-      an extension.
-
-      #### Examples
-
-      The following code produces this diagnostic because there is a constructor
-      declaration in `E`:
-
-      ```dart
-      extension E on String {
-        [!E!]() : super();
-      }
-      ```
-
-      #### Common fixes
-
-      Remove the constructor or replace it with a static method.
-  EXTENSION_DECLARES_INSTANCE_FIELD:
-    copyFromCfe: true
-    comment: No parameters.
-    documentation: |-
-      #### Description
-
-      The analyzer produces this diagnostic when an instance field declaration is
-      found in an extension. It isn't valid to define an instance field because
-      extensions can only add behavior, not state.
-
-      #### Examples
-
-      The following code produces this diagnostic because `s` is an instance
-      field:
-
-      ```dart
-      %language=2.9
-      extension E on String {
-        String [!s!];
-      }
-      ```
-
-      #### Common fixes
-
-      Remove the field, make it a static field, or convert it to be a getter,
-      setter, or method.
-  EXTERNAL_CLASS:
-    copyFromCfe: true
-  EXTERNAL_CONSTRUCTOR_WITH_BODY:
-    copyFromCfe: true
-  EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER:
-    copyFromCfe: true
-  EXTERNAL_ENUM:
-    copyFromCfe: true
-  EXTERNAL_FACTORY_REDIRECTION:
-    copyFromCfe: true
-  EXTERNAL_FACTORY_WITH_BODY:
-    copyFromCfe: true
-  EXTERNAL_FIELD:
-    copyFromCfe: true
   EXTERNAL_GETTER_WITH_BODY:
     problemMessage: "External getters can't have a body."
     correctionMessage: "Try removing the body of the getter, or removing the keyword 'external'."
-  EXTERNAL_LATE_FIELD:
-    copyFromCfe: true
-  EXTERNAL_METHOD_WITH_BODY:
-    copyFromCfe: true
   EXTERNAL_OPERATOR_WITH_BODY:
     problemMessage: "External operators can't have a body."
     correctionMessage: "Try removing the body of the operator, or removing the keyword 'external'."
   EXTERNAL_SETTER_WITH_BODY:
     problemMessage: "External setters can't have a body."
     correctionMessage: "Try removing the body of the setter, or removing the keyword 'external'."
-  EXTERNAL_TYPEDEF:
-    copyFromCfe: true
-  EXTRANEOUS_MODIFIER:
-    copyFromCfe: true
-  FACTORY_TOP_LEVEL_DECLARATION:
-    copyFromCfe: true
   FACTORY_WITHOUT_BODY:
     problemMessage: "A non-redirecting 'factory' constructor must have a body."
     correctionMessage: Try adding a body to the constructor.
   FACTORY_WITH_INITIALIZERS:
     problemMessage: "A 'factory' constructor can't have initializers."
     correctionMessage: "Try removing the 'factory' keyword to make this a generative constructor, or removing the initializers."
-  FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS:
-    copyFromCfe: true
-  FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR:
-    copyFromCfe: true
-  FINAL_AND_COVARIANT:
-    copyFromCfe: true
-  FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER:
-    copyFromCfe: true
-  FINAL_AND_VAR:
-    copyFromCfe: true
   FINAL_CLASS:
     problemMessage: "Classes can't be declared to be 'final'."
     correctionMessage: "Try removing the keyword 'final'."
@@ -17646,31 +17495,12 @@
   FINAL_TYPEDEF:
     problemMessage: "Typedefs can't be declared to be 'final'."
     correctionMessage: "Try removing the keyword 'final'."
-  FUNCTION_TYPED_PARAMETER_VAR:
-    problemMessage: "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type."
-    correctionMessage: Try replacing the keyword with a return type.
-  GETTER_CONSTRUCTOR:
-    copyFromCfe: true
   GETTER_IN_FUNCTION:
     problemMessage: "Getters can't be defined within methods or functions."
     correctionMessage: Try moving the getter outside the method or function, or converting the getter to a function.
   GETTER_WITH_PARAMETERS:
     problemMessage: Getters must be declared without a parameter list.
     correctionMessage: "Try removing the parameter list, or removing the keyword 'get' to define a method rather than a getter."
-  ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE:
-    copyFromCfe: true
-  IMPLEMENTS_BEFORE_EXTENDS:
-    copyFromCfe: true
-  IMPLEMENTS_BEFORE_ON:
-    copyFromCfe: true
-  IMPLEMENTS_BEFORE_WITH:
-    copyFromCfe: true
-  IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
-    copyFromCfe: true
-  INITIALIZED_VARIABLE_IN_FOR_EACH:
-    copyFromCfe: true
-  INVALID_AWAIT_IN_FOR:
-    copyFromCfe: true
   INVALID_CODE_POINT:
     problemMessage: "The escape sequence '{0}' isn't a valid code point."
     comment: |-
@@ -17678,23 +17508,12 @@
       0: the invalid escape sequence
   INVALID_COMMENT_REFERENCE:
     problemMessage: "Comment references should contain a possibly prefixed identifier and can start with 'new', but shouldn't contain anything else."
-  INVALID_CONSTRUCTOR_NAME:
-    copyFromCfe: true
   INVALID_GENERIC_FUNCTION_TYPE:
     problemMessage: Invalid generic function type.
     correctionMessage: "Try using a generic function type (returnType 'Function(' parameters ')')."
-  INVALID_HEX_ESCAPE:
-    copyFromCfe: true
-  INVALID_INITIALIZER:
-    copyFromCfe: true
   INVALID_LITERAL_IN_CONFIGURATION:
     problemMessage: "The literal in a configuration can't contain interpolation."
     correctionMessage: Try removing the interpolation expressions.
-  INVALID_OPERATOR:
-    copyFromCfe: true
-    comment: |-
-      Parameters:
-      0: the operator that is invalid
   INVALID_OPERATOR_FOR_SUPER:
     problemMessage: "The operator '{0}' can't be used with 'super'."
     comment: |-
@@ -17703,83 +17522,24 @@
 
       Only generated by the old parser.
       Replaced by INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER.
-  INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER:
-    copyFromCfe: true
   INVALID_STAR_AFTER_ASYNC:
     problemMessage: "The modifier 'async*' isn't allowed for an expression function body."
     correctionMessage: Try converting the body to a block.
-  INVALID_SUPER_IN_INITIALIZER:
-    copyFromCfe: true
   INVALID_SYNC:
     problemMessage: "The modifier 'sync' isn't allowed for an expression function body."
     correctionMessage: Try converting the body to a block.
-  INVALID_THIS_IN_INITIALIZER:
-    copyFromCfe: true
-  INVALID_UNICODE_ESCAPE:
-    copyFromCfe: true
-  INVALID_USE_OF_COVARIANT_IN_EXTENSION:
-    copyFromCfe: true
-    comment: No parameters.
-    documentation: |-
-      #### Description
-
-      The analyzer produces this diagnostic when a member declared inside an
-      extension uses the keyword `covariant` in the declaration of a parameter.
-      Extensions aren't classes and don't have subclasses, so the keyword serves
-      no purpose.
-
-      #### Examples
-
-      The following code produces this diagnostic because `i` is marked as being
-      covariant:
-
-      ```dart
-      extension E on String {
-        void a([!covariant!] int i) {}
-      }
-      ```
-
-      #### Common fixes
-
-      Remove the `covariant` keyword:
-
-      ```dart
-      extension E on String {
-        void a(int i) {}
-      }
-      ```
-  LIBRARY_DIRECTIVE_NOT_FIRST:
-    copyFromCfe: true
-  LITERAL_WITH_CLASS:
-    copyFromCfe: true
-  LITERAL_WITH_CLASS_AND_NEW:
-    copyFromCfe: true
-  LITERAL_WITH_NEW:
-    copyFromCfe: true
   LOCAL_FUNCTION_DECLARATION_MODIFIER:
     problemMessage: "Local function declarations can't specify any modifiers."
     correctionMessage: Try removing the modifier.
-  MEMBER_WITH_CLASS_NAME:
-    copyFromCfe: true
-  MISSING_ASSIGNABLE_SELECTOR:
-    copyFromCfe: true
-  MISSING_ASSIGNMENT_IN_INITIALIZER:
-    copyFromCfe: true
-  MISSING_CATCH_OR_FINALLY:
-    copyFromCfe: true
   MISSING_CLOSING_PARENTHESIS:
     problemMessage: The closing parenthesis is missing.
     correctionMessage: Try adding the closing parenthesis.
-  MISSING_CONST_FINAL_VAR_OR_TYPE:
-    copyFromCfe: true
   MISSING_ENUM_BODY:
     problemMessage: An enum definition must have a body with at least one constant name.
     correctionMessage: Try adding a body and defining at least one constant.
   MISSING_EXPRESSION_IN_INITIALIZER:
     problemMessage: Expected an expression after the assignment operator.
     correctionMessage: Try adding the value to be assigned, or remove the assignment operator.
-  MISSING_EXPRESSION_IN_THROW:
-    copyFromCfe: true
   MISSING_FUNCTION_BODY:
     problemMessage: A function body must be provided.
     correctionMessage: Try adding a function body.
@@ -17794,10 +17554,6 @@
     correctionMessage: "Try adding the keyword 'get'."
   MISSING_IDENTIFIER:
     problemMessage: Expected an identifier.
-  MISSING_INITIALIZER:
-    copyFromCfe: true
-  MISSING_KEYWORD_OPERATOR:
-    copyFromCfe: true
   MISSING_METHOD_PARAMETERS:
     problemMessage: Methods must have an explicit list of parameters.
     correctionMessage: Try adding a parameter list.
@@ -17810,13 +17566,9 @@
   MISSING_NAME_IN_PART_OF_DIRECTIVE:
     problemMessage: Part-of directives must include a library name.
     correctionMessage: "Try adding a library name after the 'of'."
-  MISSING_PREFIX_IN_DEFERRED_IMPORT:
-    copyFromCfe: true
   MISSING_STAR_AFTER_SYNC:
     problemMessage: "The modifier 'sync' must be followed by a star ('*')."
     correctionMessage: Try removing the modifier, or add a star.
-  MISSING_STATEMENT:
-    copyFromCfe: true
   MISSING_TERMINATOR_FOR_PARAMETER_GROUP:
     problemMessage: "There is no '{0}' to close the parameter group."
     correctionMessage: "Try inserting a '{0}' at the end of the group."
@@ -17832,24 +17584,12 @@
   MIXED_PARAMETER_GROUPS:
     problemMessage: "Can't have both positional and named parameters in a single parameter list."
     correctionMessage: Try choosing a single style of optional parameters.
-  MIXIN_DECLARES_CONSTRUCTOR:
-    copyFromCfe: true
-  MODIFIER_OUT_OF_ORDER:
-    copyFromCfe: true
-  MULTIPLE_EXTENDS_CLAUSES:
-    copyFromCfe: true
   MULTIPLE_IMPLEMENTS_CLAUSES:
     problemMessage: Each class or mixin definition can have at most one implements clause.
     correctionMessage: Try combining all of the implements clauses into a single clause.
-  MULTIPLE_LIBRARY_DIRECTIVES:
-    copyFromCfe: true
   MULTIPLE_NAMED_PARAMETER_GROUPS:
     problemMessage: "Can't have multiple groups of named parameters in a single parameter list."
     correctionMessage: Try combining all of the groups into a single group.
-  MULTIPLE_ON_CLAUSES:
-    copyFromCfe: true
-  MULTIPLE_PART_OF_DIRECTIVES:
-    copyFromCfe: true
   MULTIPLE_POSITIONAL_PARAMETER_GROUPS:
     problemMessage: "Can't have multiple groups of positional parameters in a single parameter list."
     correctionMessage: Try combining all of the groups into a single group.
@@ -17859,10 +17599,6 @@
     comment: |-
       Parameters:
       0: the number of variables being declared
-  MULTIPLE_VARIANCE_MODIFIERS:
-    copyFromCfe: true
-  MULTIPLE_WITH_CLAUSES:
-    copyFromCfe: true
   NAMED_FUNCTION_EXPRESSION:
     problemMessage: "Function expressions can't be named."
     correctionMessage: Try removing the name, or moving the function expression to a function declaration statement.
@@ -17875,8 +17611,6 @@
   NATIVE_CLAUSE_IN_NON_SDK_CODE:
     problemMessage: Native clause can only be used in the SDK and code that is loaded through native extensions.
     correctionMessage: Try removing the native clause.
-  NATIVE_CLAUSE_SHOULD_BE_ANNOTATION:
-    copyFromCfe: true
   NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE:
     problemMessage: Native functions can only be declared in the SDK and code that is loaded through native extensions.
     correctionMessage: "Try removing the word 'native'."
@@ -17900,60 +17634,24 @@
   NORMAL_BEFORE_OPTIONAL_PARAMETERS:
     problemMessage: Normal parameters must occur before optional parameters.
     correctionMessage: Try moving all of the normal parameters before the optional parameters.
-  NULL_AWARE_CASCADE_OUT_OF_ORDER:
-    copyFromCfe: true
   POSITIONAL_AFTER_NAMED_ARGUMENT:
     problemMessage: Positional arguments must occur before named arguments.
     correctionMessage: Try moving all of the positional arguments before the named arguments.
   POSITIONAL_PARAMETER_OUTSIDE_GROUP:
     problemMessage: "Positional parameters must be enclosed in square brackets ('[' and ']')."
     correctionMessage: Try surrounding the positional parameters in square brackets.
-  PREFIX_AFTER_COMBINATOR:
-    copyFromCfe: true
-  REDIRECTING_CONSTRUCTOR_WITH_BODY:
-    copyFromCfe: true
-  REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR:
-    copyFromCfe: true
-  SETTER_CONSTRUCTOR:
-    copyFromCfe: true
   SETTER_IN_FUNCTION:
     problemMessage: "Setters can't be defined within methods or functions."
     correctionMessage: Try moving the setter outside the method or function.
-  STACK_OVERFLOW:
-    copyFromCfe: true
-  STATIC_CONSTRUCTOR:
-    copyFromCfe: true
   STATIC_GETTER_WITHOUT_BODY:
     problemMessage: "A 'static' getter must have a body."
     correctionMessage: "Try adding a body to the getter, or removing the keyword 'static'."
-  STATIC_OPERATOR:
-    copyFromCfe: true
   STATIC_SETTER_WITHOUT_BODY:
     problemMessage: "A 'static' setter must have a body."
     correctionMessage: "Try adding a body to the setter, or removing the keyword 'static'."
   STATIC_TOP_LEVEL_DECLARATION:
     problemMessage: "Top-level declarations can't be declared to be static."
     correctionMessage: "Try removing the keyword 'static'."
-  SWITCH_HAS_CASE_AFTER_DEFAULT_CASE:
-    copyFromCfe: true
-  SWITCH_HAS_MULTIPLE_DEFAULT_CASES:
-    copyFromCfe: true
-  TOP_LEVEL_OPERATOR:
-    copyFromCfe: true
-  TYPEDEF_IN_CLASS:
-    copyFromCfe: true
-  TYPE_ARGUMENTS_ON_TYPE_VARIABLE:
-    copyFromCfe: true
-  TYPE_BEFORE_FACTORY:
-    copyFromCfe: true
-  TYPE_PARAMETER_ON_CONSTRUCTOR:
-    copyFromCfe: true
-  TYPE_PARAMETER_ON_OPERATOR:
-    problemMessage: "Types parameters aren't allowed when defining an operator."
-    correctionMessage: Try removing the type parameters.
-    comment: |-
-      7.1.1 Operators: Type parameters are not syntactically supported on an
-      operator.
   UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP:
     problemMessage: "There is no '{0}' to open a parameter group."
     correctionMessage: "Try inserting the '{0}' at the appropriate location."
@@ -17966,25 +17664,15 @@
     comment: |-
       Parameters:
       0: the unexpected text that was found
-  VAR_AND_TYPE:
-    copyFromCfe: true
-  VAR_AS_TYPE_NAME:
-    copyFromCfe: true
   VAR_CLASS:
     problemMessage: "Classes can't be declared to be 'var'."
     correctionMessage: "Try removing the keyword 'var'."
   VAR_ENUM:
     problemMessage: "Enums can't be declared to be 'var'."
     correctionMessage: "Try removing the keyword 'var'."
-  VAR_RETURN_TYPE:
-    copyFromCfe: true
   VAR_TYPEDEF:
     problemMessage: "Typedefs can't be declared to be 'var'."
     correctionMessage: "Try removing the keyword 'var', or replacing it with the name of the return type."
-  VOID_WITH_TYPE_ARGUMENTS:
-    copyFromCfe: true
-  WITH_BEFORE_EXTENDS:
-    copyFromCfe: true
   WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER:
     problemMessage: "The default value of a positional parameter should be preceded by '='."
     correctionMessage: "Try replacing the ':' with '='."
@@ -18159,7 +17847,7 @@
       Use a map as the value of the `dependencies` key:
 
       ```yaml
-      %uri='pubspec.yaml'
+      %uri="pubspec.yaml"
       name: example
       dependencies:
         meta: ^1.0.2
@@ -18471,7 +18159,7 @@
       listed under both `dependencies` and `dev_dependencies`:
 
       ```yaml
-      %uri='pubspec.yaml'
+      %uri="pubspec.yaml"
       name: example
       dependencies:
         meta: ^1.0.2
@@ -18485,7 +18173,7 @@
       if that's the only package listed there):
 
       ```yaml
-      %uri='pubspec.yaml'
+      %uri="pubspec.yaml"
       name: example
       dependencies:
         meta: ^1.0.2
@@ -18511,7 +18199,7 @@
       left-hand side has the value `null`, and because the left-hand side can't
       be `null`, the right-hand side is never evaluated.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `x` can't be `null`:
 
@@ -18585,7 +18273,7 @@
       `?..`, `?[`, `?..[`, or `...?`) is used on a receiver that's known to be
       non-nullable.
 
-      #### Example
+      #### Examples
 
       The following code produces this diagnostic because `s` can't be `null`:
 
@@ -18690,7 +18378,7 @@
       Note that `null` is always a possible value for an enum and therefore also
       must be handled.
 
-      #### Examples
+      #### Example
 
       The following code produces this diagnostic because the enum constant `e2`
       isn't handled:
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 8497bb1..76dc2d2 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 2.4.0
+version: 2.8.0-dev
 description: This package provides a library that performs static analysis of Dart code.
 homepage: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer
 
@@ -7,7 +7,7 @@
   sdk: '>=2.14.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^27.0.0
+  _fe_analyzer_shared: ^30.0.0
   cli_util: ^0.3.0
   collection: ^1.15.0
   convert: ^3.0.0
@@ -25,7 +25,7 @@
     path: ../analyzer_utilities
   args: ^2.0.0
   async: ^2.5.0
-  linter: any
+  linter: ^1.12.0
   matcher: ^0.12.10
   test: ^1.16.0
   test_reflective_loader: ^0.2.0
diff --git a/pkg/analyzer/test/error/error_reporter_test.dart b/pkg/analyzer/test/error/error_reporter_test.dart
index 7b32e98..55923b8 100644
--- a/pkg/analyzer/test/error/error_reporter_test.dart
+++ b/pkg/analyzer/test/error/error_reporter_test.dart
@@ -175,7 +175,7 @@
     reporter.reportErrorForNode(
       CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
       findNode.simple('x'),
-      [fa.variables.type!.type, fb.variables.type!.type],
+      [fa.variables.type!.type!, fb.variables.type!.type!],
     );
 
     var error = listener.errors[0];
@@ -210,7 +210,7 @@
     reporter.reportErrorForNode(
       CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
       findNode.simple('x'),
-      [ba.variables.type!.type, bb.variables.type!.type],
+      [ba.variables.type!.type!, bb.variables.type!.type!],
     );
 
     var error = listener.errors[0];
diff --git a/pkg/analyzer/test/file_system/file_system_test_support.dart b/pkg/analyzer/test/file_system/file_system_test_support.dart
index 6b5d0e2..722474a 100644
--- a/pkg/analyzer/test/file_system/file_system_test_support.dart
+++ b/pkg/analyzer/test/file_system/file_system_test_support.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:path/path.dart' as path;
@@ -203,8 +205,8 @@
   }
 
   test_lengthSync_existing() {
-    File file = getFile(exists: true);
-    List<int> bytes = <int>[1, 2, 3, 4, 5];
+    var file = getFile(exists: true);
+    var bytes = Uint8List.fromList([1, 2, 3, 4, 5]);
     file.writeAsBytesSync(bytes);
 
     expect(file.lengthSync, bytes.length);
@@ -393,8 +395,9 @@
   test_writeAsBytesSync_existing() {
     File file = getFile(exists: true);
 
-    file.writeAsBytesSync(<int>[99, 99]);
-    expect(file.readAsBytesSync(), <int>[99, 99]);
+    var bytes = Uint8List.fromList([99, 99]);
+    file.writeAsBytesSync(bytes);
+    expect(file.readAsBytesSync(), bytes);
   }
 
   test_writeAsBytesSync_notExisting();
diff --git a/pkg/analyzer/test/file_system/memory_file_system_test.dart b/pkg/analyzer/test/file_system/memory_file_system_test.dart
index 94b56ef..9eecb33 100644
--- a/pkg/analyzer/test/file_system/memory_file_system_test.dart
+++ b/pkg/analyzer/test/file_system/memory_file_system_test.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/generated/engine.dart' show TimestampedData;
@@ -265,9 +267,10 @@
   test_writeAsBytesSync_notExisting() {
     File file = getFile(exists: false);
 
-    file.writeAsBytesSync(<int>[99, 99]);
+    var bytes = Uint8List.fromList([99, 99]);
+    file.writeAsBytesSync(bytes);
     expect(file.exists, true);
-    expect(file.readAsBytesSync(), <int>[99, 99]);
+    expect(file.readAsBytesSync(), bytes);
   }
 
   @override
@@ -354,7 +357,7 @@
   }
 
   test_newFileWithBytes() {
-    List<int> bytes = <int>[1, 2, 3, 4, 5];
+    var bytes = Uint8List.fromList([1, 2, 3, 4, 5]);
 
     provider.newFileWithBytes(defaultFilePath, bytes);
     Resource file = provider.getResource(defaultFilePath);
diff --git a/pkg/analyzer/test/file_system/overlay_file_system_test.dart b/pkg/analyzer/test/file_system/overlay_file_system_test.dart
index 78d9cbf..fd9a6df 100644
--- a/pkg/analyzer/test/file_system/overlay_file_system_test.dart
+++ b/pkg/analyzer/test/file_system/overlay_file_system_test.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/file_system/overlay_file_system.dart';
@@ -360,14 +362,18 @@
 
   test_writeAsBytesSync_withoutOverlay() {
     File file = _file(exists: true);
-    file.writeAsBytesSync(<int>[99, 99]);
-    expect(file.readAsBytesSync(), <int>[99, 99]);
+    var bytes = Uint8List.fromList([99, 99]);
+    file.writeAsBytesSync(bytes);
+    expect(file.readAsBytesSync(), bytes);
   }
 
   test_writeAsBytesSync_withOverlay() {
     File file = _file(exists: true, withOverlay: true);
-    expect(() => file.writeAsBytesSync(<int>[99, 99]),
-        throwsA(_isFileSystemException));
+    var bytes = Uint8List.fromList([99, 99]);
+    expect(
+      () => file.writeAsBytesSync(bytes),
+      throwsA(_isFileSystemException),
+    );
   }
 
   test_writeAsStringSync_withoutOverlay() {
diff --git a/pkg/analyzer/test/file_system/physical_file_system_test.dart b/pkg/analyzer/test/file_system/physical_file_system_test.dart
index 3d33576..8794f1d 100644
--- a/pkg/analyzer/test/file_system/physical_file_system_test.dart
+++ b/pkg/analyzer/test/file_system/physical_file_system_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:io' as io;
+import 'dart:typed_data';
 
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
@@ -131,8 +132,11 @@
   test_writeAsBytesSync_notExisting() {
     File file = getFile(exists: false);
 
-    expect(() => file.writeAsBytesSync(<int>[99, 99]),
-        throwsA(isFileSystemException));
+    var bytes = Uint8List.fromList([99, 99]);
+    expect(
+      () => file.writeAsBytesSync(bytes),
+      throwsA(isFileSystemException),
+    );
   }
 
   @override
diff --git a/pkg/analyzer/test/generated/constant_test.dart b/pkg/analyzer/test/generated/constant_test.dart
index 8bbf1fa..8de1d7f 100644
--- a/pkg/analyzer/test/generated/constant_test.dart
+++ b/pkg/analyzer/test/generated/constant_test.dart
@@ -48,50 +48,6 @@
     await _assertValueInt(74 ^ 42, "74 ^ 42");
   }
 
-  test_constructorInvocation_assert_false() async {
-    var result = await _getExpressionValue("const C(0)", context: '''
-class C {
-  const C(int x) : assert(x > 0);
-}
-''');
-    expect(result.isValid, isFalse);
-  }
-
-  test_constructorInvocation_assert_inherited() async {
-    var result = await _getExpressionValue(
-      "const Center(name: 'v')",
-      context: '''
-class Align {
-  final double? widthFactor;
-  const Align({String name, this.widthFactor})
-        assert(widthFactor == null || widthFactor >= 0.0);
-}
-class Center extends Align {
-  const Center({String name})
-    : super(name: name);
-}
-''',
-    );
-    expect(result.isValid, isTrue);
-    DartObject value = result.value!;
-    assertType(value.type, 'Center');
-    DartObject superclassFields =
-        value.getField(GenericState.SUPERCLASS_FIELD)!;
-    DartObject widthFactor = superclassFields.getField('widthFactor')!;
-    expect(widthFactor.isNull, isTrue);
-  }
-
-  test_constructorInvocation_assert_true() async {
-    var result = await _getExpressionValue("const C(3)", context: '''
-class C {
-  const C(int x) : assert(x > 0);
-}
-''');
-    expect(result.isValid, isTrue);
-    DartObject value = result.value!;
-    assertType(value.type, 'C');
-  }
-
   test_constructorInvocation_fieldInitializer() async {
     var result = await _getExpressionValue("const C(2)", context: '''
 class C {
diff --git a/pkg/analyzer/test/generated/element_resolver_test.dart b/pkg/analyzer/test/generated/element_resolver_test.dart
index 074ada9..a82b0a3 100644
--- a/pkg/analyzer/test/generated/element_resolver_test.dart
+++ b/pkg/analyzer/test/generated/element_resolver_test.dart
@@ -59,12 +59,12 @@
       expect(name1!.staticElement, isClassElement);
       expect(name1.staticElement!.displayName, 'A');
       expect(name2!.staticElement, isConstructorElement);
-      expect(name2.staticElement!.displayName, 'named');
+      expect(name2.staticElement!.displayName, 'A.named');
       expect(name3, isNull);
       if (annotationElement is ConstructorElement) {
         expect(annotationElement, same(name2.staticElement));
         expect(annotationElement.enclosingElement, name1.staticElement);
-        expect(annotationElement.displayName, 'named');
+        expect(annotationElement.displayName, 'A.named');
         expect(annotationElement.parameters, isEmpty);
       } else {
         fail('Expected "annotationElement" is ConstructorElement, '
@@ -86,11 +86,11 @@
       expect(name2!.staticElement, isClassElement);
       expect(name2.staticElement!.displayName, 'A');
       expect(name3!.staticElement, isConstructorElement);
-      expect(name3.staticElement!.displayName, 'named');
+      expect(name3.staticElement!.displayName, 'A.named');
       if (annotationElement is ConstructorElement) {
         expect(annotationElement, same(name3.staticElement));
         expect(annotationElement.enclosingElement, name2.staticElement);
-        expect(annotationElement.displayName, 'named');
+        expect(annotationElement.displayName, 'A.named');
         expect(annotationElement.parameters, isEmpty);
       } else {
         fail('Expected "annotationElement" is ConstructorElement, '
@@ -139,7 +139,7 @@
       expect(name3, isNull);
       if (annotationElement is ConstructorElement) {
         expect(annotationElement.enclosingElement, name2.staticElement);
-        expect(annotationElement.displayName, '');
+        expect(annotationElement.displayName, 'A');
         expect(annotationElement.parameters, isEmpty);
       } else {
         fail('Expected "annotationElement" is ConstructorElement, '
@@ -186,7 +186,7 @@
       expect(name3, isNull);
       if (annotationElement is ConstructorElement) {
         expect(annotationElement.enclosingElement, name1.staticElement);
-        expect(annotationElement.displayName, '');
+        expect(annotationElement.displayName, 'A');
         expect(annotationElement.parameters, isEmpty);
       } else {
         fail('Expected "annotationElement" is ConstructorElement, '
@@ -259,7 +259,7 @@
       validator(name.prefix, name.identifier, annotation.constructorName,
           annotationElement);
     } else {
-      fail('Uknown "name": ${name.runtimeType} $name');
+      fail('Unknown "name": ${name.runtimeType} $name');
     }
   }
 }
diff --git a/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart b/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
index 3f6571e..bd35b65 100644
--- a/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
+++ b/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
@@ -256,6 +256,14 @@
     expect(methodInvocation.argumentList, isNotNull);
   }
 
+  void test_constructor_tearoff_in_comment_reference() {
+    createParser('');
+    var commentReference = parseCommentReference('C.new', 5)!;
+    var identifier = commentReference.expression as PrefixedIdentifier;
+    expect(identifier.prefix.name, 'C');
+    expect(identifier.identifier.name, 'new');
+  }
+
   void test_constructor_tearoff_method_invocation() {
     var methodInvocation =
         parseExpression('C.new.toString()', featureSet: constructorTearoffs)
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 91e4e01..bf708fc 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -13,49 +13,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(NonConstantValueInInitializer);
     defineReflectiveTests(NonErrorResolverTest);
     defineReflectiveTests(NonErrorResolverWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class NonConstantValueInInitializer extends PubPackageResolutionTest {
-  test_intLiteralInDoubleContext_const_exact() async {
-    await assertNoErrorsInCode(r'''
-// @dart = 2.9
-const double x = 0;
-class C {
-  const C(double y) : assert(y is double), assert(x is double);
-}
-@C(0)
-@C(-0)
-@C(0x0)
-@C(-0x0)
-void main() {
-  const C(0);
-  const C(-0);
-  const C(0x0);
-  const C(-0x0);
-}
-''');
-  }
-
-  test_isCheckInConstAssert() async {
-    await assertNoErrorsInCode(r'''
-// @dart = 2.9
-class C {
-  const C() : assert(1 is int);
-}
-
-void main() {
-  const C();
-}
-''');
-  }
-}
-
-@reflectiveTest
 class NonErrorResolverTest extends PubPackageResolutionTest
     with NonErrorResolverTestCases {
   test_await_flattened() async {
@@ -1049,7 +1012,7 @@
   const A(x);
 }
 main() {
-  const A(double.INFINITY);
+  const A(double.infinity);
 }
 ''');
   }
@@ -1790,26 +1753,6 @@
 ''');
   }
 
-  test_intLiteralInDoubleContext_const() async {
-    await assertNoErrorsInCode(r'''
-class C {
-  const C(double x)
-    : assert((x + 3) / 2 == 1.5)
-    , assert(x == 0.0);
-}
-@C(0)
-@C(-0)
-@C(0x0)
-@C(-0x0)
-void main() {
-  const C(0);
-  const C(-0);
-  const C(0x0);
-  const C(-0x0);
-}
-''');
-  }
-
   test_invalidAnnotation_constantVariable_field() async {
     await assertNoErrorsInCode(r'''
 @A.C
@@ -2358,28 +2301,6 @@
 ''');
   }
 
-  test_nativeConstConstructor() async {
-    await assertErrorsInCode(r'''
-import 'dart-ext:x';
-class Foo {
-  const Foo() native 'Foo_Foo';
-  const factory Foo.foo() native 'Foo_Foo_foo';
-}
-''', [
-      error(HintCode.USE_OF_NATIVE_EXTENSION, 0, 20),
-      error(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, 47, 6),
-    ]);
-  }
-
-  test_nativeFunctionBodyInNonSDKCode_function() async {
-    await assertErrorsInCode(r'''
-import 'dart-ext:x';
-int m(a) native 'string';
-''', [
-      error(HintCode.USE_OF_NATIVE_EXTENSION, 0, 20),
-    ]);
-  }
-
   test_newWithAbstractClass_factory() async {
     await assertNoErrorsInCode(r'''
 abstract class A {
@@ -2461,7 +2382,7 @@
 
   test_nonConstantDefaultValue_constField() async {
     await assertNoErrorsInCode(r'''
-f([a = double.INFINITY]) {
+f([a = double.infinity]) {
 }
 ''');
   }
@@ -2536,7 +2457,7 @@
   test_nonConstListElement_constField() async {
     await assertNoErrorsInCode(r'''
 main() {
-  const [double.INFINITY];
+  const [double.infinity];
 }
 ''');
   }
@@ -2570,7 +2491,7 @@
   test_nonConstMapValue_constField() async {
     await assertNoErrorsInCode(r'''
 main() {
-  const {0: double.INFINITY};
+  const {0: double.infinity};
 }
 ''');
   }
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index 5d366e2..6cdd3b6 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -93,14 +93,14 @@
   }
 
   @override
-  void beginClassOrMixinBody(DeclarationKind kind, Token token) {
-    super.beginClassOrMixinBody(kind, token);
+  void beginClassOrMixinOrExtensionBody(DeclarationKind kind, Token token) {
+    super.beginClassOrMixinOrExtensionBody(kind, token);
     begin('ClassOrMixinBody');
   }
 
   @override
-  void beginClassOrNamedMixinApplicationPrelude(Token token) {
-    super.beginClassOrNamedMixinApplicationPrelude(token);
+  void beginClassOrMixinOrNamedMixinApplicationPrelude(Token token) {
+    super.beginClassOrMixinOrNamedMixinApplicationPrelude(token);
     begin('ClassOrNamedMixinApplication');
   }
 
@@ -191,9 +191,10 @@
   }
 
   @override
-  void beginFactoryMethod(
-      Token lastConsumed, Token? externalToken, Token? constToken) {
-    super.beginFactoryMethod(lastConsumed, externalToken, constToken);
+  void beginFactoryMethod(DeclarationKind declarationKind, Token lastConsumed,
+      Token? externalToken, Token? constToken) {
+    super.beginFactoryMethod(
+        declarationKind, lastConsumed, externalToken, constToken);
     begin('FactoryMethod');
   }
 
@@ -266,12 +267,6 @@
   }
 
   @override
-  void beginFunctionTypeAlias(Token token) {
-    super.beginFunctionTypeAlias(token);
-    begin('FunctionTypeAlias');
-  }
-
-  @override
   void beginFunctionTypedFormalParameter(Token token) {
     super.beginFunctionTypedFormalParameter(token);
     begin('FunctionTypedFormalParameter');
@@ -371,14 +366,15 @@
 
   @override
   void beginMethod(
+      DeclarationKind declarationKind,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
       Token? varFinalOrConst,
       Token? getOrSet,
       Token name) {
-    super.beginMethod(externalToken, staticToken, covariantToken,
-        varFinalOrConst, getOrSet, name);
+    super.beginMethod(declarationKind, externalToken, staticToken,
+        covariantToken, varFinalOrConst, getOrSet, name);
     begin('Method');
   }
 
@@ -498,6 +494,12 @@
   }
 
   @override
+  void beginTypedef(Token token) {
+    super.beginTypedef(token);
+    begin('FunctionTypeAlias');
+  }
+
+  @override
   void beginTypeList(Token token) {
     super.beginTypeList(token);
     begin('TypeList');
@@ -658,10 +660,11 @@
   }
 
   @override
-  void endClassOrMixinBody(
+  void endClassOrMixinOrExtensionBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
     end('ClassOrMixinBody');
-    super.endClassOrMixinBody(kind, memberCount, beginToken, endToken);
+    super.endClassOrMixinOrExtensionBody(
+        kind, memberCount, beginToken, endToken);
   }
 
   @override
@@ -884,13 +887,6 @@
   }
 
   @override
-  void endFunctionTypeAlias(
-      Token typedefKeyword, Token? equals, Token endToken) {
-    end('FunctionTypeAlias');
-    super.endFunctionTypeAlias(typedefKeyword, equals, endToken);
-  }
-
-  @override
   void endFunctionTypedFormalParameter(Token nameToken, Token? question) {
     end('FunctionTypedFormalParameter');
     super.endFunctionTypedFormalParameter(nameToken, question);
@@ -1204,6 +1200,12 @@
   }
 
   @override
+  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
+    end('FunctionTypeAlias');
+    super.endTypedef(typedefKeyword, equals, endToken);
+  }
+
+  @override
   void endTypeList(int count) {
     end('TypeList');
     super.endTypeList(count);
diff --git a/pkg/analyzer/test/generated/sdk_test.dart b/pkg/analyzer/test/generated/sdk_test.dart
index a5b3fef..c274178 100644
--- a/pkg/analyzer/test/generated/sdk_test.dart
+++ b/pkg/analyzer/test/generated/sdk_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -22,7 +21,7 @@
     expect(manager.anySdk, isNull);
 
     SdkDescription description = SdkDescription('/c/d');
-    DartSdk sdk = MockSdk(resourceProvider: resourceProvider);
+    DartSdk sdk = _DartSdkMock();
     manager.getSdk(description, () => sdk);
 
     expect(manager.anySdk, same(sdk));
@@ -32,12 +31,12 @@
     DartSdkManager manager = DartSdkManager('/a/b/c');
 
     SdkDescription description1 = SdkDescription('/c/d');
-    DartSdk sdk1 = MockSdk(resourceProvider: resourceProvider);
+    DartSdk sdk1 = _DartSdkMock();
     DartSdk result1 = manager.getSdk(description1, () => sdk1);
     expect(result1, same(sdk1));
 
     SdkDescription description2 = SdkDescription('/e/f');
-    DartSdk sdk2 = MockSdk(resourceProvider: resourceProvider);
+    DartSdk sdk2 = _DartSdkMock();
     DartSdk result2 = manager.getSdk(description2, () => sdk2);
     expect(result2, same(sdk2));
 
@@ -49,7 +48,7 @@
     DartSdkManager manager = DartSdkManager('/a/b/c');
 
     SdkDescription description = SdkDescription('/c/d');
-    DartSdk sdk = MockSdk(resourceProvider: resourceProvider);
+    DartSdk sdk = _DartSdkMock();
     DartSdk result = manager.getSdk(description, () => sdk);
     expect(result, same(sdk));
 
@@ -82,3 +81,8 @@
     expect(left == right, isTrue);
   }
 }
+
+class _DartSdkMock implements DartSdk {
+  @override
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
diff --git a/pkg/analyzer/test/generated/simple_parser_test.dart b/pkg/analyzer/test/generated/simple_parser_test.dart
index f96e112..e183e2a 100644
--- a/pkg/analyzer/test/generated/simple_parser_test.dart
+++ b/pkg/analyzer/test/generated/simple_parser_test.dart
@@ -574,8 +574,8 @@
     var reference = parseCommentReference('new a.b', 7)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isPrefixedIdentifier);
-    var prefixedIdentifier = reference.identifier as PrefixedIdentifier;
+    expect(reference.expression, isPrefixedIdentifier);
+    var prefixedIdentifier = reference.expression as PrefixedIdentifier;
     SimpleIdentifier prefix = prefixedIdentifier.prefix;
     expect(prefix.token, isNotNull);
     expect(prefix.name, "a");
@@ -592,8 +592,8 @@
     var reference = parseCommentReference('new a', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "a");
     expect(identifier.offset, 9);
@@ -604,8 +604,8 @@
     var reference = parseCommentReference('operator ==', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "==");
     expect(identifier.offset, 14);
@@ -616,8 +616,8 @@
     var reference = parseCommentReference('Object.operator==', 7)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isPrefixedIdentifier);
-    var prefixedIdentifier = reference.identifier as PrefixedIdentifier;
+    expect(reference.expression, isPrefixedIdentifier);
+    var prefixedIdentifier = reference.expression as PrefixedIdentifier;
     SimpleIdentifier prefix = prefixedIdentifier.prefix;
     expect(prefix.token, isNotNull);
     expect(prefix.name, "Object");
@@ -634,8 +634,8 @@
     var reference = parseCommentReference('==', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "==");
     expect(identifier.offset, 5);
@@ -646,8 +646,8 @@
     var reference = parseCommentReference('Object.==', 7)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isPrefixedIdentifier);
-    var prefixedIdentifier = reference.identifier as PrefixedIdentifier;
+    expect(reference.expression, isPrefixedIdentifier);
+    var prefixedIdentifier = reference.expression as PrefixedIdentifier;
     SimpleIdentifier prefix = prefixedIdentifier.prefix;
     expect(prefix.token, isNotNull);
     expect(prefix.name, "Object");
@@ -664,8 +664,8 @@
     var reference = parseCommentReference('a.b', 7)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isPrefixedIdentifier);
-    var prefixedIdentifier = reference.identifier as PrefixedIdentifier;
+    expect(reference.expression, isPrefixedIdentifier);
+    var prefixedIdentifier = reference.expression as PrefixedIdentifier;
     SimpleIdentifier prefix = prefixedIdentifier.prefix;
     expect(prefix.token, isNotNull);
     expect(prefix.name, "a");
@@ -682,8 +682,8 @@
     var reference = parseCommentReference('a', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "a");
     expect(identifier.offset, 5);
@@ -694,8 +694,8 @@
     var reference = parseCommentReference('', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier, isNotNull);
     expect(identifier.isSynthetic, isTrue);
     expect(identifier.token, isNotNull);
@@ -715,7 +715,7 @@
     var reference = parseCommentReference('this', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    var identifier = reference.identifier as SimpleIdentifier;
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "a");
     expect(identifier.offset, 5);
@@ -731,7 +731,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 5);
   }
 
@@ -750,7 +750,8 @@
 
     expectReference(int index, String expectedText, int expectedOffset) {
       CommentReference reference = references[index];
-      expect(reference.identifier.name, expectedText);
+      var identifier = reference.expression as Identifier;
+      expect(identifier.name, expectedText);
       expect(reference.offset, expectedOffset);
     }
 
@@ -780,7 +781,8 @@
 
     expectReference(int index, String expectedText, int expectedOffset) {
       CommentReference reference = references[index];
-      expect(reference.identifier.name, expectedText);
+      var identifier = reference.expression as Identifier;
+      expect(identifier.name, expectedText);
       expect(reference.offset, expectedOffset);
     }
 
@@ -802,18 +804,18 @@
     {
       CommentReference reference = references[0];
       expect(reference, isNotNull);
-      expect(reference.identifier, isNotNull);
+      expect(reference.expression, isNotNull);
       expect(reference.offset, 12);
-      Token referenceToken = reference.identifier.beginToken;
+      Token referenceToken = reference.expression.beginToken;
       expect(referenceToken.offset, 12);
       expect(referenceToken.lexeme, 'a');
     }
     {
       CommentReference reference = references[1];
       expect(reference, isNotNull);
-      expect(reference.identifier, isNotNull);
+      expect(reference.expression, isNotNull);
       expect(reference.offset, 20);
-      Token referenceToken = reference.identifier.beginToken;
+      Token referenceToken = reference.expression.beginToken;
       expect(referenceToken.offset, 20);
       expect(referenceToken.lexeme, 'bb');
     }
@@ -829,11 +831,12 @@
     assertNoErrors();
     expect(references, hasLength(1));
     CommentReference reference = references[0];
-    Token referenceToken = reference.identifier.beginToken;
+    Token referenceToken = reference.expression.beginToken;
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
-    expect(reference.identifier.isSynthetic, isTrue);
-    expect(reference.identifier.name, "");
+    expect(reference.expression, isNotNull);
+    var identifier = reference.expression as Identifier;
+    expect(identifier.isSynthetic, isTrue);
+    expect(identifier.name, "");
     // Should end with EOF token.
     Token nextToken = referenceToken.next!;
     expect(nextToken, isNotNull);
@@ -850,12 +853,13 @@
     assertNoErrors();
     expect(references, hasLength(1));
     CommentReference reference = references[0];
-    Token referenceToken = reference.identifier.beginToken;
+    Token referenceToken = reference.expression.beginToken;
     expect(reference, isNotNull);
     expect(referenceToken, same(reference.beginToken));
-    expect(reference.identifier, isNotNull);
-    expect(reference.identifier.isSynthetic, isFalse);
-    expect(reference.identifier.name, "namePrefix");
+    expect(reference.expression, isNotNull);
+    var identifier = reference.expression as Identifier;
+    expect(identifier.isSynthetic, isFalse);
+    expect(identifier.name, "namePrefix");
     // Should end with EOF token.
     Token nextToken = referenceToken.next!;
     expect(nextToken, isNotNull);
@@ -875,15 +879,15 @@
     expect(references, hasLength(3));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 12);
     reference = references[1];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 20);
     reference = references[2];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 35);
   }
 
@@ -925,7 +929,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 24);
   }
 
@@ -941,7 +945,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 16);
   }
 
@@ -1011,7 +1015,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 27);
   }
 
@@ -1035,7 +1039,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 74);
   }
 
@@ -1051,7 +1055,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 35);
   }
 
@@ -1075,7 +1079,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 54);
   }
 
@@ -1091,7 +1095,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 15);
   }
 
@@ -1107,7 +1111,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 44);
   }
 
diff --git a/pkg/analyzer/test/generated/statement_parser_test.dart b/pkg/analyzer/test/generated/statement_parser_test.dart
index 5e90e69..ff93ba2 100644
--- a/pkg/analyzer/test/generated/statement_parser_test.dart
+++ b/pkg/analyzer/test/generated/statement_parser_test.dart
@@ -1079,7 +1079,7 @@
   }
 
   void test_parseNonLabeledStatement_typeCast() {
-    var statement = parseStatement('double.NAN as num;') as ExpressionStatement;
+    var statement = parseStatement('double.nan as num;') as ExpressionStatement;
     assertNoErrors();
     expect(statement.expression, isNotNull);
   }
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 11b6ce1..e23271d 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -3508,8 +3508,10 @@
 class C<T0 extends List<T1>, T1 extends List<T0>> {}
 class D extends C {}
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 69, 1),
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 69, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 69, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 69, 1)]),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 69, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 69, 1)]),
     ]);
   }
 
@@ -3523,8 +3525,9 @@
 }
 ''', [
       error(HintCode.UNUSED_LOCAL_VARIABLE, 73, 1),
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 81, 1),
       error(CompileTimeErrorCode.COULD_NOT_INFER, 81, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 81, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 81, 1)]),
     ]);
     _assertLocalVarType('c', 'C<List<dynamic>, List<List<dynamic>>>');
   }
@@ -3560,7 +3563,11 @@
 class C<T extends F<T>> {}
 C c;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 48, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 48, 1,
+          contextMessages: [
+            message('/home/test/lib/test.dart', 48, 1),
+            message('/home/test/lib/test.dart', 48, 1)
+          ]),
     ]);
     _assertTopVarType('c', 'C<dynamic Function(dynamic)>');
   }
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index c8a5797..be7a535 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -2,6 +2,8 @@
 // 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:convert';
+
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
@@ -44,6 +46,10 @@
   /// The error code associated with the error.
   final ErrorCode code;
 
+  // A pattern that should be contained in the error's correction message, or
+  // `null` if the correction message contents should not be checked.
+  final Pattern? correctionContains;
+
   /// The offset of the beginning of the error's region.
   final int offset;
 
@@ -53,9 +59,9 @@
   /// The message text of the error or `null` if the message should not be checked.
   final String? message;
 
-  /// A pattern that should be contained in the error message or `null` if the message
-  /// contents should not be checked.
-  final Pattern? messageContains;
+  /// A list of patterns that should be contained in the error message; empty if
+  /// the message contents should not be checked.
+  final List<Pattern> messageContains;
 
   /// The list of context messages that are expected to be associated with the
   /// error.
@@ -63,8 +69,9 @@
 
   /// Initialize a newly created error description.
   ExpectedError(this.code, this.offset, this.length,
-      {this.message,
-      this.messageContains,
+      {this.correctionContains,
+      this.message,
+      this.messageContains = const [],
       this.expectedContextMessages = const <ExpectedContextMessage>[]});
 
   /// Return `true` if the [error] matches this description of what it's
@@ -78,8 +85,13 @@
     if (message != null && error.message != message) {
       return false;
     }
-    if (messageContains != null &&
-        error.message.contains(messageContains!) != true) {
+    for (var pattern in messageContains) {
+      if (!error.message.contains(pattern)) {
+        return false;
+      }
+    }
+    if (correctionContains != null &&
+        !(error.correctionMessage ?? '').contains(correctionContains!)) {
       return false;
     }
     List<DiagnosticMessage> contextMessages = error.contextMessages.toList();
@@ -177,8 +189,18 @@
         buffer.write(', ');
         buffer.write(expected.length);
         if (expected.message != null) {
-          buffer.write(', ');
-          buffer.write(expected.message);
+          buffer.write(', message: ');
+          buffer.write(json.encode(expected.message));
+        }
+        if (expected.messageContains.isNotEmpty) {
+          buffer.write(', messageContains: ');
+          buffer.write(json.encode([
+            for (var pattern in expected.messageContains) pattern.toString()
+          ]));
+        }
+        if (expected.correctionContains != null) {
+          buffer.write(', correctionContains: ');
+          buffer.write(json.encode(expected.correctionContains.toString()));
         }
         buffer.writeln(']');
       }
@@ -196,7 +218,9 @@
         buffer.write(', ');
         buffer.write(actual.length);
         buffer.write(', ');
-        buffer.write(actual.message);
+        buffer.write(json.encode(actual.message));
+        buffer.write(', ');
+        buffer.write(json.encode(actual.correctionMessage));
         buffer.writeln(']');
       }
     }
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 0cbba91c..95aa605 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -294,9 +294,10 @@
 }
 
 class Getter_NodeReplacerTest_test_commentReference
-    implements NodeReplacerTest_Getter<CommentReference, Identifier> {
+    implements
+        NodeReplacerTest_Getter<CommentReference, CommentReferableExpression> {
   @override
-  Identifier get(CommentReference node) => node.identifier;
+  CommentReferableExpression get(CommentReference node) => node.expression;
 }
 
 class Getter_NodeReplacerTest_test_compilationUnit
diff --git a/pkg/analyzer/test/id_tests/assigned_variables_test.dart b/pkg/analyzer/test/id_tests/assigned_variables_test.dart
index 9459ee1..bc1eab7 100644
--- a/pkg/analyzer/test/id_tests/assigned_variables_test.dart
+++ b/pkg/analyzer/test/id_tests/assigned_variables_test.dart
@@ -100,7 +100,7 @@
   }
 
   Set<String> _convertVars(Iterable<PromotableElement> x) =>
-      x.map((e) => e.name!).toSet();
+      x.map((e) => e.name).toSet();
 
   void _handlePossibleTopLevelDeclaration(
       AstNode node, void Function() callback) {
diff --git a/pkg/analyzer/test/resource_utils.dart b/pkg/analyzer/test/resource_utils.dart
index 680004d..3337265 100644
--- a/pkg/analyzer/test/resource_utils.dart
+++ b/pkg/analyzer/test/resource_utils.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -62,7 +64,7 @@
   File newFile(String posixPath, String content) =>
       _provider.newFile(posixToOSPath(posixPath), content);
 
-  File newFileWithBytes(String posixPath, List<int> bytes) =>
+  File newFileWithBytes(String posixPath, Uint8List bytes) =>
       _provider.newFileWithBytes(posixToOSPath(posixPath), bytes);
 
   Folder newFolder(String posixPath) =>
diff --git a/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart b/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
index d532b29..e8c8c62 100644
--- a/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
@@ -2,6 +2,7 @@
 // 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/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
@@ -19,8 +20,13 @@
 
 @reflectiveTest
 class AnalysisContextCollectionTest with ResourceProviderMixin {
+  Folder get sdkRoot => newFolder('/sdk');
+
   void setUp() {
-    MockSdk(resourceProvider: resourceProvider);
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
     registerLintRules();
   }
 
@@ -168,7 +174,7 @@
     return AnalysisContextCollectionImpl(
       resourceProvider: resourceProvider,
       includedPaths: includedPaths,
-      sdkPath: convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
     );
   }
 }
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index 536922f..7f3d1cb 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/analysis/status.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -127,7 +128,13 @@
   }
 
   void setUp() {
-    sdk = MockSdk(resourceProvider: resourceProvider);
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+    sdk = FolderBasedDartSdk(resourceProvider, sdkRoot);
+
     testProject = convertPath('/test');
     testFile = convertPath('/test/lib/test.dart');
     logger = PerformanceLog(logBuffer);
diff --git a/pkg/analyzer/test/src/dart/analysis/byte_store_test.dart b/pkg/analyzer/test/src/dart/analysis/byte_store_test.dart
index 47202d9..6cf3fea 100644
--- a/pkg/analyzer/test/src/dart/analysis/byte_store_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/byte_store_test.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -13,8 +15,8 @@
   });
 }
 
-List<int> _b(int length) {
-  return List<int>.filled(length, 0);
+Uint8List _b(int length) {
+  return Uint8List(length);
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart b/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
index 44a7634..17144c0 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
@@ -35,6 +35,8 @@
   late final ContextBuilderImpl contextBuilder;
   late final ContextRoot contextRoot;
 
+  Folder get sdkRoot => newFolder('/sdk');
+
   void assertEquals(DeclaredVariables actual, DeclaredVariables expected) {
     Iterable<String> actualNames = actual.variableNames;
     Iterable<String> expectedNames = expected.variableNames;
@@ -45,6 +47,11 @@
   }
 
   void setUp() {
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+
     var folder = newFolder('/home/test');
     contextBuilder = ContextBuilderImpl(resourceProvider: resourceProvider);
     var workspace = BasicWorkspace.find(resourceProvider, {}, folder.path);
@@ -52,8 +59,6 @@
   }
 
   void test_analysisOptions_invalid() {
-    MockSdk(resourceProvider: resourceProvider);
-
     var projectPath = convertPath('/home/test');
     newAnalysisOptionsYamlFile(projectPath, content: ';');
 
@@ -63,8 +68,6 @@
   }
 
   void test_analysisOptions_languageOptions() {
-    MockSdk(resourceProvider: resourceProvider);
-
     var projectPath = convertPath('/home/test');
     newAnalysisOptionsYamlFile(
       projectPath,
@@ -82,8 +85,6 @@
   }
 
   void test_analysisOptions_sdkVersionConstraint_hasPubspec_hasSdk() {
-    MockSdk(resourceProvider: resourceProvider);
-
     var projectPath = convertPath('/home/test');
     newPubspecYamlFile(projectPath, '''
 environment:
@@ -96,8 +97,6 @@
   }
 
   void test_analysisOptions_sdkVersionConstraint_noPubspec() {
-    MockSdk(resourceProvider: resourceProvider);
-
     var projectPath = convertPath('/home/test');
     newFile('$projectPath/lib/a.dart');
 
@@ -107,13 +106,12 @@
   }
 
   test_createContext_declaredVariables() {
-    MockSdk(resourceProvider: resourceProvider);
     DeclaredVariables declaredVariables =
         DeclaredVariables.fromMap({'foo': 'true'});
     var context = contextBuilder.createContext(
       contextRoot: contextRoot,
       declaredVariables: declaredVariables,
-      sdkPath: resourceProvider.convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
     );
     expect(context.analysisOptions, isNotNull);
     expect(context.contextRoot, contextRoot);
@@ -123,54 +121,51 @@
   test_createContext_declaredVariables_sdkPath() {
     DeclaredVariables declaredVariables =
         DeclaredVariables.fromMap({'bar': 'true'});
-    MockSdk sdk = MockSdk(resourceProvider: resourceProvider);
     var context = contextBuilder.createContext(
       contextRoot: contextRoot,
       declaredVariables: declaredVariables,
-      sdkPath: resourceProvider.convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
     );
     expect(context.analysisOptions, isNotNull);
     expect(context.contextRoot, contextRoot);
     assertEquals(context.driver.declaredVariables, declaredVariables);
-    expect(context.driver.sourceFactory.dartSdk!.mapDartUri('dart:core'),
-        sdk.mapDartUri('dart:core'));
+    expect(
+      context.driver.sourceFactory.dartSdk!.mapDartUri('dart:core')!.fullName,
+      sdkRoot.getChildAssumingFile('lib/core/core.dart').path,
+    );
   }
 
   test_createContext_defaults() {
-    MockSdk(resourceProvider: resourceProvider);
     AnalysisContext context = contextBuilder.createContext(
       contextRoot: contextRoot,
-      sdkPath: resourceProvider.convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
     );
     expect(context.analysisOptions, isNotNull);
     expect(context.contextRoot, contextRoot);
   }
 
   test_createContext_sdkPath() {
-    MockSdk sdk = MockSdk(resourceProvider: resourceProvider);
     var context = contextBuilder.createContext(
       contextRoot: contextRoot,
-      sdkPath: resourceProvider.convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
     );
     expect(context.analysisOptions, isNotNull);
     expect(context.contextRoot, contextRoot);
-    expect(context.driver.sourceFactory.dartSdk!.mapDartUri('dart:core'),
-        sdk.mapDartUri('dart:core'));
+    expect(
+      context.driver.sourceFactory.dartSdk!.mapDartUri('dart:core')!.fullName,
+      sdkRoot.getChildAssumingFile('lib/core/core.dart').path,
+    );
   }
 
   test_createContext_sdkRoot() {
-    MockSdk(resourceProvider: resourceProvider);
     var context = contextBuilder.createContext(
-        contextRoot: contextRoot,
-        sdkPath: resourceProvider.convertPath(sdkRoot));
+        contextRoot: contextRoot, sdkPath: sdkRoot.path);
     expect(context.analysisOptions, isNotNull);
     expect(context.contextRoot, contextRoot);
-    expect(context.sdkRoot?.path, resourceProvider.convertPath(sdkRoot));
+    expect(context.sdkRoot, sdkRoot);
   }
 
   void test_sourceFactory_bazelWorkspace() {
-    MockSdk(resourceProvider: resourceProvider);
-
     var projectPath = convertPath('/workspace/my/module');
     newFile('/workspace/WORKSPACE');
     newFolder('/workspace/bazel-bin');
@@ -190,8 +185,6 @@
   }
 
   void test_sourceFactory_pubWorkspace() {
-    MockSdk(resourceProvider: resourceProvider);
-
     var projectPath = convertPath('/home/my');
     newFile('/home/my/pubspec.yaml');
 
@@ -218,7 +211,7 @@
       resourceProvider: resourceProvider,
     ).createContext(
       contextRoot: roots.single,
-      sdkPath: convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
     );
   }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index ab00fb1..de37c97 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/context/packages.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
@@ -15,10 +16,9 @@
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/constant/evaluation.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/file_system/file_system.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
-import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
@@ -51,7 +51,6 @@
 
 @reflectiveTest
 class AnalysisDriverSchedulerTest with ResourceProviderMixin {
-  late DartSdk sdk;
   final ByteStore byteStore = MemoryByteStore();
 
   final StringBuffer logBuffer = StringBuffer();
@@ -61,8 +60,10 @@
 
   final List<AnalysisResultWithErrors> allResults = [];
 
+  Folder get sdkRoot => newFolder('/sdk');
+
   AnalysisDriver newDriver() {
-    sdk = MockSdk(resourceProvider: resourceProvider);
+    var sdk = FolderBasedDartSdk(resourceProvider, sdkRoot);
     AnalysisDriver driver = AnalysisDriver.tmp1(
       scheduler: scheduler,
       logger: logger,
@@ -83,7 +84,10 @@
   }
 
   void setUp() {
-    sdk = MockSdk(resourceProvider: resourceProvider);
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
     logger = PerformanceLog(logBuffer);
     scheduler = AnalysisDriverScheduler(logger);
     scheduler.start();
@@ -195,7 +199,7 @@
     driver1.priorityFiles = [a];
     driver2.priorityFiles = [a];
 
-    var result = await driver2.getResult2(b) as ResolvedUnitResult;
+    var result = await driver2.getResult(b) as ResolvedUnitResult;
     expect(result.path, b);
 
     await scheduler.status.firstWhere((status) => status.isIdle);
@@ -575,7 +579,7 @@
 
     // Get the (cached) result, reported to the stream.
     {
-      var result2 = await driver.getResult2(a, sendCachedToStream: true);
+      var result2 = await driver.getResult(a, sendCachedToStream: true);
       expect(result2, same(result1));
 
       expect(allResults, hasLength(1));
@@ -1258,21 +1262,21 @@
     expect(allResults, isEmpty);
 
     {
-      var result = await driver.getResolvedLibrary2(templatePath);
+      var result = await driver.getResolvedLibrary(templatePath);
       expect(result, isA<NotPathOfUriResult>());
       expect(allExceptions, isEmpty);
       expect(allResults, isEmpty);
     }
 
     {
-      var result = await driver.getResult2(templatePath);
+      var result = await driver.getResult(templatePath);
       expect(result, isA<NotPathOfUriResult>());
       expect(allExceptions, isEmpty);
       expect(allResults, isEmpty);
     }
 
     {
-      var result = await driver.getUnitElement2(templatePath);
+      var result = await driver.getUnitElement(templatePath);
       expect(result, isA<NotPathOfUriResult>());
       expect(allExceptions, isEmpty);
       expect(allResults, isEmpty);
@@ -1299,18 +1303,18 @@
     expect(driver.getCachedResult(a), same(result));
   }
 
-  test_getErrors2() async {
+  test_getErrors() async {
     String content = 'int f() => 42 + bar();';
     addTestFile(content, priority: true);
 
-    var result = await driver.getErrors2(testFile) as ErrorsResult;
+    var result = await driver.getErrors(testFile) as ErrorsResult;
     expect(result.path, testFile);
     expect(result.uri.toString(), 'package:test/test.dart');
     expect(result.errors, hasLength(1));
   }
 
-  test_getErrors2_notAbsolutePath() async {
-    var result = await driver.getErrors2('not_absolute.dart');
+  test_getErrors_notAbsolutePath() async {
+    var result = await driver.getErrors('not_absolute.dart');
     expect(result, isA<InvalidPathResult>());
   }
 
@@ -1417,7 +1421,7 @@
     expect(files, isNot(contains(c)));
   }
 
-  test_getFileSync2_changedFile() async {
+  test_getFileSync_changedFile() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
@@ -1454,7 +1458,7 @@
     expect((await driver.getResultValid(b)).errors, isEmpty);
   }
 
-  test_getFileSync2_library() async {
+  test_getFileSync_library() async {
     var path = convertPath('/test/lib/a.dart');
     newFile(path);
     var file = driver.getFileSyncValid(path);
@@ -1463,12 +1467,12 @@
     expect(file.isPart, isFalse);
   }
 
-  test_getFileSync2_notAbsolutePath() async {
-    var result = driver.getFileSync2('not_absolute.dart');
+  test_getFileSync_notAbsolutePath() async {
+    var result = driver.getFileSync('not_absolute.dart');
     expect(result, isA<InvalidPathResult>());
   }
 
-  test_getFileSync2_part() async {
+  test_getFileSync_part() async {
     var path = convertPath('/test/lib/a.dart');
     newFile(path, content: 'part of lib;');
     var file = driver.getFileSyncValid(path);
@@ -1500,7 +1504,7 @@
     }, throwsArgumentError);
   }
 
-  test_getLibraryByUri2() async {
+  test_getLibraryByUri() async {
     var a = '/test/lib/a.dart';
     var b = '/test/lib/b.dart';
 
@@ -1519,27 +1523,27 @@
 class B {}
 ''');
 
-    var result = await driver.getLibraryByUri2(aUriStr);
+    var result = await driver.getLibraryByUri(aUriStr);
     result as LibraryElementResult;
     expect(result.element.getType('A'), isNotNull);
     expect(result.element.getType('B'), isNotNull);
 
     // It is an error to ask for a library when we know that it is a part.
     expect(
-      await driver.getLibraryByUri2(bUriStr),
+      await driver.getLibraryByUri(bUriStr),
       isA<NotLibraryButPartResult>(),
     );
   }
 
-  test_getLibraryByUri2_unresolvedUri() async {
-    var result = await driver.getLibraryByUri2('package:foo/foo.dart');
+  test_getLibraryByUri_unresolvedUri() async {
+    var result = await driver.getLibraryByUri('package:foo/foo.dart');
     expect(result, isA<CannotResolveUriResult>());
   }
 
-  test_getParsedLibrary2() async {
+  test_getParsedLibrary() async {
     var content = 'class A {}';
     addTestFile(content);
-    var result = driver.getParsedLibrary2(testFile);
+    var result = driver.getParsedLibrary(testFile);
     result as ParsedLibraryResult;
     expect(result.units, hasLength(1));
     expect(result.units[0].path, testFile);
@@ -1548,49 +1552,48 @@
     expect(result.units[0].errors, isEmpty);
   }
 
-  test_getParsedLibrary2_invalidPath_notAbsolute() async {
-    var result = driver.getParsedLibrary2('not_absolute.dart');
+  test_getParsedLibrary_invalidPath_notAbsolute() async {
+    var result = driver.getParsedLibrary('not_absolute.dart');
     expect(result, isA<InvalidPathResult>());
   }
 
-  test_getParsedLibrary2_notLibraryButPart() async {
+  test_getParsedLibrary_notLibraryButPart() async {
     addTestFile('part of my;');
-    var result = driver.getParsedLibrary2(testFile);
+    var result = driver.getParsedLibrary(testFile);
     expect(result, isA<NotLibraryButPartResult>());
   }
 
-  test_getParsedLibraryByUri2() async {
+  test_getParsedLibraryByUri() async {
     var content = 'class A {}';
     addTestFile(content);
 
     var uri = Uri.parse('package:test/test.dart');
-    var result = driver.getParsedLibraryByUri2(uri);
+    var result = driver.getParsedLibraryByUri(uri);
     result as ParsedLibraryResult;
-    expect(result.uri, uri);
     expect(result.units, hasLength(1));
     expect(result.units[0].uri, uri);
     expect(result.units[0].path, testFile);
     expect(result.units[0].content, content);
   }
 
-  test_getParsedLibraryByUri2_notLibrary() async {
+  test_getParsedLibraryByUri_notLibrary() async {
     addTestFile('part of my;');
 
     var uri = Uri.parse('package:test/test.dart');
-    var result = driver.getParsedLibraryByUri2(uri);
+    var result = driver.getParsedLibraryByUri(uri);
     expect(result, isA<NotLibraryButPartResult>());
   }
 
-  test_getParsedLibraryByUri2_unresolvedUri() async {
+  test_getParsedLibraryByUri_unresolvedUri() async {
     var uri = Uri.parse('package:unknown/a.dart');
-    var result = driver.getParsedLibraryByUri2(uri);
+    var result = driver.getParsedLibraryByUri(uri);
     expect(result, isA<CannotResolveUriResult>());
   }
 
-  test_getResolvedLibrary2() async {
+  test_getResolvedLibrary() async {
     var content = 'class A {}';
     addTestFile(content);
-    var result = await driver.getResolvedLibrary2(testFile);
+    var result = await driver.getResolvedLibrary(testFile);
     result as ResolvedLibraryResult;
     expect(result.units, hasLength(1));
     expect(result.units[0].path, testFile);
@@ -1599,25 +1602,24 @@
     expect(result.units[0].errors, isEmpty);
   }
 
-  test_getResolvedLibrary2_invalidPath_notAbsolute() async {
-    var result = await driver.getResolvedLibrary2('not_absolute.dart');
+  test_getResolvedLibrary_invalidPath_notAbsolute() async {
+    var result = await driver.getResolvedLibrary('not_absolute.dart');
     expect(result, isA<InvalidPathResult>());
   }
 
-  test_getResolvedLibrary2_notLibraryButPart() async {
+  test_getResolvedLibrary_notLibraryButPart() async {
     addTestFile('part of my;');
-    var result = await driver.getResolvedLibrary2(testFile);
+    var result = await driver.getResolvedLibrary(testFile);
     expect(result, isA<NotLibraryButPartResult>());
   }
 
-  test_getResolvedLibraryByUri2() async {
+  test_getResolvedLibraryByUri() async {
     var content = 'class A {}';
     addTestFile(content);
 
     var uri = Uri.parse('package:test/test.dart');
-    var result = await driver.getResolvedLibraryByUri2(uri);
+    var result = await driver.getResolvedLibraryByUri(uri);
     result as ResolvedLibraryResult;
-    expect(result.uri, uri);
     expect(result.element.source.fullName, testFile);
     expect(result.units, hasLength(1));
     expect(result.units[0].uri, uri);
@@ -1625,17 +1627,17 @@
     expect(result.units[0].content, content);
   }
 
-  test_getResolvedLibraryByUri2_notLibrary() async {
+  test_getResolvedLibraryByUri_notLibrary() async {
     addTestFile('part of my;');
 
     var uri = Uri.parse('package:test/test.dart');
-    var result = await driver.getResolvedLibraryByUri2(uri);
+    var result = await driver.getResolvedLibraryByUri(uri);
     expect(result, isA<NotLibraryButPartResult>());
   }
 
-  test_getResolvedLibraryByUri2_unresolvedUri() async {
+  test_getResolvedLibraryByUri_unresolvedUri() async {
     var uri = Uri.parse('package:unknown/a.dart');
-    var result = await driver.getResolvedLibraryByUri2(uri);
+    var result = await driver.getResolvedLibraryByUri(uri);
     expect(result, isA<CannotResolveUriResult>());
   }
 
@@ -1646,7 +1648,6 @@
     ResolvedUnitResult result = await driver.getResultValid(testFile);
     expect(result.path, testFile);
     expect(result.uri.toString(), 'package:test/test.dart');
-    expect(result.state, ResultState.VALID);
     expect(result.content, content);
     expect(result.unit, isNotNull);
     expect(result.errors, hasLength(0));
@@ -1660,11 +1661,6 @@
     expect(allResults, [result]);
   }
 
-  test_getResult2_invalidPath_notAbsolute() async {
-    var result = await driver.getResult2('not_absolute.dart');
-    expect(result, isA<InvalidPathResult>());
-  }
-
   test_getResult_constants_defaultParameterValue_localFunction() async {
     var a = convertPath('/test/bin/a.dart');
     var b = convertPath('/test/bin/b.dart');
@@ -1697,7 +1693,7 @@
     ResolvedUnitResult result = await driver.getResultValid(a);
     expect(result.path, a);
     expect(result.uri.toString(), 'package:test/a.dart');
-    expect(result.state, ResultState.NOT_A_FILE);
+    expect(result.exists, isFalse);
     expect(result.content, '');
   }
 
@@ -1830,6 +1826,11 @@
     expect(a.name.staticElement, isFunctionElement);
   }
 
+  test_getResult_invalidPath_notAbsolute() async {
+    var result = await driver.getResult('not_absolute.dart');
+    expect(result, isA<InvalidPathResult>());
+  }
+
   test_getResult_invalidUri() async {
     String content = r'''
 import ':[invalid uri]';
@@ -2112,7 +2113,7 @@
     expect(result1.unit, isNotNull);
   }
 
-  test_getUnitElement2() async {
+  test_getUnitElement() async {
     String content = r'''
 foo(int p) {}
 main() {
@@ -2121,7 +2122,7 @@
 ''';
     addTestFile(content);
 
-    var unitResult = await driver.getUnitElement2(testFile);
+    var unitResult = await driver.getUnitElement(testFile);
     unitResult as UnitElementResult;
     CompilationUnitElement unitElement = unitResult.element;
     expect(unitElement.source.fullName, testFile);
@@ -2129,7 +2130,7 @@
         unorderedEquals(['foo', 'main']));
   }
 
-  test_getUnitElement2_doesNotExist_afterResynthesized() async {
+  test_getUnitElement_doesNotExist_afterResynthesized() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
@@ -2137,19 +2138,19 @@
 import 'package:test/b.dart';
 ''');
 
-    await driver.getResolvedLibrary2(a);
-    await driver.getUnitElement2(b);
+    await driver.getResolvedLibrary(a);
+    await driver.getUnitElement(b);
   }
 
-  test_getUnitElement2_invalidPath_notAbsolute() async {
-    var result = await driver.getUnitElement2('not_absolute.dart');
+  test_getUnitElement_invalidPath_notAbsolute() async {
+    var result = await driver.getUnitElement('not_absolute.dart');
     expect(result, isA<InvalidPathResult>());
   }
 
-  test_getUnitElement2_notDart() async {
+  test_getUnitElement_notDart() async {
     var path = convertPath('/test.txt');
     newFile(path, content: 'class A {}');
-    var unitResult = await driver.getUnitElement2(path);
+    var unitResult = await driver.getUnitElement(path);
     unitResult as UnitElementResult;
     expect(unitResult.element.classes.map((e) => e.name), ['A']);
   }
@@ -2350,7 +2351,7 @@
     getFile(asyncPath).delete();
     addTestFile('class C {}');
 
-    var result = await driver.getErrors2(testFile) as ErrorsResult;
+    var result = await driver.getErrors(testFile) as ErrorsResult;
     expect(result.errors, hasLength(1));
 
     AnalysisError error = result.errors[0];
@@ -2362,14 +2363,14 @@
     getFile(corePath).delete();
     addTestFile('class C {}');
 
-    var result = await driver.getErrors2(testFile) as ErrorsResult;
+    var result = await driver.getErrors(testFile) as ErrorsResult;
     expect(result.errors, hasLength(1));
 
     AnalysisError error = result.errors[0];
     expect(error.errorCode, CompileTimeErrorCode.MISSING_DART_LIBRARY);
   }
 
-  test_parseFile2_changedFile() async {
+  test_parseFileSync_changedFile() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
@@ -2394,7 +2395,7 @@
     // Library cycles are compared by their identity, so we would try to
     // reload linked summary for [a.dart], and crash.
     {
-      var parseResult = await driver.parseFile2(a) as ParsedUnitResult;
+      var parseResult = driver.parseFileSync(a) as ParsedUnitResult;
       expect(parseResult.unit.declarations, isEmpty);
     }
 
@@ -2409,7 +2410,7 @@
 
     // So, `class A {}` is declared now.
     {
-      var parseResult = driver.parseFileSync2(a) as ParsedUnitResult;
+      var parseResult = driver.parseFileSync(a) as ParsedUnitResult;
       expect(parseResult.unit.declarations, hasLength(1));
     }
     {
@@ -2418,70 +2419,7 @@
     }
   }
 
-  test_parseFile2_notAbsolutePath() async {
-    var result = await driver.parseFile2('not_absolute.dart');
-    expect(result, isA<InvalidPathResult>());
-  }
-
-  test_parseFile2_notDart() async {
-    var p = convertPath('/test/bin/a.txt');
-    newFile(p, content: 'class A {}');
-
-    var parseResult = await driver.parseFile2(p) as ParsedUnitResult;
-    expect(parseResult, isNotNull);
-    expect(driver.knownFiles, contains(p));
-  }
-
-  test_parseFileSync2_changedFile() async {
-    var a = convertPath('/test/lib/a.dart');
-    var b = convertPath('/test/lib/b.dart');
-
-    newFile(a, content: '');
-    newFile(b, content: r'''
-import 'a.dart';
-
-void f(A a) {}
-''');
-
-    // Ensure that [a.dart] library cycle is loaded.
-    // So, `a.dart` is in the library context.
-    await driver.getResultValid(a);
-
-    // Update the file, changing its API signature.
-    // Note that we don't call `changeFile`.
-    newFile(a, content: 'class A {}');
-
-    // Parse the file.
-    // We have not called `changeFile(a)`, so we should not read the file.
-    // Moreover, doing this will create a new library cycle [a.dart].
-    // Library cycles are compared by their identity, so we would try to
-    // reload linked summary for [a.dart], and crash.
-    {
-      var parseResult = driver.parseFileSync2(a) as ParsedUnitResult;
-      expect(parseResult.unit.declarations, isEmpty);
-    }
-
-    // We have not read `a.dart`, so `A` is still not declared.
-    {
-      var bResult = await driver.getResultValid(b);
-      expect(bResult.errors, isNotEmpty);
-    }
-
-    // Notify the driver that the file was changed.
-    driver.changeFile(a);
-
-    // So, `class A {}` is declared now.
-    {
-      var parseResult = driver.parseFileSync2(a) as ParsedUnitResult;
-      expect(parseResult.unit.declarations, hasLength(1));
-    }
-    {
-      var bResult = await driver.getResultValid(b);
-      expect(bResult.errors, isEmpty);
-    }
-  }
-
-  test_parseFileSync2_doesNotReadImportedFiles() async {
+  test_parseFileSync_doesNotReadImportedFiles() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
@@ -2493,15 +2431,15 @@
     expect(driver.fsState.knownFilePaths, isEmpty);
 
     // Don't read `a.dart` when parse.
-    driver.parseFileSync2(b);
+    driver.parseFileSync(b);
     expect(driver.fsState.knownFilePaths, unorderedEquals([b]));
 
     // Still don't read `a.dart` when parse the second time.
-    driver.parseFileSync2(b);
+    driver.parseFileSync(b);
     expect(driver.fsState.knownFilePaths, unorderedEquals([b]));
   }
 
-  test_parseFileSync2_doesNotReadPartedFiles() async {
+  test_parseFileSync_doesNotReadPartedFiles() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
@@ -2516,15 +2454,15 @@
     expect(driver.fsState.knownFilePaths, isEmpty);
 
     // Don't read `a.dart` when parse.
-    driver.parseFileSync2(b);
+    driver.parseFileSync(b);
     expect(driver.fsState.knownFilePaths, unorderedEquals([b]));
 
     // Still don't read `a.dart` when parse the second time.
-    driver.parseFileSync2(b);
+    driver.parseFileSync(b);
     expect(driver.fsState.knownFilePaths, unorderedEquals([b]));
   }
 
-  test_parseFileSync2_languageVersion() async {
+  test_parseFileSync_languageVersion() async {
     var path = convertPath('/test/lib/test.dart');
 
     newFile(path, content: r'''
@@ -2532,33 +2470,33 @@
 class A {}
 ''');
 
-    var parseResult = driver.parseFileSync2(path) as ParsedUnitResult;
+    var parseResult = driver.parseFileSync(path) as ParsedUnitResult;
     var languageVersion = parseResult.unit.languageVersionToken!;
     expect(languageVersion.major, 2);
     expect(languageVersion.minor, 7);
   }
 
-  test_parseFileSync2_languageVersion_null() async {
+  test_parseFileSync_languageVersion_null() async {
     var path = convertPath('/test/lib/test.dart');
 
     newFile(path, content: r'''
 class A {}
 ''');
 
-    var parseResult = driver.parseFileSync2(path) as ParsedUnitResult;
+    var parseResult = driver.parseFileSync(path) as ParsedUnitResult;
     expect(parseResult.unit.languageVersionToken, isNull);
   }
 
-  test_parseFileSync2_notAbsolutePath() {
-    var result = driver.parseFileSync2('not_absolute.dart');
+  test_parseFileSync_notAbsolutePath() async {
+    var result = driver.parseFileSync('not_absolute.dart');
     expect(result, isA<InvalidPathResult>());
   }
 
-  test_parseFileSync2_notDart() {
+  test_parseFileSync_notDart() async {
     var p = convertPath('/test/bin/a.txt');
     newFile(p, content: 'class A {}');
 
-    var parseResult = driver.parseFileSync2(p) as ParsedUnitResult;
+    var parseResult = driver.parseFileSync(p) as ParsedUnitResult;
     expect(parseResult, isNotNull);
     expect(driver.knownFiles, contains(p));
   }
@@ -2588,13 +2526,13 @@
 
     // Process a.dart so that we know that it's a library for c.dart later.
     {
-      var result = await driver.getErrors2(a) as ErrorsResult;
+      var result = await driver.getErrors(a) as ErrorsResult;
       expect(result.errors, isEmpty);
     }
 
     // c.dart does not have errors in the context of a.dart
     {
-      var result = await driver.getErrors2(c) as ErrorsResult;
+      var result = await driver.getErrors(c) as ErrorsResult;
       expect(result.errors, isEmpty);
     }
   }
@@ -2624,7 +2562,7 @@
 
     // c.dart is resolve in the context of a.dart, so have no errors
     {
-      var result = await driver.getErrors2(c) as ErrorsResult;
+      var result = await driver.getErrors(c) as ErrorsResult;
       expect(result.errors, isEmpty);
     }
   }
@@ -2743,7 +2681,7 @@
     expect(result.unit, isNotNull);
   }
 
-  test_part_getUnitElement2_afterLibrary() async {
+  test_part_getUnitElement_afterLibrary() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
@@ -2771,7 +2709,7 @@
 
     // c.dart is resolve in the context of a.dart, knows 'A' and 'B'.
     {
-      var result = await driver.getUnitElement2(c);
+      var result = await driver.getUnitElement(c);
       result as UnitElementResult;
       var partUnit = result.element;
 
@@ -2783,7 +2721,7 @@
     }
   }
 
-  test_part_getUnitElement2_beforeLibrary() async {
+  test_part_getUnitElement_beforeLibrary() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
@@ -2808,7 +2746,7 @@
 
     // c.dart is resolve in the context of a.dart, knows 'A' and 'B'.
     {
-      var result = await driver.getUnitElement2(c);
+      var result = await driver.getUnitElement(c);
       result as UnitElementResult;
       var partUnit = result.element;
 
@@ -2820,7 +2758,7 @@
     }
   }
 
-  test_part_getUnitElement2_noLibrary() async {
+  test_part_getUnitElement_noLibrary() async {
     var c = convertPath('/test/lib/c.dart');
     newFile(c, content: r'''
 part of a;
@@ -2833,7 +2771,7 @@
     // We don't know the library of c.dart, but we should get a result.
     // The types "A" and "B" are unresolved.
     {
-      var result = await driver.getUnitElement2(c);
+      var result = await driver.getUnitElement(c);
       result as UnitElementResult;
       var partUnit = result.element;
 
@@ -3082,55 +3020,6 @@
     }, throwsArgumentError);
   }
 
-  test_resetUriResolution() async {
-    var a = convertPath('/aaa/lib/a.dart');
-    var b = convertPath('/bbb/lib/b.dart');
-
-    newFile(a, content: '');
-    newFile(b, content: r'''
-import 'package:aaa/a.dart';
-A a;
-''');
-
-    // Subscribe for errors.
-    driver.addFile(b);
-
-    // `package:aaa/a.dart` does not define class `A`.
-    // So, there is an error in `b.dart`.
-    await waitForIdleWithoutExceptions();
-    expect(allResults, hasLength(1));
-    expect(allResults[0].path, b);
-    expect(allResults[0].errors, hasLength(2));
-
-    // Create generated file for `package:aaa/a.dart`.
-    var aUri = Uri.parse('package:aaa/a.dart');
-    var aGeneratedPath = convertPath('/generated/aaa/lib/a2.dart');
-    var aGeneratedFile = newFile(aGeneratedPath, content: 'class A {}');
-
-    // Configure UriResolver to provide this generated file.
-    generatedUriResolver.resolveAbsoluteFunction =
-        (uri) => aGeneratedFile.createSource(uri);
-    generatedUriResolver.restoreAbsoluteFunction = (source) {
-      String path = source.fullName;
-      if (path == a || path == aGeneratedPath) {
-        return aUri;
-      } else {
-        return null;
-      }
-    };
-
-    // Reset URI resolution, and analyze.
-    allResults.clear();
-    driver.resetUriResolution();
-
-    // `package:aaa/a.dart` is resolved differently now, so the new list of
-    // errors for `b.dart` (the empty list) is reported.
-    await waitForIdleWithoutExceptions();
-    expect(allResults, hasLength(1));
-    expect(allResults[0].path, b);
-    expect(allResults[0].errors, isEmpty);
-  }
-
   test_results_order() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
@@ -3469,7 +3358,7 @@
 
 extension on AnalysisDriver {
   FileResult getFileSyncValid(String path) {
-    return getFileSync2(path) as FileResult;
+    return getFileSync(path) as FileResult;
   }
 
   Set<String> get loadedLibraryUriSet {
@@ -3494,10 +3383,10 @@
   }
 
   Future<ResolvedUnitResult> getResultValid(String path) async {
-    return await getResult2(path) as ResolvedUnitResult;
+    return await getResult(path) as ResolvedUnitResult;
   }
 
   Future<LibraryElementResult> getLibraryByUriValid(String uriStr) async {
-    return await getLibraryByUri2(uriStr) as LibraryElementResult;
+    return await getLibraryByUri(uriStr) as LibraryElementResult;
   }
 }
diff --git a/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart b/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart
index 86df8d9..dfcbe51 100644
--- a/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/analysis/experiments_impl.dart';
 import 'package:analyzer/src/dart/analysis/feature_set_provider.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/source/package_map_resolver.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
@@ -25,14 +26,19 @@
 
 @reflectiveTest
 class FeatureSetProviderTest with ResourceProviderMixin {
-  late final MockSdk mockSdk;
   late SourceFactory sourceFactory;
   late FeatureSetProvider provider;
 
+  Folder get sdkRoot => newFolder('/sdk');
+
   void setUp() {
     newFile('/test/lib/test.dart', content: '');
 
-    mockSdk = MockSdk(resourceProvider: resourceProvider);
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+
     _createSourceFactory();
   }
 
@@ -430,7 +436,9 @@
       resolvers.add(packageUriResolver);
     }
     resolvers.addAll([
-      DartUriResolver(mockSdk),
+      DartUriResolver(
+        FolderBasedDartSdk(resourceProvider, sdkRoot),
+      ),
       ResourceUriResolver(resourceProvider),
     ]);
     sourceFactory = SourceFactoryImpl(resolvers);
diff --git a/pkg/analyzer/test/src/dart/analysis/file_byte_store_test.dart b/pkg/analyzer/test/src/dart/analysis/file_byte_store_test.dart
index c767dce..5b59568 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_byte_store_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_byte_store_test.dart
@@ -2,6 +2,8 @@
 // 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:typed_data';
+
 import 'package:analyzer/src/dart/analysis/file_byte_store.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -17,20 +19,20 @@
   final validator = FileByteStoreValidator();
 
   test_get_bad_notEnoughBytes() {
-    List<int> bytes = <int>[1, 2, 3];
+    var bytes = Uint8List.fromList([1, 2, 3]);
     var data = validator.getData(bytes);
     expect(data, isNull);
   }
 
   test_get_bad_notEnoughBytes_zero() {
-    List<int> bytes = <int>[];
+    var bytes = Uint8List.fromList([]);
     var data = validator.getData(bytes);
     expect(data, isNull);
   }
 
   test_get_bad_wrongChecksum() {
-    List<int> data = <int>[1, 2, 3];
-    List<int> bytes = validator.wrapData(data);
+    var data = Uint8List.fromList([1, 2, 3]);
+    var bytes = validator.wrapData(data);
 
     // Damage the checksum.
     expect(bytes[bytes.length - 1], isNot(42));
@@ -41,22 +43,24 @@
   }
 
   test_get_bad_wrongVersion() {
-    List<int> bytes = <int>[0xBA, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
+    var bytes = Uint8List.fromList(
+      [0xBA, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+    );
     var data = validator.getData(bytes);
     expect(data, isNull);
   }
 
   test_get_good() {
-    List<int> data = <int>[1, 2, 3];
-    List<int> bytes = validator.wrapData(data);
+    var data = Uint8List.fromList([1, 2, 3]);
+    var bytes = validator.wrapData(data);
     var data2 = validator.getData(bytes);
     expect(data2, hasLength(3));
     expect(data2, data);
   }
 
   test_get_good_zeroBytesData() {
-    List<int> data = <int>[];
-    List<int> bytes = validator.wrapData(data);
+    var data = Uint8List.fromList([]);
+    var bytes = validator.wrapData(data);
     var data2 = validator.getData(bytes);
     expect(data2, hasLength(0));
     expect(data2, data);
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index 29fcbe1..b298989 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -16,6 +16,7 @@
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/library_graph.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/engine.dart'
     show AnalysisOptions, AnalysisOptionsImpl;
 import 'package:analyzer/src/generated/source.dart';
@@ -37,8 +38,6 @@
 
 @reflectiveTest
 class FileSystemStateTest with ResourceProviderMixin {
-  late final MockSdk sdk;
-
   final ByteStore byteStore = MemoryByteStore();
   final FileContentOverlay contentOverlay = FileContentOverlay();
 
@@ -52,7 +51,13 @@
 
   void setUp() {
     logger = PerformanceLog(logBuffer);
-    sdk = MockSdk(resourceProvider: resourceProvider);
+
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+    var sdk = FolderBasedDartSdk(resourceProvider, sdkRoot);
 
     var packageMap = <String, List<Folder>>{
       'aaa': [getFolder('/aaa/lib')],
@@ -619,7 +624,7 @@
     expect(file.unlinked2, isNotNull);
 
     // Make the unlinked unit in the byte store zero-length, damaged.
-    byteStore.put(file.test.unlinkedKey, <int>[]);
+    byteStore.put(file.test.unlinkedKey, Uint8List(0));
 
     // Refresh should not fail, zero bytes in the store are ignored.
     file.refresh();
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 9512ac4..700ec3d 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -468,7 +468,7 @@
 ''');
     var element = findElement.unnamedConstructor('A');
 
-    var otherUnitResult = await driver.getResult2(other) as ResolvedUnitResult;
+    var otherUnitResult = await driver.getResult(other) as ResolvedUnitResult;
     CompilationUnit otherUnit = otherUnitResult.unit;
     Element main = otherUnit.declaredElement!.functions[0];
     var expected = [
@@ -1894,7 +1894,7 @@
 ''');
 
     var aLibraryResult =
-        await driver.getLibraryByUri2(aUri) as LibraryElementResult;
+        await driver.getLibraryByUri(aUri) as LibraryElementResult;
     ClassElement aClass = aLibraryResult.element.getType('A')!;
 
     // Search by 'type'.
@@ -1940,7 +1940,7 @@
     newFile(cccFilePath, content: 'class C implements List {}');
 
     var coreLibResult =
-        await driver.getLibraryByUri2('dart:core') as LibraryElementResult;
+        await driver.getLibraryByUri('dart:core') as LibraryElementResult;
     ClassElement listElement = coreLibResult.element.getType('List')!;
 
     var searchedFiles = SearchedFiles();
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 6a9d493..9512475 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -27,7 +27,7 @@
 @reflectiveTest
 class AnalysisSessionImpl_BazelWorkspaceTest
     extends BazelWorkspaceResolutionTest {
-  void test_getErrors2_notFileOfUri() async {
+  void test_getErrors_notFileOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
     newFile('$workspaceRootPath/bazel-bin/$relPath');
 
@@ -37,7 +37,7 @@
     expect(result, isA<NotPathOfUriResult>());
   }
 
-  void test_getErrors2_valid() async {
+  void test_getErrors_valid() async {
     var file = newFile(
       '$workspaceRootPath/dart/my/lib/a.dart',
       content: 'var x = 0',
@@ -45,13 +45,12 @@
 
     var session = contextFor(file.path).currentSession;
     var result = await session.getErrorsValid(file.path);
-    expect(result.state, ResultState.VALID);
     expect(result.path, file.path);
     expect(result.errors, hasLength(1));
     expect(result.uri.toString(), 'package:dart.my/a.dart');
   }
 
-  void test_getParsedLibrary2_notFileOfUri() async {
+  void test_getParsedLibrary_notFileOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
     newFile('$workspaceRootPath/bazel-bin/$relPath');
 
@@ -61,7 +60,7 @@
     expect(result, isA<NotPathOfUriResult>());
   }
 
-  void test_getResolvedLibrary2_notFileOfUri() async {
+  void test_getResolvedLibrary_notFileOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
     newFile('$workspaceRootPath/bazel-bin/$relPath');
 
@@ -71,7 +70,7 @@
     expect(result, isA<NotPathOfUriResult>());
   }
 
-  void test_getResolvedUnit2_notFileOfUri() async {
+  void test_getResolvedUnit_notFileOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
     newFile('$workspaceRootPath/bazel-bin/$relPath');
 
@@ -81,7 +80,7 @@
     expect(result, isA<NotPathOfUriResult>());
   }
 
-  void test_getResolvedUnit2_valid() async {
+  void test_getResolvedUnit_valid() async {
     var file = newFile(
       '$workspaceRootPath/dart/my/lib/a.dart',
       content: 'class A {}',
@@ -89,13 +88,12 @@
 
     var session = contextFor(file.path).currentSession;
     var result = await session.getResolvedUnit(file.path) as ResolvedUnitResult;
-    expect(result.state, ResultState.VALID);
     expect(result.path, file.path);
     expect(result.errors, isEmpty);
     expect(result.uri.toString(), 'package:dart.my/a.dart');
   }
 
-  void test_getUnitElement2_invalidPath_notAbsolute() async {
+  void test_getUnitElement_invalidPath_notAbsolute() async {
     var file = newFile(
       '$workspaceRootPath/dart/my/lib/a.dart',
       content: 'class A {}',
@@ -106,7 +104,7 @@
     expect(result, isA<InvalidPathResult>());
   }
 
-  void test_getUnitElement2_notPathOfUri() async {
+  void test_getUnitElement_notPathOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
     newFile('$workspaceRootPath/bazel-bin/$relPath');
 
@@ -116,7 +114,7 @@
     expect(result, isA<NotPathOfUriResult>());
   }
 
-  void test_getUnitElement2_valid() async {
+  void test_getUnitElement_valid() async {
     var file = newFile(
       '$workspaceRootPath/dart/my/lib/a.dart',
       content: 'class A {}',
@@ -124,7 +122,6 @@
 
     var session = contextFor(file.path).currentSession;
     var result = await session.getUnitElementValid(file.path);
-    expect(result.state, ResultState.VALID);
     expect(result.path, file.path);
     expect(result.element.classes, hasLength(1));
     expect(result.uri.toString(), 'package:dart.my/a.dart');
@@ -144,7 +141,11 @@
   late final String testPath;
 
   void setUp() {
-    MockSdk(resourceProvider: resourceProvider);
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
 
     testContextPath = newFolder('/home/test').path;
     aaaContextPath = newFolder('/home/aaa').path;
@@ -157,7 +158,7 @@
     contextCollection = AnalysisContextCollectionImpl(
       includedPaths: [testContextPath, aaaContextPath, bbbContextPath],
       resourceProvider: resourceProvider,
-      sdkPath: convertPath(sdkRoot),
+      sdkPath: sdkRoot.path,
     );
     context = contextCollection.contextFor(testContextPath);
     session = context.currentSession as AnalysisSessionImpl;
@@ -165,7 +166,7 @@
     testPath = convertPath('/home/test/lib/test.dart');
   }
 
-  test_getErrors2() async {
+  test_getErrors() async {
     newFile(testPath, content: 'class C {');
     var errorsResult = await session.getErrorsValid(testPath);
     expect(errorsResult.session, session);
@@ -173,17 +174,17 @@
     expect(errorsResult.errors, isNotEmpty);
   }
 
-  test_getErrors2_invalidPath_notAbsolute() async {
+  test_getErrors_invalidPath_notAbsolute() async {
     var errorsResult = await session.getErrors('not_absolute.dart');
     expect(errorsResult, isA<InvalidPathResult>());
   }
 
-  test_getFile2_invalidPath_notAbsolute() async {
+  test_getFile_invalidPath_notAbsolute() async {
     var errorsResult = session.getFile('not_absolute.dart');
     expect(errorsResult, isA<InvalidPathResult>());
   }
 
-  test_getFileSync2_library() async {
+  test_getFileSync_library() async {
     var path = convertPath('/home/test/lib/a.dart');
     newFile(path, content: '');
     var file = session.getFileValid(path);
@@ -192,7 +193,7 @@
     expect(file.isPart, isFalse);
   }
 
-  test_getFileSync2_part() async {
+  test_getFileSync_part() async {
     var path = convertPath('/home/test/lib/a.dart');
     newFile(path, content: 'part of lib;');
     var file = session.getFileValid(path);
@@ -201,7 +202,7 @@
     expect(file.isPart, isTrue);
   }
 
-  test_getLibraryByUri2() async {
+  test_getLibraryByUri() async {
     newFile(testPath, content: r'''
 class A {}
 class B {}
@@ -214,12 +215,12 @@
     expect(library.getType('C'), isNull);
   }
 
-  test_getLibraryByUri2_unresolvedUri() async {
+  test_getLibraryByUri_unresolvedUri() async {
     var result = await session.getLibraryByUri('package:foo/foo.dart');
     expect(result, isA<CannotResolveUriResult>());
   }
 
-  test_getParsedLibrary2() async {
+  test_getParsedLibrary() async {
     newFile(testPath, content: r'''
 class A {}
 class B {}
@@ -227,8 +228,6 @@
 
     var parsedLibrary = session.getParsedLibraryValid(testPath);
     expect(parsedLibrary.session, session);
-    expect(parsedLibrary.path, testPath);
-    expect(parsedLibrary.uri, Uri.parse('package:test/test.dart'));
 
     expect(parsedLibrary.units, hasLength(1));
     {
@@ -240,74 +239,6 @@
     }
   }
 
-  test_getParsedLibrary2_invalidPath_notAbsolute() async {
-    var result = session.getParsedLibrary('not_absolute.dart');
-    expect(result, isA<InvalidPathResult>());
-  }
-
-  test_getParsedLibrary2_notLibrary() async {
-    newFile(testPath, content: 'part of "a.dart";');
-    expect(session.getParsedLibrary(testPath), isA<NotLibraryButPartResult>());
-  }
-
-  test_getParsedLibrary2_parts() async {
-    var a = convertPath('/home/test/lib/a.dart');
-    var b = convertPath('/home/test/lib/b.dart');
-    var c = convertPath('/home/test/lib/c.dart');
-
-    var aContent = r'''
-part 'b.dart';
-part 'c.dart';
-
-class A {}
-''';
-
-    var bContent = r'''
-part of 'a.dart';
-
-class B1 {}
-class B2 {}
-''';
-
-    var cContent = r'''
-part of 'a.dart';
-
-class C1 {}
-class C2 {}
-class C3 {}
-''';
-
-    newFile(a, content: aContent);
-    newFile(b, content: bContent);
-    newFile(c, content: cContent);
-
-    var parsedLibrary = session.getParsedLibraryValid(a);
-    expect(parsedLibrary.path, a);
-    expect(parsedLibrary.uri, Uri.parse('package:test/a.dart'));
-    expect(parsedLibrary.units, hasLength(3));
-
-    {
-      var aUnit = parsedLibrary.units[0];
-      expect(aUnit.path, a);
-      expect(aUnit.uri, Uri.parse('package:test/a.dart'));
-      expect(aUnit.unit.declarations, hasLength(1));
-    }
-
-    {
-      var bUnit = parsedLibrary.units[1];
-      expect(bUnit.path, b);
-      expect(bUnit.uri, Uri.parse('package:test/b.dart'));
-      expect(bUnit.unit.declarations, hasLength(2));
-    }
-
-    {
-      var cUnit = parsedLibrary.units[2];
-      expect(cUnit.path, c);
-      expect(cUnit.uri, Uri.parse('package:test/c.dart'));
-      expect(cUnit.unit.declarations, hasLength(3));
-    }
-  }
-
   test_getParsedLibrary_getElementDeclaration_class() async {
     newFile(testPath, content: r'''
 class A {}
@@ -327,7 +258,7 @@
     expect(node.length, 10);
   }
 
-  test_getParsedLibrary_getElementDeclaration_notThisLibrary2() async {
+  test_getParsedLibrary_getElementDeclaration_notThisLibrary() async {
     newFile(testPath, content: '');
 
     var resolvedUnit =
@@ -390,7 +321,73 @@
     );
   }
 
-  test_getParsedLibraryByElement2() async {
+  test_getParsedLibrary_invalidPath_notAbsolute() async {
+    var result = session.getParsedLibrary('not_absolute.dart');
+    expect(result, isA<InvalidPathResult>());
+  }
+
+  test_getParsedLibrary_notLibrary() async {
+    newFile(testPath, content: 'part of "a.dart";');
+    expect(session.getParsedLibrary(testPath), isA<NotLibraryButPartResult>());
+  }
+
+  test_getParsedLibrary_parts() async {
+    var a = convertPath('/home/test/lib/a.dart');
+    var b = convertPath('/home/test/lib/b.dart');
+    var c = convertPath('/home/test/lib/c.dart');
+
+    var aContent = r'''
+part 'b.dart';
+part 'c.dart';
+
+class A {}
+''';
+
+    var bContent = r'''
+part of 'a.dart';
+
+class B1 {}
+class B2 {}
+''';
+
+    var cContent = r'''
+part of 'a.dart';
+
+class C1 {}
+class C2 {}
+class C3 {}
+''';
+
+    newFile(a, content: aContent);
+    newFile(b, content: bContent);
+    newFile(c, content: cContent);
+
+    var parsedLibrary = session.getParsedLibraryValid(a);
+    expect(parsedLibrary.units, hasLength(3));
+
+    {
+      var aUnit = parsedLibrary.units[0];
+      expect(aUnit.path, a);
+      expect(aUnit.uri, Uri.parse('package:test/a.dart'));
+      expect(aUnit.unit.declarations, hasLength(1));
+    }
+
+    {
+      var bUnit = parsedLibrary.units[1];
+      expect(bUnit.path, b);
+      expect(bUnit.uri, Uri.parse('package:test/b.dart'));
+      expect(bUnit.unit.declarations, hasLength(2));
+    }
+
+    {
+      var cUnit = parsedLibrary.units[2];
+      expect(cUnit.path, c);
+      expect(cUnit.uri, Uri.parse('package:test/c.dart'));
+      expect(cUnit.unit.declarations, hasLength(3));
+    }
+  }
+
+  test_getParsedLibraryByElement() async {
     newFile(testPath, content: '');
 
     var libraryResult = await session.getLibraryByUriValid(
@@ -400,12 +397,17 @@
 
     var parsedLibrary = session.getParsedLibraryByElementValid(element);
     expect(parsedLibrary.session, session);
-    expect(parsedLibrary.path, testPath);
-    expect(parsedLibrary.uri, Uri.parse('package:test/test.dart'));
     expect(parsedLibrary.units, hasLength(1));
+
+    {
+      var unit = parsedLibrary.units[0];
+      expect(unit.path, testPath);
+      expect(unit.uri, Uri.parse('package:test/test.dart'));
+      expect(unit.unit, isNotNull);
+    }
   }
 
-  test_getParsedLibraryByElement2_differentSession() async {
+  test_getParsedLibraryByElement_differentSession() async {
     newFile(testPath, content: '');
 
     var libraryResult = await session.getLibraryByUriValid(
@@ -420,7 +422,7 @@
     expect(result, isA<NotElementOfThisSessionResult>());
   }
 
-  test_getParsedUnit2() async {
+  test_getParsedUnit() async {
     newFile(testPath, content: r'''
 class A {}
 class B {}
@@ -433,7 +435,7 @@
     expect(unitResult.unit.declarations, hasLength(2));
   }
 
-  test_getParsedUnit2_invalidPath_notAbsolute() async {
+  test_getParsedUnit_invalidPath_notAbsolute() async {
     var result = session.getParsedUnit('not_absolute.dart');
     expect(result, isA<InvalidPathResult>());
   }
@@ -459,8 +461,6 @@
 
     var resolvedLibrary = await session.getResolvedLibraryValid(a);
     expect(resolvedLibrary.session, session);
-    expect(resolvedLibrary.path, a);
-    expect(resolvedLibrary.uri, Uri.parse('package:test/a.dart'));
 
     var typeProvider = resolvedLibrary.typeProvider;
     expect(typeProvider.intType.element.name, 'int');
@@ -504,18 +504,6 @@
     expect(bNode.declaredElement!.name, 'B');
   }
 
-  test_getResolvedLibrary2_invalidPath_notAbsolute() async {
-    var result = await session.getResolvedLibrary('not_absolute.dart');
-    expect(result, isA<InvalidPathResult>());
-  }
-
-  test_getResolvedLibrary2_notLibrary() async {
-    newFile(testPath, content: 'part of "a.dart";');
-
-    var result = await session.getResolvedLibrary(testPath);
-    expect(result, isA<NotLibraryButPartResult>());
-  }
-
   test_getResolvedLibrary_getElementDeclaration_notThisLibrary() async {
     newFile(testPath, content: '');
 
@@ -575,7 +563,19 @@
     );
   }
 
-  test_getResolvedLibraryByElement2() async {
+  test_getResolvedLibrary_invalidPath_notAbsolute() async {
+    var result = await session.getResolvedLibrary('not_absolute.dart');
+    expect(result, isA<InvalidPathResult>());
+  }
+
+  test_getResolvedLibrary_notLibrary() async {
+    newFile(testPath, content: 'part of "a.dart";');
+
+    var result = await session.getResolvedLibrary(testPath);
+    expect(result, isA<NotLibraryButPartResult>());
+  }
+
+  test_getResolvedLibraryByElement() async {
     newFile(testPath, content: '');
 
     var libraryResult = await session.getLibraryByUriValid(
@@ -585,13 +585,13 @@
 
     var result = await session.getResolvedLibraryByElementValid(element);
     expect(result.session, session);
-    expect(result.path, testPath);
-    expect(result.uri, Uri.parse('package:test/test.dart'));
     expect(result.units, hasLength(1));
+    expect(result.units[0].path, testPath);
+    expect(result.units[0].uri, Uri.parse('package:test/test.dart'));
     expect(result.units[0].unit.declaredElement, isNotNull);
   }
 
-  test_getResolvedLibraryByElement2_differentSession() async {
+  test_getResolvedLibraryByElement_differentSession() async {
     newFile(testPath, content: '');
 
     var libraryResult = await session.getLibraryByUriValid(
@@ -606,7 +606,7 @@
     expect(result, isA<NotElementOfThisSessionResult>());
   }
 
-  test_getResolvedUnit2() async {
+  test_getResolvedUnit() async {
     newFile(testPath, content: r'''
 class A {}
 class B {}
@@ -622,7 +622,7 @@
     expect(unitResult.libraryElement, isNotNull);
   }
 
-  test_getUnitElement2() async {
+  test_getUnitElement() async {
     newFile(testPath, content: r'''
 class A {}
 class B {}
diff --git a/pkg/analyzer/test/src/dart/analysis/uri_converter_test.dart b/pkg/analyzer/test/src/dart/analysis/uri_converter_test.dart
index f8d8c23..2b229fc 100644
--- a/pkg/analyzer/test/src/dart/analysis/uri_converter_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/uri_converter_test.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
 import 'package:analyzer/src/dart/analysis/uri_converter.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/source/package_map_resolver.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
@@ -30,8 +31,16 @@
     Folder barFolder = newFolder('/packages/bar/lib');
     Folder fooFolder = newFolder('/packages/foo/lib');
 
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+
     SourceFactory sourceFactory = SourceFactory([
-      DartUriResolver(MockSdk(resourceProvider: resourceProvider)),
+      DartUriResolver(
+        FolderBasedDartSdk(resourceProvider, sdkRoot),
+      ),
       PackageMapUriResolver(resourceProvider, {
         'foo': [fooFolder],
         'bar': [barFolder],
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 b14053b..70b153a 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
@@ -1925,7 +1925,7 @@
 
   void test_visitGenericTypeAlias() {
     _assertSource(
-        "typedef X<S> = S Function<T>(T)",
+        "typedef X<S> = S Function<T>(T);",
         AstTestFactory.genericTypeAlias(
             'X',
             AstTestFactory.typeParameterList2(['S']),
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index 9044238..f544ef9 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/element/element.dart';
@@ -19,6 +20,8 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(ConstantVisitorTest);
     defineReflectiveTests(ConstantVisitorWithoutNullSafetyTest);
+    defineReflectiveTests(InstanceCreationEvaluatorTest);
+    defineReflectiveTests(InstanceCreationEvaluatorWithoutNullSafetyTest);
   });
 }
 
@@ -166,6 +169,18 @@
     );
   }
 
+  test_identical_functionReference_explicitTypeArgs_sameElement_runtimeTypeEquality() async {
+    await resolveTestCode('''
+import 'dart:async';
+void foo<T>(T a) {}
+const g = identical(foo<Object>, foo<FutureOr<Object>>);
+''');
+    expect(
+      _evaluateConstant('g'),
+      _boolValue(true),
+    );
+  }
+
   test_identical_functionReference_implicitTypeArgs_differentTypes() async {
     await resolveTestCode('''
 void foo<T>(T a) {}
@@ -317,21 +332,6 @@
     );
   }
 
-  test_visitAsExpression_potentialConstType() async {
-    await assertNoErrorsInCode('''
-const num three = 3;
-
-class C<T extends num> {
-  final T w;
-  const C() : w = three as T;
-}
-
-void main() {
-  const C<int>().w;
-}
-''');
-  }
-
   test_visitBinaryExpression_gtGtGt_negative_fewerBits() async {
     await resolveTestCode('''
 const c = 0xFFFFFFFF >>> 8;
@@ -557,6 +557,49 @@
     _assertTypeArguments(result, null);
   }
 
+  test_visitIsExpression_is_null() async {
+    await resolveTestCode('''
+const a = null;
+const b = a is A;
+class A {}
+''');
+    DartObjectImpl result = _evaluateConstant('b');
+    expect(result.type, typeProvider.boolType);
+    expect(result.toBoolValue(), false);
+  }
+
+  test_visitIsExpression_is_null_nullable() async {
+    await resolveTestCode('''
+const a = null;
+const b = a is A?;
+class A {}
+''');
+    DartObjectImpl result = _evaluateConstant('b');
+    expect(result.type, typeProvider.boolType);
+    expect(result.toBoolValue(), true);
+  }
+
+  test_visitIsExpression_is_null_object() async {
+    await resolveTestCode('''
+const a = null;
+const b = a is Object;
+''');
+    DartObjectImpl result = _evaluateConstant('b');
+    expect(result.type, typeProvider.boolType);
+    expect(result.toBoolValue(), false);
+  }
+
+  test_visitIsExpression_isNot_null() async {
+    await resolveTestCode('''
+const a = null;
+const b = a is! A;
+class A {}
+''');
+    DartObjectImpl result = _evaluateConstant('b');
+    expect(result.type, typeProvider.boolType);
+    expect(result.toBoolValue(), true);
+  }
+
   test_visitPrefixedIdentifier_genericFunction_instantiated() async {
     await resolveTestCode('''
 import '' as self;
@@ -566,7 +609,48 @@
     var result = _evaluateConstant('g');
     assertType(result.type, 'void Function(int)');
     assertElement(result.toFunctionValue(), findElement.topFunction('f'));
-    _assertTypeArguments(result, null);
+    _assertTypeArguments(result, ['int']);
+  }
+
+  test_visitPrefixedIdentifier_genericFunction_instantiatedNonIdentifier() async {
+    await resolveTestCode('''
+void f<T>(T a) {}
+const b = false;
+const g1 = f;
+const g2 = f;
+const void Function(int) h = b ? g1 : g2;
+''');
+    var result = _evaluateConstant('h');
+    assertType(result.type, 'void Function(int)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, ['int']);
+  }
+
+  test_visitPrefixedIdentifier_genericFunction_instantiatedPrefixed() async {
+    await resolveTestCode('''
+import '' as self;
+void f<T>(T a) {}
+const g = f;
+const void Function(int) h = self.g;
+''');
+    var result = _evaluateConstant('h');
+    assertType(result.type, 'void Function(int)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, ['int']);
+  }
+
+  test_visitPropertyAccess_genericFunction_instantiated() async {
+    await resolveTestCode('''
+import '' as self;
+class C {
+  static void f<T>(T a) {}
+}
+const void Function(int) g = self.C.f;
+''');
+    var result = _evaluateConstant('g');
+    assertType(result.type, 'void Function(int)');
+    assertElement(result.toFunctionValue(), findElement.method('f'));
+    _assertTypeArguments(result, ['int']);
   }
 
   test_visitSimpleIdentifier_className() async {
@@ -587,6 +671,17 @@
     var result = _evaluateConstant('g');
     assertType(result.type, 'void Function(int)');
     assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, ['int']);
+  }
+
+  test_visitSimpleIdentifier_genericFunction_nonGeneric() async {
+    await resolveTestCode('''
+void f(int a) {}
+const void Function(int) g = f;
+''');
+    var result = _evaluateConstant('g');
+    assertType(result.type, 'void Function(int)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
     _assertTypeArguments(result, null);
   }
 
@@ -843,6 +938,21 @@
     expect(result.toSetValue()!.map((e) => e.toIntValue()), [1, 2, 3, 4]);
   }
 
+  test_typeParameter() async {
+    await resolveTestCode('''
+class A<X> {
+  const A();
+  void m() {
+    const x = X;
+  }
+}
+''');
+    var result = _evaluateConstantLocal('x', errorCodes: [
+      CompileTimeErrorCode.INVALID_CONSTANT,
+    ]);
+    expect(result, isNull);
+  }
+
   test_visitAsExpression_instanceOfSameClass() async {
     await resolveTestCode('''
 const a = const A();
@@ -1338,89 +1448,20 @@
         errorCodes: [CompileTimeErrorCode.INVALID_CONSTANT]);
   }
 
-  test_visitInstanceCreationExpression_bool_fromEnvironment() async {
+  test_visitConditionalExpression_lazy_unknown_int_invalid() async {
     await resolveTestCode('''
-const a = bool.fromEnvironment('a');
-const b = bool.fromEnvironment('b', defaultValue: true);
+const c = identical(0, 0.0) ? 1 : new Object();
 ''');
-    expect(
-      _evaluateConstant('a'),
-      _boolValue(false),
-    );
-    expect(
-      _evaluateConstant('a', declaredVariables: {'a': 'true'}),
-      _boolValue(true),
-    );
-
-    expect(
-      _evaluateConstant(
-        'b',
-        declaredVariables: {'b': 'bbb'},
-        lexicalEnvironment: {'defaultValue': _boolValue(true)},
-      ),
-      _boolValue(true),
-    );
+    _evaluateConstantOrNull('c',
+        errorCodes: [CompileTimeErrorCode.INVALID_CONSTANT]);
   }
 
-  test_visitInstanceCreationExpression_bool_hasEnvironment() async {
+  test_visitConditionalExpression_lazy_unknown_invalid_int() async {
     await resolveTestCode('''
-const a = bool.hasEnvironment('a');
+const c = identical(0, 0.0) ? 1 : new Object();
 ''');
-    expect(
-      _evaluateConstant('a'),
-      _boolValue(false),
-    );
-
-    expect(
-      _evaluateConstant('a', declaredVariables: {'a': '42'}),
-      _boolValue(true),
-    );
-  }
-
-  test_visitInstanceCreationExpression_int_fromEnvironment() async {
-    await resolveTestCode('''
-const a = int.fromEnvironment('a');
-const b = int.fromEnvironment('b', defaultValue: 42);
-''');
-    expect(
-      _evaluateConstant('a'),
-      _intValue(0),
-    );
-    expect(
-      _evaluateConstant('a', declaredVariables: {'a': '5'}),
-      _intValue(5),
-    );
-
-    expect(
-      _evaluateConstant(
-        'b',
-        declaredVariables: {'b': 'bbb'},
-        lexicalEnvironment: {'defaultValue': _intValue(42)},
-      ),
-      _intValue(42),
-    );
-  }
-
-  test_visitInstanceCreationExpression_string_fromEnvironment() async {
-    await resolveTestCode('''
-const a = String.fromEnvironment('a');
-''');
-    expect(
-      _evaluateConstant('a'),
-      DartObjectImpl(
-        typeSystem,
-        typeProvider.stringType,
-        StringState(''),
-      ),
-    );
-    expect(
-      _evaluateConstant('a', declaredVariables: {'a': 'test'}),
-      DartObjectImpl(
-        typeSystem,
-        typeProvider.stringType,
-        StringState('test'),
-      ),
-    );
+    _evaluateConstantOrNull('c',
+        errorCodes: [CompileTimeErrorCode.INVALID_CONSTANT]);
   }
 
   test_visitIntegerLiteral() async {
@@ -1522,17 +1563,6 @@
     expect(result.toBoolValue(), false);
   }
 
-  test_visitIsExpression_is_null() async {
-    await resolveTestCode('''
-const a = null;
-const b = a is A;
-class A {}
-''');
-    DartObjectImpl result = _evaluateConstant('b');
-    expect(result.type, typeProvider.boolType);
-    expect(result.toBoolValue(), false);
-  }
-
   test_visitIsExpression_is_null_dynamic() async {
     await resolveTestCode('''
 const a = null;
@@ -1555,17 +1585,6 @@
     expect(result.toBoolValue(), true);
   }
 
-  test_visitIsExpression_is_null_object() async {
-    await resolveTestCode('''
-const a = null;
-const b = a is Object;
-class A {}
-''');
-    DartObjectImpl result = _evaluateConstant('b');
-    expect(result.type, typeProvider.boolType);
-    expect(result.toBoolValue(), true);
-  }
-
   test_visitIsExpression_isNot_instanceOfSameClass() async {
     await resolveTestCode('''
 const a = const A();
@@ -1627,17 +1646,6 @@
     expect(result.toBoolValue(), true);
   }
 
-  test_visitIsExpression_isNot_null() async {
-    await resolveTestCode('''
-const a = null;
-const b = a is! A;
-class A {}
-''');
-    DartObjectImpl result = _evaluateConstant('b');
-    expect(result.type, typeProvider.boolType);
-    expect(result.toBoolValue(), true);
-  }
-
   test_visitPrefixedIdentifier_function() async {
     await resolveTestCode('''
 import '' as self;
@@ -1746,7 +1754,9 @@
     expect(result.type, typeProvider.intType);
     expect(result.toIntValue(), 3);
   }
+}
 
+class ConstantVisitorTestSupport extends PubPackageResolutionTest {
   void _assertBoolValue(DartObjectImpl result, bool value) {
     expect(result.type, typeProvider.boolType);
     expect(result.toBoolValue(), value);
@@ -1757,6 +1767,24 @@
     expect(result.toIntValue(), value);
   }
 
+  void _assertTypeArguments(DartObject value, List<String>? typeArgumentNames) {
+    var typeArguments = (value as DartObjectImpl).typeArguments;
+    if (typeArguments == null) {
+      expect(typeArguments, typeArgumentNames);
+      return;
+    }
+    expect(
+      typeArguments.map((arg) => arg.getDisplayString(withNullability: true)),
+      equals(typeArgumentNames),
+    );
+  }
+
+  /// Asserts that evaluation of [name] results in no errors, and a non-null
+  /// [DartObject].
+  void _assertValidConstant(String name) {
+    _evaluateConstant(name);
+  }
+
   DartObjectImpl _boolValue(bool value) {
     if (identical(value, false)) {
       return DartObjectImpl(
@@ -1774,28 +1802,6 @@
     fail("Invalid boolean value used in test");
   }
 
-  DartObjectImpl _intValue(int value) {
-    return DartObjectImpl(
-      typeSystem,
-      typeProvider.intType,
-      IntState(value),
-    );
-  }
-}
-
-class ConstantVisitorTestSupport extends PubPackageResolutionTest {
-  void _assertTypeArguments(DartObject value, List<String>? typeArgumentNames) {
-    var typeArguments = (value as DartObjectImpl).typeArguments;
-    if (typeArguments == null) {
-      expect(typeArguments, typeArgumentNames);
-      return;
-    }
-    expect(
-      typeArguments.map((arg) => arg.getDisplayString(withNullability: true)),
-      equals(typeArgumentNames),
-    );
-  }
-
   DartObjectImpl _evaluateConstant(
     String name, {
     List<ErrorCode>? errorCodes,
@@ -1874,6 +1880,14 @@
     }
     return result;
   }
+
+  DartObjectImpl _intValue(int value) {
+    return DartObjectImpl(
+      typeSystem,
+      typeProvider.intType,
+      IntState(value),
+    );
+  }
 }
 
 @reflectiveTest
@@ -1888,4 +1902,435 @@
     DartObjectImpl result = _evaluateConstant('b');
     expect(result.type, typeProvider.nullType);
   }
+
+  test_visitIsExpression_is_null() async {
+    await resolveTestCode('''
+const a = null;
+const b = a is A;
+class A {}
+''');
+    DartObjectImpl result = _evaluateConstant('b');
+    expect(result.type, typeProvider.boolType);
+    expect(result.toBoolValue(), true);
+  }
+
+  test_visitIsExpression_is_null_object() async {
+    await resolveTestCode('''
+const a = null;
+const b = a is Object;
+''');
+    DartObjectImpl result = _evaluateConstant('b');
+    expect(result.type, typeProvider.boolType);
+    expect(result.toBoolValue(), true);
+  }
+
+  test_visitIsExpression_isNot_null() async {
+    await resolveTestCode('''
+const a = null;
+const b = a is! A;
+class A {}
+''');
+    DartObjectImpl result = _evaluateConstant('b');
+    expect(result.type, typeProvider.boolType);
+    expect(result.toBoolValue(), false);
+  }
 }
+
+@reflectiveTest
+class InstanceCreationEvaluatorTest extends ConstantVisitorTestSupport
+    with InstanceCreationEvaluatorTestCases {
+  test_assertInitializer_assertIsNot_null_nullableType() async {
+    await resolveTestCode('''
+class A<T> {
+  const A() : assert(null is! T);
+}
+
+const a = const A<int?>();
+''');
+
+    _evaluateConstantOrNull(
+      'a',
+      errorCodes: [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION],
+    );
+  }
+
+  test_fieldInitializer_functionReference_withTypeParameter() async {
+    await resolveTestCode('''
+void g<U>(U a) {}
+class A<T> {
+  final void Function(T) f;
+  const A(): f = g;
+}
+const a = const A<int>();
+''');
+    var result = _evaluateConstant('a');
+    var aElement = findElement.class_('A');
+    var expectedType = aElement.instantiate(
+        typeArguments: [typeProvider.intType],
+        nullabilitySuffix: NullabilitySuffix.none);
+    expect(result.type, expectedType);
+
+    var fField = result.fields!['f']!;
+    var gElement = findElement.topFunction('g');
+    var expectedFunctionType =
+        gElement.type.instantiate([typeProvider.intType]);
+    expect(fField.type, expectedFunctionType);
+  }
+
+  test_fieldInitializer_typeParameter() async {
+    await resolveTestCode('''
+class A<T> {
+  final Object f;
+  const A(): f = T;
+}
+const a = const A<int>();
+''');
+    var result = _evaluateConstant('a');
+    var aElement = findElement.class_('A');
+    var expectedType = aElement.instantiate(
+        typeArguments: [typeProvider.intType],
+        nullabilitySuffix: NullabilitySuffix.none);
+    expect(result.type, expectedType);
+  }
+
+  test_fieldInitializer_typeParameter_implicitTypeArgs() async {
+    await resolveTestCode('''
+class A<T> {
+  final Object f;
+  const A(): f = T;
+}
+const a = const A();
+''');
+    var result = _evaluateConstant('a');
+    var aElement = findElement.class_('A');
+    var expectedType = aElement.instantiate(
+        typeArguments: [typeProvider.dynamicType],
+        nullabilitySuffix: NullabilitySuffix.none);
+    expect(result.type, expectedType);
+  }
+
+  test_fieldInitializer_typeParameter_typeAlias() async {
+    await resolveTestCode('''
+class A<T, U> {
+  final Object f, g;
+  const A(): f = T, g = U;
+}
+typedef B<S> = A<int, S>;
+const a = const B<String>();
+''');
+    var result = _evaluateConstant('a');
+    var aElement = findElement.class_('A');
+    var expectedType = aElement.instantiate(
+        typeArguments: [typeProvider.intType, typeProvider.stringType],
+        nullabilitySuffix: NullabilitySuffix.none);
+    expect(result.type, expectedType);
+  }
+
+  test_fieldInitializer_typeParameter_withoutConstructorTearoffs() async {
+    await resolveTestCode('''
+// @dart=2.12
+class A<T> {
+  final Object f;
+  const A(): f = T;
+}
+const a = const A<int>();
+''');
+    var result = _evaluateConstant('a', errorCodes: [
+      CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
+      CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
+    ]);
+    var aElement = findElement.class_('A');
+    var expectedType = aElement.instantiate(
+        typeArguments: [typeProvider.intType],
+        nullabilitySuffix: NullabilitySuffix.none);
+    expect(result.type, expectedType);
+  }
+
+  test_fieldInitializer_visitAsExpression_potentialConstType() async {
+    await assertNoErrorsInCode('''
+const num three = 3;
+
+class C<T extends num> {
+  final T w;
+  const C() : w = three as T;
+}
+
+void main() {
+  const C<int>().w;
+}
+''');
+  }
+
+  test_redirectingConstructor_typeParameter() async {
+    await resolveTestCode('''
+class A<T> {
+  final Object f;
+  const A(): this.named(T);
+  const A.named(Object t): f = t;
+}
+const a = const A<int>();
+''');
+    var result = _evaluateConstant('a');
+    expect(result, isNotNull);
+  }
+
+  test_superInitializer_typeParameter() async {
+    await resolveTestCode('''
+class A<T> {
+  final Object f;
+  const A(Object t): f = t;
+}
+class B<T> extends A<T> {
+  const B(): super(T);
+}
+const a = const B<int>();
+''');
+    var result = _evaluateConstant('a');
+    var bElement = findElement.class_('B');
+    var expectedType = bElement.instantiate(
+        typeArguments: [typeProvider.intType],
+        nullabilitySuffix: NullabilitySuffix.none);
+    expect(result.type, expectedType);
+  }
+
+  test_superInitializer_typeParameter_superNonGeneric() async {
+    await resolveTestCode('''
+class A {
+  final Object f;
+  const A(Object t): f = t;
+}
+class B<T> extends A {
+  const B(): super(T);
+}
+const a = const B<int>();
+''');
+    var result = _evaluateConstant('a');
+    expect(result, isNotNull);
+  }
+}
+
+@reflectiveTest
+mixin InstanceCreationEvaluatorTestCases on ConstantVisitorTestSupport {
+  test_assertInitializer_assertIsNot_false() async {
+    await resolveTestCode('''
+class A {
+  const A() : assert(0 is! int);
+}
+
+const a = const A(null);
+''');
+    _evaluateConstantOrNull(
+      'a',
+      errorCodes: [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION],
+    );
+  }
+
+  test_assertInitializer_assertIsNot_true() async {
+    await resolveTestCode('''
+class A {
+  const A() : assert(0 is! String);
+}
+
+const a = const A(null);
+''');
+    _assertValidConstant('a');
+  }
+
+  test_assertInitializer_intInDoubleContext_assertIsDouble_true() async {
+    await resolveTestCode('''
+class A {
+  const A(double x): assert(x is double);
+}
+const a = const A(0);
+''');
+    _assertValidConstant('a');
+  }
+
+  test_assertInitializer_intInDoubleContext_false() async {
+    await resolveTestCode('''
+class A {
+  const A(double x): assert((x + 3) / 2 == 1.5);
+}
+const a = const A(1);
+''');
+    _evaluateConstantOrNull(
+      'a',
+      errorCodes: [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION],
+    );
+  }
+
+  test_assertInitializer_intInDoubleContext_true() async {
+    await resolveTestCode('''
+class A {
+  const A(double x): assert((x + 3) / 2 == 1.5);
+}
+const a = const A(0);
+''');
+    _assertValidConstant('a');
+  }
+
+  test_assertInitializer_simple_false() async {
+    await resolveTestCode('''
+class A {
+  const A(): assert(1 is String);
+}
+const a = const A();
+''');
+    _evaluateConstantOrNull(
+      'a',
+      errorCodes: [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION],
+    );
+  }
+
+  test_assertInitializer_simple_true() async {
+    await resolveTestCode('''
+class A {
+  const A(): assert(1 is int);
+}
+const a = const A();
+''');
+    _assertValidConstant('a');
+  }
+
+  test_assertInitializer_simpleInSuperInitializer_false() async {
+    await resolveTestCode('''
+class A {
+  const A(): assert(1 is String);
+}
+class B extends A {
+  const B() : super();
+}
+const b = const B();
+''');
+    _evaluateConstantOrNull(
+      'b',
+      errorCodes: [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION],
+    );
+  }
+
+  test_assertInitializer_simpleInSuperInitializer_true() async {
+    await resolveTestCode('''
+class A {
+  const A(): assert(1 is int);
+}
+class B extends A {
+  const B() : super();
+}
+const b = const B();
+''');
+    _assertValidConstant('b');
+  }
+
+  test_assertInitializer_usingArgument_false() async {
+    await resolveTestCode('''
+class A {
+  const A(int x): assert(x > 0);
+}
+const a = const A(0);
+''');
+    _evaluateConstantOrNull(
+      'a',
+      errorCodes: [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION],
+    );
+  }
+
+  test_assertInitializer_usingArgument_true() async {
+    await resolveTestCode('''
+class A {
+  const A(int x): assert(x > 0);
+}
+const a = const A(1);
+''');
+    _assertValidConstant('a');
+  }
+
+  test_bool_fromEnvironment() async {
+    await resolveTestCode('''
+const a = bool.fromEnvironment('a');
+const b = bool.fromEnvironment('b', defaultValue: true);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(false),
+    );
+    expect(
+      _evaluateConstant('a', declaredVariables: {'a': 'true'}),
+      _boolValue(true),
+    );
+
+    expect(
+      _evaluateConstant(
+        'b',
+        declaredVariables: {'b': 'bbb'},
+        lexicalEnvironment: {'defaultValue': _boolValue(true)},
+      ),
+      _boolValue(true),
+    );
+  }
+
+  test_bool_hasEnvironment() async {
+    await resolveTestCode('''
+const a = bool.hasEnvironment('a');
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(false),
+    );
+
+    expect(
+      _evaluateConstant('a', declaredVariables: {'a': '42'}),
+      _boolValue(true),
+    );
+  }
+
+  test_int_fromEnvironment() async {
+    await resolveTestCode('''
+const a = int.fromEnvironment('a');
+const b = int.fromEnvironment('b', defaultValue: 42);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _intValue(0),
+    );
+    expect(
+      _evaluateConstant('a', declaredVariables: {'a': '5'}),
+      _intValue(5),
+    );
+
+    expect(
+      _evaluateConstant(
+        'b',
+        declaredVariables: {'b': 'bbb'},
+        lexicalEnvironment: {'defaultValue': _intValue(42)},
+      ),
+      _intValue(42),
+    );
+  }
+
+  test_string_fromEnvironment() async {
+    await resolveTestCode('''
+const a = String.fromEnvironment('a');
+''');
+    expect(
+      _evaluateConstant('a'),
+      DartObjectImpl(
+        typeSystem,
+        typeProvider.stringType,
+        StringState(''),
+      ),
+    );
+    expect(
+      _evaluateConstant('a', declaredVariables: {'a': 'test'}),
+      DartObjectImpl(
+        typeSystem,
+        typeProvider.stringType,
+        StringState('test'),
+      ),
+    );
+  }
+}
+
+@reflectiveTest
+class InstanceCreationEvaluatorWithoutNullSafetyTest
+    extends ConstantVisitorTestSupport
+    with InstanceCreationEvaluatorTestCases, WithoutNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart b/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
index 0d881c1..e356a67 100644
--- a/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
@@ -118,42 +118,25 @@
 ''');
   }
 
-  test_typeParameter_ofExtension() async {
-    await _assertNeverConst(r'''
-extension E<T> on int {
-  void foo() {
-    T x;
-  }
-}
-''');
-  }
-
   test_typeParameter_ofFunction() async {
-    await _assertNeverConst(r'''
+    await _assertPotentiallyConst('''
 void foo<T>() {
   T x;
 }
 ''');
   }
 
-  test_typeParameter_ofMethod() async {
-    await _assertNeverConst(r'''
-class A {
-  void foo<T>() {
-    T x;
+  test_typeParameter_ofFunctionType() async {
+    await _assertPotentiallyConst('''
+class A<U> {
+  const A();
+  void foo() {
+    void Function<X>(X) x;
   }
 }
 ''');
   }
 
-  test_typeParameter_ofMixin() async {
-    await _assertNeverConst(r'''
-mixin M<T> {
-  T x;
-}
-''');
-  }
-
   test_void() async {
     await _assertConst(r'''
 void x;
@@ -458,6 +441,76 @@
             ]);
   }
 
+  test_constructorReference_explicitTypeArguments() async {
+    await _assertConst('''
+class A {
+  final B Function() x;
+  const A(): x = B<int>.new;
+}
+
+class B<T> {}
+''', () => findNode.constructorReference('B<int>.new'));
+  }
+
+  test_constructorReference_explicitTypeArguments_nonConst() async {
+    await _assertNotConst('''
+import '' deferred as self;
+class A {
+  Object x;
+  const A(): x = B<self.A>.new;
+}
+
+class B<T> {}
+''', () => findNode.constructorReference('B<self.A>.new'),
+        () => [findNode.typeAnnotation('self.A')]);
+  }
+
+  test_constructorReference_noTypeArguments() async {
+    await _assertConst('''
+class A {
+  final B Function() x;
+  const A(): x = B.new;
+}
+
+class B {}
+''', () => findNode.constructorReference('B.new'));
+  }
+
+  test_functionReference_explicitTypeArguments() async {
+    await _assertConst('''
+class A {
+  final int Function(int) x;
+  const A(): x = id<int>;
+}
+
+X id<X>(X x) => x;
+''', () => findNode.functionReference('id<int>'));
+  }
+
+  test_functionReference_explicitTypeArguments_nonConst() async {
+    await _assertNotConst('''
+import '' deferred as self;
+class A {
+  final int Function(int) x;
+  const A(): x = id<self.A>;
+}
+
+X id<X>(X x) => x;
+''', () => findNode.functionReference('id<self.A>'),
+        () => [findNode.typeAnnotation('self.A')]);
+  }
+
+  test_functionReference_noTypeArguments() async {
+    await _assertConst('''
+class A {
+  final int Function(int) x;
+  const A(): x = id;
+}
+
+X id<X>(X x) => x;
+''', () => findNode.simple('id;'));
+  }
+
   test_ifElement_then() async {
     await _assertConst(r'''
 const a = 0;
@@ -573,6 +626,24 @@
         () => [findNode.simple('a,'), findNode.simple('b,')]);
   }
 
+  test_listLiteral_ofDynamic() async {
+    await _assertConst('''
+var x = const <dynamic>[];
+''', () => _xInitializer());
+  }
+
+  test_listLiteral_ofNever() async {
+    await _assertConst('''
+var x = const <Never>[];
+''', () => _xInitializer());
+  }
+
+  test_listLiteral_ofVoid() async {
+    await _assertConst('''
+var x = const <void>[];
+''', () => _xInitializer());
+  }
+
   test_listLiteral_typeArgument() async {
     await _assertConst(r'''
 var x = const <int>[0, 1, 2];
@@ -580,13 +651,14 @@
   }
 
   test_listLiteral_typeArgument_notConstType() async {
-    await _assertNotConst(r'''
-class A<T> {
+    await _assertNotConst('''
+import '' deferred as self;
+class A {
   m() {
-    var x = const <T>[0, 1, 2];
+    var x = const <self.A>[];
   }
 }
-''', () => _xInitializer(), () => [findNode.namedType('T>[0')]);
+''', () => _xInitializer(), () => [findNode.namedType('A>[')]);
   }
 
   test_literal_bool() async {
@@ -995,13 +1067,14 @@
   }
 
   test_setLiteral_typeArgument_notConstType() async {
-    await _assertNotConst(r'''
-class A<T> {
+    await _assertNotConst('''
+import '' deferred as self;
+class A {
   m() {
-    var x = const <T>{0, 1, 2};
+    var x = const <self.A>{};
   }
 }
-''', () => _xInitializer(), () => [findNode.namedType('T>{0')]);
+''', () => _xInitializer(), () => [findNode.namedType('A>{')]);
   }
 
   test_simpleIdentifier_class() async {
@@ -1177,6 +1250,26 @@
 ''', () => _xInitializer());
   }
 
+  test_typeLiteral() async {
+    await _assertConst('''
+class A {
+  Type x;
+  const A(): x = List<int>;
+}
+''', () => findNode.typeLiteral('List<int>'));
+  }
+
+  test_typeLiteral_nonConst() async {
+    await _assertNotConst('''
+import '' deferred as self;
+class A {
+  Type x;
+  const A(): x = List<self.A>;
+}
+''', () => findNode.typeLiteral('List<self.A>'),
+        () => [findNode.typeAnnotation('self.A')]);
+  }
+
   _assertConst(String code, AstNode Function() getNode) async {
     await resolveTestCode(code);
     var node = getNode();
diff --git a/pkg/analyzer/test/src/dart/constant/value_test.dart b/pkg/analyzer/test/src/dart/constant/value_test.dart
index 232d0f1..11a22c5 100644
--- a/pkg/analyzer/test/src/dart/constant/value_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/value_test.dart
@@ -795,7 +795,8 @@
   void test_identical_intZero_doubleZero() {
     // Used in Flutter:
     // const bool kIsWeb = identical(0, 0.0);
-    _assertIdentical(_boolValue(true), _intValue(0), _doubleValue(0.0));
+    _assertIdentical(_boolValue(null), _intValue(0), _doubleValue(0.0));
+    _assertIdentical(_boolValue(null), _doubleValue(0.0), _intValue(0));
   }
 
   void test_identical_list_empty() {
diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
index b8af67e..ba5aa89 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -838,6 +838,48 @@
     );
   }
 
+  test_getMember_method_covariantByDeclaration_inherited() async {
+    await resolveTestCode('''
+abstract class A {
+  void foo(covariant num a);
+}
+
+abstract class B extends A {
+  void foo(int a);
+}
+''');
+    var member = manager.getMember2(
+      findElement.classOrMixin('B'),
+      Name(null, 'foo'),
+    )!;
+    // TODO(scheglov) It would be nice to use `_assertGetMember`.
+    // But we need a way to check covariance.
+    // Maybe check the element display string, not the type.
+    expect(member.parameters[0].isCovariant, isTrue);
+  }
+
+  test_getMember_method_covariantByDeclaration_merged() async {
+    await resolveTestCode('''
+class A {
+  void foo(covariant num a) {}
+}
+
+class B {
+  void foo(int a) {}
+}
+
+class C extends B implements A {}
+''');
+    var member = manager.getMember2(
+      findElement.classOrMixin('C'),
+      Name(null, 'foo'),
+      concrete: true,
+    )!;
+    // TODO(scheglov) It would be nice to use `_assertGetMember`.
+    expect(member.declaration, same(findElement.method('foo', of: 'B')));
+    expect(member.parameters[0].isCovariant, isTrue);
+  }
+
   test_getMember_preferLatest_mixin() async {
     await resolveTestCode('''
 class A {
@@ -909,6 +951,48 @@
     );
   }
 
+  test_getMember_setter_covariantByDeclaration_inherited() async {
+    await resolveTestCode('''
+abstract class A {
+  set foo(covariant num a);
+}
+
+abstract class B extends A {
+  set foo(int a);
+}
+''');
+    var member = manager.getMember2(
+      findElement.classOrMixin('B'),
+      Name(null, 'foo='),
+    )!;
+    // TODO(scheglov) It would be nice to use `_assertGetMember`.
+    // But we need a way to check covariance.
+    // Maybe check the element display string, not the type.
+    expect(member.parameters[0].isCovariant, isTrue);
+  }
+
+  test_getMember_setter_covariantByDeclaration_merged() async {
+    await resolveTestCode('''
+class A {
+  set foo(covariant num a) {}
+}
+
+class B {
+  set foo(int a) {}
+}
+
+class C extends B implements A {}
+''');
+    var member = manager.getMember2(
+      findElement.classOrMixin('C'),
+      Name(null, 'foo='),
+      concrete: true,
+    )!;
+    // TODO(scheglov) It would be nice to use `_assertGetMember`.
+    expect(member.declaration, same(findElement.setter('foo', of: 'B')));
+    expect(member.parameters[0].isCovariant, isTrue);
+  }
+
   test_getMember_super_abstract() async {
     await resolveTestCode('''
 abstract class A {
diff --git a/pkg/analyzer/test/src/dart/micro/file_resolution.dart b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
index 3c85527..52969ec 100644
--- a/pkg/analyzer/test/src/dart/micro/file_resolution.dart
+++ b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
@@ -5,13 +5,16 @@
 import 'dart:convert';
 
 import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/micro/cider_byte_store.dart';
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/test_utilities/find_element.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:analyzer/src/workspace/bazel.dart';
 import 'package:crypto/crypto.dart';
 import 'package:linter/src/rules.dart';
@@ -27,10 +30,11 @@
 
   final StringBuffer logBuffer = StringBuffer();
   late PerformanceLog logger;
-  late MockSdk sdk;
 
   late FileResolver fileResolver;
 
+  Folder get sdkRoot => newFolder('/sdk');
+
   @override
   void addTestFile(String content) {
     newFile(_testFile, content: content);
@@ -50,7 +54,10 @@
       logger: logger,
       resourceProvider: resourceProvider,
       byteStore: byteStore,
-      sourceFactory: workspace.createSourceFactory(sdk, null),
+      sourceFactory: workspace.createSourceFactory(
+        FolderBasedDartSdk(resourceProvider, sdkRoot),
+        null,
+      ),
       getFileDigest: (String path) => _getDigest(path),
       workspace: workspace,
       prefetchFiles: null,
@@ -65,8 +72,14 @@
   }
 
   @override
-  Future<ResolvedUnitResult> resolveFile(String path) async {
-    result = fileResolver.resolve(path: path);
+  Future<ResolvedUnitResult> resolveFile(
+    String path, {
+    OperationPerformanceImpl? performance,
+  }) async {
+    result = fileResolver.resolve(
+      path: path,
+      performance: performance,
+    );
     return result;
   }
 
@@ -82,7 +95,10 @@
     registerLintRules();
 
     logger = PerformanceLog(logBuffer);
-    sdk = MockSdk(resourceProvider: resourceProvider);
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
 
     newFile('/workspace/WORKSPACE', content: '');
     newFile('/workspace/dart/test/BUILD', content: '');
diff --git a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
index 6e07a14..7a04577 100644
--- a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
+++ b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/dart/micro/cider_byte_store.dart';
+import 'package:analyzer/src/dart/micro/library_graph.dart';
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/lint/registry.dart';
@@ -201,6 +202,7 @@
 
     if (withSdk) {
       expectedPlusSdk
+        ..add(convertPath('/sdk/lib/_internal/internal.dart'))
         ..add(convertPath('/sdk/lib/async/async.dart'))
         ..add(convertPath('/sdk/lib/async/stream.dart'))
         ..add(convertPath('/sdk/lib/core/core.dart'))
@@ -743,6 +745,32 @@
     expect(fileResolver.testView!.resolvedLibraries, <Object>[]);
   }
 
+  test_getFilesWithTopLevelDeclarations_cached() async {
+    await assertNoErrorsInCode(r'''
+int a = 0;
+var b = 1 + 2;
+''');
+
+    void assertHasOneVariable() {
+      var files = fileResolver.getFilesWithTopLevelDeclarations('a');
+      expect(files, hasLength(1));
+      var file = files.single;
+      expect(file.file.path, result.path);
+      expect(file.kind, FileTopLevelDeclarationKind.variable);
+    }
+
+    // Ask to check that it works when parsed.
+    assertHasOneVariable();
+
+    // Create a new resolved, but reuse the cache.
+    createFileResolver();
+
+    await resolveTestFile();
+
+    // Ask again, when unlinked information is read from the cache.
+    assertHasOneVariable();
+  }
+
   test_getLibraryByUri() {
     newFile('/workspace/dart/my/lib/a.dart', content: r'''
 class A {}
@@ -1139,8 +1167,9 @@
 ''');
 
     var result = fileResolver.resolveLibrary(path: aPath);
-    expect(result.path, aPath);
     expect(result.units.length, 2);
+    expect(result.units[0].path, aPath);
+    expect(result.units[0].uri, Uri.parse('package:dart.test/a.dart'));
   }
 
   test_reuse_compatibleOptions() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
index f5e1dd3..1adb108 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -13,6 +13,7 @@
 
 main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(AstRewriteImplicitCallReferenceTest);
     defineReflectiveTests(AstRewriteMethodInvocationTest);
     defineReflectiveTests(AstRewritePrefixedIdentifierTest);
 
@@ -26,6 +27,254 @@
 }
 
 @reflectiveTest
+class AstRewriteImplicitCallReferenceTest extends PubPackageResolutionTest {
+  test_assignment_indexExpression() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+void Function(int) foo(C c) {
+  var map = <int, C>{};
+  return map[1] = c;
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('map[1] = c'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_explicitTypeArguments() async {
+    await assertNoErrorsInCode('''
+class C {
+  T call<T>(T t) => t;
+}
+
+void foo() {
+  var c = C();
+  c<int>;
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c<int>'),
+      findElement.method('call'),
+      'int Function(int)',
+    );
+  }
+
+  test_ifNull() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+void Function(int) foo(C? c1, C c2) {
+  return c1 ?? c2;
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c1 ?? c2'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_listLiteral_element() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+List<void Function(int)> foo(C c) {
+  return [c];
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c]'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_listLiteral_forElement() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+List<void Function(int)> foo(C c) {
+  return [
+    for (var _ in [1, 2, 3]) c,
+  ];
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c,'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_listLiteral_ifElement() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+List<void Function(int)> foo(C c) {
+  return [
+    if (1==2) c,
+  ];
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c,'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_listLiteral_ifElement_else() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+List<void Function(int)> foo(C c1, C c2) {
+  return [
+    if (1==2) c1
+    else c2,
+  ];
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c2,'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_prefixedIdentifier() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  C get c;
+  void call(int t) => t;
+}
+
+void Function(int) foo(C c) {
+  return c.c;
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c.c;'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_propertyAccess() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  C get c;
+  void call(int t) => t;
+}
+
+void Function(int) foo(C c) {
+  return c.c.c;
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c.c.c;'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_setOrMapLiteral_element() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+Set<void Function(int)> foo(C c) {
+  return {c};
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c}'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_setOrMapLiteral_mapLiteralEntry_key() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+Map<void Function(int), int> foo(C c) {
+  return {c: 1};
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c:'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_setOrMapLiteral_mapLiteralEntry_value() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+Map<int, void Function(int)> foo(C c) {
+  return {1: c};
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c}'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+
+  test_simpleIdentifier() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call(int t) => t;
+}
+
+void Function(int) foo(C c) {
+  return c;
+}
+''');
+
+    assertImplicitCallReference(
+      findNode.implicitCallReference('c;'),
+      findElement.method('call'),
+      'void Function(int)',
+    );
+  }
+}
+
+@reflectiveTest
 class AstRewriteMethodInvocationTest extends PubPackageResolutionTest
     with AstRewriteMethodInvocationTestCases {}
 
@@ -189,7 +438,8 @@
 }
 ''', [
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 50,
-          5),
+          5,
+          messageContains: ["The constructor 'prefix.A.named'"]),
     ]);
 
     var importFind = findElement.importFind('package:test/a.dart');
@@ -212,6 +462,44 @@
     _assertArgumentList(creation.argumentList, ['0']);
   }
 
+  test_targetPrefixedIdentifier_prefix_class_constructor_typeArguments_new() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A<T> {
+  A.new(int a);
+}
+''');
+
+    await assertErrorsInCode(r'''
+import 'a.dart' as prefix;
+
+f() {
+  prefix.A.new<int>(0);
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 48,
+          5,
+          messageContains: ["The constructor 'prefix.A.new'"]),
+    ]);
+
+    var importFind = findElement.importFind('package:test/a.dart');
+
+    var creation = findNode.instanceCreation('new<int>(0);');
+    assertInstanceCreation(
+      creation,
+      importFind.class_('A'),
+      'A<int>',
+      expectedPrefix: importFind.prefix,
+      expectedConstructorMember: true,
+      expectedSubstitution: {'T': 'int'},
+    );
+    _assertTypeArgumentList(
+      creation.constructorName.type2.typeArguments,
+      ['int'],
+    );
+    expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
+    _assertArgumentList(creation.argumentList, ['0']);
+  }
+
   test_targetPrefixedIdentifier_prefix_getter_method() async {
     newFile('$testPackageLibPath/a.dart', content: r'''
 A get foo => A();
@@ -304,7 +592,8 @@
 }
 ''', [
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 52,
-          13),
+          13,
+          messageContains: ["The constructor 'A.named'"]),
     ]);
 
     var creation = findNode.instanceCreation('named<int, String>(0);');
@@ -330,6 +619,43 @@
     _assertArgumentList(creation.argumentList, ['0']);
   }
 
+  test_targetSimpleIdentifier_class_constructor_typeArguments_new() async {
+    await assertErrorsInCode(r'''
+class A<T, U> {
+  A.new(int a);
+}
+
+f() {
+  A.new<int, String>(0);
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 48,
+          13,
+          messageContains: ["The constructor 'A.new'"]),
+    ]);
+
+    var creation = findNode.instanceCreation('new<int, String>(0);');
+    assertInstanceCreation(
+      creation,
+      findElement.class_('A'),
+      // TODO(scheglov) Move type arguments
+      'A<dynamic, dynamic>',
+//      'A<int, String>',
+      expectedConstructorMember: true,
+      // TODO(scheglov) Move type arguments
+      expectedSubstitution: {'T': 'dynamic', 'U': 'dynamic'},
+//      expectedSubstitution: {'T': 'int', 'U': 'String'},
+    );
+    // TODO(scheglov) Move type arguments
+//    _assertTypeArgumentList(
+//      creation.constructorName.type.typeArguments,
+//      ['int', 'String'],
+//    );
+    // TODO(scheglov) Fix and uncomment.
+//    expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
+    _assertArgumentList(creation.argumentList, ['0']);
+  }
+
   test_targetSimpleIdentifier_class_staticMethod() async {
     await assertNoErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/comment_test.dart b/pkg/analyzer/test/src/dart/resolution/comment_test.dart
index d5d1255..3d386b9 100644
--- a/pkg/analyzer/test/src/dart/resolution/comment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/comment_test.dart
@@ -2,6 +2,7 @@
 // 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/dart/error/hint_codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -367,7 +368,7 @@
   }
 
   test_new() async {
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode('''
 class A {
   A();
   A.named();
@@ -375,7 +376,10 @@
 
 /// [new A] or [new A.named]
 main() {}
-''');
+''', [
+      error(HintCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE, 38, 3),
+      error(HintCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE, 49, 3),
+    ]);
 
     assertElement(
       findNode.simple('A]'),
diff --git a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
index 21f09c6..48f946f 100644
--- a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
@@ -245,7 +245,8 @@
 }
 ''', [
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 52,
-          5),
+          5,
+          messageContains: ["The constructor 'A.foo'"]),
     ]);
 
     var classElement = findElement.class_('A');
@@ -258,6 +259,31 @@
     );
   }
 
+  test_class_generic_new_typeArgs() async {
+    await assertErrorsInCode('''
+class A<T> {
+  A.new();
+}
+
+void bar() {
+  A<int>.new<int>;
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 52,
+          5,
+          messageContains: ["The constructor 'A.new'"]),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.new<int>;'),
+      elementMatcher(classElement.unnamedConstructor!,
+          substitution: {'T': 'int'}),
+      classElement,
+      'A<int> Function()',
+    );
+  }
+
   test_class_generic_nonConstructor() async {
     await assertErrorsInCode('''
 class A<T> {
@@ -281,6 +307,28 @@
     );
   }
 
+  test_class_generic_nothing_hasNamedConstructor() async {
+    await assertErrorsInCode('''
+class A<T> {
+  A.foo();
+}
+
+void bar() {
+  A<int>.;
+}
+''', [
+      error(ParserErrorCode.MISSING_IDENTIFIER, 49, 1),
+    ]);
+
+    var classElement = findElement.class_('A');
+    assertConstructorReference(
+      findNode.constructorReference('A<int>.;'),
+      null,
+      classElement,
+      'dynamic',
+    );
+  }
+
   test_class_generic_unnamed() async {
     await assertNoErrorsInCode('''
 class A<T> {
@@ -562,7 +610,8 @@
   return A.foo;
 }
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 41, 6),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 41, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 39, 9)]),
     ]);
 
     var classElement = findElement.class_('A');
diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
index db0e26c..148433e 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -138,6 +138,8 @@
 
   bool get retainDataForTesting => false;
 
+  Folder get sdkRoot => newFolder('/sdk');
+
   void assertBasicWorkspaceFor(String path) {
     var workspace = contextFor(path).contextRoot.workspace;
     expect(workspace, TypeMatcher<BasicWorkspace>());
@@ -200,8 +202,9 @@
       _lintRulesAreRegistered = true;
     }
 
-    MockSdk(
+    createMockSdk(
       resourceProvider: resourceProvider,
+      root: sdkRoot,
       additionalLibraries: additionalMockSdkLibraries,
     );
   }
@@ -234,7 +237,7 @@
       includedPaths: collectionIncludedPaths.map(convertPath).toList(),
       resourceProvider: resourceProvider,
       retainDataForTesting: retainDataForTesting,
-      sdkPath: convertPath('/sdk'),
+      sdkPath: sdkRoot.path,
     );
 
     verifyCreatedCollection();
@@ -252,6 +255,7 @@
 
   List<String> get experiments => [
         EnableString.constructor_tearoffs,
+        EnableString.named_arguments_anywhere,
       ];
 
   /// The path that is not in [workspaceRootPath], contains external packages.
@@ -413,7 +417,7 @@
 
 mixin WithoutConstructorTearoffsMixin on PubPackageResolutionTest {
   @override
-  String? get testPackageLanguageVersion => '2.13';
+  String? get testPackageLanguageVersion => '2.14';
 }
 
 mixin WithoutNullSafetyMixin on PubPackageResolutionTest {
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
index 902e2e7..8cc8ab5 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
@@ -71,8 +71,8 @@
     extends PubPackageResolutionTest with WithoutNullSafetyMixin {
   @override
   List<MockSdkLibrary> get additionalMockSdkLibraries => [
-        MockSdkLibrary([
-          MockSdkLibraryUnit('dart:test1', 'test1/test1.dart', r'''
+        MockSdkLibrary('test1', [
+          MockSdkLibraryUnit('test1/test1.dart', r'''
 extension E on Object {
   int get a => 1;
 }
@@ -80,8 +80,8 @@
 class A {}
 '''),
         ]),
-        MockSdkLibrary([
-          MockSdkLibraryUnit('dart:test2', 'test2/test2.dart', r'''
+        MockSdkLibrary('test2', [
+          MockSdkLibraryUnit('test2/test2.dart', r'''
 extension E on Object {
   int get a => 1;
 }
@@ -1773,6 +1773,32 @@
     assertType(invocation, 'int');
   }
 
+  test_instance_getter_asSetter() async {
+    await assertErrorsInCode('''
+extension E1 on int {
+  int get foo => 0;
+}
+
+extension E2 on int {
+  int get foo => 0;
+  void f() {
+    foo = 0;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER, 104, 3),
+    ]);
+    assertAssignment(
+      findNode.assignment('foo = 0'),
+      readElement: null,
+      readType: null,
+      writeElement: findElement.getter('foo', of: 'E2'),
+      writeType: 'dynamic',
+      operatorElement: null,
+      type: 'int',
+    );
+  }
+
   test_instance_getter_fromInstance() async {
     await assertNoErrorsInCode('''
 class C {
@@ -1978,6 +2004,28 @@
     assertElement(prefix, findElement.method('unary-', of: 'E'));
   }
 
+  test_instance_setter_asGetter() async {
+    await assertErrorsInCode('''
+extension E1 on int {
+  set foo(int _) {}
+}
+
+extension E2 on int {
+  set foo(int _) {}
+  void f() {
+    foo;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 104, 3),
+    ]);
+    assertSimpleIdentifier(
+      findNode.simple('foo;'),
+      element: null,
+      type: 'dynamic',
+    );
+  }
+
   test_instance_setter_fromInstance() async {
     await assertNoErrorsInCode('''
 class C {
diff --git a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
index fea1532..fc226d1 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -10,6 +10,8 @@
 
 main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(
+        FunctionReferenceResolution_genericFunctionInstantiationTest);
     defineReflectiveTests(FunctionReferenceResolutionTest);
     defineReflectiveTests(
         FunctionReferenceResolutionWithoutConstructorTearoffsTest);
@@ -17,6 +19,262 @@
 }
 
 @reflectiveTest
+class FunctionReferenceResolution_genericFunctionInstantiationTest
+    extends PubPackageResolutionTest {
+  test_asExpression() async {
+    await assertNoErrorsInCode('''
+void Function(int) foo(void Function<T>(T) f) {
+  return (f as dynamic) as void Function<T>(T);
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('as void Function<T>(T);'),
+        null,
+        'void Function(int)');
+  }
+
+  test_assignmentExpression() async {
+    await assertNoErrorsInCode('''
+late void Function<T>(T) g;
+void Function(int) foo(void Function<T>(T) f) {
+  return g = f;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('g = f;'), null, 'void Function(int)');
+  }
+
+  test_assignmentExpression_compound() async {
+    await assertNoErrorsInCode('''
+extension on void Function<T>(T) {
+  void Function<T>(T) operator +(int i) {
+    return this;
+  }
+}
+
+void Function(int) foo(void Function<T>(T) f) {
+  return f += 1;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('f += 1'), null, 'void Function(int)');
+  }
+
+  test_awaitExpression() async {
+    await assertNoErrorsInCode('''
+Future<void Function(int)> foo(Future<void Function<T>(T)> f) async {
+  return await f;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('await f'), null, 'void Function(int)');
+  }
+
+  test_binaryExpression() async {
+    await assertNoErrorsInCode('''
+class C {
+  void Function<T>(T) operator +(int i) {
+    return <T>(T a) {};
+  }
+}
+
+void Function(int) foo(C c) {
+  return c + 1;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('c + 1'), null, 'void Function(int)');
+  }
+
+  test_cascadeExpression() async {
+    await assertNoErrorsInCode('''
+void Function(int) foo(void Function<T>(T) f) {
+  return f..toString();
+}
+''');
+
+    assertFunctionReference(findNode.functionReference('f..toString()'), null,
+        'void Function(int)');
+  }
+
+  test_constructorReference() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C(T a);
+}
+C<int> Function(int) foo() {
+  return C.new;
+}
+''');
+
+    // TODO(srawlins): Leave the constructor reference uninstantiated, then
+    // perform generic function instantiation as a wrapping node.
+    assertConstructorReference(
+        findNode.constructorReference('C.new'),
+        findElement.unnamedConstructor('C'),
+        findElement.class_('C'),
+        'C<int> Function(int)');
+  }
+
+  test_functionExpression() async {
+    await assertNoErrorsInCode('''
+Null Function(int) foo() {
+  return <T>(T a) {};
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('<T>(T a) {};'), null, 'Null Function(int)');
+  }
+
+  test_functionExpressionInvocation() async {
+    await assertNoErrorsInCode('''
+void Function(int) foo(void Function<T>(T) Function() f) {
+  return (f)();
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('(f)()'), null, 'void Function(int)');
+  }
+
+  test_functionReference() async {
+    await assertNoErrorsInCode('''
+typedef Fn = void Function<U>(U);
+
+void Function(int) foo(Fn f) {
+  return f;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('f;'), null, 'void Function(int)');
+  }
+
+  test_implicitCallReference() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call<T>(T a) {}
+}
+
+void Function(int) foo(C c) {
+  return c;
+}
+''');
+
+    assertImplicitCallReference(findNode.implicitCallReference('c;'),
+        findElement.method('call'), 'void Function(int)');
+  }
+
+  test_indexExpression() async {
+    await assertNoErrorsInCode('''
+void Function(int) foo(List<void Function<T>(T)> f) {
+  return f[0];
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('f[0];'), null, 'void Function(int)');
+  }
+
+  test_methodInvocation() async {
+    await assertNoErrorsInCode('''
+class C {
+  late void Function<T>(T) f;
+  void Function<T>(T) m() => f;
+}
+
+void Function(int) foo(C c) {
+  return c.m();
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('c.m();'), null, 'void Function(int)');
+  }
+
+  test_postfixExpression_compound() async {
+    await assertNoErrorsInCode('''
+extension on void Function<T>(T) {
+  void Function<T>(T) operator +(int i) {
+    return this;
+  }
+}
+
+void Function(int) foo(void Function<T>(T) f) {
+  return f++;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('f++'), null, 'void Function(int)');
+  }
+
+  test_prefixedIdentifier() async {
+    await assertNoErrorsInCode('''
+class C {
+  late void Function<T>(T) f;
+}
+
+void Function(int) foo(C c) {
+  return c.f;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('c.f;'), null, 'void Function(int)');
+  }
+
+  test_prefixExpression_compound() async {
+    await assertNoErrorsInCode('''
+extension on void Function<T>(T) {
+  void Function<T>(T) operator +(int i) {
+    return this;
+  }
+}
+
+void Function(int) foo(void Function<T>(T) f) {
+  return ++f;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('++f'), null, 'void Function(int)');
+  }
+
+  test_propertyAccess() async {
+    await assertNoErrorsInCode('''
+class C {
+  late void Function<T>(T) f;
+}
+
+void Function(int) foo(C c) {
+  return (c).f;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('(c).f;'), null, 'void Function(int)');
+  }
+
+  test_simpleIdentifier() async {
+    await assertNoErrorsInCode('''
+void Function(int) foo(void Function<T>(T) f) {
+  return f;
+}
+''');
+
+    assertFunctionReference(
+        findNode.functionReference('f;'), null, 'void Function(int)');
+  }
+}
+
+@reflectiveTest
 class FunctionReferenceResolutionTest extends PubPackageResolutionTest {
   test_constructorFunction_named() async {
     await assertNoErrorsInCode('''
@@ -338,6 +596,23 @@
         reference, findElement.method('foo'), 'void Function(int)');
   }
 
+  test_extensionMethod_unknown() async {
+    await assertErrorsInCode('''
+extension on double {
+  bar() {
+    foo<int>;
+  }
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 24, 3),
+      error(CompileTimeErrorCode.UNDEFINED_METHOD, 36, 3,
+          messageContains: ["for the type 'double'"]),
+    ]);
+
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'), null, 'dynamic');
+  }
+
   test_function_call() async {
     await assertNoErrorsInCode('''
 void foo<T>(T a) {}
@@ -427,7 +702,11 @@
   static void m<T>(T t) {}
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 40, 1),
+      error(
+          CompileTimeErrorCode
+              .INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION,
+          40,
+          1),
     ]);
 
     assertFunctionReference(findNode.functionReference('foo.m<int>;'),
@@ -445,12 +724,49 @@
 }
 ''');
 
-    // TODO(srawlins): An arbitrary expression with a static type which is
-    // callable does not necessarily have an element. However, if we implement
-    // some "implicit call tearoff" node, it would have an element referring to
-    // the `call` method.
-    var functionReference = findNode.functionReference('C()<int>;');
-    assertType(functionReference, 'int Function(int)');
+    assertImplicitCallReference(findNode.implicitCallReference('C()<int>;'),
+        findElement.method('call'), 'int Function(int)');
+  }
+
+  test_implicitCallTearoff_extensionOnNullable() async {
+    await assertNoErrorsInCode('''
+Object? v = null;
+extension E on Object? {
+  void call<R, S>(R r, S s) {}
+}
+void foo() {
+  v<int, String>;
+}
+
+''');
+
+    assertImplicitCallReference(
+        findNode.implicitCallReference('v<int, String>;'),
+        findElement.method('call'),
+        'void Function(int, String)');
+  }
+
+  test_implicitCallTearoff_prefixed() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class C {
+  T call<T>(T t) => t;
+}
+C c = C();
+''');
+    await assertNoErrorsInCode('''
+import 'a.dart' as prefix;
+
+bar() {
+  prefix.c<int>;
+}
+''');
+
+    assertImportPrefix(
+        findNode.simple('prefix.'), findElement.prefix('prefix'));
+    assertImplicitCallReference(
+        findNode.implicitCallReference('c<int>;'),
+        findElement.importFind('package:test/a.dart').method('call'),
+        'int Function(int)');
   }
 
   test_implicitCallTearoff_tooFewTypeArguments() async {
@@ -464,18 +780,11 @@
 }
 ''', [
       error(
-          CompileTimeErrorCode
-              .WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION,
-          57,
-          5),
+          CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION, 57, 5),
     ]);
 
-    // TODO(srawlins): An arbitrary expression with a static type which is
-    // callable does not necessarily have an element. However, if we implement
-    // some "implicit call tearoff" node, it would have an element referring to
-    // the `call` method.
-    var functionReference = findNode.functionReference('C()<int>;');
-    assertType(functionReference, 'void Function(dynamic, dynamic)');
+    assertImplicitCallReference(findNode.implicitCallReference('C()<int>;'),
+        findElement.method('call'), 'void Function(dynamic, dynamic)');
   }
 
   test_implicitCallTearoff_tooManyTypeArguments() async {
@@ -489,18 +798,11 @@
 }
 ''', [
       error(
-          CompileTimeErrorCode
-              .WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION,
-          50,
-          5),
+          CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION, 50, 5),
     ]);
 
-    // TODO(srawlins): An arbitrary expression with a static type which is
-    // callable does not necessarily have an element. However, if we implement
-    // some "implicit call tearoff" node, it would have an element referring to
-    // the `call` method.
-    var functionReference = findNode.functionReference('C()<int>;');
-    assertType(functionReference, 'int Function(int)');
+    assertImplicitCallReference(findNode.implicitCallReference('C()<int>;'),
+        findElement.method('call'), 'int Function(int)');
   }
 
   test_instanceGetter_explicitReceiver() async {
@@ -534,6 +836,23 @@
         findElement.getter('foo'), 'void Function(int)');
   }
 
+  test_instanceGetter_functionTyped_inherited() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  late void Function<T>(T) foo;
+}
+abstract class B extends A {
+  bar() {
+    foo<int>;
+  }
+}
+
+''');
+
+    assertFunctionReference(findNode.functionReference('foo<int>;'),
+        findElement.getter('foo'), 'void Function(int)');
+  }
+
   test_instanceMethod() async {
     await assertNoErrorsInCode('''
 class A {
@@ -874,7 +1193,8 @@
   }
 }
 ''', [
-      error(CompileTimeErrorCode.UNDEFINED_METHOD, 24, 3),
+      error(CompileTimeErrorCode.UNDEFINED_METHOD, 24, 3,
+          messageContains: ["for the type 'A'"]),
     ]);
 
     assertFunctionReference(
@@ -1326,6 +1646,26 @@
         findElement.topFunction('foo'), 'void Function(int)');
   }
 
+  test_topLevelVariable_prefix() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+void Function<T>(T) foo = <T>(T arg) {}
+''');
+    await assertNoErrorsInCode('''
+import 'a.dart' as prefix;
+
+bar() {
+  prefix.foo<int>;
+}
+''');
+
+    assertImportPrefix(
+        findNode.simple('prefix.'), findElement.prefix('prefix'));
+    assertFunctionReference(
+        findNode.functionReference('foo<int>;'),
+        findElement.importFind('package:test/a.dart').topGet('foo'),
+        'void Function(int)');
+  }
+
   test_topLevelVariable_prefix_unknownIdentifier() async {
     newFile('$testPackageLibPath/a.dart', content: '');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
index 2f6fbd0..feac804 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
@@ -174,7 +174,8 @@
 }
 ''', [
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 53,
-          5),
+          5,
+          messageContains: ["The constructor 'Foo.bar'"]),
     ]);
 
     var creation = findNode.instanceCreation('Foo.bar<int>');
@@ -188,6 +189,31 @@
     );
   }
 
+  test_error_wrongNumberOfTypeArgumentsConstructor_explicitNew_new() async {
+    await assertErrorsInCode(r'''
+class Foo<X> {
+  Foo.new();
+}
+
+main() {
+  new Foo.new<int>();
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 53,
+          5,
+          messageContains: ["The constructor 'Foo.new'"]),
+    ]);
+
+    var creation = findNode.instanceCreation('Foo.new<int>');
+    assertInstanceCreation(
+      creation,
+      findElement.class_('Foo'),
+      'Foo<dynamic>',
+      expectedConstructorMember: true,
+      expectedSubstitution: {'X': 'dynamic'},
+    );
+  }
+
   test_error_wrongNumberOfTypeArgumentsConstructor_explicitNew_prefix() async {
     newFile('$testPackageLibPath/a.dart', content: '''
 class Foo<X> {
@@ -277,6 +303,46 @@
     );
   }
 
+  test_namedArgument_anywhere() async {
+    await assertNoErrorsInCode('''
+class A {
+  A(int a, double b, {bool? c, bool? d});
+}
+
+void f() {
+  A(0, c: true, 1.2, d: true);
+}
+''');
+
+    assertInstanceCreation(
+      findNode.instanceCreation('A(0'),
+      findElement.class_('A'),
+      'A',
+    );
+
+    assertParameterElement(
+      findNode.integerLiteral('0'),
+      findElement.parameter('a'),
+    );
+
+    assertParameterElement(
+      findNode.doubleLiteral('1.2'),
+      findElement.parameter('b'),
+    );
+
+    assertParameterElement(
+      findNode.namedExpression('c: true'),
+      findElement.parameter('c'),
+    );
+    assertNamedParameterRef('c: true', 'c');
+
+    assertParameterElement(
+      findNode.namedExpression('d: true'),
+      findElement.parameter('d'),
+    );
+    assertNamedParameterRef('d: true', 'd');
+  }
+
   test_typeAlias_generic_class_generic_named_infer_all() async {
     await assertNoErrorsInCode(r'''
 class A<T> {
diff --git a/pkg/analyzer/test/src/dart/resolution/language_version_test.dart b/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
index d0681f0..a9868b6 100644
--- a/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -258,7 +257,7 @@
 
   void _newSdkExperimentsFile(String content) {
     newFile(
-      '$sdkRoot/lib/_internal/allowed_experiments.json',
+      '${sdkRoot.path}/lib/_internal/allowed_experiments.json',
       content: content,
     );
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
index 4dca4cb..7c96192 100644
--- a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
@@ -151,6 +151,46 @@
 ''');
   }
 
+  test_onLocalVariable() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  final int a;
+  const A(this.a);
+}
+
+void f() {
+  @A(3)
+  int? x;
+  print(x);
+}
+''');
+
+    var annotation = findNode.annotation('@A');
+    _assertResolvedNodeText(annotation, '''
+Annotation
+  arguments: ArgumentList
+    arguments
+      IntegerLiteral
+        literal: 3
+        staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign: @
+  element: self::@class::A::@constructor::•
+  name: SimpleIdentifier
+    staticElement: self::@class::A
+    staticType: null
+    token: A
+''');
+
+    final localVariable = findElement.localVar('x');
+    final annotationOnElement = localVariable.metadata.single;
+    _assertElementAnnotationValueText(annotationOnElement, '''
+A
+  a: int 3
+''');
+  }
+
   test_optIn_fromOptOut_class() async {
     newFile('$testPackageLibPath/a.dart', content: r'''
 class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index 17bac73..32d8c5d 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -2863,6 +2863,44 @@
     );
   }
 
+  test_namedArgument_anywhere() async {
+    await assertNoErrorsInCode('''
+void foo(int a, double b, {bool? c, bool? d}) {}
+
+void f() {
+  foo(0, c: true, 1.2, d: true);
+}
+''');
+
+    assertMethodInvocation(
+      findNode.methodInvocation('foo(0'),
+      findElement.topFunction('foo'),
+      'void Function(int, double, {bool? c, bool? d})',
+    );
+
+    assertParameterElement(
+      findNode.integerLiteral('0'),
+      findElement.parameter('a'),
+    );
+
+    assertParameterElement(
+      findNode.doubleLiteral('1.2'),
+      findElement.parameter('b'),
+    );
+
+    assertParameterElement(
+      findNode.namedExpression('c: true'),
+      findElement.parameter('c'),
+    );
+    assertNamedParameterRef('c: true', 'c');
+
+    assertParameterElement(
+      findNode.namedExpression('d: true'),
+      findElement.parameter('d'),
+    );
+    assertNamedParameterRef('d: true', 'd');
+  }
+
   test_nullShorting_cascade_firstMethodInvocation() async {
     await assertNoErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index 93fa507..fb6d6b1f 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -120,7 +120,7 @@
 mixin M {}
 ''');
 
-    var aRef = findNode.commentReference('a]').identifier;
+    var aRef = findNode.commentReference('a]').expression;
     assertElement(aRef, findElement.topGet('a'));
     assertTypeNull(aRef);
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 10c4f13..bed3b36 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -360,7 +360,9 @@
 
   void assertFunctionReference(
       FunctionReference node, Element? expectedElement, String expectedType) {
-    assertElement(node, expectedElement);
+    if (expectedElement != null) {
+      assertElement(node, expectedElement);
+    }
     assertType(node, expectedType);
   }
 
@@ -384,6 +386,12 @@
     assertType(ref, type);
   }
 
+  void assertImplicitCallReference(ImplicitCallReference node,
+      Element? expectedElement, String expectedType) {
+    assertElement(node, expectedElement);
+    assertType(node, expectedType);
+  }
+
   /// In valid code [element] must be a [PrefixElement], but for invalid code
   /// like `int.double v;` we want to resolve `int` somehow. Still not type.
   void assertImportPrefix(Expression? identifier, Element? element) {
@@ -850,11 +858,13 @@
   }
 
   ExpectedError error(ErrorCode code, int offset, int length,
-          {String? text,
-          Pattern? messageContains,
+          {Pattern? correctionContains,
+          String? text,
+          List<Pattern> messageContains = const [],
           List<ExpectedContextMessage> contextMessages =
               const <ExpectedContextMessage>[]}) =>
       ExpectedError(code, offset, length,
+          correctionContains: correctionContains,
           message: text,
           messageContains: messageContains,
           expectedContextMessages: contextMessages);
@@ -900,6 +910,8 @@
       }
     } else if (node is Identifier) {
       return node.staticElement;
+    } else if (node is ImplicitCallReference) {
+      return node.staticElement;
     } else if (node is IndexExpression) {
       return node.staticElement;
     } else if (node is InstanceCreationExpression) {
@@ -933,7 +945,6 @@
     path = convertPath(path);
 
     result = await resolveFile(path);
-    expect(result.state, ResultState.VALID);
 
     findNode = FindNode(result.content, result.unit);
     findElement = FindElement(result.unit);
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
index 85fe012..84e3362 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
@@ -32,7 +32,6 @@
       'f; // 1',
       findElement.topFunction('f'),
       'T Function<T>(T)',
-      [],
     );
   }
 
@@ -51,68 +50,94 @@
       'f; // 1',
       findElement.topFunction('f'),
       'int Function(int)',
-      [],
     );
   }
 
-  test_notEmpty() async {
-    await assertErrorsInCode('''
-T f<T>(T x) => x;
-
+  test_notEmpty_instanceMethod() async {
+    await assertNoErrorsInCode('''
 class C {
   T f<T>(T x) => x;
-  static T g<T>(T x) => x;
+}
+
+int Function(int) test() {
+  return new C().f;
+}
+''');
+    _assertGenericFunctionInstantiation(
+      'f;',
+      findElement.method('f', of: 'C'),
+      'int Function(int)',
+      ['int'],
+    );
+  }
+
+  test_notEmpty_localFunction() async {
+    await assertNoErrorsInCode('''
+int Function(int) test() {
+  T f<T>(T x) => x;
+  return f;
+}
+''');
+    _assertGenericFunctionInstantiation(
+      'f;',
+      findElement.localFunction('f'),
+      'int Function(int)',
+      ['int'],
+    );
+  }
+
+  test_notEmpty_staticMethod() async {
+    await assertNoErrorsInCode('''
+class C {
+  static T f<T>(T x) => x;
+}
+
+int Function(int) test() {
+  return C.f;
+}
+''');
+    _assertGenericFunctionInstantiation(
+      'f;',
+      findElement.method('f', of: 'C'),
+      'int Function(int)',
+      ['int'],
+    );
+  }
+
+  test_notEmpty_superMethod() async {
+    await assertNoErrorsInCode('''
+class C {
+  T f<T>(T x) => x;
 }
 
 class D extends C {
-  void test() {
-    int Function(int) func;
-    func = super.f; // 1
+  int Function(int) test() {
+    return super.f;
   }
 }
+''');
+    _assertGenericFunctionInstantiation(
+      'f;',
+      findElement.method('f', of: 'C'),
+      'int Function(int)',
+      ['int'],
+    );
+  }
 
-void test() {
-  T h<T>(T x) => x;
-  int Function(int) func;
-  func = f; // 2
-  func = new C().f; // 3
-  func = C.g; // 4
-  func = h; // 5
+  test_notEmpty_topLevelFunction() async {
+    await assertNoErrorsInCode('''
+T f<T>(T x) => x;
+
+int Function(int) test() {
+  return f;
 }
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 137, 4),
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 229, 4),
-    ]);
-    _assertTearOff(
-      'f; // 1',
-      findElement.method('f', of: 'C'),
-      'int Function(int)',
-      ['int'],
-    );
-    _assertTearOff(
-      'f; // 2',
+''');
+    _assertGenericFunctionInstantiation(
+      'f;',
       findElement.topFunction('f'),
       'int Function(int)',
       ['int'],
     );
-    _assertTearOff(
-      'f; // 3',
-      findElement.method('f', of: 'C'),
-      'int Function(int)',
-      ['int'],
-    );
-    _assertTearOff(
-      'g; // 4',
-      findElement.method('g', of: 'C'),
-      'int Function(int)',
-      ['int'],
-    );
-    _assertTearOff(
-      'h; // 5',
-      findElement.localFunction('h'),
-      'int Function(int)',
-      ['int'],
-    );
   }
 
   test_null_notTearOff() async {
@@ -127,7 +152,6 @@
       'f(0);',
       findElement.topFunction('f'),
       'T Function<T>(T)',
-      null,
     );
     assertInvokeType(
       findNode.methodInvocation('f(0)'),
@@ -135,19 +159,30 @@
     );
   }
 
-  void _assertTearOff(
+  void _assertGenericFunctionInstantiation(
     String search,
     ExecutableElement element,
     String type,
     List<String>? typeArguments,
   ) {
-    var id = findNode.simple(search);
+    var id = findNode.functionReference(search);
     assertElement(id, element);
     assertType(id, type);
     if (typeArguments != null) {
-      assertElementTypes(id.tearOffTypeArgumentTypes, typeArguments);
+      assertElementTypes(id.typeArgumentTypes, typeArguments);
     } else {
-      expect(id.tearOffTypeArgumentTypes, isNull);
+      expect(id.typeArgumentTypes, isNull);
     }
   }
+
+  void _assertTearOff(
+    String search,
+    ExecutableElement element,
+    String type,
+  ) {
+    var id = findNode.simple(search);
+    assertElement(id, element);
+    assertType(id, type);
+    expect(id.tearOffTypeArgumentTypes, isNull);
+  }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart
index 8172670..866b8c3 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart
@@ -75,7 +75,8 @@
 class C<T extends num> {}
 var t = C<String>;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 36, 6),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 36, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 34, 9)]),
     ]);
 
     var typeLiteral = findNode.typeLiteral('C<String>;');
@@ -142,7 +143,8 @@
 typedef CA<T extends num> = C<T>;
 var t = CA<String>;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 59, 6),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 59, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 56, 10)]),
     ]);
 
     var typeLiteral = findNode.typeLiteral('CA<String>;');
@@ -374,7 +376,8 @@
 typedef Fn<T extends num> = void Function(T);
 var t = Fn<String>;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 57, 6),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 57, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 54, 10)]),
     ]);
 
     var typeLiteral = findNode.typeLiteral('Fn<String>;');
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_extension_member_access_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_extension_member_access_test.dart
index 6355201..79b9f6e 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_extension_member_access_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_extension_member_access_test.dart
@@ -106,7 +106,7 @@
 }
 ''', [
       error(CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS, 129, 3,
-          messageContains: "'E1' and 'E2'"),
+          messageContains: ["in extension 'E1' and extension 'E2',"]),
     ]);
   }
 
@@ -131,7 +131,7 @@
 }
 ''', [
       error(CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS, 129, 3,
-          messageContains: "'E1' and 'E2'"),
+          messageContains: ["in extension 'E1' and extension 'E2',"]),
     ]);
   }
 
@@ -177,7 +177,7 @@
 }
 ''', [
       error(CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS, 129, 3,
-          messageContains: "'E1' and 'E2'"),
+          messageContains: ["in extension 'E1' and extension 'E2',"]),
     ]);
   }
 
@@ -192,7 +192,9 @@
 }
 ''', [
       error(CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS, 167, 3,
-          messageContains: "'E1', 'E2', and 'E3'"),
+          messageContains: [
+            "in extension 'E1', extension 'E2', and extension 'E3',"
+          ]),
     ]);
   }
 
@@ -346,4 +348,32 @@
       assertTypeDynamic(access);
     }
   }
+
+  test_unnamed_extensions() async {
+    await assertErrorsInCode('''
+class A {}
+class B {}
+class C extends A implements B {}
+
+extension on List<A> {
+  int call() => 0;
+}
+
+extension on List<B> {
+  int call() => 0;
+}
+
+int f(List<C> x) => x();
+
+// Additional calls to avoid UNUSED_ELEMENT
+int g(List<A> x) => x();
+int h(List<B> x) => x();
+''', [
+      error(CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS, 167, 1,
+          messageContains: [
+            "in unnamed extension on 'List<A>' and unnamed extension on "
+                "'List<B>',"
+          ]),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/analysis_options_test_support.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/analysis_options_test_support.dart
index e0432e0..95e6ccb 100644
--- a/pkg/analyzer/test/src/diagnostics/analysis_options/analysis_options_test_support.dart
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/analysis_options_test_support.dart
@@ -19,11 +19,13 @@
   }
 
   ExpectedError error(ErrorCode code, int offset, int length,
-          {String? text,
-          Pattern? messageContains,
+          {Pattern? correctionContains,
+          String? text,
+          List<Pattern> messageContains = const [],
           List<ExpectedContextMessage> contextMessages =
               const <ExpectedContextMessage>[]}) =>
       ExpectedError(code, offset, length,
+          correctionContains: correctionContains,
           message: text,
           messageContains: messageContains,
           expectedContextMessages: contextMessages);
diff --git a/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart b/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart
index 8db3c12..61dd571 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart
@@ -62,6 +62,20 @@
     ]);
   }
 
+  test_FromFunctionExceptionReturn() async {
+    await assertErrorsInCode(r'''
+import 'dart:ffi';
+typedef NativeDoubleUnOp = Double Function(Double);
+double myTimesThree(double d) => d * 3;
+void testFromFunctionFunctionExceptionValueMustBeConst() {
+  final notAConst = 1.1;
+  Pointer.fromFunction<NativeDoubleUnOp>(myTimesThree, notAConst);
+}
+''', [
+      error(FfiCode.ARGUMENT_MUST_BE_A_CONSTANT, 250, 9),
+    ]);
+  }
+
   test_LookupFunctionIsLeaf() async {
     await assertErrorsInCode(r'''
 import 'dart:ffi';
diff --git a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
index f238eba..60ca6a0 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
@@ -147,6 +147,18 @@
     ]);
   }
 
+  test_implicitCallReference_namedAndRequired() async {
+    await assertNoErrorsInCode('''
+class A {
+  void call(int p) {}
+}
+void f({required void Function(int) a}) {}
+void g(A a) {
+  f(a: a);
+}
+''');
+  }
+
   test_invocation_functionTypes_optional() async {
     await assertErrorsInCode('''
 void acceptFunOptBool(void funNumOptBool([bool b])) {}
@@ -199,8 +211,8 @@
   const A.fromInt(int p);
 }
 @A.fromInt('0')
-main() {
-}''', [
+main() {}
+''', [
       error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 49, 3),
     ]);
   }
@@ -330,6 +342,44 @@
     ]);
   }
 
+  test_implicitCallReference() async {
+    await assertNoErrorsInCode('''
+class A {
+  void call(int p) {}
+}
+void f(void Function(int) a) {}
+void g(A a) {
+  f(a);
+}
+''');
+  }
+
+  test_implicitCallReference_named() async {
+    await assertNoErrorsInCode('''
+class A {
+  void call(int p) {}
+}
+void defaultFunc(int p) {}
+void f({void Function(int) a = defaultFunc}) {}
+void g(A a) {
+  f(a: a);
+}
+''');
+  }
+
+  test_implicitCallReference_this() async {
+    await assertNoErrorsInCode('''
+class A {
+  void call(int p) {}
+
+  void f(void Function(int) a) {}
+  void g() {
+    f(this);
+  }
+}
+''');
+  }
+
   test_index_invalidRead() async {
     await assertErrorsInCode('''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
index 40ba01a..8ae77f0 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
@@ -69,7 +69,7 @@
 }
 ''', [
       error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 106, 5,
-          messageContains: "'v'"),
+          messageContains: ["'v'"]),
     ]);
   }
 
@@ -223,7 +223,8 @@
   final f = '';
 }
 ''', [
-      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 47, 5, messageContains: "'f'"),
+      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 47, 5,
+          messageContains: ["'f'"]),
     ]);
   }
 
@@ -251,7 +252,8 @@
 @doNotStore
 String get v => '';
 ''', [
-      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 47, 1, messageContains: "'v'"),
+      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 47, 1,
+          messageContains: ["'v'"]),
     ]);
   }
 
@@ -266,7 +268,8 @@
   String v() => '';
 }
 ''', [
-      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 47, 7, messageContains: "'v'"),
+      error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 47, 7,
+          messageContains: ["'v'"]),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/class_instantiation_access_to_member_test.dart b/pkg/analyzer/test/src/diagnostics/class_instantiation_access_to_member_test.dart
index a996659..a797cfa 100644
--- a/pkg/analyzer/test/src/diagnostics/class_instantiation_access_to_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/class_instantiation_access_to_member_test.dart
@@ -2,6 +2,7 @@
 // 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/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -100,4 +101,16 @@
           60, 8),
     ]);
   }
+
+  test_syntheticIdentifier() async {
+    await assertErrorsInCode('''
+class A<T> {
+  A.foo();
+}
+
+var x = A<int>.;
+''', [
+      error(ParserErrorCode.MISSING_IDENTIFIER, 42, 1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_map_key_expression_type_implements_equals_test.dart b/pkg/analyzer/test/src/diagnostics/const_map_key_expression_type_implements_equals_test.dart
index 6b2a23b..c592ea3 100644
--- a/pkg/analyzer/test/src/diagnostics/const_map_key_expression_type_implements_equals_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_map_key_expression_type_implements_equals_test.dart
@@ -32,7 +32,7 @@
   test_constField() async {
     await assertErrorsInCode(r'''
 main() {
-  const {double.INFINITY: 0};
+  const {double.infinity: 0};
 }
 ''', [
       error(
diff --git a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart b/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
index 40b9bce..3e89e8f 100644
--- a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
@@ -33,10 +33,12 @@
   P._();
 }
 ''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 154, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 154, 1)]),
       error(CompileTimeErrorCode.COULD_NOT_INFER, 154, 3),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 154, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 154, 1)]),
       error(CompileTimeErrorCode.COULD_NOT_INFER, 154, 3),
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 154, 1),
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 154, 1),
     ]);
   }
 
@@ -58,8 +60,9 @@
 }
 ''', [
       error(HintCode.UNUSED_LOCAL_VARIABLE, 120, 1),
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 124, 1),
       error(CompileTimeErrorCode.COULD_NOT_INFER, 124, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 124, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 124, 1)]),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
index 97435e1..4c9a2d6 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
@@ -205,7 +205,7 @@
 import 'package:aaa/a.dart';
 ''', [
       error(HintCode.DEPRECATED_MEMBER_USE, 24, 28,
-          messageContains: 'package:aaa/a.dart'),
+          messageContains: ['package:aaa/a.dart']),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/export_internal_library_test.dart b/pkg/analyzer/test/src/diagnostics/export_internal_library_test.dart
index e4a7206..3528d8f 100644
--- a/pkg/analyzer/test/src/diagnostics/export_internal_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/export_internal_library_test.dart
@@ -19,7 +19,8 @@
     await assertErrorsInCode('''
 export 'dart:_internal';
 ''', [
-      error(CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY, 0, 24),
+      error(CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY, 0, 24,
+          messageContains: ["library 'dart:_internal' "]),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart b/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart
index 4c4ef49..d595b74 100644
--- a/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart
@@ -23,7 +23,8 @@
 library L;
 export 'lib1.dart';
 ''', [
-      error(CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, 18, 11),
+      error(CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, 18, 11,
+          messageContains: ["library 'lib1.dart' "]),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/extension_conflicting_static_and_instance_test.dart b/pkg/analyzer/test/src/diagnostics/extension_conflicting_static_and_instance_test.dart
index d2581f7..1c98aba 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_conflicting_static_and_instance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_conflicting_static_and_instance_test.dart
@@ -86,6 +86,19 @@
     ]);
   }
 
+  test_field_getter_unnamed() async {
+    await assertErrorsInCode('''
+extension on String {
+  static int foo = 0;
+  int get foo => 0;
+}
+''', [
+      error(HintCode.UNUSED_FIELD, 35, 3),
+      error(_errorCode, 35, 3),
+      error(HintCode.UNUSED_ELEMENT, 54, 3),
+    ]);
+  }
+
   test_field_method() async {
     await assertErrorsInCode('''
 extension E on String {
@@ -119,6 +132,19 @@
     ]);
   }
 
+  test_getter_getter_unnamed() async {
+    await assertErrorsInCode('''
+extension on String {
+  static int get foo => 0;
+  int get foo => 0;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 39, 3),
+      error(_errorCode, 39, 3),
+      error(HintCode.UNUSED_ELEMENT, 59, 3),
+    ]);
+  }
+
   test_getter_method() async {
     await assertErrorsInCode('''
 extension E on String {
diff --git a/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
index 0181e0d..a1caf5d 100644
--- a/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -94,7 +93,6 @@
 ''', [
       error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 71,
           1),
-      error(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, 71, 1),
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 71, 1),
     ]);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/ffi_native_test.dart b/pkg/analyzer/test/src/diagnostics/ffi_native_test.dart
index a11172c..834d565 100644
--- a/pkg/analyzer/test/src/diagnostics/ffi_native_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ffi_native_test.dart
@@ -15,18 +15,6 @@
 
 @reflectiveTest
 class FfiNativeTest extends PubPackageResolutionTest {
-  test_FfiNativeAnnotationOnInstanceMethod() async {
-    await assertErrorsInCode(r'''
-import 'dart:ffi';
-class K {
-  @FfiNative<Void Function()>('DoesntMatter')
-  external void doesntMatter();
-}
-''', [
-      error(FfiCode.FFI_NATIVE_ONLY_STATIC, 31, 75),
-    ]);
-  }
-
   test_FfiNativeCanUseHandles() async {
     await assertErrorsInCode(r'''
 import 'dart:ffi';
@@ -35,6 +23,27 @@
 ''', []);
   }
 
+  test_FfiNativeCanUseLeaf() async {
+    await assertErrorsInCode(r'''
+import 'dart:ffi';
+@FfiNative<Int8 Function(Int64)>('DoesntMatter', isLeaf:true)
+external int doesntMatter(int);
+''', []);
+  }
+
+  test_FfiNativeInstanceMethodsMustHaveReceiver() async {
+    await assertErrorsInCode(r'''
+import 'dart:ffi';
+class K {
+  @FfiNative<Void Function(Double)>('DoesntMatter')
+  external void doesntMatter(double x);
+}
+''', [
+      error(FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER,
+          31, 89),
+    ]);
+  }
+
   test_FfiNativeLeafMustNotReturnHandle() async {
     await assertErrorsInCode(r'''
 import 'dart:ffi';
@@ -54,4 +63,24 @@
       error(FfiCode.LEAF_CALL_MUST_NOT_TAKE_HANDLE, 19, 100),
     ]);
   }
+
+  test_FfiNativeTooFewParameters() async {
+    await assertErrorsInCode(r'''
+import 'dart:ffi';
+@FfiNative<Void Function(Double)>('DoesntMatter')
+external void doesntMatter(double x, double y);
+''', [
+      error(FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS, 19, 97),
+    ]);
+  }
+
+  test_FfiNativeTooManyParameters() async {
+    await assertErrorsInCode(r'''
+import 'dart:ffi';
+@FfiNative<Void Function(Double, Double)>('DoesntMatter')
+external void doesntMatter(double x);
+''', [
+      error(FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS, 19, 95),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart
index a86aaa2..07abbcd 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart
@@ -16,6 +16,30 @@
 
 @reflectiveTest
 class FieldInitializerNotAssignableTest extends PubPackageResolutionTest {
+  test_implicitCallReference() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call(int p) {}
+}
+class A {
+  void Function(int) x;
+  A() : x = C();
+}
+''');
+  }
+
+  test_implicitCallReference_genericFunctionInstantiation() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call<T>(T p) {}
+}
+class A {
+  void Function(int) x;
+  A() : x = C();
+}
+''');
+  }
+
   test_unrelated() async {
     await assertErrorsInCode('''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart
index 07478d0..25599a7 100644
--- a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart
@@ -74,6 +74,32 @@
 ''');
   }
 
+  test_declaredVariable_implicitCallReference() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call() {}
+}
+void foo(C c) {
+  for (void Function() f in [c]) {
+    f;
+  }
+}
+''');
+  }
+
+  test_declaredVariable_implicitCallReference_genericFunctionInstantiation() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call<T>(T p) {}
+}
+void foo(C c) {
+  for (void Function(int) f in [c]) {
+    f;
+  }
+}
+''');
+  }
+
   test_declaredVariable_interfaceTypeTypedef_ok() async {
     await assertNoErrorsInCode('''
 typedef S = String;
@@ -119,4 +145,48 @@
       error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 27, 10),
     ]);
   }
+
+  test_implicitCallReference() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call(int a) {}
+}
+void foo(Iterable<C> iterable) {
+  void Function(int) f;
+  for (f in iterable) {
+    f;
+  }
+}
+''');
+  }
+
+  test_implicitCallReference_genericFunctionInstantiation() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call<T>(T p) {}
+}
+void foo(Iterable<C> iterable) {
+  void Function(int) f;
+  for (f in iterable) {
+    f;
+  }
+}
+''');
+  }
+
+  test_implicitCallReference_unassignableFunctionType() async {
+    await assertErrorsInCode('''
+class C {
+  void call(int a) {}
+}
+void foo(Iterable<C> iterable) {
+  void Function(String) f;
+  for (f in iterable) {
+    f;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, 106, 8),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
index 7a0dca2..04c4fc3 100644
--- a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
@@ -25,7 +25,8 @@
 import 'lib1.dart' deferred as p;
 var a = new p.A();
 ''', [
-      error(CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, 20, 11),
+      error(CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, 20, 11,
+          messageContains: ["library 'lib1.dart' "]),
     ]);
   }
 
@@ -39,7 +40,8 @@
 import 'part.dart';
 A a = A();
 ''', [
-      error(CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, 20, 11),
+      error(CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, 20, 11,
+          messageContains: ["library 'part.dart' "]),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart b/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
index ee423c8..620441c 100644
--- a/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
@@ -15,6 +15,25 @@
 
 @reflectiveTest
 class InstanceAccessToStaticMemberTest extends PubPackageResolutionTest {
+  test_class_method() async {
+    await assertErrorsInCode('''
+class C {
+  static void a() {}
+}
+
+f(C c) {
+  c.a();
+}
+''', [
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 47, 1,
+          correctionContains: "class 'C'"),
+    ]);
+    assertElement(
+      findNode.methodInvocation('a();'),
+      findElement.method('a'),
+    );
+  }
+
   test_extension_getter() async {
     await assertErrorsInCode('''
 class C {}
@@ -28,7 +47,33 @@
   g(c).a;
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 92, 1),
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 92, 1,
+          correctionContains: "extension 'E'"),
+    ]);
+    assertElement(
+      findNode.simple('a;'),
+      findElement.getter('a'),
+    );
+  }
+
+  test_extension_getter_unnamed() async {
+    await assertErrorsInCode('''
+class C {}
+
+extension on C {
+  static int get a => 0;
+}
+
+C g(C c) => C();
+f(C c) {
+  g(c).a;
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION,
+          90,
+          1),
     ]);
     assertElement(
       findNode.simple('a;'),
@@ -48,7 +93,8 @@
   c.a();
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 68, 1),
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 68, 1,
+          correctionContains: "extension 'E'"),
     ]);
     assertElement(
       findNode.methodInvocation('a();'),
@@ -56,6 +102,49 @@
     );
   }
 
+  test_extension_method_unnamed() async {
+    await assertErrorsInCode('''
+class C {}
+
+extension on C {
+  static void a() {}
+}
+
+f(C c) {
+  c.a();
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION,
+          66,
+          1),
+    ]);
+    assertElement(
+      findNode.methodInvocation('a();'),
+      findElement.method('a'),
+    );
+  }
+
+  test_extension_referring_to_class_member() async {
+    await assertErrorsInCode('''
+class C {
+  static void m() {}
+}
+extension on int {
+  foo(C c) {
+    c.m(); // ERROR
+  }
+}
+test(int i) {
+  i.foo(C());
+}
+''', [
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 71, 1,
+          correctionContains: "class 'C'"),
+    ]);
+  }
+
   test_extension_setter() async {
     await assertErrorsInCode('''
 class C {}
@@ -98,7 +187,53 @@
   a.m;
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 41, 1),
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 41, 1,
+          correctionContains: "class 'A'"),
+    ]);
+  }
+
+  test_method_reference_extension() async {
+    await assertErrorsInCode(r'''
+extension E on int {
+  static m<T>() {}
+}
+f(int a) {
+  a.m<int>;
+}
+''', [
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 57, 1,
+          correctionContains: "extension 'E'"),
+    ]);
+  }
+
+  test_method_reference_extension_unnamed() async {
+    await assertErrorsInCode(r'''
+extension on int {
+  static m<T>() {}
+}
+f(int a) {
+  a.m<int>;
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION,
+          55,
+          1),
+    ]);
+  }
+
+  test_method_reference_mixin() async {
+    await assertErrorsInCode(r'''
+mixin A {
+  static m() {}
+}
+f(A a) {
+  a.m;
+}
+''', [
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 41, 1,
+          correctionContains: "mixin 'A'"),
     ]);
   }
 
@@ -111,10 +246,44 @@
   a.m<int>;
 }
 ''', [
-      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 44, 1),
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 44, 1,
+          correctionContains: "class 'A'"),
     ]);
   }
 
+  test_method_reference_typeInstantiation_mixin() async {
+    await assertErrorsInCode(r'''
+mixin A {
+  static m<T>() {}
+}
+f(A a) {
+  a.m<int>;
+}
+''', [
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 44, 1,
+          correctionContains: "mixin 'A'"),
+    ]);
+  }
+
+  test_mixin_method() async {
+    await assertErrorsInCode('''
+mixin A {
+  static void a() {}
+}
+
+f(A a) {
+  a.a();
+}
+''', [
+      error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 47, 1,
+          correctionContains: "mixin 'A'"),
+    ]);
+    assertElement(
+      findNode.methodInvocation('a();'),
+      findElement.method('a'),
+    );
+  }
+
   test_propertyAccess_field() async {
     await assertErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
index 63aacca..a303efd 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
@@ -9,6 +9,7 @@
 
 main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(InvalidAssignment_ImplicitCallReferenceTest);
     defineReflectiveTests(InvalidAssignmentTest);
     defineReflectiveTests(InvalidAssignmentWithNoImplicitCastsTest);
     defineReflectiveTests(InvalidAssignmentWithoutNullSafetyTest);
@@ -16,6 +17,306 @@
 }
 
 @reflectiveTest
+class InvalidAssignment_ImplicitCallReferenceTest
+    extends PubPackageResolutionTest {
+  test_invalid_genericBoundedCall_nonGenericContext() async {
+    await assertErrorsInCode('''
+class C {
+  T call<T extends num>(T t) => t;
+}
+
+String Function(String) f = C();
+''', [
+      error(CompileTimeErrorCode.COULD_NOT_INFER, 76, 3),
+    ]);
+  }
+
+  test_invalid_genericCall_genericEnclosingClass_nonGenericContext() async {
+    await assertErrorsInCode('''
+class C<T> {
+  C(T a);
+  void call<U>(T t, U u) {}
+}
+
+void Function(bool, String) f = C(7);
+''', [
+      // The type arguments of the instance of `C` should be accurate and be
+      // taken into account when evaluating the assignment of the implicit call
+      // reference.
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 86, 4),
+    ]);
+  }
+
+  test_invalid_genericCall_nonGenericContext() async {
+    await assertErrorsInCode('''
+class C {
+  T call<T>(T t) => t;
+}
+
+void Function() f = C();
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 56, 3),
+    ]);
+  }
+
+  test_invalid_genericCall_nonGenericContext_withoutConstructorTearoffs() async {
+    await assertErrorsInCode('''
+// @dart=2.12
+class C {
+  T call<T>(T t) => t;
+}
+
+int Function(int) f = C();
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 72, 3),
+    ]);
+  }
+
+  test_invalid_noCall_functionContext() async {
+    await assertErrorsInCode('''
+class C {}
+
+Function f = C();
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 25, 3),
+    ]);
+  }
+
+  test_invalid_noCall_functionTypeContext() async {
+    await assertErrorsInCode('''
+class C {}
+
+String Function(String) f = C();
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 40, 3),
+    ]);
+  }
+
+  test_invalid_nonGenericCall() async {
+    await assertErrorsInCode('''
+class C {
+  void call(int a) {}
+}
+
+void Function(String) f = C();
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 61, 3),
+    ]);
+  }
+
+  test_invalid_nonGenericCall_typeVariableExtendsFunctionContext() async {
+    await assertErrorsInCode('''
+class C {
+  void call(int a) {}
+}
+class D<U extends Function> {
+  U f = C();
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 72, 3),
+    ]);
+  }
+
+  test_invalid_nonGenericCall_typeVariableExtendsFunctionTypeContext() async {
+    await assertErrorsInCode('''
+class C {
+  void call(int a) {}
+}
+class D<U extends void Function(int)> {
+  U f = C();
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 82, 3),
+    ]);
+  }
+
+  test_valid_genericBoundedCall_nonGenericContext() async {
+    await assertNoErrorsInCode('''
+class C {
+  T call<T extends num>(T t) => t;
+}
+
+int Function(int) f = C();
+''');
+  }
+
+  test_valid_genericCall_functionContext() async {
+    await assertNoErrorsInCode('''
+class C {
+  T call<T>(T t) => t;
+}
+
+Function f = C();
+''');
+  }
+
+  test_valid_genericCall_futureOrFunctionContext() async {
+    await assertNoErrorsInCode('''
+import 'dart:async';
+class C {
+  T call<T>(T t) => t;
+}
+
+FutureOr<Function> f = C();
+''');
+  }
+
+  test_valid_genericCall_futureOrFunctionTypeContext_generic() async {
+    await assertNoErrorsInCode('''
+import 'dart:async';
+class C {
+  T call<T>(T t) => t;
+}
+
+FutureOr<T Function<T>(T)> f = C();
+''');
+  }
+
+  test_valid_genericCall_futureOrFunctionTypeContext_nonGeneric() async {
+    await assertNoErrorsInCode('''
+import 'dart:async';
+class C {
+  T call<T>(T t) => t;
+}
+
+FutureOr<int Function(int)> f = C();
+''');
+  }
+
+  test_valid_genericCall_genericContext() async {
+    await assertNoErrorsInCode('''
+class C {
+  T call<T>(T t) => t;
+}
+
+T Function<T>(T) f = C();
+''');
+  }
+
+  test_valid_genericCall_genericEnclosingClass_nonGenericContext() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C(T a);
+  void call<U>(T t, U u) {}
+}
+
+void Function(int, String) f = C(7);
+''');
+  }
+
+  test_valid_genericCall_genericTypedefContext() async {
+    await assertNoErrorsInCode('''
+class C {
+  T call<T>(T t) => t;
+}
+typedef Fn<T> = T Function(T);
+class D<U> {
+  Fn<U> f = C();
+}
+
+''');
+  }
+
+  test_valid_genericCall_nonGenericContext() async {
+    await assertNoErrorsInCode('''
+class C {
+  T call<T>(T t) => t;
+}
+
+int Function(int) f = C();
+''');
+  }
+
+  test_valid_genericCall_nullableFunctionContext() async {
+    await assertNoErrorsInCode('''
+class C {
+  T call<T>(T t) => t;
+}
+
+Function? f = C();
+''');
+  }
+
+  test_valid_genericCall_nullableNonGenericContext() async {
+    await assertNoErrorsInCode('''
+class C {
+  T call<T>(T t) => t;
+}
+
+int Function(int)? f = C();
+''');
+  }
+
+  test_valid_genericCall_typedefOfGenericContext() async {
+    await assertNoErrorsInCode('''
+class C {
+  T call<T>(T t) => t;
+}
+
+typedef Fn = T Function<T>(T);
+
+Fn f = C();
+''');
+  }
+
+  test_valid_nonGenericCall() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call(int a) {}
+}
+
+void Function(int) f = C();
+''');
+  }
+
+  test_valid_nonGenericCall_declaredOnMixin() async {
+    await assertNoErrorsInCode('''
+mixin M {
+  void call(int a) {}
+}
+class C with M {}
+
+Function f = C();
+''');
+  }
+
+  test_valid_nonGenericCall_inCascade() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call(int a) {}
+}
+class D {
+  late void Function(int) f;
+}
+
+void foo() {
+  D()..f = C();
+}
+''');
+  }
+
+  test_valid_nonGenericCall_subTypeViaParameter() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call(num a) {}
+}
+
+void Function(int) f = C();
+''');
+  }
+
+  test_valid_nonGenericCall_subTypeViaReturnType() async {
+    await assertNoErrorsInCode('''
+class C {
+  int call() => 7;
+}
+
+num Function() f = C();
+''');
+  }
+}
+
+@reflectiveTest
 class InvalidAssignmentTest extends PubPackageResolutionTest
     with InvalidAssignmentTestCases {
   test_constructorTearoff_inferredTypeArgs() async {
@@ -50,6 +351,20 @@
     ]);
   }
 
+  test_functionTearoff_genericInstantiation() async {
+    await assertNoErrorsInCode('''
+int Function() foo(int Function<T extends int>() f) {
+  return f;
+}
+''');
+
+    assertFunctionReference(
+      findNode.functionReference('f;'),
+      findElement.parameter('f'),
+      'int Function()',
+    );
+  }
+
   test_functionTearoff_inferredTypeArgs() async {
     await assertNoErrorsInCode('''
 void f<T>(T a) {}
@@ -225,6 +540,38 @@
     ]);
   }
 
+  test_functionInstantiation_topLevelVariable_genericContext_assignable() async {
+    await assertNoErrorsInCode('''
+T f<T>(T a) => a;
+U Function<U>(U) foo = f;
+''');
+  }
+
+  test_functionInstantiation_topLevelVariable_genericContext_nonAssignable() async {
+    await assertErrorsInCode('''
+T f<T>(T a) => a;
+U Function<U>(U, int) foo = f;
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 46, 1),
+    ]);
+  }
+
+  test_functionInstantiation_topLevelVariable_nonGenericContext_assignable() async {
+    await assertNoErrorsInCode('''
+T f<T>(T a) => a;
+int Function(int) foo = f;
+''');
+  }
+
+  test_functionInstantiation_topLevelVariable_nonGenericContext_nonAssignable() async {
+    await assertErrorsInCode('''
+T f<T>(T a) => a;
+int Function(int, int) foo = f;
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 47, 1),
+    ]);
+  }
+
   test_implicitlyImplementFunctionViaCall_1() async {
     // issue 18341
     //
@@ -684,6 +1031,20 @@
 @reflectiveTest
 class InvalidAssignmentWithoutNullSafetyTest extends PubPackageResolutionTest
     with InvalidAssignmentTestCases, WithoutNullSafetyMixin {
+  test_functionTearoff_genericInstantiation() async {
+    await assertNoErrorsInCode('''
+int Function() foo(int Function<T extends int>() f) {
+  return f;
+}
+''');
+
+    assertSimpleIdentifier(
+      findNode.simple('f;'),
+      element: findElement.parameter('f'),
+      type: 'int Function()',
+    );
+  }
+
   test_ifNullAssignment() async {
     await assertErrorsInCode('''
 void f(int i) {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
index d8c60f6..a4d4a40 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
@@ -120,6 +120,26 @@
       error(CompileTimeErrorCode.INVALID_OVERRIDE, 94, 1),
     ]);
   }
+
+  test_method_covariant_inheritance_merge() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B extends A {}
+
+class C {
+  /// Not covariant-by-declaration here.
+  void foo(B b) {}
+}
+
+abstract class I {
+  /// Is covariant-by-declaration here.
+  void foo(covariant A a);
+}
+
+/// Is covariant-by-declaration here.
+class D extends C implements I {}
+''');
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
index 2ef124c..530f0ae 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
@@ -306,7 +306,7 @@
     ]);
     await _resolveFile('$testPackageRootPath/lib2.dart', [
       error(HintCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER, 40, 12,
-          messageContains: 'A.forTesting'),
+          messageContains: ['A.forTesting']),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_visible_for_overriding_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_visible_for_overriding_annotation_test.dart
index 910acf3..ee5acb0 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_visible_for_overriding_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_visible_for_overriding_annotation_test.dart
@@ -42,6 +42,14 @@
     ]);
   }
 
+  test_invalid_extension_unnamed() async {
+    await assertErrorsInCode('''
+import 'package:meta/meta.dart';
+@visibleForOverriding
+extension on double {}
+''', [error(HintCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION, 33, 21)]);
+  }
+
   test_invalid_extensionMember() async {
     await assertErrorsInCode(r'''
 import 'package:meta/meta.dart';
@@ -90,7 +98,6 @@
 @visibleForOverriding var a = 1, b;
 ''', [
       error(HintCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION, 33, 21),
-      error(HintCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION, 33, 21),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
index 76204ef..8d45f28 100644
--- a/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
@@ -23,6 +23,42 @@
 var v = const <String?>[null];
 ''');
   }
+
+  test_nonConst_genericFunction_genericContext() async {
+    await assertNoErrorsInCode('''
+List<U Function<U>(U)> foo(T Function<T>(T a) f) {
+  return [f];
+}
+''');
+  }
+
+  test_nonConst_genericFunction_genericContext_nonAssignable() async {
+    await assertErrorsInCode('''
+List<U Function<U>(U, int)> foo(T Function<T>(T a) f) {
+  return [f];
+}
+''', [
+      error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 66, 1),
+    ]);
+  }
+
+  test_nonConst_genericFunction_nonGenericContext() async {
+    await assertNoErrorsInCode('''
+List<int Function(int)> foo(T Function<T>(T a) f) {
+  return [f];
+}
+''');
+  }
+
+  test_nonConst_genericFunction_nonGenericContext_nonAssignable() async {
+    await assertErrorsInCode('''
+List<int Function(int, int)> foo(T Function<T>(T a) f) {
+  return [f];
+}
+''', [
+      error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 67, 1),
+    ]);
+  }
 }
 
 mixin ListElementTypeNotAssignableTestCases on PubPackageResolutionTest {
diff --git a/pkg/analyzer/test/src/diagnostics/missing_js_lib_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/missing_js_lib_annotation_test.dart
deleted file mode 100644
index 9f0346b..0000000
--- a/pkg/analyzer/test/src/diagnostics/missing_js_lib_annotation_test.dart
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (c) 2019, 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/dart/error/hint_codes.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../dart/resolution/context_collection_resolution.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(MissingJSLibAnnotationTest);
-    defineReflectiveTests(MissingJSLibAnnotationWithoutNullSafetyTest);
-  });
-}
-
-@reflectiveTest
-class MissingJSLibAnnotationTest extends PubPackageResolutionTest {
-  @override
-  void setUp() {
-    super.setUp();
-
-    writeTestPackageConfig(PackageConfigFileBuilder(), js: true);
-  }
-
-  test_class() async {
-    await assertErrorsInCode('''
-library foo;
-
-import 'package:js/js.dart';
-
-@JS()
-class A { }
-''', [
-      error(HintCode.MISSING_JS_LIB_ANNOTATION, 44, 5),
-    ]);
-  }
-
-  test_function() async {
-    await assertErrorsInCode('''
-library foo;
-
-import 'package:js/js.dart';
-
-@JS('acxZIndex')
-set _currentZIndex(int value) { }
-''', [
-      error(HintCode.MISSING_JS_LIB_ANNOTATION, 44, 16),
-      error(HintCode.UNUSED_ELEMENT, 65, 14),
-    ]);
-  }
-
-  test_method() async {
-    await assertErrorsInCode('''
-library foo;
-
-import 'package:js/js.dart';
-
-class A {
-  @JS()
-  void a() { }
-}
-''', [
-      error(HintCode.MISSING_JS_LIB_ANNOTATION, 56, 5),
-    ]);
-  }
-
-  test_notMissing() async {
-    await assertNoErrorsInCode('''
-@JS()
-library foo;
-
-import 'package:js/js.dart';
-
-@JS()
-class A { }
-''');
-  }
-
-  test_variable() async {
-    await assertErrorsInCode('''
-import 'package:js/js.dart';
-
-@JS()
-dynamic variable;
-''', [
-      error(HintCode.MISSING_JS_LIB_ANNOTATION, 30, 5),
-    ]);
-  }
-}
-
-@reflectiveTest
-class MissingJSLibAnnotationWithoutNullSafetyTest
-    extends PubPackageResolutionTest with WithoutNullSafetyMixin {
-  @override
-  void setUp() {
-    super.setUp();
-
-    writeTestPackageConfig(PackageConfigFileBuilder(), js: true);
-  }
-
-  test_externalField() async {
-    // https://github.com/dart-lang/sdk/issues/26987
-    await assertErrorsInCode('''
-import 'package:js/js.dart';
-
-@JS()
-external dynamic exports;
-''', [
-      error(HintCode.MISSING_JS_LIB_ANNOTATION, 30, 5),
-      error(ParserErrorCode.EXTERNAL_FIELD, 36, 8),
-    ]);
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/non_native_function_type_argument_to_pointer_test.dart b/pkg/analyzer/test/src/diagnostics/non_native_function_type_argument_to_pointer_test.dart
index 323c81b..40cedd5 100644
--- a/pkg/analyzer/test/src/diagnostics/non_native_function_type_argument_to_pointer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_native_function_type_argument_to_pointer_test.dart
@@ -58,7 +58,7 @@
   }
 }
 ''', [
-      error(FfiCode.NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER, 138, 1),
+      error(FfiCode.NON_CONSTANT_TYPE_ARGUMENT, 125, 1),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/not_enough_positional_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/not_enough_positional_arguments_test.dart
index c3ca2c0..e8e1418 100644
--- a/pkg/analyzer/test/src/diagnostics/not_enough_positional_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_enough_positional_arguments_test.dart
@@ -29,6 +29,21 @@
     ]);
   }
 
+  test_const_namedArgument_insteadOfRequiredPositional() async {
+    await assertErrorsInCode(r'''
+class A {
+  const A(int p);
+}
+main() {
+  const A(p: 0);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 41, 13),
+      error(CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS, 48, 6),
+      error(CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER, 49, 1),
+    ]);
+  }
+
   test_const_super() async {
     await assertErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart
index cfbbbe3..bd97b34 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart
@@ -90,8 +90,9 @@
 @doNotStore
 String getV3() => v;
 ''', [
-      error(HintCode.RETURN_OF_DO_NOT_STORE, 87, 1, messageContains: 'getV'),
-      error(HintCode.RETURN_OF_DO_NOT_STORE, 111, 1, messageContains: 'getV2'),
+      error(HintCode.RETURN_OF_DO_NOT_STORE, 87, 1, messageContains: ['getV']),
+      error(HintCode.RETURN_OF_DO_NOT_STORE, 111, 1,
+          messageContains: ['getV2']),
     ]);
   }
 
@@ -111,8 +112,8 @@
 @doNotStore
 String get v3 => _v;
 ''', [
-      error(HintCode.RETURN_OF_DO_NOT_STORE, 87, 2, messageContains: 'v'),
-      error(HintCode.RETURN_OF_DO_NOT_STORE, 111, 2, messageContains: 'v2'),
+      error(HintCode.RETURN_OF_DO_NOT_STORE, 87, 2, messageContains: ['v']),
+      error(HintCode.RETURN_OF_DO_NOT_STORE, 111, 2, messageContains: ['v2']),
     ]);
   }
 
@@ -128,8 +129,8 @@
 
 String? get v => _v ?? _v2;
 ''', [
-      error(HintCode.RETURN_OF_DO_NOT_STORE, 112, 2, messageContains: '_v'),
-      error(HintCode.RETURN_OF_DO_NOT_STORE, 118, 3, messageContains: '_v2'),
+      error(HintCode.RETURN_OF_DO_NOT_STORE, 112, 2, messageContains: ['_v']),
+      error(HintCode.RETURN_OF_DO_NOT_STORE, 118, 3, messageContains: ['_v2']),
     ]);
   }
 
@@ -170,8 +171,9 @@
   String getV3() => _v;
 }
 ''', [
-      error(HintCode.RETURN_OF_DO_NOT_STORE, 106, 2, messageContains: 'getV'),
-      error(HintCode.RETURN_OF_DO_NOT_STORE, 135, 2, messageContains: 'getV2'),
+      error(HintCode.RETURN_OF_DO_NOT_STORE, 106, 2, messageContains: ['getV']),
+      error(HintCode.RETURN_OF_DO_NOT_STORE, 135, 2,
+          messageContains: ['getV2']),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
index 5f7f7cb..89bab3f 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
@@ -258,6 +258,42 @@
 ''');
   }
 
+  test_function_sync_block_genericFunction__to_genericFunction() async {
+    await assertNoErrorsInCode('''
+U Function<U>(U) foo(T Function<T>(T a) f) {
+  return f;
+}
+''');
+  }
+
+  test_function_sync_block_genericFunction__to_genericFunction_notAssignable() async {
+    await assertErrorsInCode('''
+U Function<U>(U, int) foo(T Function<T>(T a) f) {
+  return f;
+}
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 59, 1),
+    ]);
+  }
+
+  test_function_sync_block_genericFunction__to_nonGenericFunction() async {
+    await assertNoErrorsInCode('''
+int Function(int) foo(T Function<T>(T a) f) {
+  return f;
+}
+''');
+  }
+
+  test_function_sync_block_genericFunction__to_nonGenericFunction_notAssignable() async {
+    await assertErrorsInCode('''
+int Function(int, int) foo(T Function<T>(T a) f) {
+  return f;
+}
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 60, 1),
+    ]);
+  }
+
   test_function_sync_block_int__to_num() async {
     await assertNoErrorsInCode(r'''
 num f(int a) {
@@ -352,6 +388,34 @@
 ''');
   }
 
+  test_function_sync_expression_genericFunction__to_genericFunction() async {
+    await assertNoErrorsInCode('''
+U Function<U>(U) foo(T Function<T>(T a) f) => f;
+''');
+  }
+
+  test_function_sync_expression_genericFunction__to_genericFunction_notAssignable() async {
+    await assertErrorsInCode('''
+U Function<U>(U, int) foo(T Function<T>(T a) f) => f;
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 51, 1),
+    ]);
+  }
+
+  test_function_sync_expression_genericFunction__to_nonGenericFunction() async {
+    await assertNoErrorsInCode('''
+int Function(int) foo(T Function<T>(T a) f) => f;
+''');
+  }
+
+  test_function_sync_expression_genericFunction__to_nonGenericFunction_notAssignable() async {
+    await assertErrorsInCode('''
+int Function(int, int) foo(T Function<T>(T a) f) => f;
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 52, 1),
+    ]);
+  }
+
   test_function_sync_expression_int__to_void() async {
     await assertNoErrorsInCode('''
 void f() => 42;
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 33a5243..263958a 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -402,7 +402,6 @@
     as missing_enum_constant_in_switch;
 import 'missing_exception_value_test.dart' as missing_exception_value;
 import 'missing_field_type_in_struct_test.dart' as missing_field_type_in_struct;
-import 'missing_js_lib_annotation_test.dart' as missing_js_lib_annotation;
 import 'missing_required_param_test.dart' as missing_required_param;
 import 'missing_return_test.dart' as missing_return;
 import 'missing_size_annotation_carray_test.dart'
@@ -981,7 +980,6 @@
     missing_enum_constant_in_switch.main();
     missing_exception_value.main();
     missing_field_type_in_struct.main();
-    missing_js_lib_annotation.main();
     missing_required_param.main();
     missing_return.main();
     missing_size_annotation_carray.main();
diff --git a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
index 79ab24a..3149899 100644
--- a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
@@ -129,7 +129,8 @@
   C(G<B> this.f) {}
 }
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 71, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 71, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 69, 4)]),
     ]);
   }
 
@@ -140,7 +141,8 @@
 class G<E extends A> {}
 G<B> f() => throw 0;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 48, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 48, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 46, 4)]),
     ]);
   }
 
@@ -151,7 +153,8 @@
 class G<E extends A> {}
 typedef G<B> f();
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 56, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 56, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 54, 4)]),
     ]);
   }
 
@@ -162,7 +165,8 @@
 class G<E extends A> {}
 f(G<B> h()) {}
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 50, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 50, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 48, 4)]),
     ]);
   }
 
@@ -184,7 +188,8 @@
 class G<E extends A> {}
 var b = 1 is G<B>;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 61, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 61, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 59, 4)]),
     ]);
   }
 
@@ -252,7 +257,8 @@
   G<B> m() => throw 0;
 }
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 60, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 60, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 58, 4)]),
     ]);
   }
 
@@ -297,7 +303,8 @@
 class Baz extends Bar {}
 void main() {}
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 65, 3),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 65, 3,
+          contextMessages: [message('/home/test/lib/test.dart', 65, 3)]),
     ]);
     // Instantiate-to-bounds should have instantiated "Bar" to "Bar<Foo>".
     assertType(result.unit.declaredElement!.getType('Baz')!.supertype,
@@ -311,7 +318,8 @@
 typedef F<T extends A>();
 F<B> fff = (throw 42);
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 50, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 50, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 48, 4)]),
     ]);
   }
 
@@ -350,7 +358,8 @@
 class G<E extends A> {}
 f(G<B> g) {}
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 50, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 50, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 48, 4)]),
     ]);
   }
 
@@ -376,7 +385,8 @@
 class D<E extends A> {}
 C<D<B>> c = (throw 0);
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 64, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 64, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 62, 4)]),
     ]);
   }
 
@@ -388,7 +398,8 @@
 class G<E extends A> {}
 class D<F extends G<B>> {}
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 77, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 77, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 75, 4)]),
     ]);
   }
 
@@ -399,7 +410,8 @@
 class G<E extends A> {}
 G<B> g = (throw 0);
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 48, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 48, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 46, 4)]),
     ]);
   }
 
@@ -487,7 +499,8 @@
 class CB<T extends F> {}
 void f(CB<FB<F>> a) {}
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 119, 5),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 119, 5,
+          contextMessages: [message('/home/test/lib/test.dart', 116, 9)]),
     ]);
   }
 
@@ -613,7 +626,8 @@
 class A<T extends A<T>> {}
 typedef X<T> = A;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 42, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 42, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 42, 1)]),
     ]);
   }
 
@@ -623,7 +637,8 @@
 typedef X<T extends A> = Map<int, T>;
 void f(X<String> a) {}
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 58, 6),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 58, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 56, 9)]),
     ]);
   }
 
@@ -642,7 +657,11 @@
 typedef G<X extends A<X>> = void Function<Y extends X>();
 foo(G g) {}
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 92, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 92, 1,
+          contextMessages: [
+            message('/home/test/lib/test.dart', 92, 1),
+            message('/home/test/lib/test.dart', 92, 1)
+          ]),
     ]);
   }
 
@@ -698,7 +717,8 @@
 class C<T extends int> {}
 var t = C<String>;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 36, 6),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 36, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 34, 9)]),
     ]);
   }
 
@@ -707,7 +727,8 @@
 typedef Cb<T extends int> = void Function();
 var t = Cb<String>;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 56, 6),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 56, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 53, 10)]),
     ]);
   }
 
@@ -717,7 +738,8 @@
 typedef D<T extends int> = C;
 var t = D<String>;
 ''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 51, 6),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 51, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 49, 9)]),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart
index b6071fc..431f22d 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart
@@ -225,4 +225,21 @@
       error(HintCode.UNNECESSARY_IMPORT, 7, 11),
     ]);
   }
+
+  test_unnecessaryImport_sameUri() async {
+    newFile('$testPackageLibPath/lib1.dart', content: '''
+class A {}
+''');
+    newFile('$testPackageLibPath/lib2.dart', content: '''
+export 'lib1.dart';
+class B {}
+''');
+    await assertErrorsInCode('''
+import 'dart:async';
+import 'dart:async' show Completer;
+f(FutureOr<int> a, Completer<int> b) {}
+''', [
+      error(HintCode.UNNECESSARY_IMPORT, 28, 12),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart b/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
index 250479b..cce3dca 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
@@ -549,7 +549,7 @@
 }
 ''', [
       error(HintCode.UNUSED_RESULT, 131, 2,
-          messageContains: "'m1' should be used."),
+          messageContains: ["'m1' should be used."]),
     ]);
   }
 
@@ -611,6 +611,36 @@
 ''');
   }
 
+  /// https://github.com/dart-lang/sdk/issues/47473
+  test_topLevelFunction_result_assigned_if() async {
+    await assertNoErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+@useResult
+String foo() => '';
+
+String f(bool b) {
+  var f = '';
+  if (b) f = foo();
+  return f;
+}
+''');
+  }
+
+  test_topLevelFunction_result_awaited_future_passed() async {
+    await assertNoErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+@useResult
+Future<List<String>> load() async => [];
+
+void f() async {
+  var l = [];
+  l.add(await load());
+}
+''');
+  }
+
   test_topLevelFunction_result_optionNamedParam_unassigned_parameterDefined() async {
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart
index 4ae834a..ceca9ef 100644
--- a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart
@@ -88,31 +88,4 @@
       error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 18, 14),
     ]);
   }
-
-  test_valid_dll() async {
-    newFile("$testPackageLibPath/lib.dll");
-    await assertErrorsInCode('''
-import 'dart-ext:lib';
-''', [
-      error(HintCode.USE_OF_NATIVE_EXTENSION, 0, 22),
-    ]);
-  }
-
-  test_valid_dylib() async {
-    newFile("$testPackageLibPath/lib.dylib");
-    await assertErrorsInCode('''
-import 'dart-ext:lib';
-''', [
-      error(HintCode.USE_OF_NATIVE_EXTENSION, 0, 22),
-    ]);
-  }
-
-  test_valid_so() async {
-    newFile("$testPackageLibPath/lib.so");
-    await assertErrorsInCode('''
-import 'dart-ext:lib';
-''', [
-      error(HintCode.USE_OF_NATIVE_EXTENSION, 0, 22),
-    ]);
-  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_native_extension_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_native_extension_test.dart
index e172765..8a89fab 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_native_extension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_native_extension_test.dart
@@ -19,8 +19,7 @@
     await assertErrorsInCode(r'''
 export 'dart-ext:x';
 ''', [
-      error(HintCode.USE_OF_NATIVE_EXTENSION, 0, 20),
-      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 7, 12),
+      error(CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION, 7, 12),
     ]);
   }
 
@@ -28,8 +27,7 @@
     await assertErrorsInCode(r'''
 import 'dart-ext:x';
 ''', [
-      // TODO(srawlins): Why does this file not have a URI_DOES_NOT_EXIST error?
-      error(HintCode.USE_OF_NATIVE_EXTENSION, 0, 20),
+      error(CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION, 7, 12),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/fasta/message_coverage_test.dart b/pkg/analyzer/test/src/fasta/message_coverage_test.dart
index f21e632..726ed9d 100644
--- a/pkg/analyzer/test/src/fasta/message_coverage_test.dart
+++ b/pkg/analyzer/test/src/fasta/message_coverage_test.dart
@@ -10,8 +10,8 @@
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
-import 'package:yaml/yaml.dart';
 
+import '../../../tool/messages/error_code_info.dart';
 import '../../generated/parser_test_base.dart';
 
 main() {
@@ -35,45 +35,25 @@
     return visitor.generatedNames;
   }
 
-  /// Given the path to the file 'messages.yaml', return a list of the top-level
-  /// keys defined in that file that define an 'analyzerCode'.
-  List<String> getMappedCodes(String messagesPath) {
-    String content = io.File(messagesPath).readAsStringSync();
-    YamlDocument document = loadYamlDocument(content);
-    expect(document, isNotNull);
+  /// Return a list of the front end messages that define an 'analyzerCode'.
+  List<String> getMappedCodes() {
     Set<String> codes = <String>{};
-    YamlNode contents = document.contents;
-    if (contents is YamlMap) {
-      for (String name in contents.keys) {
-        Object value = contents[name];
-        if (value is YamlMap) {
-          if (value['analyzerCode'] != null) {
-            codes.add(name);
-          }
-        }
+    for (var entry in frontEndMessages.entries) {
+      var name = entry.key;
+      var errorCodeInfo = entry.value;
+      if (errorCodeInfo.analyzerCode.isNotEmpty) {
+        codes.add(name);
       }
     }
     return codes.toList();
   }
 
-  /// Given the path to the file 'messages.yaml', return a list of the analyzer
-  /// codes defined in that file.
-  List<String> getReferencedCodes(String messagesPath) {
-    String content = io.File(messagesPath).readAsStringSync();
-    YamlDocument document = loadYamlDocument(content);
-    expect(document, isNotNull);
+  /// Return a list of the analyzer codes defined in the front end's
+  /// `messages.yaml` file.
+  List<String> getReferencedCodes() {
     Set<String> codes = <String>{};
-    YamlNode contents = document.contents;
-    if (contents is YamlMap) {
-      for (String name in contents.keys) {
-        Object value = contents[name];
-        if (value is YamlMap) {
-          var code = value['analyzerCode']?.toString();
-          if (code != null) {
-            codes.add(code);
-          }
-        }
-      }
+    for (var errorCodeInfo in frontEndMessages.values) {
+      codes.addAll(errorCodeInfo.analyzerCode);
     }
     return codes.toList();
   }
@@ -109,8 +89,7 @@
         path.join(frontEndPath, 'lib', 'src', 'fasta', 'parser', 'parser.dart');
     Set<String> generatedNames = getGeneratedNames(parserPath);
 
-    String messagesPath = path.join(frontEndPath, 'messages.yaml');
-    List<String> mappedCodes = getMappedCodes(messagesPath);
+    List<String> mappedCodes = getMappedCodes();
 
     generatedNames.removeAll(mappedCodes);
     if (generatedNames.isEmpty) {
@@ -133,9 +112,7 @@
         path.join(analyzerPath, 'lib', 'src', 'fasta', 'error_converter.dart');
     List<String> translatedCodes = getTranslatedCodes(astBuilderPath);
 
-    String messagesPath =
-        path.join(path.dirname(analyzerPath), 'front_end', 'messages.yaml');
-    List<String> referencedCodes = getReferencedCodes(messagesPath);
+    List<String> referencedCodes = getReferencedCodes();
 
     List<String> untranslated = <String>[];
     for (String referencedCode in referencedCodes) {
diff --git a/pkg/analyzer/test/src/lint/lint_rule_test.dart b/pkg/analyzer/test/src/lint/lint_rule_test.dart
index 9298033..e87f18a 100644
--- a/pkg/analyzer/test/src/lint/lint_rule_test.dart
+++ b/pkg/analyzer/test/src/lint/lint_rule_test.dart
@@ -65,7 +65,7 @@
 
 const LintCode customCode = LintCode(
     'hash_and_equals', 'Override `==` if overriding `hashCode`.',
-    correction: 'Implement `==`.');
+    correctionMessage: 'Implement `==`.');
 
 class CollectingReporter extends ErrorReporter {
   ErrorCode? code;
diff --git a/pkg/analyzer/test/src/services/available_declarations_test.dart b/pkg/analyzer/test/src/services/available_declarations_test.dart
index 5c4c599..17908dd 100644
--- a/pkg/analyzer/test/src/services/available_declarations_test.dart
+++ b/pkg/analyzer/test/src/services/available_declarations_test.dart
@@ -36,6 +36,8 @@
   String get analysisOptionsPath =>
       convertPath('/home/test/analysis_options.yaml');
 
+  Folder get sdkRoot => newFolder('/sdk');
+
   void addDotPackagesDependency(String path, String name, String rootPath) {
     var packagesFile = getFile(path);
 
@@ -68,7 +70,7 @@
     analysisContextCollection = AnalysisContextCollectionImpl(
       includedPaths: [convertPath('/home')],
       resourceProvider: resourceProvider,
-      sdkPath: convertPath('/sdk'),
+      sdkPath: sdkRoot.path,
     );
 
     var testPath = convertPath('/home/test');
@@ -99,7 +101,10 @@
   }
 
   setUp() {
-    MockSdk(resourceProvider: resourceProvider);
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
 
     newFolder('/home/test');
     newDotPackagesFile('/home/test', content: '''
diff --git a/pkg/analyzer/test/src/source/source_resource_test.dart b/pkg/analyzer/test/src/source/source_resource_test.dart
index 0dc63d4..fb3b7b8a 100644
--- a/pkg/analyzer/test/src/source/source_resource_test.dart
+++ b/pkg/analyzer/test/src/source/source_resource_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/java_engine_io.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -162,6 +163,11 @@
   }
 
   DartSdk _createSdk() {
-    return MockSdk(resourceProvider: resourceProvider);
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+    return FolderBasedDartSdk(resourceProvider, sdkRoot);
   }
 }
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index fb0093f..96d9eb1 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -46,12 +46,14 @@
   LibraryElement library,
   String expected, {
   bool withCodeRanges = false,
+  bool withDisplayName = false,
   bool withExportScope = false,
   bool withNonSynthetic = false,
 }) {
   var writer = _ElementWriter(
     selfUriStr: '${library.source.uri}',
     withCodeRanges: withCodeRanges,
+    withDisplayName: withDisplayName,
     withExportScope: withExportScope,
     withNonSynthetic: withNonSynthetic,
   );
@@ -116,6 +118,7 @@
 class _ElementWriter {
   final String? selfUriStr;
   final bool withCodeRanges;
+  final bool withDisplayName;
   final bool withExportScope;
   final bool withNonSynthetic;
   final StringBuffer buffer = StringBuffer();
@@ -125,6 +128,7 @@
   _ElementWriter({
     this.selfUriStr,
     required this.withCodeRanges,
+    required this.withDisplayName,
     required this.withExportScope,
     required this.withNonSynthetic,
   });
@@ -364,6 +368,7 @@
       _writeDocumentation(e);
       _writeMetadata(e);
       _writeCodeRange(e);
+      _writeDisplayName(e);
 
       var periodOffset = e.periodOffset;
       var nameEnd = e.nameEnd;
@@ -399,6 +404,12 @@
     }
   }
 
+  void _writeDisplayName(Element e) {
+    if (withDisplayName) {
+      _writelnWithIndent('displayName: ${e.displayName}');
+    }
+  }
+
   void _writeDocumentation(Element element) {
     var documentation = element.documentationComment;
     if (documentation != null) {
@@ -571,7 +582,8 @@
   }
 
   void _writeName(Element e) {
-    var name = e.displayName;
+    // TODO(scheglov) Use 'name' everywhere.
+    var name = e is ConstructorElement ? e.name : e.displayName;
     buffer.write(name);
     buffer.write(name.isNotEmpty ? ' @' : '@');
     buffer.write(e.nameOffset);
@@ -786,7 +798,6 @@
       // TODO(scheglov) https://github.com/dart-lang/sdk/issues/44629
       // TODO(scheglov) Remove it when we stop providing it everywhere.
       if (aliasedType is FunctionType) {
-        // ignore: deprecated_member_use_from_same_package
         expect(aliasedType.element, isNull);
       }
 
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 2160b96..11f3116 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -699,7 +699,7 @@
       var properties = _Properties();
       properties.addNode('function', node.function);
       properties.addNode('typeArguments', node.typeArguments);
-      properties.addTypeList('typeArgumentTypes', node.typeArgumentTypes!);
+      properties.addTypeList('typeArgumentTypes', node.typeArgumentTypes);
       _addExpression(properties, node);
       _writeProperties(properties);
     });
@@ -1253,9 +1253,15 @@
     _writeNextCodeLine(node);
     _writeln('SimpleIdentifier');
     _withIndent(() {
-      _writeElement('staticElement', node.staticElement);
-      _writeType('staticType', node.staticType);
-      _writeToken('token', node.token);
+      var properties = _Properties();
+      properties.addElement('staticElement', node.staticElement);
+      properties.addType('staticType', node.staticType);
+      properties.addTypeList(
+        'tearOffTypeArgumentTypes',
+        node.tearOffTypeArgumentTypes,
+      );
+      properties.addToken('token', node.token);
+      _writeProperties(properties);
     });
   }
 
@@ -1683,7 +1689,7 @@
     properties.addNode('argumentList', node.argumentList);
     properties.addType('staticInvokeType', node.staticInvokeType);
     properties.addNode('typeArguments', node.typeArguments);
-    properties.addTypeList('typeArgumentTypes', node.typeArgumentTypes!);
+    properties.addTypeList('typeArgumentTypes', node.typeArgumentTypes);
     _addExpression(properties, node);
   }
 
@@ -1987,8 +1993,8 @@
     _writelnWithIndent('$name: $typeStr');
   }
 
-  void _writeTypeList(String name, List<DartType> types) {
-    if (types.isNotEmpty) {
+  void _writeTypeList(String name, List<DartType>? types) {
+    if (types != null && types.isNotEmpty) {
       _writelnWithIndent(name);
       _withIndent(() {
         for (var type in types) {
@@ -2108,7 +2114,7 @@
     );
   }
 
-  void addTypeList(String name, List<DartType> types) {
+  void addTypeList(String name, List<DartType>? types) {
     properties.add(
       _TypeListProperty(name, types),
     );
@@ -2168,7 +2174,7 @@
 }
 
 class _TypeListProperty extends _Property {
-  final List<DartType> types;
+  final List<DartType>? types;
 
   _TypeListProperty(String name, this.types) : super(name);
 
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
index bc041e1..b1f2a75 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
@@ -84,7 +84,7 @@
       Reference.root(),
     );
 
-    var sdkLinkResult = link(elementFactory, inputLibraries, true);
+    var sdkLinkResult = link(elementFactory, inputLibraries);
 
     return _sdkBundle = _SdkBundle(
       resolutionBytes: sdkLinkResult.resolutionBytes,
@@ -128,7 +128,7 @@
       ),
     );
 
-    var linkResult = link(elementFactory, inputLibraries, true);
+    var linkResult = link(elementFactory, inputLibraries);
 
     if (!keepLinkingLibraries) {
       elementFactory.removeBundle(
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 6040c16..25f182d 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/source/package_map_resolver.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
@@ -29,14 +30,19 @@
 
   DeclaredVariables declaredVariables = DeclaredVariables();
   late final SourceFactory sourceFactory;
-  late final MockSdk sdk;
+  late final FolderBasedDartSdk sdk;
 
   late String testFile;
   late Source testSource;
   Set<Source> otherLibrarySources = <Source>{};
 
   AbstractResynthesizeTest() {
-    sdk = MockSdk(resourceProvider: resourceProvider);
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+    sdk = FolderBasedDartSdk(resourceProvider, sdkRoot);
 
     sourceFactory = SourceFactory(
       [
@@ -1470,18 +1476,6 @@
 ''');
   }
 
-  test_class_constructor_implicit() async {
-    var library = await checkLibrary('class C {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-''');
-  }
-
   test_class_constructor_implicit_type_params() async {
     var library = await checkLibrary('class C<T, U> {}');
     checkElementText(library, r'''
@@ -1516,21 +1510,84 @@
 ''');
   }
 
-  test_class_constructors() async {
-    var library = await checkLibrary('class C { C.foo(); C.bar(); }');
-    checkElementText(library, r'''
+  test_class_constructor_unnamed_implicit() async {
+    var library = await checkLibrary('class C {}');
+    checkElementText(
+        library,
+        r'''
 library
   definingUnit
     classes
       class C @6
         constructors
-          foo @12
-            periodOffset: 11
-            nameEnd: 15
-          bar @21
-            periodOffset: 20
-            nameEnd: 24
+          synthetic @-1
+            displayName: C
+''',
+        withDisplayName: true);
+  }
+
+  test_class_constructors_named() async {
+    var library = await checkLibrary('''
+class C {
+  C.foo();
+}
 ''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          foo @14
+            displayName: C.foo
+            periodOffset: 13
+            nameEnd: 17
+''',
+        withDisplayName: true);
+  }
+
+  test_class_constructors_unnamed() async {
+    var library = await checkLibrary('''
+class C {
+  C();
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @12
+            displayName: C
+''',
+        withDisplayName: true);
+  }
+
+  test_class_constructors_unnamed_new() async {
+    var library = await checkLibrary('''
+class C {
+  C.new();
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @14
+            displayName: C
+            periodOffset: 13
+            nameEnd: 17
+''',
+        withDisplayName: true);
   }
 
   test_class_documented() async {
@@ -6469,6 +6526,41 @@
 ''');
   }
 
+  test_const_functionExpression_typeArgumentTypes() async {
+    var library = await checkLibrary('''
+void f<T>(T a) {}
+
+const void Function(int) v = f;
+''');
+    checkElementText(library, '''
+library
+  definingUnit
+    topLevelVariables
+      static const v @44
+        type: void Function(int)
+        constantInitializer
+          FunctionReference
+            function: SimpleIdentifier
+              staticElement: self::@function::f
+              staticType: void Function<T>(T)
+              token: f @48
+            staticType: void Function(int)
+            typeArgumentTypes
+              int
+    accessors
+      synthetic static get v @-1
+        returnType: void Function(int)
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+        parameters
+          requiredPositional a @12
+            type: T
+        returnType: void
+''');
+  }
+
   test_const_functionReference() async {
     var library = await checkLibrary(r'''
 void f<T>(T a) {}
@@ -13975,10 +14067,14 @@
                   aliasArguments
                     dynamic
                 constantInitializer
-                  SimpleIdentifier
-                    staticElement: self::@function::defaultF
+                  FunctionReference
+                    function: SimpleIdentifier
+                      staticElement: self::@function::defaultF
+                      staticType: void Function<T>(T)
+                      token: defaultF @93
                     staticType: void Function(dynamic)
-                    token: defaultF @93
+                    typeArgumentTypes
+                      dynamic
         accessors
           synthetic get f @-1
             returnType: void Function(dynamic)
diff --git a/pkg/analyzer/test/src/task/options_test.dart b/pkg/analyzer/test/src/task/options_test.dart
index 1deba37c..fe27110 100644
--- a/pkg/analyzer/test/src/task/options_test.dart
+++ b/pkg/analyzer/test/src/task/options_test.dart
@@ -333,19 +333,43 @@
   }
 
   test_analyzer_error_code_supported_bad_value() {
-    validate('''
+    var errors = validate('''
 analyzer:
   errors:
     unused_local_variable: ftw
     ''', [AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUES]);
+    expect(errors.single.problemMessage.messageText(includeUrl: false),
+        contains("The option 'ftw'"));
+  }
+
+  test_analyzer_error_code_supported_bad_value_null() {
+    var errors = validate('''
+analyzer:
+  errors:
+    unused_local_variable: null
+    ''', [AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUES]);
+    expect(errors.single.problemMessage.messageText(includeUrl: false),
+        contains("The option 'null'"));
   }
 
   test_analyzer_error_code_unsupported() {
-    validate('''
+    var errors = validate('''
 analyzer:
   errors:
     not_supported: ignore
     ''', [AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE]);
+    expect(errors.single.problemMessage.messageText(includeUrl: false),
+        contains("'not_supported' isn't a recognized error code"));
+  }
+
+  test_analyzer_error_code_unsupported_null() {
+    var errors = validate('''
+analyzer:
+  errors:
+    null: ignore
+    ''', [AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE]);
+    expect(errors.single.problemMessage.messageText(includeUrl: false),
+        contains("'null' isn't a recognized error code"));
   }
 
   test_analyzer_errors_notAMap() {
@@ -521,11 +545,12 @@
     ''', [AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUE]);
   }
 
-  void validate(String source, List<ErrorCode> expected) {
+  List<AnalysisError> validate(String source, List<ErrorCode> expected) {
     var options = optionsProvider.getOptionsFromString(source);
     var errors = validator.validate(options);
     expect(errors.map((AnalysisError e) => e.errorCode),
         unorderedEquals(expected));
+    return errors;
   }
 }
 
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index aeb8011..7fe6cbe 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -21,6 +21,7 @@
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/analysis/testing_data.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/source/package_map_resolver.dart';
@@ -128,7 +129,14 @@
     resourceProvider.newFile(
         resourceProvider.convertPath(testUri.path), entry.value);
   }
-  var sdk = MockSdk(resourceProvider: resourceProvider);
+  var sdkRoot = resourceProvider.newFolder(
+    resourceProvider.convertPath('/sdk'),
+  );
+  createMockSdk(
+    resourceProvider: resourceProvider,
+    root: sdkRoot,
+  );
+  var sdk = FolderBasedDartSdk(resourceProvider, sdkRoot);
   var logBuffer = StringBuffer();
   var logger = PerformanceLog(logBuffer);
   var scheduler = AnalysisDriverScheduler(logger);
@@ -163,7 +171,7 @@
   var results = <Uri, ResolvedUnitResult>{};
   for (var testUri in testUris) {
     var path = resourceProvider.convertPath(testUri.path);
-    var result = await driver.getResult2(path) as ResolvedUnitResult;
+    var result = await driver.getResult(path) as ResolvedUnitResult;
     var errors =
         result.errors.where((e) => e.severity == Severity.error).toList();
     if (errors.isNotEmpty) {
diff --git a/pkg/analyzer/test/verify_diagnostics_test.dart b/pkg/analyzer/test/verify_diagnostics_test.dart
index d8d7076..bb0643d 100644
--- a/pkg/analyzer/test/verify_diagnostics_test.dart
+++ b/pkg/analyzer/test/verify_diagnostics_test.dart
@@ -2,18 +2,15 @@
 // 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/dart/analysis/analysis_context_collection.dart';
-import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/analysis/session.dart';
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:path/path.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../tool/diagnostics/generate.dart';
+import '../tool/messages/error_code_documentation_info.dart';
+import '../tool/messages/error_code_info.dart';
 import 'src/dart/resolution/context_collection_resolution.dart';
 
 main() {
@@ -111,32 +108,9 @@
     'PubspecWarningCode.UNNECESSARY_DEV_DEPENDENCY',
   ];
 
-  /// The prefix used on directive lines to specify the experiments that should
-  /// be enabled for a snippet.
-  static const String experimentsPrefix = '%experiments=';
-
-  /// The prefix used on directive lines to specify the language version for
-  /// the snippet.
-  static const String languagePrefix = '%language=';
-
-  /// The prefix used on directive lines to indicate the uri of an auxiliary
-  /// file that is needed for testing purposes.
-  static const String uriDirectivePrefix = '%uri="';
-
-  /// The absolute paths of the files containing the declarations of the error
-  /// codes.
-  final List<CodePath> codePaths;
-
   /// The buffer to which validation errors are written.
   final StringBuffer buffer = StringBuffer();
 
-  /// The path to the file currently being verified.
-  late String filePath;
-
-  /// A flag indicating whether the [filePath] has already been written to the
-  /// buffer.
-  bool hasWrittenFilePath = false;
-
   /// The name of the variable currently being verified.
   late String variableName;
 
@@ -148,56 +122,31 @@
   bool hasWrittenVariableName = false;
 
   /// Initialize a newly created documentation validator.
-  DocumentationValidator(this.codePaths);
+  DocumentationValidator();
 
   /// Validate the documentation.
   Future<void> validate() async {
-    AnalysisContextCollection collection = AnalysisContextCollection(
-        includedPaths:
-            codePaths.map((codePath) => codePath.documentationPath).toList(),
-        resourceProvider: PhysicalResourceProvider.INSTANCE);
-    for (CodePath codePath in codePaths) {
-      await _validateFile(_parse(collection, codePath.documentationPath));
+    for (var classEntry in analyzerMessages.entries) {
+      var errorClass = classEntry.key;
+      await _validateMessages(errorClass, classEntry.value);
+    }
+    ErrorClassInfo? errorClassIncludingCfeMessages;
+    for (var errorClass in errorClasses) {
+      if (errorClass.includeCfeMessages) {
+        if (errorClassIncludingCfeMessages != null) {
+          fail('Multiple error classes include CFE messages: '
+              '${errorClassIncludingCfeMessages.name} and ${errorClass.name}');
+        }
+        errorClassIncludingCfeMessages = errorClass;
+        await _validateMessages(
+            errorClass.name, cfeToAnalyzerErrorCodeTables.analyzerCodeToInfo);
+      }
     }
     if (buffer.isNotEmpty) {
       fail(buffer.toString());
     }
   }
 
-  /// Return the name of the code as defined in the [initializer].
-  String _extractCodeName(VariableDeclaration variable) {
-    var initializer = variable.initializer;
-    if (initializer is MethodInvocation) {
-      var firstArgument = initializer.argumentList.arguments[0];
-      return (firstArgument as StringLiteral).stringValue!;
-    }
-    return variable.name.name;
-  }
-
-  /// Extract documentation from the given [field] declaration.
-  List<String>? _extractDoc(FieldDeclaration field) {
-    var comments = field.firstTokenAfterCommentAndMetadata.precedingComments;
-    if (comments == null) {
-      return null;
-    }
-    List<String> docs = [];
-    while (comments != null) {
-      String lexeme = comments.lexeme;
-      if (lexeme.startsWith('// TODO')) {
-        break;
-      } else if (lexeme.startsWith('// ')) {
-        docs.add(lexeme.substring(3));
-      } else if (lexeme == '//') {
-        docs.add('');
-      }
-      comments = comments.next as CommentToken?;
-    }
-    if (docs.isEmpty) {
-      return null;
-    }
-    return docs;
-  }
-
   _SnippetData _extractSnippetData(
     String snippet,
     bool errorRequired,
@@ -232,75 +181,39 @@
         languageVersion);
   }
 
-  /// Extract the snippets of Dart code between the start (inclusive) and end
-  /// (exclusive) indexes.
+  /// Extract the snippets of Dart code from [documentationParts] that are
+  /// tagged as belonging to the given [blockSection].
   List<_SnippetData> _extractSnippets(
-      List<String> lines, int start, int end, bool errorRequired) {
+      List<ErrorCodeDocumentationPart> documentationParts,
+      BlockSection blockSection) {
     var snippets = <_SnippetData>[];
     var auxiliaryFiles = <String, String>{};
-    List<String>? experiments;
-    String? languageVersion;
-    var currentStart = -1;
-    for (var i = start; i < end; i++) {
-      var line = lines[i];
-      if (line == '```') {
-        if (currentStart < 0) {
-          _reportProblem('Snippet without file type on line $i.');
-          return snippets;
+    for (var documentationPart in documentationParts) {
+      if (documentationPart is ErrorCodeDocumentationBlock) {
+        if (documentationPart.containingSection != blockSection) {
+          continue;
         }
-        var secondLine = lines[currentStart + 1];
-        if (secondLine.startsWith(uriDirectivePrefix)) {
-          var name = secondLine.substring(
-              uriDirectivePrefix.length, secondLine.length - 1);
-          var content = lines.sublist(currentStart + 2, i).join('\n');
-          auxiliaryFiles[name] = content;
-        } else if (lines[currentStart] == '```dart') {
-          if (secondLine.startsWith(experimentsPrefix)) {
-            experiments = secondLine
-                .substring(experimentsPrefix.length)
-                .split(',')
-                .map((e) => e.trim())
-                .toList();
-            currentStart++;
-          } else if (secondLine.startsWith(languagePrefix)) {
-            languageVersion = secondLine.substring(languagePrefix.length);
-            currentStart++;
+        var uri = documentationPart.uri;
+        if (uri != null) {
+          auxiliaryFiles[uri] = documentationPart.text;
+        } else {
+          if (documentationPart.fileType == 'dart') {
+            snippets.add(_extractSnippetData(
+                documentationPart.text,
+                blockSection == BlockSection.examples,
+                auxiliaryFiles,
+                documentationPart.experiments,
+                documentationPart.languageVersion));
           }
-          var content = lines.sublist(currentStart + 1, i).join('\n');
-          snippets.add(_extractSnippetData(content, errorRequired,
-              auxiliaryFiles, experiments ?? [], languageVersion));
           auxiliaryFiles = <String, String>{};
         }
-        currentStart = -1;
-      } else if (line.startsWith('```')) {
-        if (currentStart >= 0) {
-          _reportProblem('Snippet before line $i was not closed.');
-          return snippets;
-        }
-        currentStart = i;
       }
     }
     return snippets;
   }
 
-  /// Use the analysis context [collection] to parse the file at the given
-  /// [path] and return the result.
-  ParsedUnitResult _parse(AnalysisContextCollection collection, String path) {
-    AnalysisSession session = collection.contextFor(path).currentSession;
-    var result = session.getParsedUnit(path);
-    if (result is! ParsedUnitResult) {
-      throw StateError('Unable to parse "$path"');
-    }
-    return result;
-  }
-
   /// Report a problem with the current error code.
   void _reportProblem(String problem, {List<AnalysisError> errors = const []}) {
-    if (!hasWrittenFilePath) {
-      buffer.writeln();
-      buffer.writeln('In $filePath');
-      hasWrittenFilePath = true;
-    }
     if (!hasWrittenVariableName) {
       buffer.writeln('  $variableName');
       hasWrittenVariableName = true;
@@ -318,56 +231,43 @@
     }
   }
 
-  /// Extract documentation from the file that was parsed to produce the given
-  /// [result].
-  Future<void> _validateFile(ParsedUnitResult result) async {
-    filePath = result.path;
-    hasWrittenFilePath = false;
-    CompilationUnit unit = result.unit;
-    for (CompilationUnitMember declaration in unit.declarations) {
-      if (declaration is ClassDeclaration) {
-        String className = declaration.name.name;
-        for (ClassMember member in declaration.members) {
-          if (member is FieldDeclaration) {
-            var docs = _extractDoc(member);
-            if (docs != null) {
-              VariableDeclaration variable = member.fields.variables[0];
-              codeName = _extractCodeName(variable);
-              if (codeName == 'NULLABLE_TYPE_IN_CATCH_CLAUSE') {
-                DateTime.now();
-              }
-              variableName = '$className.${variable.name.name}';
-              if (unverifiedDocs.contains(variableName)) {
-                continue;
-              }
-              hasWrittenVariableName = false;
+  /// Extract documentation from the given [messages], which are error messages
+  /// destined for the class [className].
+  Future<void> _validateMessages(
+      String className, Map<String, ErrorCodeInfo> messages) async {
+    for (var errorEntry in messages.entries) {
+      var errorName = errorEntry.key;
+      var errorCodeInfo = errorEntry.value;
+      var docs = parseErrorCodeDocumentation(
+          '$className.$errorName', errorCodeInfo.documentation);
+      if (docs != null) {
+        codeName = errorCodeInfo.sharedName ?? errorName;
+        variableName = '$className.$errorName';
+        if (unverifiedDocs.contains(variableName)) {
+          continue;
+        }
+        hasWrittenVariableName = false;
 
-              int exampleStart = docs.indexOf('#### Examples');
-              int fixesStart = docs.indexOf('#### Common fixes');
+        List<_SnippetData> exampleSnippets =
+            _extractSnippets(docs, BlockSection.examples);
+        _SnippetData? firstExample;
+        if (exampleSnippets.isEmpty) {
+          _reportProblem('No example.');
+        } else {
+          firstExample = exampleSnippets[0];
+        }
+        for (int i = 0; i < exampleSnippets.length; i++) {
+          await _validateSnippet('example', i, exampleSnippets[i]);
+        }
 
-              List<_SnippetData> exampleSnippets =
-                  _extractSnippets(docs, exampleStart + 1, fixesStart, true);
-              _SnippetData? firstExample;
-              if (exampleSnippets.isEmpty) {
-                _reportProblem('No example.');
-              } else {
-                firstExample = exampleSnippets[0];
-              }
-              for (int i = 0; i < exampleSnippets.length; i++) {
-                await _validateSnippet('example', i, exampleSnippets[i]);
-              }
-
-              List<_SnippetData> fixesSnippets =
-                  _extractSnippets(docs, fixesStart + 1, docs.length, false);
-              for (int i = 0; i < fixesSnippets.length; i++) {
-                _SnippetData snippet = fixesSnippets[i];
-                if (firstExample != null) {
-                  snippet.auxiliaryFiles.addAll(firstExample.auxiliaryFiles);
-                }
-                await _validateSnippet('fixes', i, snippet);
-              }
-            }
+        List<_SnippetData> fixesSnippets =
+            _extractSnippets(docs, BlockSection.commonFixes);
+        for (int i = 0; i < fixesSnippets.length; i++) {
+          _SnippetData snippet = fixesSnippets[i];
+          if (firstExample != null) {
+            snippet.auxiliaryFiles.addAll(firstExample.auxiliaryFiles);
           }
+          await _validateSnippet('fixes', i, snippet);
         }
       }
     }
@@ -423,11 +323,10 @@
   @TestTimeout(Timeout.factor(4))
   test_diagnostics() async {
     Context pathContext = PhysicalResourceProvider.INSTANCE.pathContext;
-    List<CodePath> codePaths = computeCodePaths();
     //
     // Validate that the input to the generator is correct.
     //
-    DocumentationValidator validator = DocumentationValidator(codePaths);
+    DocumentationValidator validator = DocumentationValidator();
     await validator.validate();
     //
     // Validate that the generator has been run.
@@ -438,7 +337,7 @@
           .readAsStringSync();
 
       StringBuffer sink = StringBuffer();
-      DocumentationGenerator generator = DocumentationGenerator(codePaths);
+      DocumentationGenerator generator = DocumentationGenerator();
       generator.writeDocumentation(sink);
       String expectedContent = sink.toString();
 
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index 9c1892b..3fdc9d9 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -279,7 +279,7 @@
 The analyzer produces this diagnostic when a field that has the `abstract`
 modifier also has an initializer.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `f` is marked as
 `abstract` and has an initializer:
@@ -329,7 +329,7 @@
 referenced using `super`, but there is no concrete implementation of the
 member in the superclass chain. Abstract members can't be invoked.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `B` doesn't inherit a
 concrete implementation of `a`:
@@ -398,7 +398,7 @@
 
 ### ambiguous_extension_member_access
 
-_A member named '{0}' is defined in extensions {1}, and none are more specific._
+_A member named '{0}' is defined in {1}, and none are more specific._
 
 #### Description
 
@@ -415,7 +415,7 @@
 extended type that's more specific than the extended types of all of the
 other extensions, making the reference to the member ambiguous.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because there's no way to
 choose between the member in `E1` and the member in `E2`:
@@ -464,7 +464,7 @@
 The analyzer produces this diagnostic when a name is referenced that is
 declared in two or more imported libraries.
 
-#### Examples
+#### Example
 
 Given a library (`a.dart`) that defines a class (`C` in this example):
 
@@ -542,7 +542,7 @@
 element is neither of these, making it impossible for the analyzer to
 determine whether you are writing a map literal or a set literal.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -594,7 +594,7 @@
 a type that allows the analyzer to decide whether you were writing a map
 literal or a set literal.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -658,7 +658,7 @@
 The analyzer produces this diagnostic when the static type of an argument
 can't be assigned to the static type of the corresponding parameter.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because a `num` can't be
 assigned to a `String`:
@@ -718,7 +718,7 @@
 to have either a single parameter of type `Object` or two parameters of
 type `Object` and `StackTrace`.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the closure being
 passed to `catchError` doesn't take any parameters, but the function is
@@ -990,7 +990,7 @@
 setter, but there's no setter because the field with the same name was
 declared to be `final` or `const`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `v` is final:
 
@@ -1028,7 +1028,7 @@
 The analyzer produces this diagnostic when a local variable that was
 declared to be final is assigned after it was initialized.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` is final, so it
 can't have a value assigned to it after it was initialized:
@@ -1064,7 +1064,7 @@
 found; there is no setter defined for the type; but there is a getter
 defined with the same name.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because there is no setter
 named `x` in `C`, but there is a getter named `x`:
@@ -1166,7 +1166,7 @@
 The analyzer produces this diagnostic when the target of an assignment is a
 method.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` can't be assigned a
 value because it's a method:
@@ -1331,7 +1331,7 @@
 return type that's [potentially non-nullable][] but would implicitly return
 `null` if control reached the end of the function.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the method `m` has an
 implicit return of `null` inserted at the end of the method, but the method
@@ -1459,7 +1459,7 @@
 The analyzer produces this diagnostic when a built-in identifier is used
 where a type name is expected.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `import` can't be used
 as a type because it's a built-in identifier:
@@ -1519,7 +1519,7 @@
 block isn't one of the required terminators: `break`, `continue`,
 `rethrow`, `return`, or `throw`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the `case` block ends
 with an assignment:
@@ -1710,7 +1710,7 @@
 The analyzer produces this diagnostic when the name following the `as` in a
 cast expression is defined to be something other than a type.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` is a variable, not
 a type:
@@ -1809,7 +1809,7 @@
 found that doesn't have a concrete implementation. Concrete classes aren't
 allowed to contain abstract members.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `m` is an abstract
 method but `C` isn't an abstract class:
@@ -1861,7 +1861,7 @@
 the name of the class, so having the same name makes the reference
 ambiguous.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the static field `foo`
 and the named constructor `foo` have the same name:
@@ -2168,7 +2168,7 @@
 const constructor, but the constructor is defined in a class that has at
 least one non-final instance field (either directly or by inheritance).
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the field `x` isn't
 final:
@@ -2259,7 +2259,7 @@
 known to be a constant is assigned to a variable that's declared to be a
 `const` variable.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` isn't declared to
 be `const`:
@@ -2341,7 +2341,7 @@
 The analyzer produces this diagnostic when an instance field is marked as
 being const.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` is an instance
 field:
@@ -2434,7 +2434,7 @@
 The analyzer produces this diagnostic when a variable that is declared to
 be a constant doesn't have an initializer.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `c` isn't initialized:
 
@@ -2514,7 +2514,7 @@
 operator in a constant list or set evaluates to something other than a list
 or a set.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the value of `list1` is
 `null`, which is neither a list nor a set:
@@ -2543,7 +2543,7 @@
 The analyzer produces this diagnostic when the expression of a spread
 operator in a constant map evaluates to something other than a map.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the value of `map1` is
 `null`, which isn't a map:
@@ -2571,7 +2571,7 @@
 The analyzer produces this diagnostic when the keyword `const` is used to
 invoke a constructor that isn't marked with `const`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the constructor in `A`
 isn't a const constructor:
@@ -2617,7 +2617,7 @@
 The analyzer produces this diagnostic when a const constructor is invoked
 with an argument that isn't a constant expression.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `i` isn't a constant:
 
@@ -2749,7 +2749,7 @@
 The analyzer produces this diagnostic when code is found that won't be
 executed because execution will never reach the code.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the invocation of
 `print` occurs after the function has returned:
@@ -2805,7 +2805,7 @@
 the thrown object is selected, and both of those forms will match any
 object, so no `catch` clauses that follow them will be selected.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -2856,7 +2856,7 @@
 matches anything matchable by the highlighted clause, so the highlighted
 clause will never be selected.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -2911,7 +2911,7 @@
 left-hand side has the value `null`, and because the left-hand side can't
 be `null`, the right-hand side is never evaluated.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `x` can't be `null`:
 
@@ -3107,7 +3107,7 @@
 a value for the parameter is always provided at the call sites, so the
 default value can never be used.
 
-#### Examples
+#### Example
 
 The following code generates this diagnostic:
 
@@ -3310,7 +3310,7 @@
 The analyzer produces this diagnostic when a deprecated library or class
 member is used in a different package.
 
-#### Examples
+#### Example
 
 If the method `m` in the class `C` is annotated with `@deprecated`, then
 the following code produces this diagnostic:
@@ -3337,7 +3337,7 @@
 The analyzer produces this diagnostic when a deprecated library member or
 class member is used in the same package in which it's declared.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` is deprecated:
 
@@ -3473,7 +3473,7 @@
 The analyzer produces this diagnostic when a name is declared, and there is
 a previous declaration with the same name in the same scope.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the name `x` is
 declared twice:
@@ -3580,7 +3580,7 @@
 because it's already included in the same `ignore` comment or because it
 appears in an `ignore-in-file` comment.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the diagnostic named
 `unused_local_variable` is already being ignored for the whole file so it
@@ -3626,7 +3626,7 @@
 that is the same as an import before it in the file. The second import
 doesn’t add value and should be removed.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -3656,7 +3656,7 @@
 The analyzer produces this diagnostic when an invocation has two or more
 named arguments that have the same name.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because there are two arguments
 with the name `a`:
@@ -3784,7 +3784,7 @@
 literal have the same value. The set can only contain each value once,
 which means that one of the values is unnecessary.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the string `'a'` is
 specified twice:
@@ -3861,7 +3861,7 @@
 second value would overwrite the first value, which makes having both pairs
 pointless.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the key `1` is used
 twice:
@@ -4124,7 +4124,7 @@
 The analyzer produces this diagnostic when the analyzer finds an
 expression, rather than a map entry, in what appears to be a map literal.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -4151,7 +4151,7 @@
 The analyzer produces this diagnostic when an `extends` clause contains a
 name that is declared to be something other than a class.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` is declared to be a
 function:
@@ -4196,7 +4196,7 @@
 representing the type of the class. Extensions, on the other hand, don't
 define a type and can't be used as a type literal.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `E` is an extension:
 
@@ -4223,8 +4223,8 @@
 
 ### extension_conflicting_static_and_instance
 
-_Extension '{0}' can't define static member '{1}' and an instance member with
-the same name._
+_An extension can't define static member '{0}' and an instance member with the
+same name._
 
 #### Description
 
@@ -4234,7 +4234,7 @@
 because it's unclear which member is being referenced by an unqualified use
 of the name within the body of the extension.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the name `a` is being
 used for two different members:
@@ -4266,7 +4266,7 @@
 The analyzer produces this diagnostic when an abstract declaration is
 declared in an extension. Extensions can declare only concrete members.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the method `a` doesn't
 have a body:
@@ -4292,7 +4292,7 @@
 extensions aren't classes, and it isn't possible to create an instance of
 an extension.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because there is a constructor
 declaration in `E`:
@@ -4317,7 +4317,7 @@
 found in an extension. It isn't valid to define an instance field because
 extensions can only add behavior, not state.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `s` is an instance
 field:
@@ -4345,7 +4345,7 @@
 `Object`. Such a member can never be used because the member in `Object` is
 always found first.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `toString` is defined
 by `Object`:
@@ -4379,7 +4379,7 @@
 classes, the static members of an extension should be accessed using the
 name of the extension, not an extension override.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `m` is static:
 
@@ -4417,7 +4417,7 @@
 The analyzer produces this diagnostic when the argument to an extension
 override isn't assignable to the type being extended by the extension.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `3` isn't a `String`:
 
@@ -4461,7 +4461,7 @@
 extension override syntax doesn't have any runtime semantics; it only
 controls which member is selected at compile time.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `E(i)` isn't an
 expression:
@@ -4515,7 +4515,7 @@
 `e..m` is the value of the receiver `e`, but extension overrides aren't
 expressions and don't have a value.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `E(3)` isn't an
 expression:
@@ -4554,7 +4554,7 @@
 The analyzer produces this diagnostic when a method or function invocation
 has more positional arguments than the method or function allows.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` defines 2
 parameters but is invoked with 3 arguments:
@@ -4587,7 +4587,7 @@
 has more positional arguments than the method or function allows, but the
 method or function defines named parameters.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` defines 2
 positional parameters but has a named parameter that could be used for the
@@ -4857,7 +4857,7 @@
 that has the field hasn't been created at the point at which it should be
 initialized.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the constructor
 `C.zero`, which redirects to the constructor `C`, has a field formal
@@ -5031,7 +5031,7 @@
 The analyzer produces this diagnostic when a final field or variable isn't
 initialized.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` doesn't have an
 initializer:
@@ -5086,7 +5086,7 @@
 initialized when the instance is created, either by the field's initializer
 or by the constructor.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -5255,7 +5255,7 @@
 The analyzer produces this diagnostic when the expression following `in` in
 a for-in loop has a type that isn't a subclass of `Iterable`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `m` is a `Map`, and
 `Map` isn't a subclass of `Iterable`:
@@ -5535,7 +5535,7 @@
 clause of a class or mixin declaration is defined to be something other
 than a class or mixin.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` is a variable
 rather than a class or mixin:
@@ -5568,7 +5568,7 @@
 The analyzer produces this diagnostic when a single class is specified more
 than once in an `implements` clause.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `A` is in the list
 twice:
@@ -5636,7 +5636,7 @@
 The analyzer produces this diagnostic when it finds a reference to an
 instance member in a constructor's initializer list.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `defaultX` is an
 instance member:
@@ -5834,7 +5834,7 @@
 Constructors can't initialize fields that aren't declared and fields that
 are inherited from superclasses.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the initializer is
 initializing `x`, but `x` isn't a field in the class:
@@ -5939,7 +5939,7 @@
 initialized. Constructors can't initialize fields that aren't declared and
 fields that are inherited from superclasses.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the field `x` isn't
 defined:
@@ -6000,14 +6000,14 @@
 
 ### instance_access_to_static_member
 
-_Static {1} '{0}' can't be accessed through an instance._
+_The static {1} '{0}' can't be accessed through an instance._
 
 #### Description
 
 The analyzer produces this diagnostic when an access operator is used to
 access a static member through an instance of the class.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `zero` is a static
 field, but it’s being accessed as if it were an instance field:
@@ -6050,7 +6050,7 @@
 factory constructor, the instance isn't created before executing the body,
 so `this` can't be used to reference it.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` isn't in scope in
 the factory constructor:
@@ -6088,7 +6088,7 @@
 The analyzer produces this diagnostic when a static method contains an
 unqualified reference to an instance member.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the instance field `x`
 is being referenced in a static method:
@@ -6142,7 +6142,7 @@
 though you can't create an instance of an abstract class, abstract classes
 can declare constructors that can be invoked by subclasses.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `C` is an abstract
 class:
@@ -6312,7 +6312,7 @@
 
 Getters can't be used as annotations.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the variable `v` isn't
 a `const` variable:
@@ -6479,7 +6479,7 @@
 that is assigned to a variable isn't assignable to the type of the
 variable.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the type of the
 initializer (`int`) isn't assignable to the type of the variable
@@ -6622,7 +6622,7 @@
 The analyzer produces this diagnostic when the name of a factory
 constructor isn't the same as the name of the surrounding class.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the name of the factory
 constructor (`A`) isn't the same as the surrounding class (`C`):
@@ -6937,7 +6937,7 @@
 `?..`, `?[`, `?..[`, or `...?`) is used on a receiver that's known to be
 non-nullable.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `s` can't be `null`:
 
@@ -7017,7 +7017,7 @@
 * The return type of the override is assignable to the return type of the
   overridden member.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the type of the
 parameter `s` (`String`) isn't assignable to the type of the parameter `i`
@@ -7072,7 +7072,7 @@
 only defined in the context of an instance method or a generative
 constructor.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `v` is a top-level
 variable:
@@ -7110,7 +7110,7 @@
 `catchError` attempts to return the value from the callback as the result
 of the future, which results in another exception being thrown.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `future` is declared to
 return an `int` while `callback` is declared to return a `String`, and
@@ -7210,7 +7210,7 @@
 This isn't allowed because the value of the type parameter (the actual type
 that will be used at runtime) can't be known at compile time.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the type parameter `T`
 is being used as a type argument when creating a constant list:
@@ -7258,7 +7258,7 @@
 The analyzer produces this diagnostic when a URI in a directive doesn't
 conform to the syntax of a valid URI.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `'#'` isn't a valid
 URI:
@@ -7282,7 +7282,7 @@
 Extensions aren't classes and don't have subclasses, so the keyword serves
 no purpose.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `i` is marked as being
 covariant:
@@ -7385,7 +7385,7 @@
 The analyzer produces this diagnostic when either the `@visibleForTemplate`
 or `@visibleForTesting` annotation is applied to a non-public declaration.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -7422,8 +7422,8 @@
 
 ### invalid_visible_for_overriding_annotation
 
-_The declaration '{0}' is annotated with 'visibleForOverriding'. Because '{0}'
-isn't an interface member that could be overridden, the annotation is meaningless._
+_The annotation 'visibleForOverriding' can only be applied to a public instance
+member that can be overridden._
 
 #### Description
 
@@ -7462,7 +7462,7 @@
 The analyzer produces this diagnostic when an extension override is used to
 invoke a function but the extension doesn't declare a `call` method.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the extension `E`
 doesn't define a `call` method:
@@ -7505,7 +7505,7 @@
 but the name of the function being invoked is defined to be something other
 than a function.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `Binary` is the name of
 a function type, not a function:
@@ -7791,7 +7791,7 @@
 The analyzer produces this diagnostic when the type of an element in a list
 literal isn't assignable to the element type of the list.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `2.5` is a double, and
 the list can hold only integers:
@@ -7964,7 +7964,7 @@
 The analyzer produces this diagnostic when a map entry (a key/value pair)
 is found in a set literal.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the literal has a map
 entry even though it's a set literal:
@@ -8003,7 +8003,7 @@
 The analyzer produces this diagnostic when a key of a key-value pair in a
 map literal has a type that isn't assignable to the key type of the map.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `2` is an `int`, but
 the keys of the map are required to be `String`s:
@@ -8034,10 +8034,10 @@
 #### Description
 
 The analyzer produces this diagnostic when a value of a key-value pair in a
-map literal has a type that isn't assignable to the the value type of the
+map literal has a type that isn't assignable to the value type of the
 map.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `2` is an `int`, but/
 the values of the map are required to be `String`s:
@@ -8089,7 +8089,7 @@
 parameter doesn't allow the parameter to have a value of `null`, then the
 implicit default value isn't valid.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `x` can't be `null`,
 and no non-`null` default value is specified:
@@ -8140,7 +8140,7 @@
 Note that `null` is always a possible value for an enum and therefore also
 must be handled.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the enum constant `e2`
 isn't handled:
@@ -8263,7 +8263,7 @@
 named parameter that is annotated as being required is invoked without
 providing a value for the parameter.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the named parameter `x`
 is required:
@@ -8303,7 +8303,7 @@
 throw implicitly returns `null`. This is rarely the desired behavior. The
 analyzer produces this diagnostic when it finds an implicit return.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` doesn't end with a
 return:
@@ -8679,7 +8679,7 @@
 The analyzer produces this diagnostic when a name in a `with` clause is
 defined to be something other than a mixin or a class.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `F` is defined to be a
 function type:
@@ -8713,7 +8713,7 @@
 Classes that are sealed can't be extended, implemented, mixed in, or used
 as a superclass constraint.
 
-#### Examples
+#### Example
 
 If the package `p` defines a sealed class:
 
@@ -8748,7 +8748,7 @@
 The analyzer produces this diagnostic when a type following the `on`
 keyword in a mixin declaration is neither a class nor a mixin.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `F` is neither a class
 nor a mixin:
@@ -8864,7 +8864,7 @@
 marked as being immutable using the annotation `@immutable` or if it's a
 subclass of an immutable class.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the field `x` isn't
 final:
@@ -8919,7 +8919,7 @@
 that is annotated as `@mustCallSuper` doesn't invoke the overridden method
 as required.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the method `m` in `B`
 doesn't invoke the overridden method `m` in `A`:
@@ -8995,7 +8995,7 @@
 invoked on a class that defines named constructors but the class doesn’t
 have an unnamed constructor.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `A` doesn't define an
 unnamed constructor:
@@ -9050,7 +9050,7 @@
 more abstract members, and doesn't provide or inherit an implementation for
 at least one of those abstract members.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the class `B` doesn't
 have a concrete implementation of `m`:
@@ -9113,7 +9113,7 @@
 The analyzer produces this diagnostic when a condition, such as an `if` or
 `while` loop, doesn't have the static type `bool`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` has the static type
 `int`:
@@ -9147,7 +9147,7 @@
 The analyzer produces this diagnostic when the first expression in an
 assert has a type other than `bool`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the type of `p` is
 `int`, but a `bool` is required:
@@ -9177,7 +9177,7 @@
 The analyzer produces this diagnostic when the operand of the unary
 negation operator (`!`) doesn't have the type `bool`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` is an `int` when it
 must be a `bool`:
@@ -9205,7 +9205,7 @@
 The analyzer produces this diagnostic when one of the operands of either
 the `&&` or `||` operator doesn't have the type `bool`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `a` isn't a Boolean
 value:
@@ -9276,7 +9276,7 @@
 The analyzer produces this diagnostic when the expression in a `case`
 clause isn't a constant expression.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `j` isn't a constant:
 
@@ -9396,7 +9396,7 @@
 named or positional, has a default value that isn't a compile-time
 constant.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -9488,7 +9488,7 @@
 explicitly (because it's prefixed by the `const` keyword) or implicitly
 (because it appears in a [constant context][]).
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` isn't a constant,
 even though it appears in an implicitly constant list literal:
@@ -9574,7 +9574,7 @@
 The analyzer produces this diagnostic when a key in a constant map literal
 isn't a constant value.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic beause `a` isn't a constant:
 
@@ -9609,7 +9609,7 @@
 The analyzer produces this diagnostic when a value in a constant map
 literal isn't a constant value.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `a` isn't a constant:
 
@@ -9644,7 +9644,7 @@
 The analyzer produces this diagnostic when a constant set literal contains
 an element that isn't a compile-time constant.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `i` isn't a constant:
 
@@ -9685,7 +9685,7 @@
 that the constructor should be used to create a constant value whenever
 possible.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -9820,7 +9820,7 @@
 The analyzer produces this diagnostic when an identifier that isn't a type
 is used as a type argument.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` is a variable, not
 a type:
@@ -9848,7 +9848,7 @@
 The analyzer produces this diagnostic when the identifier following the
 `on` in a `catch` clause is defined to be something other than a type.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` is a function, not
 a type:
@@ -9951,7 +9951,7 @@
 - The analyzer can't prove that the local variable will be assigned before
   the reference based on the specification of [definite assignment][].
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `x` can't have a value
 of `null`, but is referenced before a value was assigned to it:
@@ -10060,7 +10060,7 @@
 The analyzer produces this diagnostic when a name is used as a type but
 declared to be something other than a type.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` is a function:
 
@@ -10109,7 +10109,7 @@
 has fewer positional arguments than the number of required positional
 parameters.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` declares two
 required parameters, but only one argument is provided:
@@ -10144,7 +10144,7 @@
 - Doesn't have an initializer
 - Isn't marked as `late`
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `x` is implicitly
 initialized to `null` when it isn't allowed to be `null`:
@@ -10216,7 +10216,7 @@
 initialized to `null`, but the type of the field or variable doesn't allow
 it to be set to `null`, so an explicit initializer must be provided.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the field `f` can't be
 initialized to `null`:
@@ -10271,7 +10271,7 @@
 expression of a spread element that appears in either a list literal or a
 set literal doesn't implement the type `Iterable`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic:
 
@@ -10300,7 +10300,7 @@
 expression of a spread element that appears in a map literal doesn't
 implement the type `Map`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `l` isn't a `Map`:
 
@@ -10330,7 +10330,7 @@
 variable. To create an instance of the class, the identifier must be
 followed by an argument list.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `C` is a class, and a
 class can't be used as an annotation without invoking a `const` constructor
@@ -10723,7 +10723,7 @@
 the `@override` annotation, but the member isn’t declared in any of the
 supertypes of the class.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `m` isn't declared in
 any of the supertypes of `C`:
@@ -10796,7 +10796,7 @@
 The analyzer produces this diagnostic when a part directive is found and
 the referenced file doesn't have a part-of directive.
 
-#### Examples
+#### Example
 
 Given a file (`a.dart`) containing:
 
@@ -11149,7 +11149,7 @@
 The analyzer produces this diagnostic when a constructor redirects to
 itself, either directly or indirectly, creating an infinite loop.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the generative
 constructors `C.a` and `C.b` each redirect to the other:
@@ -11424,7 +11424,7 @@
 to a constructor whose return type isn't a subtype of the type that the
 factory constructor is declared to produce.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `A` isn't a subclass
 of `C`, which means that the value returned by the constructor `A()`
@@ -11480,7 +11480,7 @@
 produces this diagnostic when the redirect is to something other than a
 constructor.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` is a function:
 
@@ -11610,7 +11610,7 @@
 The analyzer also produces a context message that indicates where the
 declaration is located.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `i` is used before it
 is declared:
@@ -11754,7 +11754,7 @@
 statement to return a value or implicitly returns a value because of using
 `=>`. In any of these cases, they should use `yield` instead of `return`.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the method `f` is a
 generator and is using `return` to return a value:
@@ -11817,7 +11817,7 @@
 The analyzer produces this diagnostic when a method or function returns a
 value whose type isn't assignable to the declared return type.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` has a return type
 of `String` but is returning an `int`:
@@ -11851,7 +11851,7 @@
 expression isn't assignable to the return type that the closure is required
 to have.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` is defined to be a
 function that returns a `String`, but the closure assigned to it returns an
@@ -11879,7 +11879,7 @@
 The analyzer produces this diagnostic when it finds a `return` statement
 without an expression in a function that declares a return type.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the function `f` is
 expected to return an `int`, but no value is being returned:
@@ -11913,7 +11913,7 @@
 earlier versions, these classes weren't defined in `dart:core`, so the
 import was necessary.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.1.0:
@@ -11962,7 +11962,7 @@
 [constant context][] wasn't supported in earlier versions, so this code
 won't be able to run against earlier versions of the SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.3.2:
@@ -12013,7 +12013,7 @@
 versions, so this code won't be able to run against earlier versions of the
 SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.3.2:
@@ -12111,7 +12111,7 @@
 in a [constant context][] wasn't supported in earlier versions, so this
 code won't be able to run against earlier versions of the SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.3.2:
@@ -12165,7 +12165,7 @@
 versions, so this code won't be able to run against earlier versions of the
 SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.6.0:
@@ -12219,7 +12219,7 @@
 operator wasn't supported in earlier versions, so this code won't be able
 to run against earlier versions of the SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.14.0:
@@ -12274,7 +12274,7 @@
 [constant context][] wasn't supported in earlier versions, so this code
 won't be able to run against earlier versions of the SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.3.2:
@@ -12324,7 +12324,7 @@
 2.12.0. This class wasn't defined in earlier versions, so this code won't
 be able to run against earlier versions of the SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.12.0:
@@ -12370,7 +12370,7 @@
 literals weren't supported in earlier versions, so this code won't be able
 to run against earlier versions of the SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.2.0:
@@ -12417,7 +12417,7 @@
 versions, so this code won't be able to run against earlier versions of the
 SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.3.0:
@@ -12472,7 +12472,7 @@
 [constant context][] wasn't supported in earlier versions, so this code
 won't be able to run against earlier versions of the SDK.
 
-#### Examples
+#### Example
 
 Here's an example of a pubspec that defines an SDK constraint with a lower
 bound of less than 2.5.0:
@@ -12603,7 +12603,7 @@
 an instance field. Instance fields don't exist on a class; they exist only
 on an instance of the class.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `x` is an instance
 field:
@@ -12711,7 +12711,7 @@
 are all restricted in this way, to allow for more efficient
 implementations.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `String` is used in an
 `extends` clause:
@@ -12857,7 +12857,7 @@
 extension uses the `super` keyword . Extensions aren't classes and don't
 have superclasses, so the `super` keyword serves no purpose.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `super` can't be used
 in an extension:
@@ -12887,7 +12887,7 @@
 The analyzer produces this diagnostic when the keyword `super` is used
 outside of a instance method.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `super` is used in a
 top-level function:
@@ -13172,7 +13172,7 @@
 The analyzer produces this diagnostic when a type argument isn't the same
 as or a subclass of the bounds of the corresponding type parameter.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `String` isn't a
 subclass of `num`:
@@ -13206,7 +13206,7 @@
 is `Null`, so the code is both more readable and more performant when it
 tests for `null` explicitly.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the code is testing to
 see whether the value of `s` is `null` by using a type check:
@@ -13299,7 +13299,7 @@
 as itself or a subtype of itself or a subtype of itself isn't helpful
 because it will always be the same as itself.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because the bound of `T` is
 `T`:
@@ -13391,7 +13391,7 @@
 The analyzer produces this diagnostic when the name following the `is` in a
 type test expression isn't defined.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the name `Srting` isn't
 defined:
@@ -13502,7 +13502,7 @@
 The analyzer produces this diagnostic when a name that isn't defined is
 used as an annotation.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the name `undefined`
 isn't defined:
@@ -13543,7 +13543,7 @@
 appears to be the name of a class but either isn't defined or isn't visible
 in the scope in which it's being referenced.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `Piont` isn't defined:
 
@@ -13643,7 +13643,7 @@
 appears to be the name of an enum constant, and the name either isn't
 defined or isn't visible in the scope in which it's being referenced.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `E` doesn't define a
 constant named `c`:
@@ -14010,7 +14010,7 @@
 appears to be the name of a function but either isn't defined or isn't
 visible in the scope in which it's being referenced.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the name `emty` isn't
 defined:
@@ -14052,7 +14052,7 @@
 appears to be the name of a getter but either isn't defined or isn't
 visible in the scope in which it's being referenced.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `String` has no member
 named `len`:
@@ -14080,7 +14080,7 @@
 The analyzer produces this diagnostic when a hide combinator includes a
 name that isn't defined by the library being imported.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `dart:math` doesn't
 define the name `String`:
@@ -14112,7 +14112,7 @@
 either isn't defined or isn't visible in the scope in which it's being
 referenced.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the name `rihgt` isn't
 defined:
@@ -14175,7 +14175,7 @@
 appears to be the name of a method but either isn't defined or isn't
 visible in the scope in which it's being referenced.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the identifier
 `removeMiddle` isn't defined:
@@ -14204,7 +14204,7 @@
 has a named argument, but the method or function being invoked doesn't
 define a parameter with the same name.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `m` doesn't declare a
 named parameter named `a`:
@@ -14272,7 +14272,7 @@
 The analyzer produces this diagnostic when a user-definable operator is
 invoked on an object for which the operator isn't defined.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the class `C` doesn't
 define the operator `+`:
@@ -14306,7 +14306,7 @@
 where the prefix is valid, but the identifier isn't declared in any of the
 libraries imported using that prefix.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `dart:core` doesn't
 define anything named `a`:
@@ -14373,7 +14373,7 @@
 appears to be the name of a setter but either isn't defined or isn't
 visible in the scope in which the identifier is being referenced.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because there isn't a setter
 named `z`:
@@ -14411,7 +14411,7 @@
 The analyzer produces this diagnostic when a show combinator includes a
 name that isn't defined by the library being imported.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `dart:math` doesn't
 define the name `String`:
@@ -14493,7 +14493,7 @@
 The analyzer produces this diagnostic when the value being cast is already
 known to be of the type that it's being cast to.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `n` is already known to
 be an `int` as a result of the `is` test:
@@ -14690,7 +14690,7 @@
 can't be `null`. Such comparisons are always either `true` or `false`, so
 they serve no purpose.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `x` can never be
 `null`, so the comparison always evaluates to `true`:
@@ -14851,7 +14851,7 @@
 the name is the same as a static member of the extended type or one of its
 superclasses.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `m` is a static member
 of the extended type `C`:
@@ -14912,7 +14912,7 @@
 neither the exception parameter nor the optional stack trace parameter are
 used in the `catch` block.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `e` isn't referenced:
 
@@ -14949,7 +14949,7 @@
 The analyzer produces this diagnostic when the stack trace parameter in a
 `catch` clause isn't referenced within the body of the `catch` block.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `stackTrace` isn't
 referenced:
@@ -14996,7 +14996,7 @@
 - Optional parameters of private functions for which a value is never
   passed, even when the parameter doesn't have a private name
 
-#### Examples
+#### Example
 
 Assuming that no code in the library references `_C`, the following code
 produces this diagnostic:
@@ -15039,7 +15039,7 @@
 The analyzer produces this diagnostic when a private field is declared but
 never read, even if it's written in one or more places.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the field
 `_originalValue` isn't read anywhere in the library:
@@ -15075,7 +15075,7 @@
 none of the names that are imported are referenced within the importing
 library.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because nothing defined in
 `dart:async` is referenced in the library:
@@ -15102,7 +15102,7 @@
 The analyzer produces this diagnostic when a label that isn't used is
 found.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the label `loop` isn't
 referenced anywhere in the method:
@@ -15147,7 +15147,7 @@
 The analyzer produces this diagnostic when a local variable is declared but
 never read, even if it's written in one or more places.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the value of `count` is
 never read:
@@ -15247,7 +15247,7 @@
 name that isn't used within the library. Because it isn't referenced, the
 name can be removed.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the function `max`
 isn't used:
@@ -15277,7 +15277,7 @@
 The analyzer produces this diagnostic when an import, export, or part
 directive is found where the URI refers to a file that doesn't exist.
 
-#### Examples
+#### Example
 
 If the file `lib.dart` doesn't exist, the following code produces this
 diagnostic:
@@ -15309,7 +15309,7 @@
 - `.pbjson.dart`
 - `.template.dart`
 
-#### Examples
+#### Example
 
 If the file `lib.g.dart` doesn't exist, the following code produces this
 diagnostic:
@@ -15374,8 +15374,7 @@
 is being imported using a scheme of `dart-ext`:
 
 {% prettify dart tag=pre+code %}
-[!import 'dart-ext:x';!]
-int f() native 'string';
+import [!'dart-ext:x'!];
 {% endprettify %}
 
 #### Common fixes
@@ -15394,7 +15393,7 @@
 expected, such as before a member access or on the right-hand side of an
 assignment.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because `f` doesn't produce an
 object on which `toString` can be invoked:
@@ -15421,7 +15420,7 @@
 The analyzer produces this diagnostic when the evaluation of a constant
 expression would result in a `CastException`.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the value of `x` is an
 `int`, which can't be assigned to `y` because an `int` isn't a `String`:
@@ -15460,7 +15459,7 @@
 The analyzer produces this diagnostic when a declaration of an operator has
 the wrong number of parameters.
 
-#### Examples
+#### Example
 
 The following code produces this diagnostic because the operator `+` must
 have a single parameter corresponding to the right operand:
@@ -15720,7 +15719,7 @@
 appears in a function whose body isn't marked with one of the `async*` or
 `sync*` modifiers.
 
-#### Example
+#### Examples
 
 The following code produces this diagnostic because `yield` is being used
 in a function whose body doesn't have a modifier:
diff --git a/pkg/analyzer/tool/diagnostics/generate.dart b/pkg/analyzer/tool/diagnostics/generate.dart
index 30b25bc..c726a25 100644
--- a/pkg/analyzer/tool/diagnostics/generate.dart
+++ b/pkg/analyzer/tool/diagnostics/generate.dart
@@ -4,51 +4,23 @@
 
 import 'dart:io';
 
-import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
-import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/analysis/session.dart';
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer_utilities/package_root.dart' as package_root;
 import 'package:path/src/context.dart';
 
+import '../messages/error_code_documentation_info.dart';
+import '../messages/error_code_info.dart';
+
 /// Generate the file `diagnostics.md` based on the documentation associated
 /// with the declarations of the error codes.
 void main() async {
   IOSink sink = File(computeOutputPath()).openWrite();
-  DocumentationGenerator generator = DocumentationGenerator(computeCodePaths());
+  DocumentationGenerator generator = DocumentationGenerator();
   generator.writeDocumentation(sink);
   await sink.flush();
   await sink.close();
 }
 
-/// Compute a list of the code paths for the files containing diagnostics that
-/// have been documented.
-List<CodePath> computeCodePaths() {
-  Context pathContext = PhysicalResourceProvider.INSTANCE.pathContext;
-  String packageRoot = pathContext.normalize(package_root.packageRoot);
-  String analyzerPath = pathContext.join(packageRoot, 'analyzer');
-  return CodePath.from([
-    [analyzerPath, 'lib', 'src', 'dart', 'error', 'hint_codes.g.dart'],
-    [
-      analyzerPath,
-      'lib',
-      'src',
-      'dart',
-      'error',
-      'syntactic_errors.analyzer.g.dart'
-    ],
-    [analyzerPath, 'lib', 'src', 'error', 'codes.g.dart'],
-    [analyzerPath, 'lib', 'src', 'pubspec', 'pubspec_warning_code.g.dart'],
-  ], [
-    null,
-    [analyzerPath, 'lib', 'src', 'dart', 'error', 'syntactic_errors.g.dart'],
-    null,
-    null,
-  ]);
-}
-
 /// Compute the path to the file into which documentation is being generated.
 String computeOutputPath() {
   Context pathContext = PhysicalResourceProvider.INSTANCE.pathContext;
@@ -58,41 +30,6 @@
       analyzerPath, 'tool', 'diagnostics', 'diagnostics.md');
 }
 
-/// A representation of the paths to the documentation and declaration of a set
-/// of diagnostic codes.
-class CodePath {
-  /// The path to the file containing the declarations of the diagnostic codes
-  /// that might have documentation associated with them.
-  final String documentationPath;
-
-  /// The path to the file containing the generated definition of the diagnostic
-  /// codes that include the message, or `null` if the
-  final String? declarationPath;
-
-  /// Initialize a newly created code path from the [documentationPath] and
-  /// [declarationPath].
-  CodePath(this.documentationPath, this.declarationPath);
-
-  /// Return a list of code paths computed by joining the path segments in the
-  /// corresponding lists from [documentationPaths] and [declarationPaths].
-  static List<CodePath> from(List<List<String>> documentationPaths,
-      List<List<String>?> declarationPaths) {
-    Context pathContext = PhysicalResourceProvider.INSTANCE.pathContext;
-    List<CodePath> paths = [];
-    for (int i = 0; i < documentationPaths.length; i++) {
-      String docPath = pathContext.joinAll(documentationPaths[i]);
-
-      String? declPath;
-      var declarationPath = declarationPaths[i];
-      if (declarationPath != null) {
-        declPath = pathContext.joinAll(declarationPath);
-      }
-      paths.add(CodePath(docPath, declPath));
-    }
-    return paths;
-  }
-}
-
 /// An information holder containing information about a diagnostic that was
 /// extracted from the instance creation expression.
 class DiagnosticInformation {
@@ -102,8 +39,8 @@
   /// The messages associated with the diagnostic.
   List<String> messages;
 
-  /// The lines of documentation associated with the diagnostic.
-  List<String>? documentation;
+  /// The documentation text associated with the diagnostic.
+  String? documentation;
 
   /// Initialize a newly created information holder with the given [name] and
   /// [message].
@@ -130,9 +67,7 @@
       }
     }
     sink.writeln();
-    for (String line in documentation!) {
-      sink.writeln(line);
-    }
+    sink.writeln(documentation!);
   }
 
   /// Return a version of the [text] in which characters that have special
@@ -160,17 +95,24 @@
 
 /// A class used to generate diagnostic documentation.
 class DocumentationGenerator {
-  /// The absolute paths of the files containing the declarations of the error
-  /// codes.
-  final List<CodePath> codePaths;
-
   /// A map from the name of a diagnostic to the information about that
   /// diagnostic.
   Map<String, DiagnosticInformation> infoByName = {};
 
   /// Initialize a newly created documentation generator.
-  DocumentationGenerator(this.codePaths) {
-    _extractAllDocs();
+  DocumentationGenerator() {
+    for (var classEntry in analyzerMessages.entries) {
+      _extractAllDocs(classEntry.key, classEntry.value);
+    }
+    for (var errorClass in errorClasses) {
+      if (errorClass.includeCfeMessages) {
+        _extractAllDocs(
+            errorClass.name, cfeToAnalyzerErrorCodeTables.analyzerCodeToInfo);
+        // Note: only one error class has the `includeCfeMessages` flag set;
+        // verify_diagnostics_test.dart verifies this.  So we can safely break.
+        break;
+      }
+    }
   }
 
   /// Write the documentation to the file at the given [outputPath].
@@ -183,198 +125,43 @@
 
   /// Extract documentation from all of the files containing the definitions of
   /// diagnostics.
-  void _extractAllDocs() {
-    List<String> includedPaths = [];
-    for (CodePath codePath in codePaths) {
-      includedPaths.add(codePath.documentationPath);
-      var declarationPath = codePath.declarationPath;
-      if (declarationPath != null) {
-        includedPaths.add(declarationPath);
-      }
-    }
-    AnalysisContextCollection collection = AnalysisContextCollection(
-        includedPaths: includedPaths,
-        resourceProvider: PhysicalResourceProvider.INSTANCE);
-    for (CodePath codePath in codePaths) {
-      String docPath = codePath.documentationPath;
-      var declPath = codePath.declarationPath;
-      if (declPath == null) {
-        _extractDocs(_parse(collection, docPath), null);
-      } else {
-        File file = File(declPath);
-        if (file.existsSync()) {
-          _extractDocs(
-              _parse(collection, docPath), _parse(collection, declPath));
-        } else {
-          _extractDocs(_parse(collection, docPath), null);
-        }
-      }
-    }
-  }
-
-  /// Extract information about a diagnostic from the [expression], or `null` if
-  /// the expression does not appear to be creating an error code. If the
-  /// expression is the name of a generated code, then the [generatedResult]
-  /// should have the unit in which the information can be found.
-  DiagnosticInformation? _extractDiagnosticInformation(
-      Expression expression, ParsedUnitResult? generatedResult) {
-    List<Expression>? arguments;
-    if (expression is InstanceCreationExpression) {
-      arguments = expression.argumentList.arguments;
-    } else if (expression is MethodInvocation) {
-      var name = expression.methodName.name;
-      if (name.endsWith('Code') || name.endsWith('CodeWithUniqueName')) {
-        arguments = expression.argumentList.arguments;
-      }
-    }
-    if (arguments != null) {
-      String name = _extractName(arguments);
-      String message = _extractMessage(arguments);
+  void _extractAllDocs(String className, Map<String, ErrorCodeInfo> messages) {
+    for (var errorEntry in messages.entries) {
+      var errorName = errorEntry.key;
+      var errorCodeInfo = errorEntry.value;
+      var name = errorCodeInfo.sharedName ?? errorName;
       var info = infoByName[name];
+      var message = convertTemplate(
+          errorCodeInfo.computePlaceholderToIndexMap(),
+          errorCodeInfo.problemMessage);
       if (info == null) {
         info = DiagnosticInformation(name, message);
         infoByName[name] = info;
       } else {
         info.addMessage(message);
       }
-      return info;
-    }
-
-    if (expression is SimpleIdentifier && generatedResult != null) {
-      var variable = _findVariable(expression.name, generatedResult.unit);
-      if (variable != null) {
-        return _extractDiagnosticInformation(variable.initializer!, null);
-      }
-    }
-
-    return null;
-  }
-
-  /// Extract documentation from the given [field] declaration.
-  List<String>? _extractDoc(FieldDeclaration field) {
-    var comments = field.firstTokenAfterCommentAndMetadata.precedingComments;
-    if (comments == null) {
-      return null;
-    }
-    List<String> docs = [];
-    bool inDartCodeBlock = false;
-    while (comments != null) {
-      String lexeme = comments.lexeme;
-      if (lexeme.startsWith('// TODO')) {
-        break;
-      } else if (lexeme.startsWith('// %')) {
-        // Ignore lines containing directives for testing support.
-      } else if (lexeme.startsWith('// ')) {
-        String trimmedLine = lexeme.substring(3);
-        if (trimmedLine == '```dart') {
-          inDartCodeBlock = true;
-          docs.add('{% prettify dart tag=pre+code %}');
-        } else if (trimmedLine == '```') {
-          if (inDartCodeBlock) {
-            docs.add('{% endprettify %}');
-            inDartCodeBlock = false;
-          } else {
-            docs.add(trimmedLine);
-          }
-        } else {
-          docs.add(trimmedLine);
+      var docs = _extractDoc('$className.$errorName', errorCodeInfo);
+      if (docs.isNotEmpty) {
+        if (info.documentation != null) {
+          throw StateError(
+              'Documentation defined multiple times for ${info.name}');
         }
-      } else if (lexeme == '//') {
-        docs.add('');
-      }
-      comments = comments.next as CommentToken?;
-    }
-    if (docs.isEmpty) {
-      return null;
-    }
-    return docs;
-  }
-
-  /// Extract documentation from the file that was parsed to produce the given
-  /// [result]. If a [generatedResult] is provided, then the messages might be
-  /// in the file parsed to produce the result.
-  void _extractDocs(
-      ParsedUnitResult result, ParsedUnitResult? generatedResult) {
-    CompilationUnit unit = result.unit;
-    for (CompilationUnitMember declaration in unit.declarations) {
-      if (declaration is ClassDeclaration &&
-          declaration.name.name != 'StrongModeCode') {
-        for (ClassMember member in declaration.members) {
-          if (member is FieldDeclaration &&
-              member.isStatic &&
-              !_isDeprecated(member)) {
-            VariableDeclaration variable = member.fields.variables[0];
-            var info = _extractDiagnosticInformation(
-                variable.initializer!, generatedResult);
-            if (info != null) {
-              var docs = _extractDoc(member);
-              if (docs != null) {
-                if (info.documentation != null) {
-                  throw StateError(
-                      'Documentation defined multiple times for ${info.name}');
-                }
-                info.documentation = docs;
-              }
-            }
-          }
-        }
+        info.documentation = docs;
       }
     }
   }
 
-  /// Return the message extracted from the list of [arguments].
-  String _extractMessage(List<Expression> arguments) {
-    int positionalCount =
-        arguments.where((expression) => expression is! NamedExpression).length;
-    if (positionalCount == 2) {
-      return _extractString(arguments[1]);
-    } else if (positionalCount == 3) {
-      return _extractString(arguments[2]);
-    } else {
-      throw StateError(
-          'Invalid number of positional arguments: $positionalCount');
+  /// Extract documentation from the given [errorCodeInfo].
+  String _extractDoc(String errorCode, ErrorCodeInfo errorCodeInfo) {
+    var parsedComment =
+        parseErrorCodeDocumentation(errorCode, errorCodeInfo.documentation);
+    if (parsedComment == null) {
+      return '';
     }
-  }
-
-  /// Return the name extracted from the list of [arguments].
-  String _extractName(List<Expression> arguments) =>
-      _extractString(arguments[0]);
-
-  String _extractString(Expression expression) {
-    if (expression is StringLiteral) {
-      return expression.stringValue!;
-    }
-    throw StateError('Cannot extract string from $expression');
-  }
-
-  /// Return the declaration of the top-level variable with the [name] in the
-  /// compilation unit, or `null` if there is no such variable.
-  VariableDeclaration? _findVariable(String name, CompilationUnit unit) {
-    for (CompilationUnitMember member in unit.declarations) {
-      if (member is TopLevelVariableDeclaration) {
-        for (VariableDeclaration variable in member.variables.variables) {
-          if (variable.name.name == name) {
-            return variable;
-          }
-        }
-      }
-    }
-    return null;
-  }
-
-  /// Return `true` if the [field] is marked as being deprecated.
-  bool _isDeprecated(FieldDeclaration field) =>
-      field.metadata.any((annotation) => annotation.name.name == 'Deprecated');
-
-  /// Use the analysis context [collection] to parse the file at the given
-  /// [path] and return the result.
-  ParsedUnitResult _parse(AnalysisContextCollection collection, String path) {
-    AnalysisSession session = collection.contextFor(path).currentSession;
-    var result = session.getParsedUnit(path);
-    if (result is! ParsedUnitResult) {
-      throw StateError('Unable to parse "$path"');
-    }
-    return result;
+    return [
+      for (var documentationPart in parsedComment)
+        documentationPart.formatForDocumentation()
+    ].join('\n');
   }
 
   /// Write the documentation for all of the diagnostics.
diff --git a/pkg/analyzer/tool/messages/error_code_documentation_info.dart b/pkg/analyzer/tool/messages/error_code_documentation_info.dart
new file mode 100644
index 0000000..9eedda1
--- /dev/null
+++ b/pkg/analyzer/tool/messages/error_code_documentation_info.dart
@@ -0,0 +1,231 @@
+// Copyright (c) 2021, 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:convert';
+
+/// Converts the given [documentation] string into a list of
+/// [ErrorCodeDocumentationPart] objects.  These objects represent
+/// user-publishable documentation about the given [errorCode], along with code
+/// blocks illustrating when the error occurs and how to fix it.
+List<ErrorCodeDocumentationPart>? parseErrorCodeDocumentation(
+    String errorCode, String? documentation) {
+  if (documentation == null) {
+    return null;
+  }
+  var documentationLines = documentation.split('\n');
+  if (documentationLines.isEmpty) {
+    return null;
+  }
+  var parser = _ErrorCodeDocumentationParser(errorCode, documentationLines);
+  parser.parse();
+  return parser.result;
+}
+
+/// Enum representing the different documentation sections in which an
+/// [ErrorCodeDocumentationBlock] might appear.
+enum BlockSection {
+  // The "Examples" section, where we give examples of code that generates the
+  // error.
+  examples,
+
+  // The "Common fixes" section, where we give examples of code that doesn't
+  // generate the error.
+  commonFixes,
+}
+
+/// An [ErrorCodeDocumentationPart] containing a block of code.
+class ErrorCodeDocumentationBlock extends ErrorCodeDocumentationPart {
+  /// The code itself.
+  final String text;
+
+  /// The section this block is contained in.
+  final BlockSection containingSection;
+
+  /// A list of the experiments that need to be enabled for this code to behave
+  /// as expected (if any).
+  final List<String> experiments;
+
+  /// The file type of this code block (e.g. `dart` or `yaml`).
+  final String fileType;
+
+  /// The language version that must be active for this code to behave as
+  /// expected (if any).
+  final String? languageVersion;
+
+  /// If this code is an auxiliary file that supports other blocks, the URI of
+  /// the file.
+  final String? uri;
+
+  ErrorCodeDocumentationBlock(this.text,
+      {required this.containingSection,
+      this.experiments = const [],
+      required this.fileType,
+      this.languageVersion,
+      this.uri});
+
+  @override
+  String formatForDocumentation() => fileType == 'dart'
+      ? ['{% prettify dart tag=pre+code %}', text, '{% endprettify %}']
+          .join('\n')
+      : ['```$fileType', text, '```'].join('\n');
+}
+
+/// A portion of an error code's documentation.  This could be free form
+/// markdown text ([ErrorCodeDocumentationText]) or a code block
+/// ([ErrorCodeDocumentationBlock]).
+abstract class ErrorCodeDocumentationPart {
+  /// Formats this documentation part as text suitable for inclusion in the
+  /// analyzer's `diagnostics.md` file.
+  String formatForDocumentation();
+}
+
+/// An [ErrorCodeDocumentationPart] containing free form markdown text.
+class ErrorCodeDocumentationText extends ErrorCodeDocumentationPart {
+  /// The text, in markdown format.
+  final String text;
+
+  ErrorCodeDocumentationText(this.text);
+
+  @override
+  String formatForDocumentation() => text;
+}
+
+class _ErrorCodeDocumentationParser {
+  /// The prefix used on directive lines to specify the experiments that should
+  /// be enabled for a snippet.
+  static const String experimentsPrefix = '%experiments=';
+
+  /// The prefix used on directive lines to specify the language version for
+  /// the snippet.
+  static const String languagePrefix = '%language=';
+
+  /// The prefix used on directive lines to indicate the uri of an auxiliary
+  /// file that is needed for testing purposes.
+  static const String uriDirectivePrefix = '%uri="';
+
+  final String errorCode;
+
+  final List<String> commentLines;
+
+  final List<ErrorCodeDocumentationPart> result = [];
+
+  int currentLineNumber = 0;
+
+  String? currentSection;
+
+  _ErrorCodeDocumentationParser(this.errorCode, this.commentLines);
+
+  bool get done => currentLineNumber >= commentLines.length;
+
+  String get line => commentLines[currentLineNumber];
+
+  BlockSection computeCurrentBlockSection() {
+    switch (currentSection) {
+      case '#### Example':
+      case '#### Examples':
+        return BlockSection.examples;
+      case '#### Common fixes':
+        return BlockSection.commonFixes;
+      case null:
+        problem('Code block before section header');
+      default:
+        problem('Code block in invalid section ${json.encode(currentSection)}');
+    }
+  }
+
+  void parse() {
+    var textLines = <String>[];
+
+    void flushText() {
+      if (textLines.isNotEmpty) {
+        result.add(ErrorCodeDocumentationText(textLines.join('\n')));
+        textLines = [];
+      }
+    }
+
+    while (!done) {
+      if (line.startsWith('TODO')) {
+        // Everything after the "TODO" is ignored.
+        break;
+      } else if (line.startsWith('%')) {
+        problem('% directive outside code block');
+      } else if (line.startsWith('```')) {
+        flushText();
+        processCodeBlock();
+      } else {
+        if (line.startsWith('#') && !line.startsWith('#####')) {
+          currentSection = line;
+        }
+        textLines.add(line);
+        currentLineNumber++;
+      }
+    }
+    flushText();
+  }
+
+  Never problem(String explanation) {
+    throw 'In documentation for $errorCode, at line ${currentLineNumber + 1}, '
+        '$explanation';
+  }
+
+  void processCodeBlock() {
+    var containingSection = computeCurrentBlockSection();
+    var codeLines = <String>[];
+    String? languageVersion;
+    String? uri;
+    List<String>? experiments;
+    assert(line.startsWith('```'));
+    var fileType = line.substring(3);
+    if (fileType.isEmpty) {
+      problem('Code blocks should have a file type, e.g. "```dart"');
+    }
+    ++currentLineNumber;
+    while (true) {
+      if (done) {
+        problem('Unterminated code block');
+      } else if (line.startsWith('```')) {
+        if (line != '```') {
+          problem('Code blocks should end with "```"');
+        }
+        ++currentLineNumber;
+        result.add(ErrorCodeDocumentationBlock(codeLines.join('\n'),
+            containingSection: containingSection,
+            experiments: experiments ?? const [],
+            fileType: fileType,
+            languageVersion: languageVersion,
+            uri: uri));
+        return;
+      } else if (line.startsWith('%')) {
+        if (line.startsWith(languagePrefix)) {
+          if (languageVersion != null) {
+            problem('Multiple language version directives');
+          }
+          languageVersion = line.substring(languagePrefix.length);
+        } else if (line.startsWith(uriDirectivePrefix)) {
+          if (uri != null) {
+            problem('Multiple URI directives');
+          }
+          if (!line.endsWith('"')) {
+            problem('URI directive should be surrounded by double quotes');
+          }
+          uri = line.substring(uriDirectivePrefix.length, line.length - 1);
+        } else if (line.startsWith(experimentsPrefix)) {
+          if (experiments != null) {
+            problem('Multiple experiments directives');
+          }
+          experiments = line
+              .substring(experimentsPrefix.length)
+              .split(',')
+              .map((e) => e.trim())
+              .toList();
+        } else {
+          problem('Unrecognized directive ${json.encode(line)}');
+        }
+      } else {
+        codeLines.add(line);
+      }
+      ++currentLineNumber;
+    }
+  }
+}
diff --git a/pkg/analyzer/tool/messages/error_code_info.dart b/pkg/analyzer/tool/messages/error_code_info.dart
index bc63b2b..907a564 100644
--- a/pkg/analyzer/tool/messages/error_code_info.dart
+++ b/pkg/analyzer/tool/messages/error_code_info.dart
@@ -3,19 +3,150 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:convert';
+import 'dart:io';
+
+import 'package:analyzer_utilities/package_root.dart' as pkg_root;
+import 'package:path/path.dart';
+import 'package:yaml/yaml.dart' show loadYaml;
+
+/// Information about all the classes derived from `ErrorCode` that are code
+/// generated based on the contents of the analyzer and front end
+/// `messages.yaml` files.
+const List<ErrorClassInfo> errorClasses = [
+  ErrorClassInfo(
+      filePath: 'lib/src/analysis_options/error/option_codes.g.dart',
+      name: 'AnalysisOptionsErrorCode',
+      type: 'COMPILE_TIME_ERROR',
+      severity: 'ERROR'),
+  ErrorClassInfo(
+      filePath: 'lib/src/analysis_options/error/option_codes.g.dart',
+      name: 'AnalysisOptionsHintCode',
+      type: 'HINT',
+      severity: 'INFO'),
+  ErrorClassInfo(
+      filePath: 'lib/src/analysis_options/error/option_codes.g.dart',
+      name: 'AnalysisOptionsWarningCode',
+      type: 'STATIC_WARNING',
+      severity: 'WARNING'),
+  ErrorClassInfo(
+      filePath: 'lib/src/error/codes.g.dart',
+      name: 'CompileTimeErrorCode',
+      superclass: 'AnalyzerErrorCode',
+      type: 'COMPILE_TIME_ERROR',
+      extraImports: ['package:analyzer/src/error/analyzer_error_code.dart']),
+  ErrorClassInfo(
+      filePath: 'lib/src/error/codes.g.dart',
+      name: 'LanguageCode',
+      type: 'COMPILE_TIME_ERROR'),
+  ErrorClassInfo(
+      filePath: 'lib/src/error/codes.g.dart',
+      name: 'StaticWarningCode',
+      superclass: 'AnalyzerErrorCode',
+      type: 'STATIC_WARNING',
+      severity: 'WARNING',
+      extraImports: ['package:analyzer/src/error/analyzer_error_code.dart']),
+  ErrorClassInfo(
+      filePath: 'lib/src/dart/error/ffi_code.g.dart',
+      name: 'FfiCode',
+      superclass: 'AnalyzerErrorCode',
+      type: 'COMPILE_TIME_ERROR',
+      extraImports: ['package:analyzer/src/error/analyzer_error_code.dart']),
+  ErrorClassInfo(
+      filePath: 'lib/src/dart/error/hint_codes.g.dart',
+      name: 'HintCode',
+      superclass: 'AnalyzerErrorCode',
+      type: 'HINT',
+      extraImports: ['package:analyzer/src/error/analyzer_error_code.dart']),
+  ErrorClassInfo(
+      filePath: 'lib/src/dart/error/syntactic_errors.g.dart',
+      name: 'ParserErrorCode',
+      type: 'SYNTACTIC_ERROR',
+      severity: 'ERROR',
+      includeCfeMessages: true),
+  ErrorClassInfo(
+      filePath: 'lib/src/manifest/manifest_warning_code.g.dart',
+      name: 'ManifestWarningCode',
+      type: 'STATIC_WARNING',
+      severity: 'WARNING'),
+  ErrorClassInfo(
+      filePath: 'lib/src/pubspec/pubspec_warning_code.g.dart',
+      name: 'PubspecWarningCode',
+      type: 'STATIC_WARNING',
+      severity: 'WARNING'),
+];
+
+/// Decoded messages from the analyzer's `messages.yaml` file.
+final Map<String, Map<String, ErrorCodeInfo>> analyzerMessages =
+    _loadAnalyzerMessages();
+
+/// The path to the `analyzer` package.
+final String analyzerPkgPath =
+    normalize(join(pkg_root.packageRoot, 'analyzer'));
+
+/// A set of tables mapping between front end and analyzer error codes.
+final CfeToAnalyzerErrorCodeTables cfeToAnalyzerErrorCodeTables =
+    CfeToAnalyzerErrorCodeTables._(frontEndMessages);
+
+/// Decoded messages from the front end's `messages.yaml` file.
+final Map<String, ErrorCodeInfo> frontEndMessages = _loadFrontEndMessages();
+
+/// The path to the `front_end` package.
+final String frontEndPkgPath =
+    normalize(join(pkg_root.packageRoot, 'front_end'));
+
+/// Pattern used by the front end to identify placeholders in error message
+/// strings.  TODO(paulberry): share this regexp (and the code for interpreting
+/// it) between the CFE and analyzer.
+final RegExp _placeholderPattern =
+    RegExp("#\([-a-zA-Z0-9_]+\)(?:%\([0-9]*\)\.\([0-9]+\))?");
+
+/// Convert a CFE template string (which uses placeholders like `#string`) to
+/// an analyzer template string (which uses placeholders like `{0}`).
+String convertTemplate(Map<String, int> placeholderToIndexMap, String entry) {
+  return entry.replaceAllMapped(_placeholderPattern,
+      (match) => '{${placeholderToIndexMap[match.group(0)!]}}');
+}
 
 /// Decodes a YAML object (obtained from `pkg/analyzer/messages.yaml`) into a
 /// two-level map of [ErrorCodeInfo], indexed first by class name and then by
 /// error name.
 Map<String, Map<String, ErrorCodeInfo>> decodeAnalyzerMessagesYaml(
-    Map<Object?, Object?> yaml) {
+    Object? yaml) {
+  Never problem(String message) {
+    throw 'Problem in pkg/analyzer/messages.yaml: $message';
+  }
+
   var result = <String, Map<String, ErrorCodeInfo>>{};
+  if (yaml is! Map<Object?, Object?>) {
+    problem('root node is not a map');
+  }
   for (var classEntry in yaml.entries) {
-    var className = classEntry.key as String;
-    for (var errorEntry
-        in (classEntry.value as Map<Object?, Object?>).entries) {
-      (result[className] ??= {})[errorEntry.key as String] =
-          ErrorCodeInfo.fromYaml(errorEntry.value as Map<Object?, Object?>);
+    var className = classEntry.key;
+    if (className is! String) {
+      problem('non-string class key ${json.encode(className)}');
+    }
+    var classValue = classEntry.value;
+    if (classValue is! Map<Object?, Object?>) {
+      problem('value associated with class key $className is not a map');
+    }
+    for (var errorEntry in classValue.entries) {
+      var errorName = errorEntry.key;
+      if (errorName is! String) {
+        problem('in class $className, non-string error key '
+            '${json.encode(errorName)}');
+      }
+      var errorValue = errorEntry.value;
+      if (errorValue is! Map<Object?, Object?>) {
+        problem('value associated with error $className.$errorName is not a '
+            'map');
+      }
+      try {
+        (result[className] ??= {})[errorName] =
+            ErrorCodeInfo.fromYaml(errorValue);
+      } catch (e) {
+        problem('while processing '
+            '$className.$errorName, $e');
+      }
     }
   }
   return result;
@@ -23,15 +154,43 @@
 
 /// Decodes a YAML object (obtained from `pkg/front_end/messages.yaml`) into a
 /// map from error name to [ErrorCodeInfo].
-Map<String, ErrorCodeInfo> decodeCfeMessagesYaml(Map<Object?, Object?> yaml) {
+Map<String, ErrorCodeInfo> decodeCfeMessagesYaml(Object? yaml) {
+  Never problem(String message) {
+    throw 'Problem in pkg/front_end/messages.yaml: $message';
+  }
+
   var result = <String, ErrorCodeInfo>{};
+  if (yaml is! Map<Object?, Object?>) {
+    problem('root node is not a map');
+  }
   for (var entry in yaml.entries) {
-    result[entry.key as String] =
-        ErrorCodeInfo.fromYaml(entry.value as Map<Object?, Object?>);
+    var errorName = entry.key;
+    if (errorName is! String) {
+      problem('non-string error key ${json.encode(errorName)}');
+    }
+    var errorValue = entry.value;
+    if (errorValue is! Map<Object?, Object?>) {
+      problem('value associated with error $errorName is not a map');
+    }
+    result[errorName] = ErrorCodeInfo.fromYaml(errorValue);
   }
   return result;
 }
 
+/// Loads analyzer messages from the analyzer's `messages.yaml` file.
+Map<String, Map<String, ErrorCodeInfo>> _loadAnalyzerMessages() {
+  Object? messagesYaml =
+      loadYaml(File(join(analyzerPkgPath, 'messages.yaml')).readAsStringSync());
+  return decodeAnalyzerMessagesYaml(messagesYaml);
+}
+
+/// Loads front end messages from the front end's `messages.yaml` file.
+Map<String, ErrorCodeInfo> _loadFrontEndMessages() {
+  Object? messagesYaml =
+      loadYaml(File(join(frontEndPkgPath, 'messages.yaml')).readAsStringSync());
+  return decodeCfeMessagesYaml(messagesYaml);
+}
+
 /// Data tables mapping between CFE errors and their corresponding automatically
 /// generated analyzer errors.
 class CfeToAnalyzerErrorCodeTables {
@@ -59,7 +218,7 @@
   /// automatically generated, and whose values are the front end error name.
   final Map<ErrorCodeInfo, String> infoToFrontEndCode = {};
 
-  CfeToAnalyzerErrorCodeTables(Map<String, ErrorCodeInfo> messages) {
+  CfeToAnalyzerErrorCodeTables._(Map<String, ErrorCodeInfo> messages) {
     for (var entry in messages.entries) {
       var errorCodeInfo = entry.value;
       var index = errorCodeInfo.index;
@@ -110,16 +269,63 @@
   }
 }
 
+/// Information about a code generated class derived from `ErrorCode`.
+class ErrorClassInfo {
+  /// A list of additional import URIs that are needed by the code generated
+  /// for this class.
+  final List<String> extraImports;
+
+  /// The file path (relative to the root of `pkg/analyzer`) of the generated
+  /// file containing this class.
+  final String filePath;
+
+  /// True if this class should contain error messages extracted from the front
+  /// end's `messages.yaml` file.
+  ///
+  /// Note: at the moment we only support extracting front end error messages to
+  /// a single error class.
+  final bool includeCfeMessages;
+
+  /// The name of this class.
+  final String name;
+
+  /// The severity of errors in this class, or `null` if the severity should be
+  /// based on the [type] of the error.
+  final String? severity;
+
+  /// The superclass of this class.
+  final String superclass;
+
+  /// The type of errors in this class.
+  final String type;
+
+  const ErrorClassInfo(
+      {this.extraImports = const [],
+      required this.filePath,
+      this.includeCfeMessages = false,
+      required this.name,
+      this.severity,
+      this.superclass = 'ErrorCode',
+      required this.type});
+
+  /// Generates the code to compute the severity of errors of this class.
+  String get severityCode {
+    var severity = this.severity;
+    if (severity == null) {
+      return '$typeCode.severity';
+    } else {
+      return 'ErrorSeverity.$severity';
+    }
+  }
+
+  /// Generates the code to compute the type of errors of this class.
+  String get typeCode => 'ErrorType.$type';
+}
+
 /// In-memory representation of error code information obtained from either a
 /// `messages.yaml` file.  Supports both the analyzer and front_end message file
 /// formats.
 class ErrorCodeInfo {
-  /// Pattern used by the front end to identify placeholders in error message
-  /// strings.  TODO(paulberry): share this regexp (and the code for interpreting
-  /// it) between the CFE and analyzer.
-  static final RegExp _placeholderPattern =
-      RegExp("#\([-a-zA-Z0-9_]+\)(?:%\([0-9]*\)\.\([0-9]+\))?");
-
   /// For error code information obtained from the CFE, the set of analyzer
   /// error codes that corresponds to this error code, if any.
   final List<String> analyzerCode;
@@ -128,13 +334,6 @@
   /// error in code generated output.
   final String? comment;
 
-  /// `true` if this error should be copied from an error in the CFE.  The
-  /// purpose of this field is so that the documentation for the error can exist
-  /// in the analyzer's messages.yaml file but the error text can come from the
-  /// CFE's messages.yaml file.  TODO(paulberry): add support for documentation
-  /// to the CFE's messages.yaml file so that this isn't necessary.
-  final bool copyFromCfe;
-
   /// If the error code has an associated correctionMessage, the template for
   /// it.
   final String? correctionMessage;
@@ -153,9 +352,8 @@
   /// Indicates whether this error is caused by an unresolved identifier.
   final bool isUnresolvedIdentifier;
 
-  /// The problemMessage for the error code, or `null` if [copyFromCfe] is
-  /// `true`.
-  final String? problemMessage;
+  /// The problemMessage for the error code.
+  final String problemMessage;
 
   /// If present, indicates that this error code has a special name for
   /// presentation to the user, that is potentially shared with other error
@@ -165,42 +363,48 @@
   ErrorCodeInfo(
       {this.analyzerCode = const [],
       this.comment,
-      this.copyFromCfe = false,
       this.documentation,
       this.hasPublishedDocs = false,
       this.index,
       this.isUnresolvedIdentifier = false,
       this.sharedName,
-      this.problemMessage,
-      this.correctionMessage}) {
-    if (copyFromCfe) {
-      if (problemMessage != null) {
-        throw "Error codes marked `copyFromCfe: true` can't have a "
-            "problemMessage.";
-      }
-    } else {
-      if (problemMessage == null) {
-        throw 'Error codes must have a problemMessage unless they are marked '
-            '`copyFromCfe: true`.';
-      }
-    }
-  }
+      required this.problemMessage,
+      this.correctionMessage});
 
   /// Decodes an [ErrorCodeInfo] object from its YAML representation.
   ErrorCodeInfo.fromYaml(Map<Object?, Object?> yaml)
       : this(
             analyzerCode: _decodeAnalyzerCode(yaml['analyzerCode']),
             comment: yaml['comment'] as String?,
-            copyFromCfe: yaml['copyFromCfe'] as bool? ?? false,
             correctionMessage: yaml['correctionMessage'] as String?,
             documentation: yaml['documentation'] as String?,
             hasPublishedDocs: yaml['hasPublishedDocs'] as bool? ?? false,
             index: yaml['index'] as int?,
             isUnresolvedIdentifier:
                 yaml['isUnresolvedIdentifier'] as bool? ?? false,
-            problemMessage: yaml['problemMessage'] as String?,
+            problemMessage: yaml['problemMessage'] as String,
             sharedName: yaml['sharedName'] as String?);
 
+  /// Given a messages.yaml entry, come up with a mapping from placeholder
+  /// patterns in its message strings to their corresponding indices.
+  Map<String, int> computePlaceholderToIndexMap() {
+    var mapping = <String, int>{};
+    for (var value in [problemMessage, correctionMessage]) {
+      if (value is! String) continue;
+      for (Match match in _placeholderPattern.allMatches(value)) {
+        // CFE supports a bunch of formatting options that analyzer doesn't;
+        // make sure none of those are used.
+        if (match.group(0) != '#${match.group(1)}') {
+          throw 'Template string ${json.encode(value)} contains unsupported '
+              'placeholder pattern ${json.encode(match.group(0))}';
+        }
+
+        mapping[match.group(0)!] ??= mapping.length;
+      }
+    }
+    return mapping;
+  }
+
   /// Generates a dart declaration for this error code, suitable for inclusion
   /// in the error class [className].  [errorCode] is the name of the error code
   /// to be generated.
@@ -208,15 +412,15 @@
     var out = StringBuffer();
     out.writeln('$className(');
     out.writeln("'${sharedName ?? errorCode}',");
-    final placeholderToIndexMap = _computePlaceholderToIndexMap();
+    final placeholderToIndexMap = computePlaceholderToIndexMap();
     out.writeln(
-        json.encode(_convertTemplate(placeholderToIndexMap, problemMessage!)) +
+        json.encode(convertTemplate(placeholderToIndexMap, problemMessage)) +
             ',');
     final correctionMessage = this.correctionMessage;
     if (correctionMessage is String) {
-      out.write('correction: ');
+      out.write('correctionMessage: ');
       out.writeln(json.encode(
-              _convertTemplate(placeholderToIndexMap, correctionMessage)) +
+              convertTemplate(placeholderToIndexMap, correctionMessage)) +
           ',');
     }
     if (hasPublishedDocs) {
@@ -254,11 +458,10 @@
 
   /// Encodes this object into a YAML representation.
   Map<Object?, Object?> toYaml() => {
-        if (copyFromCfe) 'copyFromCfe': true,
         if (sharedName != null) 'sharedName': sharedName,
         if (analyzerCode.isNotEmpty)
           'analyzerCode': _encodeAnalyzerCode(analyzerCode),
-        if (problemMessage != null) 'problemMessage': problemMessage,
+        'problemMessage': problemMessage,
         if (correctionMessage != null) 'correctionMessage': correctionMessage,
         if (isUnresolvedIdentifier) 'isUnresolvedIdentifier': true,
         if (hasPublishedDocs) 'hasPublishedDocs': true,
@@ -266,34 +469,6 @@
         if (documentation != null) 'documentation': documentation,
       };
 
-  /// Given a messages.yaml entry, come up with a mapping from placeholder
-  /// patterns in its message strings to their corresponding indices.
-  Map<String, int> _computePlaceholderToIndexMap() {
-    var mapping = <String, int>{};
-    for (var value in [problemMessage, correctionMessage]) {
-      if (value is! String) continue;
-      for (Match match in _placeholderPattern.allMatches(value)) {
-        // CFE supports a bunch of formatting options that we don't; make sure
-        // none of those are used.
-        if (match.group(0) != '#${match.group(1)}') {
-          throw 'Template string ${json.encode(value)} contains unsupported '
-              'placeholder pattern ${json.encode(match.group(0))}';
-        }
-
-        mapping[match.group(0)!] ??= mapping.length;
-      }
-    }
-    return mapping;
-  }
-
-  /// Convert a CFE template string (which uses placeholders like `#string`) to
-  /// an analyzer template string (which uses placeholders like `{0}`).
-  static String _convertTemplate(
-      Map<String, int> placeholderToIndexMap, String entry) {
-    return entry.replaceAllMapped(_placeholderPattern,
-        (match) => '{${placeholderToIndexMap[match.group(0)!]}}');
-  }
-
   static List<String> _decodeAnalyzerCode(Object? value) {
     if (value == null) {
       return const [];
diff --git a/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart b/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart
index 4834120..75b6f60 100644
--- a/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart
+++ b/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart
@@ -10,7 +10,6 @@
 // TODO(paulberry): once code generation is in place, remove this script.
 
 import 'dart:convert';
-import 'dart:io';
 
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/utilities.dart';
@@ -27,29 +26,14 @@
 
 main() {
   var errorDeclarations = _findErrorDeclarations();
-  var generatedAnalyzerCodes = _computeGeneratedAnalyzerCodes();
   var errorCodesByClass = _findErrorCodesByClass();
-  _generateYaml(errorCodesByClass, errorDeclarations, generatedAnalyzerCodes);
+  _generateYaml(errorCodesByClass, errorDeclarations);
 }
 
 /// The path to the `analyzer` package.
 final String _analyzerPkgPath =
     normalize(join(pkg_root.packageRoot, 'analyzer'));
 
-/// The path to the `analyzer` package.
-final String _frontEndPkgPath =
-    normalize(join(pkg_root.packageRoot, 'front_end'));
-
-/// Computes the set of `ParserErrorCode`s that are generated based on
-/// `pkg/front_end/messages.yaml`.
-Set<String> _computeGeneratedAnalyzerCodes() {
-  Map<dynamic, dynamic> messagesYaml = loadYaml(
-      File(join(_frontEndPkgPath, 'messages.yaml')).readAsStringSync());
-  var messages = decodeCfeMessagesYaml(messagesYaml);
-  var tables = CfeToAnalyzerErrorCodeTables(messages);
-  return tables.infoToAnalyzerCode.values.toSet();
-}
-
 /// Encodes [yaml] into a string parseable as YAML.
 ///
 /// YAML is complex and we are just trying to do a good enough job for a one
@@ -205,10 +189,8 @@
 /// [_findErrorCodesByClass]) and [errorDeclarations] (obtained from
 /// [_findErrorDeclarations]) into a YAML representation of the errors, and
 /// prints the resulting YAML.
-void _generateYaml(
-    Map<String, List<ErrorCode>> errorCodesByClass,
-    Map<String, Map<String, VariableDeclaration>> errorDeclarations,
-    Set<String> generatedAnalyzerCodes) {
+void _generateYaml(Map<String, List<ErrorCode>> errorCodesByClass,
+    Map<String, Map<String, VariableDeclaration>> errorDeclarations) {
   var yaml = <String, Map<String, Object?>>{};
   for (var entry in errorCodesByClass.entries) {
     var yamlCodes = <String, Object?>{};
@@ -239,27 +221,15 @@
       var commentInfo = _extractCommentInfo(fieldDeclaration);
       var documentationComment = commentInfo.documentationComment;
       var otherComment = commentInfo.otherComment;
-      ErrorCodeInfo errorCodeInfo;
-      if (className == 'ParserErrorCode' &&
-          generatedAnalyzerCodes.contains(name)) {
-        if (uniqueNameSuffix != name) {
-          throw "Auto-generated parser error codes can't be aliased";
-        }
-        errorCodeInfo = ErrorCodeInfo(
-            copyFromCfe: true,
-            comment: documentationComment,
-            documentation: otherComment);
-      } else {
-        errorCodeInfo = ErrorCodeInfo(
-            sharedName: uniqueNameSuffix == name ? null : name,
-            problemMessage: code.message,
-            correctionMessage: code.correction,
-            isUnresolvedIdentifier: code.isUnresolvedIdentifier,
-            hasPublishedDocs: code.hasPublishedDocs,
-            comment: documentationComment,
-            documentation: otherComment);
-      }
-      yamlCodes[uniqueNameSuffix] = errorCodeInfo.toYaml();
+      yamlCodes[uniqueNameSuffix] = ErrorCodeInfo(
+              sharedName: uniqueNameSuffix == name ? null : name,
+              problemMessage: code.problemMessage,
+              correctionMessage: code.correctionMessage,
+              isUnresolvedIdentifier: code.isUnresolvedIdentifier,
+              hasPublishedDocs: code.hasPublishedDocs,
+              comment: documentationComment,
+              documentation: otherComment)
+          .toYaml();
     }
   }
   String encodedYaml = _encodeYaml(yaml);
diff --git a/pkg/analyzer/tool/messages/generate.dart b/pkg/analyzer/tool/messages/generate.dart
index 15c7f35..93b703b 100644
--- a/pkg/analyzer/tool/messages/generate.dart
+++ b/pkg/analyzer/tool/messages/generate.dart
@@ -21,7 +21,6 @@
 import 'package:analyzer_utilities/package_root.dart' as pkg_root;
 import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
-import 'package:yaml/yaml.dart' show loadYaml;
 
 import 'error_code_info.dart';
 
@@ -29,106 +28,18 @@
   await GeneratedContent.generateAll(analyzerPkgPath, allTargets);
 
   _SyntacticErrorGenerator()
-    ..generateFormatCode()
     ..checkForManualChanges()
     ..printSummary();
 }
 
-/// Information about all the classes derived from `ErrorCode` that should be
-/// generated.
-const List<_ErrorClassInfo> _errorClasses = [
-  _ErrorClassInfo(
-      filePath: 'lib/src/analysis_options/error/option_codes.g.dart',
-      name: 'AnalysisOptionsErrorCode',
-      type: 'COMPILE_TIME_ERROR',
-      severity: 'ERROR'),
-  _ErrorClassInfo(
-      filePath: 'lib/src/analysis_options/error/option_codes.g.dart',
-      name: 'AnalysisOptionsHintCode',
-      type: 'HINT',
-      severity: 'INFO'),
-  _ErrorClassInfo(
-      filePath: 'lib/src/analysis_options/error/option_codes.g.dart',
-      name: 'AnalysisOptionsWarningCode',
-      type: 'STATIC_WARNING',
-      severity: 'WARNING'),
-  _ErrorClassInfo(
-      filePath: 'lib/src/error/codes.g.dart',
-      name: 'CompileTimeErrorCode',
-      superclass: 'AnalyzerErrorCode',
-      type: 'COMPILE_TIME_ERROR',
-      extraImports: ['package:analyzer/src/error/analyzer_error_code.dart']),
-  _ErrorClassInfo(
-      filePath: 'lib/src/error/codes.g.dart',
-      name: 'LanguageCode',
-      type: 'COMPILE_TIME_ERROR'),
-  _ErrorClassInfo(
-      filePath: 'lib/src/error/codes.g.dart',
-      name: 'StaticWarningCode',
-      superclass: 'AnalyzerErrorCode',
-      type: 'STATIC_WARNING',
-      severity: 'WARNING',
-      extraImports: ['package:analyzer/src/error/analyzer_error_code.dart']),
-  _ErrorClassInfo(
-      filePath: 'lib/src/dart/error/ffi_code.g.dart',
-      name: 'FfiCode',
-      superclass: 'AnalyzerErrorCode',
-      type: 'COMPILE_TIME_ERROR',
-      extraImports: ['package:analyzer/src/error/analyzer_error_code.dart']),
-  _ErrorClassInfo(
-      filePath: 'lib/src/dart/error/hint_codes.g.dart',
-      name: 'HintCode',
-      superclass: 'AnalyzerErrorCode',
-      type: 'HINT',
-      extraImports: ['package:analyzer/src/error/analyzer_error_code.dart']),
-  _ErrorClassInfo(
-      // TODO(paulberry): merge with `syntactic_errors.g.dart`.
-      filePath: 'lib/src/dart/error/syntactic_errors.analyzer.g.dart',
-      name: 'ParserErrorCode',
-      type: 'SYNTACTIC_ERROR',
-      severity: 'ERROR',
-      includeCfeMessages: true),
-  _ErrorClassInfo(
-      filePath: 'lib/src/manifest/manifest_warning_code.g.dart',
-      name: 'ManifestWarningCode',
-      type: 'STATIC_WARNING',
-      severity: 'WARNING'),
-  _ErrorClassInfo(
-      filePath: 'lib/src/pubspec/pubspec_warning_code.g.dart',
-      name: 'PubspecWarningCode',
-      type: 'STATIC_WARNING',
-      severity: 'WARNING'),
-];
-
 /// A list of all targets generated by this code generator.
-final List<GeneratedContent> allTargets = <GeneratedContent>[
-  GeneratedFile('lib/src/dart/error/syntactic_errors.g.dart',
-      (String pkgPath) async {
-    final codeGenerator = _SyntacticErrorGenerator();
-
-    codeGenerator.generateFormatCode();
-    return codeGenerator.out.toString();
-  }),
-  ..._analyzerGeneratedFiles(),
-];
-
-/// The path to the `analyzer` package.
-final String analyzerPkgPath =
-    normalize(join(pkg_root.packageRoot, 'analyzer'));
-
-/// The path to the `front_end` package.
-final String frontEndPkgPath =
-    normalize(join(pkg_root.packageRoot, 'front_end'));
-
-/// Decoded messages from the anlayzer's `messages.yaml` file.
-final Map<String, Map<String, ErrorCodeInfo>> _analyzerMessages =
-    _loadAnalyzerMessages();
+final List<GeneratedContent> allTargets = _analyzerGeneratedFiles();
 
 /// Generates a list of [GeneratedContent] objects describing all the analyzer
 /// files that need to be generated.
 List<GeneratedContent> _analyzerGeneratedFiles() {
-  var classesByFile = <String, List<_ErrorClassInfo>>{};
-  for (var errorClassInfo in _errorClasses) {
+  var classesByFile = <String, List<ErrorClassInfo>>{};
+  for (var errorClassInfo in errorClasses) {
     (classesByFile[errorClassInfo.filePath] ??= []).add(errorClassInfo);
   }
   return [
@@ -141,16 +52,9 @@
   ];
 }
 
-/// Loads analyzer messages from the analyzer's `messages.yaml` file.
-Map<String, Map<String, ErrorCodeInfo>> _loadAnalyzerMessages() {
-  Map<dynamic, dynamic> messagesYaml =
-      loadYaml(File(join(analyzerPkgPath, 'messages.yaml')).readAsStringSync());
-  return decodeAnalyzerMessagesYaml(messagesYaml);
-}
-
 /// Code generator for analyzer error classes.
 class _AnalyzerErrorGenerator {
-  final List<_ErrorClassInfo> errorClasses;
+  final List<ErrorClassInfo> errorClasses;
   final out = StringBuffer('''
 // Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -166,60 +70,59 @@
 
   void generate() {
     var imports = {'package:analyzer/error/error.dart'};
-    var parts = <String>{};
+    bool shouldGenerateFastaAnalyzerErrorCodes = false;
     for (var errorClass in errorClasses) {
       imports.addAll(errorClass.extraImports);
       if (errorClass.includeCfeMessages) {
-        parts.add('syntactic_errors.g.dart');
+        shouldGenerateFastaAnalyzerErrorCodes = true;
       }
     }
     out.writeln();
     for (var importPath in imports.toList()..sort()) {
       out.writeln("import ${json.encode(importPath)};");
     }
-    if (parts.isNotEmpty) {
-      out.writeln();
-      for (var partPath in parts.toList()..sort()) {
-        out.writeln("part ${json.encode(partPath)};");
-      }
-    }
     out.writeln();
     out.writeln("// It is hard to visually separate each code's _doc comment_ "
         "from its published");
     out.writeln('// _documentation comment_ when each is written as an '
         'end-of-line comment.');
     out.writeln('// ignore_for_file: slash_for_doc_comments');
+    if (shouldGenerateFastaAnalyzerErrorCodes) {
+      out.writeln();
+      _generateFastaAnalyzerErrorCodeList();
+    }
     for (var errorClass in errorClasses.toList()
       ..sort((a, b) => a.name.compareTo(b.name))) {
       out.writeln();
       out.write('class ${errorClass.name} extends ${errorClass.superclass} {');
-      for (var entry in _analyzerMessages[errorClass.name]!.entries.toList()
-        ..sort((a, b) => a.key.compareTo(b.key))) {
+      var entries = [
+        ...analyzerMessages[errorClass.name]!.entries,
+        if (errorClass.includeCfeMessages)
+          ...cfeToAnalyzerErrorCodeTables.analyzerCodeToInfo.entries
+      ];
+      for (var entry in entries..sort((a, b) => a.key.compareTo(b.key))) {
         var errorName = entry.key;
         var errorCodeInfo = entry.value;
         out.writeln();
         out.write(errorCodeInfo.toAnalyzerComments(indent: '  '));
         out.writeln('  static const ${errorClass.name} $errorName =');
-        if (errorCodeInfo.copyFromCfe) {
-          out.writeln('  _$errorName;');
-        } else {
-          out.writeln(errorCodeInfo.toAnalyzerCode(errorClass.name, errorName));
-        }
+        out.writeln(errorCodeInfo.toAnalyzerCode(errorClass.name, errorName));
       }
       out.writeln();
       out.writeln('/// Initialize a newly created error code to have the given '
           '[name].');
-      out.writeln('const ${errorClass.name}(String name, String message, {');
-      out.writeln('String? correction,');
+      out.writeln(
+          'const ${errorClass.name}(String name, String problemMessage, {');
+      out.writeln('String? correctionMessage,');
       out.writeln('bool hasPublishedDocs = false,');
       out.writeln('bool isUnresolvedIdentifier = false,');
       out.writeln('String? uniqueName,');
       out.writeln('}) : super(');
-      out.writeln('correction: correction,');
+      out.writeln('correctionMessage: correctionMessage,');
       out.writeln('hasPublishedDocs: hasPublishedDocs,');
       out.writeln('isUnresolvedIdentifier: isUnresolvedIdentifier,');
-      out.writeln('message: message,');
       out.writeln('name: name,');
+      out.writeln('problemMessage: problemMessage,');
       out.writeln("uniqueName: '${errorClass.name}.\${uniqueName ?? name}',");
       out.writeln(');');
       out.writeln();
@@ -232,70 +135,25 @@
       out.writeln('}');
     }
   }
-}
 
-class _ErrorClassInfo {
-  final List<String> extraImports;
-
-  final String filePath;
-
-  final bool includeCfeMessages;
-
-  final String name;
-
-  final String? severity;
-
-  final String superclass;
-
-  final String type;
-
-  const _ErrorClassInfo(
-      {this.extraImports = const [],
-      required this.filePath,
-      this.includeCfeMessages = false,
-      required this.name,
-      this.severity,
-      this.superclass = 'ErrorCode',
-      required this.type});
-
-  String get severityCode {
-    var severity = this.severity;
-    if (severity == null) {
-      return '$typeCode.severity';
-    } else {
-      return 'ErrorSeverity.$severity';
+  void _generateFastaAnalyzerErrorCodeList() {
+    out.writeln('final fastaAnalyzerErrorCodes = <ErrorCode?>[');
+    for (var entry in cfeToAnalyzerErrorCodeTables.indexToInfo) {
+      var name = cfeToAnalyzerErrorCodeTables.infoToAnalyzerCode[entry];
+      out.writeln('${name == null ? 'null' : 'ParserErrorCode.$name'},');
     }
+    out.writeln('];');
   }
-
-  String get typeCode => 'ErrorType.$type';
 }
 
 class _SyntacticErrorGenerator {
-  final Map<String, ErrorCodeInfo> cfeMessages;
-  final CfeToAnalyzerErrorCodeTables tables;
-  final Map<String, Map<String, ErrorCodeInfo>> analyzerMessages;
   final String errorConverterSource;
   final String parserSource;
-  final out = StringBuffer('''
-//
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/front_end/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
-
-part of 'syntactic_errors.analyzer.g.dart';
-
-''');
 
   factory _SyntacticErrorGenerator() {
-    String frontEndPkgPath = normalize(join(pkg_root.packageRoot, 'front_end'));
     String frontEndSharedPkgPath =
         normalize(join(pkg_root.packageRoot, '_fe_analyzer_shared'));
 
-    Map<dynamic, dynamic> cfeMessagesYaml = loadYaml(
-        File(join(frontEndPkgPath, 'messages.yaml')).readAsStringSync());
-    Map<dynamic, dynamic> analyzerMessagesYaml = loadYaml(
-        File(join(analyzerPkgPath, 'messages.yaml')).readAsStringSync());
     String errorConverterSource = File(join(analyzerPkgPath,
             joinAll(posix.split('lib/src/fasta/error_converter.dart'))))
         .readAsStringSync();
@@ -303,22 +161,17 @@
             joinAll(posix.split('lib/src/parser/parser.dart'))))
         .readAsStringSync();
 
-    return _SyntacticErrorGenerator._(
-        decodeCfeMessagesYaml(cfeMessagesYaml),
-        decodeAnalyzerMessagesYaml(analyzerMessagesYaml),
-        errorConverterSource,
-        parserSource);
+    return _SyntacticErrorGenerator._(errorConverterSource, parserSource);
   }
 
-  _SyntacticErrorGenerator._(this.cfeMessages, this.analyzerMessages,
-      this.errorConverterSource, this.parserSource)
-      : tables = CfeToAnalyzerErrorCodeTables(cfeMessages);
+  _SyntacticErrorGenerator._(this.errorConverterSource, this.parserSource);
 
   void checkForManualChanges() {
     // Check for ParserErrorCodes that could be removed from
     // error_converter.dart now that those ParserErrorCodes are auto generated.
     int converterCount = 0;
-    for (var errorCode in tables.infoToAnalyzerCode.values) {
+    for (var errorCode
+        in cfeToAnalyzerErrorCodeTables.infoToAnalyzerCode.values) {
       if (errorConverterSource.contains('"$errorCode"')) {
         if (converterCount == 0) {
           print('');
@@ -341,60 +194,35 @@
     }
   }
 
-  void generateErrorCodes() {
-    final entryMap = tables.analyzerCodeToInfo;
-    for (var errorCode in entryMap.keys.toList()..sort()) {
-      final entry = entryMap[errorCode]!;
-      final className = 'ParserErrorCode';
-      out.writeln();
-      out.writeln('const $className _$errorCode =');
-      out.writeln(entry.toAnalyzerCode(className, errorCode));
-    }
-  }
-
-  void generateFastaAnalyzerErrorCodeList() {
-    out.writeln('final fastaAnalyzerErrorCodes = <ErrorCode?>[');
-    for (var entry in tables.indexToInfo) {
-      var name = tables.infoToAnalyzerCode[entry];
-      out.writeln('${name == null ? 'null' : '_$name'},');
-    }
-    out.writeln('];');
-  }
-
-  void generateFormatCode() {
-    generateFastaAnalyzerErrorCodeList();
-    generateErrorCodes();
-  }
-
   void printSummary() {
     // Build a map of error message to ParserErrorCode
     final messageToName = <String, String>{};
     for (var entry in analyzerMessages['ParserErrorCode']!.entries) {
-      if (entry.value.copyFromCfe) continue;
       String message =
-          entry.value.problemMessage!.replaceAll(RegExp(r'\{\d+\}'), '');
+          entry.value.problemMessage.replaceAll(RegExp(r'\{\d+\}'), '');
       messageToName[message] = entry.key;
     }
 
     String messageFromEntryTemplate(ErrorCodeInfo entry) {
-      String problemMessage = entry.problemMessage!;
+      String problemMessage = entry.problemMessage;
       String message = problemMessage.replaceAll(RegExp(r'#\w+'), '');
       return message;
     }
 
     // Remove entries that have already been translated
-    for (ErrorCodeInfo entry in tables.infoToAnalyzerCode.keys) {
+    for (ErrorCodeInfo entry
+        in cfeToAnalyzerErrorCodeTables.infoToAnalyzerCode.keys) {
       messageToName.remove(messageFromEntryTemplate(entry));
     }
 
     // Print the # of autogenerated ParserErrorCodes.
-    print('${tables.infoToAnalyzerCode.length} of '
+    print('${cfeToAnalyzerErrorCodeTables.infoToAnalyzerCode.length} of '
         '${messageToName.length} ParserErrorCodes generated.');
 
     // List the ParserErrorCodes that could easily be auto generated
     // but have not been already.
     final analyzerToFasta = <String, List<String>>{};
-    cfeMessages.forEach((fastaName, entry) {
+    frontEndMessages.forEach((fastaName, entry) {
       final analyzerName = messageToName[messageFromEntryTemplate(entry)];
       if (analyzerName != null) {
         analyzerToFasta
@@ -435,7 +263,8 @@
           }
         }
         if (fastaErrorCode != null &&
-            tables.frontEndCodeToInfo[fastaErrorCode] == null) {
+            cfeToAnalyzerErrorCodeTables.frontEndCodeToInfo[fastaErrorCode] ==
+                null) {
           untranslatedFastaErrorCodes.add(fastaErrorCode);
         }
       }
@@ -448,12 +277,12 @@
       for (String fastaErrorCode in sorted) {
         String analyzerCode = '';
         String problemMessage = '';
-        var entry = cfeMessages[fastaErrorCode];
+        var entry = frontEndMessages[fastaErrorCode];
         if (entry != null) {
           // TODO(paulberry): handle multiple analyzer codes
           if (entry.index == null && entry.analyzerCode.length == 1) {
             analyzerCode = entry.analyzerCode.single;
-            problemMessage = entry.problemMessage!;
+            problemMessage = entry.problemMessage;
           }
         }
         print('  ${fastaErrorCode.padRight(30)} --> $analyzerCode'
diff --git a/pkg/analyzer/tool/messages/generate_test.dart b/pkg/analyzer/tool/messages/generate_test.dart
index 462df57..02a43cf 100644
--- a/pkg/analyzer/tool/messages/generate_test.dart
+++ b/pkg/analyzer/tool/messages/generate_test.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
 
+import 'error_code_info.dart';
 import 'generate.dart';
 
 main() async {
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index a4fc1ce..b18c095 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -485,7 +485,7 @@
   void _generateToBuffer() {
     if (cls.isTopLevel) {
       out();
-      out('List<int> toBuffer() {');
+      out('typed_data.Uint8List toBuffer() {');
       indent(() {
         out('fb.Builder fbBuilder = fb.Builder();');
         var idOrNull = cls.fileIdentifier;
@@ -658,6 +658,7 @@
     out('library analyzer.src.summary.format;');
     out();
     out("import 'dart:convert' as convert;");
+    out("import 'dart:typed_data' as typed_data;");
     out();
     out("import 'package:analyzer/src/summary/api_signature.dart' as api_sig;");
     out("import 'package:analyzer/src/summary/flat_buffers.dart' as fb;");
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index b7ded86..928fbf4 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -261,7 +261,7 @@
   }
 
   @override
-  void endClassOrMixinBody(
+  void endClassOrMixinOrExtensionBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
     debugEvent("ClassOrMixinBody");
     push(popList(memberCount,
@@ -582,7 +582,7 @@
 
   @override
   internalProblem(Message message, int charOffset, Uri? uri) {
-    throw UnsupportedError(message.message);
+    throw UnsupportedError(message.problemMessage);
   }
 
   List? popList(int n, List list) {
diff --git a/pkg/analyzer_cli/lib/src/analyzer_impl.dart b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
index 1b1e423..4b3846b 100644
--- a/pkg/analyzer_cli/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
@@ -113,7 +113,7 @@
   /// Fills [errorsResults] using [files].
   Future<void> prepareErrors() async {
     for (var path in files) {
-      var errorsResult = await analysisDriver.getErrors2(path);
+      var errorsResult = await analysisDriver.getErrors(path);
       if (errorsResult is ErrorsResult) {
         errorsResults.add(errorsResult);
       }
@@ -209,7 +209,7 @@
     var libraryPath = libraryFile.path;
     analysisDriver.priorityFiles = [libraryPath];
     var elementResult =
-        await analysisDriver.getUnitElement2(libraryPath) as UnitElementResult;
+        await analysisDriver.getUnitElement(libraryPath) as UnitElementResult;
     return elementResult.element.library;
   }
 
diff --git a/pkg/analyzer_cli/lib/src/error_formatter.dart b/pkg/analyzer_cli/lib/src/error_formatter.dart
index 16a2732..f496762 100644
--- a/pkg/analyzer_cli/lib/src/error_formatter.dart
+++ b/pkg/analyzer_cli/lib/src/error_formatter.dart
@@ -312,7 +312,7 @@
     for (var message in error.contextMessages) {
       var session = result.session.analysisContext;
       if (session is DriverBasedAnalysisContext) {
-        var fileResult = session.driver.getFileSync2(message.filePath);
+        var fileResult = session.driver.getFileSync(message.filePath);
         if (fileResult is FileResult) {
           var lineInfo = fileResult?.lineInfo;
           var location = lineInfo.getLocation(message.offset);
diff --git a/pkg/analyzer_cli/pubspec.yaml b/pkg/analyzer_cli/pubspec.yaml
index 466e477..5297838 100644
--- a/pkg/analyzer_cli/pubspec.yaml
+++ b/pkg/analyzer_cli/pubspec.yaml
@@ -8,17 +8,21 @@
   sdk: "^2.7.0"
 
 dependencies:
-  analyzer:
-    path: ../analyzer
-  args: '>=0.13.0 <2.0.0'
-  linter: ^0.1.16
-  meta:
-    path: ../meta
+  analyzer: any
+  args: any
+  linter: ^1.0.0
+  meta: any
   path: any
-  pub_semver: ^1.4.2
+  pub_semver: ^2.0.0
   yaml: any
 
 dev_dependencies:
   lints: any
-  test_reflective_loader: ^0.1.8
+  test_reflective_loader: ^0.2.0
   test: ^1.0.0
+
+dependency_overrides:
+  analyzer:
+    path: ../analyzer
+  meta:
+    path: ../meta
diff --git a/pkg/analyzer_cli/test/mocks.dart b/pkg/analyzer_cli/test/mocks.dart
index 70fd581..405448e 100644
--- a/pkg/analyzer_cli/test/mocks.dart
+++ b/pkg/analyzer_cli/test/mocks.dart
@@ -92,7 +92,7 @@
   MockErrorCode(this.type, this.errorSeverity, this.name);
 
   @override
-  String get correction {
+  String get correctionMessage {
     throw StateError('Unexpected invocation of correction');
   }
 
@@ -106,7 +106,7 @@
   bool get isUnresolvedIdentifier => false;
 
   @override
-  String get message {
+  String get problemMessage {
     throw StateError('Unexpected invocation of message');
   }
 
@@ -114,6 +114,9 @@
   String get uniqueName {
     throw StateError('Unexpected invocation of uniqueName');
   }
+
+  @override
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
 
 class MockLineInfo implements LineInfo {
diff --git a/pkg/analyzer_plugin/doc/tutorial/navigation.md b/pkg/analyzer_plugin/doc/tutorial/navigation.md
index f9c83a6..5df5cdc 100644
--- a/pkg/analyzer_plugin/doc/tutorial/navigation.md
+++ b/pkg/analyzer_plugin/doc/tutorial/navigation.md
@@ -7,7 +7,7 @@
 
 Navigation information can be requested both by an `analysis.getNavigation`
 request and by a subscription. If the server has subscribed for navigation
-information in some set of files, the the plugin should send the information in
+information in some set of files, the plugin should send the information in
 an `analysis.navigation` notification whenever the information needs to be
 updated.
 
diff --git a/pkg/analyzer_plugin/lib/plugin/plugin.dart b/pkg/analyzer_plugin/lib/plugin/plugin.dart
index 14ede54..f56f362 100644
--- a/pkg/analyzer_plugin/lib/plugin/plugin.dart
+++ b/pkg/analyzer_plugin/lib/plugin/plugin.dart
@@ -161,7 +161,7 @@
       throw RequestFailure(
           RequestErrorFactory.pluginError('Failed to analyze $path', null));
     }
-    var result = await driver.getResult2(path);
+    var result = await driver.getResult(path);
     if (result is! ResolvedUnitResult) {
       // Return an error from the request.
       throw RequestFailure(
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
index 8348e13..434f6bf 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
@@ -612,6 +612,15 @@
   /// if the parameterName field is omitted.
   String? parameterType;
 
+  /// The index in the list of libraries that could be imported to make this
+  /// suggestion accessible in the file where completion was requested. The
+  /// server provides this list of libraries together with suggestions, so that
+  /// information about the library can be shared for multiple suggestions.
+  /// This field is omitted if the library is already imported, so that the
+  /// suggestion can be inserted as is, or if getSuggestions was used rather
+  /// than getSuggestions2.
+  int? libraryUriToImportIndex;
+
   CompletionSuggestion(
       this.kind,
       this.relevance,
@@ -635,7 +644,8 @@
       this.requiredParameterCount,
       this.hasNamedParameters,
       this.parameterName,
-      this.parameterType});
+      this.parameterType,
+      this.libraryUriToImportIndex});
 
   factory CompletionSuggestion.fromJson(
       JsonDecoder jsonDecoder, String jsonPath, Object? json) {
@@ -774,6 +784,12 @@
         parameterType = jsonDecoder.decodeString(
             jsonPath + '.parameterType', json['parameterType']);
       }
+      int? libraryUriToImportIndex;
+      if (json.containsKey('libraryUriToImportIndex')) {
+        libraryUriToImportIndex = jsonDecoder.decodeInt(
+            jsonPath + '.libraryUriToImportIndex',
+            json['libraryUriToImportIndex']);
+      }
       return CompletionSuggestion(kind, relevance, completion, selectionOffset,
           selectionLength, isDeprecated, isPotential,
           displayText: displayText,
@@ -791,7 +807,8 @@
           requiredParameterCount: requiredParameterCount,
           hasNamedParameters: hasNamedParameters,
           parameterName: parameterName,
-          parameterType: parameterType);
+          parameterType: parameterType,
+          libraryUriToImportIndex: libraryUriToImportIndex);
     } else {
       throw jsonDecoder.mismatch(jsonPath, 'CompletionSuggestion', json);
     }
@@ -871,6 +888,10 @@
     if (parameterType != null) {
       result['parameterType'] = parameterType;
     }
+    var libraryUriToImportIndex = this.libraryUriToImportIndex;
+    if (libraryUriToImportIndex != null) {
+      result['libraryUriToImportIndex'] = libraryUriToImportIndex;
+    }
     return result;
   }
 
@@ -905,7 +926,8 @@
           requiredParameterCount == other.requiredParameterCount &&
           hasNamedParameters == other.hasNamedParameters &&
           parameterName == other.parameterName &&
-          parameterType == other.parameterType;
+          parameterType == other.parameterType &&
+          libraryUriToImportIndex == other.libraryUriToImportIndex;
     }
     return false;
   }
@@ -935,6 +957,7 @@
         hasNamedParameters,
         parameterName,
         parameterType,
+        libraryUriToImportIndex,
       ]);
 }
 
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
index f4e26a0..2fe6603 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
@@ -251,6 +251,31 @@
         argIndex = _computeArgIndex(containingNode, entity),
         droppedToken = _computeDroppedToken(containingNode, entity, offset);
 
+  /// Return the expression to the left of the "dot" or "dot dot",
+  /// or `null` if this is not a "dot" completion (e.g. `{ foo^; }`).
+  Expression? get dotTarget {
+    var node = containingNode;
+    if (node is MethodInvocation) {
+      if (identical(node.methodName, entity)) {
+        return node.realTarget;
+      } else if (node.isCascaded && node.operator!.offset + 1 == offset) {
+        return node.realTarget;
+      }
+    }
+    if (node is PropertyAccess) {
+      if (identical(node.propertyName, entity)) {
+        return node.realTarget;
+      } else if (node.isCascaded && node.operator.offset + 1 == offset) {
+        return node.realTarget;
+      }
+    }
+    if (node is PrefixedIdentifier) {
+      if (identical(node.identifier, entity)) {
+        return node.prefix;
+      }
+    }
+  }
+
   /// If the target is an argument in an argument list, and the invocation is
   /// resolved, return the invoked [ExecutableElement].
   ExecutableElement? get executableElement {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index 95d5833..dea31e3 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -246,6 +246,7 @@
 
   @override
   void visitArgumentList(ArgumentList node) {
+    final entity = this.entity;
     var parent = node.parent;
     List<ParameterElement>? parameters;
     if (parent is InstanceCreationExpression) {
@@ -303,8 +304,10 @@
         } else {
           index = node.arguments.length - 1;
         }
+      } else if (entity is Expression) {
+        index = node.arguments.indexOf(entity);
       } else {
-        index = node.arguments.indexOf(entity as Expression);
+        return;
       }
       if (0 <= index && index < parameters.length) {
         var param = parameters[index];
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
index 185d382..a27010c 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
@@ -54,30 +54,7 @@
       DartCompletionRequest request, AstNode? entryPoint) {
     var target = CompletionTarget.forOffset(request.result.unit, request.offset,
         entryPoint: entryPoint);
-    var node = target.containingNode;
-    if (node is MethodInvocation) {
-      if (identical(node.methodName, target.entity)) {
-        return node.realTarget;
-      } else if (node.isCascaded) {
-        var operator = node.operator;
-        if (operator != null && operator.offset + 1 == target.offset) {
-          return node.realTarget;
-        }
-      }
-    }
-    if (node is PropertyAccess) {
-      if (identical(node.propertyName, target.entity)) {
-        return node.realTarget;
-      } else if (node.isCascaded && node.operator.offset + 1 == target.offset) {
-        return node.realTarget;
-      }
-    }
-    if (node is PrefixedIdentifier) {
-      if (identical(node.identifier, target.entity)) {
-        return node.prefix;
-      }
-    }
-    return null;
+    return target.dotTarget;
   }
 
   void _computeSuggestions(
diff --git a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
index bb1ed53..f49f000 100644
--- a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
+++ b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
@@ -164,7 +164,8 @@
           'requiredParameterCount': isInt,
           'hasNamedParameters': isBool,
           'parameterName': isString,
-          'parameterType': isString
+          'parameterType': isString,
+          'libraryUriToImportIndex': isInt
         }));
 
 /// CompletionSuggestionKind
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
index ba7d92f..0f66c92 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
@@ -240,6 +240,27 @@
         completionLocation: 'ArgumentList_constructor_named', namedArgs: true);
   }
 
+  Future<void> test_argumentList_inLineComment() async {
+    addTestSource('''
+void f() {
+  g(0, // ^
+  );
+}
+void g() {}
+''');
+    await assertOpType(/* No valid completions */);
+  }
+
+  Future<void> test_argumentList_inStarComment() async {
+    addTestSource('''
+void f() {
+  g(0, /*^*/);
+}
+void g() {}
+''');
+    await assertOpType(/* No valid completions */);
+  }
+
   Future<void> test_argumentList_method_resolved_1_0() async {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
     addTestSource('main() { foo(^);} foo({one, two}) {}');
diff --git a/pkg/analyzer_plugin/test/support/abstract_context.dart b/pkg/analyzer_plugin/test/support/abstract_context.dart
index 33577e7..426644f 100644
--- a/pkg/analyzer_plugin/test/support/abstract_context.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_context.dart
@@ -44,6 +44,8 @@
 
   List<String> get collectionIncludedPaths => [workspaceRootPath];
 
+  Folder get sdkRoot => newFolder('/sdk');
+
   AnalysisSession get session => contextFor(testPackageRootPath).currentSession;
 
   /// The file system-specific `analysis_options.yaml` path.
@@ -101,7 +103,10 @@
   }
 
   void setUp() {
-    MockSdk(resourceProvider: resourceProvider);
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
 
     newFolder(testPackageRootPath);
     writeTestPackageConfig();
@@ -156,7 +161,7 @@
       enableIndex: true,
       includedPaths: collectionIncludedPaths.map(convertPath).toList(),
       resourceProvider: resourceProvider,
-      sdkPath: convertPath('/sdk'),
+      sdkPath: sdkRoot.path,
     );
   }
 }
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index 6b5ada3..38487ab 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -35,14 +35,14 @@
     expect(pluginError, isNotNull);
     var location = pluginError.location;
     expect(pluginError.code, errorCode.name.toLowerCase());
-    expect(pluginError.correction, errorCode.correction);
+    expect(pluginError.correction, errorCode.correctionMessage);
     expect(location, isNotNull);
     expect(location.file, analyzerError.source.fullName);
     expect(location.length, analyzerError.length);
     expect(location.offset, analyzerError.offset);
     expect(location.startColumn, startColumn);
     expect(location.startLine, startLine);
-    expect(pluginError.message, errorCode.message);
+    expect(pluginError.message, errorCode.problemMessage);
     expect(pluginError.severity,
         converter.convertErrorSeverity(severity ?? errorCode.errorSeverity));
     expect(pluginError.type, converter.convertErrorType(errorCode.type));
@@ -238,7 +238,7 @@
     // create notification Element
     var element = converter.convertElement(engineElement);
     expect(element.kind, plugin.ElementKind.CONSTRUCTOR);
-    expect(element.name, 'myConstructor');
+    expect(element.name, 'A.myConstructor');
     expect(element.typeParameters, isNull);
     {
       var location = element.location!;
diff --git a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
index 78b64cb..e3ffd03 100644
--- a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
@@ -13,12 +13,175 @@
 
 void main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(RangeFactory_ArgumentRangeTest);
+    defineReflectiveTests(RangeFactory_NodeInListTest);
     defineReflectiveTests(RangeFactoryTest);
   });
 }
 
 @reflectiveTest
-class RangeFactoryTest extends AbstractSingleUnitTest {
+class RangeFactory_ArgumentRangeTest extends AbstractSingleUnitTest {
+  Future<void> test_all_mixed_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, c: 2);
+}
+void g(int a, int b, {int? c}) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 10), SourceRange(15, 10));
+  }
+
+  Future<void> test_all_mixed_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, c: 2, );
+}
+void g(int a, int b, {int? c}) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 12), SourceRange(15, 10));
+  }
+
+  Future<void> test_all_named_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 0, b: 1, c: 2);
+}
+void g({int? a, int? b, int? c}) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 16), SourceRange(15, 16));
+  }
+
+  Future<void> test_all_named_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 0, b: 1, c: 2, );
+}
+void g({int? a, int? b, int? c}) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 18), SourceRange(15, 16));
+  }
+
+  Future<void> test_all_positional_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, 2);
+}
+void g(int a, int b, int c) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 7), SourceRange(15, 7));
+  }
+
+  Future<void> test_all_positional_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, 2, );
+}
+void g(int a, int b, int c) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 9), SourceRange(15, 7));
+  }
+
+  Future<void> test_first_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1);
+}
+void g(int a, int b) {}
+''');
+    _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
+  }
+
+  Future<void> test_first_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, );
+}
+void g(int a, int b) {}
+''');
+    _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
+  }
+
+  Future<void> test_last_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1);
+}
+void g(int a, int b) {}
+''');
+    _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
+  }
+
+  Future<void> test_last_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, );
+}
+void g(int a, int b) {}
+''');
+    _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
+  }
+
+  Future<void> test_middle_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, 2, 3);
+}
+void g(int a, int b, int c, int d) {}
+''');
+    _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
+  }
+
+  Future<void> test_middle_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, 2, 3, );
+}
+void g(int a, int b, int c, int d) {}
+''');
+    _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
+  }
+
+  Future<void> test_only_named() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 0);
+}
+void g({int? a}) {}
+''');
+    _assertArgumentRange(0, 0, SourceRange(15, 4), SourceRange(15, 4));
+  }
+
+  Future<void> test_only_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(0);
+}
+void g(int a) {}
+''');
+    _assertArgumentRange(0, 0, SourceRange(15, 1), SourceRange(15, 1));
+  }
+
+  /// Assuming that the test code starts with a function whose block body starts
+  /// with a method invocation, compute the range for the arguments in the
+  /// invocation's argument list between [lower] and [upper]. Validate that the
+  /// range for deletion matches [expectedForDeletion] and that the range not
+  /// for deletion matches [expectedNoDeletion].
+  void _assertArgumentRange(int lower, int upper,
+      SourceRange expectedForDeletion, SourceRange expectedNoDeletion) {
+    var f = testUnit.declarations[0] as FunctionDeclaration;
+    var body = f.functionExpression.body as BlockFunctionBody;
+    var statement = body.block.statements[0] as ExpressionStatement;
+    var invocation = statement.expression as MethodInvocation;
+    var argumentList = invocation.argumentList;
+    expect(range.argumentRange(argumentList, lower, upper, true),
+        expectedForDeletion);
+    expect(range.argumentRange(argumentList, lower, upper, false),
+        expectedNoDeletion);
+  }
+}
+
+@reflectiveTest
+class RangeFactory_NodeInListTest extends AbstractSingleUnitTest {
   /// Assuming that the test code starts with a function whose block body starts
   /// with a method invocation, return the list of arguments in that invocation.
   NodeList<Expression> get _argumentList {
@@ -29,146 +192,119 @@
     return invocation.argumentList.arguments;
   }
 
-  Future<void> test_argumentRange_all_mixed_noTrailingComma() async {
+  Future<void> test_argumentList_first_named() async {
     await resolveTestCode('''
 void f() {
-  g(0, 1, c: 2);
+  g(a: 1, b: 2);
 }
-void g(int a, int b, {int? c}) {}
+void g({int? a, int? b}) {}
 ''');
-    _assertArgumentRange(0, 2, SourceRange(15, 10), SourceRange(15, 10));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 6));
   }
 
-  Future<void> test_argumentRange_all_mixed_trailingComma() async {
+  Future<void> test_argumentList_first_positional() async {
     await resolveTestCode('''
 void f() {
-  g(0, 1, c: 2, );
+  g(1, 2);
 }
-void g(int a, int b, {int? c}) {}
+void g(int a, int b) {}
 ''');
-    _assertArgumentRange(0, 2, SourceRange(15, 12), SourceRange(15, 10));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 3));
   }
 
-  Future<void> test_argumentRange_all_named_noTrailingComma() async {
+  Future<void> test_argumentList_last_named() async {
     await resolveTestCode('''
 void f() {
-  g(a: 0, b: 1, c: 2);
+  g(a: 1, b: 2);
+}
+void g({int? a, int? b}) {}
+''');
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
+  }
+
+  Future<void> test_argumentList_last_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(1, 2);
+}
+void g(int a, int b) {}
+''');
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
+  }
+
+  Future<void> test_argumentList_middle_named() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 1, b: 2, c: 3);
 }
 void g({int? a, int? b, int? c}) {}
 ''');
-    _assertArgumentRange(0, 2, SourceRange(15, 16), SourceRange(15, 16));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
   }
 
-  Future<void> test_argumentRange_all_named_trailingComma() async {
+  Future<void> test_argumentList_middle_positional() async {
     await resolveTestCode('''
 void f() {
-  g(a: 0, b: 1, c: 2, );
-}
-void g({int? a, int? b, int? c}) {}
-''');
-    _assertArgumentRange(0, 2, SourceRange(15, 18), SourceRange(15, 16));
-  }
-
-  Future<void> test_argumentRange_all_positional_noTrailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, 2);
+  g(1, 2, 3);
 }
 void g(int a, int b, int c) {}
 ''');
-    _assertArgumentRange(0, 2, SourceRange(15, 7), SourceRange(15, 7));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
   }
 
-  Future<void> test_argumentRange_all_positional_trailingComma() async {
+  Future<void> test_argumentList_only_named() async {
     await resolveTestCode('''
 void f() {
-  g(0, 1, 2, );
-}
-void g(int a, int b, int c) {}
-''');
-    _assertArgumentRange(0, 2, SourceRange(15, 9), SourceRange(15, 7));
-  }
-
-  Future<void> test_argumentRange_first_noTrailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1);
-}
-void g(int a, int b) {}
-''');
-    _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
-  }
-
-  Future<void> test_argumentRange_first_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, );
-}
-void g(int a, int b) {}
-''');
-    _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
-  }
-
-  Future<void> test_argumentRange_last_noTrailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1);
-}
-void g(int a, int b) {}
-''');
-    _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
-  }
-
-  Future<void> test_argumentRange_last_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, );
-}
-void g(int a, int b) {}
-''');
-    _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
-  }
-
-  Future<void> test_argumentRange_middle_noTrailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, 2, 3);
-}
-void g(int a, int b, int c, int d) {}
-''');
-    _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
-  }
-
-  Future<void> test_argumentRange_middle_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, 2, 3, );
-}
-void g(int a, int b, int c, int d) {}
-''');
-    _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
-  }
-
-  Future<void> test_argumentRange_only_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 0);
+  g(a: 1);
 }
 void g({int? a}) {}
 ''');
-    _assertArgumentRange(0, 0, SourceRange(15, 4), SourceRange(15, 4));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 4));
   }
 
-  Future<void> test_argumentRange_only_positional() async {
+  Future<void> test_argumentList_only_named_trailingComma() async {
     await resolveTestCode('''
 void f() {
-  g(0);
+  g(a: 1,);
+}
+void g({int? a}) {}
+''');
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 5));
+  }
+
+  Future<void> test_argumentList_only_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(1);
 }
 void g(int a) {}
 ''');
-    _assertArgumentRange(0, 0, SourceRange(15, 1), SourceRange(15, 1));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 1));
   }
 
+  Future<void> test_argumentList_only_positional_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(1,);
+}
+void g(int a) {}
+''');
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 2));
+  }
+}
+
+@reflectiveTest
+class RangeFactoryTest extends AbstractSingleUnitTest {
   Future<void> test_elementName() async {
     await resolveTestCode('class ABC {}');
     var element = findElement.class_('ABC');
@@ -215,117 +351,6 @@
     expect(range.node(mainName), SourceRange(0, 4));
   }
 
-  Future<void> test_nodeInList_argumentList_first_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1, b: 2);
-}
-void g({int? a, int? b}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 6));
-  }
-
-  Future<void> test_nodeInList_argumentList_first_positional() async {
-    await resolveTestCode('''
-void f() {
-  g(1, 2);
-}
-void g(int a, int b) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 3));
-  }
-
-  Future<void> test_nodeInList_argumentList_last_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1, b: 2);
-}
-void g({int? a, int? b}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
-  }
-
-  Future<void> test_nodeInList_argumentList_last_positional() async {
-    await resolveTestCode('''
-void f() {
-  g(1, 2);
-}
-void g(int a, int b) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
-  }
-
-  Future<void> test_nodeInList_argumentList_middle_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1, b: 2, c: 3);
-}
-void g({int? a, int? b, int? c}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
-  }
-
-  Future<void> test_nodeInList_argumentList_middle_positional() async {
-    await resolveTestCode('''
-void f() {
-  g(1, 2, 3);
-}
-void g(int a, int b, int c) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
-  }
-
-  Future<void> test_nodeInList_argumentList_only_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1);
-}
-void g({int? a}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 4));
-  }
-
-  Future<void> test_nodeInList_argumentList_only_named_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1,);
-}
-void g({int? a}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 5));
-  }
-
-  Future<void> test_nodeInList_argumentList_only_positional() async {
-    await resolveTestCode('''
-void f() {
-  g(1);
-}
-void g(int a) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 1));
-  }
-
-  Future<void>
-      test_nodeInList_argumentList_only_positional_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(1,);
-}
-void g(int a) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 2));
-  }
-
   Future<void> test_nodes() async {
     await resolveTestCode(' main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
@@ -376,22 +401,4 @@
     var mainName = mainFunction.name;
     expect(range.token(mainName.beginToken), SourceRange(1, 4));
   }
-
-  /// Assuming that the test code starts with a function whose block body starts
-  /// with a method invocation, compute the range for the arguments in the
-  /// invocation's argument list between [lower] and [upper]. Validate that the
-  /// range for deletion matches [expectedForDeletion] and that the range not
-  /// for deletion matches [expectedNoDeletion].
-  void _assertArgumentRange(int lower, int upper,
-      SourceRange expectedForDeletion, SourceRange expectedNoDeletion) {
-    var f = testUnit.declarations[0] as FunctionDeclaration;
-    var body = f.functionExpression.body as BlockFunctionBody;
-    var statement = body.block.statements[0] as ExpressionStatement;
-    var invocation = statement.expression as MethodInvocation;
-    var argumentList = invocation.argumentList;
-    expect(range.argumentRange(argumentList, lower, upper, true),
-        expectedForDeletion);
-    expect(range.argumentRange(argumentList, lower, upper, false),
-        expectedNoDeletion);
-  }
 }
diff --git a/pkg/analyzer_plugin/tool/spec/common_types_spec.html b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
index bb13ac5..00b5663 100644
--- a/pkg/analyzer_plugin/tool/spec/common_types_spec.html
+++ b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
@@ -380,6 +380,18 @@
           omitted if the parameterName field is omitted.
         </p>
       </field>
+      <field name="libraryUriToImportIndex" experimental="true" optional="true">
+        <ref>int</ref>
+        <p>
+          The index in the list of libraries that could be imported to make
+          this suggestion accessible in the file where completion was requested.
+          The server provides this list of libraries together with suggestions,
+          so that information about the library can be shared for multiple
+          suggestions. This field is omitted if the library is  already
+          imported, so that the suggestion can be inserted as is, or if
+          <tt>getSuggestions</tt> was used rather than <tt>getSuggestions2</tt>.
+        </p>
+      </field>
     </object>
   </type>
   <type name="CompletionSuggestionKind">
diff --git a/pkg/analyzer_plugin/tool/spec/from_html.dart b/pkg/analyzer_plugin/tool/spec/from_html.dart
index cd144a9..53dc875 100644
--- a/pkg/analyzer_plugin/tool/spec/from_html.dart
+++ b/pkg/analyzer_plugin/tool/spec/from_html.dart
@@ -478,11 +478,22 @@
   /// Child elements can occur in any order.
   TypeObjectField typeObjectFieldFromHtml(dom.Element html, String context) {
     checkName(html, 'field', context);
+
     var name = html.attributes['name'];
-    context = '$context.${name ?? 'field'}';
+    if (name == null) {
+      throw Exception('$context: name not specified');
+    }
+
+    context = '$context.$name';
     checkAttributes(html, ['name'], context,
-        optionalAttributes: ['optional', 'value', 'deprecated']);
+        optionalAttributes: [
+          'optional',
+          'value',
+          'deprecated',
+          'experimental'
+        ]);
     var deprecated = html.attributes['deprecated'] == 'true';
+    var experimental = html.attributes['experimental'] == 'true';
     var optional = false;
     var optionalString = html.attributes['optional'];
     if (optionalString != null) {
@@ -500,8 +511,11 @@
     }
     var value = html.attributes['value'];
     var type = processContentsAsType(html, context);
-    return TypeObjectField(name!, type, html,
-        optional: optional, value: value, deprecated: deprecated);
+    return TypeObjectField(name, type, html,
+        optional: optional,
+        value: value,
+        deprecated: deprecated,
+        experimental: experimental);
   }
 
   /// Create a [TypeObject] from an HTML description.
diff --git a/pkg/analyzer_plugin/tool/spec/to_html.dart b/pkg/analyzer_plugin/tool/spec/to_html.dart
index 52fbdbe..852a05f 100644
--- a/pkg/analyzer_plugin/tool/spec/to_html.dart
+++ b/pkg/analyzer_plugin/tool/spec/to_html.dart
@@ -644,6 +644,9 @@
 
   @override
   void visitTypeObjectField(TypeObjectField typeObjectField) {
+    if (typeObjectField.experimental) {
+      return;
+    }
     dt('field', () {
       b(() {
         if (typeObjectField.deprecated) {
@@ -748,6 +751,7 @@
     writeln('{');
     indent(() {
       for (var field in typeObject.fields) {
+        if (field.experimental) continue;
         write('"');
         final fieldsToBold = this.fieldsToBold;
         if (fieldsToBold != null && fieldsToBold.contains(field.name)) {
diff --git a/pkg/analyzer_utilities/lib/tools.dart b/pkg/analyzer_utilities/lib/tools.dart
index abb3375..a072d85 100644
--- a/pkg/analyzer_utilities/lib/tools.dart
+++ b/pkg/analyzer_utilities/lib/tools.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer_utilities/text_formatter.dart';
 import 'package:html/dom.dart' as dom;
 import 'package:path/path.dart';
+import 'package:test/test.dart';
 
 final RegExp trailingSpacesInLineRegExp = RegExp(r' +$', multiLine: true);
 final RegExp trailingWhitespaceRegExp = RegExp(r'[\n ]+$');
@@ -290,7 +291,7 @@
       }
       var generateScript = normalize(joinAll(posix.split(generatorPath)));
       print('  $executable$packageRoot $generateScript ${args.join(" ")}');
-      exit(1);
+      fail('Error codes need to be generated');
     } else {
       print('All generated files up to date.');
     }
diff --git a/pkg/compiler/lib/compiler.dart b/pkg/compiler/lib/compiler.dart
index 63cad0a..b3e8552 100644
--- a/pkg/compiler/lib/compiler.dart
+++ b/pkg/compiler/lib/compiler.dart
@@ -97,7 +97,7 @@
     Uri packageConfig]) {
   CompilerOptions compilerOptions = CompilerOptions.parse(options,
       librariesSpecificationUri: librariesSpecificationUri)
-    ..entryPoint = script
+    ..entryUri = script
     ..packageConfig = packageConfig
     ..environment = environment;
 
diff --git a/pkg/compiler/lib/compiler_new.dart b/pkg/compiler/lib/compiler_new.dart
index 77e4a0c..4b1d89f 100644
--- a/pkg/compiler/lib/compiler_new.dart
+++ b/pkg/compiler/lib/compiler_new.dart
@@ -190,7 +190,7 @@
 
   CompilerImpl compiler = new CompilerImpl(
       compilerInput, compilerOutput, compilerDiagnostics, compilerOptions);
-  return compiler.run(compilerOptions.entryPoint).then((bool success) {
+  return compiler.run().then((bool success) {
     return new CompilationResult(compiler,
         isSuccess: success,
         kernelInitializedCompilerState:
diff --git a/pkg/compiler/lib/src/apiimpl.dart b/pkg/compiler/lib/src/apiimpl.dart
index e5dbb72..c8aba18 100644
--- a/pkg/compiler/lib/src/apiimpl.dart
+++ b/pkg/compiler/lib/src/apiimpl.dart
@@ -89,11 +89,11 @@
   }
 
   @override
-  Future<bool> run(Uri uri) {
+  Future<bool> run() {
     Duration setupDuration = measurer.elapsedWallClock;
     return selfTask.measureSubtask("impl.run", () {
       return setupSdk().then((_) {
-        return super.run(uri);
+        return super.run();
       }).then((bool success) {
         if (options.verbose) {
           StringBuffer timings = StringBuffer();
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 09293fc..8737b26 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -8,6 +8,12 @@
 
 /// Commandline flags used in `dart2js.dart` and/or `apiimpl.dart`.
 class Flags {
+  // The uri of the main script file.
+  static const String entryUri = '--entry-uri';
+
+  // The uri of the main input dill.
+  static const String inputDill = '--input-dill';
+
   static const String allowMockCompilation = '--allow-mock-compilation';
   static const String allowNativeExtensions = '--allow-native-extensions';
   static const String disableInlining = '--disable-inlining';
@@ -175,7 +181,7 @@
   // `--no-shipping` and `--canary` control sets of flags. For simplicity, these
   // flags live in options.dart.
   // Shipping features default to on, but can be disabled individually. All
-  // shipping features can be disabled with the the [noShipping] flag.
+  // shipping features can be disabled with the [noShipping] flag.
   static const String noShipping = '--no-shipping';
 
   // Canary features default to off, but can still be enabled individually. All
diff --git a/pkg/compiler/lib/src/common/names.dart b/pkg/compiler/lib/src/common/names.dart
index 74804d7..024be8a 100644
--- a/pkg/compiler/lib/src/common/names.dart
+++ b/pkg/compiler/lib/src/common/names.dart
@@ -224,9 +224,6 @@
   /// The URI for 'dart:web_gl'.
   static final Uri dart_web_gl = Uri(scheme: 'dart', path: 'web_gl');
 
-  /// The URI for 'dart:web_sql'.
-  static final Uri dart_web_sql = Uri(scheme: 'dart', path: 'web_sql');
-
   /// The URI for 'dart:_js_helper'.
   static final Uri dart__js_helper = Uri(scheme: 'dart', path: '_js_helper');
 
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 09b4aea..b899fbe 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -44,6 +44,7 @@
 import 'js_model/js_strategy.dart';
 import 'js_model/js_world.dart';
 import 'js_model/locals.dart';
+import 'kernel/front_end_adapter.dart' show CompilerFileSystem;
 import 'kernel/kernel_strategy.dart';
 import 'kernel/loader.dart' show KernelLoaderTask, KernelResult;
 import 'null_compiler_output.dart' show NullCompilerOutput;
@@ -90,6 +91,7 @@
 
   final List<CodeLocation> _userCodeLocations = <CodeLocation>[];
 
+  ir.Component componentForTesting;
   JClosedWorld backendClosedWorldForTesting;
   DataSourceIndices closedWorldIndicesForTesting;
 
@@ -218,16 +220,16 @@
   bool get disableTypeInference =>
       options.disableTypeInference || compilationFailed;
 
-  // Compiles the dart script at [uri].
+  // Compiles the dart program as specified in [options].
   //
   // The resulting future will complete with true if the compilation
   // succeeded.
-  Future<bool> run(Uri uri) => selfTask.measureSubtask("run", () {
+  Future<bool> run() => selfTask.measureSubtask("run", () {
         measurer.startWallClock();
 
-        return Future.sync(() => runInternal(uri))
+        return Future.sync(() => runInternal())
             .catchError((error, StackTrace stackTrace) =>
-                _reporter.onError(uri, error, stackTrace))
+                _reporter.onError(options.compilationTarget, error, stackTrace))
             .whenComplete(() {
           measurer.stopWallClock();
         }).then((_) {
@@ -245,15 +247,19 @@
     return options.readClosedWorldUri != null && options.readDataUri != null;
   }
 
-  Future runInternal(Uri uri) async {
+  Future runInternal() async {
     clearState();
-    assert(uri != null);
-    reporter.log('Compiling $uri (${options.buildId})');
+    var compilationTarget = options.compilationTarget;
+    assert(compilationTarget != null);
+    reporter.log('Compiling $compilationTarget (${options.buildId})');
 
     if (options.readProgramSplit != null) {
+      var constraintUri = options.readProgramSplit;
       var constraintParser = psc.Parser();
-      programSplitConstraintsData =
-          await constraintParser.read(provider, options.readProgramSplit);
+      var programSplitJson = await CompilerFileSystem(provider)
+          .entityForUri(constraintUri)
+          .readAsString();
+      programSplitConstraintsData = constraintParser.read(programSplitJson);
     }
 
     if (onlyPerformGlobalTypeInference) {
@@ -267,17 +273,19 @@
       }
       GlobalTypeInferenceResults globalTypeInferenceResults =
           performGlobalTypeInference(closedWorldAndIndices.closedWorld);
+      var indices = closedWorldAndIndices.indices;
       if (options.writeDataUri != null) {
         if (options.noClosedWorldInData) {
           serializationTask.serializeGlobalTypeInference(
-              globalTypeInferenceResults, closedWorldAndIndices.indices);
+              globalTypeInferenceResults, indices);
         } else {
           serializationTask
               .serializeGlobalTypeInferenceLegacy(globalTypeInferenceResults);
         }
         return;
       }
-      await generateJavaScriptCode(globalTypeInferenceResults);
+      await generateJavaScriptCode(globalTypeInferenceResults,
+          indices: indices);
     } else if (onlyPerformCodegen) {
       GlobalTypeInferenceResults globalTypeInferenceResults;
       ir.Component component =
@@ -291,7 +299,8 @@
               abstractValueStrategy,
               component,
               closedWorldAndIndices);
-      await generateJavaScriptCode(globalTypeInferenceResults);
+      await generateJavaScriptCode(globalTypeInferenceResults,
+          indices: closedWorldAndIndices.indices);
     } else if (options.readDataUri != null) {
       // TODO(joshualitt) delete and clean up after google3 roll
       var globalTypeInferenceResults =
@@ -299,12 +308,15 @@
               environment, abstractValueStrategy);
       await generateJavaScriptCode(globalTypeInferenceResults);
     } else {
-      KernelResult result = await kernelLoader.load(uri);
+      KernelResult result = await kernelLoader.load();
       reporter.log("Kernel load complete");
       if (result == null) return;
       if (compilationFailed) {
         return;
       }
+      if (retainDataForTesting) {
+        componentForTesting = result.component;
+      }
       if (options.cfeOnly) return;
 
       frontendStrategy.registerLoadedLibraries(result);
@@ -324,7 +336,8 @@
   }
 
   void generateJavaScriptCode(
-      GlobalTypeInferenceResults globalTypeInferenceResults) async {
+      GlobalTypeInferenceResults globalTypeInferenceResults,
+      {DataSourceIndices indices}) async {
     JClosedWorld closedWorld = globalTypeInferenceResults.closedWorld;
     backendStrategy.registerJClosedWorld(closedWorld);
     phase = PHASE_COMPILING;
@@ -333,8 +346,8 @@
 
     if (options.readCodegenUri != null) {
       CodegenResults codegenResults =
-          await serializationTask.deserializeCodegen(
-              backendStrategy, globalTypeInferenceResults, codegenInputs);
+          await serializationTask.deserializeCodegen(backendStrategy,
+              globalTypeInferenceResults, codegenInputs, indices);
       reporter.log('Compiling methods');
       runCodegenEnqueuer(codegenResults);
     } else {
@@ -344,7 +357,8 @@
           codegenInputs,
           backendStrategy.functionCompiler);
       if (options.writeCodegenUri != null) {
-        serializationTask.serializeCodegen(backendStrategy, codegenResults);
+        serializationTask.serializeCodegen(
+            backendStrategy, codegenResults, indices);
       } else {
         runCodegenEnqueuer(codegenResults);
       }
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 139ebfe..bd60c69 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -101,6 +101,8 @@
     {fe.InitializedCompilerState kernelInitializedCompilerState}) {
   Stopwatch wallclock = Stopwatch()..start();
   stackTraceFilePrefix = '${Uri.base}';
+  Uri entryUri;
+  Uri inputDillUri;
   Uri librariesSpecificationUri = Uri.base.resolve('lib/libraries.json');
   bool outputSpecified = false;
   Uri out;
@@ -145,13 +147,24 @@
     passThrough("--build-id=$BUILD_ID");
   }
 
+  Uri extractResolvedFileUri(String argument) {
+    return Uri.base.resolve(extractPath(argument, isDirectory: false));
+  }
+
+  void setEntryUri(String argument) {
+    entryUri = extractResolvedFileUri(argument);
+  }
+
+  void setInputDillUri(String argument) {
+    inputDillUri = extractResolvedFileUri(argument);
+  }
+
   void setLibrarySpecificationUri(String argument) {
-    librariesSpecificationUri =
-        Uri.base.resolve(extractPath(argument, isDirectory: false));
+    librariesSpecificationUri = extractResolvedFileUri(argument);
   }
 
   void setPackageConfig(String argument) {
-    packageConfig = Uri.base.resolve(extractPath(argument, isDirectory: false));
+    packageConfig = extractResolvedFileUri(argument);
   }
 
   void setOutput(Iterator<String> arguments) {
@@ -501,6 +514,8 @@
 
   List<String> arguments = <String>[];
   List<OptionHandler> handlers = <OptionHandler>[
+    OptionHandler('${Flags.entryUri}=.+', setEntryUri),
+    OptionHandler('${Flags.inputDill}=.+', setInputDillUri),
     OptionHandler('-[chvm?]+', handleShortOptions),
     OptionHandler('--throw-on-error(?:=[0-9]+)?', handleThrowOnError),
     OptionHandler(Flags.suppressWarnings, (String argument) {
@@ -725,9 +740,10 @@
     helpAndExit(wantHelp, wantVersion, diagnosticHandler.verbose);
   }
 
-  if (arguments.isEmpty) {
+  if (arguments.isEmpty && entryUri == null && inputDillUri == null) {
     helpAndFail('No Dart file specified.');
   }
+
   if (arguments.length > 1) {
     var extra = arguments.sublist(1);
     helpAndFail('Extra arguments: ${extra.join(" ")}');
@@ -738,7 +754,20 @@
         "checked mode.");
   }
 
-  String scriptName = arguments[0];
+  if (arguments.isNotEmpty) {
+    String sourceOrDill = arguments[0];
+    Uri file = Uri.base.resolve(fe.nativeToUriPath(sourceOrDill));
+    if (sourceOrDill.endsWith('.dart')) {
+      entryUri = file;
+    } else {
+      assert(sourceOrDill.endsWith('.dill'));
+      inputDillUri = file;
+    }
+  }
+
+  // Make [scriptName] a relative path..
+  String scriptName =
+      fe.relativizeUri(Uri.base, inputDillUri ?? entryUri, Platform.isWindows);
 
   switch (writeStrategy) {
     case WriteStrategy.toJs:
@@ -888,7 +917,7 @@
     writeString(
         Uri.parse('$out.deps'), getDepsOutput(inputProvider.getSourceUris()));
 
-    String input = fe.uriPathToNative(scriptName);
+    String input = scriptName;
     int inputSize;
     String processName;
     String inputName;
@@ -1037,8 +1066,6 @@
     return result;
   }
 
-  Uri script = Uri.base.resolve(scriptName);
-
   diagnosticHandler.autoReadFileUri = true;
   CompilerOptions compilerOptions = CompilerOptions.parse(options,
       featureOptions: features,
@@ -1046,7 +1073,8 @@
       platformBinaries: platformBinaries,
       onError: (String message) => fail(message),
       onWarning: (String message) => print(message))
-    ..entryPoint = script
+    ..entryUri = entryUri
+    ..inputDillUri = inputDillUri
     ..packageConfig = packageConfig
     ..environment = environment
     ..kernelInitializedCompilerState = kernelInitializedCompilerState
diff --git a/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart b/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
index 33f7b58..9f10c18 100644
--- a/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
@@ -4,7 +4,9 @@
 
 /// A [Node] is an abstract base class for all [Node]s parsed from json
 /// constraints.
-abstract class Node {}
+abstract class Node {
+  Map<String, dynamic> toJson();
+}
 
 /// A [NamedNode] is an abstract base class for all [Node]s that have a name.
 abstract class NamedNode extends Node {
@@ -13,12 +15,54 @@
   NamedNode(this.name);
 }
 
-/// A [ReferenceNode] is a [NamedNode] with a uri and prefix.
-class ReferenceNode extends NamedNode {
+/// A [UriAndPrefix] is a simple POD data type wrapping a uri and prefix.
+class UriAndPrefix {
   final Uri uri;
   final String prefix;
 
-  ReferenceNode(name, this.uri, this.prefix) : super(name);
+  UriAndPrefix(this.uri, this.prefix);
+
+  @override
+  String toString() {
+    return '$uri#$prefix';
+  }
+
+  static UriAndPrefix fromJson(String json) {
+    var uriAndPrefix = json.split('#');
+    if (uriAndPrefix.length != 2) {
+      throw 'Invalid "import" "uri#prefix" value in $json';
+    }
+    var uri = Uri.parse(uriAndPrefix[0]);
+    var prefix = uriAndPrefix[1];
+    return UriAndPrefix(uri, prefix);
+  }
+}
+
+/// A [ReferenceNode] is a [NamedNode] with a uri and prefix.
+class ReferenceNode extends NamedNode {
+  final UriAndPrefix _uriAndPrefix;
+  Uri get uri => _uriAndPrefix.uri;
+  String get prefix => _uriAndPrefix.prefix;
+
+  ReferenceNode(this._uriAndPrefix, {name})
+      : super(name ?? _uriAndPrefix.prefix);
+
+  @override
+  Map<String, dynamic> toJson() {
+    return {
+      'type': 'reference',
+      'name': name,
+      'import': _uriAndPrefix.toString()
+    };
+  }
+
+  static ReferenceNode fromJson(Map<String, dynamic> nodeJson) {
+    if (nodeJson['type'] != 'reference') {
+      throw 'Unrecognized type for reference node: ${nodeJson['type']}.';
+    }
+    return ReferenceNode(UriAndPrefix.fromJson(nodeJson['import']),
+        name: nodeJson['name']);
+  }
 
   @override
   String toString() {
@@ -30,13 +74,76 @@
 /// single step.
 enum CombinerType { fuse, and, or }
 
+CombinerType parseCombinerType(Map<String, dynamic> nodeJson) {
+  String type = nodeJson['type'];
+  switch (type) {
+    case 'fuse':
+      return CombinerType.fuse;
+    case 'and':
+      return CombinerType.and;
+    case 'or':
+      return CombinerType.or;
+    default:
+      throw 'Unrecognized Combiner $nodeJson';
+  }
+}
+
+String combinerTypeToString(CombinerType type) {
+  switch (type) {
+    case CombinerType.fuse:
+      return 'fuse';
+    case CombinerType.and:
+      return 'and';
+    case CombinerType.or:
+      return 'or';
+  }
+  throw 'Unreachable';
+}
+
+T _jsonLookup<T>(Map<String, dynamic> nodeJson, String key) {
+  var value = nodeJson[key];
+  if (value == null) {
+    throw 'Missing "$key" key in $nodeJson';
+  }
+  return value;
+}
+
+NamedNode _jsonLookupNode(
+    Map<String, dynamic> nodeJson, String key, Map<String, NamedNode> nameMap) {
+  var node = nameMap[_jsonLookup(nodeJson, key)];
+  if (node == null) {
+    throw 'Invalid "$key" name in $nodeJson';
+  }
+  return node;
+}
+
 /// A [CombinerNode] is a [NamedNode] with a list of [ReferenceNode] children
 /// and a [CombinerType] for combining them.
 class CombinerNode extends NamedNode {
   final CombinerType type;
   final Set<ReferenceNode> nodes;
 
-  CombinerNode(name, this.type, this.nodes) : super(name);
+  CombinerNode(String name, this.type, this.nodes) : super(name);
+
+  @override
+  Map<String, dynamic> toJson() {
+    return {
+      'type': combinerTypeToString(type),
+      'name': name,
+      'nodes': nodes.map((node) => node.name).toList()
+    };
+  }
+
+  static CombinerNode fromJson(
+      Map<String, dynamic> nodeJson, Map<String, NamedNode> nameMap) {
+    String name = _jsonLookup(nodeJson, 'name');
+    List<dynamic> referencesJson = _jsonLookup(nodeJson, 'nodes');
+    Set<ReferenceNode> references = {};
+    for (String reference in referencesJson) {
+      references.add(nameMap[reference]);
+    }
+    return CombinerNode(name, parseCombinerType(nodeJson), references);
+  }
 
   @override
   String toString() {
@@ -57,12 +164,95 @@
   }
 
   @override
+  Map<String, dynamic> toJson() {
+    return {
+      'type': 'order',
+      'predecessor': predecessor.name,
+      'successor': successor.name
+    };
+  }
+
+  static RelativeOrderNode fromJson(
+      Map<String, dynamic> nodeJson, Map<String, NamedNode> nameMap) {
+    var predecessor = _jsonLookupNode(nodeJson, 'predecessor', nameMap);
+    var successor = _jsonLookupNode(nodeJson, 'successor', nameMap);
+    return RelativeOrderNode(predecessor: predecessor, successor: successor);
+  }
+
+  @override
   String toString() {
     return 'RelativeOrderNode(predecessor=${predecessor.name}, '
         'successor=${successor.name})';
   }
 }
 
+/// A builder class for constructing constraint nodes.
+typedef ReferenceNodeNamer = String Function(UriAndPrefix);
+
+class ProgramSplitBuilder {
+  final Map<String, NamedNode> namedNodes = {};
+  ReferenceNodeNamer _referenceNodeNamer;
+
+  /// The prefix in the 'uri#prefix' string will become a key to reference this
+  /// node in other builder calls.
+  String _prefixNamer(UriAndPrefix uriAndPrefix) => uriAndPrefix.prefix;
+
+  /// Override the default reference node namer.
+  set referenceNodeNamer(ReferenceNodeNamer namer) =>
+      _referenceNodeNamer = namer;
+
+  /// Returns the [ReferenceNodeNamer] to use for naming.
+  ReferenceNodeNamer get referenceNodeNamer =>
+      _referenceNodeNamer ?? _prefixNamer;
+
+  /// Returns a [ReferenceNode] referencing [importUriAndPrefix].
+  /// [ReferenceNode]s are typically created in bulk, by mapping over a list of
+  /// strings of imports in the form 'uri#prefix'. In further builder calls,
+  /// created nodes can be referenced by their namers, derived from calling
+  /// [referenceNodeNamer] per [ReferenceNode].
+  ReferenceNode referenceNode(String importUriAndPrefix) {
+    var uriAndPrefix = UriAndPrefix.fromJson(importUriAndPrefix);
+    var referenceNode = ReferenceNode(uriAndPrefix);
+    var name = referenceNodeNamer(uriAndPrefix);
+    namedNodes[name] = referenceNode;
+    return referenceNode;
+  }
+
+  /// Creates an unnamed [RelativeOrderNode] referencing two [NamedNode]s.
+  RelativeOrderNode orderNode(String predecessor, String successor) {
+    return RelativeOrderNode(
+        predecessor: namedNodes[predecessor], successor: namedNodes[successor]);
+  }
+
+  /// Creates a [CombinerNode] which can be referenced by [name] in further
+  /// calls to the builder.
+  CombinerNode combinerNode(
+      String name, List<String> nodes, CombinerType type) {
+    var combinerNode = CombinerNode(name, type,
+        nodes.map((name) => namedNodes[name] as ReferenceNode).toSet());
+    namedNodes[name] = combinerNode;
+    return combinerNode;
+  }
+
+  /// Creates an 'and' [CombinerNode] which can be referenced by [name] in
+  /// further calls to the builder.
+  CombinerNode andNode(String name, List<String> nodes) {
+    return combinerNode(name, nodes, CombinerType.and);
+  }
+
+  /// Creates a 'fuse' [CombinerNode] which can be referenced by [name] in
+  /// further calls to the builder.
+  CombinerNode fuseNode(String name, List<String> nodes) {
+    return combinerNode(name, nodes, CombinerType.fuse);
+  }
+
+  /// Creates an 'or' [CombinerNode] which can be referenced by [name] in
+  /// further calls to the builder.
+  CombinerNode orNode(String name, List<String> nodes) {
+    return combinerNode(name, nodes, CombinerType.or);
+  }
+}
+
 /// [ConstraintData] is a data object which contains the results of parsing json
 /// program split constraints.
 class ConstraintData {
diff --git a/pkg/compiler/lib/src/deferred_load/program_split_constraints/parser.dart b/pkg/compiler/lib/src/deferred_load/program_split_constraints/parser.dart
index a758569..968b07b 100644
--- a/pkg/compiler/lib/src/deferred_load/program_split_constraints/parser.dart
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/parser.dart
@@ -6,83 +6,29 @@
 
 import 'nodes.dart';
 
-import '../../../compiler_new.dart' as api;
-import '../../kernel/front_end_adapter.dart' show CompilerFileSystem;
-
 /// [Parser] parsers a program split constraints json file and returns a
 /// [ConstraintData] object.
 class Parser {
   final Map<String, NamedNode> nameMap = {};
   final List<RelativeOrderNode> orderedNodes = [];
 
-  T _lookup<T>(Map<String, dynamic> nodeJson, String key) {
-    var value = nodeJson[key];
-    if (value == null) {
-      throw 'Missing "$key" key in $nodeJson';
-    }
-    return value;
-  }
-
   void parseReference(Map<String, dynamic> nodeJson) {
-    String name = _lookup(nodeJson, 'name');
-    String uriAndPrefixString = _lookup(nodeJson, 'import');
-    var uriAndPrefix = uriAndPrefixString.split('#');
-    if (uriAndPrefix.length != 2) {
-      throw 'Invalid "import" "uri#prefix" value in $nodeJson';
-    }
-    var uri = Uri.parse(uriAndPrefix[0]);
-    var prefix = uriAndPrefix[1];
-    var referenceNode = ReferenceNode(name, uri, prefix);
-    nameMap[name] = referenceNode;
-  }
-
-  CombinerType parseCombinerType(Map<String, dynamic> nodeJson) {
-    String type = nodeJson['type'];
-    switch (type) {
-      case 'fuse':
-        return CombinerType.fuse;
-      case 'and':
-        return CombinerType.and;
-      case 'or':
-        return CombinerType.or;
-      default:
-        throw 'Unrecognized Combiner $nodeJson';
-    }
+    var reference = ReferenceNode.fromJson(nodeJson);
+    nameMap[reference.name] = reference;
   }
 
   void parseCombiner(Map<String, dynamic> nodeJson) {
-    String name = _lookup(nodeJson, 'name');
-    List<dynamic> referencesJson = _lookup(nodeJson, 'nodes');
-    Set<ReferenceNode> references = {};
-    for (String reference in referencesJson) {
-      references.add(nameMap[reference]);
-    }
-    var combinerNode =
-        CombinerNode(name, parseCombinerType(nodeJson), references);
-    nameMap[name] = combinerNode;
-  }
-
-  NamedNode _lookupNode(Map<String, dynamic> nodeJson, String key) {
-    var node = nameMap[_lookup(nodeJson, key)];
-    if (node == null) {
-      throw 'Invalid "$key" name in $nodeJson';
-    }
-    return node;
+    var combinerNode = CombinerNode.fromJson(nodeJson, nameMap);
+    nameMap[combinerNode.name] = combinerNode;
   }
 
   void parseOrder(Map<String, dynamic> nodeJson) {
-    var predecessor = _lookupNode(nodeJson, 'predecessor');
-    var successor = _lookupNode(nodeJson, 'successor');
-    var orderNode =
-        RelativeOrderNode(predecessor: predecessor, successor: successor);
-    orderedNodes.add(orderNode);
+    orderedNodes.add(RelativeOrderNode.fromJson(nodeJson, nameMap));
   }
 
-  /// Reads a program split constraints json file and returns a [Nodes] object
-  /// reflecting the parsed constraints.
-  Future<ConstraintData> read(api.CompilerInput provider, Uri path) async {
-    String programSplitJson =
-        await CompilerFileSystem(provider).entityForUri(path).readAsString();
+  /// Reads a program split constraints json file string and returns a [Nodes]
+  /// object reflecting the parsed constraints.
+  ConstraintData read(String programSplitJson) {
     List<dynamic> doc = json.decode(programSplitJson);
     List<Map<String, dynamic>> referenceConstraints = [];
     List<Map<String, dynamic>> combinerConstraints = [];
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index 7bd4114..ccbcbe5 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -99,6 +99,12 @@
     });
 
     environment.forEachClass(lib, (ClassEntity clazz) {
+      ClassTypeInfo classTypeInfo = visitClassType(clazz);
+      if (classTypeInfo != null) {
+        info.classTypes.add(classTypeInfo);
+        classTypeInfo.parent = info;
+      }
+
       ClassInfo classInfo = visitClass(clazz);
       if (classInfo != null) {
         info.classes.add(classInfo);
@@ -159,6 +165,24 @@
     return info;
   }
 
+  ClassTypeInfo visitClassType(ClassEntity clazz) {
+    // Omit class type if it is not needed.
+    ClassTypeInfo classTypeInfo = ClassTypeInfo(
+        name: clazz.name, outputUnit: _unitInfoForClassType(clazz));
+
+    // TODO(joshualitt): Get accurate size information for class types.
+    classTypeInfo.size = 0;
+
+    bool isNeeded =
+        compiler.backendStrategy.emitterTask.neededClassTypes.contains(clazz);
+    if (!isNeeded) {
+      return null;
+    }
+
+    result.classTypes.add(classTypeInfo);
+    return classTypeInfo;
+  }
+
   ClassInfo visitClass(ClassEntity clazz) {
     // Omit class if it is not needed.
     ClassInfo classInfo = ClassInfo(
@@ -370,6 +394,11 @@
         closedWorld.outputUnitData.outputUnitForClass(entity, allowNull: true));
   }
 
+  OutputUnitInfo _unitInfoForClassType(ClassEntity entity) {
+    return _infoFromOutputUnit(closedWorld.outputUnitData
+        .outputUnitForClassType(entity, allowNull: true));
+  }
+
   OutputUnitInfo _unitInfoForConstant(ConstantValue constant) {
     OutputUnit outputUnit =
         closedWorld.outputUnitData.outputUnitForConstant(constant);
diff --git a/pkg/compiler/lib/src/io/position_information.dart b/pkg/compiler/lib/src/io/position_information.dart
index 75aa83d..1fa1dc4 100644
--- a/pkg/compiler/lib/src/io/position_information.dart
+++ b/pkg/compiler/lib/src/io/position_information.dart
@@ -511,7 +511,7 @@
   /// code using [kind] to determine what information to use.
   ///
   /// For most nodes the start position of the source information is used.
-  /// For instance a return expression points to the the start position of the
+  /// For instance a return expression points to the start position of the
   /// source information, typically the start of the return statement that
   /// created the JavaScript return node:
   ///
diff --git a/pkg/compiler/lib/src/ir/modular.dart b/pkg/compiler/lib/src/ir/modular.dart
index a924f16..e9df381 100644
--- a/pkg/compiler/lib/src/ir/modular.dart
+++ b/pkg/compiler/lib/src/ir/modular.dart
@@ -141,5 +141,5 @@
   var sourceSpan = SourceSpan(
       message.uri, message.charOffset, message.charOffset + message.length);
   return reporter.createMessage(
-      sourceSpan, MessageKind.GENERIC, {'text': message.message});
+      sourceSpan, MessageKind.GENERIC, {'text': message.problemMessage});
 }
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
index 6d7d02a..b122154 100644
--- a/pkg/compiler/lib/src/ir/static_type.dart
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -1134,12 +1134,12 @@
     } else {
       ir.Class declaringClass = node.interfaceTarget.enclosingClass;
       if (declaringClass.typeParameters.isEmpty) {
-        resultType = node.interfaceTarget.getterType;
+        resultType = node.interfaceTarget.superGetterType;
       } else {
         ir.DartType receiver = typeEnvironment.getTypeAsInstanceOf(thisType,
             declaringClass, currentLibrary, typeEnvironment.coreTypes);
         resultType = ir.Substitution.fromInterfaceType(receiver)
-            .substituteType(node.interfaceTarget.getterType);
+            .substituteType(node.interfaceTarget.superGetterType);
       }
     }
     _staticTypeCache._expressionTypes[node] = resultType;
diff --git a/pkg/compiler/lib/src/js/size_estimator.dart b/pkg/compiler/lib/src/js/size_estimator.dart
index 022c4c2..33a45ed 100644
--- a/pkg/compiler/lib/src/js/size_estimator.dart
+++ b/pkg/compiler/lib/src/js/size_estimator.dart
@@ -843,6 +843,13 @@
     out("=>");
     int closingPosition;
     Node body = fun.body;
+    // Simplify arrow functions that return a single expression.
+    if (fun.implicitReturnAllowed && body is Block) {
+      final statement = unwrapBlockIfSingleStatement(body);
+      if (statement is Return) {
+        body = statement.value;
+      }
+    }
     if (body is Block) {
       closingPosition = blockOut(body);
     } else {
@@ -854,7 +861,7 @@
       visitNestedExpression(body, ASSIGNMENT,
           newInForInit: false, newAtStatementBegin: false);
       if (needsParens) out(")");
-      closingPosition = charCount - 1;
+      closingPosition = charCount;
     }
     return closingPosition;
   }
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
index 11e86e2..5f3b75b 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
@@ -513,13 +513,27 @@
     });
 
     for (GenericInstantiation instantiation in _genericInstantiations) {
+      ParameterStructure instantiationParameterStructure =
+          ParameterStructure.fromType(instantiation.functionType);
+      ClassEntity implementationClass = _commonElements
+          .getInstantiationClass(instantiation.typeArguments.length);
+
       void processEntity(Entity entity) {
         MethodNode node = _getMethodNode(entity);
-        if (node.parameterStructure ==
-            ParameterStructure.fromType(instantiation.functionType)) {
+        // TODO(sra,johnniwinther): Use more information from the instantiation
+        // site. At many sites the instantiated element known, and for other
+        // sites the static type could filter more entities.
+        if (node.parameterStructure == instantiationParameterStructure) {
           _instantiationMap.putIfAbsent(entity, () => {}).add(instantiation);
           for (DartType type in instantiation.typeArguments) {
             registerDependenciesForInstantiation(node, type);
+            // The instantiation is implemented by a generic class (a subclass
+            // of 'Closure'). The implementation of generic instantiation
+            // equality places a need on the type parameters of the generic
+            // class. Making the class a dependency on the instantiation's
+            // parameters allows the dependency to propagate back to the helper
+            // function that is called to create the instantiation.
+            registerDependencies(_getClassNode(implementationClass), type);
           }
         }
       }
@@ -1337,6 +1351,7 @@
       }
       if (neededOnAll) break;
     }
+
     Set<ClassEntity> allClassesNeedingRuntimeType;
     if (neededOnAll) {
       neededOnFunctions = true;
@@ -1399,13 +1414,19 @@
     Set<int> instantiationsNeedingTypeArguments = {};
     typeVariableTests.forEachInstantiatedEntity(
         (Entity target, Set<GenericInstantiation> instantiations) {
-      if (methodsNeedingTypeArguments.contains(target) ||
-          localFunctionsNeedingTypeArguments.contains(target)) {
-        // TODO(johnniwinther): Use the static type of the instantiated
-        // expression.
-        instantiationsNeedingTypeArguments
-            .add(instantiations.first.typeArguments.length);
-        if (retainDataForTesting) {
+      // An instantiation needs type arguments if the class implementing the
+      // instantiation needs type arguments.
+      int arity = instantiations.first.typeArguments.length;
+      if (!instantiationsNeedingTypeArguments.contains(arity)) {
+        if (classesNeedingTypeArguments
+            .contains(commonElements.getInstantiationClass(arity))) {
+          instantiationsNeedingTypeArguments.add(arity);
+        }
+      }
+
+      if (retainDataForTesting) {
+        if (methodsNeedingTypeArguments.contains(target) ||
+            localFunctionsNeedingTypeArguments.contains(target)) {
           _instantiatedEntitiesNeedingTypeArgumentsForTesting ??= {};
           _instantiatedEntitiesNeedingTypeArgumentsForTesting
               .putIfAbsent(target, () => {})
diff --git a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
index 0beb130..bc491ae 100644
--- a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
+++ b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
@@ -44,13 +44,14 @@
 
   CompilerOptions get options => _compiler.options;
 
-  @deprecated
-  // This field should be removed. It's currently only needed for dump-info and
-  // tests.
-  // The field is set after the program has been emitted.
+  /// The field is set after the program has been emitted.
   /// Contains a list of all classes that are emitted.
+  /// Currently used for testing and dump-info.
   Set<ClassEntity> neededClasses;
 
+  /// See [neededClasses] but for class types.
+  Set<ClassEntity> neededClassTypes;
+
   @override
   final _EmitterMetrics metrics = _EmitterMetrics();
 
@@ -140,8 +141,8 @@
           _rtiChecks.requiredClasses,
           closedWorld.elementEnvironment.mainFunction);
       int size = emitter.emitProgram(programBuilder, codegenWorld);
-      // TODO(floitsch): we shouldn't need the `neededClasses` anymore.
       neededClasses = programBuilder.collector.neededClasses;
+      neededClassTypes = programBuilder.collector.neededClassTypes;
       return size;
     });
   }
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index 3f0ddf0..91c66d3 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -1679,12 +1679,20 @@
               ? locals.find('_lazyFinal', 'hunkHelpers.lazyFinal')
               : locals.find('_lazy', 'hunkHelpers.lazy')
           : locals.find('_lazyOld', 'hunkHelpers.lazyOld');
+      js.Expression staticFieldCode = field.code;
+      if (!_options.features.legacyJavaScript.isEnabled &&
+          staticFieldCode is js.Fun) {
+        js.Fun fun = staticFieldCode;
+        staticFieldCode = js.ArrowFunction(fun.params, fun.body,
+                asyncModifier: fun.asyncModifier)
+            .withSourceInformation(fun.sourceInformation);
+      }
       js.Statement statement = js.js.statement("#(#, #, #, #);", [
         helper,
         _namer.globalObjectForStaticState(),
         js.quoteName(field.name),
         js.quoteName(field.getterName),
-        field.code,
+        staticFieldCode,
       ]);
 
       registerEntityAst(field.element, statement,
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index e079b78..3bb766f 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -1359,7 +1359,6 @@
       type ??= findIn(Uris.dart_svg);
       type ??= findIn(Uris.dart_web_audio);
       type ??= findIn(Uris.dart_web_gl);
-      type ??= findIn(Uris.dart_web_sql);
       type ??= findIn(Uris.dart_indexed_db);
       type ??= findIn(Uris.dart_typed_data);
       type ??= findIn(Uris.dart__rti);
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 3b8b71b..ae463a8 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -36,7 +36,6 @@
   '_native_typed_data',
   'web_audio',
   'web_gl',
-  'web_sql'
 ];
 
 List<Pattern> _allowedNativeTestPatterns = [
@@ -246,7 +245,6 @@
     'dart:svg',
     'dart:web_audio',
     'dart:web_gl',
-    'dart:web_sql',
   ],
   'dart2js_server': [
     'dart:_dart2js_runtime_metrics',
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 1647344..827bf20 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -949,7 +949,6 @@
       type ??= findIn(Uris.dart_svg);
       type ??= findIn(Uris.dart_web_audio);
       type ??= findIn(Uris.dart_web_gl);
-      type ??= findIn(Uris.dart_web_sql);
       type ??= findIn(Uris.dart_indexed_db);
       type ??= findIn(Uris.dart_typed_data);
       type ??= findIn(Uris.dart__rti);
@@ -2168,7 +2167,7 @@
   SourceSpan sourceSpan = SourceSpan(
       message.uri, message.charOffset, message.charOffset + message.length);
   return reporter.createMessage(
-      sourceSpan, MessageKind.GENERIC, {'text': message.message});
+      sourceSpan, MessageKind.GENERIC, {'text': message.problemMessage});
 }
 
 void reportLocatedMessage(DiagnosticReporter reporter,
diff --git a/pkg/compiler/lib/src/kernel/loader.dart b/pkg/compiler/lib/src/kernel/loader.dart
index 3278416..79e95d4 100644
--- a/pkg/compiler/lib/src/kernel/loader.dart
+++ b/pkg/compiler/lib/src/kernel/loader.dart
@@ -55,8 +55,34 @@
   @override
   String get name => 'kernel loader';
 
+  ir.Reference findMainMethod(Component component, Uri entryUri) {
+    var entryLibrary = component.libraries
+        .firstWhere((l) => l.fileUri == entryUri, orElse: () => null);
+    if (entryLibrary == null) {
+      throw ArgumentError('Entry uri $entryUri not found in dill.');
+    }
+    var mainMethod = entryLibrary.procedures
+        .firstWhere((p) => p.name.text == 'main', orElse: () => null);
+
+    // In some cases, a main method is defined in another file, and then
+    // exported. In these cases, we search for the main method in
+    // [additionalExports].
+    ir.Reference mainMethodReference;
+    if (mainMethod == null) {
+      mainMethodReference = entryLibrary.additionalExports.firstWhere(
+          (p) => p.canonicalName.name == 'main',
+          orElse: () => null);
+    } else {
+      mainMethodReference = mainMethod.reference;
+    }
+    if (mainMethodReference == null) {
+      throw ArgumentError('Entry uri $entryUri has no main method.');
+    }
+    return mainMethodReference;
+  }
+
   /// Loads an entire Kernel [Component] from a file on disk.
-  Future<KernelResult> load(Uri resolvedUri) {
+  Future<KernelResult> load() {
     return measure(() async {
       String targetName =
           _options.compileForServer ? "dart2js_server" : "dart2js";
@@ -64,14 +90,11 @@
       // We defer selecting the platform until we've resolved the null safety
       // mode.
       String getPlatformFilename() {
-        String platform = targetName;
-        if (!_options.useLegacySubtyping) {
-          platform += "_nnbd_strong";
-        }
-        platform += "_platform.dill";
-        return platform;
+        String unsoundMarker = _options.useLegacySubtyping ? "_unsound" : "";
+        return "${targetName}_platform$unsoundMarker.dill";
       }
 
+      var resolvedUri = _options.compilationTarget;
       ir.Component component;
       List<Uri> moduleLibraries = const [];
       var isDill = resolvedUri.path.endsWith('.dill') ||
@@ -98,6 +121,14 @@
         }
 
         await read(resolvedUri);
+
+        // If an entryUri is supplied, we use it to manually select the main
+        // method.
+        if (_options.entryUri != null) {
+          var mainMethod = findMainMethod(component, _options.entryUri);
+          component.setMainMethodAndMode(mainMethod, true, component.mode);
+        }
+
         if (_options.modularMode) {
           moduleLibraries =
               component.libraries.map((lib) => lib.importUri).toList();
@@ -129,11 +160,16 @@
           // brittle.
           if (platformUri != resolvedUri) await read(platformUri);
         }
+
+        // Concatenate dills and then reset main method.
+        var mainMethod = component.mainMethodName;
+        var mainMode = component.mode;
         if (_options.dillDependencies != null) {
           for (Uri dependency in _options.dillDependencies) {
             await read(dependency);
           }
         }
+        component.setMainMethodAndMode(mainMethod, true, mainMode);
 
         // This is not expected to be null when creating a whole-program .dill
         // file, but needs to be checked for modular inputs.
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 5f7b288..d0a06d4 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -72,10 +72,14 @@
   FeatureOption useContentSecurityPolicy = FeatureOption('csp');
 
   /// [FeatureOption]s which default to enabled.
-  late final List<FeatureOption> shipping = [legacyJavaScript, newHolders];
+  late final List<FeatureOption> shipping = [
+    legacyJavaScript,
+    newHolders,
+    useContentSecurityPolicy
+  ];
 
   /// [FeatureOption]s which default to disabled.
-  late final List<FeatureOption> canary = [useContentSecurityPolicy];
+  late final List<FeatureOption> canary = [];
 
   /// Forces canary feature on. This must run after [Option].parse.
   void forceCanary() {
@@ -139,7 +143,13 @@
 /// as few as possible.
 class CompilerOptions implements DiagnosticOptions {
   /// The entry point of the application that is being compiled.
-  Uri? entryPoint;
+  Uri? entryUri;
+
+  /// The input dill to compile.
+  Uri? inputDillUri;
+
+  /// Returns the compilation target specified by these options.
+  Uri? get compilationTarget => inputDillUri ?? entryUri;
 
   /// Location of the package configuration file.
   ///
@@ -168,7 +178,7 @@
 
   /// Location from which serialized inference data is read.
   ///
-  /// If this is set, the [entryPoint] is expected to be a .dill file and the
+  /// If this is set, the [entryUri] is expected to be a .dill file and the
   /// frontend work is skipped.
   Uri? readDataUri;
 
@@ -184,7 +194,7 @@
 
   /// Location from which the serialized closed world is read.
   ///
-  /// If this is set, the [entryPoint] is expected to be a .dill file and the
+  /// If this is set, the [entryUri] is expected to be a .dill file and the
   /// frontend work is skipped.
   Uri? readClosedWorldUri;
 
@@ -559,6 +569,8 @@
     // sdk with the correct flags.
     platformBinaries ??= fe.computePlatformBinariesLocation();
     return CompilerOptions()
+      ..entryUri = _extractUriOption(options, '${Flags.entryUri}=')
+      ..inputDillUri = _extractUriOption(options, '${Flags.inputDill}=')
       ..librariesSpecificationUri = librariesSpecificationUri
       ..allowMockCompilation = _hasOption(options, Flags.allowMockCompilation)
       ..benchmarkingProduction =
diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart
index b4943f1..27d75ae 100644
--- a/pkg/compiler/lib/src/serialization/task.dart
+++ b/pkg/compiler/lib/src/serialization/task.dart
@@ -156,9 +156,9 @@
 
   Future<ir.Component> deserializeComponent() async {
     return measureIoSubtask('deserialize dill', () async {
-      _reporter.log('Reading dill from ${_options.entryPoint}');
+      _reporter.log('Reading dill from ${_options.inputDillUri}');
       api.Input<List<int>> dillInput = await _provider
-          .readFromUri(_options.entryPoint, inputKind: api.InputKind.binary);
+          .readFromUri(_options.inputDillUri, inputKind: api.InputKind.binary);
       ir.Component component = ir.Component();
       // Not using growable lists saves memory.
       ir.BinaryBuilder(dillInput.data,
@@ -177,8 +177,9 @@
       var dillMode = isStrongDill ? 'sound' : 'unsound';
       var option =
           isStrongDill ? Flags.noSoundNullSafety : Flags.soundNullSafety;
-      throw ArgumentError("${_options.entryPoint} was compiled with $dillMode "
-          "null safety and is incompatible with the '$option' option");
+      throw ArgumentError("${_options.inputDillUri} was compiled with "
+          "$dillMode null safety and is incompatible with the '$option' "
+          "option");
     }
 
     _options.nullSafetyMode =
@@ -353,8 +354,8 @@
 
   // TODO(joshualitt): Investigate whether closed world indices can be shared
   // with codegen.
-  void serializeCodegen(
-      BackendStrategy backendStrategy, CodegenResults codegenResults) {
+  void serializeCodegen(BackendStrategy backendStrategy,
+      CodegenResults codegenResults, DataSourceIndices indices) {
     GlobalTypeInferenceResults globalTypeInferenceResults =
         codegenResults.globalTypeInferenceResults;
     JClosedWorld closedWorld = globalTypeInferenceResults.closedWorld;
@@ -373,7 +374,8 @@
     measureSubtask('serialize codegen', () {
       Uri uri = Uri.parse('${_options.writeCodegenUri}$shard');
       api.BinaryOutputSink dataOutput = _outputProvider.createBinarySink(uri);
-      DataSink sink = BinarySink(BinaryOutputSinkAdapter(dataOutput));
+      DataSink sink = BinarySink(BinaryOutputSinkAdapter(dataOutput),
+          importedIndices: indices);
       _reporter.log('Writing data to ${uri}');
       sink.registerEntityWriter(entityWriter);
       sink.registerCodegenWriter(CodegenWriterImpl(closedWorld));
@@ -388,7 +390,8 @@
   Future<CodegenResults> deserializeCodegen(
       BackendStrategy backendStrategy,
       GlobalTypeInferenceResults globalTypeInferenceResults,
-      CodegenInputs codegenInputs) async {
+      CodegenInputs codegenInputs,
+      DataSourceIndices indices) async {
     int shards = _options.codegenShards;
     JClosedWorld closedWorld = globalTypeInferenceResults.closedWorld;
     Map<MemberEntity, CodegenResult> results = {};
@@ -401,7 +404,7 @@
         // TODO(36983): This code is extracted because there appeared to be a
         // memory leak for large buffer held by `source`.
         _deserializeCodegenInput(
-            backendStrategy, closedWorld, uri, dataInput, results);
+            backendStrategy, closedWorld, uri, dataInput, indices, results);
         dataInput.release();
       });
     }
@@ -414,9 +417,10 @@
       JClosedWorld closedWorld,
       Uri uri,
       api.Input<List<int>> dataInput,
+      DataSourceIndices importedIndices,
       Map<MemberEntity, CodegenResult> results) {
-    DataSource source =
-        BinarySourceImpl(dataInput.data, stringInterner: _stringInterner);
+    DataSource source = BinarySourceImpl(dataInput.data,
+        stringInterner: _stringInterner, importedIndices: importedIndices);
     backendStrategy.prepareCodegenReader(source);
     Map<MemberEntity, CodegenResult> codegenResults =
         source.readMemberMap((MemberEntity member) {
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index cf8fb72..56683e5 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -5134,25 +5134,10 @@
     List<HInstruction> arguments = [];
     node.expression.accept(this);
     arguments.add(pop());
-    StaticType expressionType = _getStaticType(node.expression);
-    FunctionType functionType = expressionType.type.withoutNullability;
-    bool typeArgumentsNeeded = _rtiNeed.instantiationNeedsTypeArguments(
-        functionType, node.typeArguments.length);
-    List<DartType> typeArguments = node.typeArguments
-        .map((type) => typeArgumentsNeeded
-            ? _elementMap.getDartType(type)
-            : _commonElements.dynamicType)
-        .toList();
-    registry.registerGenericInstantiation(
-        GenericInstantiation(functionType, typeArguments));
-    // TODO(johnniwinther): Can we avoid creating the instantiation object?
-    for (DartType type in typeArguments) {
-      HInstruction instruction =
-          _typeBuilder.analyzeTypeArgument(type, sourceElement);
-      arguments.add(instruction);
-    }
+
+    // A generic function instantiation is created by calling a helper function
+    // which takes the arguments.
     int typeArgumentCount = node.typeArguments.length;
-    bool targetCanThrow = false; // TODO(sra): Is this true?
     FunctionEntity target =
         _commonElements.getInstantiateFunction(typeArgumentCount);
     if (target == null) {
@@ -5163,10 +5148,36 @@
       stack.add(graph.addConstantNull(closedWorld));
       return;
     }
+
+    StaticType expressionType = _getStaticType(node.expression);
+    FunctionType functionType = expressionType.type.withoutNullability;
+    bool typeArgumentsNeeded = _rtiNeed.methodNeedsTypeArguments(target);
+
+    List<DartType> typeArguments = node.typeArguments
+        .map((type) => typeArgumentsNeeded
+            ? _elementMap.getDartType(type)
+            : _commonElements.dynamicType)
+        .toList();
+    registry.registerGenericInstantiation(
+        GenericInstantiation(functionType, typeArguments));
+
+    // TODO(sra): Add instantiations to SourceInformationBuilder.
+    SourceInformation sourceInformation = null;
+
+    // TODO(47484): Allow callee to have different calling convention for type
+    // arguments.
+    if (typeArgumentsNeeded) {
+      _addTypeArguments(arguments, typeArguments, sourceInformation);
+    }
+
+    bool targetCanThrow = false; // TODO(sra): Is this true?
+
+    // TODO(sra): Use [_pushStaticInvocation] to allow inlining. We don't now
+    // because inference can't tell that the call has no side-effects.
     HInstruction instruction = HInvokeStatic(
         target, arguments, _abstractValueDomain.functionType, <DartType>[],
         targetCanThrow: targetCanThrow);
-    // TODO(sra): ..sourceInformation = sourceInformation
+    instruction.sourceInformation = sourceInformation;
     instruction.sideEffects
       ..clearAllDependencies()
       ..clearAllSideEffects();
diff --git a/pkg/compiler/pubspec.yaml b/pkg/compiler/pubspec.yaml
index ad1c27b..bbee8a4 100644
--- a/pkg/compiler/pubspec.yaml
+++ b/pkg/compiler/pubspec.yaml
@@ -9,6 +9,7 @@
 # NOTE: `pub get / pub upgrade` are generally not needed when working on this
 # package. The `.packages` file in the repository root will be used by default.
 dependencies:
+  _fe_analyzer_shared: any
   # Published packages - repo version ensured via dependency_overrides
   collection: any
   crypto: any
@@ -20,8 +21,6 @@
     path: ../kernel
 
   # Unpublished packages that can be used via path dependency
-  _fe_analyzer_shared:
-    path: ../_fe_analyzer_shared
   _js_interop_checks:
     path: ../_js_interop_checks
   js_ast:
diff --git a/pkg/compiler/test/analyses/analysis_helper.dart b/pkg/compiler/test/analyses/analysis_helper.dart
index 329a825..559d972 100644
--- a/pkg/compiler/test/analyses/analysis_helper.dart
+++ b/pkg/compiler/test/analyses/analysis_helper.dart
@@ -59,8 +59,9 @@
         memorySourceFiles: memorySourceFiles,
         librariesSpecificationUri: librariesSpecificationUri,
         packageConfig: packageConfig,
+        entryPoint: entryPoint,
         options: options);
-    KernelResult result = await compiler.kernelLoader.load(entryPoint);
+    KernelResult result = await compiler.kernelLoader.load();
     new DynamicVisitor(compiler.reporter, result.component, allowedListPath,
             analyzedUrisFilter)
         .run(verbose: verbose, generate: generate);
diff --git a/pkg/compiler/test/analyses/api_allowed.json b/pkg/compiler/test/analyses/api_allowed.json
index 69d4c13..7fe7b5a 100644
--- a/pkg/compiler/test/analyses/api_allowed.json
+++ b/pkg/compiler/test/analyses/api_allowed.json
@@ -94,36 +94,16 @@
   "org-dartlang-sdk:///lib/convert/json.dart": {
     "Dynamic invocation of 'toJson'.": 1
   },
-  "org-dartlang-sdk:///lib/_http/crypto.dart": {
-    "Dynamic invocation of '+'.": 2,
-    "Dynamic invocation of '&'.": 3,
-    "Dynamic invocation of 'unary-'.": 1,
-    "Dynamic invocation of '-'.": 2
-  },
-  "org-dartlang-sdk:///lib/_http/http_date.dart": {
-    "Dynamic access of 'length'.": 3,
-    "Dynamic invocation of '<'.": 1,
-    "Dynamic invocation of '>='.": 2,
-    "Dynamic invocation of '[]'.": 7
-  },
-  "org-dartlang-sdk:///lib/_http/http_headers.dart": {
-    "Dynamic invocation of 'toLowerCase'.": 1
-  },
   "org-dartlang-sdk:///lib/_http/http_impl.dart": {
-    "Dynamic access of 'headers'.": 1,
-    "Dynamic invocation of 'forEach'.": 1,
-    "Dynamic access of 'connectionInfo'.": 4,
-    "Dynamic access of 'localPort'.": 1,
-    "Dynamic access of 'remoteAddress'.": 2,
-    "Dynamic access of 'address'.": 4,
-    "Dynamic access of 'remotePort'.": 2,
     "Dynamic access of 'message'.": 3,
-    "Dynamic invocation of 'call'.": 1,
     "Dynamic invocation of 'destroy'.": 2,
+    "Dynamic access of 'address'.": 3,
     "Dynamic access of 'type'.": 1,
     "Dynamic invocation of 'setOption'.": 1,
     "Dynamic access of 'host'.": 2,
     "Dynamic access of 'port'.": 2,
+    "Dynamic access of 'remoteAddress'.": 1,
+    "Dynamic access of 'remotePort'.": 1,
     "Dynamic invocation of 'dart._http::_toJSON'.": 3,
     "Dynamic invocation of 'listen'.": 1,
     "Dynamic invocation of 'close'.": 1
diff --git a/pkg/compiler/test/analyses/dart2js_allowed.json b/pkg/compiler/test/analyses/dart2js_allowed.json
index d9943f4..15d55fd 100644
--- a/pkg/compiler/test/analyses/dart2js_allowed.json
+++ b/pkg/compiler/test/analyses/dart2js_allowed.json
@@ -51,6 +51,9 @@
     "Dynamic access of 'isForwarding'.": 1,
     "Dynamic access of 'forwardTo'.": 1
   },
+  "pkg/compiler/lib/src/serialization/binary_sink.dart": {
+    "Dynamic access of 'index'.": 1
+  },
   "pkg/compiler/lib/src/helpers/expensive_map.dart": {
     "Dynamic access of 'length'.": 1,
     "Dynamic access of 'isEmpty'.": 1,
@@ -89,9 +92,6 @@
     "Dynamic invocation of '-'.": 1,
     "Dynamic invocation of '+'.": 1
   },
-  "pkg/compiler/lib/src/serialization/binary_sink.dart": {
-    "Dynamic access of 'index'.": 1
-  },
   "pkg/compiler/lib/src/util/enumset.dart": {
     "Dynamic access of 'index'.": 4
   },
@@ -115,7 +115,7 @@
     "Dynamic invocation of 'codeUnitAt'.": 1
   },
   "pkg/dart2js_info/lib/json_info_codec.dart": {
-    "Dynamic invocation of '[]'.": 11,
+    "Dynamic invocation of '[]'.": 12,
     "Dynamic invocation of 'forEach'.": 2,
     "Dynamic invocation of 'map'.": 2,
     "Dynamic invocation of 'compareTo'.": 1
diff --git a/pkg/compiler/test/analyses/static_type_visitor_test.dart b/pkg/compiler/test/analyses/static_type_visitor_test.dart
index 72b7143..4ec5093 100644
--- a/pkg/compiler/test/analyses/static_type_visitor_test.dart
+++ b/pkg/compiler/test/analyses/static_type_visitor_test.dart
@@ -23,10 +23,10 @@
 
 main() {
   asyncTest(() async {
-    Compiler compiler =
-        await compilerFor(memorySourceFiles: {'main.dart': source});
-    KernelResult result =
-        await compiler.kernelLoader.load(Uri.parse('memory:main.dart'));
+    Compiler compiler = await compilerFor(
+        memorySourceFiles: {'main.dart': source},
+        entryPoint: Uri.parse('memory:main.dart'));
+    KernelResult result = await compiler.kernelLoader.load();
     ir.Component component = result.component;
     StaticTypeVisitor visitor = new Visitor(component);
     component.accept(visitor);
diff --git a/pkg/compiler/test/closure/data/instantiation.dart b/pkg/compiler/test/closure/data/instantiation.dart
index dfebcb4..cb95806 100644
--- a/pkg/compiler/test/closure/data/instantiation.dart
+++ b/pkg/compiler/test/closure/data/instantiation.dart
@@ -7,7 +7,7 @@
 T id<T>(T t) => t;
 
 method<S>(S s) {
-  /*spec.fields=[S],free=[S]*/
+  /*fields=[S],free=[S]*/
   S Function(S) getId() => id;
   return getId();
 }
diff --git a/pkg/compiler/test/closure/data/instantiation1.dart b/pkg/compiler/test/closure/data/instantiation1.dart
index 32c3043..d132094 100644
--- a/pkg/compiler/test/closure/data/instantiation1.dart
+++ b/pkg/compiler/test/closure/data/instantiation1.dart
@@ -13,8 +13,7 @@
   /*member: B.method:hasThis*/
   method() {
     return
-        /*spec.fields=[this],free=[this],hasThis*/
-        /*prod.hasThis*/
+        /*fields=[this],free=[this],hasThis*/
         () {
       F<S> c = f;
       return c;
diff --git a/pkg/compiler/test/closure/data/instantiation3.dart b/pkg/compiler/test/closure/data/instantiation3.dart
index a379626..da4ade4 100644
--- a/pkg/compiler/test/closure/data/instantiation3.dart
+++ b/pkg/compiler/test/closure/data/instantiation3.dart
@@ -10,7 +10,7 @@
 
 method<S>() {
   return
-      /*spec.fields=[S],free=[S]*/
+      /*fields=[S],free=[S]*/
       () {
     F<S> c = f;
     return c;
diff --git a/pkg/compiler/test/custom_split/constraint_harness.dart b/pkg/compiler/test/custom_split/constraint_harness.dart
new file mode 100644
index 0000000..24c890e
--- /dev/null
+++ b/pkg/compiler/test/custom_split/constraint_harness.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.7
+
+import 'dart:convert';
+import 'dart:isolate';
+
+import 'package:compiler/src/deferred_load/program_split_constraints/nodes.dart';
+
+typedef ImportsProcessor = List<Node> Function(List<String>);
+
+/// A helper function which waits for a list of deferred imports, and then
+/// invokes the supplied [processFunc]. The list of nodes returned from
+/// [processFunc] will then be serialized as json and sent back over the
+/// supplied [sendPort].
+void waitForImportsAndInvoke(
+    SendPort sendPort, ImportsProcessor importsProcessor) async {
+  ReceivePort receivePort = ReceivePort();
+  sendPort.send(receivePort.sendPort);
+
+  var msg = await receivePort.first;
+  assert(msg is List<String>);
+  var constraints = importsProcessor(msg);
+  sendPort.send(JsonEncoder.withIndent('  ').convert(constraints));
+  receivePort.close();
+}
diff --git a/pkg/compiler/test/custom_split/custom_split_test.dart b/pkg/compiler/test/custom_split/custom_split_test.dart
index 5203eb3..fb0968a 100644
--- a/pkg/compiler/test/custom_split/custom_split_test.dart
+++ b/pkg/compiler/test/custom_split/custom_split_test.dart
@@ -5,7 +5,13 @@
 // @dart = 2.7
 
 import 'dart:io' hide Link;
+import 'dart:isolate';
+
 import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:expect/expect.dart';
+import 'package:kernel/ast.dart' as ir;
+
 import '../equivalence/id_equivalence_helper.dart';
 import '../deferred_loading/deferred_loading_test_helper.dart';
 
@@ -25,12 +31,71 @@
 Map<String, List<String>> createPerTestOptions() {
   Map<String, List<String>> perTestOptions = {};
   for (var test in tests) {
-    Uri dir = Platform.script.resolve('data/$test/constraints.json');
-    perTestOptions['$test'] = ['--read-program-split=$dir'];
+    Uri constraints = Platform.script.resolve('data/$test/constraints.json');
+    perTestOptions['$test'] = ['--read-program-split=$constraints'];
   }
   return perTestOptions;
 }
 
+/// Returns a list of the deferred imports in a component where each import
+/// becomes a string of 'uri#prefix'.
+List<String> getDeferredImports(ir.Component component) {
+  List<String> imports = [];
+  for (var library in component.libraries) {
+    for (var import in library.dependencies) {
+      if (import.isDeferred) {
+        imports.add('${library.importUri}#${import.name}');
+      }
+    }
+  }
+  imports.sort();
+  return imports;
+}
+
+/// A helper function which performs the following steps:
+/// 1) Get deferred imports from a given [component]
+/// 2) Spawns the supplied [constraintsUri] in its own isolate
+/// 3) Passes deferred imports via a port to the spawned isolate
+/// 4) Listens for a json string from the spawned isolated and returns the
+///    results as a a [Future<String>].
+Future<String> constraintsToJson(
+    ir.Component component, Uri constraintsUri) async {
+  var imports = getDeferredImports(component);
+  SendPort sendPort;
+  var receivePort = ReceivePort();
+  var isolate = await Isolate.spawnUri(constraintsUri, [], receivePort.sendPort,
+      paused: true);
+  isolate.addOnExitListener(receivePort.sendPort);
+  isolate.resume(isolate.pauseCapability);
+  String json;
+  await for (var msg in receivePort) {
+    if (msg == null) {
+      receivePort.close();
+    } else if (sendPort == null) {
+      sendPort = msg;
+      sendPort.send(imports);
+    } else if (json == null) {
+      json = msg;
+    } else {
+      throw 'Unexpected message $msg';
+    }
+  }
+  return json;
+}
+
+/// Verifies the programmatic API produces the expected JSON.
+Future<void> verifyCompiler(String test, Compiler compiler) async {
+  var constraints = Platform.script.resolve('data/$test/constraints.dart');
+  var constraintsJsonUri =
+      Platform.script.resolve('data/$test/constraints.json');
+  var component = compiler.componentForTesting;
+  var json = await constraintsToJson(component, constraints);
+  var constraintsJson =
+      File(constraintsJsonUri.toFilePath()).readAsStringSync();
+  constraintsJson = constraintsJson.substring(0, constraintsJson.length - 1);
+  Expect.equals(json, constraintsJson);
+}
+
 /// Compute the [OutputUnit]s for all source files involved in the test, and
 /// ensure that the compiler is correctly calculating what is used and what is
 /// not. We expect all test entry points to be in the `data` directory and any
@@ -44,6 +109,6 @@
         perTestOptions: createPerTestOptions(),
         args: args, setUpFunction: () {
       importPrefixes.clear();
-    }, testedConfigs: allSpecConfigs);
+    }, testedConfigs: allSpecConfigs, verifyCompiler: verifyCompiler);
   });
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond/constraints.dart b/pkg/compiler/test/custom_split/data/diamond/constraints.dart
new file mode 100644
index 0000000..92a7665
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/constraints.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2021, 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:isolate';
+
+import 'package:compiler/src/deferred_load/program_split_constraints/nodes.dart';
+import '../../constraint_harness.dart';
+
+void main(List<String> args, SendPort sendPort) {
+  waitForImportsAndInvoke(sendPort, processDeferredImports);
+}
+
+List<Node> processDeferredImports(List<String> imports) {
+  var builder = ProgramSplitBuilder();
+  return [
+    ...imports.map(builder.referenceNode),
+    builder.orderNode('step1', 'step2a'),
+    builder.orderNode('step1', 'step2b'),
+    builder.orderNode('step2a', 'step3'),
+    builder.orderNode('step2b', 'step3'),
+  ];
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond/constraints.json b/pkg/compiler/test/custom_split/data/diamond/constraints.json
index 19bc46e..83dfe0a 100644
--- a/pkg/compiler/test/custom_split/data/diamond/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond/constraints.json
@@ -1,42 +1,42 @@
 [
   {
     "type": "reference",
-    "name": "s1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "s2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "s2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "s3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "s1",
-    "successor": "s2a"
+    "predecessor": "step1",
+    "successor": "step2a"
   },
   {
     "type": "order",
-    "predecessor": "s1",
-    "successor": "s2b"
+    "predecessor": "step1",
+    "successor": "step2b"
   },
   {
     "type": "order",
-    "predecessor": "s2a",
-    "successor": "s3"
+    "predecessor": "step2a",
+    "successor": "step3"
   },
   {
     "type": "order",
-    "predecessor": "s2b",
-    "successor": "s3"
+    "predecessor": "step2b",
+    "successor": "step3"
   }
 ]
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart b/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
new file mode 100644
index 0000000..b3a40ca
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2021, 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:isolate';
+
+import 'package:compiler/src/deferred_load/program_split_constraints/nodes.dart';
+import '../../constraint_harness.dart';
+
+void main(List<String> args, SendPort sendPort) {
+  waitForImportsAndInvoke(sendPort, processDeferredImports);
+}
+
+List<Node> processDeferredImports(List<String> imports) {
+  var builder = ProgramSplitBuilder();
+  return [
+    ...imports.map(builder.referenceNode),
+    builder.andNode('step2', ['step2a', 'step2b']),
+    builder.orderNode('step1', 'step2'),
+    builder.orderNode('step2', 'step3'),
+  ];
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/constraints.json b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
index 72d7e25..931a910 100644
--- a/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
@@ -1,40 +1,40 @@
 [
   {
     "type": "reference",
-    "name": "s1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "s2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "s2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "s3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "and",
-    "name": "s2",
+    "name": "step2",
     "nodes": [
-      "s2a",
-      "s2b"
+      "step2a",
+      "step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "s1",
-    "successor": "s2"
+    "predecessor": "step1",
+    "successor": "step2"
   },
   {
     "type": "order",
-    "predecessor": "s2",
-    "successor": "s3"
+    "predecessor": "step2",
+    "successor": "step3"
   }
 ]
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
new file mode 100644
index 0000000..6fdf62e
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2021, 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:isolate';
+
+import 'package:compiler/src/deferred_load/program_split_constraints/nodes.dart';
+import '../../constraint_harness.dart';
+
+void main(List<String> args, SendPort sendPort) {
+  waitForImportsAndInvoke(sendPort, processDeferredImports);
+}
+
+List<Node> processDeferredImports(List<String> imports) {
+  var builder = ProgramSplitBuilder();
+  return [
+    ...imports.map(builder.referenceNode),
+    builder.fuseNode('step2', ['step2a', 'step2b']),
+    builder.orderNode('step1', 'step2'),
+    builder.orderNode('step2', 'step3'),
+  ];
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
index 9fbb3cd..f170d18 100644
--- a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
@@ -1,40 +1,40 @@
 [
   {
     "type": "reference",
-    "name": "s1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "s2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "s2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "s3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "fuse",
-    "name": "s2",
+    "name": "step2",
     "nodes": [
-      "s2a",
-      "s2b"
+      "step2a",
+      "step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "s1",
-    "successor": "s2"
+    "predecessor": "step1",
+    "successor": "step2"
   },
   {
     "type": "order",
-    "predecessor": "s2",
-    "successor": "s3"
+    "predecessor": "step2",
+    "successor": "step3"
   }
 ]
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart b/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
new file mode 100644
index 0000000..659bf73
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2021, 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:isolate';
+
+import 'package:compiler/src/deferred_load/program_split_constraints/nodes.dart';
+import '../../constraint_harness.dart';
+
+void main(List<String> args, SendPort sendPort) {
+  waitForImportsAndInvoke(sendPort, processDeferredImports);
+}
+
+List<Node> processDeferredImports(List<String> imports) {
+  var builder = ProgramSplitBuilder();
+  return [
+    ...imports.map(builder.referenceNode),
+    builder.orNode('step2', ['step2a', 'step2b']),
+    builder.orderNode('step1', 'step2'),
+    builder.orderNode('step2', 'step3'),
+  ];
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/constraints.json b/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
index 310309a..5fcc300 100644
--- a/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
@@ -1,40 +1,40 @@
 [
   {
     "type": "reference",
-    "name": "s1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "s2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "s2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "s3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "or",
-    "name": "s2",
+    "name": "step2",
     "nodes": [
-      "s2a",
-      "s2b"
+      "step2a",
+      "step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "s1",
-    "successor": "s2"
+    "predecessor": "step1",
+    "successor": "step2"
   },
   {
     "type": "order",
-    "predecessor": "s2",
-    "successor": "s3"
+    "predecessor": "step2",
+    "successor": "step3"
   }
 ]
diff --git a/pkg/compiler/test/custom_split/data/two_branch/constraints.dart b/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
new file mode 100644
index 0000000..1e6ad05
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, 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:isolate';
+
+import 'package:compiler/src/deferred_load/program_split_constraints/nodes.dart';
+import '../../constraint_harness.dart';
+
+void main(List<String> args, SendPort sendPort) {
+  waitForImportsAndInvoke(sendPort, processDeferredImports);
+}
+
+List<Node> processDeferredImports(List<String> imports) {
+  var builder = ProgramSplitBuilder();
+  return [
+    ...imports.map(builder.referenceNode),
+    builder.orderNode('step1', 'step2a'),
+    builder.orderNode('step1', 'step2b'),
+  ];
+}
diff --git a/pkg/compiler/test/custom_split/data/two_branch/constraints.json b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
index 542cf85..8b86071 100644
--- a/pkg/compiler/test/custom_split/data/two_branch/constraints.json
+++ b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
@@ -1,27 +1,27 @@
 [
   {
     "type": "reference",
-    "name": "s1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "s2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "s2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "order",
-    "predecessor": "s1",
-    "successor": "s2a"
+    "predecessor": "step1",
+    "successor": "step2a"
   },
   {
     "type": "order",
-    "predecessor": "s1",
-    "successor": "s2b"
+    "predecessor": "step1",
+    "successor": "step2b"
   }
 ]
diff --git a/pkg/compiler/test/custom_split/data/two_step/constraints.dart b/pkg/compiler/test/custom_split/data/two_step/constraints.dart
new file mode 100644
index 0000000..9089c5c
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/constraints.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, 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:isolate';
+
+import 'package:compiler/src/deferred_load/program_split_constraints/nodes.dart';
+import '../../constraint_harness.dart';
+
+void main(List<String> args, SendPort sendPort) {
+  waitForImportsAndInvoke(sendPort, processDeferredImports);
+}
+
+List<Node> processDeferredImports(List<String> imports) {
+  var builder = ProgramSplitBuilder();
+  return [
+    ...imports.map(builder.referenceNode),
+    builder.orderNode('step1', 'step2'),
+    builder.orderNode('step2', 'step3'),
+  ];
+}
diff --git a/pkg/compiler/test/custom_split/data/two_step/constraints.json b/pkg/compiler/test/custom_split/data/two_step/constraints.json
index 31c29a1..b72db44 100644
--- a/pkg/compiler/test/custom_split/data/two_step/constraints.json
+++ b/pkg/compiler/test/custom_split/data/two_step/constraints.json
@@ -1,27 +1,27 @@
 [
   {
     "type": "reference",
-    "name": "s1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "s2",
+    "name": "step2",
     "import": "memory:sdk/tests/web/native/main.dart#step2"
   },
   {
     "type": "reference",
-    "name": "s3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "s1",
-    "successor": "s2"
+    "predecessor": "step1",
+    "successor": "step2"
   },
   {
     "type": "order",
-    "predecessor": "s2",
-    "successor": "s3"
+    "predecessor": "step2",
+    "successor": "step3"
   }
 ]
diff --git a/pkg/compiler/test/end_to_end/command_line_test.dart b/pkg/compiler/test/end_to_end/command_line_test.dart
index 5f0b7e9..ec0a78a 100644
--- a/pkg/compiler/test/end_to_end/command_line_test.dart
+++ b/pkg/compiler/test/end_to_end/command_line_test.dart
@@ -73,10 +73,10 @@
         out: 'out.js', readClosedWorld: 'foo.dill.world');
     await test([Flags.readClosedWorld, 'foo.dill', '--out=foo.js'],
         out: 'foo.js', readClosedWorld: 'foo.dill.world');
-    await test(['${Flags.readClosedWorld}=out.world', 'foo.world'],
+    await test(['${Flags.readClosedWorld}=out.world', 'foo.dill'],
         out: 'out.js', readClosedWorld: 'out.world');
     await test(
-        ['${Flags.readClosedWorld}=out.world', 'foo.world', '--out=foo.js'],
+        ['${Flags.readClosedWorld}=out.world', 'foo.dill', '--out=foo.js'],
         out: 'foo.js', readClosedWorld: 'out.world');
     await test(
       [Flags.readClosedWorld, Flags.writeData, 'foo.dill'],
diff --git a/pkg/compiler/test/end_to_end/dill_loader_test.dart b/pkg/compiler/test/end_to_end/dill_loader_test.dart
index 81cbfb7..7bf0330 100644
--- a/pkg/compiler/test/end_to_end/dill_loader_test.dart
+++ b/pkg/compiler/test/end_to_end/dill_loader_test.dart
@@ -13,9 +13,7 @@
 import 'package:compiler/src/kernel/dart2js_target.dart';
 import 'package:compiler/src/kernel/loader.dart';
 import 'package:expect/expect.dart';
-import 'package:front_end/src/api_prototype/front_end.dart';
-import 'package:front_end/src/compute_platform_binaries_location.dart'
-    show computePlatformBinariesLocation;
+import 'package:front_end/src/api_unstable/dart2js.dart';
 import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
 import 'package:kernel/target/targets.dart' show TargetFlags;
 
@@ -23,14 +21,14 @@
 /// than just string source files.
 main() {
   asyncTest(() async {
-    String filename = 'tests/corelib_2/list_literal_test.dart';
+    String filename = 'tests/corelib/list_literal_test.dart';
     Uri uri = Uri.base.resolve(filename);
-    DiagnosticCollector diagnostics = new DiagnosticCollector();
-    OutputCollector output = new OutputCollector();
-    Uri entryPoint = Uri.parse('memory:main.dill');
+    DiagnosticCollector diagnostics = DiagnosticCollector();
+    OutputCollector output = OutputCollector();
 
-    var options = new CompilerOptions()
-      ..target = new Dart2jsTarget("dart2js", new TargetFlags())
+    var options = CompilerOptions()
+      ..target = Dart2jsTarget("dart2js", TargetFlags(enableNullSafety: true))
+      ..nnbdMode = NnbdMode.Strong
       ..packagesFileUri = Uri.base.resolve('.packages')
       ..additionalDills = <Uri>[
         computePlatformBinariesLocation().resolve("dart2js_platform.dill"),
@@ -41,12 +39,12 @@
     List<int> kernelBinary =
         serializeComponent((await kernelForProgram(uri, options)).component);
     CompilerImpl compiler = compilerFor(
-        entryPoint: entryPoint,
+        entryPoint: uri,
         memorySourceFiles: {'main.dill': kernelBinary},
         diagnosticHandler: diagnostics,
         outputProvider: output);
     await compiler.setupSdk();
-    KernelResult result = await compiler.kernelLoader.load(entryPoint);
+    KernelResult result = await compiler.kernelLoader.load();
     compiler.frontendStrategy.registerLoadedLibraries(result);
 
     Expect.equals(0, diagnostics.errors.length);
diff --git a/pkg/compiler/test/end_to_end/exit_code_test.dart b/pkg/compiler/test/end_to_end/exit_code_test.dart
index abe4757..b830f92 100644
--- a/pkg/compiler/test/end_to_end/exit_code_test.dart
+++ b/pkg/compiler/test/end_to_end/exit_code_test.dart
@@ -61,9 +61,9 @@
   }
 
   @override
-  Future<bool> run(Uri uri) {
+  Future<bool> run() {
     test('Compiler.run');
-    return super.run(uri);
+    return super.run();
   }
 
   test(String marker) {
@@ -161,7 +161,7 @@
       // handler = (uri, begin, end, message, kind) {};
       Compiler compiler = new TestCompiler(compilerInput, compilerOutput,
           compilerDiagnostics, compilerOptions, marker, type, onTest);
-      return compiler.run(compilerOptions.entryPoint).then((bool success) {
+      return compiler.run().then((bool success) {
         return new api.CompilationResult(compiler, isSuccess: success);
       });
     }
diff --git a/pkg/compiler/test/end_to_end/modular_loader_test.dart b/pkg/compiler/test/end_to_end/modular_loader_test.dart
index 3dccb70..35c1066 100644
--- a/pkg/compiler/test/end_to_end/modular_loader_test.dart
+++ b/pkg/compiler/test/end_to_end/modular_loader_test.dart
@@ -13,13 +13,10 @@
 import 'package:compiler/src/kernel/dart2js_target.dart';
 import 'package:compiler/src/kernel/loader.dart';
 import 'package:expect/expect.dart';
-import 'package:front_end/src/api_prototype/experimental_flags.dart'
-    show ExperimentalFlag;
 import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/api_prototype/memory_file_system.dart';
 import 'package:front_end/src/api_prototype/standard_file_system.dart';
-import 'package:front_end/src/compute_platform_binaries_location.dart'
-    show computePlatformBinariesLocation;
+import 'package:front_end/src/api_unstable/dart2js.dart';
 import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
 import 'package:kernel/ast.dart';
 import 'package:kernel/target/targets.dart' show TargetFlags;
@@ -35,17 +32,20 @@
         ['c2.dart'], {'c2.dart': sourceC, 'a.dill': aDill, 'b.dill': bDill},
         deps: ['a.dill', 'b.dill']);
 
-    DiagnosticCollector diagnostics = new DiagnosticCollector();
-    OutputCollector output = new OutputCollector();
-    Uri entryPoint = Uri.parse('memory:c.dill');
+    DiagnosticCollector diagnostics = DiagnosticCollector();
+    OutputCollector output = OutputCollector();
+    Uri entryPoint = Uri.parse('org-dartlang-test:///c2.dart');
     CompilerImpl compiler = compilerFor(
         entryPoint: entryPoint,
-        options: ['--dill-dependencies=memory:a.dill,memory:b.dill'],
+        options: [
+          '--input-dill=memory:c.dill',
+          '--dill-dependencies=memory:a.dill,memory:b.dill'
+        ],
         memorySourceFiles: {'a.dill': aDill, 'b.dill': bDill, 'c.dill': cDill},
         diagnosticHandler: diagnostics,
         outputProvider: output);
     await compiler.setupSdk();
-    KernelResult result = await compiler.kernelLoader.load(entryPoint);
+    KernelResult result = await compiler.kernelLoader.load();
     compiler.frontendStrategy.registerLoadedLibraries(result);
 
     Expect.equals(0, diagnostics.errors.length);
@@ -65,7 +65,7 @@
 /// Generate a component for a modular complation unit.
 Future<List<int>> compileUnit(List<String> inputs, Map<String, dynamic> sources,
     {List<String> deps: const []}) async {
-  var fs = new MemoryFileSystem(_defaultDir);
+  var fs = MemoryFileSystem(_defaultDir);
   sources.forEach((name, data) {
     var entity = fs.entityForUri(toTestUri(name));
     if (data is String) {
@@ -78,9 +78,10 @@
     computePlatformBinariesLocation().resolve("dart2js_platform.dill"),
   ]..addAll(deps.map(toTestUri));
   fs.entityForUri(toTestUri('.packages')).writeAsStringSync('');
-  var options = new CompilerOptions()
-    ..target = new Dart2jsTarget("dart2js", new TargetFlags())
-    ..fileSystem = new TestFileSystem(fs)
+  var options = CompilerOptions()
+    ..target = Dart2jsTarget("dart2js", TargetFlags(enableNullSafety: true))
+    ..fileSystem = TestFileSystem(fs)
+    ..nnbdMode = NnbdMode.Strong
     ..additionalDills = additionalDills
     ..packagesFileUri = toTestUri('.packages')
     ..explicitExperimentalFlags = {ExperimentalFlag.nonNullable: true};
@@ -115,30 +116,27 @@
 }
 
 const sourceA = '''
-// @dart=2.7
 class A0 {
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer = StringBuffer();
 }
 ''';
 
 const sourceB = '''
-// @dart=2.7
 import 'a0.dart';
 
 class B1 extends A0 {
-  A0 get foo => null;
+  A0? get foo => null;
 }
 
-A0 createA0() => new A0();
+A0 createA0() => A0();
 ''';
 
 const sourceC = '''
-// @dart=2.7
 import 'b1.dart';
 
 class C2 extends B1 {
   final foo = createA0();
 }
 
-main() => print(new C2().foo.buffer.toString());
+main() => print(C2().foo.buffer.toString());
 ''';
diff --git a/pkg/compiler/test/end_to_end/user_crash_test.dart b/pkg/compiler/test/end_to_end/user_crash_test.dart
index ab7f26f..6dfea6d 100644
--- a/pkg/compiler/test/end_to_end/user_crash_test.dart
+++ b/pkg/compiler/test/end_to_end/user_crash_test.dart
@@ -31,8 +31,8 @@
     var cantReadFile =
         templateCantReadFile.withArguments(entryPoint, EXCEPTION);
     List<String> expectedLines = [
-      "Error: ${cantReadFile.message}",
-      "Error: ${messageMissingMain.message}",
+      "Error: ${cantReadFile.problemMessage}",
+      "Error: ${messageMissingMain.problemMessage}",
     ];
     test('Throw in input provider',
         await run(memorySourceFiles: new CrashingMap()),
diff --git a/pkg/compiler/test/equivalence/id_equivalence_helper.dart b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
index 20993eb..d0288ee 100644
--- a/pkg/compiler/test/equivalence/id_equivalence_helper.dart
+++ b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
@@ -121,7 +121,7 @@
 /// [entryPoint] and [memorySourceFiles].
 ///
 /// Actual data is computed using [computeMemberData].
-Future<CompiledData<T>> computeData<T>(Uri entryPoint,
+Future<CompiledData<T>> computeData<T>(String name, Uri entryPoint,
     Map<String, String> memorySourceFiles, DataComputer<T> dataComputer,
     {List<String> options: const <String>[],
     bool verbose: false,
@@ -130,7 +130,8 @@
     bool forUserLibrariesOnly: true,
     bool skipUnprocessedMembers: false,
     bool skipFailedCompilations: false,
-    Iterable<Id> globalIds: const <Id>[]}) async {
+    Iterable<Id> globalIds: const <Id>[],
+    Future<void> verifyCompiler(String test, Compiler compiler)}) async {
   OutputCollector outputCollector = new OutputCollector();
   DiagnosticCollector diagnosticCollector = new DiagnosticCollector();
   Uri packageConfig;
@@ -166,6 +167,9 @@
     print('------------------------------------------------------------------');
   }
   Compiler compiler = result.compiler;
+  if (verifyCompiler != null) {
+    await verifyCompiler(name, compiler);
+  }
 
   Map<Uri, Map<Id, ActualData<T>>> actualMaps = <Uri, Map<Id, ActualData<T>>>{};
   Map<Id, ActualData<T>> globalData = <Id, ActualData<T>>{};
@@ -403,7 +407,8 @@
     int shardIndex: 0,
     void onTest(Uri uri),
     List<TestConfig> testedConfigs = const [],
-    Map<String, List<String>> perTestOptions = const {}}) async {
+    Map<String, List<String>> perTestOptions = const {},
+    Future<void> verifyCompiler(String test, Compiler compiler)}) async {
   if (testedConfigs.isEmpty) testedConfigs = defaultInternalConfigs;
   Set<String> testedMarkers =
       testedConfigs.map((config) => config.marker).toSet();
@@ -455,7 +460,8 @@
             succinct: succinct,
             testAfterFailures: testAfterFailures,
             forUserLibrariesOnly: forUserLibrariesOnly,
-            printCode: printCode);
+            printCode: printCode,
+            verifyCompiler: verifyCompiler);
       }
     }
     return results;
@@ -484,17 +490,19 @@
     bool succinct: false,
     bool printCode: false,
     bool forUserLibrariesOnly: true,
-    bool testAfterFailures: false}) async {
+    bool testAfterFailures: false,
+    Future<void> verifyCompiler(String test, Compiler compiler)}) async {
   MemberAnnotations<IdValue> annotations =
       testData.expectedMaps[testConfiguration.marker];
-  CompiledData<T> compiledData = await computeData(
+  CompiledData<T> compiledData = await computeData(testData.name,
       testData.entryPoint, testData.memorySourceFiles, dataComputer,
       options: [...options, ...testConfiguration.options],
       verbose: verbose,
       printCode: printCode,
       testFrontend: dataComputer.testFrontend,
       forUserLibrariesOnly: forUserLibrariesOnly,
-      globalIds: annotations.globalData.keys);
+      globalIds: annotations.globalData.keys,
+      verifyCompiler: verifyCompiler);
   return await checkCode(testConfiguration.name, testData.testFileUri,
       testData.code, annotations, compiledData, dataComputer.dataValidator,
       filterActualData: filterActualData,
diff --git a/pkg/compiler/test/equivalence/show_helper.dart b/pkg/compiler/test/equivalence/show_helper.dart
index 754f2e2..ecc6257 100644
--- a/pkg/compiler/test/equivalence/show_helper.dart
+++ b/pkg/compiler/test/equivalence/show_helper.dart
@@ -52,7 +52,7 @@
     options.add(Flags.omitImplicitChecks);
   }
   Dart2jsCompiledData<T> data = await computeData<T>(
-      entryPoint, const {}, dataComputer,
+      file, entryPoint, const {}, dataComputer,
       options: options,
       testFrontend: dataComputer.testFrontend,
       forUserLibrariesOnly: false,
diff --git a/pkg/compiler/test/helpers/memory_compiler.dart b/pkg/compiler/test/helpers/memory_compiler.dart
index 3a19a1b..3b6ca9a 100644
--- a/pkg/compiler/test/helpers/memory_compiler.dart
+++ b/pkg/compiler/test/helpers/memory_compiler.dart
@@ -108,7 +108,7 @@
   if (beforeRun != null) {
     beforeRun(compiler);
   }
-  bool isSuccess = await compiler.run(entryPoint);
+  bool isSuccess = await compiler.run();
   fe.InitializedCompilerState compilerState = kernelInitializedCompilerState =
       compiler.kernelLoader.initializedCompilerState;
   return new CompilationResult(compiler,
@@ -169,7 +169,7 @@
 
   CompilerOptions compilerOptions = CompilerOptions.parse(options,
       librariesSpecificationUri: librariesSpecificationUri)
-    ..entryPoint = entryPoint
+    ..entryUri = entryPoint
     ..environment = {}
     ..packageConfig = packageConfig;
   compilerOptions.kernelInitializedCompilerState =
diff --git a/pkg/compiler/test/impact/data/jsinterop.dart b/pkg/compiler/test/impact/data/jsinterop.dart
index 3f41558..b39e444 100644
--- a/pkg/compiler/test/impact/data/jsinterop.dart
+++ b/pkg/compiler/test/impact/data/jsinterop.dart
@@ -43,8 +43,7 @@
     native:OverconstrainedError,
     native:PositionError,
     native:SensorErrorEvent,
-    native:SpeechRecognitionError,
-    native:SqlError]
+    native:SpeechRecognitionError]
   */
   @JS()
   external double method();
diff --git a/pkg/compiler/test/impact/data/jsinterop_setter1.dart b/pkg/compiler/test/impact/data/jsinterop_setter1.dart
index b2b6e34..eb917cb 100644
--- a/pkg/compiler/test/impact/data/jsinterop_setter1.dart
+++ b/pkg/compiler/test/impact/data/jsinterop_setter1.dart
@@ -61,7 +61,6 @@
   native:PositionError,
   native:SensorErrorEvent,
   native:SpeechRecognitionError,
-  native:SqlError,
   param:Function*]
 */
 @JS()
diff --git a/pkg/compiler/test/impact/data/jsinterop_setter2.dart b/pkg/compiler/test/impact/data/jsinterop_setter2.dart
index 4c63bbb..7f5b60b 100644
--- a/pkg/compiler/test/impact/data/jsinterop_setter2.dart
+++ b/pkg/compiler/test/impact/data/jsinterop_setter2.dart
@@ -68,7 +68,6 @@
   native:PositionError,
   native:SensorErrorEvent,
   native:SpeechRecognitionError,
-  native:SqlError,
   param:void Function(String*,File*)*]
 */
 @JS()
diff --git a/pkg/compiler/test/impact/data/native.dart b/pkg/compiler/test/impact/data/native.dart
index b4d4c7f..8b4031b 100644
--- a/pkg/compiler/test/impact/data/native.dart
+++ b/pkg/compiler/test/impact/data/native.dart
@@ -29,7 +29,7 @@
  type=[inst:JSNull,inst:JSString,native:bool,native:int]
 */
 testJSCall() => foreign.JS(
-    'int|bool|NativeUint8List|Rectangle|IdbFactory|SqlDatabase|TypedData|ContextAttributes',
+    'int|bool|NativeUint8List|Rectangle|IdbFactory|TypedData|ContextAttributes',
     '#',
     null);
 
diff --git a/pkg/compiler/test/js/js_parser_test.dart b/pkg/compiler/test/js/js_parser_test.dart
index d338224..abbed83 100644
--- a/pkg/compiler/test/js/js_parser_test.dart
+++ b/pkg/compiler/test/js/js_parser_test.dart
@@ -18,6 +18,32 @@
   }
 }
 
+/// Tests an arrow expression with implicit returns allowed and disallowed.
+///
+/// Only checks the immediate, outermost arrow function.
+testArrowFunction(String arrowExpression,
+    [String implicitReturnExpect = "", String noImplicitReturnExpect = ""]) {
+  jsAst.ArrowFunction fun = js(arrowExpression);
+  jsAst.ArrowFunction implicitReturnFun = jsAst.ArrowFunction(
+      fun.params, fun.body,
+      asyncModifier: fun.asyncModifier, implicitReturnAllowed: true);
+  jsAst.ArrowFunction noImplicitReturnFun = jsAst.ArrowFunction(
+      fun.params, fun.body,
+      asyncModifier: fun.asyncModifier, implicitReturnAllowed: false);
+  String implicitReturnText =
+      jsAst.prettyPrint(implicitReturnFun, allowVariableMinification: false);
+  String noImplicitReturnText =
+      jsAst.prettyPrint(noImplicitReturnFun, allowVariableMinification: false);
+  String comparison =
+      implicitReturnExpect == "" ? arrowExpression : implicitReturnExpect;
+  Expect.stringEquals(comparison, implicitReturnText);
+  if (noImplicitReturnExpect == "") {
+    Expect.stringEquals(comparison, noImplicitReturnText);
+  } else {
+    Expect.stringEquals(noImplicitReturnExpect, noImplicitReturnText);
+  }
+}
+
 testError(String expression, [String expect = ""]) {
   bool doCheck(exception) {
     final exceptionText = '$exception';
@@ -193,13 +219,17 @@
   testExpression("a = b = c");
   testExpression("var a = b = c");
   // Arrow functions.
-  testExpression("(x) => x", "x => x");
-  testExpression("(x, y) => {\n  return x + y;\n}");
-  testExpression("() => 42");
-  testExpression('() => ({foo: "bar"})');
-  testExpression("() => {}", """
+  testArrowFunction("(x) => x", "x => x");
+  testArrowFunction(
+      "(x) => {\n  return x;\n}", "x => x", "x => {\n  return x;\n}");
+  testArrowFunction("(x, y) => {\n  return x + y;\n}", "(x, y) => x + y",
+      "(x, y) => {\n  return x + y;\n}");
+  testArrowFunction("() => 42");
+  testArrowFunction('() => ({foo: "bar"})');
+  testArrowFunction("() => {}", """
 () => {
 }""");
+  // Arrow function invocation.
   testExpression("(() => 1)()");
   testExpression("((x) => x)(y)", "(x => x)(y)");
   testExpression("(() => {x = 1;})()", """
diff --git a/pkg/compiler/test/model/enqueuer_test.dart b/pkg/compiler/test/model/enqueuer_test.dart
index 797896c..9102ac5 100644
--- a/pkg/compiler/test/model/enqueuer_test.dart
+++ b/pkg/compiler/test/model/enqueuer_test.dart
@@ -159,7 +159,7 @@
 '''
   }, options: [
     Flags.disableInlining,
-  ]);
+  ], entryPoint: Uri.parse('memory:main.dart'));
 
   void checkInvariant(
       Enqueuer enqueuer, ElementEnvironment elementEnvironment) {
@@ -277,7 +277,7 @@
     }
   };
 
-  await compiler.run(Uri.parse('memory:main.dart'));
+  await compiler.run();
 
   checkLiveMembers(
       compiler.enqueuer.resolutionEnqueuerForTesting,
diff --git a/pkg/compiler/test/rti/data/instantiation1.dart b/pkg/compiler/test/rti/data/instantiation1.dart
index c838bbe..0ea6b96 100644
--- a/pkg/compiler/test/rti/data/instantiation1.dart
+++ b/pkg/compiler/test/rti/data/instantiation1.dart
@@ -11,6 +11,7 @@
 typedef int F<R>(R a);
 
 /*spec.class: B:explicit=[int* Function(B.S*)*],implicit=[B.S],indirect,needsArgs*/
+/*prod.class: B:needsArgs*/
 class B<S> {
   F<S> c;
 
diff --git a/pkg/compiler/test/rti/data/instantiation3.dart b/pkg/compiler/test/rti/data/instantiation3.dart
index 682672d..4c13f62 100644
--- a/pkg/compiler/test/rti/data/instantiation3.dart
+++ b/pkg/compiler/test/rti/data/instantiation3.dart
@@ -11,6 +11,7 @@
 typedef int F<R>(R a);
 
 /*spec.class: B:direct,explicit=[int* Function(B.S*)*],implicit=[B.S],needsArgs*/
+/*prod.class: B:needsArgs*/
 class B<S> {
   F<S> c;
 
diff --git a/pkg/compiler/test/rti/data/instantiation5.dart b/pkg/compiler/test/rti/data/instantiation5.dart
index 525be33..3c37996 100644
--- a/pkg/compiler/test/rti/data/instantiation5.dart
+++ b/pkg/compiler/test/rti/data/instantiation5.dart
@@ -11,6 +11,7 @@
 typedef int F<R>(R a);
 
 /*spec.member: method:implicit=[method.S],indirect,needsArgs*/
+/*prod.member: method:needsArgs*/
 method<S>() {
   F<S> c;
 
diff --git a/pkg/compiler/test/rti/data/instantiation7.dart b/pkg/compiler/test/rti/data/instantiation7.dart
index a47924b..216c83d 100644
--- a/pkg/compiler/test/rti/data/instantiation7.dart
+++ b/pkg/compiler/test/rti/data/instantiation7.dart
@@ -21,6 +21,7 @@
 typedef int F3<R, P, Q>(R a, P b, Q c);
 
 /*spec.member: method:implicit=[method.X,method.Y,method.Z],indirect,needsArgs*/
+/*prod.member: method:needsArgs*/
 method<X, Y, Z>() {
   F1<X> c1;
   F2<X, Y> c2;
diff --git a/pkg/compiler/test/rti/data/instantiation8.dart b/pkg/compiler/test/rti/data/instantiation8.dart
index f3750a1..0e57865 100644
--- a/pkg/compiler/test/rti/data/instantiation8.dart
+++ b/pkg/compiler/test/rti/data/instantiation8.dart
@@ -14,6 +14,7 @@
   if (a != b) throw '$a != $b';
 }
 
+/*member: test:needsArgs*/
 test<T>(f) {
   Class<T> Function() g = create;
   equals(f, g);
diff --git a/pkg/compiler/test/serialization/serialization_test_helper.dart b/pkg/compiler/test/serialization/serialization_test_helper.dart
index 2507434..0a7b306 100644
--- a/pkg/compiler/test/serialization/serialization_test_helper.dart
+++ b/pkg/compiler/test/serialization/serialization_test_helper.dart
@@ -152,12 +152,13 @@
   File(closedWorldFileUri.path).writeAsBytesSync(closedWorldBytes);
   OutputCollector collector3b = new OutputCollector();
   CompilationResult result3b = await runCompiler(
-      entryPoint: dillFileUri,
+      entryPoint: entryPoint,
       memorySourceFiles: memorySourceFiles,
       packageConfig: packageConfig,
       librariesSpecificationUri: librariesSpecificationUri,
       options: commonOptions +
           [
+            '${Flags.inputDill}=$dillFileUri',
             '${Flags.readClosedWorld}=$closedWorldFileUri',
             '${Flags.writeData}=global.data'
           ],
diff --git a/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_field.dart b/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_field.dart
new file mode 100644
index 0000000..161a5d2
--- /dev/null
+++ b/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_field.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.7
+
+main() {
+  Class. /*1:main*/ field;
+}
+
+class Class {
+  static dynamic field = /*2:Class.field*/ throw '>ExceptionMarker<';
+}
diff --git a/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_field_indirect.dart b/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_field_indirect.dart
new file mode 100644
index 0000000..bad3bbb
--- /dev/null
+++ b/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_field_indirect.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.7
+
+main() {
+  Class. /*1:main*/ field;
+}
+
+class Class {
+  static dynamic field = /*2:Class.field*/ test();
+  @pragma('dart2js:noInline')
+  static test() {
+    /*3:Class.test*/ throw '>ExceptionMarker<';
+  }
+}
diff --git a/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_final_field.dart b/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_final_field.dart
new file mode 100644
index 0000000..a7f0152
--- /dev/null
+++ b/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_final_field.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.7
+
+main() {
+  Class. /*1:main*/ field;
+}
+
+class Class {
+  static final field = /*2:Class.field*/ throw '>ExceptionMarker<';
+}
diff --git a/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_final_field_indirect.dart b/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_final_field_indirect.dart
new file mode 100644
index 0000000..7adc1cc
--- /dev/null
+++ b/pkg/compiler/test/sourcemaps/stacktrace/throw_in_lazy_final_field_indirect.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.7
+
+main() {
+  Class. /*1:main*/ field;
+}
+
+class Class {
+  static final field = /*2:Class.field*/ test();
+  @pragma('dart2js:noInline')
+  static test() {
+    /*3:Class.test*/ throw '>ExceptionMarker<';
+  }
+}
diff --git a/pkg/compiler/testing.json b/pkg/compiler/testing.json
index 7885980..923911a 100644
--- a/pkg/compiler/testing.json
+++ b/pkg/compiler/testing.json
@@ -3,7 +3,7 @@
 "":"for details. All rights reserved. Use of this source code is governed by a",
 "":"BSD-style license that can be found in the LICENSE.md file.",
 
-  "packages": "../../.packages",
+  "packages": "../../.dart_tool/package_config.json",
 
   "analyze": {
     "options": "analysis_options.yaml",
diff --git a/pkg/compiler/tool/modular_test_suite.dart b/pkg/compiler/tool/modular_test_suite.dart
index 4d42ff3..6195548 100644
--- a/pkg/compiler/tool/modular_test_suite.dart
+++ b/pkg/compiler/tool/modular_test_suite.dart
@@ -73,6 +73,7 @@
 const codeId1 = ShardDataId(codeId, 1);
 const jsId = DataId("js");
 const txtId = DataId("txt");
+const fakeRoot = 'dev-dart-app:/';
 
 String _packageConfigEntry(String name, Uri root,
     {Uri packageRoot, LanguageVersion version}) {
@@ -185,8 +186,8 @@
       // When no flags are passed, we can skip compilation and reuse the
       // platform.dill created by build.py.
       if (flags.isEmpty) {
-        var platform =
-            computePlatformBinariesLocation().resolve("dart2js_platform.dill");
+        var platform = computePlatformBinariesLocation()
+            .resolve("dart2js_platform_unsound.dill");
         var destination = root.resolveUri(toUri(module, dillId));
         if (_options.verbose) {
           print('command:\ncp $platform $destination');
@@ -260,7 +261,7 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, dillId)}',
+      '${Flags.inputDill}=${toUri(module, dillId)}',
       if (dillDependencies.isNotEmpty)
         '--dill-dependencies=${dillDependencies.join(',')}',
       '--out=${toUri(module, modularUpdatedDillId)}',
@@ -330,12 +331,14 @@
       _dart2jsScript,
       // TODO(sigmund): remove this dependency on libraries.json
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, dillId)}',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
+      '${Flags.inputDill}=${toUri(module, dillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.dillDependencies}=${dillDependencies.join(',')}',
       if (useModularAnalysis)
         '${Flags.readModularAnalysis}=${dataDependencies.join(',')}',
       '${Flags.writeClosedWorld}=${toUri(module, closedWorldId)}',
+      Flags.noClosedWorldInData,
       '--out=${toUri(module, globalUpdatedDillId)}',
     ];
     var result =
@@ -378,7 +381,8 @@
       _dart2jsScript,
       // TODO(sigmund): remove this dependency on libraries.json
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, globalUpdatedDillId)}',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
+      '${Flags.inputDill}=${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
       '${Flags.writeData}=${toUri(module, globalDataId)}',
@@ -430,7 +434,8 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, globalUpdatedDillId)}',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
+      '${Flags.inputDill}=${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
       '${Flags.readData}=${toUri(module, globalDataId)}',
@@ -482,7 +487,8 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, globalUpdatedDillId)}',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
+      '${Flags.inputDill}=${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '${Flags.enableLanguageExperiments}=$flag',
       '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
       '${Flags.readData}=${toUri(module, globalDataId)}',
@@ -529,6 +535,7 @@
       _dart2jsScript,
       // TODO(sigmund): remove this dependency on libraries.json
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
       '${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
@@ -580,6 +587,7 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
       '${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.readData}=${toUri(module, globalDataId)}',
@@ -627,6 +635,7 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
       '${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '${Flags.enableLanguageExperiments}=$flag',
       '${Flags.readData}=${toUri(module, globalDataId)}',
diff --git a/pkg/dart2js_info/analysis_options.yaml b/pkg/dart2js_info/analysis_options.yaml
new file mode 100644
index 0000000..7ad2eaf
--- /dev/null
+++ b/pkg/dart2js_info/analysis_options.yaml
@@ -0,0 +1,6 @@
+include: package:lints/recommended.yaml
+
+analyzer:
+  errors:
+    # Until the protobuf package generates the right code - or the right ignores
+    constant_identifier_names: ignore
diff --git a/pkg/dart2js_info/bin/src/code_deps.dart b/pkg/dart2js_info/bin/src/code_deps.dart
index 91b9222..056e08b 100644
--- a/pkg/dart2js_info/bin/src/code_deps.dart
+++ b/pkg/dart2js_info/bin/src/code_deps.dart
@@ -37,16 +37,20 @@
 import 'usage_exception.dart';
 
 class CodeDepsCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "code_deps";
+  @override
   final String description = "";
 
   CodeDepsCommand() {
-    addSubcommand(new _SomePathQuery());
+    addSubcommand(_SomePathQuery());
   }
 }
 
 class _SomePathQuery extends Command<void> with PrintUsageException {
+  @override
   final String name = "some_path";
+  @override
   final String description = "find a call-graph path between two elements.";
 
   @override
@@ -62,9 +66,9 @@
     var graph = graphFromInfo(info);
 
     var source = info.functions
-        .firstWhere(_longNameMatcher(new RegExp(args[1])), orElse: () => null);
+        .firstWhere(_longNameMatcher(RegExp(args[1])), orElse: () => null);
     var target = info.functions
-        .firstWhere(_longNameMatcher(new RegExp(args[2])), orElse: () => null);
+        .firstWhere(_longNameMatcher(RegExp(args[2])), orElse: () => null);
     print('query: some_path');
     if (source == null) {
       usageException("source '${args[1]}' not found in '${args[0]}'");
@@ -74,7 +78,7 @@
       usageException("target '${args[2]}' not found in '${args[0]}'");
     }
     print('target: ${longName(target)}');
-    var path = new SomePathQuery(source, target).run(graph);
+    var path = SomePathQuery(source, target).run(graph);
     if (path.isEmpty) {
       print('result: no path found');
     } else {
@@ -103,12 +107,12 @@
 
   List<Info> run(Graph<Info> graph) {
     var seen = <Info, Info>{source: null};
-    var queue = new Queue<Info>();
+    var queue = Queue<Info>();
     queue.addLast(source);
     while (queue.isNotEmpty) {
       var node = queue.removeFirst();
       if (identical(node, target)) {
-        var result = new Queue<Info>();
+        var result = Queue<Info>();
         while (node != null) {
           result.addFirst(node);
           node = seen[node];
@@ -125,7 +129,7 @@
   }
 }
 
-typedef bool LongNameMatcher(FunctionInfo info);
+typedef LongNameMatcher = bool Function(FunctionInfo info);
 
 LongNameMatcher _longNameMatcher(RegExp regexp) =>
     (e) => regexp.hasMatch(longName(e));
diff --git a/pkg/dart2js_info/bin/src/convert.dart b/pkg/dart2js_info/bin/src/convert.dart
index f79233d..7439957 100644
--- a/pkg/dart2js_info/bin/src/convert.dart
+++ b/pkg/dart2js_info/bin/src/convert.dart
@@ -11,13 +11,15 @@
 
 /// This tool reports how code is divided among deferred chunks.
 class ConvertCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "convert";
+  @override
   final String description = "Convert between info formats.";
 
   ConvertCommand() {
-    _addSubcommand(new ToJsonCommand());
-    _addSubcommand(new ToBinaryCommand());
-    _addSubcommand(new ToProtoCommand());
+    _addSubcommand(ToJsonCommand());
+    _addSubcommand(ToBinaryCommand());
+    _addSubcommand(ToProtoCommand());
   }
 
   _addSubcommand(Command<void> command) {
diff --git a/pkg/dart2js_info/bin/src/coverage_log_server.dart b/pkg/dart2js_info/bin/src/coverage_log_server.dart
index d43d410..f86654a 100644
--- a/pkg/dart2js_info/bin/src/coverage_log_server.dart
+++ b/pkg/dart2js_info/bin/src/coverage_log_server.dart
@@ -31,7 +31,9 @@
 import 'usage_exception.dart';
 
 class CoverageLogServerCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = 'coverage_server';
+  @override
   final String description = 'Server to gather code coverage data';
 
   CoverageLogServerCommand() {
@@ -46,30 +48,29 @@
               ' into the .js file',
           defaultsTo: '')
       ..addOption('out',
-          abbr: 'o',
-          help: 'output log file',
-          defaultsTo: _DEFAULT_OUT_TEMPLATE);
+          abbr: 'o', help: 'output log file', defaultsTo: _defaultOutTemplate);
   }
 
+  @override
   void run() async {
     if (argResults.rest.isEmpty) {
       usageException('Missing arguments: <dart2js-out-file> [<html-file>]');
     }
 
     var jsPath = argResults.rest[0];
-    var htmlPath = null;
+    String htmlPath;
     if (argResults.rest.length > 1) {
       htmlPath = argResults.rest[1];
     }
     var outPath = argResults['out'];
-    if (outPath == _DEFAULT_OUT_TEMPLATE) outPath = '$jsPath.coverage.json';
-    var server = new _Server(argResults['host'], int.parse(argResults['port']),
+    if (outPath == _defaultOutTemplate) outPath = '$jsPath.coverage.json';
+    var server = _Server(argResults['host'], int.parse(argResults['port']),
         jsPath, htmlPath, outPath, argResults['uri-prefix']);
     await server.run();
   }
 }
 
-const _DEFAULT_OUT_TEMPLATE = '<dart2js-out-file>.coverage.json';
+const _defaultOutTemplate = '<dart2js-out-file>.coverage.json';
 
 class _Server {
   /// Server hostname, typically `localhost`,  but can be `0.0.0.0`.
@@ -102,12 +103,11 @@
   /// against dump-info data.
   Map data = {};
 
-  String get _serializedData => new JsonEncoder.withIndent(' ').convert(data);
+  String get _serializedData => JsonEncoder.withIndent(' ').convert(data);
 
-  _Server(this.hostname, this.port, String jsPath, this.htmlPath, this.outPath,
+  _Server(this.hostname, this.port, this.jsPath, this.htmlPath, this.outPath,
       String prefix)
-      : jsPath = jsPath,
-        jsCode = _adjustRequestUrl(new File(jsPath).readAsStringSync(), prefix),
+      : jsCode = _adjustRequestUrl(File(jsPath).readAsStringSync(), prefix),
         prefix = _normalize(prefix);
 
   run() async {
@@ -135,29 +135,29 @@
         urlPath == _expectedPath(baseHtmlName)) {
       var contents = htmlPath == null
           ? '<html><script src="$baseJsName"></script>'
-          : await new File(htmlPath).readAsString();
-      return new shelf.Response.ok(contents, headers: HTML_HEADERS);
+          : await File(htmlPath).readAsString();
+      return shelf.Response.ok(contents, headers: _htmlHeaders);
     }
 
     if (urlPath == _expectedPath(baseJsName)) {
-      return new shelf.Response.ok(jsCode, headers: JS_HEADERS);
+      return shelf.Response.ok(jsCode, headers: _jsHeaders);
     }
 
     // Handle POST requests to record coverage data, and GET requests to display
     // the currently coverage results.
     if (urlPath == _expectedPath('coverage')) {
       if (request.method == 'GET') {
-        return new shelf.Response.ok(_serializedData, headers: TEXT_HEADERS);
+        return shelf.Response.ok(_serializedData, headers: _textHeaders);
       }
 
       if (request.method == 'POST') {
         _record(jsonDecode(await request.readAsString()));
-        return new shelf.Response.ok("Thanks!");
+        return shelf.Response.ok("Thanks!");
       }
     }
 
     // Any other request is not supported.
-    return new shelf.Response.notFound('Not found: "$urlPath"');
+    return shelf.Response.notFound('Not found: "$urlPath"');
   }
 
   _record(List entries) {
@@ -174,8 +174,8 @@
   _enqueueSave() async {
     if (!_savePending) {
       _savePending = true;
-      await new Future.delayed(new Duration(seconds: 3));
-      await new File(outPath).writeAsString(_serializedData);
+      await Future.delayed(Duration(seconds: 3));
+      await File(outPath).writeAsString(_serializedData);
       var diff = data.length - _total;
       print(diff == 0
           ? ' - no new element covered'
@@ -215,6 +215,6 @@
   return '$hook$code';
 }
 
-const HTML_HEADERS = const {'content-type': 'text/html'};
-const JS_HEADERS = const {'content-type': 'text/javascript'};
-const TEXT_HEADERS = const {'content-type': 'text/plain'};
+const _htmlHeaders = {'content-type': 'text/html'};
+const _jsHeaders = {'content-type': 'text/javascript'};
+const _textHeaders = {'content-type': 'text/plain'};
diff --git a/pkg/dart2js_info/bin/src/debug_info.dart b/pkg/dart2js_info/bin/src/debug_info.dart
index 5aa7607..6199ee4 100644
--- a/pkg/dart2js_info/bin/src/debug_info.dart
+++ b/pkg/dart2js_info/bin/src/debug_info.dart
@@ -7,7 +7,6 @@
 library dart2js_info.bin.debug_info;
 
 import 'package:args/command_runner.dart';
-
 import 'package:dart2js_info/info.dart';
 import 'package:dart2js_info/src/graph.dart';
 import 'package:dart2js_info/src/io.dart';
@@ -16,7 +15,9 @@
 import 'usage_exception.dart';
 
 class DebugCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "debug";
+  @override
   final String description = "Dart2js-team diagnostics on a dump-info file.";
 
   DebugCommand() {
@@ -24,9 +25,10 @@
         help: "Show detailed data for a library with the given name");
   }
 
+  @override
   void run() async {
     var args = argResults.rest;
-    if (args.length < 1) {
+    if (args.isEmpty) {
       usageException('Missing argument: info.data');
     }
 
@@ -43,24 +45,22 @@
 /// Validates that codesize of elements adds up to total codesize.
 validateSize(AllInfo info, String debugLibName) {
   // Gather data from visiting all info elements.
-  var tracker = new _SizeTracker(debugLibName);
+  var tracker = _SizeTracker(debugLibName);
   info.accept(tracker);
 
   // Validate that listed elements include elements of each library.
-  Set<Info> listed = new Set()
-    ..addAll(info.functions)
-    ..addAll(info.fields);
+  final listed = {...info.functions, ...info.fields};
   // For our sanity we do some validation of dump-info invariants
   var diff1 = listed.difference(tracker.discovered);
   var diff2 = tracker.discovered.difference(listed);
-  if (diff1.length == 0 || diff2.length == 0) {
+  if (diff1.isEmpty || diff2.isEmpty) {
     _pass('all fields and functions are covered');
   } else {
-    if (diff1.length > 0) {
+    if (diff1.isNotEmpty) {
       _fail("some elements where listed globally that weren't part of any "
           "library (non-zero ${diff1.where((f) => f.size > 0).length})");
     }
-    if (diff2.length > 0) {
+    if (diff2.isNotEmpty) {
       _fail("some elements found in libraries weren't part of the global list"
           " (non-zero ${diff2.where((f) => f.size > 0).length})");
     }
@@ -87,7 +87,7 @@
 
 /// Validates that every element in the model has a parent (except libraries).
 validateParents(AllInfo info) {
-  final parentlessInfos = new Set<Info>();
+  final parentlessInfos = <Info>{};
 
   failIfNoParents(List<Info> infos) {
     for (var info in infos) {
@@ -100,6 +100,7 @@
   failIfNoParents(info.functions);
   failIfNoParents(info.typedefs);
   failIfNoParents(info.classes);
+  failIfNoParents(info.classTypes);
   failIfNoParents(info.fields);
   failIfNoParents(info.closures);
   if (parentlessInfos.isEmpty) {
@@ -117,7 +118,7 @@
 
   /// [FunctionInfo]s and [FieldInfo]s transitively reachable from [LibraryInfo]
   /// elements.
-  final Set<Info> discovered = new Set<Info>();
+  final Set<Info> discovered = <Info>{};
 
   /// Total number of bytes missing if you look at the reported size compared
   /// to the sum of the nested infos (e.g. if a class size is smaller than the
@@ -130,13 +131,13 @@
   final List unused = [];
 
   /// Tracks the current state of this visitor.
-  List<_State> stack = [new _State()];
+  List<_State> stack = [_State()];
 
   /// Code discovered for a [LibraryInfo], only used for debugging.
-  final StringBuffer _debugCode = new StringBuffer();
+  final StringBuffer _debugCode = StringBuffer();
   int _indent = 2;
 
-  void _push() => stack.add(new _State());
+  void _push() => stack.add(_State());
 
   void _pop(info) {
     var last = stack.removeLast();
@@ -157,6 +158,7 @@
   }
 
   bool _debug = false;
+  @override
   visitLibrary(LibraryInfo info) {
     if (_debugLibName != null) _debug = info.name.contains(_debugLibName);
     _push();
@@ -188,7 +190,7 @@
         _debugCode.write('...\n');
       }
 
-      print('$info ${isClosureClass} \n${info.code}');
+      print('$info $isClosureClass \n${info.code}');
       _debugCode.write(' ' * _indent);
       var endsInNewLine = code.endsWith('\n');
       if (endsInNewLine) code = code.substring(0, code.length - 1);
@@ -205,22 +207,26 @@
     stack.last._count++;
   }
 
+  @override
   visitField(FieldInfo info) {
     _handleCodeInfo(info);
     super.visitField(info);
   }
 
+  @override
   visitFunction(FunctionInfo info) {
     _handleCodeInfo(info);
     super.visitFunction(info);
   }
 
+  @override
   visitTypedef(TypedefInfo info) {
     if (_debug) print('$info');
     stack.last._totalSize += info.size;
     super.visitTypedef(info);
   }
 
+  @override
   visitClass(ClassInfo info) {
     if (_debug) {
       print('$info');
@@ -237,6 +243,24 @@
       _indent -= 2;
     }
   }
+
+  @override
+  visitClassType(ClassTypeInfo info) {
+    if (_debug) {
+      print('$info');
+      _debugCode.write(' ' * _indent);
+      _debugCode.write('ClassType: ${info.name}: {\n');
+      _indent += 2;
+    }
+    _push();
+    super.visitClassType(info);
+    _pop(info);
+    if (_debug) {
+      _debugCode.write(' ' * _indent);
+      _debugCode.write('},\n');
+      _indent -= 2;
+    }
+  }
 }
 
 class _State {
@@ -247,8 +271,8 @@
 
 /// Validates that both forms of dependency information match.
 void compareGraphs(AllInfo info) {
-  var g1 = new EdgeListGraph<Info>();
-  var g2 = new EdgeListGraph<Info>();
+  var g1 = EdgeListGraph<Info>();
+  var g2 = EdgeListGraph<Info>();
   for (var f in info.functions) {
     g1.addNode(f);
     for (var g in f.uses) {
@@ -302,11 +326,9 @@
 verifyDeps(AllInfo info) {
   var graph = graphFromInfo(info);
   var entrypoint = info.program.entrypoint;
-  var reachables = new Set.from(graph.preOrder(entrypoint));
+  var reachables = Set.from(graph.preOrder(entrypoint));
 
-  var functionsAndFields = []
-    ..addAll(info.functions)
-    ..addAll(info.fields);
+  var functionsAndFields = <BasicInfo>[...info.functions, ...info.fields];
   var unreachables =
       functionsAndFields.where((func) => !reachables.contains(func));
   if (unreachables.isNotEmpty) {
diff --git a/pkg/dart2js_info/bin/src/deferred_library_check.dart b/pkg/dart2js_info/bin/src/deferred_library_check.dart
index 5493c66..a54bdeb 100644
--- a/pkg/dart2js_info/bin/src/deferred_library_check.dart
+++ b/pkg/dart2js_info/bin/src/deferred_library_check.dart
@@ -47,10 +47,13 @@
 
 /// A command that computes the diff between two info files.
 class DeferredLibraryCheck extends Command<void> with PrintUsageException {
+  @override
   final String name = "deferred_check";
+  @override
   final String description =
       "Verify that deferred libraries are split as expected";
 
+  @override
   void run() async {
     var args = argResults.rest;
     if (args.length < 2) {
@@ -66,6 +69,6 @@
 }
 
 Future manifestFromFile(String fileName) async {
-  var file = await new File(fileName).readAsString();
+  var file = await File(fileName).readAsString();
   return loadYaml(file);
 }
diff --git a/pkg/dart2js_info/bin/src/deferred_library_layout.dart b/pkg/dart2js_info/bin/src/deferred_library_layout.dart
index c647344..1c4f13f 100644
--- a/pkg/dart2js_info/bin/src/deferred_library_layout.dart
+++ b/pkg/dart2js_info/bin/src/deferred_library_layout.dart
@@ -8,7 +8,6 @@
 import 'dart:io';
 
 import 'package:args/command_runner.dart';
-
 import 'package:dart2js_info/info.dart';
 import 'package:dart2js_info/src/io.dart';
 
@@ -16,12 +15,15 @@
 
 /// This tool reports how code is divided among deferred chunks.
 class DeferredLibraryLayout extends Command<void> with PrintUsageException {
+  @override
   final String name = "deferred_layout";
+  @override
   final String description = "Show how code is divided among deferred parts.";
 
+  @override
   void run() async {
     var args = argResults.rest;
-    if (args.length < 1) {
+    if (args.isEmpty) {
       usageException('Missing argument: info.data');
     }
     await _showLayout(args.first);
@@ -37,7 +39,7 @@
     var unit = info.outputUnit;
     var lib = _libOf(info);
     if (lib == null) return;
-    libToHunks.putIfAbsent(lib, () => new Set()).add(unit);
+    libToHunks.putIfAbsent(lib, () => <OutputUnitInfo>{}).add(unit);
     hunkMembers
         .putIfAbsent(unit, () => {})
         .putIfAbsent(lib, () => [])
@@ -46,6 +48,7 @@
 
   info.functions.forEach(register);
   info.classes.forEach(register);
+  info.classTypes.forEach(register);
   info.fields.forEach(register);
   info.closures.forEach(register);
 
diff --git a/pkg/dart2js_info/bin/src/deferred_library_size.dart b/pkg/dart2js_info/bin/src/deferred_library_size.dart
index 2ea7089..46455ed 100644
--- a/pkg/dart2js_info/bin/src/deferred_library_size.dart
+++ b/pkg/dart2js_info/bin/src/deferred_library_size.dart
@@ -16,12 +16,15 @@
 
 /// This tool gives a breakdown of code size by deferred part in the program.
 class DeferredLibrarySize extends Command<void> with PrintUsageException {
+  @override
   final String name = "deferred_size";
+  @override
   final String description = "Show breakdown of codesize by deferred part.";
 
+  @override
   void run() async {
     var args = argResults.rest;
-    if (args.length < 1) {
+    if (args.isEmpty) {
       usageException('Missing argument: info.data');
     }
     // TODO(het): Would be faster to only parse the 'outputUnits' part
@@ -37,6 +40,7 @@
 
   const ImportSize(this.import, this.size);
 
+  @override
   String toString() {
     return '$import: $size';
   }
@@ -45,14 +49,14 @@
 void printSizes(Map<String, int> sizeByImport, int programSize) {
   var importSizes = <ImportSize>[];
   sizeByImport.forEach((import, size) {
-    importSizes.add(new ImportSize(import, size));
+    importSizes.add(ImportSize(import, size));
   });
   // Sort by size, largest first.
   importSizes.sort((a, b) => b.size - a.size);
   int longest = importSizes.fold('Percent of code deferred'.length,
       (longest, importSize) => max(longest, importSize.import.length));
 
-  _printRow(label, data, {int width: 15}) {
+  _printRow(label, data, {int width = 15}) {
     print('${label.toString().padRight(longest + 1)}'
         '${data.toString().padLeft(width)}');
   }
diff --git a/pkg/dart2js_info/bin/src/diff.dart b/pkg/dart2js_info/bin/src/diff.dart
index d013349..b811071 100644
--- a/pkg/dart2js_info/bin/src/diff.dart
+++ b/pkg/dart2js_info/bin/src/diff.dart
@@ -13,7 +13,9 @@
 
 /// A command that computes the diff between two info files.
 class DiffCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "diff";
+  @override
   final String description =
       "See code size differences between two dump-info files.";
 
@@ -23,6 +25,7 @@
         help: "Show only a summary and hide details of each library");
   }
 
+  @override
   void run() async {
     var args = argResults.rest;
     if (args.length < 2) {
diff --git a/pkg/dart2js_info/bin/src/function_size_analysis.dart b/pkg/dart2js_info/bin/src/function_size_analysis.dart
index cb2c591..704155d 100644
--- a/pkg/dart2js_info/bin/src/function_size_analysis.dart
+++ b/pkg/dart2js_info/bin/src/function_size_analysis.dart
@@ -8,7 +8,6 @@
 import 'dart:math' as math;
 
 import 'package:args/command_runner.dart';
-
 import 'package:dart2js_info/info.dart';
 import 'package:dart2js_info/src/graph.dart';
 import 'package:dart2js_info/src/io.dart';
@@ -18,12 +17,15 @@
 
 /// Command presenting how much each function contributes to the total code.
 class FunctionSizeCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "function_size";
+  @override
   final String description = "See breakdown of code size by function.";
 
+  @override
   void run() async {
     var args = argResults.rest;
-    if (args.length < 1) {
+    if (args.isEmpty) {
       usageException('Missing argument: info.data');
     }
     var info = await infoFromFile(args.first);
@@ -32,12 +34,13 @@
 }
 
 showCodeDistribution(AllInfo info,
-    {bool filter(Info info), bool showLibrarySizes: false}) {
+    {bool Function(Info info) filter, bool showLibrarySizes = false}) {
   var realTotal = info.program.size;
-  if (filter == null) filter = (i) => true;
-  var reported = <BasicInfo>[]
-    ..addAll(info.functions.where(filter))
-    ..addAll(info.fields.where(filter));
+  filter ??= (i) => true;
+  var reported = <BasicInfo>[
+    ...info.functions.where(filter),
+    ...info.fields.where(filter)
+  ];
 
   // Compute a graph from the dependencies in [info].
   Graph<Info> graph = graphFromInfo(info);
@@ -51,7 +54,7 @@
   var minS = totalCount;
   var nodeData = {};
   for (var scc in components) {
-    var sccData = new _SccData();
+    var sccData = _SccData();
     maxS = math.max(maxS, scc.length);
     minS = math.min(minS, scc.length);
     for (var f in scc) {
@@ -85,7 +88,9 @@
   }
 
   helper(mainMethod);
-  reported.forEach((n) => dominatedSize.putIfAbsent(n, () => n.size));
+  for (var n in reported) {
+    dominatedSize.putIfAbsent(n, () => n.size);
+  }
   reported.sort((a, b) =>
       (dominatedSize[b] + nodeData[b].maxSize) -
       (dominatedSize[a] + nodeData[a].maxSize));
@@ -94,7 +99,7 @@
     print(' --- Results per library ---');
     var totals = <LibraryInfo, int>{};
     var longest = 0;
-    reported.forEach((info) {
+    for (var info in reported) {
       var size = info.size;
       while (info != null && info is! LibraryInfo) {
         info = info.parent;
@@ -104,31 +109,31 @@
       totals.putIfAbsent(lib, () => 0);
       totals[lib] += size;
       longest = math.max(longest, '${lib.uri}'.length);
-    });
+    }
 
     _showLibHeader(longest + 1);
     var reportedByLibrary = totals.keys.toList();
     reportedByLibrary.sort((a, b) => totals[b] - totals[a]);
-    reportedByLibrary.forEach((info) {
+    for (var info in reportedByLibrary) {
       _showLib('${info.uri}', totals[info], realTotal, longest + 1);
-    });
+    }
   }
 
   print('\n --- Results per element (field or function) ---');
   _showElementHeader();
-  reported.forEach((info) {
+  for (var info in reported) {
     var size = info.size;
     var min = dominatedSize[info];
     var max = nodeData[info].maxSize;
     _showElement(
         longName(info, useLibraryUri: true), size, min, max, realTotal);
-  });
+  }
 }
 
 /// Data associated with an SCC. Used to compute the reachable code size.
 class _SccData {
   int size = 0;
-  Set deps = new Set();
+  Set deps = {};
   _SccData();
 
   int _maxSize;
@@ -140,7 +145,7 @@
   void compute() {
     if (_maxSize != null) return;
     var max = 0;
-    var seen = new Set();
+    var seen = <dynamic>{};
     helper(n) {
       if (!seen.add(n)) return;
       max += n.size;
diff --git a/pkg/dart2js_info/bin/src/inject_text.dart b/pkg/dart2js_info/bin/src/inject_text.dart
index 8dfe157..18bd5bd 100644
--- a/pkg/dart2js_info/bin/src/inject_text.dart
+++ b/pkg/dart2js_info/bin/src/inject_text.dart
@@ -14,22 +14,28 @@
 void injectText(AllInfo info) {
   // Fill the text of each code span. The binary form produced by dart2js
   // produces code spans, but excludes the orignal text
-  info.functions.forEach((f) {
-    f.code.forEach((span) => _fillSpan(span, f.outputUnit));
-  });
-  info.fields.forEach((f) {
-    f.code.forEach((span) => _fillSpan(span, f.outputUnit));
-  });
-  info.constants.forEach((c) {
-    c.code.forEach((span) => _fillSpan(span, c.outputUnit));
-  });
+  for (var f in info.functions) {
+    for (var span in f.code) {
+      _fillSpan(span, f.outputUnit);
+    }
+  }
+  for (var f in info.fields) {
+    for (var span in f.code) {
+      _fillSpan(span, f.outputUnit);
+    }
+  }
+  for (var c in info.constants) {
+    for (var span in c.code) {
+      _fillSpan(span, c.outputUnit);
+    }
+  }
 }
 
 Map<String, String> _cache = {};
 
 _getContents(OutputUnitInfo unit) => _cache.putIfAbsent(unit.filename, () {
       var uri = Uri.base.resolve(unit.filename);
-      return new File.fromUri(uri).readAsStringSync();
+      return File.fromUri(uri).readAsStringSync();
     });
 
 _fillSpan(CodeSpan span, OutputUnitInfo unit) {
diff --git a/pkg/dart2js_info/bin/src/library_size_split.dart b/pkg/dart2js_info/bin/src/library_size_split.dart
index 1d252c4..da6d85d 100644
--- a/pkg/dart2js_info/bin/src/library_size_split.dart
+++ b/pkg/dart2js_info/bin/src/library_size_split.dart
@@ -72,7 +72,9 @@
 
 /// Command presenting how much each library contributes to the total code.
 class LibrarySizeCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "library_size";
+  @override
   final String description = "See breakdown of code size by library.";
 
   LibrarySizeCommand() {
@@ -80,9 +82,10 @@
         help: 'YAML file specifying how libraries should be grouped.');
   }
 
+  @override
   void run() async {
     var args = argResults.rest;
-    if (args.length < 1) {
+    if (args.isEmpty) {
       usageException('Missing argument: info.data');
       print('usage: dart tool/library_size_split.dart '
           'path-to-info.json [grouping.yaml]');
@@ -93,29 +96,29 @@
 
     var groupingFile = argResults['grouping'];
     var groupingText = groupingFile != null
-        ? new File(groupingFile).readAsStringSync()
+        ? File(groupingFile).readAsStringSync()
         : defaultGrouping;
     var groupingYaml = loadYaml(groupingText);
     var groups = [];
     for (var group in groupingYaml['groups']) {
-      groups.add(new _Group(
-          group['name'], new RegExp(group['regexp']), group['cluster'] ?? 0));
+      groups.add(_Group(
+          group['name'], RegExp(group['regexp']), group['cluster'] ?? 0));
     }
 
     var sizes = {};
     var allLibs = 0;
     for (LibraryInfo lib in info.libraries) {
       allLibs += lib.size;
-      groups.forEach((group) {
+      for (var group in groups) {
         var match = group.matcher.firstMatch('${lib.uri}');
         if (match != null) {
           var name = group.name;
           if (name == null && match.groupCount > 0) name = match.group(1);
-          if (name == null) name = match.group(0);
-          sizes.putIfAbsent(name, () => new _SizeEntry(name, group.cluster));
+          name ??= match.group(0);
+          sizes.putIfAbsent(name, () => _SizeEntry(name, group.cluster));
           sizes[name].size += lib.size;
         }
-      });
+      }
     }
 
     var allConstants = 0;
@@ -129,7 +132,7 @@
     var longest = 0;
     var rows = <_Row>[];
     _addRow(String label, int value) {
-      rows.add(new _Row(label, value));
+      rows.add(_Row(label, value));
       longest = max(longest, label.length);
     }
 
@@ -204,7 +207,7 @@
   const _Divider() : super('', 0);
 }
 
-_pad(value, n, {bool right: false}) {
+_pad(value, n, {bool right = false}) {
   var s = '$value';
   if (s.length >= n) return s;
   var pad = ' ' * (n - s.length);
diff --git a/pkg/dart2js_info/bin/src/live_code_size_analysis.dart b/pkg/dart2js_info/bin/src/live_code_size_analysis.dart
index 77c02fd..23d4e32 100644
--- a/pkg/dart2js_info/bin/src/live_code_size_analysis.dart
+++ b/pkg/dart2js_info/bin/src/live_code_size_analysis.dart
@@ -47,7 +47,9 @@
 import 'usage_exception.dart';
 
 class LiveCodeAnalysisCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "coverage_analysis";
+  @override
   final String description = "Analyze coverage data collected via the"
       " 'coverage_server' command";
 
@@ -56,6 +58,7 @@
         abbr: 'v', negatable: false, help: 'Show verbose details.');
   }
 
+  @override
   void run() async {
     var args = argResults.rest;
     if (args.length < 2) {
@@ -67,7 +70,7 @@
 
 _liveCodeAnalysis(infoFile, coverageFile, bool verbose) async {
   var info = await infoFromFile(infoFile);
-  var coverage = jsonDecode(new File(coverageFile).readAsStringSync());
+  var coverage = jsonDecode(File(coverageFile).readAsStringSync());
 
   int realTotal = info.program.size;
   int totalLib = info.libraries.fold(0, (n, lib) => n + lib.size);
diff --git a/pkg/dart2js_info/bin/src/show_inferred_types.dart b/pkg/dart2js_info/bin/src/show_inferred_types.dart
index 521af34..9c3b119 100644
--- a/pkg/dart2js_info/bin/src/show_inferred_types.dart
+++ b/pkg/dart2js_info/bin/src/show_inferred_types.dart
@@ -15,7 +15,9 @@
 import 'usage_exception.dart';
 
 class ShowInferredTypesCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "show_inferred";
+  @override
   final String description = "Show data inferred by dart2js global inference";
 
   ShowInferredTypesCommand() {
@@ -23,6 +25,7 @@
         abbr: 'l', negatable: false, help: 'Show long qualified names.');
   }
 
+  @override
   void run() async {
     var args = argResults.rest;
     if (args.length < 2) {
@@ -35,7 +38,7 @@
 
 _showInferredTypes(String infoFile, String pattern, bool showLongName) async {
   var info = await infoFromFile(infoFile);
-  var nameRegExp = new RegExp(pattern);
+  var nameRegExp = RegExp(pattern);
   matches(e) => nameRegExp.hasMatch(longName(e));
 
   bool noResults = true;
diff --git a/pkg/dart2js_info/bin/src/text_print.dart b/pkg/dart2js_info/bin/src/text_print.dart
index a38cd55..3615b4d 100644
--- a/pkg/dart2js_info/bin/src/text_print.dart
+++ b/pkg/dart2js_info/bin/src/text_print.dart
@@ -3,18 +3,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:io';
-import 'package:args/command_runner.dart';
 
+import 'package:args/command_runner.dart';
 import 'package:dart2js_info/info.dart';
-import 'package:dart2js_info/src/util.dart';
 import 'package:dart2js_info/src/io.dart';
+import 'package:dart2js_info/src/util.dart';
 
 import 'inject_text.dart';
 import 'usage_exception.dart';
 
 /// Shows the contents of an info file as text.
 class ShowCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "show";
+  @override
   final String description = "Show a text representation of the info file.";
 
   ShowCommand() {
@@ -28,8 +30,9 @@
             'option can be used to embed the text directly in the output.');
   }
 
+  @override
   void run() async {
-    if (argResults.rest.length < 1) {
+    if (argResults.rest.isEmpty) {
       usageException('Missing argument: <input-info>');
     }
 
@@ -37,13 +40,13 @@
     AllInfo info = await infoFromFile(filename);
     if (argResults['inject-text']) injectText(info);
 
-    var buffer = new StringBuffer();
-    info.accept(new TextPrinter(buffer, argResults['inject-text']));
+    var buffer = StringBuffer();
+    info.accept(TextPrinter(buffer, argResults['inject-text']));
     var outputPath = argResults['out'];
     if (outputPath == null) {
       print(buffer);
     } else {
-      new File(outputPath).writeAsStringSync('$buffer');
+      File(outputPath).writeAsStringSync('$buffer');
     }
   }
 }
@@ -65,13 +68,14 @@
     buffer.writeln(s.replaceAll('\n', '\n$_textIndent'));
   }
 
-  void _writeBlock(String s, void f()) {
-    _writeIndented("$s");
+  void _writeBlock(String s, void Function() f) {
+    _writeIndented(s);
     _indent++;
     f();
     _indent--;
   }
 
+  @override
   void visitAll(AllInfo info) {
     _writeBlock("Summary data", () => visitProgram(info.program));
     buffer.writeln();
@@ -87,6 +91,7 @@
     _writeBlock("Output units", () => info.outputUnits.forEach(visitOutput));
   }
 
+  @override
   void visitProgram(ProgramInfo info) {
     _writeIndented('main: ${longName(info.entrypoint, useLibraryUri: true)}');
     _writeIndented('size: ${info.size}');
@@ -109,6 +114,7 @@
     return "${(size / (1024 * 1024)).toStringAsFixed(2)} Mb ($size b)";
   }
 
+  @override
   void visitLibrary(LibraryInfo info) {
     _writeBlock('${info.uri}: ${_size(info.size)}', () {
       if (info.topLevelFunctions.isNotEmpty) {
@@ -124,6 +130,9 @@
       if (info.classes.isNotEmpty) {
         _writeBlock('Classes', () => info.classes.forEach(visitClass));
       }
+      if (info.classTypes.isNotEmpty) {
+        _writeBlock('Classes', () => info.classTypes.forEach(visitClassType));
+      }
       if (info.typedefs.isNotEmpty) {
         _writeBlock("Typedefs", () => info.typedefs.forEach(visitTypedef));
         buffer.writeln();
@@ -132,6 +141,7 @@
     });
   }
 
+  @override
   void visitClass(ClassInfo info) {
     _writeBlock(
         '${info.name}: ${_size(info.size)} [${info.outputUnit.filename}]', () {
@@ -145,6 +155,14 @@
     });
   }
 
+  @override
+  void visitClassType(ClassTypeInfo info) {
+    _writeBlock(
+        '${info.name}: ${_size(info.size)} [${info.outputUnit.filename}]',
+        () {});
+  }
+
+  @override
   void visitField(FieldInfo info) {
     _writeBlock('${info.type} ${info.name}: ${_size(info.size)}', () {
       _writeIndented('inferred type: ${info.inferredType}');
@@ -158,6 +176,7 @@
     });
   }
 
+  @override
   void visitFunction(FunctionInfo info) {
     var outputUnitFile = '';
     if (info.functionKind == FunctionInfo.TOP_LEVEL_FUNCTION_KIND) {
@@ -168,7 +187,7 @@
     _writeBlock(
         '${info.returnType} ${info.name}($params): ${_size(info.size)}$outputUnitFile',
         () {
-      String params = info.parameters.map((p) => "${p.type}").join(', ');
+      String params = info.parameters.map((p) => p.type).join(', ');
       _writeIndented('declared type: ${info.type}');
       _writeIndented(
           'inferred type: ${info.inferredReturnType} Function($params)');
@@ -188,14 +207,17 @@
     _writeIndented('- ${longName(info.target, useLibraryUri: true)} $mask');
   }
 
+  @override
   void visitTypedef(TypedefInfo info) {
     _writeIndented('${info.name}: ${info.type}');
   }
 
+  @override
   void visitClosure(ClosureInfo info) {
-    _writeBlock('${info.name}', () => visitFunction(info.function));
+    _writeBlock(info.name, () => visitFunction(info.function));
   }
 
+  @override
   void visitConstant(ConstantInfo info) {
     _writeBlock('${_size(info.size)}:', () => _writeCode(info.code));
   }
@@ -204,6 +226,7 @@
     _writeIndented(code.map((c) => c.text).join('\n'));
   }
 
+  @override
   void visitOutput(OutputUnitInfo info) {
     _writeIndented('${info.filename}: ${_size(info.size)}');
   }
diff --git a/pkg/dart2js_info/bin/src/to_binary.dart b/pkg/dart2js_info/bin/src/to_binary.dart
index 1d90ed2..e1170f3 100644
--- a/pkg/dart2js_info/bin/src/to_binary.dart
+++ b/pkg/dart2js_info/bin/src/to_binary.dart
@@ -15,11 +15,14 @@
 
 /// Converts a dump-info file emitted by dart2js in JSON to binary format.
 class ToBinaryCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "to_binary";
+  @override
   final String description = "Convert any info file to binary format.";
 
+  @override
   void run() async {
-    if (argResults.rest.length < 1) {
+    if (argResults.rest.isEmpty) {
       usageException('Missing argument: <input-info>');
       exit(1);
     }
@@ -28,7 +31,7 @@
     AllInfo info = await infoFromFile(filename);
     if (argResults['inject-text']) injectText(info);
     String outputFilename = argResults['out'] ?? '$filename.data';
-    var outstream = new File(outputFilename).openWrite();
+    var outstream = File(outputFilename).openWrite();
     binary.encode(info, outstream);
     await outstream.done;
   }
diff --git a/pkg/dart2js_info/bin/src/to_json.dart b/pkg/dart2js_info/bin/src/to_json.dart
index fff4d34..15e2722 100644
--- a/pkg/dart2js_info/bin/src/to_json.dart
+++ b/pkg/dart2js_info/bin/src/to_json.dart
@@ -16,7 +16,9 @@
 
 /// Converts a dump-info file emitted by dart2js in binary format to JSON.
 class ToJsonCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "to_json";
+  @override
   final String description = "Convert any info file to JSON format.";
 
   ToJsonCommand() {
@@ -32,8 +34,9 @@
             'available in the input file.');
   }
 
+  @override
   void run() async {
-    if (argResults.rest.length < 1) {
+    if (argResults.rest.isEmpty) {
       usageException('Missing argument: <input-info>');
     }
 
@@ -45,10 +48,10 @@
       injectText(info);
     }
 
-    var json = new AllInfoJsonCodec(isBackwardCompatible: isBackwardCompatible)
+    var json = AllInfoJsonCodec(isBackwardCompatible: isBackwardCompatible)
         .encode(info);
     String outputFilename = argResults['out'] ?? '$filename.json';
-    new File(outputFilename)
+    File(outputFilename)
         .writeAsStringSync(const JsonEncoder.withIndent("  ").convert(json));
   }
 }
diff --git a/pkg/dart2js_info/bin/src/to_proto.dart b/pkg/dart2js_info/bin/src/to_proto.dart
index fcbfaa8..5af4503 100644
--- a/pkg/dart2js_info/bin/src/to_proto.dart
+++ b/pkg/dart2js_info/bin/src/to_proto.dart
@@ -17,11 +17,14 @@
 
 /// Converts a dump-info file emitted by dart2js to the proto format
 class ToProtoCommand extends Command<void> with PrintUsageException {
+  @override
   final String name = "to_proto";
+  @override
   final String description = "Convert any info file to proto format.";
 
+  @override
   void run() async {
-    if (argResults.rest.length < 1) {
+    if (argResults.rest.isEmpty) {
       usageException('Missing argument: <input-info>');
       exit(1);
     }
@@ -29,9 +32,9 @@
     String filename = argResults.rest[0];
     final info = await infoFromFile(filename);
     if (argResults['inject-text']) injectText(info);
-    final proto = new AllInfoProtoCodec().encode(info);
+    final proto = AllInfoProtoCodec().encode(info);
     String outputFilename = argResults['out'] ?? '$filename.pb';
-    final outputFile = new File(outputFilename);
+    final outputFile = File(outputFilename);
     await outputFile.writeAsBytes(proto.writeToBuffer(), mode: FileMode.write);
   }
 }
diff --git a/pkg/dart2js_info/bin/src/usage_exception.dart b/pkg/dart2js_info/bin/src/usage_exception.dart
index 4499da3..3065100 100644
--- a/pkg/dart2js_info/bin/src/usage_exception.dart
+++ b/pkg/dart2js_info/bin/src/usage_exception.dart
@@ -8,6 +8,7 @@
 abstract class PrintUsageException implements Command<void> {
   // TODO(rnystrom): Use "Never" for the return type when this package is
   // migrated to null safety.
+  @override
   usageException(String message) {
     print(message);
     printUsage();
diff --git a/pkg/dart2js_info/bin/tools.dart b/pkg/dart2js_info/bin/tools.dart
index 40495a8..26a188b 100644
--- a/pkg/dart2js_info/bin/tools.dart
+++ b/pkg/dart2js_info/bin/tools.dart
@@ -20,20 +20,20 @@
 
 /// Entrypoint to run all dart2js_info tools.
 void main(args) {
-  var commandRunner = new CommandRunner("dart2js_info",
+  var commandRunner = CommandRunner("dart2js_info",
       "collection of tools to digest the output of dart2js's --dump-info")
-    ..addCommand(new CodeDepsCommand())
-    ..addCommand(new CoverageLogServerCommand())
-    ..addCommand(new DebugCommand())
-    ..addCommand(new DiffCommand())
-    ..addCommand(new DeferredLibraryCheck())
-    ..addCommand(new DeferredLibrarySize())
-    ..addCommand(new DeferredLibraryLayout())
-    ..addCommand(new ConvertCommand())
-    ..addCommand(new FunctionSizeCommand())
-    ..addCommand(new LibrarySizeCommand())
-    ..addCommand(new LiveCodeAnalysisCommand())
-    ..addCommand(new ShowInferredTypesCommand())
-    ..addCommand(new ShowCommand());
+    ..addCommand(CodeDepsCommand())
+    ..addCommand(CoverageLogServerCommand())
+    ..addCommand(DebugCommand())
+    ..addCommand(DiffCommand())
+    ..addCommand(DeferredLibraryCheck())
+    ..addCommand(DeferredLibrarySize())
+    ..addCommand(DeferredLibraryLayout())
+    ..addCommand(ConvertCommand())
+    ..addCommand(FunctionSizeCommand())
+    ..addCommand(LibrarySizeCommand())
+    ..addCommand(LiveCodeAnalysisCommand())
+    ..addCommand(ShowInferredTypesCommand())
+    ..addCommand(ShowCommand());
   commandRunner.run(args);
 }
diff --git a/pkg/dart2js_info/info.proto b/pkg/dart2js_info/info.proto
index b8e8f09..e91792e 100644
--- a/pkg/dart2js_info/info.proto
+++ b/pkg/dart2js_info/info.proto
@@ -82,6 +82,9 @@
 
     /** Information about a closure element. */
     ClosureInfoPB closure_info = 107;
+
+    /** Information about a class type element. */
+    ClassTypeInfoPB class_type_info = 108;
   }
 }
 
@@ -155,6 +158,9 @@
   repeated string children_ids = 2;
 }
 
+/** Information about a class type element. */
+message ClassTypeInfoPB {}
+
 /** Information about a constant value. */
 message ConstantInfoPB {
   /** The actual generated code for the constant. */
diff --git a/pkg/dart2js_info/lib/binary_serialization.dart b/pkg/dart2js_info/lib/binary_serialization.dart
index 382c37e..23b626d 100644
--- a/pkg/dart2js_info/lib/binary_serialization.dart
+++ b/pkg/dart2js_info/lib/binary_serialization.dart
@@ -13,11 +13,11 @@
 import 'info.dart';
 
 void encode(AllInfo info, Sink<List<int>> sink) {
-  new BinaryPrinter(new BinarySink(sink)).visitAll(info);
+  BinaryPrinter(BinarySink(sink)).visitAll(info);
 }
 
 AllInfo decode(List<int> data) {
-  return new BinaryReader(new BinarySource(data)).readAll();
+  return BinaryReader(BinarySource(data)).readAll();
 }
 
 class BinaryPrinter implements InfoVisitor<void> {
@@ -38,6 +38,7 @@
     info.accept(this);
   }
 
+  @override
   void visitAll(AllInfo info) {
     sink.writeInt(info.version);
     sink.writeInt(info.minorVersion);
@@ -45,6 +46,7 @@
     // TODO(sigmund): synthesize the following lists instead of serializing the
     // values again.
     sink.writeList(info.classes, visitClass);
+    sink.writeList(info.classTypes, visitClassType);
     sink.writeList(info.functions, visitFunction);
     sink.writeList(info.typedefs, visitTypedef);
     sink.writeList(info.fields, visitField);
@@ -69,6 +71,7 @@
     sink.close();
   }
 
+  @override
   void visitProgram(ProgramInfo info) {
     visitFunction(info.entrypoint);
     sink.writeInt(info.size);
@@ -93,6 +96,7 @@
     // Note: parent-pointers are not serialized, they get deduced during deserialization.
   }
 
+  @override
   void visitLibrary(LibraryInfo library) {
     sink.writeCached(library, (LibraryInfo info) {
       sink.writeUri(info.uri);
@@ -100,10 +104,12 @@
       sink.writeList(info.topLevelFunctions, visitFunction);
       sink.writeList(info.topLevelVariables, visitField);
       sink.writeList(info.classes, visitClass);
+      sink.writeList(info.classTypes, visitClassType);
       sink.writeList(info.typedefs, visitTypedef);
     });
   }
 
+  @override
   void visitClass(ClassInfo cls) {
     sink.writeCached(cls, (ClassInfo info) {
       _visitBasicInfo(info);
@@ -113,6 +119,14 @@
     });
   }
 
+  @override
+  void visitClassType(ClassTypeInfo cls) {
+    sink.writeCached(cls, (ClassTypeInfo info) {
+      _visitBasicInfo(info);
+    });
+  }
+
+  @override
   void visitField(FieldInfo field) {
     sink.writeCached(field, (FieldInfo info) {
       _visitBasicInfo(info);
@@ -140,6 +154,7 @@
     }
   }
 
+  @override
   void visitConstant(ConstantInfo constant) {
     sink.writeCached(constant, (ConstantInfo info) {
       _visitBasicInfo(info);
@@ -162,6 +177,7 @@
     sink.writeString(info.declaredType);
   }
 
+  @override
   void visitFunction(FunctionInfo function) {
     sink.writeCached(function, (FunctionInfo info) {
       _visitBasicInfo(info);
@@ -182,6 +198,7 @@
     sink.writeStringOrNull(info.mask);
   }
 
+  @override
   void visitClosure(ClosureInfo closure) {
     sink.writeCached(closure, (ClosureInfo info) {
       _visitBasicInfo(info);
@@ -189,6 +206,7 @@
     });
   }
 
+  @override
   void visitTypedef(TypedefInfo typedef) {
     sink.writeCached(typedef, (TypedefInfo info) {
       _visitBasicInfo(info);
@@ -203,6 +221,7 @@
     }
   }
 
+  @override
   void visitOutput(OutputUnitInfo output) {
     sink.writeCached(output, (OutputUnitInfo info) {
       _visitBasicInfo(info);
@@ -221,7 +240,7 @@
   }
 
   Duration readDuration() {
-    return new Duration(microseconds: source.readInt());
+    return Duration(microseconds: source.readInt());
   }
 
   Info readInfoWithKind() {
@@ -231,6 +250,8 @@
         return readLibrary();
       case InfoKind.clazz:
         return readClass();
+      case InfoKind.classType:
+        return readClassType();
       case InfoKind.function:
         return readFunction();
       case InfoKind.field:
@@ -248,7 +269,7 @@
   }
 
   AllInfo readAll() {
-    var info = new AllInfo();
+    var info = AllInfo();
     int version = source.readInt();
     int minorVersion = source.readInt();
     if (info.version != version || info.minorVersion != minorVersion) {
@@ -258,6 +279,7 @@
     }
     info.libraries = source.readList(readLibrary);
     info.classes = source.readList(readClass);
+    info.classTypes = source.readList(readClassType);
     info.functions = source.readList(readFunction);
     info.typedefs = source.readList(readTypedef);
     info.fields = source.readList(readField);
@@ -300,13 +322,13 @@
   }
 
   ProgramInfo readProgram() {
-    var info = new ProgramInfo();
+    var info = ProgramInfo();
     info.entrypoint = readFunction();
     info.size = source.readInt();
     info.dart2jsVersion = source.readStringOrNull();
     info.compilationMoment = readDate();
     info.compilationDuration = readDuration();
-    info.toJsonDuration = new Duration(microseconds: 0);
+    info.toJsonDuration = Duration(microseconds: 0);
     info.dumpInfoDuration = readDuration();
     info.noSuchMethodEnabled = source.readBool();
     info.isRuntimeTypeUsed = source.readBool();
@@ -326,24 +348,26 @@
   }
 
   LibraryInfo readLibrary() => source.readCached<LibraryInfo>(() {
-        LibraryInfo info = new LibraryInfo.internal();
+        LibraryInfo info = LibraryInfo.internal();
         info.uri = source.readUri();
         _readBasicInfo(info);
         info.topLevelFunctions = source.readList(readFunction);
         info.topLevelVariables = source.readList(readField);
         info.classes = source.readList(readClass);
+        info.classTypes = source.readList(readClassType);
         info.typedefs = source.readList(readTypedef);
 
         setParent(BasicInfo child) => child.parent = info;
         info.topLevelFunctions.forEach(setParent);
         info.topLevelVariables.forEach(setParent);
         info.classes.forEach(setParent);
+        info.classTypes.forEach(setParent);
         info.typedefs.forEach(setParent);
         return info;
       });
 
   ClassInfo readClass() => source.readCached<ClassInfo>(() {
-        ClassInfo info = new ClassInfo.internal();
+        ClassInfo info = ClassInfo.internal();
         _readBasicInfo(info);
         info.isAbstract = source.readBool();
         info.fields = source.readList(readField);
@@ -355,8 +379,14 @@
         return info;
       });
 
+  ClassTypeInfo readClassType() => source.readCached<ClassTypeInfo>(() {
+        var info = ClassTypeInfo.internal();
+        _readBasicInfo(info);
+        return info;
+      });
+
   FieldInfo readField() => source.readCached<FieldInfo>(() {
-        FieldInfo info = new FieldInfo.internal();
+        FieldInfo info = FieldInfo.internal();
         _readBasicInfo(info);
         info.closures = source.readList(readClosure);
         info.inferredType = source.readString();
@@ -366,12 +396,14 @@
         if (info.isConst) {
           info.initializer = _readConstantOrNull();
         }
-        info.closures.forEach((c) => c.parent = info);
+        for (var c in info.closures) {
+          c.parent = info;
+        }
         return info;
       });
 
   CodeSpan _readCodeSpan() {
-    return new CodeSpan()
+    return CodeSpan()
       ..start = source.readIntOrNull()
       ..end = source.readIntOrNull()
       ..text = source.readStringOrNull();
@@ -384,7 +416,7 @@
   }
 
   ConstantInfo readConstant() => source.readCached<ConstantInfo>(() {
-        ConstantInfo info = new ConstantInfo.internal();
+        ConstantInfo info = ConstantInfo.internal();
         _readBasicInfo(info);
         info.code = source.readList(_readCodeSpan);
         return info;
@@ -392,7 +424,7 @@
 
   FunctionModifiers _readFunctionModifiers() {
     int value = source.readInt();
-    return new FunctionModifiers(
+    return FunctionModifiers(
         isStatic: value & _staticMask != 0,
         isConst: value & _constMask != 0,
         isFactory: value & _factoryMask != 0,
@@ -400,12 +432,12 @@
   }
 
   ParameterInfo _readParameterInfo() {
-    return new ParameterInfo(
+    return ParameterInfo(
         source.readString(), source.readString(), source.readString());
   }
 
   FunctionInfo readFunction() => source.readCached<FunctionInfo>(() {
-        FunctionInfo info = new FunctionInfo.internal();
+        FunctionInfo info = FunctionInfo.internal();
         _readBasicInfo(info);
         info.closures = source.readList(readClosure);
         info.modifiers = _readFunctionModifiers();
@@ -416,15 +448,17 @@
         info.inlinedCount = source.readIntOrNull();
         info.code = source.readList(_readCodeSpan);
         info.type = source.readString();
-        info.closures.forEach((c) => c.parent = info);
+        for (var c in info.closures) {
+          c.parent = info;
+        }
         return info;
       });
 
   DependencyInfo _readDependencyInfo() =>
-      new DependencyInfo(readInfoWithKind(), source.readStringOrNull());
+      DependencyInfo(readInfoWithKind(), source.readStringOrNull());
 
   ClosureInfo readClosure() => source.readCached<ClosureInfo>(() {
-        ClosureInfo info = new ClosureInfo.internal();
+        ClosureInfo info = ClosureInfo.internal();
         _readBasicInfo(info);
         info.function = readFunction();
         info.function.parent = info;
@@ -432,7 +466,7 @@
       });
 
   TypedefInfo readTypedef() => source.readCached<TypedefInfo>(() {
-        TypedefInfo info = new TypedefInfo.internal();
+        TypedefInfo info = TypedefInfo.internal();
         _readBasicInfo(info);
         info.type = source.readString();
         return info;
@@ -445,7 +479,7 @@
   }
 
   OutputUnitInfo readOutput() => source.readCached<OutputUnitInfo>(() {
-        OutputUnitInfo info = new OutputUnitInfo.internal();
+        OutputUnitInfo info = OutputUnitInfo.internal();
         _readBasicInfo(info);
         info.filename = source.readStringOrNull();
         info.imports = source.readList(source.readString);
diff --git a/pkg/dart2js_info/lib/deferred_library_check.dart b/pkg/dart2js_info/lib/deferred_library_check.dart
index 8a7e98b..ef35cec 100644
--- a/pkg/dart2js_info/lib/deferred_library_check.dart
+++ b/pkg/dart2js_info/lib/deferred_library_check.dart
@@ -42,8 +42,8 @@
 
 List<ManifestComplianceFailure> checkDeferredLibraryManifest(
     AllInfo info, Map manifest) {
-  var includedPackages = new Map<String, Set<String>>();
-  var excludedPackages = new Map<String, Set<String>>();
+  var includedPackages = <String, Set<String>>{};
+  var excludedPackages = <String, Set<String>>{};
   for (var part in manifest.keys) {
     for (var package in manifest[part]['include'] ?? []) {
       (includedPackages[part] ??= {}).add(package);
@@ -59,16 +59,20 @@
   // the outputUnits whose list of 'imports' contains a single import. If the
   // part is shared, it will have more than one import since it will include the
   // imports of all the top-level deferred parts that will load the shared part.
-  List<String> validParts = ['main']..addAll(info.outputUnits
-      .where((unit) => unit.imports.length == 1)
-      .map((unit) => unit.imports.single));
-  List<String> mentionedParts = []
-    ..addAll(includedPackages.keys)
-    ..addAll(excludedPackages.keys);
+  List<String> validParts = [
+    'main',
+    ...info.outputUnits
+        .where((unit) => unit.imports.length == 1)
+        .map((unit) => unit.imports.single)
+  ];
+  List<String> mentionedParts = [
+    ...includedPackages.keys,
+    ...excludedPackages.keys
+  ];
   var partNameFailures = <_InvalidPartName>[];
   for (var part in mentionedParts) {
     if (!validParts.contains(part)) {
-      partNameFailures.add(new _InvalidPartName(part, validParts));
+      partNameFailures.add(_InvalidPartName(part, validParts));
     }
   }
   if (partNameFailures.isNotEmpty) {
@@ -79,7 +83,7 @@
     for (var values in includedPackages.values) ...values,
     for (var values in excludedPackages.values) ...values
   };
-  var actualIncludedPackages = new Map<String, Set<String>>();
+  var actualIncludedPackages = <String, Set<String>>{};
 
   var failures = <ManifestComplianceFailure>[];
 
@@ -98,8 +102,7 @@
       for (var part in containingParts) {
         (actualIncludedPackages[part] ??= {}).add(packageName);
         if (excludedPackages[part].contains(packageName)) {
-          failures
-              .add(new _PartContainedExcludedPackage(part, packageName, info));
+          failures.add(_PartContainedExcludedPackage(part, packageName, info));
         }
       }
     }
@@ -112,7 +115,7 @@
     for (var package in packages) {
       if (!actualIncludedPackages.containsKey(part) ||
           !actualIncludedPackages[part].contains(package)) {
-        failures.add(new _PartDidNotContainPackage(part, package));
+        failures.add(_PartDidNotContainPackage(part, package));
       }
     }
   });
@@ -146,6 +149,7 @@
   final List<String> validPartNames;
   const _InvalidPartName(this.part, this.validPartNames);
 
+  @override
   String toString() {
     return 'Manifest file declares invalid part "$part". '
         'Valid part names are: $validPartNames';
@@ -158,6 +162,7 @@
   final BasicInfo info;
   const _PartContainedExcludedPackage(this.part, this.package, this.info);
 
+  @override
   String toString() {
     return 'Part "$part" was specified to exclude package "$package" but it '
         'actually contains ${kindToString(info.kind)} "${info.name}" which '
@@ -170,6 +175,7 @@
   final String package;
   const _PartDidNotContainPackage(this.part, this.package);
 
+  @override
   String toString() {
     return 'Part "$part" was specified to include package "$package" but it '
         'does not contain any elements from that package.';
diff --git a/pkg/dart2js_info/lib/info.dart b/pkg/dart2js_info/lib/info.dart
index d2019ca..1ebb2a7 100644
--- a/pkg/dart2js_info/lib/info.dart
+++ b/pkg/dart2js_info/lib/info.dart
@@ -33,12 +33,17 @@
 // TODO(sigmund): add more:
 //  - inputSize: bytes used in the Dart source program
 abstract class BasicInfo implements Info {
+  @override
   final InfoKind kind;
 
+  @override
   String coverageId;
+  @override
   int size;
+  @override
   Info parent;
 
+  @override
   String name;
 
   /// If using deferred libraries, where the element associated with this info
@@ -49,6 +54,7 @@
 
   BasicInfo.internal(this.kind);
 
+  @override
   String toString() => '$kind $name [$size]';
 }
 
@@ -77,6 +83,9 @@
   /// Information about each class (in any library).
   List<ClassInfo> classes = <ClassInfo>[];
 
+  /// Information about each class type (in any library).
+  List<ClassTypeInfo> classTypes = <ClassTypeInfo>[];
+
   /// Information about fields (in any class).
   List<FieldInfo> fields = <FieldInfo>[];
 
@@ -180,6 +189,9 @@
   /// Classes defined within the library.
   List<ClassInfo> classes = <ClassInfo>[];
 
+  /// Class types defined within the library.
+  List<ClassTypeInfo> classTypes = <ClassTypeInfo>[];
+
   /// Typedefs defined within the library.
   List<TypedefInfo> typedefs = <TypedefInfo>[];
 
@@ -189,13 +201,17 @@
 
   /// Whether there is any information recorded for this library.
   bool get isEmpty =>
-      topLevelFunctions.isEmpty && topLevelVariables.isEmpty && classes.isEmpty;
+      topLevelFunctions.isEmpty &&
+      topLevelVariables.isEmpty &&
+      classes.isEmpty &&
+      classTypes.isEmpty;
 
   LibraryInfo(String name, this.uri, OutputUnitInfo outputUnit, int size)
       : super(InfoKind.library, name, outputUnit, size, null);
 
   LibraryInfo.internal() : super.internal(InfoKind.library);
 
+  @override
   T accept<T>(InfoVisitor<T> visitor) => visitor.visitLibrary(this);
 }
 
@@ -213,6 +229,7 @@
 
   OutputUnitInfo.internal() : super.internal(InfoKind.outputUnit);
 
+  @override
   T accept<T>(InfoVisitor<T> visitor) => visitor.visitOutput(this);
 }
 
@@ -231,14 +248,28 @@
   List<FieldInfo> fields = <FieldInfo>[];
 
   ClassInfo(
-      {String name, this.isAbstract, OutputUnitInfo outputUnit, int size: 0})
+      {String name, this.isAbstract, OutputUnitInfo outputUnit, int size = 0})
       : super(InfoKind.clazz, name, outputUnit, size, null);
 
   ClassInfo.internal() : super.internal(InfoKind.clazz);
 
+  @override
   T accept<T>(InfoVisitor<T> visitor) => visitor.visitClass(this);
 }
 
+/// Information about a class type element. [ClassTypeInfo] is distinct from
+/// [ClassInfo] because a class and its type may end up in different output
+/// units.
+class ClassTypeInfo extends BasicInfo {
+  ClassTypeInfo({String name, OutputUnitInfo outputUnit, int size = 0})
+      : super(InfoKind.classType, name, outputUnit, size, null);
+
+  ClassTypeInfo.internal() : super.internal(InfoKind.classType);
+
+  @override
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitClassType(this);
+}
+
 /// A code span of generated code. A [CodeSpan] object is associated with a
 /// single [BasicInfo]. The offsets in the span corresponds to offsets on the
 /// file of [BasicInfo.outputUnit].
@@ -263,11 +294,12 @@
   List<CodeSpan> code;
 
   // TODO(sigmund): Add coverage support to constants?
-  ConstantInfo({int size: 0, this.code, OutputUnitInfo outputUnit})
+  ConstantInfo({int size = 0, this.code, OutputUnitInfo outputUnit})
       : super(InfoKind.constant, null, outputUnit, size, null);
 
   ConstantInfo.internal() : super.internal(InfoKind.constant);
 
+  @override
   T accept<T>(InfoVisitor<T> visitor) => visitor.visitConstant(this);
 }
 
@@ -294,7 +326,7 @@
   FieldInfo(
       {String name,
       String coverageId,
-      int size: 0,
+      int size = 0,
       this.type,
       this.inferredType,
       this.closures,
@@ -305,6 +337,7 @@
 
   FieldInfo.internal() : super.internal(InfoKind.field);
 
+  @override
   T accept<T>(InfoVisitor<T> visitor) => visitor.visitField(this);
 }
 
@@ -318,6 +351,7 @@
 
   TypedefInfo.internal() : super.internal(InfoKind.typedef);
 
+  @override
   T accept<T>(InfoVisitor<T> visitor) => visitor.visitTypedef(this);
 }
 
@@ -363,7 +397,7 @@
       {String name,
       String coverageId,
       OutputUnitInfo outputUnit,
-      int size: 0,
+      int size = 0,
       this.functionKind,
       this.modifiers,
       this.closures,
@@ -378,6 +412,7 @@
 
   FunctionInfo.internal() : super.internal(InfoKind.function);
 
+  @override
   T accept<T>(InfoVisitor<T> visitor) => visitor.visitFunction(this);
 }
 
@@ -387,11 +422,12 @@
   FunctionInfo function;
 
   ClosureInfo(
-      {String name, OutputUnitInfo outputUnit, int size: 0, this.function})
+      {String name, OutputUnitInfo outputUnit, int size = 0, this.function})
       : super(InfoKind.closure, name, outputUnit, size, null);
 
   ClosureInfo.internal() : super.internal(InfoKind.closure);
 
+  @override
   T accept<T>(InfoVisitor<T> visitor) => visitor.visitClosure(this);
 }
 
@@ -425,16 +461,17 @@
   final bool isExternal;
 
   FunctionModifiers(
-      {this.isStatic: false,
-      this.isConst: false,
-      this.isFactory: false,
-      this.isExternal: false});
+      {this.isStatic = false,
+      this.isConst = false,
+      this.isFactory = false,
+      this.isExternal = false});
 }
 
 /// Possible values of the `kind` field in the serialized infos.
 enum InfoKind {
   library,
   clazz,
+  classType,
   function,
   field,
   constant,
@@ -449,6 +486,8 @@
       return 'library';
     case InfoKind.clazz:
       return 'class';
+    case InfoKind.classType:
+      return 'classType';
     case InfoKind.function:
       return 'function';
     case InfoKind.field:
@@ -472,6 +511,8 @@
       return InfoKind.library;
     case 'class':
       return InfoKind.clazz;
+    case 'classType':
+      return InfoKind.classType;
     case 'function':
       return InfoKind.function;
     case 'field':
@@ -495,6 +536,7 @@
   T visitProgram(ProgramInfo info);
   T visitLibrary(LibraryInfo info);
   T visitClass(ClassInfo info);
+  T visitClassType(ClassTypeInfo info);
   T visitField(FieldInfo info);
   T visitConstant(ConstantInfo info);
   T visitFunction(FunctionInfo info);
@@ -509,7 +551,8 @@
 /// visitAll contains references to functions, this visitor only recurses to
 /// visit libraries, then from each library we visit functions and classes, and
 /// so on.
-class RecursiveInfoVisitor extends InfoVisitor<Null> {
+class RecursiveInfoVisitor extends InfoVisitor<void> {
+  @override
   visitAll(AllInfo info) {
     // Note: we don't visit functions, fields, classes, and typedefs because
     // they are reachable from the library info.
@@ -517,32 +560,45 @@
     info.constants.forEach(visitConstant);
   }
 
+  @override
   visitProgram(ProgramInfo info) {}
 
+  @override
   visitLibrary(LibraryInfo info) {
     info.topLevelFunctions.forEach(visitFunction);
     info.topLevelVariables.forEach(visitField);
     info.classes.forEach(visitClass);
+    info.classTypes.forEach(visitClassType);
     info.typedefs.forEach(visitTypedef);
   }
 
+  @override
   visitClass(ClassInfo info) {
     info.functions.forEach(visitFunction);
     info.fields.forEach(visitField);
   }
 
+  @override
+  visitClassType(ClassTypeInfo info) {}
+
+  @override
   visitField(FieldInfo info) {
     info.closures.forEach(visitClosure);
   }
 
+  @override
   visitConstant(ConstantInfo info) {}
 
+  @override
   visitFunction(FunctionInfo info) {
     info.closures.forEach(visitClosure);
   }
 
+  @override
   visitTypedef(TypedefInfo info) {}
+  @override
   visitOutput(OutputUnitInfo info) {}
+  @override
   visitClosure(ClosureInfo info) {
     visitFunction(info.function);
   }
diff --git a/pkg/dart2js_info/lib/json_info_codec.dart b/pkg/dart2js_info/lib/json_info_codec.dart
index f32c80f..1b741a7 100644
--- a/pkg/dart2js_info/lib/json_info_codec.dart
+++ b/pkg/dart2js_info/lib/json_info_codec.dart
@@ -3,13 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Converters and codecs for converting between JSON and [Info] classes.
-
 import 'dart:collection';
 import 'dart:convert';
 
 import 'package:collection/collection.dart';
-import 'src/util.dart';
+
 import 'info.dart';
+import 'src/util.dart';
 
 List<String> _toSortedSerializedIds(
         Iterable<Info> infos, Id Function(Info) getId) =>
@@ -18,13 +18,14 @@
 // TODO(sigmund): add unit tests.
 class JsonToAllInfoConverter extends Converter<Map<String, dynamic>, AllInfo> {
   // Using `MashMap` here because it's faster than the default `LinkedHashMap`.
-  final Map<String, Info> registry = new HashMap<String, Info>();
+  final Map<String, Info> registry = HashMap<String, Info>();
 
-  AllInfo convert(Map<String, dynamic> json) {
+  @override
+  AllInfo convert(Map<String, dynamic> input) {
     registry.clear();
 
-    var result = new AllInfo();
-    var elements = json['elements'];
+    var result = AllInfo();
+    var elements = input['elements'];
     // TODO(srawlins): Since only the Map values are being extracted below,
     // replace `as` with `cast` when `cast` becomes available in Dart 2.0:
     //
@@ -33,6 +34,8 @@
         (elements['library'] as Map).values.map((l) => parseLibrary(l)));
     result.classes
         .addAll((elements['class'] as Map).values.map((c) => parseClass(c)));
+    result.classTypes.addAll(
+        (elements['classType'] as Map).values.map((c) => parseClassType(c)));
     result.functions.addAll(
         (elements['function'] as Map).values.map((f) => parseFunction(f)));
 
@@ -48,29 +51,29 @@
     result.constants.addAll(
         (elements['constant'] as Map).values.map((c) => parseConstant(c)));
 
-    json['holding'].forEach((k, deps) {
+    input['holding'].forEach((k, deps) {
       CodeInfo src = registry[k];
       assert(src != null);
       for (var dep in deps) {
         var target = registry[dep['id']];
         assert(target != null);
-        src.uses.add(new DependencyInfo(target, dep['mask']));
+        src.uses.add(DependencyInfo(target, dep['mask']));
       }
     });
 
-    json['dependencies']?.forEach((String k, dependencies) {
+    input['dependencies']?.forEach((String k, dependencies) {
       List<String> deps = dependencies;
       result.dependencies[registry[k]] = deps.map((d) => registry[d]).toList();
     });
 
     result.outputUnits
-        .addAll((json['outputUnits'] as List).map((o) => parseOutputUnit(o)));
+        .addAll((input['outputUnits'] as List).map((o) => parseOutputUnit(o)));
 
-    result.program = parseProgram(json['program']);
+    result.program = parseProgram(input['program']);
 
-    if (json['deferredFiles'] != null) {
+    if (input['deferredFiles'] != null) {
       final deferredFilesMap =
-          (json['deferredFiles'] as Map).cast<String, Map<String, dynamic>>();
+          (input['deferredFiles'] as Map).cast<String, Map<String, dynamic>>();
       for (final library in deferredFilesMap.values) {
         if (library['imports'] != null) {
           // The importMap needs to be typed as <String, List<String>>, but the
@@ -114,6 +117,8 @@
         result.topLevelVariables.add(child);
       } else if (child is ClassInfo) {
         result.classes.add(child);
+      } else if (child is ClassTypeInfo) {
+        result.classTypes.add(child);
       } else {
         assert(child is TypedefInfo);
         result.typedefs.add(child);
@@ -142,6 +147,16 @@
     return result;
   }
 
+  ClassTypeInfo parseClassType(Map json) {
+    ClassTypeInfo result = parseId(json['id']);
+    result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size'];
+    return result;
+  }
+
   FieldInfo parseField(Map json) {
     FieldInfo result = parseId(json['id']);
     return result
@@ -178,7 +193,7 @@
   }
 
   ProgramInfo parseProgram(Map json) {
-    var programInfo = new ProgramInfo()
+    var programInfo = ProgramInfo()
       ..entrypoint = parseId(json['entrypoint'])
       ..size = json['size']
       ..compilationMoment = DateTime.parse(json['compilationMoment'])
@@ -197,7 +212,7 @@
     } else {
       assert(compilationDuration is int);
       programInfo.compilationDuration =
-          new Duration(microseconds: compilationDuration);
+          Duration(microseconds: compilationDuration);
     }
 
     var toJsonDuration = json['toJsonDuration'];
@@ -205,7 +220,7 @@
       programInfo.toJsonDuration = _parseDuration(toJsonDuration);
     } else {
       assert(toJsonDuration is int);
-      programInfo.toJsonDuration = new Duration(microseconds: toJsonDuration);
+      programInfo.toJsonDuration = Duration(microseconds: toJsonDuration);
     }
 
     var dumpInfoDuration = json['dumpInfoDuration'];
@@ -213,8 +228,7 @@
       programInfo.dumpInfoDuration = _parseDuration(dumpInfoDuration);
     } else {
       assert(dumpInfoDuration is int);
-      programInfo.dumpInfoDuration =
-          new Duration(microseconds: dumpInfoDuration);
+      programInfo.dumpInfoDuration = Duration(microseconds: dumpInfoDuration);
     }
 
     return programInfo;
@@ -223,7 +237,7 @@
   /// Parse a string formatted as "XX:YY:ZZ.ZZZZZ" into a [Duration].
   Duration _parseDuration(String duration) {
     if (!duration.contains(':')) {
-      return new Duration(milliseconds: int.parse(duration));
+      return Duration(milliseconds: int.parse(duration));
     }
     var parts = duration.split(':');
     var hours = double.parse(parts[0]);
@@ -235,7 +249,7 @@
     var totalMillis = secondsInMillis * seconds +
         minutesInMillis * minutes +
         hoursInMillis * hours;
-    return new Duration(milliseconds: totalMillis.round());
+    return Duration(milliseconds: totalMillis.round());
   }
 
   FunctionInfo parseFunction(Map json) {
@@ -254,18 +268,17 @@
       ..code = parseCode(json['code'])
       ..sideEffects = json['sideEffects']
       ..inlinedCount = json['inlinedCount']
-      ..modifiers =
-          parseModifiers(new Map<String, bool>.from(json['modifiers']))
+      ..modifiers = parseModifiers(Map<String, bool>.from(json['modifiers']))
       ..closures = (json['children'] as List)
           .map<ClosureInfo>((c) => parseId(c))
           .toList();
   }
 
   ParameterInfo parseParameter(Map json) =>
-      new ParameterInfo(json['name'], json['type'], json['declaredType']);
+      ParameterInfo(json['name'], json['type'], json['declaredType']);
 
   FunctionModifiers parseModifiers(Map<String, bool> json) {
-    return new FunctionModifiers(
+    return FunctionModifiers(
         isStatic: json['static'] == true,
         isConst: json['const'] == true,
         isFactory: json['factory'] == true,
@@ -289,21 +302,23 @@
     }
     return registry.putIfAbsent(serializedId, () {
       if (serializedId.startsWith('function/')) {
-        return new FunctionInfo.internal();
+        return FunctionInfo.internal();
       } else if (serializedId.startsWith('closure/')) {
-        return new ClosureInfo.internal();
+        return ClosureInfo.internal();
       } else if (serializedId.startsWith('library/')) {
-        return new LibraryInfo.internal();
+        return LibraryInfo.internal();
       } else if (serializedId.startsWith('class/')) {
-        return new ClassInfo.internal();
+        return ClassInfo.internal();
+      } else if (serializedId.startsWith('classType/')) {
+        return ClassTypeInfo.internal();
       } else if (serializedId.startsWith('field/')) {
-        return new FieldInfo.internal();
+        return FieldInfo.internal();
       } else if (serializedId.startsWith('constant/')) {
-        return new ConstantInfo.internal();
+        return ConstantInfo.internal();
       } else if (serializedId.startsWith('typedef/')) {
-        return new TypedefInfo.internal();
+        return TypedefInfo.internal();
       } else if (serializedId.startsWith('outputUnit/')) {
-        return new OutputUnitInfo.internal();
+        return OutputUnitInfo.internal();
       }
       assert(false);
       return null;
@@ -313,13 +328,13 @@
   List<CodeSpan> parseCode(dynamic json) {
     // backwards compatibility with format 5.1:
     if (json is String) {
-      return [new CodeSpan(start: null, end: null, text: json)];
+      return [CodeSpan(start: null, end: null, text: json)];
     }
 
     if (json is List) {
       return json.map((dynamic value) {
         Map<String, dynamic> jsonCode = value;
-        return new CodeSpan(
+        return CodeSpan(
             start: jsonCode['start'],
             end: jsonCode['end'],
             text: jsonCode['text']);
@@ -334,10 +349,10 @@
     implements InfoVisitor<Map> {
   /// Whether to generate json compatible with format 5.1
   final bool isBackwardCompatible;
-  final Map<Info, Id> ids = new HashMap<Info, Id>();
-  final Set<int> usedIds = new Set<int>();
+  final Map<Info, Id> ids = HashMap<Info, Id>();
+  final Set<int> usedIds = <int>{};
 
-  AllInfoToJsonConverter({this.isBackwardCompatible: false});
+  AllInfoToJsonConverter({this.isBackwardCompatible = false});
 
   Id idFor(Info info) {
     var serializedId = ids[info];
@@ -365,17 +380,18 @@
     while (!usedIds.add(id)) {
       id++;
     }
-    serializedId = new Id(info.kind, '$id');
+    serializedId = Id(info.kind, '$id');
     return ids[info] = serializedId;
   }
 
-  Map convert(AllInfo info) => info.accept(this);
+  @override
+  Map convert(AllInfo input) => input.accept(this);
 
   Map _visitList(List<Info> infos) {
     // Using SplayTree to maintain a consistent order of keys
-    var map = new SplayTreeMap<String, Map>(compareNatural);
+    var map = SplayTreeMap<String, Map>(compareNatural);
     for (var info in infos) {
-      map['${idFor(info).id}'] = info.accept(this);
+      map[idFor(info).id] = info.accept(this);
     }
     return map;
   }
@@ -383,6 +399,7 @@
   Map _visitAllInfoElements(AllInfo info) {
     var jsonLibraries = _visitList(info.libraries);
     var jsonClasses = _visitList(info.classes);
+    var jsonClassTypes = _visitList(info.classTypes);
     var jsonFunctions = _visitList(info.functions);
     var jsonTypedefs = _visitList(info.typedefs);
     var jsonFields = _visitList(info.fields);
@@ -391,6 +408,7 @@
     return {
       'library': jsonLibraries,
       'class': jsonClasses,
+      'classType': jsonClassTypes,
       'function': jsonFunctions,
       'typedef': jsonTypedefs,
       'field': jsonFields,
@@ -403,7 +421,7 @@
       {'id': idFor(info.target).serializedId, 'mask': info.mask};
 
   Map _visitAllInfoHolding(AllInfo allInfo) {
-    var map = new SplayTreeMap<String, List>(compareNatural);
+    var map = SplayTreeMap<String, List>(compareNatural);
     void helper(CodeInfo info) {
       if (info.uses.isEmpty) return;
       map[idFor(info).serializedId] = info.uses
@@ -418,13 +436,14 @@
   }
 
   Map _visitAllInfoDependencies(AllInfo allInfo) {
-    var map = new SplayTreeMap<String, List>(compareNatural);
+    var map = SplayTreeMap<String, List>(compareNatural);
     allInfo.dependencies.forEach((k, v) {
       map[idFor(k).serializedId] = _toSortedSerializedIds(v, idFor);
     });
     return map;
   }
 
+  @override
   Map visitAll(AllInfo info) {
     var elements = _visitAllInfoElements(info);
     var jsonHolding = _visitAllInfoHolding(info);
@@ -441,6 +460,7 @@
     };
   }
 
+  @override
   Map visitProgram(ProgramInfo info) {
     return {
       'entrypoint': idFor(info.entrypoint).serializedId,
@@ -476,6 +496,7 @@
     return res;
   }
 
+  @override
   Map visitLibrary(LibraryInfo info) {
     return _visitBasicInfo(info)
       ..addAll(<String, Object>{
@@ -484,6 +505,7 @@
               info.topLevelFunctions,
               info.topLevelVariables,
               info.classes,
+              info.classTypes,
               info.typedefs
             ].expand((i) => i),
             idFor),
@@ -491,6 +513,7 @@
       });
   }
 
+  @override
   Map visitClass(ClassInfo info) {
     return _visitBasicInfo(info)
       ..addAll(<String, Object>{
@@ -501,6 +524,12 @@
       });
   }
 
+  @override
+  Map visitClassType(ClassTypeInfo info) {
+    return _visitBasicInfo(info);
+  }
+
+  @override
   Map visitField(FieldInfo info) {
     var result = _visitBasicInfo(info)
       ..addAll(<String, Object>{
@@ -518,6 +547,7 @@
     return result;
   }
 
+  @override
   Map visitConstant(ConstantInfo info) => _visitBasicInfo(info)
     ..addAll(<String, Object>{'code': _serializeCode(info.code)});
 
@@ -538,6 +568,7 @@
   Map _visitParameterInfo(ParameterInfo info) =>
       {'name': info.name, 'type': info.type, 'declaredType': info.declaredType};
 
+  @override
   Map visitFunction(FunctionInfo info) {
     return _visitBasicInfo(info)
       ..addAll(<String, Object>{
@@ -556,13 +587,16 @@
       });
   }
 
+  @override
   Map visitClosure(ClosureInfo info) {
     return _visitBasicInfo(info)
       ..addAll(<String, Object>{'function': idFor(info.function).serializedId});
   }
 
+  @override
   visitTypedef(TypedefInfo info) => _visitBasicInfo(info)..['type'] = info.type;
 
+  @override
   visitOutput(OutputUnitInfo info) => _visitBasicInfo(info)
     ..['filename'] = info.filename
     ..['imports'] = info.imports;
@@ -582,12 +616,14 @@
 }
 
 class AllInfoJsonCodec extends Codec<AllInfo, Map> {
+  @override
   final Converter<AllInfo, Map> encoder;
-  final Converter<Map, AllInfo> decoder = new JsonToAllInfoConverter();
+  @override
+  final Converter<Map, AllInfo> decoder = JsonToAllInfoConverter();
 
-  AllInfoJsonCodec({bool isBackwardCompatible: false})
-      : encoder = new AllInfoToJsonConverter(
-            isBackwardCompatible: isBackwardCompatible);
+  AllInfoJsonCodec({bool isBackwardCompatible = false})
+      : encoder =
+            AllInfoToJsonConverter(isBackwardCompatible: isBackwardCompatible);
 }
 
 class Id {
diff --git a/pkg/dart2js_info/lib/proto_info_codec.dart b/pkg/dart2js_info/lib/proto_info_codec.dart
index d199d09..4d42457 100644
--- a/pkg/dart2js_info/lib/proto_info_codec.dart
+++ b/pkg/dart2js_info/lib/proto_info_codec.dart
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Converters and codecs for converting between Protobuf and [Info] classes.
-
 import 'dart:convert';
+
 import 'package:fixnum/fixnum.dart';
 
 import 'info.dart';
@@ -14,18 +14,19 @@
 export 'src/proto/info.pb.dart';
 
 class ProtoToAllInfoConverter extends Converter<AllInfoPB, AllInfo> {
-  AllInfo convert(AllInfoPB info) {
+  @override
+  AllInfo convert(AllInfoPB input) {
     // TODO(lorenvs): Implement this conversion. It is unlikely to to be used
     // by production code since the goal of the proto codec is to consume this
     // information from other languages. However, it is useful for roundtrip
     // testing, so we should support it.
-    throw new UnimplementedError('ProtoToAllInfoConverter is not implemented');
+    throw UnimplementedError('ProtoToAllInfoConverter is not implemented');
   }
 }
 
 class AllInfoToProtoConverter extends Converter<AllInfo, AllInfoPB> {
   final Map<Info, Id> ids = {};
-  final Set<int> usedIds = new Set<int>();
+  final Set<int> usedIds = <int>{};
 
   Id idFor(Info info) {
     if (info == null) return null;
@@ -51,14 +52,15 @@
     while (!usedIds.add(id)) {
       id++;
     }
-    serializedId = new Id(info.kind, id);
+    serializedId = Id(info.kind, id);
     return ids[info] = serializedId;
   }
 
-  AllInfoPB convert(AllInfo info) => _convertToAllInfoPB(info);
+  @override
+  AllInfoPB convert(AllInfo input) => _convertToAllInfoPB(input);
 
   DependencyInfoPB _convertToDependencyInfoPB(DependencyInfo info) {
-    var result = new DependencyInfoPB()
+    var result = DependencyInfoPB()
       ..targetId = idFor(info.target)?.serializedId;
     if (info.mask != null) {
       result.mask = info.mask;
@@ -67,14 +69,14 @@
   }
 
   static ParameterInfoPB _convertToParameterInfoPB(ParameterInfo info) {
-    return new ParameterInfoPB()
+    return ParameterInfoPB()
       ..name = info.name
       ..type = info.type
       ..declaredType = info.declaredType;
   }
 
   LibraryInfoPB _convertToLibraryInfoPB(LibraryInfo info) {
-    final proto = new LibraryInfoPB()..uri = info.uri.toString();
+    final proto = LibraryInfoPB()..uri = info.uri.toString();
 
     proto.childrenIds
         .addAll(info.topLevelFunctions.map((func) => idFor(func).serializedId));
@@ -82,6 +84,8 @@
         info.topLevelVariables.map((field) => idFor(field).serializedId));
     proto.childrenIds
         .addAll(info.classes.map((clazz) => idFor(clazz).serializedId));
+    proto.childrenIds.addAll(
+        info.classTypes.map((classType) => idFor(classType).serializedId));
     proto.childrenIds
         .addAll(info.typedefs.map((def) => idFor(def).serializedId));
 
@@ -89,7 +93,7 @@
   }
 
   ClassInfoPB _convertToClassInfoPB(ClassInfo info) {
-    final proto = new ClassInfoPB()..isAbstract = info.isAbstract;
+    final proto = ClassInfoPB()..isAbstract = info.isAbstract;
 
     proto.childrenIds
         .addAll(info.functions.map((func) => idFor(func).serializedId));
@@ -99,9 +103,13 @@
     return proto;
   }
 
+  ClassTypeInfoPB _convertToClassTypeInfoPB(ClassTypeInfo info) {
+    return ClassTypeInfoPB();
+  }
+
   static FunctionModifiersPB _convertToFunctionModifiers(
       FunctionModifiers modifiers) {
-    return new FunctionModifiersPB()
+    return FunctionModifiersPB()
       ..isStatic = modifiers.isStatic
       ..isConst = modifiers.isConst
       ..isFactory = modifiers.isFactory
@@ -109,7 +117,7 @@
   }
 
   FunctionInfoPB _convertToFunctionInfoPB(FunctionInfo info) {
-    final proto = new FunctionInfoPB()
+    final proto = FunctionInfoPB()
       ..functionModifiers = _convertToFunctionModifiers(info.modifiers)
       ..inlinedCount = info.inlinedCount ?? 0;
 
@@ -137,7 +145,7 @@
   }
 
   FieldInfoPB _convertToFieldInfoPB(FieldInfo info) {
-    final proto = new FieldInfoPB()
+    final proto = FieldInfoPB()
       ..type = info.type
       ..inferredType = info.inferredType
       ..isConst = info.isConst;
@@ -157,25 +165,25 @@
   }
 
   static ConstantInfoPB _convertToConstantInfoPB(ConstantInfo info) {
-    return new ConstantInfoPB()..code = info.code.map((c) => c.text).join('\n');
+    return ConstantInfoPB()..code = info.code.map((c) => c.text).join('\n');
   }
 
   static OutputUnitInfoPB _convertToOutputUnitInfoPB(OutputUnitInfo info) {
-    final proto = new OutputUnitInfoPB();
+    final proto = OutputUnitInfoPB();
     proto.imports.addAll(info.imports.where((import) => import != null));
     return proto;
   }
 
   static TypedefInfoPB _convertToTypedefInfoPB(TypedefInfo info) {
-    return new TypedefInfoPB()..type = info.type;
+    return TypedefInfoPB()..type = info.type;
   }
 
   ClosureInfoPB _convertToClosureInfoPB(ClosureInfo info) {
-    return new ClosureInfoPB()..functionId = idFor(info.function).serializedId;
+    return ClosureInfoPB()..functionId = idFor(info.function).serializedId;
   }
 
   InfoPB _convertToInfoPB(Info info) {
-    final proto = new InfoPB()
+    final proto = InfoPB()
       ..id = idFor(info).id
       ..serializedId = idFor(info).serializedId
       ..size = info.size;
@@ -207,6 +215,8 @@
       proto.libraryInfo = _convertToLibraryInfoPB(info);
     } else if (info is ClassInfo) {
       proto.classInfo = _convertToClassInfoPB(info);
+    } else if (info is ClassTypeInfo) {
+      proto.classTypeInfo = _convertToClassTypeInfoPB(info);
     } else if (info is FunctionInfo) {
       proto.functionInfo = _convertToFunctionInfoPB(info);
     } else if (info is FieldInfo) {
@@ -225,14 +235,13 @@
   }
 
   ProgramInfoPB _convertToProgramInfoPB(ProgramInfo info) {
-    var result = new ProgramInfoPB()
+    var result = ProgramInfoPB()
       ..entrypointId = idFor(info.entrypoint).serializedId
       ..size = info.size
-      ..compilationMoment =
-          new Int64(info.compilationMoment.microsecondsSinceEpoch)
-      ..compilationDuration = new Int64(info.compilationDuration.inMicroseconds)
-      ..toProtoDuration = new Int64(info.toJsonDuration.inMicroseconds)
-      ..dumpInfoDuration = new Int64(info.dumpInfoDuration.inMicroseconds)
+      ..compilationMoment = Int64(info.compilationMoment.microsecondsSinceEpoch)
+      ..compilationDuration = Int64(info.compilationDuration.inMicroseconds)
+      ..toProtoDuration = Int64(info.toJsonDuration.inMicroseconds)
+      ..dumpInfoDuration = Int64(info.dumpInfoDuration.inMicroseconds)
       ..noSuchMethodEnabled = info.noSuchMethodEnabled ?? false
       ..isRuntimeTypeUsed = info.isRuntimeTypeUsed ?? false
       ..isIsolateUsed = info.isIsolateInUse ?? false
@@ -257,13 +266,13 @@
 
   static LibraryDeferredImportsPB _convertToLibraryDeferredImportsPB(
       String libraryUri, Map<String, dynamic> fields) {
-    final proto = new LibraryDeferredImportsPB()
+    final proto = LibraryDeferredImportsPB()
       ..libraryUri = libraryUri
       ..libraryName = fields['name'] ?? '<unnamed>';
 
     Map<String, List<String>> imports = fields['imports'];
     imports.forEach((prefix, files) {
-      final import = new DeferredImportPB()..prefix = prefix;
+      final import = DeferredImportPB()..prefix = prefix;
       import.files.addAll(files);
       proto.imports.add(import);
     });
@@ -272,11 +281,11 @@
   }
 
   AllInfoPB _convertToAllInfoPB(AllInfo info) {
-    final proto = new AllInfoPB()
-      ..program = _convertToProgramInfoPB(info.program);
+    final proto = AllInfoPB()..program = _convertToProgramInfoPB(info.program);
 
     proto.allInfos.addEntries(_convertToAllInfosEntries(info.libraries));
     proto.allInfos.addEntries(_convertToAllInfosEntries(info.classes));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.classTypes));
     proto.allInfos.addEntries(_convertToAllInfosEntries(info.functions));
     proto.allInfos.addEntries(_convertToAllInfosEntries(info.fields));
     proto.allInfos.addEntries(_convertToAllInfosEntries(info.constants));
@@ -298,8 +307,10 @@
 /// This codec is still experimental, and will likely crash on certain output
 /// from dart2js.
 class AllInfoProtoCodec extends Codec<AllInfo, AllInfoPB> {
-  final Converter<AllInfo, AllInfoPB> encoder = new AllInfoToProtoConverter();
-  final Converter<AllInfoPB, AllInfo> decoder = new ProtoToAllInfoConverter();
+  @override
+  final Converter<AllInfo, AllInfoPB> encoder = AllInfoToProtoConverter();
+  @override
+  final Converter<AllInfoPB, AllInfo> decoder = ProtoToAllInfoConverter();
 }
 
 class Id {
diff --git a/pkg/dart2js_info/lib/src/binary/sink.dart b/pkg/dart2js_info/lib/src/binary/sink.dart
index 7cacadc..4905b49 100644
--- a/pkg/dart2js_info/lib/src/binary/sink.dart
+++ b/pkg/dart2js_info/lib/src/binary/sink.dart
@@ -20,22 +20,22 @@
 
   /// Writes a reference to [value] to this data sink. If [value] has not yet
   /// been serialized, [f] is called to serialize the value itself.
-  void writeCached<E>(E value, void f(E value));
+  void writeCached<E>(E value, void Function(E value) f);
 
   /// Writes the potentially `null` [value] to this data sink. If [value] is
   /// non-null [f] is called to write the non-null value to the data sink.
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readValueOrNull].
-  void writeValueOrNull<E>(E value, void f(E value));
+  void writeValueOrNull<E>(E value, void Function(E value) f);
 
   /// Writes the [values] to this data sink calling [f] to write each value to
   /// the data sink. If [allowNull] is `true`, [values] is allowed to be `null`.
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readList].
-  void writeList<E>(Iterable<E> values, void f(E value),
-      {bool allowNull: false});
+  void writeList<E>(Iterable<E> values, void Function(E value) f,
+      {bool allowNull = false});
 
   /// Writes the boolean [value] to this data sink.
   void writeBool(bool value);
@@ -63,7 +63,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readStrings].
-  void writeStrings(Iterable<String> values, {bool allowNull: false});
+  void writeStrings(Iterable<String> values, {bool allowNull = false});
 
   /// Writes the [map] from string to [V] values to this data sink, calling [f]
   /// to write each value to the data sink. If [allowNull] is `true`, [map] is
@@ -71,8 +71,8 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readStringMap].
-  void writeStringMap<V>(Map<String, V> map, void f(V value),
-      {bool allowNull: false});
+  void writeStringMap<V>(Map<String, V> map, void Function(V value) f,
+      {bool allowNull = false});
 
   /// Writes the enum value [value] to this data sink.
   // TODO(johnniwinther): Change the signature to
@@ -103,7 +103,7 @@
   }
 
   @override
-  void writeStrings(Iterable<String> values, {bool allowNull: false}) {
+  void writeStrings(Iterable<String> values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -116,8 +116,8 @@
   }
 
   @override
-  void writeStringMap<V>(Map<String, V> map, void f(V value),
-      {bool allowNull: false}) {
+  void writeStringMap<V>(Map<String, V> map, void Function(V value) f,
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -131,8 +131,8 @@
   }
 
   @override
-  void writeList<E>(Iterable<E> values, void f(E value),
-      {bool allowNull: false}) {
+  void writeList<E>(Iterable<E> values, void Function(E value) f,
+      {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -143,7 +143,7 @@
   }
 
   @override
-  void writeValueOrNull<E>(E value, void f(E value)) {
+  void writeValueOrNull<E>(E value, void Function(E value) f) {
     writeBool(value != null);
     if (value != null) {
       f(value);
@@ -162,7 +162,7 @@
   ///
   /// If [value] has not been canonicalized yet, [writeValue] is called to
   /// serialize the [value] itself.
-  void write(E value, void writeValue(E value)) {
+  void write(E value, void Function(E value) writeValue) {
     int index = _cache[value];
     if (index == null) {
       index = _cache.length;
@@ -180,17 +180,16 @@
 abstract class AbstractDataSink extends DataSinkMixin implements DataSink {
   IndexedSink<String> _stringIndex;
   IndexedSink<Uri> _uriIndex;
-  Map<Type, IndexedSink> _generalCaches = {};
+  final Map<Type, IndexedSink> _generalCaches = {};
 
   AbstractDataSink() {
-    _stringIndex = new IndexedSink<String>(_writeIntInternal);
-    _uriIndex = new IndexedSink<Uri>(_writeIntInternal);
+    _stringIndex = IndexedSink<String>(_writeIntInternal);
+    _uriIndex = IndexedSink<Uri>(_writeIntInternal);
   }
 
   @override
-  void writeCached<E>(E value, void f(E value)) {
-    IndexedSink sink =
-        _generalCaches[E] ??= new IndexedSink<E>(_writeIntInternal);
+  void writeCached<E>(E value, void Function(E value) f) {
+    IndexedSink sink = _generalCaches[E] ??= IndexedSink<E>(_writeIntInternal);
     sink.write(value, (v) => f(v));
   }
 
@@ -254,7 +253,7 @@
   BufferedSink _bufferedSink;
   int _length = 0;
 
-  BinarySink(this.sink) : _bufferedSink = new BufferedSink(sink);
+  BinarySink(this.sink) : _bufferedSink = BufferedSink(sink);
 
   @override
   void _writeUriInternal(Uri value) {
@@ -290,6 +289,7 @@
     _writeIntInternal(value.index);
   }
 
+  @override
   void close() {
     _bufferedSink.flushAndDestroy();
     _bufferedSink = null;
@@ -297,6 +297,7 @@
   }
 
   /// Returns the number of bytes written to this data sink.
+  @override
   int get length => _length;
 }
 
@@ -304,15 +305,15 @@
 // TODO(sigmund): share with the implementation in
 // package:kernel/binary/ast_to_binary.dart
 class BufferedSink {
-  static const int SIZE = 100000;
-  static const int SAFE_SIZE = SIZE - 5;
-  static const int SMALL = 10000;
+  static const int _size = 100000;
+  static const int _safeSize = _size - 5;
+  static const int _small = 10000;
   final Sink<List<int>> _sink;
-  Uint8List _buffer = new Uint8List(SIZE);
+  Uint8List _buffer = Uint8List(_size);
   int length = 0;
   int flushedLength = 0;
 
-  Float64List _doubleBuffer = new Float64List(1);
+  final Float64List _doubleBuffer = Float64List(1);
   Uint8List _doubleBufferUint8;
 
   int get offset => length + flushedLength;
@@ -330,16 +331,16 @@
 
   void addByte(int byte) {
     _buffer[length++] = byte;
-    if (length == SIZE) {
+    if (length == _size) {
       _sink.add(_buffer);
-      _buffer = new Uint8List(SIZE);
+      _buffer = Uint8List(_size);
       length = 0;
-      flushedLength += SIZE;
+      flushedLength += _size;
     }
   }
 
   void addByte2(int byte1, int byte2) {
-    if (length < SAFE_SIZE) {
+    if (length < _safeSize) {
       _buffer[length++] = byte1;
       _buffer[length++] = byte2;
     } else {
@@ -349,7 +350,7 @@
   }
 
   void addByte4(int byte1, int byte2, int byte3, int byte4) {
-    if (length < SAFE_SIZE) {
+    if (length < _safeSize) {
       _buffer[length++] = byte1;
       _buffer[length++] = byte2;
       _buffer[length++] = byte3;
@@ -365,22 +366,22 @@
   void addBytes(List<int> bytes) {
     // Avoid copying a large buffer into the another large buffer. Also, if
     // the bytes buffer is too large to fit in our own buffer, just emit both.
-    if (length + bytes.length < SIZE &&
-        (bytes.length < SMALL || length < SMALL)) {
+    if (length + bytes.length < _size &&
+        (bytes.length < _small || length < _small)) {
       _buffer.setRange(length, length + bytes.length, bytes);
       length += bytes.length;
-    } else if (bytes.length < SMALL) {
+    } else if (bytes.length < _small) {
       // Flush as much as we can in the current buffer.
-      _buffer.setRange(length, SIZE, bytes);
+      _buffer.setRange(length, _size, bytes);
       _sink.add(_buffer);
       // Copy over the remainder into a new buffer. It is guaranteed to fit
       // because the input byte array is small.
-      int alreadyEmitted = SIZE - length;
+      int alreadyEmitted = _size - length;
       int remainder = bytes.length - alreadyEmitted;
-      _buffer = new Uint8List(SIZE);
+      _buffer = Uint8List(_size);
       _buffer.setRange(0, remainder, bytes, alreadyEmitted);
       length = remainder;
-      flushedLength += SIZE;
+      flushedLength += _size;
     } else {
       flush();
       _sink.add(bytes);
@@ -390,7 +391,7 @@
 
   void flush() {
     _sink.add(_buffer.sublist(0, length));
-    _buffer = new Uint8List(SIZE);
+    _buffer = Uint8List(_size);
     flushedLength += length;
     length = 0;
   }
diff --git a/pkg/dart2js_info/lib/src/binary/source.dart b/pkg/dart2js_info/lib/src/binary/source.dart
index 5ada983..d423f3f 100644
--- a/pkg/dart2js_info/lib/src/binary/source.dart
+++ b/pkg/dart2js_info/lib/src/binary/source.dart
@@ -2,29 +2,29 @@
 // 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:typed_data';
 import 'dart:convert';
+import 'dart:typed_data';
 
 /// Interface for deserialization.
 // TODO(sigmund): share this with pkg:compiler/src/serialization/*
 abstract class DataSource {
   /// Reads a reference to an [E] value from this data source. If the value has
   /// not yet been deserialized, [f] is called to deserialize the value itself.
-  E readCached<E>(E f());
+  E readCached<E>(E Function() f);
 
   /// Reads a potentially `null` [E] value from this data source, calling [f] to
   /// read the non-null value from the data source.
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeValueOrNull].
-  E readValueOrNull<E>(E f());
+  E readValueOrNull<E>(E Function() f);
 
   /// Reads a list of [E] values from this data source. If [emptyAsNull] is
   /// `true`, `null` is returned instead of an empty list.
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeList].
-  List<E> readList<E>(E f(), {bool emptyAsNull: false});
+  List<E> readList<E>(E Function() f, {bool emptyAsNull = false});
 
   /// Reads a boolean value from this data source.
   bool readBool();
@@ -53,7 +53,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeStrings].
-  List<String> readStrings({bool emptyAsNull: false});
+  List<String> readStrings({bool emptyAsNull = false});
 
   /// Reads a map from string values to [V] values from this data source,
   /// calling [f] to read each value from the data source. If [emptyAsNull] is
@@ -61,7 +61,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeStringMap].
-  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull: false});
+  Map<String, V> readStringMap<V>(V Function() f, {bool emptyAsNull = false});
 
   /// Reads an enum value from the list of enum [values] from this data source.
   ///
@@ -81,7 +81,7 @@
 /// Mixin that implements all convenience methods of [DataSource].
 abstract class DataSourceMixin implements DataSource {
   @override
-  E readValueOrNull<E>(E f()) {
+  E readValueOrNull<E>(E Function() f) {
     bool hasValue = readBool();
     if (hasValue) {
       return f();
@@ -90,14 +90,10 @@
   }
 
   @override
-  List<E> readList<E>(E f(), {bool emptyAsNull: false}) {
+  List<E> readList<E>(E Function() f, {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<E> list = new List<E>(count);
-    for (int i = 0; i < count; i++) {
-      list[i] = f();
-    }
-    return list;
+    return List.generate(count, (i) => f());
   }
 
   @override
@@ -119,18 +115,14 @@
   }
 
   @override
-  List<String> readStrings({bool emptyAsNull: false}) {
+  List<String> readStrings({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<String> list = new List<String>(count);
-    for (int i = 0; i < count; i++) {
-      list[i] = readString();
-    }
-    return list;
+    return List.generate(count, (index) => readString());
   }
 
   @override
-  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull: false}) {
+  Map<String, V> readStringMap<V>(V Function() f, {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<String, V> map = {};
@@ -147,7 +139,7 @@
 class IndexedSource<E> {
   final int Function() _readInt;
   final List<E> _cache = [];
-  final Set<int> _pending = new Set();
+  final Set<int> _pending = {};
 
   IndexedSource(this._readInt);
 
@@ -155,7 +147,7 @@
   ///
   /// If the value hasn't yet been read, [readValue] is called to deserialize
   /// the value itself.
-  E read(E readValue()) {
+  E read(E Function() readValue) {
     int index = _readInt();
     if (_pending.contains(index)) throw "serialization cycles not supported";
     if (index >= _cache.length) {
@@ -177,17 +169,17 @@
     implements DataSource {
   IndexedSource<String> _stringIndex;
   IndexedSource<Uri> _uriIndex;
-  Map<Type, IndexedSource> _generalCaches = {};
+  final Map<Type, IndexedSource> _generalCaches = {};
 
   AbstractDataSource() {
-    _stringIndex = new IndexedSource<String>(_readIntInternal);
-    _uriIndex = new IndexedSource<Uri>(_readIntInternal);
+    _stringIndex = IndexedSource<String>(_readIntInternal);
+    _uriIndex = IndexedSource<Uri>(_readIntInternal);
   }
 
   @override
-  E readCached<E>(E f()) {
+  E readCached<E>(E Function() f) {
     IndexedSource source =
-        _generalCaches[E] ??= new IndexedSource<E>(_readIntInternal);
+        _generalCaches[E] ??= IndexedSource<E>(_readIntInternal);
     return source.read(f);
   }
 
@@ -254,7 +246,7 @@
   @override
   String _readStringInternal() {
     int length = _readIntInternal();
-    List<int> bytes = new Uint8List(length);
+    List<int> bytes = Uint8List(length);
     bytes.setRange(0, bytes.length, _bytes, _byteOffset);
     _byteOffset += bytes.length;
     return utf8.decode(bytes);
diff --git a/pkg/dart2js_info/lib/src/diff.dart b/pkg/dart2js_info/lib/src/diff.dart
index 2d43f28..29dd698 100644
--- a/pkg/dart2js_info/lib/src/diff.dart
+++ b/pkg/dart2js_info/lib/src/diff.dart
@@ -29,12 +29,12 @@
 }
 
 List<Diff> diff(AllInfo oldInfo, AllInfo newInfo) {
-  var differ = new _InfoDiffer(oldInfo, newInfo);
+  var differ = _InfoDiffer(oldInfo, newInfo);
   differ.diff();
   return differ.diffs;
 }
 
-class _InfoDiffer extends InfoVisitor<Null> {
+class _InfoDiffer extends InfoVisitor<void> {
   final AllInfo _old;
   final AllInfo _new;
 
@@ -50,23 +50,23 @@
 
   @override
   visitAll(AllInfo info) {
-    throw new StateError('should not diff AllInfo');
+    throw StateError('should not diff AllInfo');
   }
 
   @override
   visitProgram(ProgramInfo info) {
-    throw new StateError('should not diff ProgramInfo');
+    throw StateError('should not diff ProgramInfo');
   }
 
   @override
   visitOutput(OutputUnitInfo info) {
-    throw new StateError('should not diff OutputUnitInfo');
+    throw StateError('should not diff OutputUnitInfo');
   }
 
   // TODO(het): diff constants
   @override
   visitConstant(ConstantInfo info) {
-    throw new StateError('should not diff ConstantInfo');
+    throw StateError('should not diff ConstantInfo');
   }
 
   @override
@@ -88,6 +88,13 @@
   }
 
   @override
+  visitClassType(ClassTypeInfo info) {
+    var other = _other as ClassTypeInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+  }
+
+  @override
   visitClosure(ClosureInfo info) {
     var other = _other as ClosureInfo;
     _checkSize(info, other);
@@ -120,7 +127,7 @@
 
   void _checkSize(BasicInfo info, BasicInfo other) {
     if (info.size != other.size) {
-      diffs.add(new SizeDiff(info, other.size - info.size));
+      diffs.add(SizeDiff(info, other.size - info.size));
     }
   }
 
@@ -128,7 +135,7 @@
     var oldIsDeferred = _isDeferred(oldInfo);
     var newIsDeferred = _isDeferred(newInfo);
     if (oldIsDeferred != newIsDeferred) {
-      diffs.add(new DeferredStatusDiff(oldInfo, oldIsDeferred));
+      diffs.add(DeferredStatusDiff(oldInfo, oldIsDeferred));
     }
   }
 
@@ -150,7 +157,7 @@
     }
     for (var oldName in oldNames.keys) {
       if (newNames[oldName] == null) {
-        diffs.add(new RemoveDiff(oldNames[oldName]));
+        diffs.add(RemoveDiff(oldNames[oldName]));
       } else {
         _other = newNames[oldName];
         oldNames[oldName].accept(this);
@@ -158,7 +165,7 @@
     }
     for (var newName in newNames.keys) {
       if (oldNames[newName] == null) {
-        diffs.add(new AddDiff(newNames[newName]));
+        diffs.add(AddDiff(newNames[newName]));
       }
     }
   }
diff --git a/pkg/dart2js_info/lib/src/graph.dart b/pkg/dart2js_info/lib/src/graph.dart
index 1eaabce..9233d9f 100644
--- a/pkg/dart2js_info/lib/src/graph.dart
+++ b/pkg/dart2js_info/lib/src/graph.dart
@@ -25,13 +25,13 @@
   /// of nodes. The nodes in each strongly connected components only have edges
   /// that point to nodes in the same component or earlier components.
   List<List<N>> computeTopologicalSort() {
-    _SccFinder<N> finder = new _SccFinder<N>(this);
+    _SccFinder<N> finder = _SccFinder<N>(this);
     return finder.computeTopologicalSort();
   }
 
   /// Whether [source] can transitively reach [target].
   bool containsPath(N source, N target) {
-    Set<N> seen = new Set<N>();
+    Set<N> seen = <N>{};
     bool helper(N node) {
       if (identical(node, target)) return true;
       if (!seen.add(node)) return false;
@@ -43,7 +43,7 @@
 
   /// Returns all nodes reachable from [root] in post order.
   Iterable<N> postOrder(N root) sync* {
-    var seen = new Set<N>();
+    var seen = <N>{};
     Iterable<N> helper(N n) sync* {
       if (!seen.add(n)) return;
       for (var x in targetsOf(n)) {
@@ -57,7 +57,7 @@
 
   /// Returns an iterable of all nodes reachable from [root] in preorder.
   Iterable<N> preOrder(N root) sync* {
-    var seen = new Set<N>();
+    var seen = <N>{};
     var stack = <N>[root];
     while (stack.isNotEmpty) {
       var next = stack.removeLast();
@@ -74,7 +74,7 @@
   /// the node itself will be returned.
   List<N> findCycleContaining(N node) {
     assert(node != null);
-    _SccFinder<N> finder = new _SccFinder<N>(this);
+    _SccFinder<N> finder = _SccFinder<N>(this);
     return finder._componentContaining(node);
   }
 
@@ -103,8 +103,8 @@
   /// Internally we compute dominators using (Cooper, Harvey, and Kennedy's
   /// algorithm)[http://www.cs.rice.edu/~keith/EMBED/dom.pdf].
   Graph<N> dominatorTree(N root) {
-    var iDom = (new _DominatorFinder(this)..run(root)).immediateDominators;
-    var graph = new EdgeListGraph<N>();
+    var iDom = (_DominatorFinder(this)..run(root)).immediateDominators;
+    var graph = EdgeListGraph<N>();
     for (N node in iDom.keys) {
       if (node != root) graph.addEdge(iDom[node], node);
     }
@@ -114,18 +114,23 @@
 
 class EdgeListGraph<N> extends Graph<N> {
   /// Edges in the graph.
-  Map<N, Set<N>> _edges = new Map<N, Set<N>>();
+  final Map<N, Set<N>> _edges = <N, Set<N>>{};
 
   /// The reverse of _edges.
-  Map<N, Set<N>> _revEdges = new Map<N, Set<N>>();
+  final Map<N, Set<N>> _revEdges = <N, Set<N>>{};
 
+  @override
   Iterable<N> get nodes => _edges.keys;
+  @override
   bool get isEmpty => _edges.isEmpty;
+  @override
   int get nodeCount => _edges.length;
 
-  final _empty = new Set<N>();
+  final _empty = <N>{};
 
+  @override
   Iterable<N> targetsOf(N source) => _edges[source] ?? _empty;
+  @override
   Iterable<N> sourcesOf(N source) => _revEdges[source] ?? _empty;
 
   void addEdge(N source, N target) {
@@ -139,8 +144,8 @@
 
   void addNode(N node) {
     assert(node != null);
-    _edges.putIfAbsent(node, () => new Set<N>());
-    _revEdges.putIfAbsent(node, () => new Set<N>());
+    _edges.putIfAbsent(node, () => <N>{});
+    _revEdges.putIfAbsent(node, () => <N>{});
   }
 
   /// Remove the edge from the given [source] node to the given [target] node.
@@ -200,15 +205,15 @@
   int _index = 0;
 
   /// Nodes that are being visited in order to identify components.
-  List<N> _stack = new List<N>();
+  final List<N> _stack = <N>[];
 
   /// Information associated with each node.
-  Map<N, _NodeInfo<N>> _info = <N, _NodeInfo<N>>{};
+  final Map<N, _NodeInfo<N>> _info = <N, _NodeInfo<N>>{};
 
   /// All strongly connected components found, in topological sort order (each
   /// node in a strongly connected component only has edges that point to nodes
   /// in the same component or earlier components).
-  List<List<N>> _allComponents = new List<List<N>>();
+  final List<List<N>> _allComponents = <List<N>>[];
 
   _SccFinder(this._graph);
 
@@ -246,7 +251,7 @@
   /// component.
   _NodeInfo<N> _strongConnect(N v) {
     // Set the depth index for v to the smallest unused index
-    var vInfo = new _NodeInfo<N>(_index++);
+    var vInfo = _NodeInfo<N>(_index++);
     _info[v] = vInfo;
     _push(v);
 
@@ -264,7 +269,7 @@
 
     // If v is a root node, pop the stack and generate an SCC
     if (vInfo.lowlink == vInfo.index) {
-      var component = new List<N>();
+      var component = <N>[];
       N w;
       do {
         w = _pop();
diff --git a/pkg/dart2js_info/lib/src/io.dart b/pkg/dart2js_info/lib/src/io.dart
index b37c331..affc8de 100644
--- a/pkg/dart2js_info/lib/src/io.dart
+++ b/pkg/dart2js_info/lib/src/io.dart
@@ -6,9 +6,9 @@
 import 'package:dart2js_info/binary_serialization.dart' as binary;
 
 Future<AllInfo> infoFromFile(String fileName) async {
-  var file = new File(fileName);
+  var file = File(fileName);
   if (fileName.endsWith('.json')) {
-    return new AllInfoJsonCodec().decode(jsonDecode(await file.readAsString()));
+    return AllInfoJsonCodec().decode(jsonDecode(await file.readAsString()));
   } else {
     return binary.decode(file.readAsBytesSync());
   }
diff --git a/pkg/dart2js_info/lib/src/proto/info.pb.dart b/pkg/dart2js_info/lib/src/proto/info.pb.dart
index 910b7b2..28d20a6 100644
--- a/pkg/dart2js_info/lib/src/proto/info.pb.dart
+++ b/pkg/dart2js_info/lib/src/proto/info.pb.dart
@@ -2,8 +2,8 @@
 //  Generated code. Do not modify.
 //  source: info.proto
 //
-// @dart = 2.3
-// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+// @dart = 2.12
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
 
 import 'dart:core' as $core;
 
@@ -11,24 +11,57 @@
 import 'package:protobuf/protobuf.dart' as $pb;
 
 class DependencyInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('DependencyInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'DependencyInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'targetId')
-    ..aOS(2, 'mask')
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'targetId')
+    ..aOS(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'mask')
     ..hasRequiredFields = false;
 
   DependencyInfoPB._() : super();
-  factory DependencyInfoPB() => create();
+  factory DependencyInfoPB({
+    $core.String? targetId,
+    $core.String? mask,
+  }) {
+    final _result = create();
+    if (targetId != null) {
+      _result.targetId = targetId;
+    }
+    if (mask != null) {
+      _result.mask = mask;
+    }
+    return _result;
+  }
   factory DependencyInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory DependencyInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   DependencyInfoPB clone() => DependencyInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   DependencyInfoPB copyWith(void Function(DependencyInfoPB) updates) =>
-      super.copyWith((message) => updates(message as DependencyInfoPB));
+      super.copyWith((message) => updates(message as DependencyInfoPB))
+          as DependencyInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static DependencyInfoPB create() => DependencyInfoPB._();
@@ -38,7 +71,7 @@
   @$core.pragma('dart2js:noInline')
   static DependencyInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<DependencyInfoPB>(create);
-  static DependencyInfoPB _defaultInstance;
+  static DependencyInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get targetId => $_getSZ(0);
@@ -66,31 +99,74 @@
 }
 
 class AllInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('AllInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'AllInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOM<ProgramInfoPB>(1, 'program', subBuilder: ProgramInfoPB.create)
-    ..m<$core.String, InfoPB>(2, 'allInfos',
+    ..aOM<ProgramInfoPB>(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'program',
+        subBuilder: ProgramInfoPB.create)
+    ..m<$core.String, InfoPB>(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'allInfos',
         entryClassName: 'AllInfoPB.AllInfosEntry',
         keyFieldType: $pb.PbFieldType.OS,
         valueFieldType: $pb.PbFieldType.OM,
         valueCreator: InfoPB.create,
         packageName: const $pb.PackageName('dart2js_info.proto'))
-    ..pc<LibraryDeferredImportsPB>(3, 'deferredImports', $pb.PbFieldType.PM,
+    ..pc<LibraryDeferredImportsPB>(
+        3,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'deferredImports',
+        $pb.PbFieldType.PM,
         subBuilder: LibraryDeferredImportsPB.create)
     ..hasRequiredFields = false;
 
   AllInfoPB._() : super();
-  factory AllInfoPB() => create();
+  factory AllInfoPB({
+    ProgramInfoPB? program,
+    $core.Map<$core.String, InfoPB>? allInfos,
+    $core.Iterable<LibraryDeferredImportsPB>? deferredImports,
+  }) {
+    final _result = create();
+    if (program != null) {
+      _result.program = program;
+    }
+    if (allInfos != null) {
+      _result.allInfos.addAll(allInfos);
+    }
+    if (deferredImports != null) {
+      _result.deferredImports.addAll(deferredImports);
+    }
+    return _result;
+  }
   factory AllInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory AllInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   AllInfoPB clone() => AllInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   AllInfoPB copyWith(void Function(AllInfoPB) updates) =>
-      super.copyWith((message) => updates(message as AllInfoPB));
+      super.copyWith((message) => updates(message as AllInfoPB))
+          as AllInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static AllInfoPB create() => AllInfoPB._();
@@ -99,7 +175,7 @@
   @$core.pragma('dart2js:noInline')
   static AllInfoPB getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AllInfoPB>(create);
-  static AllInfoPB _defaultInstance;
+  static AllInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   ProgramInfoPB get program => $_getN(0);
@@ -131,6 +207,7 @@
   outputUnitInfo,
   typedefInfo,
   closureInfo,
+  classTypeInfo,
   notSet
 }
 
@@ -144,45 +221,209 @@
     105: InfoPB_Concrete.outputUnitInfo,
     106: InfoPB_Concrete.typedefInfo,
     107: InfoPB_Concrete.closureInfo,
+    108: InfoPB_Concrete.classTypeInfo,
     0: InfoPB_Concrete.notSet
   };
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('InfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'InfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..oo(0, [100, 101, 102, 103, 104, 105, 106, 107])
-    ..aOS(1, 'name')
-    ..a<$core.int>(2, 'id', $pb.PbFieldType.O3)
-    ..aOS(3, 'serializedId')
-    ..aOS(4, 'coverageId')
-    ..a<$core.int>(5, 'size', $pb.PbFieldType.O3)
-    ..aOS(6, 'parentId')
-    ..pc<DependencyInfoPB>(7, 'uses', $pb.PbFieldType.PM,
+    ..oo(0, [100, 101, 102, 103, 104, 105, 106, 107, 108])
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'name')
+    ..a<$core.int>(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'id',
+        $pb.PbFieldType.O3)
+    ..aOS(
+        3,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'serializedId')
+    ..aOS(
+        4,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'coverageId')
+    ..a<$core.int>(
+        5,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'size',
+        $pb.PbFieldType.O3)
+    ..aOS(
+        6,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'parentId')
+    ..pc<DependencyInfoPB>(
+        7,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'uses',
+        $pb.PbFieldType.PM,
         subBuilder: DependencyInfoPB.create)
-    ..aOS(8, 'outputUnitId')
-    ..aOM<LibraryInfoPB>(100, 'libraryInfo', subBuilder: LibraryInfoPB.create)
-    ..aOM<ClassInfoPB>(101, 'classInfo', subBuilder: ClassInfoPB.create)
-    ..aOM<FunctionInfoPB>(102, 'functionInfo',
+    ..aOS(
+        8,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'outputUnitId')
+    ..aOM<LibraryInfoPB>(
+        100,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'libraryInfo',
+        subBuilder: LibraryInfoPB.create)
+    ..aOM<ClassInfoPB>(
+        101,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'classInfo',
+        subBuilder: ClassInfoPB.create)
+    ..aOM<FunctionInfoPB>(
+        102,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'functionInfo',
         subBuilder: FunctionInfoPB.create)
-    ..aOM<FieldInfoPB>(103, 'fieldInfo', subBuilder: FieldInfoPB.create)
-    ..aOM<ConstantInfoPB>(104, 'constantInfo',
+    ..aOM<FieldInfoPB>(
+        103,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'fieldInfo',
+        subBuilder: FieldInfoPB.create)
+    ..aOM<ConstantInfoPB>(
+        104,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'constantInfo',
         subBuilder: ConstantInfoPB.create)
-    ..aOM<OutputUnitInfoPB>(105, 'outputUnitInfo',
+    ..aOM<OutputUnitInfoPB>(
+        105,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'outputUnitInfo',
         subBuilder: OutputUnitInfoPB.create)
-    ..aOM<TypedefInfoPB>(106, 'typedefInfo', subBuilder: TypedefInfoPB.create)
-    ..aOM<ClosureInfoPB>(107, 'closureInfo', subBuilder: ClosureInfoPB.create)
+    ..aOM<TypedefInfoPB>(
+        106,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'typedefInfo',
+        subBuilder: TypedefInfoPB.create)
+    ..aOM<ClosureInfoPB>(
+        107,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'closureInfo',
+        subBuilder: ClosureInfoPB.create)
+    ..aOM<ClassTypeInfoPB>(
+        108,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'classTypeInfo',
+        subBuilder: ClassTypeInfoPB.create)
     ..hasRequiredFields = false;
 
   InfoPB._() : super();
-  factory InfoPB() => create();
+  factory InfoPB({
+    $core.String? name,
+    $core.int? id,
+    $core.String? serializedId,
+    $core.String? coverageId,
+    $core.int? size,
+    $core.String? parentId,
+    $core.Iterable<DependencyInfoPB>? uses,
+    $core.String? outputUnitId,
+    LibraryInfoPB? libraryInfo,
+    ClassInfoPB? classInfo,
+    FunctionInfoPB? functionInfo,
+    FieldInfoPB? fieldInfo,
+    ConstantInfoPB? constantInfo,
+    OutputUnitInfoPB? outputUnitInfo,
+    TypedefInfoPB? typedefInfo,
+    ClosureInfoPB? closureInfo,
+    ClassTypeInfoPB? classTypeInfo,
+  }) {
+    final _result = create();
+    if (name != null) {
+      _result.name = name;
+    }
+    if (id != null) {
+      _result.id = id;
+    }
+    if (serializedId != null) {
+      _result.serializedId = serializedId;
+    }
+    if (coverageId != null) {
+      _result.coverageId = coverageId;
+    }
+    if (size != null) {
+      _result.size = size;
+    }
+    if (parentId != null) {
+      _result.parentId = parentId;
+    }
+    if (uses != null) {
+      _result.uses.addAll(uses);
+    }
+    if (outputUnitId != null) {
+      _result.outputUnitId = outputUnitId;
+    }
+    if (libraryInfo != null) {
+      _result.libraryInfo = libraryInfo;
+    }
+    if (classInfo != null) {
+      _result.classInfo = classInfo;
+    }
+    if (functionInfo != null) {
+      _result.functionInfo = functionInfo;
+    }
+    if (fieldInfo != null) {
+      _result.fieldInfo = fieldInfo;
+    }
+    if (constantInfo != null) {
+      _result.constantInfo = constantInfo;
+    }
+    if (outputUnitInfo != null) {
+      _result.outputUnitInfo = outputUnitInfo;
+    }
+    if (typedefInfo != null) {
+      _result.typedefInfo = typedefInfo;
+    }
+    if (closureInfo != null) {
+      _result.closureInfo = closureInfo;
+    }
+    if (classTypeInfo != null) {
+      _result.classTypeInfo = classTypeInfo;
+    }
+    return _result;
+  }
   factory InfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory InfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   InfoPB clone() => InfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   InfoPB copyWith(void Function(InfoPB) updates) =>
-      super.copyWith((message) => updates(message as InfoPB));
+      super.copyWith((message) => updates(message as InfoPB))
+          as InfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static InfoPB create() => InfoPB._();
@@ -191,9 +432,9 @@
   @$core.pragma('dart2js:noInline')
   static InfoPB getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<InfoPB>(create);
-  static InfoPB _defaultInstance;
+  static InfoPB? _defaultInstance;
 
-  InfoPB_Concrete whichConcrete() => _InfoPB_ConcreteByTag[$_whichOneof(0)];
+  InfoPB_Concrete whichConcrete() => _InfoPB_ConcreteByTag[$_whichOneof(0)]!;
   void clearConcrete() => clearField($_whichOneof(0));
 
   @$pb.TagNumber(1)
@@ -394,38 +635,174 @@
   void clearClosureInfo() => clearField(107);
   @$pb.TagNumber(107)
   ClosureInfoPB ensureClosureInfo() => $_ensure(15);
+
+  @$pb.TagNumber(108)
+  ClassTypeInfoPB get classTypeInfo => $_getN(16);
+  @$pb.TagNumber(108)
+  set classTypeInfo(ClassTypeInfoPB v) {
+    setField(108, v);
+  }
+
+  @$pb.TagNumber(108)
+  $core.bool hasClassTypeInfo() => $_has(16);
+  @$pb.TagNumber(108)
+  void clearClassTypeInfo() => clearField(108);
+  @$pb.TagNumber(108)
+  ClassTypeInfoPB ensureClassTypeInfo() => $_ensure(16);
 }
 
 class ProgramInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ProgramInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'ProgramInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'entrypointId')
-    ..a<$core.int>(2, 'size', $pb.PbFieldType.O3)
-    ..aOS(3, 'dart2jsVersion')
-    ..aInt64(4, 'compilationMoment')
-    ..aInt64(5, 'compilationDuration')
-    ..aInt64(6, 'toProtoDuration')
-    ..aInt64(7, 'dumpInfoDuration')
-    ..aOB(8, 'noSuchMethodEnabled')
-    ..aOB(9, 'isRuntimeTypeUsed')
-    ..aOB(10, 'isIsolateUsed')
-    ..aOB(11, 'isFunctionApplyUsed')
-    ..aOB(12, 'isMirrorsUsed')
-    ..aOB(13, 'minified')
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'entrypointId')
+    ..a<$core.int>(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'size',
+        $pb.PbFieldType.O3)
+    ..aOS(
+        3,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'dart2jsVersion')
+    ..aInt64(
+        4,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'compilationMoment')
+    ..aInt64(
+        5,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'compilationDuration')
+    ..aInt64(
+        6,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'toProtoDuration')
+    ..aInt64(
+        7,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'dumpInfoDuration')
+    ..aOB(
+        8,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'noSuchMethodEnabled')
+    ..aOB(
+        9,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isRuntimeTypeUsed')
+    ..aOB(
+        10,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isIsolateUsed')
+    ..aOB(
+        11,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isFunctionApplyUsed')
+    ..aOB(
+        12,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isMirrorsUsed')
+    ..aOB(
+        13,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'minified')
     ..hasRequiredFields = false;
 
   ProgramInfoPB._() : super();
-  factory ProgramInfoPB() => create();
+  factory ProgramInfoPB({
+    $core.String? entrypointId,
+    $core.int? size,
+    $core.String? dart2jsVersion,
+    $fixnum.Int64? compilationMoment,
+    $fixnum.Int64? compilationDuration,
+    $fixnum.Int64? toProtoDuration,
+    $fixnum.Int64? dumpInfoDuration,
+    $core.bool? noSuchMethodEnabled,
+    $core.bool? isRuntimeTypeUsed,
+    $core.bool? isIsolateUsed,
+    $core.bool? isFunctionApplyUsed,
+    $core.bool? isMirrorsUsed,
+    $core.bool? minified,
+  }) {
+    final _result = create();
+    if (entrypointId != null) {
+      _result.entrypointId = entrypointId;
+    }
+    if (size != null) {
+      _result.size = size;
+    }
+    if (dart2jsVersion != null) {
+      _result.dart2jsVersion = dart2jsVersion;
+    }
+    if (compilationMoment != null) {
+      _result.compilationMoment = compilationMoment;
+    }
+    if (compilationDuration != null) {
+      _result.compilationDuration = compilationDuration;
+    }
+    if (toProtoDuration != null) {
+      _result.toProtoDuration = toProtoDuration;
+    }
+    if (dumpInfoDuration != null) {
+      _result.dumpInfoDuration = dumpInfoDuration;
+    }
+    if (noSuchMethodEnabled != null) {
+      _result.noSuchMethodEnabled = noSuchMethodEnabled;
+    }
+    if (isRuntimeTypeUsed != null) {
+      _result.isRuntimeTypeUsed = isRuntimeTypeUsed;
+    }
+    if (isIsolateUsed != null) {
+      _result.isIsolateUsed = isIsolateUsed;
+    }
+    if (isFunctionApplyUsed != null) {
+      _result.isFunctionApplyUsed = isFunctionApplyUsed;
+    }
+    if (isMirrorsUsed != null) {
+      _result.isMirrorsUsed = isMirrorsUsed;
+    }
+    if (minified != null) {
+      _result.minified = minified;
+    }
+    return _result;
+  }
   factory ProgramInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ProgramInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   ProgramInfoPB clone() => ProgramInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   ProgramInfoPB copyWith(void Function(ProgramInfoPB) updates) =>
-      super.copyWith((message) => updates(message as ProgramInfoPB));
+      super.copyWith((message) => updates(message as ProgramInfoPB))
+          as ProgramInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static ProgramInfoPB create() => ProgramInfoPB._();
@@ -435,7 +812,7 @@
   @$core.pragma('dart2js:noInline')
   static ProgramInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ProgramInfoPB>(create);
-  static ProgramInfoPB _defaultInstance;
+  static ProgramInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get entrypointId => $_getSZ(0);
@@ -595,24 +972,57 @@
 }
 
 class LibraryInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('LibraryInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'LibraryInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'uri')
-    ..pPS(2, 'childrenIds')
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'uri')
+    ..pPS(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'childrenIds')
     ..hasRequiredFields = false;
 
   LibraryInfoPB._() : super();
-  factory LibraryInfoPB() => create();
+  factory LibraryInfoPB({
+    $core.String? uri,
+    $core.Iterable<$core.String>? childrenIds,
+  }) {
+    final _result = create();
+    if (uri != null) {
+      _result.uri = uri;
+    }
+    if (childrenIds != null) {
+      _result.childrenIds.addAll(childrenIds);
+    }
+    return _result;
+  }
   factory LibraryInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory LibraryInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   LibraryInfoPB clone() => LibraryInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   LibraryInfoPB copyWith(void Function(LibraryInfoPB) updates) =>
-      super.copyWith((message) => updates(message as LibraryInfoPB));
+      super.copyWith((message) => updates(message as LibraryInfoPB))
+          as LibraryInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static LibraryInfoPB create() => LibraryInfoPB._();
@@ -622,7 +1032,7 @@
   @$core.pragma('dart2js:noInline')
   static LibraryInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<LibraryInfoPB>(create);
-  static LibraryInfoPB _defaultInstance;
+  static LibraryInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get uri => $_getSZ(0);
@@ -641,23 +1051,48 @@
 }
 
 class OutputUnitInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('OutputUnitInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'OutputUnitInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..pPS(1, 'imports')
+    ..pPS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'imports')
     ..hasRequiredFields = false;
 
   OutputUnitInfoPB._() : super();
-  factory OutputUnitInfoPB() => create();
+  factory OutputUnitInfoPB({
+    $core.Iterable<$core.String>? imports,
+  }) {
+    final _result = create();
+    if (imports != null) {
+      _result.imports.addAll(imports);
+    }
+    return _result;
+  }
   factory OutputUnitInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory OutputUnitInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   OutputUnitInfoPB clone() => OutputUnitInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   OutputUnitInfoPB copyWith(void Function(OutputUnitInfoPB) updates) =>
-      super.copyWith((message) => updates(message as OutputUnitInfoPB));
+      super.copyWith((message) => updates(message as OutputUnitInfoPB))
+          as OutputUnitInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static OutputUnitInfoPB create() => OutputUnitInfoPB._();
@@ -667,31 +1102,64 @@
   @$core.pragma('dart2js:noInline')
   static OutputUnitInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<OutputUnitInfoPB>(create);
-  static OutputUnitInfoPB _defaultInstance;
+  static OutputUnitInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.List<$core.String> get imports => $_getList(0);
 }
 
 class ClassInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClassInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'ClassInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOB(1, 'isAbstract')
-    ..pPS(2, 'childrenIds')
+    ..aOB(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isAbstract')
+    ..pPS(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'childrenIds')
     ..hasRequiredFields = false;
 
   ClassInfoPB._() : super();
-  factory ClassInfoPB() => create();
+  factory ClassInfoPB({
+    $core.bool? isAbstract,
+    $core.Iterable<$core.String>? childrenIds,
+  }) {
+    final _result = create();
+    if (isAbstract != null) {
+      _result.isAbstract = isAbstract;
+    }
+    if (childrenIds != null) {
+      _result.childrenIds.addAll(childrenIds);
+    }
+    return _result;
+  }
   factory ClassInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ClassInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   ClassInfoPB clone() => ClassInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   ClassInfoPB copyWith(void Function(ClassInfoPB) updates) =>
-      super.copyWith((message) => updates(message as ClassInfoPB));
+      super.copyWith((message) => updates(message as ClassInfoPB))
+          as ClassInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static ClassInfoPB create() => ClassInfoPB._();
@@ -700,7 +1168,7 @@
   @$core.pragma('dart2js:noInline')
   static ClassInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ClassInfoPB>(create);
-  static ClassInfoPB _defaultInstance;
+  static ClassInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.bool get isAbstract => $_getBF(0);
@@ -718,24 +1186,91 @@
   $core.List<$core.String> get childrenIds => $_getList(1);
 }
 
-class ConstantInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ConstantInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+class ClassTypeInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'ClassTypeInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'code')
+    ..hasRequiredFields = false;
+
+  ClassTypeInfoPB._() : super();
+  factory ClassTypeInfoPB() => create();
+  factory ClassTypeInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory ClassTypeInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
+  ClassTypeInfoPB clone() => ClassTypeInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
+  ClassTypeInfoPB copyWith(void Function(ClassTypeInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ClassTypeInfoPB))
+          as ClassTypeInfoPB; // ignore: deprecated_member_use
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ClassTypeInfoPB create() => ClassTypeInfoPB._();
+  ClassTypeInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ClassTypeInfoPB> createRepeated() =>
+      $pb.PbList<ClassTypeInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ClassTypeInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ClassTypeInfoPB>(create);
+  static ClassTypeInfoPB? _defaultInstance;
+}
+
+class ConstantInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'ConstantInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'code')
     ..hasRequiredFields = false;
 
   ConstantInfoPB._() : super();
-  factory ConstantInfoPB() => create();
+  factory ConstantInfoPB({
+    $core.String? code,
+  }) {
+    final _result = create();
+    if (code != null) {
+      _result.code = code;
+    }
+    return _result;
+  }
   factory ConstantInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ConstantInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   ConstantInfoPB clone() => ConstantInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   ConstantInfoPB copyWith(void Function(ConstantInfoPB) updates) =>
-      super.copyWith((message) => updates(message as ConstantInfoPB));
+      super.copyWith((message) => updates(message as ConstantInfoPB))
+          as ConstantInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static ConstantInfoPB create() => ConstantInfoPB._();
@@ -745,7 +1280,7 @@
   @$core.pragma('dart2js:noInline')
   static ConstantInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ConstantInfoPB>(create);
-  static ConstantInfoPB _defaultInstance;
+  static ConstantInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get code => $_getSZ(0);
@@ -761,28 +1296,93 @@
 }
 
 class FieldInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('FieldInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'FieldInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'type')
-    ..aOS(2, 'inferredType')
-    ..pPS(3, 'childrenIds')
-    ..aOS(4, 'code')
-    ..aOB(5, 'isConst')
-    ..aOS(6, 'initializerId')
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'type')
+    ..aOS(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'inferredType')
+    ..pPS(
+        3,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'childrenIds')
+    ..aOS(
+        4,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'code')
+    ..aOB(
+        5,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isConst')
+    ..aOS(
+        6,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'initializerId')
     ..hasRequiredFields = false;
 
   FieldInfoPB._() : super();
-  factory FieldInfoPB() => create();
+  factory FieldInfoPB({
+    $core.String? type,
+    $core.String? inferredType,
+    $core.Iterable<$core.String>? childrenIds,
+    $core.String? code,
+    $core.bool? isConst,
+    $core.String? initializerId,
+  }) {
+    final _result = create();
+    if (type != null) {
+      _result.type = type;
+    }
+    if (inferredType != null) {
+      _result.inferredType = inferredType;
+    }
+    if (childrenIds != null) {
+      _result.childrenIds.addAll(childrenIds);
+    }
+    if (code != null) {
+      _result.code = code;
+    }
+    if (isConst != null) {
+      _result.isConst = isConst;
+    }
+    if (initializerId != null) {
+      _result.initializerId = initializerId;
+    }
+    return _result;
+  }
   factory FieldInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory FieldInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   FieldInfoPB clone() => FieldInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   FieldInfoPB copyWith(void Function(FieldInfoPB) updates) =>
-      super.copyWith((message) => updates(message as FieldInfoPB));
+      super.copyWith((message) => updates(message as FieldInfoPB))
+          as FieldInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static FieldInfoPB create() => FieldInfoPB._();
@@ -791,7 +1391,7 @@
   @$core.pragma('dart2js:noInline')
   static FieldInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<FieldInfoPB>(create);
-  static FieldInfoPB _defaultInstance;
+  static FieldInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get type => $_getSZ(0);
@@ -858,23 +1458,48 @@
 }
 
 class TypedefInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('TypedefInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'TypedefInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'type')
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'type')
     ..hasRequiredFields = false;
 
   TypedefInfoPB._() : super();
-  factory TypedefInfoPB() => create();
+  factory TypedefInfoPB({
+    $core.String? type,
+  }) {
+    final _result = create();
+    if (type != null) {
+      _result.type = type;
+    }
+    return _result;
+  }
   factory TypedefInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory TypedefInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   TypedefInfoPB clone() => TypedefInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   TypedefInfoPB copyWith(void Function(TypedefInfoPB) updates) =>
-      super.copyWith((message) => updates(message as TypedefInfoPB));
+      super.copyWith((message) => updates(message as TypedefInfoPB))
+          as TypedefInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static TypedefInfoPB create() => TypedefInfoPB._();
@@ -884,7 +1509,7 @@
   @$core.pragma('dart2js:noInline')
   static TypedefInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<TypedefInfoPB>(create);
-  static TypedefInfoPB _defaultInstance;
+  static TypedefInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get type => $_getSZ(0);
@@ -900,26 +1525,75 @@
 }
 
 class FunctionModifiersPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('FunctionModifiersPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'FunctionModifiersPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOB(1, 'isStatic')
-    ..aOB(2, 'isConst')
-    ..aOB(3, 'isFactory')
-    ..aOB(4, 'isExternal')
+    ..aOB(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isStatic')
+    ..aOB(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isConst')
+    ..aOB(
+        3,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isFactory')
+    ..aOB(
+        4,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'isExternal')
     ..hasRequiredFields = false;
 
   FunctionModifiersPB._() : super();
-  factory FunctionModifiersPB() => create();
+  factory FunctionModifiersPB({
+    $core.bool? isStatic,
+    $core.bool? isConst,
+    $core.bool? isFactory,
+    $core.bool? isExternal,
+  }) {
+    final _result = create();
+    if (isStatic != null) {
+      _result.isStatic = isStatic;
+    }
+    if (isConst != null) {
+      _result.isConst = isConst;
+    }
+    if (isFactory != null) {
+      _result.isFactory = isFactory;
+    }
+    if (isExternal != null) {
+      _result.isExternal = isExternal;
+    }
+    return _result;
+  }
   factory FunctionModifiersPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory FunctionModifiersPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   FunctionModifiersPB clone() => FunctionModifiersPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   FunctionModifiersPB copyWith(void Function(FunctionModifiersPB) updates) =>
-      super.copyWith((message) => updates(message as FunctionModifiersPB));
+      super.copyWith((message) => updates(message as FunctionModifiersPB))
+          as FunctionModifiersPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static FunctionModifiersPB create() => FunctionModifiersPB._();
@@ -929,7 +1603,7 @@
   @$core.pragma('dart2js:noInline')
   static FunctionModifiersPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<FunctionModifiersPB>(create);
-  static FunctionModifiersPB _defaultInstance;
+  static FunctionModifiersPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.bool get isStatic => $_getBF(0);
@@ -981,25 +1655,66 @@
 }
 
 class ParameterInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ParameterInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'ParameterInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'name')
-    ..aOS(2, 'type')
-    ..aOS(3, 'declaredType')
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'name')
+    ..aOS(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'type')
+    ..aOS(
+        3,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'declaredType')
     ..hasRequiredFields = false;
 
   ParameterInfoPB._() : super();
-  factory ParameterInfoPB() => create();
+  factory ParameterInfoPB({
+    $core.String? name,
+    $core.String? type,
+    $core.String? declaredType,
+  }) {
+    final _result = create();
+    if (name != null) {
+      _result.name = name;
+    }
+    if (type != null) {
+      _result.type = type;
+    }
+    if (declaredType != null) {
+      _result.declaredType = declaredType;
+    }
+    return _result;
+  }
   factory ParameterInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ParameterInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   ParameterInfoPB clone() => ParameterInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   ParameterInfoPB copyWith(void Function(ParameterInfoPB) updates) =>
-      super.copyWith((message) => updates(message as ParameterInfoPB));
+      super.copyWith((message) => updates(message as ParameterInfoPB))
+          as ParameterInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static ParameterInfoPB create() => ParameterInfoPB._();
@@ -1009,7 +1724,7 @@
   @$core.pragma('dart2js:noInline')
   static ParameterInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ParameterInfoPB>(create);
-  static ParameterInfoPB _defaultInstance;
+  static ParameterInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get name => $_getSZ(0);
@@ -1049,32 +1764,115 @@
 }
 
 class FunctionInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('FunctionInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'FunctionInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOM<FunctionModifiersPB>(1, 'functionModifiers',
+    ..aOM<FunctionModifiersPB>(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'functionModifiers',
         subBuilder: FunctionModifiersPB.create)
-    ..pPS(2, 'childrenIds')
-    ..aOS(3, 'returnType')
-    ..aOS(4, 'inferredReturnType')
-    ..pc<ParameterInfoPB>(5, 'parameters', $pb.PbFieldType.PM,
+    ..pPS(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'childrenIds')
+    ..aOS(
+        3,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'returnType')
+    ..aOS(
+        4,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'inferredReturnType')
+    ..pc<ParameterInfoPB>(
+        5,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'parameters',
+        $pb.PbFieldType.PM,
         subBuilder: ParameterInfoPB.create)
-    ..aOS(6, 'sideEffects')
-    ..a<$core.int>(7, 'inlinedCount', $pb.PbFieldType.O3)
-    ..aOS(8, 'code')
+    ..aOS(
+        6,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'sideEffects')
+    ..a<$core.int>(
+        7,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'inlinedCount',
+        $pb.PbFieldType.O3)
+    ..aOS(
+        8,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'code')
     ..hasRequiredFields = false;
 
   FunctionInfoPB._() : super();
-  factory FunctionInfoPB() => create();
+  factory FunctionInfoPB({
+    FunctionModifiersPB? functionModifiers,
+    $core.Iterable<$core.String>? childrenIds,
+    $core.String? returnType,
+    $core.String? inferredReturnType,
+    $core.Iterable<ParameterInfoPB>? parameters,
+    $core.String? sideEffects,
+    $core.int? inlinedCount,
+    $core.String? code,
+  }) {
+    final _result = create();
+    if (functionModifiers != null) {
+      _result.functionModifiers = functionModifiers;
+    }
+    if (childrenIds != null) {
+      _result.childrenIds.addAll(childrenIds);
+    }
+    if (returnType != null) {
+      _result.returnType = returnType;
+    }
+    if (inferredReturnType != null) {
+      _result.inferredReturnType = inferredReturnType;
+    }
+    if (parameters != null) {
+      _result.parameters.addAll(parameters);
+    }
+    if (sideEffects != null) {
+      _result.sideEffects = sideEffects;
+    }
+    if (inlinedCount != null) {
+      _result.inlinedCount = inlinedCount;
+    }
+    if (code != null) {
+      _result.code = code;
+    }
+    return _result;
+  }
   factory FunctionInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory FunctionInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   FunctionInfoPB clone() => FunctionInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   FunctionInfoPB copyWith(void Function(FunctionInfoPB) updates) =>
-      super.copyWith((message) => updates(message as FunctionInfoPB));
+      super.copyWith((message) => updates(message as FunctionInfoPB))
+          as FunctionInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static FunctionInfoPB create() => FunctionInfoPB._();
@@ -1084,7 +1882,7 @@
   @$core.pragma('dart2js:noInline')
   static FunctionInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<FunctionInfoPB>(create);
-  static FunctionInfoPB _defaultInstance;
+  static FunctionInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   FunctionModifiersPB get functionModifiers => $_getN(0);
@@ -1168,23 +1966,48 @@
 }
 
 class ClosureInfoPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClosureInfoPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'ClosureInfoPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'functionId')
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'functionId')
     ..hasRequiredFields = false;
 
   ClosureInfoPB._() : super();
-  factory ClosureInfoPB() => create();
+  factory ClosureInfoPB({
+    $core.String? functionId,
+  }) {
+    final _result = create();
+    if (functionId != null) {
+      _result.functionId = functionId;
+    }
+    return _result;
+  }
   factory ClosureInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ClosureInfoPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   ClosureInfoPB clone() => ClosureInfoPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   ClosureInfoPB copyWith(void Function(ClosureInfoPB) updates) =>
-      super.copyWith((message) => updates(message as ClosureInfoPB));
+      super.copyWith((message) => updates(message as ClosureInfoPB))
+          as ClosureInfoPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static ClosureInfoPB create() => ClosureInfoPB._();
@@ -1194,7 +2017,7 @@
   @$core.pragma('dart2js:noInline')
   static ClosureInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ClosureInfoPB>(create);
-  static ClosureInfoPB _defaultInstance;
+  static ClosureInfoPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get functionId => $_getSZ(0);
@@ -1210,24 +2033,57 @@
 }
 
 class DeferredImportPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeferredImportPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'DeferredImportPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'prefix')
-    ..pPS(2, 'files')
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'prefix')
+    ..pPS(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'files')
     ..hasRequiredFields = false;
 
   DeferredImportPB._() : super();
-  factory DeferredImportPB() => create();
+  factory DeferredImportPB({
+    $core.String? prefix,
+    $core.Iterable<$core.String>? files,
+  }) {
+    final _result = create();
+    if (prefix != null) {
+      _result.prefix = prefix;
+    }
+    if (files != null) {
+      _result.files.addAll(files);
+    }
+    return _result;
+  }
   factory DeferredImportPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory DeferredImportPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   DeferredImportPB clone() => DeferredImportPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   DeferredImportPB copyWith(void Function(DeferredImportPB) updates) =>
-      super.copyWith((message) => updates(message as DeferredImportPB));
+      super.copyWith((message) => updates(message as DeferredImportPB))
+          as DeferredImportPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static DeferredImportPB create() => DeferredImportPB._();
@@ -1237,7 +2093,7 @@
   @$core.pragma('dart2js:noInline')
   static DeferredImportPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<DeferredImportPB>(create);
-  static DeferredImportPB _defaultInstance;
+  static DeferredImportPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get prefix => $_getSZ(0);
@@ -1256,28 +2112,70 @@
 }
 
 class LibraryDeferredImportsPB extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo('LibraryDeferredImportsPB',
-      package: const $pb.PackageName('dart2js_info.proto'),
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'LibraryDeferredImportsPB',
+      package: const $pb.PackageName(
+          const $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart2js_info.proto'),
       createEmptyInstance: create)
-    ..aOS(1, 'libraryUri')
-    ..aOS(2, 'libraryName')
-    ..pc<DeferredImportPB>(3, 'imports', $pb.PbFieldType.PM,
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'libraryUri')
+    ..aOS(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'libraryName')
+    ..pc<DeferredImportPB>(
+        3,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'imports',
+        $pb.PbFieldType.PM,
         subBuilder: DeferredImportPB.create)
     ..hasRequiredFields = false;
 
   LibraryDeferredImportsPB._() : super();
-  factory LibraryDeferredImportsPB() => create();
+  factory LibraryDeferredImportsPB({
+    $core.String? libraryUri,
+    $core.String? libraryName,
+    $core.Iterable<DeferredImportPB>? imports,
+  }) {
+    final _result = create();
+    if (libraryUri != null) {
+      _result.libraryUri = libraryUri;
+    }
+    if (libraryName != null) {
+      _result.libraryName = libraryName;
+    }
+    if (imports != null) {
+      _result.imports.addAll(imports);
+    }
+    return _result;
+  }
   factory LibraryDeferredImportsPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory LibraryDeferredImportsPB.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
   LibraryDeferredImportsPB clone() =>
       LibraryDeferredImportsPB()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
   LibraryDeferredImportsPB copyWith(
           void Function(LibraryDeferredImportsPB) updates) =>
-      super.copyWith((message) => updates(message as LibraryDeferredImportsPB));
+      super.copyWith((message) => updates(message as LibraryDeferredImportsPB))
+          as LibraryDeferredImportsPB; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static LibraryDeferredImportsPB create() => LibraryDeferredImportsPB._();
@@ -1287,7 +2185,7 @@
   @$core.pragma('dart2js:noInline')
   static LibraryDeferredImportsPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<LibraryDeferredImportsPB>(create);
-  static LibraryDeferredImportsPB _defaultInstance;
+  static LibraryDeferredImportsPB? _defaultInstance;
 
   @$pb.TagNumber(1)
   $core.String get libraryUri => $_getSZ(0);
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbenum.dart b/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
index 9990b57..505c9b9 100644
--- a/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
+++ b/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
@@ -2,5 +2,5 @@
 //  Generated code. Do not modify.
 //  source: info.proto
 //
-// @dart = 2.3
-// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+// @dart = 2.12
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbjson.dart b/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
index 00eff86..e14b5d8 100644
--- a/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
+++ b/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
@@ -2,9 +2,14 @@
 //  Generated code. Do not modify.
 //  source: info.proto
 //
-// @dart = 2.3
-// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+// @dart = 2.12
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
 
+import 'dart:core' as $core;
+import 'dart:convert' as $convert;
+import 'dart:typed_data' as $typed_data;
+
+@$core.Deprecated('Use dependencyInfoPBDescriptor instead')
 const DependencyInfoPB$json = const {
   '1': 'DependencyInfoPB',
   '2': const [
@@ -13,6 +18,10 @@
   ],
 };
 
+/// Descriptor for `DependencyInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List dependencyInfoPBDescriptor = $convert.base64Decode(
+    'ChBEZXBlbmRlbmN5SW5mb1BCEhsKCXRhcmdldF9pZBgBIAEoCVIIdGFyZ2V0SWQSEgoEbWFzaxgCIAEoCVIEbWFzaw==');
+@$core.Deprecated('Use allInfoPBDescriptor instead')
 const AllInfoPB$json = const {
   '1': 'AllInfoPB',
   '2': const [
@@ -44,6 +53,7 @@
   '3': const [AllInfoPB_AllInfosEntry$json],
 };
 
+@$core.Deprecated('Use allInfoPBDescriptor instead')
 const AllInfoPB_AllInfosEntry$json = const {
   '1': 'AllInfosEntry',
   '2': const [
@@ -60,6 +70,10 @@
   '7': const {'7': true},
 };
 
+/// Descriptor for `AllInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List allInfoPBDescriptor = $convert.base64Decode(
+    'CglBbGxJbmZvUEISOwoHcHJvZ3JhbRgBIAEoCzIhLmRhcnQyanNfaW5mby5wcm90by5Qcm9ncmFtSW5mb1BCUgdwcm9ncmFtEkgKCWFsbF9pbmZvcxgCIAMoCzIrLmRhcnQyanNfaW5mby5wcm90by5BbGxJbmZvUEIuQWxsSW5mb3NFbnRyeVIIYWxsSW5mb3MSVwoQZGVmZXJyZWRfaW1wb3J0cxgDIAMoCzIsLmRhcnQyanNfaW5mby5wcm90by5MaWJyYXJ5RGVmZXJyZWRJbXBvcnRzUEJSD2RlZmVycmVkSW1wb3J0cxpXCg1BbGxJbmZvc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EjAKBXZhbHVlGAIgASgLMhouZGFydDJqc19pbmZvLnByb3RvLkluZm9QQlIFdmFsdWU6AjgB');
+@$core.Deprecated('Use infoPBDescriptor instead')
 const InfoPB$json = const {
   '1': 'InfoPB',
   '2': const [
@@ -150,6 +164,15 @@
       '9': 0,
       '10': 'closureInfo'
     },
+    const {
+      '1': 'class_type_info',
+      '3': 108,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.ClassTypeInfoPB',
+      '9': 0,
+      '10': 'classTypeInfo'
+    },
   ],
   '8': const [
     const {'1': 'concrete'},
@@ -159,6 +182,10 @@
   ],
 };
 
+/// Descriptor for `InfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List infoPBDescriptor = $convert.base64Decode(
+    'CgZJbmZvUEISEgoEbmFtZRgBIAEoCVIEbmFtZRIOCgJpZBgCIAEoBVICaWQSIwoNc2VyaWFsaXplZF9pZBgDIAEoCVIMc2VyaWFsaXplZElkEh8KC2NvdmVyYWdlX2lkGAQgASgJUgpjb3ZlcmFnZUlkEhIKBHNpemUYBSABKAVSBHNpemUSGwoJcGFyZW50X2lkGAYgASgJUghwYXJlbnRJZBI4CgR1c2VzGAcgAygLMiQuZGFydDJqc19pbmZvLnByb3RvLkRlcGVuZGVuY3lJbmZvUEJSBHVzZXMSJAoOb3V0cHV0X3VuaXRfaWQYCCABKAlSDG91dHB1dFVuaXRJZBJGCgxsaWJyYXJ5X2luZm8YZCABKAsyIS5kYXJ0MmpzX2luZm8ucHJvdG8uTGlicmFyeUluZm9QQkgAUgtsaWJyYXJ5SW5mbxJACgpjbGFzc19pbmZvGGUgASgLMh8uZGFydDJqc19pbmZvLnByb3RvLkNsYXNzSW5mb1BCSABSCWNsYXNzSW5mbxJJCg1mdW5jdGlvbl9pbmZvGGYgASgLMiIuZGFydDJqc19pbmZvLnByb3RvLkZ1bmN0aW9uSW5mb1BCSABSDGZ1bmN0aW9uSW5mbxJACgpmaWVsZF9pbmZvGGcgASgLMh8uZGFydDJqc19pbmZvLnByb3RvLkZpZWxkSW5mb1BCSABSCWZpZWxkSW5mbxJJCg1jb25zdGFudF9pbmZvGGggASgLMiIuZGFydDJqc19pbmZvLnByb3RvLkNvbnN0YW50SW5mb1BCSABSDGNvbnN0YW50SW5mbxJQChBvdXRwdXRfdW5pdF9pbmZvGGkgASgLMiQuZGFydDJqc19pbmZvLnByb3RvLk91dHB1dFVuaXRJbmZvUEJIAFIOb3V0cHV0VW5pdEluZm8SRgoMdHlwZWRlZl9pbmZvGGogASgLMiEuZGFydDJqc19pbmZvLnByb3RvLlR5cGVkZWZJbmZvUEJIAFILdHlwZWRlZkluZm8SRgoMY2xvc3VyZV9pbmZvGGsgASgLMiEuZGFydDJqc19pbmZvLnByb3RvLkNsb3N1cmVJbmZvUEJIAFILY2xvc3VyZUluZm8STQoPY2xhc3NfdHlwZV9pbmZvGGwgASgLMiMuZGFydDJqc19pbmZvLnByb3RvLkNsYXNzVHlwZUluZm9QQkgAUg1jbGFzc1R5cGVJbmZvQgoKCGNvbmNyZXRlSgQICRBk');
+@$core.Deprecated('Use programInfoPBDescriptor instead')
 const ProgramInfoPB$json = const {
   '1': 'ProgramInfoPB',
   '2': const [
@@ -238,6 +265,10 @@
   ],
 };
 
+/// Descriptor for `ProgramInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List programInfoPBDescriptor = $convert.base64Decode(
+    'Cg1Qcm9ncmFtSW5mb1BCEiMKDWVudHJ5cG9pbnRfaWQYASABKAlSDGVudHJ5cG9pbnRJZBISCgRzaXplGAIgASgFUgRzaXplEicKD2RhcnQyanNfdmVyc2lvbhgDIAEoCVIOZGFydDJqc1ZlcnNpb24SLQoSY29tcGlsYXRpb25fbW9tZW50GAQgASgDUhFjb21waWxhdGlvbk1vbWVudBIxChRjb21waWxhdGlvbl9kdXJhdGlvbhgFIAEoA1ITY29tcGlsYXRpb25EdXJhdGlvbhIqChF0b19wcm90b19kdXJhdGlvbhgGIAEoA1IPdG9Qcm90b0R1cmF0aW9uEiwKEmR1bXBfaW5mb19kdXJhdGlvbhgHIAEoA1IQZHVtcEluZm9EdXJhdGlvbhIzChZub19zdWNoX21ldGhvZF9lbmFibGVkGAggASgIUhNub1N1Y2hNZXRob2RFbmFibGVkEi8KFGlzX3J1bnRpbWVfdHlwZV91c2VkGAkgASgIUhFpc1J1bnRpbWVUeXBlVXNlZBImCg9pc19pc29sYXRlX3VzZWQYCiABKAhSDWlzSXNvbGF0ZVVzZWQSMwoWaXNfZnVuY3Rpb25fYXBwbHlfdXNlZBgLIAEoCFITaXNGdW5jdGlvbkFwcGx5VXNlZBImCg9pc19taXJyb3JzX3VzZWQYDCABKAhSDWlzTWlycm9yc1VzZWQSGgoIbWluaWZpZWQYDSABKAhSCG1pbmlmaWVk');
+@$core.Deprecated('Use libraryInfoPBDescriptor instead')
 const LibraryInfoPB$json = const {
   '1': 'LibraryInfoPB',
   '2': const [
@@ -246,6 +277,10 @@
   ],
 };
 
+/// Descriptor for `LibraryInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List libraryInfoPBDescriptor = $convert.base64Decode(
+    'Cg1MaWJyYXJ5SW5mb1BCEhAKA3VyaRgBIAEoCVIDdXJpEiEKDGNoaWxkcmVuX2lkcxgCIAMoCVILY2hpbGRyZW5JZHM=');
+@$core.Deprecated('Use outputUnitInfoPBDescriptor instead')
 const OutputUnitInfoPB$json = const {
   '1': 'OutputUnitInfoPB',
   '2': const [
@@ -253,6 +288,10 @@
   ],
 };
 
+/// Descriptor for `OutputUnitInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List outputUnitInfoPBDescriptor = $convert.base64Decode(
+    'ChBPdXRwdXRVbml0SW5mb1BCEhgKB2ltcG9ydHMYASADKAlSB2ltcG9ydHM=');
+@$core.Deprecated('Use classInfoPBDescriptor instead')
 const ClassInfoPB$json = const {
   '1': 'ClassInfoPB',
   '2': const [
@@ -261,6 +300,18 @@
   ],
 };
 
+/// Descriptor for `ClassInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List classInfoPBDescriptor = $convert.base64Decode(
+    'CgtDbGFzc0luZm9QQhIfCgtpc19hYnN0cmFjdBgBIAEoCFIKaXNBYnN0cmFjdBIhCgxjaGlsZHJlbl9pZHMYAiADKAlSC2NoaWxkcmVuSWRz');
+@$core.Deprecated('Use classTypeInfoPBDescriptor instead')
+const ClassTypeInfoPB$json = const {
+  '1': 'ClassTypeInfoPB',
+};
+
+/// Descriptor for `ClassTypeInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List classTypeInfoPBDescriptor =
+    $convert.base64Decode('Cg9DbGFzc1R5cGVJbmZvUEI=');
+@$core.Deprecated('Use constantInfoPBDescriptor instead')
 const ConstantInfoPB$json = const {
   '1': 'ConstantInfoPB',
   '2': const [
@@ -268,6 +319,10 @@
   ],
 };
 
+/// Descriptor for `ConstantInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List constantInfoPBDescriptor =
+    $convert.base64Decode('Cg5Db25zdGFudEluZm9QQhISCgRjb2RlGAEgASgJUgRjb2Rl');
+@$core.Deprecated('Use fieldInfoPBDescriptor instead')
 const FieldInfoPB$json = const {
   '1': 'FieldInfoPB',
   '2': const [
@@ -286,6 +341,10 @@
   ],
 };
 
+/// Descriptor for `FieldInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List fieldInfoPBDescriptor = $convert.base64Decode(
+    'CgtGaWVsZEluZm9QQhISCgR0eXBlGAEgASgJUgR0eXBlEiMKDWluZmVycmVkX3R5cGUYAiABKAlSDGluZmVycmVkVHlwZRIhCgxjaGlsZHJlbl9pZHMYAyADKAlSC2NoaWxkcmVuSWRzEhIKBGNvZGUYBCABKAlSBGNvZGUSGQoIaXNfY29uc3QYBSABKAhSB2lzQ29uc3QSJQoOaW5pdGlhbGl6ZXJfaWQYBiABKAlSDWluaXRpYWxpemVySWQ=');
+@$core.Deprecated('Use typedefInfoPBDescriptor instead')
 const TypedefInfoPB$json = const {
   '1': 'TypedefInfoPB',
   '2': const [
@@ -293,6 +352,10 @@
   ],
 };
 
+/// Descriptor for `TypedefInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List typedefInfoPBDescriptor =
+    $convert.base64Decode('Cg1UeXBlZGVmSW5mb1BCEhIKBHR5cGUYASABKAlSBHR5cGU=');
+@$core.Deprecated('Use functionModifiersPBDescriptor instead')
 const FunctionModifiersPB$json = const {
   '1': 'FunctionModifiersPB',
   '2': const [
@@ -303,6 +366,10 @@
   ],
 };
 
+/// Descriptor for `FunctionModifiersPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List functionModifiersPBDescriptor = $convert.base64Decode(
+    'ChNGdW5jdGlvbk1vZGlmaWVyc1BCEhsKCWlzX3N0YXRpYxgBIAEoCFIIaXNTdGF0aWMSGQoIaXNfY29uc3QYAiABKAhSB2lzQ29uc3QSHQoKaXNfZmFjdG9yeRgDIAEoCFIJaXNGYWN0b3J5Eh8KC2lzX2V4dGVybmFsGAQgASgIUgppc0V4dGVybmFs');
+@$core.Deprecated('Use parameterInfoPBDescriptor instead')
 const ParameterInfoPB$json = const {
   '1': 'ParameterInfoPB',
   '2': const [
@@ -312,6 +379,10 @@
   ],
 };
 
+/// Descriptor for `ParameterInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List parameterInfoPBDescriptor = $convert.base64Decode(
+    'Cg9QYXJhbWV0ZXJJbmZvUEISEgoEbmFtZRgBIAEoCVIEbmFtZRISCgR0eXBlGAIgASgJUgR0eXBlEiMKDWRlY2xhcmVkX3R5cGUYAyABKAlSDGRlY2xhcmVkVHlwZQ==');
+@$core.Deprecated('Use functionInfoPBDescriptor instead')
 const FunctionInfoPB$json = const {
   '1': 'FunctionInfoPB',
   '2': const [
@@ -349,6 +420,10 @@
   ],
 };
 
+/// Descriptor for `FunctionInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List functionInfoPBDescriptor = $convert.base64Decode(
+    'Cg5GdW5jdGlvbkluZm9QQhJWChJmdW5jdGlvbl9tb2RpZmllcnMYASABKAsyJy5kYXJ0MmpzX2luZm8ucHJvdG8uRnVuY3Rpb25Nb2RpZmllcnNQQlIRZnVuY3Rpb25Nb2RpZmllcnMSIQoMY2hpbGRyZW5faWRzGAIgAygJUgtjaGlsZHJlbklkcxIfCgtyZXR1cm5fdHlwZRgDIAEoCVIKcmV0dXJuVHlwZRIwChRpbmZlcnJlZF9yZXR1cm5fdHlwZRgEIAEoCVISaW5mZXJyZWRSZXR1cm5UeXBlEkMKCnBhcmFtZXRlcnMYBSADKAsyIy5kYXJ0MmpzX2luZm8ucHJvdG8uUGFyYW1ldGVySW5mb1BCUgpwYXJhbWV0ZXJzEiEKDHNpZGVfZWZmZWN0cxgGIAEoCVILc2lkZUVmZmVjdHMSIwoNaW5saW5lZF9jb3VudBgHIAEoBVIMaW5saW5lZENvdW50EhIKBGNvZGUYCCABKAlSBGNvZGVKBAgJEAo=');
+@$core.Deprecated('Use closureInfoPBDescriptor instead')
 const ClosureInfoPB$json = const {
   '1': 'ClosureInfoPB',
   '2': const [
@@ -356,6 +431,10 @@
   ],
 };
 
+/// Descriptor for `ClosureInfoPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List closureInfoPBDescriptor = $convert.base64Decode(
+    'Cg1DbG9zdXJlSW5mb1BCEh8KC2Z1bmN0aW9uX2lkGAEgASgJUgpmdW5jdGlvbklk');
+@$core.Deprecated('Use deferredImportPBDescriptor instead')
 const DeferredImportPB$json = const {
   '1': 'DeferredImportPB',
   '2': const [
@@ -364,6 +443,10 @@
   ],
 };
 
+/// Descriptor for `DeferredImportPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List deferredImportPBDescriptor = $convert.base64Decode(
+    'ChBEZWZlcnJlZEltcG9ydFBCEhYKBnByZWZpeBgBIAEoCVIGcHJlZml4EhQKBWZpbGVzGAIgAygJUgVmaWxlcw==');
+@$core.Deprecated('Use libraryDeferredImportsPBDescriptor instead')
 const LibraryDeferredImportsPB$json = const {
   '1': 'LibraryDeferredImportsPB',
   '2': const [
@@ -379,3 +462,8 @@
     },
   ],
 };
+
+/// Descriptor for `LibraryDeferredImportsPB`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List libraryDeferredImportsPBDescriptor =
+    $convert.base64Decode(
+        'ChhMaWJyYXJ5RGVmZXJyZWRJbXBvcnRzUEISHwoLbGlicmFyeV91cmkYASABKAlSCmxpYnJhcnlVcmkSIQoMbGlicmFyeV9uYW1lGAIgASgJUgtsaWJyYXJ5TmFtZRI+CgdpbXBvcnRzGAMgAygLMiQuZGFydDJqc19pbmZvLnByb3RvLkRlZmVycmVkSW1wb3J0UEJSB2ltcG9ydHM=');
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbserver.dart b/pkg/dart2js_info/lib/src/proto/info.pbserver.dart
index 8f63e58..ad952e9 100644
--- a/pkg/dart2js_info/lib/src/proto/info.pbserver.dart
+++ b/pkg/dart2js_info/lib/src/proto/info.pbserver.dart
@@ -2,7 +2,7 @@
 //  Generated code. Do not modify.
 //  source: info.proto
 //
-// @dart = 2.3
-// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+// @dart = 2.12
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
 
 export 'info.pb.dart';
diff --git a/pkg/dart2js_info/lib/src/string_edit_buffer.dart b/pkg/dart2js_info/lib/src/string_edit_buffer.dart
index dc314f7..7630bf2 100644
--- a/pkg/dart2js_info/lib/src/string_edit_buffer.dart
+++ b/pkg/dart2js_info/lib/src/string_edit_buffer.dart
@@ -18,12 +18,12 @@
 
   StringEditBuffer(this.original);
 
-  bool get hasEdits => _edits.length > 0;
+  bool get hasEdits => _edits.isNotEmpty;
 
   /// Edit the original text, replacing text on the range [begin] and
   /// exclusive [end] with the [replacement] string.
   void replace(int begin, int end, String replacement, [int sortId]) {
-    _edits.add(new _StringEdit(begin, end, replacement, sortId));
+    _edits.add(_StringEdit(begin, end, replacement, sortId));
   }
 
   /// Insert [string] at [offset].
@@ -43,9 +43,10 @@
   ///
   /// Throws [UnsupportedError] if the edits were overlapping. If no edits were
   /// made, the original string will be returned.
+  @override
   String toString() {
-    var sb = new StringBuffer();
-    if (_edits.length == 0) return original;
+    var sb = StringBuffer();
+    if (_edits.isEmpty) return original;
 
     // Sort edits by start location.
     _edits.sort();
@@ -53,7 +54,7 @@
     int consumed = 0;
     for (var edit in _edits) {
       if (consumed > edit.begin) {
-        sb = new StringBuffer();
+        sb = StringBuffer();
         sb.write('overlapping edits. Insert at offset ');
         sb.write(edit.begin);
         sb.write(' but have consumed ');
@@ -63,7 +64,7 @@
           sb.write('\n    ');
           sb.write(e);
         }
-        throw new UnsupportedError(sb.toString());
+        throw UnsupportedError(sb.toString());
       }
 
       // Add characters from the original string between this edit and the last
@@ -94,14 +95,15 @@
   // String to insert
   final String string;
 
-  _StringEdit(int begin, this.end, this.string, [int sortId])
-      : begin = begin,
-        sortId = sortId == null ? begin : sortId;
+  _StringEdit(this.begin, this.end, this.string, [int sortId])
+      : sortId = sortId ?? begin;
 
   int get length => end - begin;
 
+  @override
   String toString() => '(Edit @ $begin,$end: "$string")';
 
+  @override
   int compareTo(_StringEdit other) {
     int diff = begin - other.begin;
     if (diff != 0) return diff;
diff --git a/pkg/dart2js_info/lib/src/table.dart b/pkg/dart2js_info/lib/src/table.dart
index 85abcd3..23f44f0 100644
--- a/pkg/dart2js_info/lib/src/table.dart
+++ b/pkg/dart2js_info/lib/src/table.dart
@@ -28,7 +28,7 @@
   List<List> rows = [];
 
   /// Columns to skip, for example, if they are all zero entries.
-  List<bool> _skipped = <bool>[];
+  final List<bool> _skipped = <bool>[];
 
   /// Whether we started adding entries. Indicates that no more columns can be
   /// added.
@@ -39,14 +39,16 @@
 
   /// Add a column with the given [name].
   void declareColumn(String name,
-      {bool abbreviate: false, String color: _NO_COLOR}) {
+      {bool abbreviate = false, String color = _noColor}) {
     assert(!_sealed);
     var headerName = name;
     if (abbreviate) {
       // abbreviate the header by using only the initials of each word
       headerName =
           name.split(' ').map((s) => s.substring(0, 1).toUpperCase()).join('');
-      while (abbreviations[headerName] != null) headerName = "$headerName'";
+      while (abbreviations[headerName] != null) {
+        headerName = "$headerName'";
+      }
       abbreviations[headerName] = name;
     }
     widths.add(max(5, headerName.length + 1));
@@ -94,11 +96,12 @@
 
   /// Generates a string representation of the table to print on a terminal.
   // TODO(sigmund): add also a .csv format
+  @override
   String toString() {
-    var sb = new StringBuffer();
+    var sb = StringBuffer();
     sb.write('\n');
     for (var row in rows) {
-      var lastColor = _NO_COLOR;
+      var lastColor = _noColor;
       for (int i = 0; i < _totalColumns; i++) {
         if (_skipped[i]) continue;
         var entry = row[i];
@@ -111,7 +114,7 @@
         sb.write(
             i == 0 ? entry.padRight(widths[i]) : entry.padLeft(widths[i] + 1));
       }
-      if (lastColor != _NO_COLOR) sb.write(_NO_COLOR);
+      if (lastColor != _noColor) sb.write(_noColor);
       sb.write('\n');
     }
     sb.write('\nWhere:\n');
@@ -123,4 +126,4 @@
   }
 }
 
-const _NO_COLOR = "\x1b[0m";
+const _noColor = "\x1b[0m";
diff --git a/pkg/dart2js_info/lib/src/util.dart b/pkg/dart2js_info/lib/src/util.dart
index 31e9ffc..e435458 100644
--- a/pkg/dart2js_info/lib/src/util.dart
+++ b/pkg/dart2js_info/lib/src/util.dart
@@ -18,7 +18,7 @@
   // of them.
   // TODO(sigmund): create a concrete implementation of InfoGraph, instead of
   // using the EdgeListGraph.
-  var graph = new EdgeListGraph<Info>();
+  var graph = EdgeListGraph<Info>();
   for (var f in info.functions) {
     graph.addNode(f);
     for (var g in f.uses) {
@@ -48,19 +48,19 @@
 
 /// Provide a unique long name associated with [info].
 // TODO(sigmund): guarantee that the name is actually unique.
-String longName(Info info, {bool useLibraryUri: false, bool forId: false}) {
+String longName(Info info, {bool useLibraryUri = false, bool forId = false}) {
   var infoPath = [];
   while (info != null) {
     infoPath.add(info);
     info = info.parent;
   }
-  var sb = new StringBuffer();
+  var sb = StringBuffer();
   var first = true;
   for (var segment in infoPath.reversed) {
     if (!first) sb.write('.');
     // TODO(sigmund): ensure that the first segment is a LibraryInfo.
     // assert(!first || segment is LibraryInfo);
-    // (today might not be true for for closure classes).
+    // (today might not be true for closure classes).
     if (segment is LibraryInfo) {
       // TODO(kevmoo): Remove this when dart2js can be invoked with an app-root
       // custom URI
@@ -91,7 +91,7 @@
 }
 
 /// Produce a string containing [value] padded with white space up to [n] chars.
-pad(value, n, {bool right: false}) {
+pad(value, n, {bool right = false}) {
   var s = '$value';
   if (s.length >= n) return s;
   var pad = ' ' * (n - s.length);
diff --git a/pkg/dart2js_info/pubspec.yaml b/pkg/dart2js_info/pubspec.yaml
index 77980f6..441e3ae 100644
--- a/pkg/dart2js_info/pubspec.yaml
+++ b/pkg/dart2js_info/pubspec.yaml
@@ -1,24 +1,24 @@
 name: dart2js_info
-version: 0.6.5
+publish_to: none
 
 description: >-
   Libraries and tools to process data produced when running dart2js with
   --dump-info.
-homepage: https://github.com/dart-lang/dart2js_info/
 
 environment:
-  sdk: '>=2.3.0 <3.0.0'
+  sdk: '>=2.11.99 <3.0.0'
 
 dependencies:
-  args: ^1.4.3
+  args: ^2.3.0
   collection: ^1.10.1
   fixnum: '>=0.10.5 <2.0.0'
   path: ^1.3.6
   protobuf: '>=1.0.1 <3.0.0'
-  shelf: ^0.7.3
-  yaml: ^2.1.0
+  shelf: ^1.2.0
+  yaml: ^3.1.0
 
 dev_dependencies:
+  lints: ^1.0.0
   test: ^1.2.0
 
 executables:
diff --git a/pkg/dart2js_info/test/binary_serialization_test.dart b/pkg/dart2js_info/test/binary_serialization_test.dart
index 116003e..b622d04 100644
--- a/pkg/dart2js_info/test/binary_serialization_test.dart
+++ b/pkg/dart2js_info/test/binary_serialization_test.dart
@@ -12,15 +12,17 @@
 class ByteSink implements Sink<List<int>> {
   BytesBuilder builder = BytesBuilder();
 
+  @override
   add(List<int> data) => builder.add(data);
+  @override
   close() {}
 }
 
 main() {
   group('json to proto conversion with deferred files', () {
     test('hello_world_deferred', () {
-      var uri = Platform.script.resolve(
-          'hello_world_deferred/hello_world_deferred.js.info.json');
+      var uri = Platform.script
+          .resolve('hello_world_deferred/hello_world_deferred.js.info.json');
       var helloWorld = File.fromUri(uri);
       var contents = helloWorld.readAsStringSync();
       var json = jsonDecode(contents);
diff --git a/pkg/dart2js_info/test/graph_test.dart b/pkg/dart2js_info/test/graph_test.dart
index 4934adf..71afc23 100644
--- a/pkg/dart2js_info/test/graph_test.dart
+++ b/pkg/dart2js_info/test/graph_test.dart
@@ -60,7 +60,7 @@
 ///   C
 /// ```
 Graph<String> makeTestGraph() {
-  var graph = new EdgeListGraph<String>();
+  var graph = EdgeListGraph<String>();
   graph.addEdge('A', 'B');
   graph.addEdge('A', 'D');
   graph.addEdge('A', 'E');
diff --git a/pkg/dart2js_info/test/hello_world/hello_world.js.info.json b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
index afe12f8..563b3bf 100644
--- a/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
+++ b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
@@ -1,31 +1,41 @@
 {
   "elements": {
     "library": {
-      "60281205": {
-        "id": "library/60281205",
-        "kind": "library",
-        "name": "<unnamed>",
-        "size": 85,
-        "children": [
-          "function/531925466"
-        ],
-        "canonicalUri": "file:///Users/kevmoo/source/github/dart2js_info/test/hello_world/hello_world.dart"
-      },
       "174368900": {
         "id": "library/174368900",
         "kind": "library",
         "name": "_foreign_helper",
-        "size": 0,
+        "size": 82,
         "children": [
           "class/949988971"
         ],
         "canonicalUri": "dart:_foreign_helper"
       },
+      "227349358": {
+        "id": "library/227349358",
+        "kind": "library",
+        "name": "_late_helper",
+        "size": 160,
+        "children": [
+          "function/374894045"
+        ],
+        "canonicalUri": "dart:_late_helper"
+      },
+      "238173233": {
+        "id": "library/238173233",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 52,
+        "children": [
+          "function/1072179150"
+        ],
+        "canonicalUri": "file:///usr/local/google/home/joshualitt/a/sdk/pkg/dart2js_info/test/hello_world/hello_world.dart"
+      },
       "238986171": {
         "id": "library/238986171",
         "kind": "library",
         "name": "dart2js._js_primitives",
-        "size": 483,
+        "size": 450,
         "children": [
           "function/864228238"
         ],
@@ -35,23 +45,141 @@
         "id": "library/325218131",
         "kind": "library",
         "name": "_interceptors",
-        "size": 0,
+        "size": 4091,
         "children": [
+          "class/86936801",
+          "class/245082925",
+          "class/418854932",
+          "class/523978038",
+          "class/535478555",
+          "class/699388972",
+          "class/793539876",
+          "class/978801172",
+          "class/1003011102",
           "class/1019758482"
         ],
         "canonicalUri": "dart:_interceptors"
       },
+      "527944179": {
+        "id": "library/527944179",
+        "kind": "library",
+        "name": "dart._js_names",
+        "size": 0,
+        "children": [
+          "function/745680035"
+        ],
+        "canonicalUri": "dart:_js_names"
+      },
+      "579882441": {
+        "id": "library/579882441",
+        "kind": "library",
+        "name": "rti",
+        "size": 52322,
+        "children": [
+          "class/121755874",
+          "class/214521760",
+          "class/324095577",
+          "class/457024667",
+          "class/642774187",
+          "class/768954396",
+          "class/769860706",
+          "class/926198907",
+          "class/1070435853",
+          "function/11678628",
+          "function/21938161",
+          "function/25075263",
+          "function/66145123",
+          "function/70158663",
+          "function/77140749",
+          "function/83342486",
+          "function/89307104",
+          "function/120424305",
+          "function/132742275",
+          "function/160933185",
+          "function/167217604",
+          "function/195520573",
+          "function/207792788",
+          "function/216705978",
+          "function/247461665",
+          "function/253415970",
+          "function/287475886",
+          "function/310648840",
+          "function/317451330",
+          "function/331545422",
+          "function/331565025",
+          "function/339437005",
+          "function/351876786",
+          "function/400204433",
+          "function/407860982",
+          "function/417411809",
+          "function/469917674",
+          "function/502696664",
+          "function/504534695",
+          "function/520073200",
+          "function/535892822",
+          "function/536333412",
+          "function/550912538",
+          "function/556772480",
+          "function/575664914",
+          "function/578373084",
+          "function/583427045",
+          "function/589675001",
+          "function/598215859",
+          "function/603464342",
+          "function/603807818",
+          "function/614790632",
+          "function/620456164",
+          "function/631550768",
+          "function/632397862",
+          "function/638672010",
+          "function/640394917",
+          "function/666277254",
+          "function/667416185",
+          "function/680877684",
+          "function/702246006",
+          "function/713151216",
+          "function/777322353",
+          "function/820496795",
+          "function/831592736",
+          "function/848873059",
+          "function/864835321",
+          "function/865184799",
+          "function/881419002",
+          "function/890489632",
+          "function/892227919",
+          "function/896138477",
+          "function/911398026",
+          "function/911422554",
+          "function/923456660",
+          "function/941664110",
+          "function/945625581",
+          "function/956458971",
+          "function/968631083",
+          "function/973238019",
+          "function/982751380",
+          "function/999221506",
+          "function/1032715322",
+          "function/1068396938"
+        ],
+        "canonicalUri": "dart:_rti"
+      },
       "631335891": {
         "id": "library/631335891",
         "kind": "library",
         "name": "dart.core",
-        "size": 0,
+        "size": 5431,
         "children": [
           "class/36312556",
           "class/56472591",
           "class/93352366",
           "class/143626168",
           "class/175705485",
+          "class/293821936",
+          "class/351911148",
+          "class/481500691",
+          "class/595024907",
+          "class/627219877",
+          "class/893386369",
           "class/948502579",
           "class/974704527",
           "class/991730135",
@@ -63,8 +191,9 @@
         "id": "library/689380639",
         "kind": "library",
         "name": "dart._internal",
-        "size": 0,
+        "size": 219,
         "children": [
+          "class/43993131",
           "field/908476008",
           "function/606513838"
         ],
@@ -74,12 +203,25 @@
         "id": "library/754126564",
         "kind": "library",
         "name": "dart.collection",
-        "size": 0,
+        "size": 970,
         "children": [
-          "field/522978319"
+          "class/607623563",
+          "class/812154630",
+          "field/522978319",
+          "function/778541068"
         ],
         "canonicalUri": "dart:collection"
       },
+      "828455743": {
+        "id": "library/828455743",
+        "kind": "library",
+        "name": "dart2js._recipe_syntax",
+        "size": 0,
+        "children": [
+          "class/1013977545"
+        ],
+        "canonicalUri": "dart:_recipe_syntax"
+      },
       "965528565": {
         "id": "library/965528565",
         "kind": "library",
@@ -87,9 +229,8 @@
         "size": 0,
         "children": [
           "class/73206861",
-          "class/716671121",
-          "field/55541185",
-          "field/1020283310"
+          "class/251751824",
+          "class/716671121"
         ],
         "canonicalUri": "dart:_js_embedded_names"
       },
@@ -97,19 +238,30 @@
         "id": "library/966364039",
         "kind": "library",
         "name": "_js_helper",
-        "size": 0,
+        "size": 16057,
         "children": [
+          "class/44790816",
           "class/138211367",
-          "class/156108056",
-          "class/269073412",
+          "class/155954474",
           "class/317291728",
-          "class/324980341",
           "class/354160010",
-          "class/644348892",
+          "class/466061502",
           "class/866150578",
-          "class/1019636942",
-          "field/417944821",
-          "field/526089142"
+          "function/109394176",
+          "function/163889622",
+          "function/196790253",
+          "function/295807328",
+          "function/308590446",
+          "function/418915149",
+          "function/435575019",
+          "function/445547062",
+          "function/544746737",
+          "function/559097830",
+          "function/668300184",
+          "function/679532174",
+          "function/714600619",
+          "function/788412943",
+          "function/992679489"
         ],
         "canonicalUri": "dart:_js_helper"
       }
@@ -119,28 +271,60 @@
         "id": "class/36312556",
         "kind": "class",
         "name": "ConcurrentModificationError",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 322,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/376257386"
+          "field/376257386",
+          "function/701409225",
+          "function/745741399"
         ]
       },
+      "43993131": {
+        "id": "class/43993131",
+        "kind": "class",
+        "name": "LateError",
+        "size": 219,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/994897322",
+          "function/842507496",
+          "function/1005175086"
+        ]
+      },
+      "44790816": {
+        "id": "class/44790816",
+        "kind": "class",
+        "name": "TearOffClosure",
+        "size": 121,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
       "56472591": {
         "id": "class/56472591",
         "kind": "class",
         "name": "AssertionError",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 302,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/840751619"
+          "field/840751619",
+          "function/72073576",
+          "function/658851039"
         ]
       },
       "73206861": {
@@ -148,72 +332,102 @@
         "kind": "class",
         "name": "JsGetName",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/965528565",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/159930244",
           "field/190934046",
-          "field/202409972",
-          "field/391942199",
-          "field/422530140",
-          "field/447707988",
-          "field/586155906",
-          "field/626399440",
-          "field/645423404",
-          "field/667376711",
-          "field/701716969",
-          "field/743971885",
-          "field/844410756",
-          "field/864119084",
-          "field/875039735",
-          "field/914172423",
-          "field/960584371",
-          "field/1012317118",
           "field/1019580176"
         ]
       },
+      "86936801": {
+        "id": "class/86936801",
+        "kind": "class",
+        "name": "Interceptor",
+        "size": 203,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/944731702"
+        ]
+      },
       "93352366": {
         "id": "class/93352366",
         "kind": "class",
         "name": "CyclicInitializationError",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 413,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/944915314"
+          "field/944915314",
+          "function/150705145",
+          "function/681643547"
+        ]
+      },
+      "121755874": {
+        "id": "class/121755874",
+        "kind": "class",
+        "name": "_FunctionParameters",
+        "size": 198,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/430387875",
+          "field/449743822",
+          "field/884701761",
+          "function/301930977",
+          "function/304695429",
+          "function/338600142",
+          "function/358028985",
+          "function/395359035",
+          "function/514473880",
+          "function/753032370",
+          "function/807601340"
         ]
       },
       "138211367": {
         "id": "class/138211367",
         "kind": "class",
         "name": "BoundClosure",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 314,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/125830184",
-          "field/180845508",
           "field/302220255",
-          "field/435101137",
-          "field/709451133",
-          "field/1061931090"
+          "field/525672864",
+          "field/588058281",
+          "field/636292115",
+          "function/5571021",
+          "function/15478302",
+          "function/293305096",
+          "function/393060060",
+          "function/589677414",
+          "function/659844135",
+          "function/762030080",
+          "function/906797235",
+          "function/1061931090"
         ]
       },
       "143626168": {
         "id": "class/143626168",
         "kind": "class",
         "name": "ArgumentError",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 922,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
@@ -222,89 +436,216 @@
           "field/4524053",
           "field/509005655",
           "field/727752212",
-          "field/759319863"
+          "field/759319863",
+          "function/448227795",
+          "function/464959827",
+          "function/606572177",
+          "function/717852932",
+          "function/885768717"
         ]
       },
-      "156108056": {
-        "id": "class/156108056",
+      "155954474": {
+        "id": "class/155954474",
         "kind": "class",
-        "name": "ReflectionInfo",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "name": "_AssertionError",
+        "size": 260,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/116849538",
-          "field/130159427",
-          "field/206386055",
-          "field/259683855",
-          "field/338588500",
-          "field/420557924",
-          "field/446360348",
-          "field/603434183",
-          "field/656800516",
-          "field/840091021",
-          "field/911662921"
+          "function/339189097",
+          "function/692531098"
         ]
       },
       "175705485": {
         "id": "class/175705485",
         "kind": "class",
         "name": "IndexError",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 745,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
         },
         "children": [
           "field/505549528",
-          "field/954188953"
+          "field/954188953",
+          "function/275271990",
+          "function/620005669",
+          "function/985926244"
         ]
       },
-      "269073412": {
-        "id": "class/269073412",
+      "214521760": {
+        "id": "class/214521760",
         "kind": "class",
-        "name": "TypeImpl",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "library/966364039",
+        "name": "Rti",
+        "size": 514,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/70141207",
-          "field/412345286"
+          "field/111785749",
+          "field/206062167",
+          "field/239805186",
+          "field/242140830",
+          "field/351779368",
+          "field/410674423",
+          "field/511786572",
+          "field/523754696",
+          "field/639918601",
+          "field/787049592",
+          "field/806634540",
+          "field/928850752",
+          "field/946051721",
+          "field/1002990507",
+          "function/25816218",
+          "function/54796797",
+          "function/55984201",
+          "function/74759397",
+          "function/103899378",
+          "function/105655227",
+          "function/110436482",
+          "function/194452894",
+          "function/245364359",
+          "function/264634420",
+          "function/352620724",
+          "function/362880086",
+          "function/405722833",
+          "function/412727111",
+          "function/436761607",
+          "function/467920119",
+          "function/490424967",
+          "function/491504779",
+          "function/492521940",
+          "function/501313936",
+          "function/517327012",
+          "function/522820503",
+          "function/598784217",
+          "function/616327902",
+          "function/675189669",
+          "function/697367085",
+          "function/710793957",
+          "function/781422565",
+          "function/791758355",
+          "function/797484809",
+          "function/806059380",
+          "function/864971496",
+          "function/885353355",
+          "function/944782426",
+          "function/947722698",
+          "function/960612858",
+          "function/964398244",
+          "function/1041854750",
+          "function/1070901287"
+        ]
+      },
+      "245082925": {
+        "id": "class/245082925",
+        "kind": "class",
+        "name": "JSBool",
+        "size": 162,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/991909617"
+        ]
+      },
+      "251751824": {
+        "id": "class/251751824",
+        "kind": "class",
+        "name": "RtiUniverseFieldNames",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/307514869",
+          "field/558782121",
+          "field/726821079",
+          "field/862009491",
+          "field/1034922434"
+        ]
+      },
+      "293821936": {
+        "id": "class/293821936",
+        "kind": "class",
+        "name": "StringBuffer",
+        "size": 288,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/1047452024",
+          "function/210296716",
+          "function/335045122",
+          "function/358340511",
+          "function/372037963",
+          "function/388977016",
+          "function/521874428",
+          "function/789545114",
+          "function/843997665"
         ]
       },
       "317291728": {
         "id": "class/317291728",
         "kind": "class",
         "name": "Closure",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 411,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
           "abstract": true
         },
         "children": [
-          "field/386221903"
+          "field/386221903",
+          "function/253794122",
+          "function/273024378",
+          "function/320253842",
+          "function/476860251",
+          "function/807434881",
+          "function/899124813",
+          "function/922840913",
+          "function/1051093947"
         ]
       },
-      "324980341": {
-        "id": "class/324980341",
+      "324095577": {
+        "id": "class/324095577",
         "kind": "class",
-        "name": "TypeErrorImplementation",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "library/966364039",
+        "name": "_TypeError",
+        "size": 138,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/319720392"
+          "function/361871829",
+          "function/949168228"
+        ]
+      },
+      "351911148": {
+        "id": "class/351911148",
+        "kind": "class",
+        "name": "Null",
+        "size": 108,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/565013754"
         ]
       },
       "354160010": {
@@ -312,63 +653,387 @@
         "kind": "class",
         "name": "Primitives",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/118657756"
+          "function/71377758",
+          "function/507333070",
+          "function/540949546",
+          "function/599340356",
+          "function/873863767",
+          "function/993180100"
         ]
       },
-      "644348892": {
-        "id": "class/644348892",
+      "418854932": {
+        "id": "class/418854932",
         "kind": "class",
-        "name": "CastErrorImplementation",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "name": "JSNull",
+        "size": 123,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/962973203"
+        ]
+      },
+      "457024667": {
+        "id": "class/457024667",
+        "kind": "class",
+        "name": "_Error",
+        "size": 129,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/914116059",
+          "function/319720211",
+          "function/425183906"
+        ]
+      },
+      "466061502": {
+        "id": "class/466061502",
+        "kind": "class",
+        "name": "StaticClosure",
+        "size": 309,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/185234473"
+          "function/143567266",
+          "function/285148179"
         ]
       },
+      "481500691": {
+        "id": "class/481500691",
+        "kind": "class",
+        "name": "bool",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/173469993"
+        ]
+      },
+      "523978038": {
+        "id": "class/523978038",
+        "kind": "class",
+        "name": "JSArray",
+        "size": 500,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/144469777",
+          "function/231618349",
+          "function/369614033",
+          "function/405266426",
+          "function/478486472",
+          "function/869103502",
+          "function/950377748",
+          "function/952130975"
+        ]
+      },
+      "535478555": {
+        "id": "class/535478555",
+        "kind": "class",
+        "name": "JSInt",
+        "size": 81,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
+      "595024907": {
+        "id": "class/595024907",
+        "kind": "class",
+        "name": "NullThrownError",
+        "size": 162,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/730595126",
+          "function/968358412"
+        ]
+      },
+      "607623563": {
+        "id": "class/607623563",
+        "kind": "class",
+        "name": "ListBase",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/1060110710"
+        ]
+      },
+      "627219877": {
+        "id": "class/627219877",
+        "kind": "class",
+        "name": "Object",
+        "size": 263,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/167405219"
+        ]
+      },
+      "642774187": {
+        "id": "class/642774187",
+        "kind": "class",
+        "name": "_Type",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/924001250"
+        ]
+      },
+      "699388972": {
+        "id": "class/699388972",
+        "kind": "class",
+        "name": "JSUnmodifiableArray",
+        "size": 164,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
       "716671121": {
         "id": "class/716671121",
         "kind": "class",
         "name": "JsBuiltin",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/965528565",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/17152193",
           "field/153611669",
-          "field/221593932",
-          "field/413692838",
-          "field/483247773",
-          "field/793498792",
-          "field/805748014",
-          "field/936474054",
-          "field/1063003009"
+          "field/936474054"
+        ]
+      },
+      "768954396": {
+        "id": "class/768954396",
+        "kind": "class",
+        "name": "TypeRule",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/46139592",
+          "function/181998699"
+        ]
+      },
+      "769860706": {
+        "id": "class/769860706",
+        "kind": "class",
+        "name": "_Universe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/49259755",
+          "function/57613304",
+          "function/63055866",
+          "function/78867062",
+          "function/83781773",
+          "function/95816591",
+          "function/101848641",
+          "function/111998270",
+          "function/122441553",
+          "function/133009644",
+          "function/148486138",
+          "function/171156881",
+          "function/195587727",
+          "function/200890444",
+          "function/253560656",
+          "function/266572710",
+          "function/294207503",
+          "function/301370282",
+          "function/321900710",
+          "function/337498518",
+          "function/340789555",
+          "function/357766771",
+          "function/422605719",
+          "function/426435180",
+          "function/438117901",
+          "function/447148542",
+          "function/489157293",
+          "function/499032542",
+          "function/512286296",
+          "function/522380745",
+          "function/523878647",
+          "function/552658686",
+          "function/564449621",
+          "function/592658352",
+          "function/619610668",
+          "function/631685979",
+          "function/637526703",
+          "function/637790089",
+          "function/656417734",
+          "function/671381451",
+          "function/689230944",
+          "function/695455779",
+          "function/709915292",
+          "function/729126945",
+          "function/748762392",
+          "function/750091346",
+          "function/765963979",
+          "function/791619288",
+          "function/801619570",
+          "function/820169204",
+          "function/834015338",
+          "function/864812824",
+          "function/866251913",
+          "function/883935916",
+          "function/893622437",
+          "function/929852730",
+          "function/976856253",
+          "function/977037784",
+          "function/1010766199",
+          "function/1017330300",
+          "function/1036180926",
+          "function/1046014704"
+        ]
+      },
+      "793539876": {
+        "id": "class/793539876",
+        "kind": "class",
+        "name": "JSString",
+        "size": 390,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/186999466",
+          "function/550544609",
+          "function/726979110",
+          "function/773528822"
+        ]
+      },
+      "812154630": {
+        "id": "class/812154630",
+        "kind": "class",
+        "name": "IterableBase",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/580865640"
         ]
       },
       "866150578": {
         "id": "class/866150578",
         "kind": "class",
         "name": "RuntimeError",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 192,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/653339731"
+          "field/653339731",
+          "function/841192189",
+          "function/848267879"
+        ]
+      },
+      "893386369": {
+        "id": "class/893386369",
+        "kind": "class",
+        "name": "Error",
+        "size": 62,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/302617892",
+          "function/355012434",
+          "function/1042482096"
+        ]
+      },
+      "926198907": {
+        "id": "class/926198907",
+        "kind": "class",
+        "name": "_Parser",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/2781902",
+          "function/212177062",
+          "function/347168225",
+          "function/347710223",
+          "function/359606692",
+          "function/409628970",
+          "function/477858577",
+          "function/479155815",
+          "function/490035833",
+          "function/494259168",
+          "function/495511570",
+          "function/517189775",
+          "function/566090952",
+          "function/609214736",
+          "function/685278809",
+          "function/712382592",
+          "function/744088497",
+          "function/747174278",
+          "function/821928955",
+          "function/875358741",
+          "function/922651191",
+          "function/935592878",
+          "function/983353088",
+          "function/1007804883",
+          "function/1019584284",
+          "function/1036730465",
+          "function/1050426556"
         ]
       },
       "948502579": {
@@ -376,7 +1041,7 @@
         "kind": "class",
         "name": "StateError",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
@@ -389,8 +1054,8 @@
         "id": "class/949988971",
         "kind": "class",
         "name": "JS_CONST",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 82,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/174368900",
         "modifiers": {
           "abstract": false
@@ -403,53 +1068,84 @@
         "id": "class/974704527",
         "kind": "class",
         "name": "RangeError",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 336,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
         },
         "children": [
           "field/111931226",
-          "field/649547880"
+          "field/649547880",
+          "function/349997389",
+          "function/539017937",
+          "function/1024465827"
         ]
       },
+      "978801172": {
+        "id": "class/978801172",
+        "kind": "class",
+        "name": "JSNumNotInt",
+        "size": 86,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
       "991730135": {
         "id": "class/991730135",
         "kind": "class",
         "name": "UnsupportedError",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 217,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/140571055"
+          "field/140571055",
+          "function/208283907",
+          "function/474133145"
         ]
       },
-      "1019636942": {
-        "id": "class/1019636942",
+      "1003011102": {
+        "id": "class/1003011102",
         "kind": "class",
-        "name": "TypeVariable",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "library/966364039",
+        "name": "JSNumber",
+        "size": 220,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/856247106",
-          "field/874766737",
-          "field/1068071433"
+          "function/440018750"
+        ]
+      },
+      "1013977545": {
+        "id": "class/1013977545",
+        "kind": "class",
+        "name": "Recipe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/828455743",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/266327677",
+          "function/746055337",
+          "function/1013396128"
         ]
       },
       "1019758482": {
         "id": "class/1019758482",
         "kind": "class",
         "name": "ArrayIterator",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 743,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
           "abstract": false
@@ -458,17 +1154,3510 @@
           "field/112618843",
           "field/237146195",
           "field/504170901",
-          "field/577142640"
+          "field/577142640",
+          "function/950708086",
+          "function/977867690",
+          "function/1027535878"
+        ]
+      },
+      "1070435853": {
+        "id": "class/1070435853",
+        "kind": "class",
+        "name": "_Utils",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/51389871",
+          "function/65470864",
+          "function/91691962",
+          "function/104513495",
+          "function/123297685",
+          "function/332074411",
+          "function/457543033",
+          "function/481740897",
+          "function/497781031",
+          "function/629344964",
+          "function/716694085",
+          "function/747795707",
+          "function/764092534",
+          "function/822673760",
+          "function/832692823",
+          "function/852326327",
+          "function/852359021",
+          "function/873774381",
+          "function/916119111",
+          "function/942726385",
+          "function/986643735",
+          "function/1002613704",
+          "function/1033254962",
+          "function/1055215220",
+          "function/1069756346"
         ]
       }
     },
+    "classType": {
+      "335005182": {
+        "id": "classType/335005182",
+        "kind": "classType",
+        "name": "num",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      },
+      "627219878": {
+        "id": "classType/627219878",
+        "kind": "classType",
+        "name": "Object",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      },
+      "635685670": {
+        "id": "classType/635685670",
+        "kind": "classType",
+        "name": "String",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      }
+    },
     "function": {
+      "2781902": {
+        "id": "function/2781902",
+        "kind": "function",
+        "name": "toGenericFunctionParameter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "item",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,Object?)"
+      },
+      "5571021": {
+        "id": "function/5571021",
+        "kind": "function",
+        "name": "evalRecipe",
+        "size": 154,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[null|exact=BoundClosure]",
+            "declaredType": "BoundClosure"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "BoundClosure_evalRecipe(closure, recipe) {\n      return A._Universe_evalInEnvironment(init.typeUniverse, A.instanceType(closure._receiver), recipe);\n    }",
+        "type": "dynamic Function(BoundClosure,String)"
+      },
+      "11678628": {
+        "id": "function/11678628",
+        "kind": "function",
+        "name": "_isListTestViaProperty",
+        "size": 404,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isListTestViaProperty(object) {\n      var tag, testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      if (typeof object != \"object\")\n        return false;\n      if (Array.isArray(object))\n        return true;\n      tag = testRti._specializedTestResource;\n      if (object instanceof A.Object)\n        return !!object[tag];\n      return !!J.getInterceptor$(object)[tag];\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "15478302": {
+        "id": "function/15478302",
+        "kind": "function",
+        "name": "toString",
+        "size": 153,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"Closure '\" + A.S(this.$_name) + \"' of \" + (\"Instance of '\" + A.S(A.Primitives_objectTypeName(this._receiver)) + \"'\");\n    }",
+        "type": "String Function()"
+      },
+      "21938161": {
+        "id": "function/21938161",
+        "kind": "function",
+        "name": "_asNum",
+        "size": 159,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num",
+        "inferredReturnType": "[subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asNum(object) {\n      if (typeof object == \"number\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num\"));\n    }",
+        "type": "num Function(Object?)"
+      },
+      "25075263": {
+        "id": "function/25075263",
+        "kind": "function",
+        "name": "_areArgumentsSubtypes",
+        "size": 322,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "sArgs",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "sVariances",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "sEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "tArgs",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "tEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_areArgumentsSubtypes(universe, sArgs, sVariances, sEnv, tArgs, tEnv) {\n      var i, t1, t2,\n        $length = sArgs.length;\n      for (i = 0; i < $length; ++i) {\n        t1 = sArgs[i];\n        t2 = tArgs[i];\n        if (!A._isSubtype(universe, t1, sEnv, t2, tEnv))\n          return false;\n      }\n      return true;\n    }",
+        "type": "bool Function(Object?,Object?,Object?,Object?,Object?,Object?)"
+      },
+      "25816218": {
+        "id": "function/25816218",
+        "kind": "function",
+        "name": "_getBindingArguments",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Rti)"
+      },
+      "46139592": {
+        "id": "function/46139592",
+        "kind": "function",
+        "name": "lookupTypeVariable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/768954396",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "rule",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "typeVariable",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String? Function(Object?,String)"
+      },
+      "49259755": {
+        "id": "function/49259755",
+        "kind": "function",
+        "name": "_lookupQuestionRti",
+        "size": 341,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupQuestionRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"?\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createQuestionRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,bool)"
+      },
+      "51389871": {
+        "id": "function/51389871",
+        "kind": "function",
+        "name": "arraySplice",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "position",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?,int)"
+      },
+      "54796797": {
+        "id": "function/54796797",
+        "kind": "function",
+        "name": "_getSpecializedTestResource",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "55984201": {
+        "id": "function/55984201",
+        "kind": "function",
+        "name": "_setSpecializedTestResource",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "[exact=JSString]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "57613304": {
+        "id": "function/57613304",
+        "kind": "function",
+        "name": "_lookupErasedRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "63055866": {
+        "id": "function/63055866",
+        "kind": "function",
+        "name": "_lookupAnyRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "65470864": {
+        "id": "function/65470864",
+        "kind": "function",
+        "name": "asRtiOrNull",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti?",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti? Function(Object?)"
+      },
+      "66145123": {
+        "id": "function/66145123",
+        "kind": "function",
+        "name": "getTypeFromTypesTable",
+        "size": 284,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "getTypeFromTypesTable(index) {\n      var rti,\n        table = init.types,\n        type = table[index];\n      if (typeof type == \"string\") {\n        rti = A._Universe_eval(init.typeUniverse, type, false);\n        table[index] = rti;\n        return rti;\n      }\n      return type;\n    }",
+        "type": "Rti Function(int)"
+      },
+      "70158663": {
+        "id": "function/70158663",
+        "kind": "function",
+        "name": "_asDoubleS",
+        "size": 215,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "double?",
+        "inferredReturnType": "[null|subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asDoubleS(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double\"));\n    }",
+        "type": "double? Function(dynamic)"
+      },
+      "71377758": {
+        "id": "function/71377758",
+        "kind": "function",
+        "name": "_saneNativeClassName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "name",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(dynamic)"
+      },
+      "72073576": {
+        "id": "function/72073576",
+        "kind": "function",
+        "name": "AssertionError",
+        "size": 76,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/56472591",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=AssertionError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "AssertionError$(message) {\n      return new A.AssertionError(message);\n    }",
+        "type": "dynamic Function([Object?])"
+      },
+      "74759397": {
+        "id": "function/74759397",
+        "kind": "function",
+        "name": "_getGenericFunctionBase",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "Rti Function(Rti)"
+      },
+      "77140749": {
+        "id": "function/77140749",
+        "kind": "function",
+        "name": "_rtiArrayToString",
+        "size": 241,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "genericContext",
+            "type": "Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
+            "declaredType": "List<String>?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rtiArrayToString(array, genericContext) {\n      var s, sep, i;\n      for (s = \"\", sep = \"\", i = 0; i < array.length; ++i, sep = \", \")\n        s += B.JSString_methods.$add(sep, A._rtiToString(array[i], genericContext));\n      return s;\n    }",
+        "type": "String Function(Object?,List<String>?)"
+      },
+      "78867062": {
+        "id": "function/78867062",
+        "kind": "function",
+        "name": "_lookupVoidRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "83342486": {
+        "id": "function/83342486",
+        "kind": "function",
+        "name": "_isInt",
+        "size": 95,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": "_isInt(object) {\n      return typeof object == \"number\" && Math.floor(object) === object;\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "83781773": {
+        "id": "function/83781773",
+        "kind": "function",
+        "name": "_lookupInterfaceRti",
+        "size": 622,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "name",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupInterfaceRti(universe, $name, $arguments) {\n      var probe, rti, t1,\n        s = $name;\n      if ($arguments.length > 0)\n        s += \"<\" + A._Universe__canonicalRecipeJoin($arguments) + \">\";\n      probe = universe.eC.get(s);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 9;\n      rti._primary = $name;\n      rti._rest = $arguments;\n      if ($arguments.length > 0)\n        rti._precomputed1 = $arguments[0];\n      rti._canonicalRecipe = s;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(s, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,String,Object?)"
+      },
+      "89307104": {
+        "id": "function/89307104",
+        "kind": "function",
+        "name": "instanceTypeName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "String Function(Object?)"
+      },
+      "91691962": {
+        "id": "function/91691962",
+        "kind": "function",
+        "name": "arrayLength",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 35,
+        "code": "",
+        "type": "int Function(Object?)"
+      },
+      "95816591": {
+        "id": "function/95816591",
+        "kind": "function",
+        "name": "_findRule",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "targetType",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "Object? Function(Object?,String)"
+      },
+      "101848641": {
+        "id": "function/101848641",
+        "kind": "function",
+        "name": "_canonicalRecipeOfFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "returnType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti,_FunctionParameters)"
+      },
+      "103899378": {
+        "id": "function/103899378",
+        "kind": "function",
+        "name": "_bind",
+        "size": 97,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "typeOrTuple",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_bind$1(typeOrTuple) {\n      return A._Universe_bind(init.typeUniverse, this, typeOrTuple);\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "104513495": {
+        "id": "function/104513495",
+        "kind": "function",
+        "name": "arrayConcat",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "a1",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "a2",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?,Object?)"
+      },
+      "105655227": {
+        "id": "function/105655227",
+        "kind": "function",
+        "name": "_asCheck",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(Rti,Object?)"
+      },
+      "109394176": {
+        "id": "function/109394176",
+        "kind": "function",
+        "name": "jsonEncodeNative",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(String)"
+      },
+      "110436482": {
+        "id": "function/110436482",
+        "kind": "function",
+        "name": "_getGenericFunctionBounds",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Rti)"
+      },
+      "111998270": {
+        "id": "function/111998270",
+        "kind": "function",
+        "name": "_canonicalRecipeOfStar",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti)"
+      },
+      "120424305": {
+        "id": "function/120424305",
+        "kind": "function",
+        "name": "isTopType",
+        "size": 225,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 5,
+        "code": "isTopType(t) {\n      var t1;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = t === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
+        "type": "bool Function(Rti)"
+      },
+      "122441553": {
+        "id": "function/122441553",
+        "kind": "function",
+        "name": "_recipeJoin",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "String Function(String,String)"
+      },
+      "123297685": {
+        "id": "function/123297685",
+        "kind": "function",
+        "name": "asNum",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num",
+        "inferredReturnType": "[subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "num Function(Object?)"
+      },
+      "132742275": {
+        "id": "function/132742275",
+        "kind": "function",
+        "name": "_arrayInstanceType",
+        "size": 266,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_arrayInstanceType(object) {\n      var rti = object[init.arrayRti],\n        defaultRti = type$.JSArray_dynamic;\n      if (rti == null)\n        return defaultRti;\n      if (rti.constructor !== defaultRti.constructor)\n        return defaultRti;\n      return rti;\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "133009644": {
+        "id": "function/133009644",
+        "kind": "function",
+        "name": "_lookupFunctionRti",
+        "size": 1319,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "returnType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupFunctionRti(universe, returnType, parameters) {\n      var sep, t1, key, probe, rti,\n        s = returnType._canonicalRecipe,\n        requiredPositional = parameters._requiredPositional,\n        requiredPositionalLength = requiredPositional.length,\n        optionalPositional = parameters._optionalPositional,\n        optionalPositionalLength = optionalPositional.length,\n        named = parameters._named,\n        namedLength = named.length,\n        recipe = \"(\" + A._Universe__canonicalRecipeJoin(requiredPositional);\n      if (optionalPositionalLength > 0) {\n        sep = requiredPositionalLength > 0 ? \",\" : \"\";\n        t1 = A._Universe__canonicalRecipeJoin(optionalPositional);\n        recipe += sep + \"[\" + t1 + \"]\";\n      }\n      if (namedLength > 0) {\n        sep = requiredPositionalLength > 0 ? \",\" : \"\";\n        t1 = A._Universe__canonicalRecipeJoinNamed(named);\n        recipe += sep + \"{\" + t1 + \"}\";\n      }\n      key = s + (recipe + \")\");\n      probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 11;\n      rti._primary = returnType;\n      rti._rest = parameters;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,_FunctionParameters)"
+      },
+      "143567266": {
+        "id": "function/143567266",
+        "kind": "function",
+        "name": "StaticClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/466061502",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=StaticClosure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "144469777": {
+        "id": "function/144469777",
+        "kind": "function",
+        "name": "length",
+        "size": 58,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$length(receiver) {\n      return receiver.length;\n    }",
+        "type": "int Function()"
+      },
+      "148486138": {
+        "id": "function/148486138",
+        "kind": "function",
+        "name": "evalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 19,
+        "code": "",
+        "type": "Object Function(Object?)"
+      },
+      "150705145": {
+        "id": "function/150705145",
+        "kind": "function",
+        "name": "toString",
+        "size": 231,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/93352366",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      var variableName = this.variableName;\n      return variableName == null ? \"Reading static variable during its initialization\" : \"Reading static variable '\" + variableName + \"' during its initialization\";\n    }",
+        "type": "String Function()"
+      },
+      "160933185": {
+        "id": "function/160933185",
+        "kind": "function",
+        "name": "_instanceType",
+        "size": 130,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "_instanceType(object) {\n      var rti = object.$ti;\n      return rti != null ? rti : A._instanceTypeFromConstructor(object);\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "163889622": {
+        "id": "function/163889622",
+        "kind": "function",
+        "name": "wrapException",
+        "size": 396,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "ex",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "wrapException(ex) {\n      var wrapper, t1;\n      if (ex == null)\n        ex = new A.NullThrownError();\n      wrapper = new Error();\n      wrapper.dartException = ex;\n      t1 = A.toStringWrapper;\n      if (\"defineProperty\" in Object) {\n        Object.defineProperty(wrapper, \"message\", {get: t1});\n        wrapper.name = \"\";\n      } else\n        wrapper.toString = t1;\n      return wrapper;\n    }",
+        "type": "dynamic Function(dynamic)"
+      },
+      "167217604": {
+        "id": "function/167217604",
+        "kind": "function",
+        "name": "_asIntQ",
+        "size": 243,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int?",
+        "inferredReturnType": "[null|subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asIntQ(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int?\"));\n    }",
+        "type": "int? Function(dynamic)"
+      },
+      "167405219": {
+        "id": "function/167405219",
+        "kind": "function",
+        "name": "toString",
+        "size": 98,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/627219877",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(this)) + \"'\";\n    }",
+        "type": "String Function()"
+      },
+      "171156881": {
+        "id": "function/171156881",
+        "kind": "function",
+        "name": "typeParameterVariances",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object Function(Object?)"
+      },
+      "173469993": {
+        "id": "function/173469993",
+        "kind": "function",
+        "name": "toString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/481500691",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "",
+        "type": "String Function()"
+      },
+      "181998699": {
+        "id": "function/181998699",
+        "kind": "function",
+        "name": "lookupSupertype",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/768954396",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>?",
+        "inferredReturnType": "[null|subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "rule",
+            "type": "[subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "supertype",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "JSArray<dynamic>? Function(Object?,String)"
+      },
+      "186999466": {
+        "id": "function/186999466",
+        "kind": "function",
+        "name": "length",
+        "size": 58,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$length(receiver) {\n      return receiver.length;\n    }",
+        "type": "int Function()"
+      },
+      "194452894": {
+        "id": "function/194452894",
+        "kind": "function",
+        "name": "_getRest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 19,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "195520573": {
+        "id": "function/195520573",
+        "kind": "function",
+        "name": "isFunctionType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "195587727": {
+        "id": "function/195587727",
+        "kind": "function",
+        "name": "erasedTypes",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Object Function(Object?)"
+      },
+      "196790253": {
+        "id": "function/196790253",
+        "kind": "function",
+        "name": "assertThrow",
+        "size": 89,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "assertThrow(message) {\n      throw A.wrapException(new A._AssertionError(message));\n    }",
+        "type": "void Function(Object)"
+      },
+      "200890444": {
+        "id": "function/200890444",
+        "kind": "function",
+        "name": "_createGenericFunctionParameterRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,int,String)"
+      },
+      "207792788": {
+        "id": "function/207792788",
+        "kind": "function",
+        "name": "_installSpecializedIsTest",
+        "size": 1476,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_installSpecializedIsTest(object) {\n      var unstarred, isFn, $name, testRti = this,\n        t1 = type$.Object;\n      if (testRti === t1)\n        return A._finishIsFn(testRti, object, A._isObject);\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = testRti === t1;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return A._finishIsFn(testRti, object, A._isTop);\n      t1 = testRti._kind;\n      unstarred = t1 === 6 ? testRti._primary : testRti;\n      if (unstarred === type$.int)\n        isFn = A._isInt;\n      else if (unstarred === type$.double || unstarred === type$.num)\n        isFn = A._isNum;\n      else if (unstarred === type$.String)\n        isFn = A._isString;\n      else\n        isFn = unstarred === type$.bool ? A._isBool : null;\n      if (isFn != null)\n        return A._finishIsFn(testRti, object, isFn);\n      if (unstarred._kind === 9) {\n        $name = unstarred._primary;\n        if (unstarred._rest.every(A.isTopType)) {\n          testRti._specializedTestResource = \"$is\" + $name;\n          if ($name === \"List\")\n            return A._finishIsFn(testRti, object, A._isListTestViaProperty);\n          return A._finishIsFn(testRti, object, A._isTestViaProperty);\n        }\n      } else if (t1 === 7)\n        return A._finishIsFn(testRti, object, A._generalNullableIsTestImplementation);\n      return A._finishIsFn(testRti, object, A._generalIsTestImplementation);\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "208283907": {
+        "id": "function/208283907",
+        "kind": "function",
+        "name": "UnsupportedError",
+        "size": 80,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/991730135",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=UnsupportedError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "UnsupportedError$(message) {\n      return new A.UnsupportedError(message);\n    }",
+        "type": "dynamic Function(String)"
+      },
+      "210296716": {
+        "id": "function/210296716",
+        "kind": "function",
+        "name": "StringBuffer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=StringBuffer]",
+        "parameters": [
+          {
+            "name": "content",
+            "type": "Value([exact=JSString], value: \"[\")",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function([Object])"
+      },
+      "212177062": {
+        "id": "function/212177062",
+        "kind": "function",
+        "name": "environment",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 12,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "216705978": {
+        "id": "function/216705978",
+        "kind": "function",
+        "name": "_asTop",
+        "size": 43,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_asTop(object) {\n      return object;\n    }",
+        "type": "Object? Function(Object?)"
+      },
+      "231618349": {
+        "id": "function/231618349",
+        "kind": "function",
+        "name": "isGrowable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "a",
+            "type": "[subclass=JSArray]",
+            "declaredType": "JSArray<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(JSArray<dynamic>)"
+      },
+      "245364359": {
+        "id": "function/245364359",
+        "kind": "function",
+        "name": "_getFutureFromFutureOr",
+        "size": 215,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Rti__getFutureFromFutureOr(universe, rti) {\n      var future = rti._precomputed1;\n      return future == null ? rti._precomputed1 = A._Universe__lookupInterfaceRti(universe, \"Future\", [rti._primary]) : future;\n    }",
+        "type": "Rti Function(Object?,Rti)"
+      },
+      "247461665": {
+        "id": "function/247461665",
+        "kind": "function",
+        "name": "_asInt",
+        "size": 192,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asInt(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int\"));\n    }",
+        "type": "int Function(Object?)"
+      },
+      "253415970": {
+        "id": "function/253415970",
+        "kind": "function",
+        "name": "_finishIsFn",
+        "size": 102,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "isFn",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_finishIsFn(testRti, object, isFn) {\n      testRti._is = isFn;\n      return testRti._is(object);\n    }",
+        "type": "bool Function(Rti,Object?,Object?)"
+      },
+      "253560656": {
+        "id": "function/253560656",
+        "kind": "function",
+        "name": "_createBindingRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "base",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,Rti,Object?,String)"
+      },
+      "253794122": {
+        "id": "function/253794122",
+        "kind": "function",
+        "name": "fromTearOff",
+        "size": 2504,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_fromTearOff(parameters) {\n      var $prototype, $constructor, t2, trampoline, applyTrampoline, i, stub, stub0, stubName, stubCallName,\n        container = parameters.co,\n        isStatic = parameters.iS,\n        isIntercepted = parameters.iI,\n        needsDirectAccess = parameters.nDA,\n        applyTrampolineIndex = parameters.aI,\n        funsOrNames = parameters.fs,\n        callNames = parameters.cs,\n        $name = funsOrNames[0],\n        callName = callNames[0],\n        $function = container[$name],\n        t1 = parameters.fT;\n      t1.toString;\n      A.boolConversionCheck(isStatic);\n      $prototype = isStatic ? Object.create(new A.StaticClosure().constructor.prototype) : Object.create(new A.BoundClosure(null, null).constructor.prototype);\n      $prototype.$initialize = $prototype.constructor;\n      if (isStatic)\n        $constructor = function static_tear_off() {\n          this.$initialize();\n        };\n      else {\n        t2 = $.Closure_functionCounter;\n        if (typeof t2 !== \"number\")\n          return t2.$add();\n        $.Closure_functionCounter = t2 + 1;\n        t2 = new Function(\"a,b\" + t2, \"this.$initialize(a,b\" + t2 + \")\");\n        $constructor = t2;\n      }\n      $prototype.constructor = $constructor;\n      $constructor.prototype = $prototype;\n      $prototype.$_name = $name;\n      $prototype.$_target = $function;\n      t2 = !isStatic;\n      if (t2)\n        trampoline = A.Closure_forwardCallTo($name, $function, isIntercepted, needsDirectAccess);\n      else {\n        $prototype.$static_name = $name;\n        trampoline = $function;\n      }\n      $prototype.$signature = A.Closure__computeSignatureFunctionNewRti(t1, isStatic, isIntercepted);\n      $prototype[callName] = trampoline;\n      for (applyTrampoline = trampoline, i = 1; i < funsOrNames.length; ++i) {\n        stub = funsOrNames[i];\n        if (typeof stub == \"string\") {\n          stub0 = container[stub];\n          stubName = stub;\n          stub = stub0;\n        } else\n          stubName = \"\";\n        stubCallName = callNames[i];\n        if (stubCallName != null) {\n          if (t2)\n            stub = A.Closure_forwardCallTo(stubName, stub, isIntercepted, needsDirectAccess);\n          $prototype[stubCallName] = stub;\n        }\n        if (i === applyTrampolineIndex)\n          applyTrampoline = stub;\n      }\n      $prototype[\"call*\"] = applyTrampoline;\n      $prototype.$requiredArgCount = parameters.rC;\n      $prototype.$defaultValues = parameters.dV;\n      return $constructor;\n    }",
+        "type": "dynamic Function(Object?)"
+      },
+      "264634420": {
+        "id": "function/264634420",
+        "kind": "function",
+        "name": "_getGenericFunctionParameterIndex",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "int Function(Rti)"
+      },
+      "266327677": {
+        "id": "function/266327677",
+        "kind": "function",
+        "name": "digitValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1013977545",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "code",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "int Function(int)"
+      },
+      "266572710": {
+        "id": "function/266572710",
+        "kind": "function",
+        "name": "findTypeParameterVariances",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "cls",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object? Function(Object?,String)"
+      },
+      "273024378": {
+        "id": "function/273024378",
+        "kind": "function",
+        "name": "forwardCallTo",
+        "size": 1570,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "stubName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "isIntercepted",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "needsDirectAccess",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_forwardCallTo(stubName, $function, isIntercepted, needsDirectAccess) {\n      var arity, t1, selfName, t2, $arguments,\n        _s8_ = \"receiver\";\n      if (A.boolConversionCheck(isIntercepted))\n        return A.Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess);\n      arity = $function.length;\n      t1 = A.boolConversionCheck(needsDirectAccess) || arity >= 27;\n      if (t1)\n        return A.Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function);\n      if (arity === 0) {\n        t1 = $.Closure_functionCounter;\n        if (typeof t1 !== \"number\")\n          return t1.$add();\n        $.Closure_functionCounter = t1 + 1;\n        selfName = \"self\" + t1;\n        t1 = \"return function(){var \" + selfName + \" = this.\";\n        t2 = $.BoundClosure__receiverFieldNameCache;\n        return new Function(t1 + (t2 == null ? $.BoundClosure__receiverFieldNameCache = A.BoundClosure__computeFieldNamed(_s8_) : t2) + \";return \" + selfName + \".\" + A.S(stubName) + \"();}\")();\n      }\n      $arguments = \"abcdefghijklmnopqrstuvwxyz\".split(\"\").splice(0, arity).join(\",\");\n      t1 = $.Closure_functionCounter;\n      if (typeof t1 !== \"number\")\n        return t1.$add();\n      $.Closure_functionCounter = t1 + 1;\n      $arguments += t1;\n      t1 = \"return function(\" + $arguments + \"){return this.\";\n      t2 = $.BoundClosure__receiverFieldNameCache;\n      return new Function(t1 + (t2 == null ? $.BoundClosure__receiverFieldNameCache = A.BoundClosure__computeFieldNamed(_s8_) : t2) + \".\" + A.S(stubName) + \"(\" + $arguments + \");}\")();\n    }",
+        "type": "dynamic Function(String,dynamic,bool,bool)"
+      },
+      "275271990": {
+        "id": "function/275271990",
+        "kind": "function",
+        "name": "_errorName",
+        "size": 51,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"RangeError\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$_errorName() {\n      return \"RangeError\";\n    }",
+        "type": "String Function()"
+      },
+      "285148179": {
+        "id": "function/285148179",
+        "kind": "function",
+        "name": "toString",
+        "size": 191,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/466061502",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      var $name = this.$static_name;\n      if ($name == null)\n        return \"Closure of unknown static method\";\n      return \"Closure '\" + A.unminifyOrTag($name) + \"'\";\n    }",
+        "type": "String Function()"
+      },
+      "287475886": {
+        "id": "function/287475886",
+        "kind": "function",
+        "name": "_isTestViaProperty",
+        "size": 287,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isTestViaProperty(object) {\n      var tag, testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      tag = testRti._specializedTestResource;\n      if (object instanceof A.Object)\n        return !!object[tag];\n      return !!J.getInterceptor$(object)[tag];\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "293305096": {
+        "id": "function/293305096",
+        "kind": "function",
+        "name": "interceptorFieldName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes static)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
+      },
+      "294207503": {
+        "id": "function/294207503",
+        "kind": "function",
+        "name": "_createStarRti",
+        "size": 567,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__createStarRti(universe, baseType, key, normalize) {\n      var baseKind, t1, rti;\n      if (normalize) {\n        baseKind = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          t1 = baseType === type$.Null || baseType === type$.JSNull || baseKind === 7 || baseKind === 6;\n        else\n          t1 = true;\n        if (t1)\n          return baseType;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 6;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,String,bool)"
+      },
+      "295807328": {
+        "id": "function/295807328",
+        "kind": "function",
+        "name": "unminifyOrTag",
+        "size": 178,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rawClassName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "unminifyOrTag(rawClassName) {\n      var preserved = init.mangledGlobalNames[rawClassName];\n      if (preserved != null)\n        return preserved;\n      return rawClassName;\n    }",
+        "type": "String Function(String)"
+      },
+      "301370282": {
+        "id": "function/301370282",
+        "kind": "function",
+        "name": "eval",
+        "size": 307,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_eval(universe, recipe, normalize) {\n      var rti,\n        cache = universe.eC,\n        probe = cache.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, null, recipe, normalize));\n      cache.set(recipe, rti);\n      return rti;\n    }",
+        "type": "Rti Function(Object?,String,bool)"
+      },
+      "301930977": {
+        "id": "function/301930977",
+        "kind": "function",
+        "name": "_FunctionParameters",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_FunctionParameters]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "302617892": {
+        "id": "function/302617892",
+        "kind": "function",
+        "name": "_objectToString",
+        "size": 192,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/893386369",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Error__objectToString(object) {\n      if (object instanceof A.Closure)\n        return object.toString$0(0);\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(object)) + \"'\";\n    }",
+        "type": "String Function(Object)"
+      },
+      "304695429": {
+        "id": "function/304695429",
+        "kind": "function",
+        "name": "_setRequiredPositional",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "requiredPositional",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "void Function(_FunctionParameters,Object?)"
+      },
+      "308590446": {
+        "id": "function/308590446",
+        "kind": "function",
+        "name": "throwExpression",
+        "size": 60,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "ex",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "throwExpression(ex) {\n      throw A.wrapException(ex);\n    }",
+        "type": "dynamic Function(dynamic)"
+      },
+      "310648840": {
+        "id": "function/310648840",
+        "kind": "function",
+        "name": "_asNumS",
+        "size": 209,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num?",
+        "inferredReturnType": "[null|subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asNumS(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num\"));\n    }",
+        "type": "num? Function(dynamic)"
+      },
+      "317451330": {
+        "id": "function/317451330",
+        "kind": "function",
+        "name": "instanceType",
+        "size": 342,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "instanceType(object) {\n      var rti;\n      if (object instanceof A.Object) {\n        rti = object.$ti;\n        return rti != null ? rti : A._instanceTypeFromConstructor(object);\n      }\n      if (Array.isArray(object))\n        return A._arrayInstanceType(object);\n      return A._instanceTypeFromConstructor(J.getInterceptor$(object));\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "319720211": {
+        "id": "function/319720211",
+        "kind": "function",
+        "name": "compose",
+        "size": 378,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/457024667",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "objectRti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti?"
+          },
+          {
+            "name": "checkedTypeDescription",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Error_compose(object, objectRti, checkedTypeDescription) {\n      var objectDescription = A.Error_safeToString(object),\n        objectTypeDescription = A._rtiToString(objectRti == null ? A.instanceType(object) : objectRti, null);\n      return objectDescription + \": type '\" + A.S(objectTypeDescription) + \"' is not a subtype of type '\" + A.S(checkedTypeDescription) + \"'\";\n    }",
+        "type": "String Function(Object?,Rti?,String)"
+      },
+      "320253842": {
+        "id": "function/320253842",
+        "kind": "function",
+        "name": "isCsp",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[null|subtype=bool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function()"
+      },
+      "321900710": {
+        "id": "function/321900710",
+        "kind": "function",
+        "name": "_canonicalRecipeOfAny",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
+      },
+      "331545422": {
+        "id": "function/331545422",
+        "kind": "function",
+        "name": "_instanceTypeFromConstructor",
+        "size": 251,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "instance",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_instanceTypeFromConstructor(instance) {\n      var $constructor = instance.constructor,\n        probe = $constructor.$ccache;\n      if (probe != null)\n        return probe;\n      return A._instanceTypeFromConstructorMiss(instance, $constructor);\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "331565025": {
+        "id": "function/331565025",
+        "kind": "function",
+        "name": "_isTop",
+        "size": 41,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "Value([exact=JSBool], value: true)",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_isTop(object) {\n      return true;\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "332074411": {
+        "id": "function/332074411",
+        "kind": "function",
+        "name": "asBool",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 6,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "335045122": {
+        "id": "function/335045122",
+        "kind": "function",
+        "name": "_writeString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "str",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(String)"
+      },
+      "337498518": {
+        "id": "function/337498518",
+        "kind": "function",
+        "name": "_createGenericFunctionRti",
+        "size": 1063,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseFunctionType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "bounds",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize) {\n      var $length, typeArguments, count, i, bound, substitutedBase, substitutedBounds, rti;\n      if (normalize) {\n        $length = bounds.length;\n        typeArguments = A._Utils_newArrayOrEmpty($length);\n        for (count = 0, i = 0; i < $length; ++i) {\n          bound = bounds[i];\n          if (bound._kind === 1) {\n            typeArguments[i] = bound;\n            ++count;\n          }\n        }\n        if (count > 0) {\n          substitutedBase = A._substitute(universe, baseFunctionType, typeArguments, 0);\n          substitutedBounds = A._substituteArray(universe, bounds, typeArguments, 0);\n          return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, bounds !== substitutedBounds);\n        }\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 12;\n      rti._primary = baseFunctionType;\n      rti._rest = bounds;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,Object?,String,bool)"
+      },
+      "338600142": {
+        "id": "function/338600142",
+        "kind": "function",
+        "name": "_getRequiredPositional",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+      },
+      "339189097": {
+        "id": "function/339189097",
+        "kind": "function",
+        "name": "toString",
+        "size": 93,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/155954474",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"Assertion failed: \" + A.Error_safeToString(this.message);\n    }",
+        "type": "String Function()"
+      },
+      "339437005": {
+        "id": "function/339437005",
+        "kind": "function",
+        "name": "_asObject",
+        "size": 46,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asObject(object) {\n      return object;\n    }",
+        "type": "Object? Function(Object?)"
+      },
+      "340789555": {
+        "id": "function/340789555",
+        "kind": "function",
+        "name": "_createInterfaceRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "name",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,String,Object?,String)"
+      },
+      "347168225": {
+        "id": "function/347168225",
+        "kind": "function",
+        "name": "toTypes",
+        "size": 204,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "items",
+            "type": "[subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_toTypes(universe, environment, items) {\n      var i,\n        $length = items.length;\n      for (i = 0; i < $length; ++i)\n        items[i] = A._Parser_toType(universe, environment, items[i]);\n    }",
+        "type": "void Function(Object?,Rti,Object?)"
+      },
+      "347710223": {
+        "id": "function/347710223",
+        "kind": "function",
+        "name": "pushStackFrame",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
+      },
+      "349997389": {
+        "id": "function/349997389",
+        "kind": "function",
+        "name": "RangeError.value",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=RangeError]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[subclass=JSInt]",
+            "declaredType": "num"
+          },
+          {
+            "name": "name",
+            "type": "Value([exact=JSString], value: \"index\")",
+            "declaredType": "String?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(num,[String?,String?])"
+      },
+      "351876786": {
+        "id": "function/351876786",
+        "kind": "function",
+        "name": "_substitute",
+        "size": 3652,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "depth",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_substitute(universe, rti, typeArguments, depth) {\n      var baseType, substitutedBaseType, interfaceTypeArguments, substitutedInterfaceTypeArguments, base, substitutedBase, $arguments, substitutedArguments, returnType, substitutedReturnType, functionParameters, substitutedFunctionParameters, bounds, substitutedBounds, index, argument,\n        kind = rti._kind;\n      switch (kind) {\n        case 5:\n        case 1:\n        case 2:\n        case 3:\n        case 4:\n          return rti;\n        case 6:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupStarRti(universe, substitutedBaseType, true);\n        case 7:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupQuestionRti(universe, substitutedBaseType, true);\n        case 8:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupFutureOrRti(universe, substitutedBaseType, true);\n        case 9:\n          interfaceTypeArguments = rti._rest;\n          substitutedInterfaceTypeArguments = A._substituteArray(universe, interfaceTypeArguments, typeArguments, depth);\n          if (substitutedInterfaceTypeArguments === interfaceTypeArguments)\n            return rti;\n          return A._Universe__lookupInterfaceRti(universe, rti._primary, substitutedInterfaceTypeArguments);\n        case 10:\n          base = rti._primary;\n          substitutedBase = A._substitute(universe, base, typeArguments, depth);\n          $arguments = rti._rest;\n          substitutedArguments = A._substituteArray(universe, $arguments, typeArguments, depth);\n          if (substitutedBase === base && substitutedArguments === $arguments)\n            return rti;\n          return A._Universe__lookupBindingRti(universe, substitutedBase, substitutedArguments);\n        case 11:\n          returnType = rti._primary;\n          substitutedReturnType = A._substitute(universe, returnType, typeArguments, depth);\n          functionParameters = rti._rest;\n          substitutedFunctionParameters = A._substituteFunctionParameters(universe, functionParameters, typeArguments, depth);\n          if (substitutedReturnType === returnType && substitutedFunctionParameters === functionParameters)\n            return rti;\n          return A._Universe__lookupFunctionRti(universe, substitutedReturnType, substitutedFunctionParameters);\n        case 12:\n          bounds = rti._rest;\n          depth += bounds.length;\n          substitutedBounds = A._substituteArray(universe, bounds, typeArguments, depth);\n          base = rti._primary;\n          substitutedBase = A._substitute(universe, base, typeArguments, depth);\n          if (substitutedBounds === bounds && substitutedBase === base)\n            return rti;\n          return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, true);\n        case 13:\n          index = rti._primary;\n          if (index < depth)\n            return rti;\n          argument = typeArguments[index - depth];\n          if (argument == null)\n            return rti;\n          return argument;\n        default:\n          throw A.wrapException(A.AssertionError$(\"Attempted to substitute unexpected RTI kind \" + kind));\n      }\n    }",
+        "type": "Rti Function(Object?,Rti,Object?,int)"
+      },
+      "352620724": {
+        "id": "function/352620724",
+        "kind": "function",
+        "name": "_setPrimary",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "Union(null, [exact=JSString], [exact=Rti], [subclass=JSInt])",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "355012434": {
+        "id": "function/355012434",
+        "kind": "function",
+        "name": "safeToString",
+        "size": 270,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/893386369",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Error_safeToString(object) {\n      if (typeof object == \"number\" || A._isBool(object) || object == null)\n        return J.toString$0$(object);\n      if (typeof object == \"string\")\n        return JSON.stringify(object);\n      return A.Error__objectToString(object);\n    }",
+        "type": "String Function(Object?)"
+      },
+      "357766771": {
+        "id": "function/357766771",
+        "kind": "function",
+        "name": "_lookupFutureOrRti",
+        "size": 341,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupFutureOrRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"/\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createFutureOrRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,bool)"
+      },
+      "358028985": {
+        "id": "function/358028985",
+        "kind": "function",
+        "name": "_setOptionalPositional",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "optionalPositional",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "void Function(_FunctionParameters,Object?)"
+      },
+      "358340511": {
+        "id": "function/358340511",
+        "kind": "function",
+        "name": "write",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "obj",
+            "type": "Value([exact=JSString], value: \"]\")",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object?)"
+      },
+      "359606692": {
+        "id": "function/359606692",
+        "kind": "function",
+        "name": "position",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "int Function(Object?)"
+      },
+      "361871829": {
+        "id": "function/361871829",
+        "kind": "function",
+        "name": "_TypeError.forType",
+        "size": 136,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/324095577",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "_TypeError",
+        "inferredReturnType": "[exact=_TypeError]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "type",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_TypeError__TypeError$forType(object, type) {\n      return new A._TypeError(\"TypeError: \" + A._Error_compose(object, null, type));\n    }",
+        "type": "_TypeError Function(dynamic,String)"
+      },
+      "362880086": {
+        "id": "function/362880086",
+        "kind": "function",
+        "name": "_isCheck",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "bool Function(Rti,Object?)"
+      },
+      "369614033": {
+        "id": "function/369614033",
+        "kind": "function",
+        "name": "toString",
+        "size": 98,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(receiver) {\n      return A.IterableBase_iterableToFullString(receiver, \"[\", \"]\");\n    }",
+        "type": "String Function()"
+      },
+      "372037963": {
+        "id": "function/372037963",
+        "kind": "function",
+        "name": "toString",
+        "size": 98,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "toString$0(_) {\n      var t1 = this._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
+        "type": "String Function()"
+      },
+      "374894045": {
+        "id": "function/374894045",
+        "kind": "function",
+        "name": "throwLateFieldADI",
+        "size": 160,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/227349358",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "fieldName",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 0,
+        "code": "throwLateFieldADI(fieldName) {\n      return A.throwExpression(new A.LateError(\"Field '\" + A.S(fieldName) + \"' has been assigned during initialization.\"));\n    }",
+        "type": "void Function(String)"
+      },
+      "388977016": {
+        "id": "function/388977016",
+        "kind": "function",
+        "name": "_writeOne",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "obj",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "String Function(String,Object?)"
+      },
+      "393060060": {
+        "id": "function/393060060",
+        "kind": "function",
+        "name": "BoundClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=BoundClosure]",
+        "parameters": [
+          {
+            "name": "_receiver",
+            "type": "Value([null|exact=JSString], value: \"receiver\")",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "_interceptor",
+            "type": "Value([null|exact=JSString], value: \"interceptor\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "dynamic Function(dynamic,dynamic)"
+      },
+      "395359035": {
+        "id": "function/395359035",
+        "kind": "function",
+        "name": "_setNamed",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "named",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "void Function(_FunctionParameters,Object?)"
+      },
       "399195151": {
         "id": "function/399195151",
         "kind": "function",
         "name": "print",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "children": [],
         "modifiers": {
@@ -477,28 +4666,27 @@
           "factory": false,
           "external": false
         },
-        "returnType": null,
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [
           {
             "name": "object",
-            "type": "Value mask: [\"Hello, World!\"] type: [exact=JSString]",
-            "declaredType": "Object"
+            "type": "Value([exact=JSString], value: \"Hello, World!\")",
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "(Object) -> void",
-        "measurements": null
+        "code": "",
+        "type": "void Function(Object?)"
       },
-      "531925466": {
-        "id": "function/531925466",
+      "400204433": {
+        "id": "function/400204433",
         "kind": "function",
-        "name": "main",
-        "size": 62,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "library/60281205",
+        "name": "_functionRtiToString",
+        "size": 3370,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -506,30 +4694,2274 @@
           "factory": false,
           "external": false
         },
-        "returnType": null,
-        "inferredReturnType": "[null]",
-        "parameters": [],
-        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "functionType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "genericContext",
+            "type": "Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
+            "declaredType": "List<String>?"
+          },
+          {
+            "name": "bounds",
+            "type": "[null|exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "main: function() {\n  H.printString(\"Hello, World!\");\n}\n",
-        "type": "() -> dynamic",
-        "measurements": null
+        "code": "_functionRtiToString(functionType, genericContext, bounds) {\n      var boundsLength, outerContextLength, offset, i, t1, t2, t3, typeParametersText, typeSep, t4, t5, boundRti, kind, parameters, requiredPositional, requiredPositionalLength, optionalPositional, optionalPositionalLength, named, namedLength, returnTypeText, argumentsText, sep, _s2_ = \", \";\n      if (bounds != null) {\n        boundsLength = bounds.length;\n        if (genericContext == null) {\n          genericContext = A._setArrayType([], type$.JSArray_String);\n          outerContextLength = null;\n        } else\n          outerContextLength = genericContext.length;\n        offset = genericContext.length;\n        for (i = boundsLength; i > 0; --i)\n          B.JSArray_methods.add$1(genericContext, \"T\" + (offset + i));\n        for (t1 = type$.nullable_Object, t2 = type$.legacy_Object, t3 = type$.Object, typeParametersText = \"<\", typeSep = \"\", i = 0; i < boundsLength; ++i, typeSep = _s2_) {\n          typeParametersText += typeSep;\n          t4 = genericContext.length;\n          t5 = t4 - 1 - i;\n          if (!(t5 >= 0))\n            return A.ioore(genericContext, t5);\n          typeParametersText = B.JSString_methods.$add(typeParametersText, genericContext[t5]);\n          boundRti = bounds[i];\n          kind = boundRti._kind;\n          if (!(kind === 2 || kind === 3 || kind === 4 || kind === 5 || boundRti === t1))\n            if (!(boundRti === t2))\n              t4 = boundRti === t3;\n            else\n              t4 = true;\n          else\n            t4 = true;\n          if (!t4)\n            typeParametersText += B.JSString_methods.$add(\" extends \", A._rtiToString(boundRti, genericContext));\n        }\n        typeParametersText += \">\";\n      } else {\n        typeParametersText = \"\";\n        outerContextLength = null;\n      }\n      t1 = functionType._primary;\n      parameters = functionType._rest;\n      requiredPositional = parameters._requiredPositional;\n      requiredPositionalLength = requiredPositional.length;\n      optionalPositional = parameters._optionalPositional;\n      optionalPositionalLength = optionalPositional.length;\n      named = parameters._named;\n      namedLength = named.length;\n      returnTypeText = A._rtiToString(t1, genericContext);\n      for (argumentsText = \"\", sep = \"\", i = 0; i < requiredPositionalLength; ++i, sep = _s2_)\n        argumentsText += B.JSString_methods.$add(sep, A._rtiToString(requiredPositional[i], genericContext));\n      if (optionalPositionalLength > 0) {\n        argumentsText += sep + \"[\";\n        for (sep = \"\", i = 0; i < optionalPositionalLength; ++i, sep = _s2_)\n          argumentsText += B.JSString_methods.$add(sep, A._rtiToString(optionalPositional[i], genericContext));\n        argumentsText += \"]\";\n      }\n      if (namedLength > 0) {\n        argumentsText += sep + \"{\";\n        for (sep = \"\", i = 0; i < namedLength; i += 3, sep = _s2_) {\n          argumentsText += sep;\n          if (named[i + 1])\n            argumentsText += \"required \";\n          argumentsText += J.$add$ns(A._rtiToString(named[i + 2], genericContext), \" \") + named[i];\n        }\n        argumentsText += \"}\";\n      }\n      if (outerContextLength != null) {\n        genericContext.toString;\n        genericContext.length = outerContextLength;\n      }\n      return typeParametersText + \"(\" + argumentsText + \") => \" + A.S(returnTypeText);\n    }",
+        "type": "String Function(Rti,List<String>?,{Object? bounds})"
+      },
+      "405266426": {
+        "id": "function/405266426",
+        "kind": "function",
+        "name": "iterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterator<JSArray.E>",
+        "inferredReturnType": "[exact=ArrayIterator]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Iterator<JSArray.E> Function()"
+      },
+      "405722833": {
+        "id": "function/405722833",
+        "kind": "function",
+        "name": "_getInterfaceTypeArguments",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 7,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Rti)"
+      },
+      "407860982": {
+        "id": "function/407860982",
+        "kind": "function",
+        "name": "isJsFunctionType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "409628970": {
+        "id": "function/409628970",
+        "kind": "function",
+        "name": "handleExtendedOperations",
+        "size": 417,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_handleExtendedOperations(parser, stack) {\n      var $top = stack.pop();\n      if (0 === $top) {\n        stack.push(A._Universe__lookupTerminalRti(parser.u, 1, \"0&\"));\n        return;\n      }\n      if (1 === $top) {\n        stack.push(A._Universe__lookupTerminalRti(parser.u, 4, \"1&\"));\n        return;\n      }\n      throw A.wrapException(A.AssertionError$(\"Unexpected extended operation \" + A.S($top)));\n    }",
+        "type": "void Function(Object?,Object?)"
+      },
+      "412727111": {
+        "id": "function/412727111",
+        "kind": "function",
+        "name": "_getFutureOrArgument",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 10,
+        "code": "",
+        "type": "Rti Function(Rti)"
+      },
+      "417411809": {
+        "id": "function/417411809",
+        "kind": "function",
+        "name": "_asStringS",
+        "size": 215,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asStringS(object) {\n      if (typeof object == \"string\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String\"));\n    }",
+        "type": "String? Function(dynamic)"
+      },
+      "418915149": {
+        "id": "function/418915149",
+        "kind": "function",
+        "name": "ioore",
+        "size": 161,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "index",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "ioore(receiver, index) {\n      if (receiver == null)\n        J.get$length$as(receiver);\n      throw A.wrapException(A.diagnoseIndexError(receiver, index));\n    }",
+        "type": "dynamic Function(dynamic,dynamic)"
+      },
+      "422605719": {
+        "id": "function/422605719",
+        "kind": "function",
+        "name": "_recipeJoin3",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s3",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(String,String,String)"
+      },
+      "425183906": {
+        "id": "function/425183906",
+        "kind": "function",
+        "name": "toString",
+        "size": 55,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/457024667",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return this.__rti$_message;\n    }",
+        "type": "String Function()"
+      },
+      "426435180": {
+        "id": "function/426435180",
+        "kind": "function",
+        "name": "_parseRecipe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti Function(Object?,Object?,String,bool)"
+      },
+      "435575019": {
+        "id": "function/435575019",
+        "kind": "function",
+        "name": "toStringWrapper",
+        "size": 73,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toStringWrapper() {\n      return J.toString$0$(this.dartException);\n    }",
+        "type": "dynamic Function()"
+      },
+      "436761607": {
+        "id": "function/436761607",
+        "kind": "function",
+        "name": "_getCanonicalRecipe",
+        "size": 71,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 9,
+        "code": "Rti__getCanonicalRecipe(rti) {\n      return rti._canonicalRecipe;\n    }",
+        "type": "String Function(Rti)"
+      },
+      "438117901": {
+        "id": "function/438117901",
+        "kind": "function",
+        "name": "sharedEmptyArray",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?)"
+      },
+      "440018750": {
+        "id": "function/440018750",
+        "kind": "function",
+        "name": "toString",
+        "size": 138,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0(receiver) {\n      if (receiver === 0 && 1 / receiver < 0)\n        return \"-0.0\";\n      else\n        return \"\" + receiver;\n    }",
+        "type": "String Function()"
+      },
+      "445547062": {
+        "id": "function/445547062",
+        "kind": "function",
+        "name": "S",
+        "size": 492,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "S(value) {\n      var res;\n      if (typeof value == \"string\")\n        return value;\n      if (typeof value == \"number\") {\n        if (value !== 0)\n          return \"\" + value;\n      } else if (true === value)\n        return \"true\";\n      else if (false === value)\n        return \"false\";\n      else if (value == null)\n        return \"null\";\n      res = J.toString$0$(value);\n      if (typeof res != \"string\")\n        throw A.wrapException(A.argumentErrorValue(value));\n      return res;\n    }",
+        "type": "String Function(dynamic)"
+      },
+      "447148542": {
+        "id": "function/447148542",
+        "kind": "function",
+        "name": "evalTypeVariable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "name",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,Rti,String)"
+      },
+      "448227795": {
+        "id": "function/448227795",
+        "kind": "function",
+        "name": "_errorName",
+        "size": 90,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$_errorName() {\n      return \"Invalid argument\" + (!this._hasValue ? \"(s)\" : \"\");\n    }",
+        "type": "String Function()"
+      },
+      "457543033": {
+        "id": "function/457543033",
+        "kind": "function",
+        "name": "stringLessThan",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(String,String)"
+      },
+      "464959827": {
+        "id": "function/464959827",
+        "kind": "function",
+        "name": "toString",
+        "size": 544,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      var explanation, errorValue, _this = this,\n        $name = _this.name,\n        nameString = $name == null ? \"\" : \" (\" + $name + \")\",\n        message = _this.message,\n        messageString = message == null ? \"\" : \": \" + message,\n        prefix = _this.get$_errorName() + nameString + messageString;\n      if (!_this._hasValue)\n        return prefix;\n      explanation = _this.get$_errorExplanation();\n      errorValue = A.Error_safeToString(_this.invalidValue);\n      return prefix + explanation + \": \" + errorValue;\n    }",
+        "type": "String Function()"
+      },
+      "467920119": {
+        "id": "function/467920119",
+        "kind": "function",
+        "name": "Rti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "469917674": {
+        "id": "function/469917674",
+        "kind": "function",
+        "name": "_substituteArray",
+        "size": 503,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rtiArray",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "depth",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_substituteArray(universe, rtiArray, typeArguments, depth) {\n      var changed, i, rti, substitutedRti,\n        $length = rtiArray.length,\n        result = A._Utils_newArrayOrEmpty($length);\n      for (changed = false, i = 0; i < $length; ++i) {\n        rti = rtiArray[i];\n        substitutedRti = A._substitute(universe, rti, typeArguments, depth);\n        if (substitutedRti !== rti)\n          changed = true;\n        result[i] = substitutedRti;\n      }\n      return changed ? result : rtiArray;\n    }",
+        "type": "Object? Function(Object?,Object?,Object?,int)"
+      },
+      "474133145": {
+        "id": "function/474133145",
+        "kind": "function",
+        "name": "toString",
+        "size": 76,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/991730135",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"Unsupported operation: \" + this.message;\n    }",
+        "type": "String Function()"
+      },
+      "476860251": {
+        "id": "function/476860251",
+        "kind": "function",
+        "name": "cspForwardCall",
+        "size": 1644,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "arity",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "needsDirectAccess",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "stubName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String?"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf;\n      switch (A.boolConversionCheck(needsDirectAccess) ? -1 : arity) {\n        case 0:\n          return function(entry, receiverOf) {\n            return function() {\n              return receiverOf(this)[entry]();\n            };\n          }(stubName, getReceiver);\n        case 1:\n          return function(entry, receiverOf) {\n            return function(a) {\n              return receiverOf(this)[entry](a);\n            };\n          }(stubName, getReceiver);\n        case 2:\n          return function(entry, receiverOf) {\n            return function(a, b) {\n              return receiverOf(this)[entry](a, b);\n            };\n          }(stubName, getReceiver);\n        case 3:\n          return function(entry, receiverOf) {\n            return function(a, b, c) {\n              return receiverOf(this)[entry](a, b, c);\n            };\n          }(stubName, getReceiver);\n        case 4:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d) {\n              return receiverOf(this)[entry](a, b, c, d);\n            };\n          }(stubName, getReceiver);\n        case 5:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d, e) {\n              return receiverOf(this)[entry](a, b, c, d, e);\n            };\n          }(stubName, getReceiver);\n        default:\n          return function(f, receiverOf) {\n            return function() {\n              return f.apply(receiverOf(this), arguments);\n            };\n          }($function, getReceiver);\n      }\n    }",
+        "type": "dynamic Function(int,bool,String?,dynamic)"
+      },
+      "477858577": {
+        "id": "function/477858577",
+        "kind": "function",
+        "name": "recipe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Object?)"
+      },
+      "478486472": {
+        "id": "function/478486472",
+        "kind": "function",
+        "name": "markFixedList",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<#A/*free*/>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "list",
+            "type": "[null|subclass=Object]",
+            "declaredType": "List<markFixedList.T>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "List<#A> Function<#A extends Object?>(List<#A>)"
+      },
+      "479155815": {
+        "id": "function/479155815",
+        "kind": "function",
+        "name": "toType",
+        "size": 303,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "item",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_toType(universe, environment, item) {\n      if (typeof item == \"string\")\n        return A._Universe__lookupInterfaceRti(universe, item, universe.sEA);\n      else if (typeof item == \"number\")\n        return A._Parser_indexToType(universe, environment, item);\n      else\n        return item;\n    }",
+        "type": "Rti Function(Object?,Rti,Object?)"
+      },
+      "481740897": {
+        "id": "function/481740897",
+        "kind": "function",
+        "name": "objectAssign",
+        "size": 219,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Utils_objectAssign(o, other) {\n      var i, key,\n        keys = Object.keys(other),\n        $length = keys.length;\n      for (i = 0; i < $length; ++i) {\n        key = keys[i];\n        o[key] = other[key];\n      }\n    }",
+        "type": "void Function(Object?,Object?)"
+      },
+      "489157293": {
+        "id": "function/489157293",
+        "kind": "function",
+        "name": "findRule",
+        "size": 182,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "targetType",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_Universe_findRule(universe, targetType) {\n      var rule = universe.tR[targetType];\n      for (; typeof rule == \"string\";)\n        rule = universe.tR[rule];\n      return rule;\n    }",
+        "type": "Object? Function(Object?,String)"
+      },
+      "490035833": {
+        "id": "function/490035833",
+        "kind": "function",
+        "name": "push",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 29,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
+      },
+      "490424967": {
+        "id": "function/490424967",
+        "kind": "function",
+        "name": "_getBindCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "491504779": {
+        "id": "function/491504779",
+        "kind": "function",
+        "name": "_setBindCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "492521940": {
+        "id": "function/492521940",
+        "kind": "function",
+        "name": "_getPrecomputed1",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "494259168": {
+        "id": "function/494259168",
+        "kind": "function",
+        "name": "handleIdentifier",
+        "size": 1100,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "start",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "source",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "hasPeriod",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_handleIdentifier(parser, start, source, stack, hasPeriod) {\n      var t1, ch, t2, string, environment, recipe,\n        i = start + 1;\n      for (t1 = source.length; i < t1; ++i) {\n        ch = source.charCodeAt(i);\n        if (ch === 46) {\n          if (hasPeriod)\n            break;\n          hasPeriod = true;\n        } else {\n          if (!((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36))\n            t2 = ch >= 48 && ch <= 57;\n          else\n            t2 = true;\n          if (!t2)\n            break;\n        }\n      }\n      string = source.substring(start, i);\n      if (hasPeriod) {\n        t1 = parser.u;\n        environment = parser.e;\n        if (environment._kind === 10)\n          environment = environment._primary;\n        recipe = A._Universe_findRule(t1, environment._primary)[string];\n        if (recipe == null)\n          A.throwExpression('No \"' + string + '\" in \"' + A.Rti__getCanonicalRecipe(environment) + '\"');\n        stack.push(A._Universe_evalInEnvironment(t1, environment, recipe));\n      } else\n        stack.push(string);\n      return i;\n    }",
+        "type": "int Function(Object?,int,String,Object?,bool)"
+      },
+      "495511570": {
+        "id": "function/495511570",
+        "kind": "function",
+        "name": "collectArray",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?,Object?)"
+      },
+      "497781031": {
+        "id": "function/497781031",
+        "kind": "function",
+        "name": "asDouble",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "double",
+        "inferredReturnType": "[subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "double Function(Object?)"
+      },
+      "499032542": {
+        "id": "function/499032542",
+        "kind": "function",
+        "name": "_lookupStarRti",
+        "size": 333,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupStarRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"*\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createStarRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,bool)"
+      },
+      "501313936": {
+        "id": "function/501313936",
+        "kind": "function",
+        "name": "_getReturnType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "Rti Function(Rti)"
+      },
+      "502696664": {
+        "id": "function/502696664",
+        "kind": "function",
+        "name": "_isString",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "_isString(object) {\n      return typeof object == \"string\";\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "504534695": {
+        "id": "function/504534695",
+        "kind": "function",
+        "name": "closureFunctionType",
+        "size": 268,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti?",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "closureFunctionType(closure) {\n      var signature = closure.$signature;\n      if (signature != null) {\n        if (typeof signature == \"number\")\n          return A.getTypeFromTypesTable(signature);\n        return closure.$signature();\n      }\n      return null;\n    }",
+        "type": "Rti? Function(Object?)"
+      },
+      "507333070": {
+        "id": "function/507333070",
+        "kind": "function",
+        "name": "stringConcatUnchecked",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "string2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "String Function(String,String)"
+      },
+      "512286296": {
+        "id": "function/512286296",
+        "kind": "function",
+        "name": "_lookupGenericFunctionParameterRti",
+        "size": 430,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupGenericFunctionParameterRti(universe, index) {\n      var rti, t1,\n        key = \"\" + index + \"^\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 13;\n      rti._primary = index;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,int)"
+      },
+      "514473880": {
+        "id": "function/514473880",
+        "kind": "function",
+        "name": "allocate",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_FunctionParameters",
+        "inferredReturnType": "[exact=_FunctionParameters]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "_FunctionParameters Function()"
+      },
+      "517189775": {
+        "id": "function/517189775",
+        "kind": "function",
+        "name": "setPosition",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "p",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "void Function(Object?,int)"
+      },
+      "517327012": {
+        "id": "function/517327012",
+        "kind": "function",
+        "name": "_getPrimary",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "Union(null, [exact=JSString], [exact=Rti], [subclass=JSInt])",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 48,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "520073200": {
+        "id": "function/520073200",
+        "kind": "function",
+        "name": "_isNum",
+        "size": 62,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 6,
+        "code": "_isNum(object) {\n      return typeof object == \"number\";\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "521874428": {
+        "id": "function/521874428",
+        "kind": "function",
+        "name": "length",
+        "size": 57,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$length(_) {\n      return this._contents.length;\n    }",
+        "type": "int Function()"
+      },
+      "522380745": {
+        "id": "function/522380745",
+        "kind": "function",
+        "name": "_canonicalRecipeOfFunctionParameters",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(_FunctionParameters)"
+      },
+      "522820503": {
+        "id": "function/522820503",
+        "kind": "function",
+        "name": "_setCanonicalRecipe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "s",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "void Function(Rti,String)"
+      },
+      "523878647": {
+        "id": "function/523878647",
+        "kind": "function",
+        "name": "_lookupDynamicRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "535892822": {
+        "id": "function/535892822",
+        "kind": "function",
+        "name": "isStrongTopType",
+        "size": 150,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 1,
+        "code": "isStrongTopType(t) {\n      var kind = t._kind;\n      return kind === 2 || kind === 3 || kind === 4 || kind === 5 || t === type$.nullable_Object;\n    }",
+        "type": "bool Function(Rti)"
+      },
+      "536333412": {
+        "id": "function/536333412",
+        "kind": "function",
+        "name": "_instanceTypeFromConstructorMiss",
+        "size": 326,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "instance",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "constructor",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_instanceTypeFromConstructorMiss(instance, $constructor) {\n      var effectiveConstructor = instance instanceof A.Closure ? instance.__proto__.__proto__.constructor : $constructor,\n        rti = A._Universe_findErasedType(init.typeUniverse, effectiveConstructor.name);\n      $constructor.$ccache = rti;\n      return rti;\n    }",
+        "type": "Rti Function(Object?,Object?)"
+      },
+      "539017937": {
+        "id": "function/539017937",
+        "kind": "function",
+        "name": "_errorName",
+        "size": 51,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"RangeError\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$_errorName() {\n      return \"RangeError\";\n    }",
+        "type": "String Function()"
+      },
+      "540949546": {
+        "id": "function/540949546",
+        "kind": "function",
+        "name": "flattenString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "str",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "String Function(String)"
+      },
+      "544746737": {
+        "id": "function/544746737",
+        "kind": "function",
+        "name": "throwConcurrentModificationError",
+        "size": 128,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "collection",
+            "type": "[subclass=JSArray]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "throwConcurrentModificationError(collection) {\n      throw A.wrapException(new A.ConcurrentModificationError(collection));\n    }",
+        "type": "dynamic Function(dynamic)"
+      },
+      "550544609": {
+        "id": "function/550544609",
+        "kind": "function",
+        "name": "toString",
+        "size": 51,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "toString$0(receiver) {\n      return receiver;\n    }",
+        "type": "String Function()"
+      },
+      "550912538": {
+        "id": "function/550912538",
+        "kind": "function",
+        "name": "_generalNullableAsCheckImplementation",
+        "size": 228,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_generalNullableAsCheckImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return object;\n      else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
+        "type": "Object? Function(Object?)"
+      },
+      "552658686": {
+        "id": "function/552658686",
+        "kind": "function",
+        "name": "_canonicalRecipeOfGenericFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "baseFunctionType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "bounds",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti,Object?)"
+      },
+      "556772480": {
+        "id": "function/556772480",
+        "kind": "function",
+        "name": "_isClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "559097830": {
+        "id": "function/559097830",
+        "kind": "function",
+        "name": "boolConversionCheck",
+        "size": 141,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "boolConversionCheck(value) {\n      if (value == null)\n        A.assertThrow(\"boolean expression must not be null\");\n      return value;\n    }",
+        "type": "bool Function(dynamic)"
+      },
+      "564449621": {
+        "id": "function/564449621",
+        "kind": "function",
+        "name": "_canonicalRecipeOfBinding",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "base",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti,Object?)"
+      },
+      "565013754": {
+        "id": "function/565013754",
+        "kind": "function",
+        "name": "toString",
+        "size": 42,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/351911148",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"null\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"null\";\n    }",
+        "type": "String Function()"
+      },
+      "566090952": {
+        "id": "function/566090952",
+        "kind": "function",
+        "name": "charCodeAt",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "i",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "int Function(String,int)"
+      },
+      "575664914": {
+        "id": "function/575664914",
+        "kind": "function",
+        "name": "_rtiToString",
+        "size": 1597,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "genericContext",
+            "type": "Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
+            "declaredType": "List<String>?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rtiToString(rti, genericContext) {\n      var s, questionArgument, argumentKind, $name, $arguments, t1, t2,\n        kind = rti._kind;\n      if (kind === 5)\n        return \"erased\";\n      if (kind === 2)\n        return \"dynamic\";\n      if (kind === 3)\n        return \"void\";\n      if (kind === 1)\n        return \"Never\";\n      if (kind === 4)\n        return \"any\";\n      if (kind === 6) {\n        s = A._rtiToString(rti._primary, genericContext);\n        return s;\n      }\n      if (kind === 7) {\n        questionArgument = rti._primary;\n        s = A._rtiToString(questionArgument, genericContext);\n        argumentKind = questionArgument._kind;\n        return J.$add$ns(argumentKind === 11 || argumentKind === 12 ? B.JSString_methods.$add(\"(\", s) + \")\" : s, \"?\");\n      }\n      if (kind === 8)\n        return \"FutureOr<\" + A.S(A._rtiToString(rti._primary, genericContext)) + \">\";\n      if (kind === 9) {\n        $name = A._unminifyOrTag(rti._primary);\n        $arguments = rti._rest;\n        return $arguments.length > 0 ? $name + (\"<\" + A._rtiArrayToString($arguments, genericContext) + \">\") : $name;\n      }\n      if (kind === 11)\n        return A._functionRtiToString(rti, genericContext, null);\n      if (kind === 12)\n        return A._functionRtiToString(rti._primary, genericContext, rti._rest);\n      if (kind === 13) {\n        genericContext.toString;\n        t1 = rti._primary;\n        t2 = genericContext.length;\n        t1 = t2 - 1 - t1;\n        if (!(t1 >= 0 && t1 < t2))\n          return A.ioore(genericContext, t1);\n        return genericContext[t1];\n      }\n      return \"?\";\n    }",
+        "type": "String Function(Rti,List<String>?)"
+      },
+      "578373084": {
+        "id": "function/578373084",
+        "kind": "function",
+        "name": "_asDoubleQ",
+        "size": 216,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "double?",
+        "inferredReturnType": "[null|subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asDoubleQ(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double?\"));\n    }",
+        "type": "double? Function(dynamic)"
+      },
+      "580865640": {
+        "id": "function/580865640",
+        "kind": "function",
+        "name": "iterableToFullString",
+        "size": 700,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/812154630",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "iterable",
+            "type": "[subclass=JSArray]",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "leftDelimiter",
+            "type": "Value([exact=JSString], value: \"[\")",
+            "declaredType": "String"
+          },
+          {
+            "name": "rightDelimiter",
+            "type": "Value([exact=JSString], value: \"]\")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "IterableBase_iterableToFullString(iterable, leftDelimiter, rightDelimiter) {\n      var buffer, t1;\n      if (A._isToStringVisiting(iterable))\n        return leftDelimiter + \"...\" + rightDelimiter;\n      buffer = new A.StringBuffer(leftDelimiter);\n      B.JSArray_methods.add$1($._toStringVisiting, iterable);\n      try {\n        t1 = buffer;\n        t1._contents = A.StringBuffer__writeAll(t1._contents, iterable, \", \");\n      } finally {\n        if (0 >= $._toStringVisiting.length)\n          return A.ioore($._toStringVisiting, -1);\n        $._toStringVisiting.pop();\n      }\n      buffer._contents += rightDelimiter;\n      t1 = buffer._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
+        "type": "String Function(Iterable<dynamic>,[String,String])"
+      },
+      "583427045": {
+        "id": "function/583427045",
+        "kind": "function",
+        "name": "_asBool",
+        "size": 199,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asBool(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool\"));\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "589675001": {
+        "id": "function/589675001",
+        "kind": "function",
+        "name": "isNullType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "589677414": {
+        "id": "function/589677414",
+        "kind": "function",
+        "name": "interceptorOf",
+        "size": 78,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[null|exact=BoundClosure]",
+            "declaredType": "BoundClosure"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "BoundClosure_interceptorOf(closure) {\n      return closure._interceptor;\n    }",
+        "type": "dynamic Function(BoundClosure)"
+      },
+      "592658352": {
+        "id": "function/592658352",
+        "kind": "function",
+        "name": "addErasedTypes",
+        "size": 105,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "types",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_addErasedTypes(universe, types) {\n      return A._Utils_objectAssign(universe.eT, types);\n    }",
+        "type": "void Function(Object?,Object?)"
+      },
+      "598215859": {
+        "id": "function/598215859",
+        "kind": "function",
+        "name": "_generalIsTestImplementation",
+        "size": 241,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_generalIsTestImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      return A._isSubtype(init.typeUniverse, A.instanceOrFunctionType(object, testRti), null, testRti, null);\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "598784217": {
+        "id": "function/598784217",
+        "kind": "function",
+        "name": "_setPrecomputed1",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "precomputed",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "599340356": {
+        "id": "function/599340356",
+        "kind": "function",
+        "name": "_objectTypeNameNewRti",
+        "size": 867,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Primitives__objectTypeNameNewRti(object) {\n      var dispatchName, t1, $constructor, constructorName;\n      if (object instanceof A.Object)\n        return A._rtiToString(A.instanceType(object), null);\n      if (J.getInterceptor$(object) === B.Interceptor_methods || false) {\n        dispatchName = B.C_JS_CONST(object);\n        t1 = dispatchName !== \"Object\" && dispatchName !== \"\";\n        if (t1)\n          return dispatchName;\n        $constructor = object.constructor;\n        if (typeof $constructor == \"function\") {\n          constructorName = $constructor.name;\n          if (typeof constructorName == \"string\")\n            t1 = constructorName !== \"Object\" && constructorName !== \"\";\n          else\n            t1 = false;\n          if (t1)\n            return constructorName;\n        }\n      }\n      return A._rtiToString(A.instanceType(object), null);\n    }",
+        "type": "String Function(Object)"
+      },
+      "603464342": {
+        "id": "function/603464342",
+        "kind": "function",
+        "name": "_isInterfaceSubtype",
+        "size": 919,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "s",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "sEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "tEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isInterfaceSubtype(universe, s, sEnv, t, tEnv) {\n      var rule, recipes, $length, supertypeArgs, i, t1, t2,\n        sName = s._primary,\n        tName = t._primary;\n      for (; sName !== tName;) {\n        rule = universe.tR[sName];\n        if (rule == null)\n          return false;\n        if (typeof rule == \"string\") {\n          sName = rule;\n          continue;\n        }\n        recipes = rule[tName];\n        if (recipes == null)\n          return false;\n        $length = recipes.length;\n        supertypeArgs = $length > 0 ? new Array($length) : init.typeUniverse.sEA;\n        for (i = 0; i < $length; ++i)\n          supertypeArgs[i] = A._Universe_evalInEnvironment(universe, s, recipes[i]);\n        return A._areArgumentsSubtypes(universe, supertypeArgs, null, sEnv, t._rest, tEnv);\n      }\n      t1 = s._rest;\n      t2 = t._rest;\n      return A._areArgumentsSubtypes(universe, t1, null, sEnv, t2, tEnv);\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+      },
+      "603807818": {
+        "id": "function/603807818",
+        "kind": "function",
+        "name": "_rtiBind",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "types",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Rti,Rti)"
       },
       "606513838": {
         "id": "function/606513838",
         "kind": "function",
         "name": "printToConsole",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/689380639",
         "children": [],
         "modifiers": {
           "static": false,
           "const": false,
           "factory": false,
-          "external": true
+          "external": false
         },
-        "returnType": null,
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [
           {
@@ -538,18 +6970,2540 @@
             "declaredType": "String"
           }
         ],
-        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "(String) -> void",
-        "measurements": null
+        "code": "",
+        "type": "void Function(String)"
+      },
+      "606572177": {
+        "id": "function/606572177",
+        "kind": "function",
+        "name": "ArgumentError.value",
+        "size": 113,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ArgumentError]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "Value([null|exact=JSString], value: \"index\")",
+            "declaredType": "String?"
+          },
+          {
+            "name": "message",
+            "type": "[null|exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "ArgumentError$value(value, $name, message) {\n      return new A.ArgumentError(true, value, $name, message);\n    }",
+        "type": "dynamic Function(dynamic,[String?,dynamic])"
+      },
+      "609214736": {
+        "id": "function/609214736",
+        "kind": "function",
+        "name": "handleNamedGroup",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
+      },
+      "614790632": {
+        "id": "function/614790632",
+        "kind": "function",
+        "name": "isSubtype",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "s",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(Object?,Rti,Rti)"
+      },
+      "616327902": {
+        "id": "function/616327902",
+        "kind": "function",
+        "name": "_getQuestionFromStar",
+        "size": 212,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Rti__getQuestionFromStar(universe, rti) {\n      var question = rti._precomputed1;\n      return question == null ? rti._precomputed1 = A._Universe__lookupQuestionRti(universe, rti._primary, true) : question;\n    }",
+        "type": "Rti Function(Object?,Rti)"
+      },
+      "619610668": {
+        "id": "function/619610668",
+        "kind": "function",
+        "name": "_lookupNeverRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "620005669": {
+        "id": "function/620005669",
+        "kind": "function",
+        "name": "_errorExplanation",
+        "size": 387,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$_errorExplanation() {\n      var t1,\n        invalidValue = A._asIntS(this.invalidValue);\n      if (typeof invalidValue !== \"number\")\n        return invalidValue.$lt();\n      if (invalidValue < 0)\n        return \": index must not be negative\";\n      t1 = this.length;\n      if (t1 === 0)\n        return \": no indices are valid\";\n      return \": index should be less than \" + t1;\n    }",
+        "type": "String Function()"
+      },
+      "620456164": {
+        "id": "function/620456164",
+        "kind": "function",
+        "name": "_isSubtype",
+        "size": 3001,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "sEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "tEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isSubtype(universe, s, sEnv, t, tEnv) {\n      var t1, sKind, leftTypeVariable, tKind, sBounds, tBounds, sLength, i, sBound, tBound;\n      if (s === t)\n        return true;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = t === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      sKind = s._kind;\n      if (sKind === 4)\n        return true;\n      if (A.isStrongTopType(s))\n        return false;\n      if (s._kind !== 1)\n        t1 = s === type$.Null || s === type$.JSNull;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      leftTypeVariable = sKind === 13;\n      if (leftTypeVariable)\n        if (A._isSubtype(universe, sEnv[s._primary], sEnv, t, tEnv))\n          return true;\n      tKind = t._kind;\n      if (sKind === 6)\n        return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n      if (tKind === 6) {\n        t1 = t._primary;\n        return A._isSubtype(universe, s, sEnv, t1, tEnv);\n      }\n      if (sKind === 8) {\n        if (!A._isSubtype(universe, s._primary, sEnv, t, tEnv))\n          return false;\n        return A._isSubtype(universe, A.Rti__getFutureFromFutureOr(universe, s), sEnv, t, tEnv);\n      }\n      if (sKind === 7) {\n        t1 = A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n        return t1;\n      }\n      if (tKind === 8) {\n        if (A._isSubtype(universe, s, sEnv, t._primary, tEnv))\n          return true;\n        return A._isSubtype(universe, s, sEnv, A.Rti__getFutureFromFutureOr(universe, t), tEnv);\n      }\n      if (tKind === 7) {\n        t1 = A._isSubtype(universe, s, sEnv, t._primary, tEnv);\n        return t1;\n      }\n      if (leftTypeVariable)\n        return false;\n      t1 = sKind !== 11;\n      if ((!t1 || sKind === 12) && t === type$.Function)\n        return true;\n      if (tKind === 12) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (sKind !== 12)\n          return false;\n        sBounds = s._rest;\n        tBounds = t._rest;\n        sLength = sBounds.length;\n        if (sLength !== tBounds.length)\n          return false;\n        sEnv = sEnv == null ? sBounds : sBounds.concat(sEnv);\n        tEnv = tEnv == null ? tBounds : tBounds.concat(tEnv);\n        for (i = 0; i < sLength; ++i) {\n          sBound = sBounds[i];\n          tBound = tBounds[i];\n          if (!A._isSubtype(universe, sBound, sEnv, tBound, tEnv) || !A._isSubtype(universe, tBound, tEnv, sBound, sEnv))\n            return false;\n        }\n        return A._isFunctionSubtype(universe, s._primary, sEnv, t._primary, tEnv);\n      }\n      if (tKind === 11) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (t1)\n          return false;\n        return A._isFunctionSubtype(universe, s, sEnv, t, tEnv);\n      }\n      if (sKind === 9) {\n        if (tKind !== 9)\n          return false;\n        return A._isInterfaceSubtype(universe, s, sEnv, t, tEnv);\n      }\n      return false;\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+      },
+      "629344964": {
+        "id": "function/629344964",
+        "kind": "function",
+        "name": "isNum",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "631550768": {
+        "id": "function/631550768",
+        "kind": "function",
+        "name": "_asBoolQ",
+        "size": 250,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool?",
+        "inferredReturnType": "[null|exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asBoolQ(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool?\"));\n    }",
+        "type": "bool? Function(dynamic)"
+      },
+      "631685979": {
+        "id": "function/631685979",
+        "kind": "function",
+        "name": "_canonicalRecipeJoin",
+        "size": 240,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_Universe__canonicalRecipeJoin($arguments) {\n      var s, sep, i,\n        $length = $arguments.length;\n      for (s = \"\", sep = \"\", i = 0; i < $length; ++i, sep = \",\")\n        s += sep + $arguments[i]._canonicalRecipe;\n      return s;\n    }",
+        "type": "String Function(Object?)"
+      },
+      "632397862": {
+        "id": "function/632397862",
+        "kind": "function",
+        "name": "_asDouble",
+        "size": 165,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "double",
+        "inferredReturnType": "[subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asDouble(object) {\n      if (typeof object == \"number\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double\"));\n    }",
+        "type": "double Function(Object?)"
+      },
+      "637526703": {
+        "id": "function/637526703",
+        "kind": "function",
+        "name": "_canonicalRecipeJoinNamed",
+        "size": 388,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "arguments",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_Universe__canonicalRecipeJoinNamed($arguments) {\n      var s, sep, i, t1, nameSep, s0,\n        $length = $arguments.length;\n      for (s = \"\", sep = \"\", i = 0; i < $length; i += 3, sep = \",\") {\n        t1 = $arguments[i];\n        nameSep = $arguments[i + 1] ? \"!\" : \":\";\n        s0 = $arguments[i + 2]._canonicalRecipe;\n        s += sep + t1 + nameSep + s0;\n      }\n      return s;\n    }",
+        "type": "String Function(Object?)"
+      },
+      "637790089": {
+        "id": "function/637790089",
+        "kind": "function",
+        "name": "_createQuestionRti",
+        "size": 1113,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__createQuestionRti(universe, baseType, key, normalize) {\n      var baseKind, t1, starArgument, rti;\n      if (normalize) {\n        baseKind = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.Null || baseType === type$.JSNull))\n            if (baseKind !== 7)\n              t1 = baseKind === 8 && A.isNullable(baseType._primary);\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n        if (t1)\n          return baseType;\n        else if (baseKind === 1 || baseType === type$.legacy_Never)\n          return type$.Null;\n        else if (baseKind === 6) {\n          starArgument = baseType._primary;\n          if (starArgument._kind === 8 && A.isNullable(starArgument._primary))\n            return starArgument;\n          else\n            return A.Rti__getQuestionFromStar(universe, baseType);\n        }\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 7;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,String,bool)"
+      },
+      "638672010": {
+        "id": "function/638672010",
+        "kind": "function",
+        "name": "isNullableObjectType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "640394917": {
+        "id": "function/640394917",
+        "kind": "function",
+        "name": "_generalNullableIsTestImplementation",
+        "size": 139,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_generalNullableIsTestImplementation(object) {\n      if (object == null)\n        return true;\n      return this._primary._is(object);\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "656417734": {
+        "id": "function/656417734",
+        "kind": "function",
+        "name": "addRules",
+        "size": 99,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rules",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_addRules(universe, rules) {\n      return A._Utils_objectAssign(universe.tR, rules);\n    }",
+        "type": "void Function(Object?,Object?)"
+      },
+      "658851039": {
+        "id": "function/658851039",
+        "kind": "function",
+        "name": "toString",
+        "size": 169,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/56472591",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      var t1 = this.message;\n      if (t1 != null)\n        return \"Assertion failed: \" + A.Error_safeToString(t1);\n      return \"Assertion failed\";\n    }",
+        "type": "String Function()"
+      },
+      "659844135": {
+        "id": "function/659844135",
+        "kind": "function",
+        "name": "_computeFieldNamed",
+        "size": 508,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "fieldName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "BoundClosure__computeFieldNamed(fieldName) {\n      var names, i, $name,\n        template = new A.BoundClosure(\"receiver\", \"interceptor\"),\n        t1 = Object.getOwnPropertyNames(template);\n      t1.fixed$length = Array;\n      names = t1;\n      for (t1 = names.length, i = 0; i < t1; ++i) {\n        $name = names[i];\n        if (template[$name] === fieldName)\n          return $name;\n      }\n      throw A.wrapException(new A.ArgumentError(false, null, null, \"Field name \" + fieldName + \" not found.\"));\n    }",
+        "type": "String Function(String)"
+      },
+      "666277254": {
+        "id": "function/666277254",
+        "kind": "function",
+        "name": "_isFunctionSubtype",
+        "size": 2694,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "s",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "sEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "tEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isFunctionSubtype(universe, s, sEnv, t, tEnv) {\n      var sParameters, tParameters, sRequiredPositional, tRequiredPositional, sRequiredPositionalLength, tRequiredPositionalLength, requiredPositionalDelta, sOptionalPositional, tOptionalPositional, sOptionalPositionalLength, tOptionalPositionalLength, i, t1, sNamed, tNamed, sNamedLength, tNamedLength, sIndex, tIndex, tName, sName;\n      if (!A._isSubtype(universe, s._primary, sEnv, t._primary, tEnv))\n        return false;\n      sParameters = s._rest;\n      tParameters = t._rest;\n      sRequiredPositional = sParameters._requiredPositional;\n      tRequiredPositional = tParameters._requiredPositional;\n      sRequiredPositionalLength = sRequiredPositional.length;\n      tRequiredPositionalLength = tRequiredPositional.length;\n      if (sRequiredPositionalLength > tRequiredPositionalLength)\n        return false;\n      requiredPositionalDelta = tRequiredPositionalLength - sRequiredPositionalLength;\n      sOptionalPositional = sParameters._optionalPositional;\n      tOptionalPositional = tParameters._optionalPositional;\n      sOptionalPositionalLength = sOptionalPositional.length;\n      tOptionalPositionalLength = tOptionalPositional.length;\n      if (sRequiredPositionalLength + sOptionalPositionalLength < tRequiredPositionalLength + tOptionalPositionalLength)\n        return false;\n      for (i = 0; i < sRequiredPositionalLength; ++i) {\n        t1 = sRequiredPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < requiredPositionalDelta; ++i) {\n        t1 = sOptionalPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[sRequiredPositionalLength + i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < tOptionalPositionalLength; ++i) {\n        t1 = sOptionalPositional[requiredPositionalDelta + i];\n        if (!A._isSubtype(universe, tOptionalPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      sNamed = sParameters._named;\n      tNamed = tParameters._named;\n      sNamedLength = sNamed.length;\n      tNamedLength = tNamed.length;\n      for (sIndex = 0, tIndex = 0; tIndex < tNamedLength; tIndex += 3) {\n        tName = tNamed[tIndex];\n        for (; true;) {\n          if (sIndex >= sNamedLength)\n            return false;\n          sName = sNamed[sIndex];\n          sIndex += 3;\n          if (tName < sName)\n            return false;\n          if (sName < tName)\n            continue;\n          t1 = sNamed[sIndex - 1];\n          if (!A._isSubtype(universe, tNamed[tIndex + 2], tEnv, t1, sEnv))\n            return false;\n          break;\n        }\n      }\n      return true;\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+      },
+      "667416185": {
+        "id": "function/667416185",
+        "kind": "function",
+        "name": "_substituteFunctionParameters",
+        "size": 1020,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_FunctionParameters",
+        "inferredReturnType": "[exact=_FunctionParameters]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "functionParameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "depth",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_substituteFunctionParameters(universe, functionParameters, typeArguments, depth) {\n      var result,\n        requiredPositional = functionParameters._requiredPositional,\n        substitutedRequiredPositional = A._substituteArray(universe, requiredPositional, typeArguments, depth),\n        optionalPositional = functionParameters._optionalPositional,\n        substitutedOptionalPositional = A._substituteArray(universe, optionalPositional, typeArguments, depth),\n        named = functionParameters._named,\n        substitutedNamed = A._substituteNamed(universe, named, typeArguments, depth);\n      if (substitutedRequiredPositional === requiredPositional && substitutedOptionalPositional === optionalPositional && substitutedNamed === named)\n        return functionParameters;\n      result = new A._FunctionParameters();\n      result._requiredPositional = substitutedRequiredPositional;\n      result._optionalPositional = substitutedOptionalPositional;\n      result._named = substitutedNamed;\n      return result;\n    }",
+        "type": "_FunctionParameters Function(Object?,_FunctionParameters,Object?,int)"
+      },
+      "668300184": {
+        "id": "function/668300184",
+        "kind": "function",
+        "name": "closureFromTearOff",
+        "size": 86,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "closureFromTearOff(parameters) {\n      return A.Closure_fromTearOff(parameters);\n    }",
+        "type": "dynamic Function(dynamic)"
+      },
+      "671381451": {
+        "id": "function/671381451",
+        "kind": "function",
+        "name": "_installRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "Rti Function(Object?,String,Rti)"
+      },
+      "675189669": {
+        "id": "function/675189669",
+        "kind": "function",
+        "name": "allocate",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "Rti Function()"
+      },
+      "679532174": {
+        "id": "function/679532174",
+        "kind": "function",
+        "name": "argumentErrorValue",
+        "size": 94,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "ArgumentError",
+        "inferredReturnType": "[exact=ArgumentError]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "argumentErrorValue(object) {\n      return new A.ArgumentError(true, object, null, null);\n    }",
+        "type": "ArgumentError Function(dynamic)"
+      },
+      "680877684": {
+        "id": "function/680877684",
+        "kind": "function",
+        "name": "_setArrayType",
+        "size": 90,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "target",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_setArrayType(target, rti) {\n      target[init.arrayRti] = rti;\n      return target;\n    }",
+        "type": "Object? Function(Object?,Object?)"
+      },
+      "681643547": {
+        "id": "function/681643547",
+        "kind": "function",
+        "name": "CyclicInitializationError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/93352366",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=CyclicInitializationError]",
+        "parameters": [
+          {
+            "name": "variableName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function([String?])"
+      },
+      "685278809": {
+        "id": "function/685278809",
+        "kind": "function",
+        "name": "toTypesNamed",
+        "size": 212,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "items",
+            "type": "[subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_toTypesNamed(universe, environment, items) {\n      var i,\n        $length = items.length;\n      for (i = 2; i < $length; i += 3)\n        items[i] = A._Parser_toType(universe, environment, items[i]);\n    }",
+        "type": "void Function(Object?,Rti,Object?)"
+      },
+      "689230944": {
+        "id": "function/689230944",
+        "kind": "function",
+        "name": "_lookupTerminalRti",
+        "size": 360,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "kind",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupTerminalRti(universe, kind, key) {\n      var rti, t1,\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = kind;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,int,String)"
+      },
+      "692531098": {
+        "id": "function/692531098",
+        "kind": "function",
+        "name": "_AssertionError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/155954474",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_AssertionError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(Object)"
+      },
+      "695455779": {
+        "id": "function/695455779",
+        "kind": "function",
+        "name": "_canonicalRecipeOfNever",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
+      },
+      "697367085": {
+        "id": "function/697367085",
+        "kind": "function",
+        "name": "_isUnionOfFunctionType",
+        "size": 217,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "Rti__isUnionOfFunctionType(rti) {\n      var kind = rti._kind;\n      if (kind === 6 || kind === 7 || kind === 8)\n        return A.Rti__isUnionOfFunctionType(rti._primary);\n      return kind === 11 || kind === 12;\n    }",
+        "type": "bool Function(Rti)"
+      },
+      "701409225": {
+        "id": "function/701409225",
+        "kind": "function",
+        "name": "ConcurrentModificationError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/36312556",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ConcurrentModificationError]",
+        "parameters": [
+          {
+            "name": "modifiedObject",
+            "type": "[subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function([Object?])"
+      },
+      "702246006": {
+        "id": "function/702246006",
+        "kind": "function",
+        "name": "_theUniverse",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "Object? Function()"
+      },
+      "709915292": {
+        "id": "function/709915292",
+        "kind": "function",
+        "name": "_canonicalRecipeOfInterface",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "name",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(String,Object?)"
+      },
+      "710793957": {
+        "id": "function/710793957",
+        "kind": "function",
+        "name": "_setEvalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "712382592": {
+        "id": "function/712382592",
+        "kind": "function",
+        "name": "stack",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object Function(Object?)"
+      },
+      "713151216": {
+        "id": "function/713151216",
+        "kind": "function",
+        "name": "isObjectType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 10,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "714600619": {
+        "id": "function/714600619",
+        "kind": "function",
+        "name": "diagnoseIndexError",
+        "size": 408,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Error",
+        "inferredReturnType": "[subclass=ArgumentError]",
+        "parameters": [
+          {
+            "name": "indexable",
+            "type": "[subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "index",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "diagnoseIndexError(indexable, index) {\n      var $length, _s5_ = \"index\";\n      if (!A._isInt(index))\n        return new A.ArgumentError(true, index, _s5_, null);\n      $length = J.get$length$as(indexable);\n      if (index < 0 || index >= $length)\n        return new A.IndexError($length, true, index, _s5_, \"Index out of range\");\n      return new A.RangeError(true, index, _s5_, \"Value not in range\");\n    }",
+        "type": "Error Function(dynamic,dynamic)"
+      },
+      "716694085": {
+        "id": "function/716694085",
+        "kind": "function",
+        "name": "isArray",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "717852932": {
+        "id": "function/717852932",
+        "kind": "function",
+        "name": "_errorExplanation",
+        "size": 48,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$_errorExplanation() {\n      return \"\";\n    }",
+        "type": "String Function()"
+      },
+      "726979110": {
+        "id": "function/726979110",
+        "kind": "function",
+        "name": "+",
+        "size": 169,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "$add(receiver, other) {\n      if (typeof other != \"string\")\n        throw A.wrapException(A.ArgumentError$value(other, null, null));\n      return receiver + other;\n    }",
+        "type": "String Function(String)"
+      },
+      "729126945": {
+        "id": "function/729126945",
+        "kind": "function",
+        "name": "_recipeJoin4",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "Value([exact=JSString], value: \"<\")",
+            "declaredType": "String"
+          },
+          {
+            "name": "s3",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s4",
+            "type": "Value([exact=JSString], value: \">\")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "String Function(String,String,String,String)"
+      },
+      "730595126": {
+        "id": "function/730595126",
+        "kind": "function",
+        "name": "toString",
+        "size": 52,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/595024907",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"Throw of null.\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"Throw of null.\";\n    }",
+        "type": "String Function()"
+      },
+      "744088497": {
+        "id": "function/744088497",
+        "kind": "function",
+        "name": "collectNamed",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?,Object?)"
+      },
+      "745680035": {
+        "id": "function/745680035",
+        "kind": "function",
+        "name": "unmangleGlobalNameIfPreservedAnyways",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/527944179",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "name",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "String? Function(String)"
+      },
+      "745741399": {
+        "id": "function/745741399",
+        "kind": "function",
+        "name": "toString",
+        "size": 130,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/36312556",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"Concurrent modification during iteration: \" + A.Error_safeToString(this.modifiedObject) + \".\";\n    }",
+        "type": "String Function()"
+      },
+      "746055337": {
+        "id": "function/746055337",
+        "kind": "function",
+        "name": "isIdentifierStart",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1013977545",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "ch",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(int)"
+      },
+      "747174278": {
+        "id": "function/747174278",
+        "kind": "function",
+        "name": "create",
+        "size": 146,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_Parser_create(universe, environment, recipe, normalize) {\n      return {u: universe, e: environment, r: recipe, s: [], p: 0, n: normalize};\n    }",
+        "type": "Object Function(Object?,Object?,String,bool)"
+      },
+      "747795707": {
+        "id": "function/747795707",
+        "kind": "function",
+        "name": "arraySetAt",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "i",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "value",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 7,
+        "code": "",
+        "type": "void Function(Object?,int,Object?)"
+      },
+      "748762392": {
+        "id": "function/748762392",
+        "kind": "function",
+        "name": "_createTerminalRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "kind",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,int,String)"
+      },
+      "750091346": {
+        "id": "function/750091346",
+        "kind": "function",
+        "name": "_canonicalRecipeOfFutureOr",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti)"
+      },
+      "753032370": {
+        "id": "function/753032370",
+        "kind": "function",
+        "name": "_getOptionalPositional",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+      },
+      "762030080": {
+        "id": "function/762030080",
+        "kind": "function",
+        "name": "receiverFieldName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes static)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "String Function()"
+      },
+      "764092534": {
+        "id": "function/764092534",
+        "kind": "function",
+        "name": "newArrayOrEmpty",
+        "size": 110,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "length",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "_Utils_newArrayOrEmpty($length) {\n      return $length > 0 ? new Array($length) : init.typeUniverse.sEA;\n    }",
+        "type": "Object? Function(int)"
+      },
+      "765963979": {
+        "id": "function/765963979",
+        "kind": "function",
+        "name": "evalInEnvironment",
+        "size": 417,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_evalInEnvironment(universe, environment, recipe) {\n      var probe, rti,\n        cache = environment._evalCache;\n      if (cache == null)\n        cache = environment._evalCache = new Map();\n      probe = cache.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, environment, recipe, true));\n      cache.set(recipe, rti);\n      return rti;\n    }",
+        "type": "Rti Function(Object?,Rti,String)"
+      },
+      "773528822": {
+        "id": "function/773528822",
+        "kind": "function",
+        "name": "isEmpty",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function()"
+      },
+      "777322353": {
+        "id": "function/777322353",
+        "kind": "function",
+        "name": "_isObject",
+        "size": 54,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_isObject(object) {\n      return object != null;\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "778541068": {
+        "id": "function/778541068",
+        "kind": "function",
+        "name": "_isToStringVisiting",
+        "size": 196,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[subclass=JSArray]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_isToStringVisiting(o) {\n      var t1, i;\n      for (t1 = $._toStringVisiting.length, i = 0; i < t1; ++i)\n        if (o === $._toStringVisiting[i])\n          return true;\n      return false;\n    }",
+        "type": "bool Function(Object)"
+      },
+      "781422565": {
+        "id": "function/781422565",
+        "kind": "function",
+        "name": "_getFunctionParameters",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_FunctionParameters",
+        "inferredReturnType": "[exact=_FunctionParameters]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "_FunctionParameters Function(Rti)"
+      },
+      "788412943": {
+        "id": "function/788412943",
+        "kind": "function",
+        "name": "throwCyclicInit",
+        "size": 109,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "staticName",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "throwCyclicInit(staticName) {\n      throw A.wrapException(new A.CyclicInitializationError(staticName));\n    }",
+        "type": "void Function(String)"
+      },
+      "789545114": {
+        "id": "function/789545114",
+        "kind": "function",
+        "name": "_writeAll",
+        "size": 560,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "objects",
+            "type": "[subclass=JSArray]",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "separator",
+            "type": "Value([exact=JSString], value: \", \")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "StringBuffer__writeAll(string, objects, separator) {\n      var iterator = new J.ArrayIterator(objects, objects.length, A._arrayInstanceType(objects)._eval$1(\"ArrayIterator<1>\"));\n      if (!iterator.moveNext$0())\n        return string;\n      if (separator.length === 0) {\n        do\n          string += A.S(iterator._current);\n        while (iterator.moveNext$0());\n      } else {\n        string += A.S(iterator._current);\n        for (; iterator.moveNext$0();)\n          string = string + separator + A.S(iterator._current);\n      }\n      return string;\n    }",
+        "type": "String Function(String,Iterable<dynamic>,String)"
+      },
+      "791619288": {
+        "id": "function/791619288",
+        "kind": "function",
+        "name": "findErasedType",
+        "size": 686,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "cls",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_findErasedType(universe, cls) {\n      var $length, erased, $arguments, i, $interface,\n        metadata = universe.eT,\n        probe = metadata[cls];\n      if (probe == null)\n        return A._Universe_eval(universe, cls, false);\n      else if (typeof probe == \"number\") {\n        $length = probe;\n        erased = A._Universe__lookupTerminalRti(universe, 5, \"#\");\n        $arguments = A._Utils_newArrayOrEmpty($length);\n        for (i = 0; i < $length; ++i)\n          $arguments[i] = erased;\n        $interface = A._Universe__lookupInterfaceRti(universe, cls, $arguments);\n        metadata[cls] = $interface;\n        return $interface;\n      } else\n        return probe;\n    }",
+        "type": "Rti Function(Object?,String)"
+      },
+      "791758355": {
+        "id": "function/791758355",
+        "kind": "function",
+        "name": "_eval",
+        "size": 100,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "recipe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_eval$1(recipe) {\n      return A._Universe_evalInEnvironment(init.typeUniverse, this, recipe);\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "797484809": {
+        "id": "function/797484809",
+        "kind": "function",
+        "name": "_setAsCheckFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "fn",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "801619570": {
+        "id": "function/801619570",
+        "kind": "function",
+        "name": "_lookupBindingRti",
+        "size": 761,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "base",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupBindingRti(universe, base, $arguments) {\n      var newBase, newArguments, key, probe, rti, t1;\n      if (base._kind === 10) {\n        newBase = base._primary;\n        newArguments = base._rest.concat($arguments);\n      } else {\n        newArguments = $arguments;\n        newBase = base;\n      }\n      key = newBase._canonicalRecipe + (\";<\" + A._Universe__canonicalRecipeJoin(newArguments) + \">\");\n      probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 10;\n      rti._primary = newBase;\n      rti._rest = newArguments;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,Object?)"
+      },
+      "806059380": {
+        "id": "function/806059380",
+        "kind": "function",
+        "name": "_getEvalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "807434881": {
+        "id": "function/807434881",
+        "kind": "function",
+        "name": "_computeSignatureFunctionNewRti",
+        "size": 596,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "functionType",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "isStatic",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "isIntercepted",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure__computeSignatureFunctionNewRti(functionType, isStatic, isIntercepted) {\n      if (typeof functionType == \"number\")\n        return functionType;\n      if (typeof functionType == \"string\") {\n        if (A.boolConversionCheck(isStatic))\n          throw A.wrapException(\"Cannot compute signature for static tearoff.\");\n        return function(recipe, evalOnReceiver) {\n          return function() {\n            return evalOnReceiver(this, recipe);\n          };\n        }(functionType, A.BoundClosure_evalRecipe);\n      }\n      throw A.wrapException(\"Error in functionType of tearoff\");\n    }",
+        "type": "dynamic Function(Object,bool,bool)"
+      },
+      "807601340": {
+        "id": "function/807601340",
+        "kind": "function",
+        "name": "_getNamed",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+      },
+      "820169204": {
+        "id": "function/820169204",
+        "kind": "function",
+        "name": "_canonicalRecipeOfDynamic",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"@\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
+      },
+      "820496795": {
+        "id": "function/820496795",
+        "kind": "function",
+        "name": "_nullIs",
+        "size": 509,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "_nullIs(testRti) {\n      var t1,\n        kind = testRti._kind;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          if (!(testRti === type$.legacy_Never))\n            if (kind !== 7)\n              t1 = kind === 8 && A._nullIs(testRti._primary) || testRti === type$.Null || testRti === type$.JSNull;\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
+        "type": "bool Function(Rti)"
+      },
+      "821928955": {
+        "id": "function/821928955",
+        "kind": "function",
+        "name": "handleDigit",
+        "size": 322,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [
+          {
+            "name": "i",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "digit",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "source",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_handleDigit(i, digit, source, stack) {\n      var t1, ch,\n        value = digit - 48;\n      for (t1 = source.length; i < t1; ++i) {\n        ch = source.charCodeAt(i);\n        if (!(ch >= 48 && ch <= 57))\n          break;\n        value = value * 10 + (ch - 48);\n      }\n      stack.push(value);\n      return i;\n    }",
+        "type": "int Function(int,int,String,Object?)"
+      },
+      "822673760": {
+        "id": "function/822673760",
+        "kind": "function",
+        "name": "objectKeys",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?)"
+      },
+      "831592736": {
+        "id": "function/831592736",
+        "kind": "function",
+        "name": "_isDartObject",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "832692823": {
+        "id": "function/832692823",
+        "kind": "function",
+        "name": "asInt",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 42,
+        "code": "",
+        "type": "int Function(Object?)"
+      },
+      "834015338": {
+        "id": "function/834015338",
+        "kind": "function",
+        "name": "bind",
+        "size": 547,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "argumentsRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_bind(universe, environment, argumentsRti) {\n      var argumentsRecipe, probe, rti,\n        cache = environment._bindCache;\n      if (cache == null)\n        cache = environment._bindCache = new Map();\n      argumentsRecipe = argumentsRti._canonicalRecipe;\n      probe = cache.get(argumentsRecipe);\n      if (probe != null)\n        return probe;\n      rti = A._Universe__lookupBindingRti(universe, environment, argumentsRti._kind === 10 ? argumentsRti._rest : [argumentsRti]);\n      cache.set(argumentsRecipe, rti);\n      return rti;\n    }",
+        "type": "Rti Function(Object?,Rti,Rti)"
+      },
+      "841192189": {
+        "id": "function/841192189",
+        "kind": "function",
+        "name": "RuntimeError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/866150578",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=RuntimeError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "Value([exact=JSString], value: \"Intercepted function with no arguments.\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(dynamic)"
+      },
+      "842507496": {
+        "id": "function/842507496",
+        "kind": "function",
+        "name": "toString",
+        "size": 98,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/43993131",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      var t1 = \"LateInitializationError: \" + this._message;\n      return t1;\n    }",
+        "type": "String Function()"
+      },
+      "843997665": {
+        "id": "function/843997665",
+        "kind": "function",
+        "name": "writeAll",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "objects",
+            "type": "[subclass=JSArray]",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "separator",
+            "type": "Value([exact=JSString], value: \", \")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Iterable<dynamic>,[String])"
+      },
+      "848267879": {
+        "id": "function/848267879",
+        "kind": "function",
+        "name": "toString",
+        "size": 67,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/866150578",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"RuntimeError: \" + this.message;\n    }",
+        "type": "String Function()"
+      },
+      "848873059": {
+        "id": "function/848873059",
+        "kind": "function",
+        "name": "isLegacyObjectType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 7,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "852326327": {
+        "id": "function/852326327",
+        "kind": "function",
+        "name": "arrayAt",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "i",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 44,
+        "code": "",
+        "type": "Object? Function(Object?,int)"
+      },
+      "852359021": {
+        "id": "function/852359021",
+        "kind": "function",
+        "name": "substring",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "start",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "end",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(String,int,int)"
       },
       "864228238": {
         "id": "function/864228238",
         "kind": "function",
         "name": "printString",
-        "size": 460,
-        "outputUnit": "outputUnit/987444055",
+        "size": 450,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/238986171",
         "children": [],
         "modifiers": {
@@ -558,7 +9512,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": null,
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [
           {
@@ -567,11 +9521,2403 @@
             "declaredType": "String"
           }
         ],
-        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "printString: function(string) {\n  if (typeof dartPrint == \"function\") {\n    dartPrint(string);\n    return;\n  }\n  if (typeof console == \"object\" && typeof console.log != \"undefined\") {\n    console.log(string);\n    return;\n  }\n  if (typeof window == \"object\")\n    return;\n  if (typeof print == \"function\") {\n    print(string);\n    return;\n  }\n  throw \"Unable to print message: \" + String(string);\n}\n",
-        "type": "(String) -> void",
-        "measurements": null
+        "code": "printString(string) {\n      if (typeof dartPrint == \"function\") {\n        dartPrint(string);\n        return;\n      }\n      if (typeof console == \"object\" && typeof console.log != \"undefined\") {\n        console.log(string);\n        return;\n      }\n      if (typeof window == \"object\")\n        return;\n      if (typeof print == \"function\") {\n        print(string);\n        return;\n      }\n      throw \"Unable to print message: \" + String(string);\n    }",
+        "type": "void Function(String)"
+      },
+      "864812824": {
+        "id": "function/864812824",
+        "kind": "function",
+        "name": "_lookupGenericFunctionRti",
+        "size": 446,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseFunctionType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "bounds",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupGenericFunctionRti(universe, baseFunctionType, bounds, normalize) {\n      var t1,\n        key = baseFunctionType._canonicalRecipe + (\"<\" + A._Universe__canonicalRecipeJoin(bounds) + \">\"),\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,Object?,bool)"
+      },
+      "864835321": {
+        "id": "function/864835321",
+        "kind": "function",
+        "name": "_asString",
+        "size": 165,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asString(object) {\n      if (typeof object == \"string\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String\"));\n    }",
+        "type": "String Function(Object?)"
+      },
+      "864971496": {
+        "id": "function/864971496",
+        "kind": "function",
+        "name": "_setIsTestFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "fn",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "865184799": {
+        "id": "function/865184799",
+        "kind": "function",
+        "name": "_generalAsCheckImplementation",
+        "size": 220,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_generalAsCheckImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return object;\n      else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
+        "type": "Object? Function(Object?)"
+      },
+      "866251913": {
+        "id": "function/866251913",
+        "kind": "function",
+        "name": "_canonicalRecipeOfErased",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"#\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "String Function()"
+      },
+      "869103502": {
+        "id": "function/869103502",
+        "kind": "function",
+        "name": "add",
+        "size": 211,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "Union([exact=JSString], [subclass=JSArray])",
+            "declaredType": "JSArray.E"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "add$1(receiver, value) {\n      A._arrayInstanceType(receiver)._precomputed1._as(value);\n      if (!!receiver.fixed$length)\n        A.throwExpression(A.UnsupportedError$(\"add\"));\n      receiver.push(value);\n    }",
+        "type": "void Function(Object?)"
+      },
+      "873774381": {
+        "id": "function/873774381",
+        "kind": "function",
+        "name": "isNotIdentical",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "bool Function(Object?,Object?)"
+      },
+      "873863767": {
+        "id": "function/873863767",
+        "kind": "function",
+        "name": "objectTypeName",
+        "size": 98,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Primitives_objectTypeName(object) {\n      return A.Primitives__objectTypeNameNewRti(object);\n    }",
+        "type": "String Function(Object)"
+      },
+      "875358741": {
+        "id": "function/875358741",
+        "kind": "function",
+        "name": "normalize",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "881419002": {
+        "id": "function/881419002",
+        "kind": "function",
+        "name": "isBottomType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "883935916": {
+        "id": "function/883935916",
+        "kind": "function",
+        "name": "_lookupFutureRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "base",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti Function(Object?,Rti)"
+      },
+      "885353355": {
+        "id": "function/885353355",
+        "kind": "function",
+        "name": "_setKind",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "kind",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "void Function(Rti,int)"
+      },
+      "885768717": {
+        "id": "function/885768717",
+        "kind": "function",
+        "name": "ArgumentError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ArgumentError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function([dynamic,String?])"
+      },
+      "890489632": {
+        "id": "function/890489632",
+        "kind": "function",
+        "name": "_rtiEval",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "environment",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti Function(Rti,String)"
+      },
+      "892227919": {
+        "id": "function/892227919",
+        "kind": "function",
+        "name": "evalInInstance",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "instance",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,String)"
+      },
+      "893622437": {
+        "id": "function/893622437",
+        "kind": "function",
+        "name": "typeRules",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "Object Function(Object?)"
+      },
+      "896138477": {
+        "id": "function/896138477",
+        "kind": "function",
+        "name": "_simpleSpecializedIsTest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "899124813": {
+        "id": "function/899124813",
+        "kind": "function",
+        "name": "cspForwardInterceptedCall",
+        "size": 2256,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "arity",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "needsDirectAccess",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "stubName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String?"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf,\n        getInterceptor = A.BoundClosure_interceptorOf;\n      switch (A.boolConversionCheck(needsDirectAccess) ? -1 : arity) {\n        case 0:\n          throw A.wrapException(new A.RuntimeError(\"Intercepted function with no arguments.\"));\n        case 1:\n          return function(entry, interceptorOf, receiverOf) {\n            return function() {\n              return interceptorOf(this)[entry](receiverOf(this));\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 2:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a) {\n              return interceptorOf(this)[entry](receiverOf(this), a);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 3:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 4:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 5:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 6:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d, e) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d, e);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        default:\n          return function(f, interceptorOf, receiverOf) {\n            return function() {\n              var a = [receiverOf(this)];\n              Array.prototype.push.apply(a, arguments);\n              return f.apply(interceptorOf(this), a);\n            };\n          }($function, getInterceptor, getReceiver);\n      }\n    }",
+        "type": "dynamic Function(int,bool,String?,dynamic)"
+      },
+      "906797235": {
+        "id": "function/906797235",
+        "kind": "function",
+        "name": "receiverOf",
+        "size": 72,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[null|exact=BoundClosure]",
+            "declaredType": "BoundClosure"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "BoundClosure_receiverOf(closure) {\n      return closure._receiver;\n    }",
+        "type": "dynamic Function(BoundClosure)"
+      },
+      "911398026": {
+        "id": "function/911398026",
+        "kind": "function",
+        "name": "_asBoolS",
+        "size": 249,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool?",
+        "inferredReturnType": "[null|exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asBoolS(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool\"));\n    }",
+        "type": "bool? Function(dynamic)"
+      },
+      "911422554": {
+        "id": "function/911422554",
+        "kind": "function",
+        "name": "_isBool",
+        "size": 73,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_isBool(object) {\n      return true === object || false === object;\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "916119111": {
+        "id": "function/916119111",
+        "kind": "function",
+        "name": "mapSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "cache",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[null|exact=JSString]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "value",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 12,
+        "code": "",
+        "type": "void Function(Object?,Object?,Object?)"
+      },
+      "922651191": {
+        "id": "function/922651191",
+        "kind": "function",
+        "name": "handleOptionalGroup",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
+      },
+      "922840913": {
+        "id": "function/922840913",
+        "kind": "function",
+        "name": "forwardInterceptedCallTo",
+        "size": 1560,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "stubName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "needsDirectAccess",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess) {\n      var receiverField, arity, t1, t2, $arguments,\n        interceptorField = $.BoundClosure__interceptorFieldNameCache;\n      if (interceptorField == null)\n        interceptorField = $.BoundClosure__interceptorFieldNameCache = A.BoundClosure__computeFieldNamed(\"interceptor\");\n      receiverField = $.BoundClosure__receiverFieldNameCache;\n      if (receiverField == null)\n        receiverField = $.BoundClosure__receiverFieldNameCache = A.BoundClosure__computeFieldNamed(\"receiver\");\n      arity = $function.length;\n      t1 = A.boolConversionCheck(needsDirectAccess) || arity >= 28;\n      if (t1)\n        return A.Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function);\n      if (arity === 1) {\n        t1 = \"return function(){return this.\" + interceptorField + \".\" + A.S(stubName) + \"(this.\" + receiverField + \");\";\n        t2 = $.Closure_functionCounter;\n        if (typeof t2 !== \"number\")\n          return t2.$add();\n        $.Closure_functionCounter = t2 + 1;\n        return new Function(t1 + t2 + \"}\")();\n      }\n      $arguments = \"abcdefghijklmnopqrstuvwxyz\".split(\"\").splice(0, arity - 1).join(\",\");\n      t1 = \"return function(\" + $arguments + \"){return this.\" + interceptorField + \".\" + A.S(stubName) + \"(this.\" + receiverField + \", \" + $arguments + \");\";\n      t2 = $.Closure_functionCounter;\n      if (typeof t2 !== \"number\")\n        return t2.$add();\n      $.Closure_functionCounter = t2 + 1;\n      return new Function(t1 + t2 + \"}\")();\n    }",
+        "type": "dynamic Function(String,dynamic,bool)"
+      },
+      "923456660": {
+        "id": "function/923456660",
+        "kind": "function",
+        "name": "_failedAsCheck",
+        "size": 194,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_failedAsCheck(object, testRti) {\n      throw A.wrapException(A._TypeError$fromMessage(A._Error_compose(object, A.instanceOrFunctionType(object, testRti), A._rtiToString(testRti, null))));\n    }",
+        "type": "void Function(Object?,Rti)"
+      },
+      "929852730": {
+        "id": "function/929852730",
+        "kind": "function",
+        "name": "_installTypeTests",
+        "size": 159,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__installTypeTests(universe, rti) {\n      rti._as = A._installSpecializedAsCheck;\n      rti._is = A._installSpecializedIsTest;\n      return rti;\n    }",
+        "type": "Rti Function(Object?,Rti)"
+      },
+      "935592878": {
+        "id": "function/935592878",
+        "kind": "function",
+        "name": "handleFunctionArguments",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
+      },
+      "941664110": {
+        "id": "function/941664110",
+        "kind": "function",
+        "name": "instanceOrFunctionType",
+        "size": 299,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "instanceOrFunctionType(object, testRti) {\n      var rti;\n      if (A.Rti__isUnionOfFunctionType(testRti))\n        if (object instanceof A.Closure) {\n          rti = A.closureFunctionType(object);\n          if (rti != null)\n            return rti;\n        }\n      return A.instanceType(object);\n    }",
+        "type": "Rti Function(Object?,Rti)"
+      },
+      "942726385": {
+        "id": "function/942726385",
+        "kind": "function",
+        "name": "asString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 33,
+        "code": "",
+        "type": "String Function(Object?)"
+      },
+      "944731702": {
+        "id": "function/944731702",
+        "kind": "function",
+        "name": "toString",
+        "size": 109,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/86936801",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(receiver) {\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(receiver)) + \"'\";\n    }",
+        "type": "String Function()"
+      },
+      "944782426": {
+        "id": "function/944782426",
+        "kind": "function",
+        "name": "_getKind",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 26,
+        "code": "",
+        "type": "int Function(Rti)"
+      },
+      "945625581": {
+        "id": "function/945625581",
+        "kind": "function",
+        "name": "_substituteNamed",
+        "size": 603,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "namedArray",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "depth",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_substituteNamed(universe, namedArray, typeArguments, depth) {\n      var changed, i, t1, t2, rti, substitutedRti,\n        $length = namedArray.length,\n        result = A._Utils_newArrayOrEmpty($length);\n      for (changed = false, i = 0; i < $length; i += 3) {\n        t1 = namedArray[i];\n        t2 = namedArray[i + 1];\n        rti = namedArray[i + 2];\n        substitutedRti = A._substitute(universe, rti, typeArguments, depth);\n        if (substitutedRti !== rti)\n          changed = true;\n        result.splice(i, 3, t1, t2, substitutedRti);\n      }\n      return changed ? result : namedArray;\n    }",
+        "type": "Object? Function(Object?,Object?,Object?,int)"
+      },
+      "947722698": {
+        "id": "function/947722698",
+        "kind": "function",
+        "name": "_getQuestionArgument",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "Rti Function(Rti)"
+      },
+      "949168228": {
+        "id": "function/949168228",
+        "kind": "function",
+        "name": "_TypeError.fromMessage",
+        "size": 95,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/324095577",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_TypeError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "_TypeError$fromMessage(message) {\n      return new A._TypeError(\"TypeError: \" + message);\n    }",
+        "type": "dynamic Function(String)"
+      },
+      "950377748": {
+        "id": "function/950377748",
+        "kind": "function",
+        "name": "isFixedLength",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "a",
+            "type": "[subclass=JSArray]",
+            "declaredType": "JSArray<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(JSArray<dynamic>)"
+      },
+      "950708086": {
+        "id": "function/950708086",
+        "kind": "function",
+        "name": "current",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "ArrayIterator.E",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "ArrayIterator.E Function()"
+      },
+      "952130975": {
+        "id": "function/952130975",
+        "kind": "function",
+        "name": "checkGrowable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "reason",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(String)"
+      },
+      "956458971": {
+        "id": "function/956458971",
+        "kind": "function",
+        "name": "_asIntS",
+        "size": 242,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int?",
+        "inferredReturnType": "[null|subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asIntS(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int\"));\n    }",
+        "type": "int? Function(dynamic)"
+      },
+      "960612858": {
+        "id": "function/960612858",
+        "kind": "function",
+        "name": "_getInterfaceName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 6,
+        "code": "",
+        "type": "String Function(Rti)"
+      },
+      "962973203": {
+        "id": "function/962973203",
+        "kind": "function",
+        "name": "toString",
+        "size": 49,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/418854932",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"null\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0(receiver) {\n      return \"null\";\n    }",
+        "type": "String Function()"
+      },
+      "964398244": {
+        "id": "function/964398244",
+        "kind": "function",
+        "name": "_getBindingBase",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "Rti Function(Rti)"
+      },
+      "968358412": {
+        "id": "function/968358412",
+        "kind": "function",
+        "name": "NullThrownError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/595024907",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=NullThrownError]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "968631083": {
+        "id": "function/968631083",
+        "kind": "function",
+        "name": "isNullable",
+        "size": 452,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "isNullable(t) {\n      var t1,\n        kind = t._kind;\n      if (!(t === type$.Null || t === type$.JSNull))\n        if (!A.isStrongTopType(t))\n          if (kind !== 7)\n            if (!(kind === 6 && A.isNullable(t._primary)))\n              t1 = kind === 8 && A.isNullable(t._primary);\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
+        "type": "bool Function(Rti)"
+      },
+      "973238019": {
+        "id": "function/973238019",
+        "kind": "function",
+        "name": "_asNumQ",
+        "size": 210,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num?",
+        "inferredReturnType": "[null|subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asNumQ(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num?\"));\n    }",
+        "type": "num? Function(dynamic)"
+      },
+      "976856253": {
+        "id": "function/976856253",
+        "kind": "function",
+        "name": "_canonicalRecipeOfGenericFunctionParameter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(int)"
+      },
+      "977037784": {
+        "id": "function/977037784",
+        "kind": "function",
+        "name": "_createFunctionRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "returnType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,Rti,_FunctionParameters,String)"
+      },
+      "977867690": {
+        "id": "function/977867690",
+        "kind": "function",
+        "name": "ArrayIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ArrayIterator]",
+        "parameters": [
+          {
+            "name": "iterable",
+            "type": "[subclass=JSArray]",
+            "declaredType": "JSArray<ArrayIterator.E>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(JSArray<ArrayIterator.E>)"
+      },
+      "982751380": {
+        "id": "function/982751380",
+        "kind": "function",
+        "name": "findType",
+        "size": 89,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "recipe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "findType(recipe) {\n      return A._Universe_eval(init.typeUniverse, recipe, false);\n    }",
+        "type": "Rti Function(String)"
+      },
+      "983353088": {
+        "id": "function/983353088",
+        "kind": "function",
+        "name": "indexToType",
+        "size": 861,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_indexToType(universe, environment, index) {\n      var typeArguments, len,\n        kind = environment._kind;\n      if (kind === 10) {\n        if (index === 0)\n          return environment._primary;\n        typeArguments = environment._rest;\n        len = typeArguments.length;\n        if (index <= len)\n          return typeArguments[index - 1];\n        index -= len;\n        environment = environment._primary;\n        kind = environment._kind;\n      } else if (index === 0)\n        return environment;\n      if (kind !== 9)\n        throw A.wrapException(A.AssertionError$(\"Indexed base must be an interface type\"));\n      typeArguments = environment._rest;\n      if (index <= typeArguments.length)\n        return typeArguments[index - 1];\n      throw A.wrapException(A.AssertionError$(\"Bad index \" + index + \" for \" + environment.toString$0(0)));\n    }",
+        "type": "Rti Function(Object?,Rti,int)"
+      },
+      "985926244": {
+        "id": "function/985926244",
+        "kind": "function",
+        "name": "IndexError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=IndexError]",
+        "parameters": [
+          {
+            "name": "invalidValue",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "indexable",
+            "type": "[subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "Value([exact=JSString], value: \"index\")",
+            "declaredType": "String?"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "declaredType": "String?"
+          },
+          {
+            "name": "length",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(int,dynamic,[String?,String?,int?])"
+      },
+      "986643735": {
+        "id": "function/986643735",
+        "kind": "function",
+        "name": "isIdentical",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 59,
+        "code": "",
+        "type": "bool Function(Object?,Object?)"
+      },
+      "991909617": {
+        "id": "function/991909617",
+        "kind": "function",
+        "name": "toString",
+        "size": 59,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/245082925",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(receiver) {\n      return String(receiver);\n    }",
+        "type": "String Function()"
+      },
+      "992679489": {
+        "id": "function/992679489",
+        "kind": "function",
+        "name": "constructorNameFallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(dynamic)"
+      },
+      "993180100": {
+        "id": "function/993180100",
+        "kind": "function",
+        "name": "objectToHumanReadableString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "String Function(Object)"
+      },
+      "999221506": {
+        "id": "function/999221506",
+        "kind": "function",
+        "name": "_unminifyOrTag",
+        "size": 179,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rawClassName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_unminifyOrTag(rawClassName) {\n      var preserved = init.mangledGlobalNames[rawClassName];\n      if (preserved != null)\n        return preserved;\n      return rawClassName;\n    }",
+        "type": "String Function(String)"
+      },
+      "1002613704": {
+        "id": "function/1002613704",
+        "kind": "function",
+        "name": "instanceOf",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "constructor",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "bool Function(Object?,Object?)"
+      },
+      "1005175086": {
+        "id": "function/1005175086",
+        "kind": "function",
+        "name": "LateError.fieldADI",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/43993131",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=LateError]",
+        "parameters": [
+          {
+            "name": "fieldName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(String)"
+      },
+      "1007804883": {
+        "id": "function/1007804883",
+        "kind": "function",
+        "name": "pop",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 16,
+        "code": "",
+        "type": "Object? Function(Object?)"
+      },
+      "1010766199": {
+        "id": "function/1010766199",
+        "kind": "function",
+        "name": "_canonicalRecipeOfQuestion",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti)"
+      },
+      "1013396128": {
+        "id": "function/1013396128",
+        "kind": "function",
+        "name": "isDigit",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1013977545",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "code",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "bool Function(int)"
+      },
+      "1017330300": {
+        "id": "function/1017330300",
+        "kind": "function",
+        "name": "_recipeJoin5",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s3",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s4",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s5",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "String Function(String,String,String,String,String)"
+      },
+      "1019584284": {
+        "id": "function/1019584284",
+        "kind": "function",
+        "name": "universe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 18,
+        "code": "",
+        "type": "Object Function(Object?)"
+      },
+      "1024465827": {
+        "id": "function/1024465827",
+        "kind": "function",
+        "name": "_errorExplanation",
+        "size": 48,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$_errorExplanation() {\n      return \"\";\n    }",
+        "type": "String Function()"
+      },
+      "1027535878": {
+        "id": "function/1027535878",
+        "kind": "function",
+        "name": "moveNext",
+        "size": 406,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes field)",
+        "inlinedCount": 0,
+        "code": "moveNext$0() {\n      var t2, _this = this,\n        t1 = _this._iterable,\n        $length = t1.length;\n      if (_this._length !== $length)\n        throw A.wrapException(A.throwConcurrentModificationError(t1));\n      t2 = _this._index;\n      if (t2 >= $length) {\n        _this.set$_current(null);\n        return false;\n      }\n      _this.set$_current(t1[t2]);\n      ++_this._index;\n      return true;\n    }",
+        "type": "bool Function()"
+      },
+      "1032715322": {
+        "id": "function/1032715322",
+        "kind": "function",
+        "name": "_asStringQ",
+        "size": 216,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asStringQ(object) {\n      if (typeof object == \"string\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String?\"));\n    }",
+        "type": "String? Function(dynamic)"
+      },
+      "1033254962": {
+        "id": "function/1033254962",
+        "kind": "function",
+        "name": "mapGet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "cache",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[null|exact=JSString]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 12,
+        "code": "",
+        "type": "Object? Function(Object?,Object?)"
+      },
+      "1036180926": {
+        "id": "function/1036180926",
+        "kind": "function",
+        "name": "_canonicalRecipeOfVoid",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"~\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
+      },
+      "1036730465": {
+        "id": "function/1036730465",
+        "kind": "function",
+        "name": "parse",
+        "size": 5256,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_parse(parser) {\n      var t1, i, ch, universe, array, head, base, u, parameters, optionalPositional, named, item,\n        source = parser.r,\n        stack = parser.s;\n      for (t1 = source.length, i = 0; i < t1;) {\n        ch = source.charCodeAt(i);\n        if (ch >= 48 && ch <= 57)\n          i = A._Parser_handleDigit(i + 1, ch, source, stack);\n        else if ((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36)\n          i = A._Parser_handleIdentifier(parser, i, source, stack, false);\n        else if (ch === 46)\n          i = A._Parser_handleIdentifier(parser, i, source, stack, true);\n        else {\n          ++i;\n          switch (ch) {\n            case 44:\n              break;\n            case 58:\n              stack.push(false);\n              break;\n            case 33:\n              stack.push(true);\n              break;\n            case 59:\n              stack.push(A._Parser_toType(parser.u, parser.e, stack.pop()));\n              break;\n            case 94:\n              stack.push(A._Universe__lookupGenericFunctionParameterRti(parser.u, stack.pop()));\n              break;\n            case 35:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 5, \"#\"));\n              break;\n            case 64:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 2, \"@\"));\n              break;\n            case 126:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 3, \"~\"));\n              break;\n            case 60:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 62:\n              universe = parser.u;\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              head = stack.pop();\n              if (typeof head == \"string\")\n                stack.push(A._Universe__lookupInterfaceRti(universe, head, array));\n              else {\n                base = A._Parser_toType(universe, parser.e, head);\n                switch (base._kind) {\n                  case 11:\n                    stack.push(A._Universe__lookupGenericFunctionRti(universe, base, array, parser.n));\n                    break;\n                  default:\n                    stack.push(A._Universe__lookupBindingRti(universe, base, array));\n                    break;\n                }\n              }\n              break;\n            case 38:\n              A._Parser_handleExtendedOperations(parser, stack);\n              break;\n            case 42:\n              u = parser.u;\n              stack.push(A._Universe__lookupStarRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 63:\n              u = parser.u;\n              stack.push(A._Universe__lookupQuestionRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 47:\n              u = parser.u;\n              stack.push(A._Universe__lookupFutureOrRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 40:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 41:\n              universe = parser.u;\n              parameters = new A._FunctionParameters();\n              optionalPositional = universe.sEA;\n              named = universe.sEA;\n              head = stack.pop();\n              if (typeof head == \"number\")\n                switch (head) {\n                  case -1:\n                    optionalPositional = stack.pop();\n                    break;\n                  case -2:\n                    named = stack.pop();\n                    break;\n                  default:\n                    stack.push(head);\n                    break;\n                }\n              else\n                stack.push(head);\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              parameters._requiredPositional = array;\n              parameters._optionalPositional = optionalPositional;\n              parameters._named = named;\n              stack.push(A._Universe__lookupFunctionRti(universe, A._Parser_toType(universe, parser.e, stack.pop()), parameters));\n              break;\n            case 91:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 93:\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              stack.push(array);\n              stack.push(-1);\n              break;\n            case 123:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 125:\n              array = stack.splice(parser.p);\n              A._Parser_toTypesNamed(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              stack.push(array);\n              stack.push(-2);\n              break;\n            default:\n              throw \"Bad character \" + ch;\n          }\n        }\n      }\n      item = stack.pop();\n      return A._Parser_toType(parser.u, parser.e, item);\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "1041854750": {
+        "id": "function/1041854750",
+        "kind": "function",
+        "name": "_setRest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "1042482096": {
+        "id": "function/1042482096",
+        "kind": "function",
+        "name": "_stringToSafeString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/893386369",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(String)"
+      },
+      "1046014704": {
+        "id": "function/1046014704",
+        "kind": "function",
+        "name": "_createFutureOrRti",
+        "size": 841,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__createFutureOrRti(universe, baseType, key, normalize) {\n      var t1, t2, rti;\n      if (normalize) {\n        t1 = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.legacy_Object))\n            t2 = baseType === type$.Object;\n          else\n            t2 = true;\n        else\n          t2 = true;\n        if (t2 || baseType === type$.Object)\n          return baseType;\n        else if (t1 === 1)\n          return A._Universe__lookupInterfaceRti(universe, \"Future\", [baseType]);\n        else if (baseType === type$.Null || baseType === type$.JSNull)\n          return type$.nullable_Future_Null;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 8;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,String,bool)"
+      },
+      "1050426556": {
+        "id": "function/1050426556",
+        "kind": "function",
+        "name": "handleTypeArguments",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
+      },
+      "1051093947": {
+        "id": "function/1051093947",
+        "kind": "function",
+        "name": "toString",
+        "size": 214,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      var $constructor = this.constructor,\n        $name = $constructor == null ? null : $constructor.name;\n      return \"Closure '\" + A.unminifyOrTag($name == null ? \"unknown\" : $name) + \"'\";\n    }",
+        "type": "String Function()"
+      },
+      "1055215220": {
+        "id": "function/1055215220",
+        "kind": "function",
+        "name": "asRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 96,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "1060110710": {
+        "id": "function/1060110710",
+        "kind": "function",
+        "name": "listToString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/607623563",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "list",
+            "type": "[subclass=JSArray]",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(List<dynamic>)"
+      },
+      "1061931090": {
+        "id": "function/1061931090",
+        "kind": "function",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
+      },
+      "1068396938": {
+        "id": "function/1068396938",
+        "kind": "function",
+        "name": "_installSpecializedAsCheck",
+        "size": 505,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_installSpecializedAsCheck(object) {\n      var t1, asFn, testRti = this;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = testRti === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        asFn = A._asTop;\n      else if (testRti === type$.Object)\n        asFn = A._asObject;\n      else\n        asFn = A._generalNullableAsCheckImplementation;\n      testRti._as = asFn;\n      return testRti._as(object);\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "1069756346": {
+        "id": "function/1069756346",
+        "kind": "function",
+        "name": "isString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "1070901287": {
+        "id": "function/1070901287",
+        "kind": "function",
+        "name": "_getStarArgument",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "Rti Function(Rti)"
+      },
+      "1072179150": {
+        "id": "function/1072179150",
+        "kind": "function",
+        "name": "main",
+        "size": 52,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/238173233",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "main() {\n      A.printString(\"Hello, World!\");\n    }",
+        "type": "dynamic Function()"
       }
     },
     "typedef": {},
@@ -581,196 +11927,83 @@
         "kind": "field",
         "name": "_hasValue",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
-        "inferredType": "Value mask: [true] type: [exact=JSBool]",
-        "code": null,
+        "inferredType": "[exact=JSBool]",
+        "code": "",
         "type": "bool"
       },
-      "17152193": {
-        "id": "field/17152193",
+      "111785749": {
+        "id": "field/111785749",
         "kind": "field",
-        "name": "getType",
+        "name": "_precomputed4",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/716671121",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
-      },
-      "55541185": {
-        "id": "field/55541185",
-        "kind": "field",
-        "name": "MANGLED_GLOBAL_NAMES",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "library/965528565",
-        "children": [],
-        "inferredType": "Value mask: [\"mangledGlobalNames\"] type: [exact=JSString]",
-        "code": null,
-        "type": "dynamic",
-        "const": true
-      },
-      "70141207": {
-        "id": "field/70141207",
-        "kind": "field",
-        "name": "_typeName",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/269073412",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "String"
+        "inferredType": "[null]",
+        "code": "",
+        "type": "Object?"
       },
       "111931226": {
         "id": "field/111931226",
         "kind": "field",
         "name": "start",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/974704527",
         "children": [],
         "inferredType": "[null]",
-        "code": null,
-        "type": "num"
+        "code": "",
+        "type": "num?"
       },
       "112618843": {
         "id": "field/112618843",
         "kind": "field",
         "name": "_length",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
         "inferredType": "[subclass=JSUInt32]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
-      "116849538": {
-        "id": "field/116849538",
-        "kind": "field",
-        "name": "areOptionalParametersNamed",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[exact=JSBool]",
-        "code": null,
-        "type": "bool"
-      },
-      "118657756": {
-        "id": "field/118657756",
-        "kind": "field",
-        "name": "DOLLAR_CHAR_VALUE",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/354160010",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "125830184": {
-        "id": "field/125830184",
-        "kind": "field",
-        "name": "_self",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/138211367",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "dynamic"
-      },
-      "130159427": {
-        "id": "field/130159427",
-        "kind": "field",
-        "name": "OPTIONAL_PARAMETERS_INFO",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
       "140571055": {
         "id": "field/140571055",
         "kind": "field",
         "name": "message",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/991730135",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": null,
-        "type": "String"
+        "code": "",
+        "type": "String?"
       },
       "153611669": {
         "id": "field/153611669",
         "kind": "field",
         "name": "index",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/716671121",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
-      "159930244": {
-        "id": "field/159930244",
-        "kind": "field",
-        "name": "CALL_CATCH_ALL",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "180845508": {
-        "id": "field/180845508",
-        "kind": "field",
-        "name": "_target",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/138211367",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "dynamic"
-      },
-      "185234473": {
-        "id": "field/185234473",
-        "kind": "field",
-        "name": "message",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/644348892",
-        "children": [],
-        "inferredType": "[exact=JSString]",
-        "code": null,
-        "type": "String"
-      },
       "190358771": {
         "id": "field/190358771",
         "kind": "field",
         "name": "message",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/948502579",
         "children": [],
-        "inferredType": "Value mask: [\"No element\"] type: [exact=JSString]",
-        "code": null,
+        "inferredType": "[exact=JSString]",
+        "code": "",
         "type": "String"
       },
       "190934046": {
@@ -778,295 +12011,191 @@
         "kind": "field",
         "name": "_name",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/73206861",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": null,
+        "code": "",
         "type": "String"
       },
-      "202409972": {
-        "id": "field/202409972",
+      "206062167": {
+        "id": "field/206062167",
         "kind": "field",
-        "name": "REQUIRED_PARAMETER_PROPERTY",
+        "name": "_precomputed1",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "206386055": {
-        "id": "field/206386055",
-        "kind": "field",
-        "name": "jsFunction",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "dynamic"
-      },
-      "221593932": {
-        "id": "field/221593932",
-        "kind": "field",
-        "name": "isFunctionType",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "code": "",
+        "type": "Object?"
       },
       "237146195": {
         "id": "field/237146195",
         "kind": "field",
         "name": "_iterable",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
         "inferredType": "[subclass=JSArray]",
-        "code": null,
-        "type": "JSArray<E>"
+        "code": "",
+        "type": "JSArray<ArrayIterator.E>"
+      },
+      "239805186": {
+        "id": "field/239805186",
+        "kind": "field",
+        "name": "_as",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
+      },
+      "242140830": {
+        "id": "field/242140830",
+        "kind": "field",
+        "name": "_precomputed2",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "inferredType": "[null]",
+        "code": "",
+        "type": "Object?"
       },
       "249142929": {
         "id": "field/249142929",
         "kind": "field",
         "name": "code",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/949988971",
         "children": [],
-        "inferredType": "Value mask: [\"function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n}\"] type: [exact=JSString]",
-        "code": null,
+        "inferredType": "Value([exact=JSString], value: \"function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n}\")",
+        "code": "",
         "type": "String"
       },
-      "259683855": {
-        "id": "field/259683855",
-        "kind": "field",
-        "name": "functionType",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "dynamic"
-      },
       "302220255": {
         "id": "field/302220255",
         "kind": "field",
         "name": "_receiver",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/138211367",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": null,
+        "code": "",
         "type": "dynamic"
       },
-      "319720392": {
-        "id": "field/319720392",
+      "307514869": {
+        "id": "field/307514869",
         "kind": "field",
-        "name": "message",
+        "name": "typeParameterVariances",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/324980341",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/251751824",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
+        "inferredType": "Value([exact=JSString], value: \"tPV\")",
+        "code": "",
         "type": "String"
       },
-      "338588500": {
-        "id": "field/338588500",
+      "351779368": {
+        "id": "field/351779368",
         "kind": "field",
-        "name": "requiredParameterCount",
+        "name": "_canonicalRecipe",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[subclass=JSInt]",
-        "code": null,
-        "type": "int"
+        "inferredType": "[null|exact=JSString]",
+        "code": "",
+        "type": "Object?"
       },
       "376257386": {
         "id": "field/376257386",
         "kind": "field",
         "name": "modifiedObject",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/36312556",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "Object"
+        "inferredType": "[subclass=JSArray]",
+        "code": "",
+        "type": "Object?"
       },
       "386221903": {
         "id": "field/386221903",
         "kind": "field",
         "name": "functionCounter",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 32,
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/317291728",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
+        "inferredType": "[null|subclass=JSInt]",
+        "code": "$.Closure_functionCounter = 0;\n",
         "type": "int"
       },
-      "391942199": {
-        "id": "field/391942199",
+      "410674423": {
+        "id": "field/410674423",
         "kind": "field",
-        "name": "OPERATOR_AS_PREFIX",
+        "name": "_kind",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "412345286": {
-        "id": "field/412345286",
-        "kind": "field",
-        "name": "_unmangledName",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/269073412",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "String"
-      },
-      "413692838": {
-        "id": "field/413692838",
-        "kind": "field",
-        "name": "rawRuntimeType",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
-      },
-      "417944821": {
-        "id": "field/417944821",
-        "kind": "field",
-        "name": "_inTypeAssertion",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "library/966364039",
-        "children": [],
-        "inferredType": "[exact=JSBool]",
-        "code": null,
-        "type": "dynamic"
-      },
-      "420557924": {
-        "id": "field/420557924",
-        "kind": "field",
-        "name": "isAccessor",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[exact=JSBool]",
-        "code": null,
-        "type": "bool"
-      },
-      "422530140": {
-        "id": "field/422530140",
-        "kind": "field",
-        "name": "TYPEDEF_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "435101137": {
-        "id": "field/435101137",
-        "kind": "field",
-        "name": "selfFieldNameCache",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/138211367",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "String"
-      },
-      "446360348": {
-        "id": "field/446360348",
-        "kind": "field",
-        "name": "REQUIRED_PARAMETERS_INFO",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "code": "",
+        "type": "Object?"
       },
-      "447707988": {
-        "id": "field/447707988",
+      "430387875": {
+        "id": "field/430387875",
         "kind": "field",
-        "name": "RTI_NAME",
+        "name": "_requiredPositional",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
         "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
-      "483247773": {
-        "id": "field/483247773",
+      "449743822": {
+        "id": "field/449743822",
         "kind": "field",
-        "name": "rawRtiToJsConstructorName",
+        "name": "_named",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/716671121",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
         "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
       "504170901": {
         "id": "field/504170901",
         "kind": "field",
         "name": "_current",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 91,
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "E"
+        "code": "set$_current(_current) {\n      this._current = this.$ti._eval$1(\"1?\")._as(_current);\n    }",
+        "type": "ArrayIterator.E?"
       },
       "505549528": {
         "id": "field/505549528",
         "kind": "field",
         "name": "indexable",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/175705485",
         "children": [],
-        "inferredType": "Union of [[exact=IndexError], [exact=JSString], [exact=StringBuffer], [subclass=JSArray]]",
-        "code": null,
+        "inferredType": "[subclass=Object]",
+        "code": "",
         "type": "dynamic"
       },
       "509005655": {
@@ -1074,173 +12203,155 @@
         "kind": "field",
         "name": "name",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
-        "inferredType": "Value mask: [\"index\"] type: [null|exact=JSString]",
-        "code": null,
-        "type": "String"
+        "inferredType": "Value([null|exact=JSString], value: \"index\")",
+        "code": "",
+        "type": "String?"
+      },
+      "511786572": {
+        "id": "field/511786572",
+        "kind": "field",
+        "name": "_evalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
       "522978319": {
         "id": "field/522978319",
         "kind": "field",
         "name": "_toStringVisiting",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "size": 75,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/754126564",
         "children": [],
-        "inferredType": "Container mask: [subclass=JSArray] length: null type: [exact=JSExtendableArray]",
-        "code": null,
-        "type": "List"
+        "inferredType": "Container([exact=JSExtendableArray], element: [subclass=JSArray], length: null)",
+        "code": "$._toStringVisiting = A._setArrayType([], A.findType(\"JSArray<Object>\"));\n",
+        "type": "List<Object>"
       },
-      "526089142": {
-        "id": "field/526089142",
+      "523754696": {
+        "id": "field/523754696",
         "kind": "field",
-        "name": "_constructorNameFallback",
+        "name": "_primary",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "library/966364039",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JS_CONST]",
-        "code": null,
-        "type": "dynamic",
-        "const": true
+        "inferredType": "Union(null, [exact=JSString], [exact=Rti], [subclass=JSInt])",
+        "code": "",
+        "type": "Object?"
+      },
+      "525672864": {
+        "id": "field/525672864",
+        "kind": "field",
+        "name": "_interceptor",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "dynamic"
+      },
+      "558782121": {
+        "id": "field/558782121",
+        "kind": "field",
+        "name": "erasedTypes",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/251751824",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"eT\")",
+        "code": "",
+        "type": "String"
       },
       "577142640": {
         "id": "field/577142640",
         "kind": "field",
         "name": "_index",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
         "inferredType": "[subclass=JSPositiveInt]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
-      "586155906": {
-        "id": "field/586155906",
+      "588058281": {
+        "id": "field/588058281",
         "kind": "field",
-        "name": "FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
+        "name": "_interceptorFieldNameCache",
+        "size": 51,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
         "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "inferredType": "[null|exact=JSString]",
+        "code": "$.BoundClosure__interceptorFieldNameCache = null;\n",
+        "type": "String?"
       },
-      "603434183": {
-        "id": "field/603434183",
+      "636292115": {
+        "id": "field/636292115",
         "kind": "field",
-        "name": "cachedSortedIndices",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
+        "name": "_receiverFieldNameCache",
+        "size": 48,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
         "children": [],
-        "inferredType": "[null]",
-        "code": null,
-        "type": "List"
+        "inferredType": "[null|exact=JSString]",
+        "code": "$.BoundClosure__receiverFieldNameCache = null;\n",
+        "type": "String?"
       },
-      "626399440": {
-        "id": "field/626399440",
+      "639918601": {
+        "id": "field/639918601",
         "kind": "field",
-        "name": "FUNCTION_CLASS_TYPE_NAME",
+        "name": "_bindCache",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "645423404": {
-        "id": "field/645423404",
-        "kind": "field",
-        "name": "CALL_NAME_PROPERTY",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
       "649547880": {
         "id": "field/649547880",
         "kind": "field",
         "name": "end",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/974704527",
         "children": [],
         "inferredType": "[null]",
-        "code": null,
-        "type": "num"
+        "code": "",
+        "type": "num?"
       },
       "653339731": {
         "id": "field/653339731",
         "kind": "field",
         "name": "message",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/866150578",
         "children": [],
-        "inferredType": "Value mask: [\"Intercepted function with no arguments.\"] type: [exact=JSString]",
-        "code": null,
+        "inferredType": "Value([exact=JSString], value: \"Intercepted function with no arguments.\")",
+        "code": "",
         "type": "dynamic"
       },
-      "656800516": {
-        "id": "field/656800516",
+      "726821079": {
+        "id": "field/726821079",
         "kind": "field",
-        "name": "data",
+        "name": "typeRules",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/251751824",
         "children": [],
-        "inferredType": "[exact=JSFixedArray]",
-        "code": null,
-        "type": "List"
-      },
-      "667376711": {
-        "id": "field/667376711",
-        "kind": "field",
-        "name": "FUNCTION_TYPE_RETURN_TYPE_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "701716969": {
-        "id": "field/701716969",
-        "kind": "field",
-        "name": "FUNCTION_TYPE_VOID_RETURN_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "709451133": {
-        "id": "field/709451133",
-        "kind": "field",
-        "name": "receiverFieldNameCache",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/138211367",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
+        "inferredType": "Value([exact=JSString], value: \"tR\")",
+        "code": "",
         "type": "String"
       },
       "727752212": {
@@ -1248,199 +12359,143 @@
         "kind": "field",
         "name": "invalidValue",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": null,
+        "code": "",
         "type": "dynamic"
       },
-      "743971885": {
-        "id": "field/743971885",
-        "kind": "field",
-        "name": "FUNCTION_TYPE_NAMED_PARAMETERS_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
       "759319863": {
         "id": "field/759319863",
         "kind": "field",
         "name": "message",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": null,
+        "code": "",
         "type": "dynamic"
       },
-      "793498792": {
-        "id": "field/793498792",
+      "787049592": {
+        "id": "field/787049592",
         "kind": "field",
-        "name": "isGivenTypeRti",
+        "name": "_is",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/716671121",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
-      "805748014": {
-        "id": "field/805748014",
+      "806634540": {
+        "id": "field/806634540",
         "kind": "field",
-        "name": "isSubtype",
+        "name": "_cachedRuntimeType",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/716671121",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
-      },
-      "840091021": {
-        "id": "field/840091021",
-        "kind": "field",
-        "name": "optionalParameterCount",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[subclass=JSInt]",
-        "code": null,
-        "type": "int"
+        "inferredType": "[null|exact=_Type]",
+        "code": "",
+        "type": "Object?"
       },
       "840751619": {
         "id": "field/840751619",
         "kind": "field",
         "name": "message",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/56472591",
         "children": [],
-        "inferredType": "[null]",
-        "code": null,
-        "type": "Object"
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
-      "844410756": {
-        "id": "field/844410756",
+      "862009491": {
+        "id": "field/862009491",
         "kind": "field",
-        "name": "DEFAULT_VALUES_PROPERTY",
+        "name": "sharedEmptyArray",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/251751824",
         "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "inferredType": "Value([exact=JSString], value: \"sEA\")",
+        "code": "",
+        "type": "String"
       },
-      "856247106": {
-        "id": "field/856247106",
+      "884701761": {
+        "id": "field/884701761",
         "kind": "field",
-        "name": "bound",
+        "name": "_optionalPositional",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/1019636942",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "int"
-      },
-      "864119084": {
-        "id": "field/864119084",
-        "kind": "field",
-        "name": "OBJECT_CLASS_TYPE_NAME",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "874766737": {
-        "id": "field/874766737",
-        "kind": "field",
-        "name": "owner",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/1019636942",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "Type"
-      },
-      "875039735": {
-        "id": "field/875039735",
-        "kind": "field",
-        "name": "NULL_CLASS_TYPE_NAME",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "code": "",
+        "type": "Object?"
       },
       "908476008": {
         "id": "field/908476008",
         "kind": "field",
         "name": "printToZone",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/689380639",
         "children": [],
         "inferredType": "[null]",
-        "code": null,
-        "type": "Function"
+        "code": "",
+        "type": "void Function(String)?"
       },
-      "911662921": {
-        "id": "field/911662921",
+      "914116059": {
+        "id": "field/914116059",
         "kind": "field",
-        "name": "FUNCTION_TYPE_INDEX",
+        "name": "_message",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/156108056",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/457024667",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[exact=JSString]",
+        "code": "",
+        "type": "String"
       },
-      "914172423": {
-        "id": "field/914172423",
+      "924001250": {
+        "id": "field/924001250",
         "kind": "field",
-        "name": "FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG",
+        "name": "_rti",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/642774187",
         "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "inferredType": "[null|exact=Rti]",
+        "code": "",
+        "type": "Rti"
+      },
+      "928850752": {
+        "id": "field/928850752",
+        "kind": "field",
+        "name": "_rest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
       "936474054": {
         "id": "field/936474054",
         "kind": "field",
         "name": "_name",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/716671121",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": null,
+        "code": "",
         "type": "String"
       },
       "944915314": {
@@ -1448,171 +12503,20139 @@
         "kind": "field",
         "name": "variableName",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/93352366",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "String"
+        "inferredType": "[null|exact=JSString]",
+        "code": "",
+        "type": "String?"
+      },
+      "946051721": {
+        "id": "field/946051721",
+        "kind": "field",
+        "name": "_precomputed3",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "inferredType": "[null]",
+        "code": "",
+        "type": "Object?"
       },
       "954188953": {
         "id": "field/954188953",
         "kind": "field",
         "name": "length",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/175705485",
         "children": [],
         "inferredType": "[subclass=JSInt]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
-      "960584371": {
-        "id": "field/960584371",
+      "994897322": {
+        "id": "field/994897322",
         "kind": "field",
-        "name": "FUNCTION_TYPE_TAG",
+        "name": "_message",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/43993131",
         "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "inferredType": "[exact=JSString]",
+        "code": "",
+        "type": "String?"
       },
-      "1012317118": {
-        "id": "field/1012317118",
+      "1002990507": {
+        "id": "field/1002990507",
         "kind": "field",
-        "name": "SIGNATURE_NAME",
+        "name": "_specializedTestResource",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/73206861",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "inferredType": "[null|exact=JSString]",
+        "code": "",
+        "type": "Object?"
       },
       "1019580176": {
         "id": "field/1019580176",
         "kind": "field",
         "name": "index",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
+        "outputUnit": "outputUnit/669725655",
         "parent": "class/73206861",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
-      "1020283310": {
-        "id": "field/1020283310",
+      "1034922434": {
+        "id": "field/1034922434",
         "kind": "field",
-        "name": "STATIC_FUNCTION_NAME_PROPERTY_NAME",
+        "name": "evalCache",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "library/965528565",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/251751824",
         "children": [],
-        "inferredType": "Value mask: [\"$static_name\"] type: [exact=JSString]",
-        "code": null,
-        "type": "dynamic",
-        "const": true
-      },
-      "1061931090": {
-        "id": "field/1061931090",
-        "kind": "field",
-        "name": "_name",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/138211367",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
+        "inferredType": "Value([exact=JSString], value: \"eC\")",
+        "code": "",
         "type": "String"
       },
-      "1063003009": {
-        "id": "field/1063003009",
+      "1047452024": {
+        "id": "field/1047452024",
         "kind": "field",
-        "name": "isCheckPropertyToJsConstructorName",
+        "name": "_contents",
         "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/716671121",
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
         "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
-      },
-      "1068071433": {
-        "id": "field/1068071433",
-        "kind": "field",
-        "name": "name",
-        "size": 0,
-        "outputUnit": "outputUnit/987444055",
-        "parent": "class/1019636942",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
+        "inferredType": "[exact=JSString]",
+        "code": "",
         "type": "String"
       }
     },
-    "constant": {},
+    "constant": {
+      "22040747": {
+        "id": "constant/22040747",
+        "kind": "constant",
+        "name": null,
+        "size": 49,
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
+      },
+      "99446204": {
+        "id": "constant/99446204",
+        "kind": "constant",
+        "name": null,
+        "size": 43,
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.JSString_methods = J.JSString.prototype;\n"
+      },
+      "553768666": {
+        "id": "constant/553768666",
+        "kind": "constant",
+        "name": null,
+        "size": 41,
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.JSArray_methods = J.JSArray.prototype;\n"
+      },
+      "994572070": {
+        "id": "constant/994572070",
+        "kind": "constant",
+        "name": null,
+        "size": 131,
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
+      }
+    },
     "closure": {}
   },
   "holding": {
+    "field/4524053": [
+      {
+        "id": "field/4524053",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/111785749": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/112618843": [
+      {
+        "id": "field/112618843",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/140571055": [
+      {
+        "id": "field/140571055",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/206062167": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      }
+    ],
+    "field/237146195": [
+      {
+        "id": "field/237146195",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/239805186": [
+      {
+        "id": "field/239805186",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/242140830": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/249142929": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/302220255": [
+      {
+        "id": "field/302220255",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/351779368": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      }
+    ],
+    "field/376257386": [
+      {
+        "id": "field/376257386",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/410674423": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      }
+    ],
+    "field/430387875": [
+      {
+        "id": "field/430387875",
+        "mask": null
+      }
+    ],
+    "field/449743822": [
+      {
+        "id": "field/449743822",
+        "mask": null
+      }
+    ],
+    "field/504170901": [
+      {
+        "id": "field/504170901",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/505549528": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/509005655": [
+      {
+        "id": "field/509005655",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/511786572": [
+      {
+        "id": "field/511786572",
+        "mask": null
+      }
+    ],
+    "field/522978319": [
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/523754696": [
+      {
+        "id": "field/523754696",
+        "mask": null
+      }
+    ],
+    "field/525672864": [
+      {
+        "id": "field/525672864",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/577142640": [
+      {
+        "id": "field/577142640",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/639918601": [
+      {
+        "id": "field/639918601",
+        "mask": null
+      }
+    ],
+    "field/653339731": [
+      {
+        "id": "field/653339731",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/727752212": [
+      {
+        "id": "field/727752212",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/759319863": [
+      {
+        "id": "field/759319863",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/787049592": [
+      {
+        "id": "field/787049592",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/806634540": [
+      {
+        "id": "field/806634540",
+        "mask": null
+      }
+    ],
+    "field/840751619": [
+      {
+        "id": "field/840751619",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/884701761": [
+      {
+        "id": "field/884701761",
+        "mask": null
+      }
+    ],
+    "field/914116059": [
+      {
+        "id": "field/914116059",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/928850752": [
+      {
+        "id": "field/928850752",
+        "mask": null
+      }
+    ],
+    "field/944915314": [
+      {
+        "id": "field/944915314",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/946051721": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/954188953": [
+      {
+        "id": "field/954188953",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/994897322": [
+      {
+        "id": "field/994897322",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/1002990507": [
+      {
+        "id": "field/1002990507",
+        "mask": null
+      }
+    ],
+    "field/1047452024": [
+      {
+        "id": "field/1047452024",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/2781902": [
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/5571021": [
+      {
+        "id": "field/302220255",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/765963979",
+        "mask": null
+      },
+      {
+        "id": "function/890489632",
+        "mask": null
+      },
+      {
+        "id": "function/892227919",
+        "mask": null
+      },
+      {
+        "id": "function/892227919",
+        "mask": "inlined"
+      }
+    ],
+    "function/11678628": [
+      {
+        "id": "field/1002990507",
+        "mask": null
+      },
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/54796797",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/54796797",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/716694085",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/716694085",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/820496795",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/15478302": [
+      {
+        "id": "field/302220255",
+        "mask": null
+      },
+      {
+        "id": "function/1061931090",
+        "mask": null
+      },
+      {
+        "id": "function/1061931090",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/873863767",
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      }
+    ],
+    "function/21938161": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/123297685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/123297685",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/25075263": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/620456164",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/25816218": [
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      }
+    ],
+    "function/49259755": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1010766199",
+        "mask": null
+      },
+      {
+        "id": "function/1010766199",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/637790089",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      }
+    ],
+    "function/57613304": [
+      {
+        "id": "function/866251913",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/866251913",
+        "mask": "inlined"
+      }
+    ],
+    "function/63055866": [
+      {
+        "id": "function/321900710",
+        "mask": "inlined"
+      }
+    ],
+    "function/66145123": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/301370282",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": "inlined"
+      }
+    ],
+    "function/70158663": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/74759397": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      }
+    ],
+    "function/77140749": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      }
+    ],
+    "function/78867062": [
+      {
+        "id": "function/1036180926",
+        "mask": "inlined"
+      }
+    ],
+    "function/83781773": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1041854750",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/340789555",
+        "mask": null
+      },
+      {
+        "id": "function/340789555",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": null
+      },
+      {
+        "id": "function/631685979",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/709915292",
+        "mask": null
+      },
+      {
+        "id": "function/709915292",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/729126945",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      }
+    ],
+    "function/95816591": [
+      {
+        "id": "function/893622437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/893622437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/893622437",
+        "mask": "inlined"
+      }
+    ],
+    "function/101848641": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522380745",
+        "mask": "inlined"
+      }
+    ],
+    "function/103899378": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/603807818",
+        "mask": null
+      },
+      {
+        "id": "function/603807818",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/834015338",
+        "mask": null
+      }
+    ],
+    "function/110436482": [
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      }
+    ],
+    "function/111998270": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      }
+    ],
+    "function/120424305": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/132742275": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/133009644": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1017330300",
+        "mask": null
+      },
+      {
+        "id": "function/101848641",
+        "mask": null
+      },
+      {
+        "id": "function/101848641",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1041854750",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/522380745",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/631685979",
+        "mask": null
+      },
+      {
+        "id": "function/637526703",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/753032370",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/977037784",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/977037784",
+        "mask": null
+      }
+    ],
+    "function/150705145": [
+      {
+        "id": "field/944915314",
+        "mask": null
+      }
+    ],
+    "function/160933185": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/331545422",
+        "mask": null
+      }
+    ],
+    "function/163889622": [
+      {
+        "id": "function/435575019",
+        "mask": null
+      },
+      {
+        "id": "function/968358412",
+        "mask": null
+      },
+      {
+        "id": "function/968358412",
+        "mask": "inlined"
+      }
+    ],
+    "function/167217604": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/167405219": [
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/873863767",
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      }
+    ],
+    "function/195520573": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/196790253": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/692531098",
+        "mask": null
+      },
+      {
+        "id": "function/692531098",
+        "mask": "inlined"
+      }
+    ],
+    "function/200890444": [
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      }
+    ],
+    "function/207792788": [
+      {
+        "id": "field/1002990507",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/11678628",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/253415970",
+        "mask": null
+      },
+      {
+        "id": "function/287475886",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/55984201",
+        "mask": null
+      },
+      {
+        "id": "function/55984201",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/896138477",
+        "mask": null
+      },
+      {
+        "id": "function/896138477",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/231618349": [
+      {
+        "id": "function/950377748",
+        "mask": "inlined"
+      }
+    ],
+    "function/245364359": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/492521940",
+        "mask": null
+      },
+      {
+        "id": "function/492521940",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/65470864",
+        "mask": null
+      },
+      {
+        "id": "function/65470864",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/883935916",
+        "mask": null
+      },
+      {
+        "id": "function/883935916",
+        "mask": "inlined"
+      }
+    ],
+    "function/247461665": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/253415970": [
+      {
+        "id": "field/787049592",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864971496",
+        "mask": null
+      },
+      {
+        "id": "function/864971496",
+        "mask": "inlined"
+      }
+    ],
+    "function/253560656": [
+      {
+        "id": "function/1041854750",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      }
+    ],
+    "function/253794122": [
+      {
+        "id": "field/386221903",
+        "mask": null
+      },
+      {
+        "id": "field/386221903",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/143567266",
+        "mask": null
+      },
+      {
+        "id": "function/143567266",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/273024378",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/320253842",
+        "mask": null
+      },
+      {
+        "id": "function/320253842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/393060060",
+        "mask": null
+      },
+      {
+        "id": "function/393060060",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/807434881",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/264634420": [
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/266572710": [
+      {
+        "id": "function/171156881",
+        "mask": "inlined"
+      }
+    ],
+    "function/273024378": [
+      {
+        "id": "field/386221903",
+        "mask": null
+      },
+      {
+        "id": "field/386221903",
+        "mask": null
+      },
+      {
+        "id": "field/636292115",
+        "mask": null
+      },
+      {
+        "id": "field/636292115",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/320253842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/320253842",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/476860251",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/659844135",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/762030080",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/762030080",
+        "mask": null
+      },
+      {
+        "id": "function/762030080",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/922840913",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/285148179": [
+      {
+        "id": "function/295807328",
+        "mask": null
+      }
+    ],
+    "function/287475886": [
+      {
+        "id": "field/1002990507",
+        "mask": null
+      },
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/54796797",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/54796797",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/820496795",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/831592736",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/294207503": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/295807328": [
+      {
+        "id": "function/745680035",
+        "mask": null
+      },
+      {
+        "id": "function/745680035",
+        "mask": "inlined"
+      }
+    ],
+    "function/301370282": [
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1036730465",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/426435180",
+        "mask": null
+      },
+      {
+        "id": "function/426435180",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747174278",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      }
+    ],
+    "function/302617892": [
+      {
+        "id": "function/1051093947",
+        "mask": "[subclass=Closure]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[subclass=Closure]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[subclass=Closure]"
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/873863767",
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      }
+    ],
+    "function/308590446": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      }
+    ],
+    "function/310648840": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/123297685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/123297685",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/317451330": [
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331545422",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/716694085",
+        "mask": null
+      },
+      {
+        "id": "function/716694085",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/319720211": [
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/355012434",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      }
+    ],
+    "function/321900710": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      }
+    ],
+    "function/331545422": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/536333412",
+        "mask": null
+      }
+    ],
+    "function/335045122": [
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      }
+    ],
+    "function/337498518": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1041854750",
+        "mask": null
+      },
+      {
+        "id": "function/1041854750",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/351876786",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/469917674",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864812824",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      }
+    ],
+    "function/339189097": [
+      {
+        "id": "field/840751619",
+        "mask": null
+      },
+      {
+        "id": "function/355012434",
+        "mask": null
+      }
+    ],
+    "function/339437005": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/340789555": [
+      {
+        "id": "function/1041854750",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/598784217",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      }
+    ],
+    "function/347168225": [
+      {
+        "id": "function/479155815",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      }
+    ],
+    "function/347710223": [
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      }
+    ],
+    "function/351876786": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/110436482",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/110436482",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/133009644",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/25816218",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/351876786",
+        "mask": null
+      },
+      {
+        "id": "function/357766771",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/469917674",
+        "mask": null
+      },
+      {
+        "id": "function/49259755",
+        "mask": null
+      },
+      {
+        "id": "function/499032542",
+        "mask": null
+      },
+      {
+        "id": "function/501313936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/501313936",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/667416185",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/72073576",
+        "mask": null
+      },
+      {
+        "id": "function/74759397",
+        "mask": null
+      },
+      {
+        "id": "function/74759397",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/801619570",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864812824",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/355012434": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1042482096",
+        "mask": null
+      },
+      {
+        "id": "function/1042482096",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/109394176",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/167405219",
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
+      },
+      {
+        "id": "function/173469993",
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/302617892",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/440018750",
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/944731702",
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/962973203",
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/991909617",
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
+      }
+    ],
+    "function/357766771": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1046014704",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/750091346",
+        "mask": null
+      },
+      {
+        "id": "function/750091346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      }
+    ],
+    "function/358340511": [
+      {
+        "id": "function/335045122",
+        "mask": "inlined"
+      }
+    ],
+    "function/361871829": [
+      {
+        "id": "function/319720211",
+        "mask": null
+      },
+      {
+        "id": "function/949168228",
+        "mask": null
+      },
+      {
+        "id": "function/949168228",
+        "mask": "inlined"
+      }
+    ],
+    "function/369614033": [
+      {
+        "id": "function/1060110710",
+        "mask": null
+      },
+      {
+        "id": "function/1060110710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/580865640",
+        "mask": null
+      }
+    ],
+    "function/372037963": [
+      {
+        "id": "field/1047452024",
+        "mask": null
+      },
+      {
+        "id": "function/540949546",
+        "mask": null
+      },
+      {
+        "id": "function/540949546",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/540949546",
+        "mask": "inlined"
+      }
+    ],
+    "function/374894045": [
+      {
+        "id": "function/1005175086",
+        "mask": null
+      },
+      {
+        "id": "function/1005175086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/308590446",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      }
+    ],
+    "function/388977016": [
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      }
+    ],
     "function/399195151": [
       {
+        "id": "function/550544609",
+        "mask": "inlined"
+      },
+      {
         "id": "function/606513838",
         "mask": "inlined"
       }
     ],
-    "function/531925466": [
+    "function/400204433": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/418915149",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/501313936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/501313936",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/638672010",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|exact=JSString]"
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/405266426": [
+      {
+        "id": "function/977867690",
+        "mask": "inlined"
+      }
+    ],
+    "function/405722833": [
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      }
+    ],
+    "function/407860982": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/409628970": [
+      {
+        "id": "function/1007804883",
+        "mask": null
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": null
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/321900710",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/619610668",
+        "mask": null
+      },
+      {
+        "id": "function/619610668",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/63055866",
+        "mask": null
+      },
+      {
+        "id": "function/63055866",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/689230944",
+        "mask": null
+      },
+      {
+        "id": "function/695455779",
+        "mask": null
+      },
+      {
+        "id": "function/72073576",
+        "mask": null
+      }
+    ],
+    "function/412727111": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      }
+    ],
+    "function/417411809": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/418915149": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/714600619",
+        "mask": null
+      }
+    ],
+    "function/425183906": [
+      {
+        "id": "field/914116059",
+        "mask": null
+      }
+    ],
+    "function/435575019": [
+      {
+        "id": "function/1051093947",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/150705145",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/167405219",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/173469993",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/339189097",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/369614033",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/425183906",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/440018750",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/464959827",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/474133145",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/550544609",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/565013754",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/658851039",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/730595126",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/745741399",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/842507496",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/848267879",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/944731702",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/962973203",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/991909617",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/436761607": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      }
+    ],
+    "function/440018750": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/445547062": [
+      {
+        "id": "function/1051093947",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/150705145",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167405219",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/173469993",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/339189097",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/369614033",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/425183906",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/440018750",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/464959827",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/474133145",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/550544609",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/565013754",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/658851039",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/679532174",
+        "mask": null
+      },
+      {
+        "id": "function/730595126",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/745741399",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/842507496",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/848267879",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/944731702",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/991909617",
+        "mask": "[subclass=Object]"
+      }
+    ],
+    "function/447148542": [
+      {
+        "id": "function/46139592",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
+      }
+    ],
+    "function/448227795": [
+      {
+        "id": "field/4524053",
+        "mask": null
+      }
+    ],
+    "function/464959827": [
+      {
+        "id": "field/4524053",
+        "mask": null
+      },
+      {
+        "id": "field/509005655",
+        "mask": null
+      },
+      {
+        "id": "field/727752212",
+        "mask": null
+      },
+      {
+        "id": "field/759319863",
+        "mask": null
+      },
+      {
+        "id": "function/1024465827",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/275271990",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/355012434",
+        "mask": null
+      },
+      {
+        "id": "function/448227795",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/539017937",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/620005669",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/717852932",
+        "mask": "[subclass=ArgumentError]"
+      }
+    ],
+    "function/469917674": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/351876786",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/474133145": [
+      {
+        "id": "field/140571055",
+        "mask": null
+      }
+    ],
+    "function/476860251": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/906797235",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/479155815": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/629344964",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/629344964",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/983353088",
+        "mask": null
+      }
+    ],
+    "function/481740897": [
+      {
+        "id": "function/822673760",
+        "mask": null
+      },
+      {
+        "id": "function/822673760",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      }
+    ],
+    "function/489157293": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/893622437",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/95816591",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/95816591",
+        "mask": null
+      },
+      {
+        "id": "function/95816591",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/494259168": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1013396128",
+        "mask": null
+      },
+      {
+        "id": "function/1013396128",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": null
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/212177062",
+        "mask": null
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/308590446",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/447148542",
+        "mask": null
+      },
+      {
+        "id": "function/447148542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/46139592",
+        "mask": null
+      },
+      {
+        "id": "function/489157293",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/746055337",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/746055337",
+        "mask": null
+      },
+      {
+        "id": "function/765963979",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852359021",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852359021",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/964398244",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/495511570": [
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51389871",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51389871",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51389871",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/499032542": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/111998270",
+        "mask": null
+      },
+      {
+        "id": "function/111998270",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/294207503",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      }
+    ],
+    "function/501313936": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      }
+    ],
+    "function/504534695": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/66145123",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/512286296": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/200890444",
+        "mask": null
+      },
+      {
+        "id": "function/200890444",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/976856253",
+        "mask": null
+      },
+      {
+        "id": "function/976856253",
+        "mask": "inlined"
+      }
+    ],
+    "function/514473880": [
+      {
+        "id": "function/301930977",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/301930977",
+        "mask": "inlined"
+      }
+    ],
+    "function/521874428": [
+      {
+        "id": "field/1047452024",
+        "mask": null
+      }
+    ],
+    "function/522380745": [
+      {
+        "id": "function/1017330300",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1017330300",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      }
+    ],
+    "function/523878647": [
+      {
+        "id": "function/820169204",
+        "mask": "inlined"
+      }
+    ],
+    "function/535892822": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/638672010",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/638672010",
+        "mask": null
+      },
+      {
+        "id": "function/638672010",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/536333412": [
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/556772480",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556772480",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791619288",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/544746737": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/701409225",
+        "mask": null
+      },
+      {
+        "id": "function/701409225",
+        "mask": "inlined"
+      }
+    ],
+    "function/550912538": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/923456660",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/552658686": [
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/729126945",
+        "mask": "inlined"
+      }
+    ],
+    "function/556772480": [
+      {
+        "id": "function/1002613704",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1002613704",
+        "mask": "inlined"
+      }
+    ],
+    "function/559097830": [
+      {
+        "id": "function/196790253",
+        "mask": null
+      }
+    ],
+    "function/564449621": [
+      {
+        "id": "function/1017330300",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      }
+    ],
+    "function/575664914": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/110436482",
+        "mask": null
+      },
+      {
+        "id": "function/110436482",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/400204433",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/418915149",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|exact=JSString]"
+      },
+      {
+        "id": "function/74759397",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/74759397",
+        "mask": null
+      },
+      {
+        "id": "function/77140749",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/999221506",
+        "mask": null
+      }
+    ],
+    "function/578373084": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/580865640": [
+      {
+        "id": "field/1047452024",
+        "mask": null
+      },
+      {
+        "id": "field/1047452024",
+        "mask": null
+      },
+      {
+        "id": "field/522978319",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/210296716",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/210296716",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/335045122",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": null
+      },
+      {
+        "id": "function/372037963",
+        "mask": null
+      },
+      {
+        "id": "function/372037963",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/418915149",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/507333070",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/540949546",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/778541068",
+        "mask": null
+      },
+      {
+        "id": "function/789545114",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/843997665",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/843997665",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/583427045": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      }
+    ],
+    "function/589675001": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/589677414": [
+      {
+        "id": "field/525672864",
+        "mask": null
+      }
+    ],
+    "function/592658352": [
+      {
+        "id": "function/195587727",
+        "mask": null
+      },
+      {
+        "id": "function/195587727",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/481740897",
+        "mask": null
+      }
+    ],
+    "function/598215859": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/614790632",
+        "mask": null
+      },
+      {
+        "id": "function/614790632",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/620456164",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/820496795",
+        "mask": null
+      },
+      {
+        "id": "function/941664110",
+        "mask": null
+      }
+    ],
+    "function/599340356": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/71377758",
+        "mask": null
+      },
+      {
+        "id": "function/71377758",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/71377758",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/89307104",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/89307104",
+        "mask": null
+      },
+      {
+        "id": "function/89307104",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/992679489",
+        "mask": null
+      },
+      {
+        "id": "function/992679489",
+        "mask": "inlined"
+      }
+    ],
+    "function/603464342": [
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/171156881",
+        "mask": null
+      },
+      {
+        "id": "function/181998699",
+        "mask": null
+      },
+      {
+        "id": "function/181998699",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/25075263",
+        "mask": null
+      },
+      {
+        "id": "function/266572710",
+        "mask": null
+      },
+      {
+        "id": "function/266572710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/765963979",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/893622437",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/95816591",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/95816591",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/603807818": [
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      }
+    ],
+    "function/609214736": [
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/744088497",
+        "mask": "inlined"
+      }
+    ],
+    "function/616327902": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/492521940",
+        "mask": null
+      },
+      {
+        "id": "function/492521940",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/49259755",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/65470864",
+        "mask": null
+      },
+      {
+        "id": "function/65470864",
+        "mask": "inlined"
+      }
+    ],
+    "function/619610668": [
+      {
+        "id": "function/695455779",
+        "mask": "inlined"
+      }
+    ],
+    "function/620005669": [
+      {
+        "id": "field/727752212",
+        "mask": null
+      },
+      {
+        "id": "field/954188953",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      }
+    ],
+    "function/620456164": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/104513495",
+        "mask": null
+      },
+      {
+        "id": "function/104513495",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/104513495",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/110436482",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/110436482",
+        "mask": null
+      },
+      {
+        "id": "function/110436482",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/195520573",
+        "mask": null
+      },
+      {
+        "id": "function/195520573",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/245364359",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/264634420",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/407860982",
+        "mask": null
+      },
+      {
+        "id": "function/407860982",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/407860982",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/603464342",
+        "mask": null
+      },
+      {
+        "id": "function/620456164",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/666277254",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/74759397",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/74759397",
+        "mask": null
+      },
+      {
+        "id": "function/74759397",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/881419002",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/881419002",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/631550768": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      }
+    ],
+    "function/631685979": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/422605719",
+        "mask": null
+      },
+      {
+        "id": "function/422605719",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      }
+    ],
+    "function/632397862": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/637526703": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1017330300",
+        "mask": null
+      },
+      {
+        "id": "function/1017330300",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/637790089": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/616327902",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/968631083",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/638672010": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/640394917": [
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/362880086",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/947722698",
+        "mask": null
+      },
+      {
+        "id": "function/947722698",
+        "mask": "inlined"
+      }
+    ],
+    "function/656417734": [
+      {
+        "id": "function/481740897",
+        "mask": null
+      },
+      {
+        "id": "function/893622437",
+        "mask": null
+      },
+      {
+        "id": "function/893622437",
+        "mask": "inlined"
+      }
+    ],
+    "function/658851039": [
+      {
+        "id": "field/840751619",
+        "mask": null
+      },
+      {
+        "id": "function/355012434",
+        "mask": null
+      }
+    ],
+    "function/659844135": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/393060060",
+        "mask": null
+      },
+      {
+        "id": "function/393060060",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/478486472",
+        "mask": null
+      },
+      {
+        "id": "function/478486472",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885768717",
+        "mask": null
+      },
+      {
+        "id": "function/885768717",
+        "mask": "inlined"
+      }
+    ],
+    "function/666277254": [
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/338600142",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/457543033",
+        "mask": null
+      },
+      {
+        "id": "function/457543033",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/457543033",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/501313936",
+        "mask": null
+      },
+      {
+        "id": "function/501313936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/501313936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/620456164",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/781422565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/807601340",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/667416185": [
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/301930977",
+        "mask": null
+      },
+      {
+        "id": "function/304695429",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/304695429",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/338600142",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/358028985",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358028985",
+        "mask": null
+      },
+      {
+        "id": "function/395359035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/395359035",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/469917674",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/514473880",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/514473880",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/807601340",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/945625581",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/668300184": [
+      {
+        "id": "function/253794122",
+        "mask": null
+      }
+    ],
+    "function/671381451": [
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      }
+    ],
+    "function/675189669": [
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      }
+    ],
+    "function/679532174": [
+      {
+        "id": "function/606572177",
+        "mask": null
+      },
+      {
+        "id": "function/606572177",
+        "mask": "inlined"
+      }
+    ],
+    "function/685278809": [
+      {
+        "id": "function/479155815",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      }
+    ],
+    "function/689230944": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/748762392",
+        "mask": null
+      },
+      {
+        "id": "function/748762392",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      }
+    ],
+    "function/695455779": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      }
+    ],
+    "function/697367085": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/697367085",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/709915292": [
+      {
+        "id": "function/729126945",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      }
+    ],
+    "function/713151216": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/714600619": [
+      {
+        "id": "field/954188953",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/144469777",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/186999466",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/349997389",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/349997389",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/521874428",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/606572177",
+        "mask": null
+      },
+      {
+        "id": "function/606572177",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/985926244",
+        "mask": null
+      },
+      {
+        "id": "function/985926244",
+        "mask": "inlined"
+      }
+    ],
+    "function/726979110": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/606572177",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/744088497": [
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51389871",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/745741399": [
+      {
+        "id": "field/376257386",
+        "mask": null
+      },
+      {
+        "id": "function/355012434",
+        "mask": null
+      }
+    ],
+    "function/748762392": [
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      }
+    ],
+    "function/750091346": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      }
+    ],
+    "function/764092534": [
+      {
+        "id": "function/438117901",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/438117901",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      }
+    ],
+    "function/765963979": [
+      {
+        "id": "field/511786572",
+        "mask": null
+      },
+      {
+        "id": "field/511786572",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1036730465",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/426435180",
+        "mask": null
+      },
+      {
+        "id": "function/426435180",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/710793957",
+        "mask": null
+      },
+      {
+        "id": "function/710793957",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747174278",
+        "mask": null
+      },
+      {
+        "id": "function/806059380",
+        "mask": null
+      },
+      {
+        "id": "function/806059380",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      }
+    ],
+    "function/778541068": [
+      {
+        "id": "field/522978319",
+        "mask": null
+      }
+    ],
+    "function/781422565": [
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      }
+    ],
+    "function/788412943": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/681643547",
+        "mask": null
+      },
+      {
+        "id": "function/681643547",
+        "mask": "inlined"
+      }
+    ],
+    "function/789545114": [
+      {
+        "id": "field/504170901",
+        "mask": null
+      },
+      {
+        "id": "function/1027535878",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/388977016",
+        "mask": null
+      },
+      {
+        "id": "function/388977016",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/388977016",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/388977016",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/388977016",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/405266426",
+        "mask": null
+      },
+      {
+        "id": "function/405266426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/507333070",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/773528822",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/773528822",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/950708086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/950708086",
+        "mask": null
+      },
+      {
+        "id": "function/950708086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/950708086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/977867690",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/791619288": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/195587727",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/195587727",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/301370282",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/57613304",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57613304",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/629344964",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/629344964",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/689230944",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/866251913",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/791758355": [
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/765963979",
+        "mask": null
+      },
+      {
+        "id": "function/890489632",
+        "mask": null
+      },
+      {
+        "id": "function/890489632",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      }
+    ],
+    "function/801619570": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1017330300",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1041854750",
+        "mask": null
+      },
+      {
+        "id": "function/104513495",
+        "mask": null
+      },
+      {
+        "id": "function/104513495",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/253560656",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/253560656",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/564449621",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/564449621",
+        "mask": null
+      },
+      {
+        "id": "function/631685979",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": null
+      }
+    ],
+    "function/807434881": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/5571021",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/820496795": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/820496795",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/821928955": [
+      {
+        "id": "function/1013396128",
+        "mask": null
+      },
+      {
+        "id": "function/1013396128",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/266327677",
+        "mask": null
+      },
+      {
+        "id": "function/266327677",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/266327677",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/831592736": [
+      {
+        "id": "function/1002613704",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1002613704",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1002613704",
+        "mask": "inlined"
+      }
+    ],
+    "function/834015338": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/639918601",
+        "mask": null
+      },
+      {
+        "id": "field/639918601",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490424967",
+        "mask": null
+      },
+      {
+        "id": "function/490424967",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/491504779",
+        "mask": null
+      },
+      {
+        "id": "function/491504779",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/801619570",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      }
+    ],
+    "function/842507496": [
+      {
+        "id": "field/994897322",
+        "mask": null
+      }
+    ],
+    "function/848267879": [
+      {
+        "id": "field/653339731",
+        "mask": null
+      }
+    ],
+    "function/848873059": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/864228238": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/864812824": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/337498518",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/552658686",
+        "mask": null
+      },
+      {
+        "id": "function/552658686",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/631685979",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/729126945",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      }
+    ],
+    "function/864835321": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/865184799": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/923456660",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/869103502": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/208283907",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/231618349",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/308590446",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/950377748",
+        "mask": null
+      },
+      {
+        "id": "function/952130975",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/952130975",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/873863767": [
+      {
+        "id": "function/599340356",
+        "mask": null
+      }
+    ],
+    "function/881419002": [
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      }
+    ],
+    "function/890489632": [
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      }
+    ],
+    "function/892227919": [
+      {
+        "id": "function/890489632",
+        "mask": "inlined"
+      }
+    ],
+    "function/896138477": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/899124813": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589677414",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/841192189",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/841192189",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/906797235",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/906797235": [
+      {
+        "id": "field/302220255",
+        "mask": null
+      }
+    ],
+    "function/911398026": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      }
+    ],
+    "function/922651191": [
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/495511570",
+        "mask": "inlined"
+      }
+    ],
+    "function/922840913": [
+      {
+        "id": "field/386221903",
+        "mask": null
+      },
+      {
+        "id": "field/386221903",
+        "mask": null
+      },
+      {
+        "id": "field/588058281",
+        "mask": null
+      },
+      {
+        "id": "field/588058281",
+        "mask": null
+      },
+      {
+        "id": "field/636292115",
+        "mask": null
+      },
+      {
+        "id": "field/636292115",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/293305096",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/293305096",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/659844135",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/762030080",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/762030080",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/899124813",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/923456660": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/319720211",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/941664110",
+        "mask": null
+      },
+      {
+        "id": "function/949168228",
+        "mask": null
+      }
+    ],
+    "function/929852730": [
+      {
+        "id": "field/239805186",
+        "mask": null
+      },
+      {
+        "id": "field/787049592",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/797484809",
+        "mask": null
+      },
+      {
+        "id": "function/797484809",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864971496",
+        "mask": null
+      },
+      {
+        "id": "function/864971496",
+        "mask": "inlined"
+      }
+    ],
+    "function/935592878": [
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/304695429",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358028985",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/395359035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/438117901",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/438117901",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/495511570",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/514473880",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/629344964",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/941664110": [
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/504534695",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/556772480",
+        "mask": null
+      },
+      {
+        "id": "function/556772480",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/697367085",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/944731702": [
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/873863767",
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      }
+    ],
+    "function/944782426": [
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/945625581": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/351876786",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/873774381",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/947722698": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      }
+    ],
+    "function/952130975": [
+      {
+        "id": "function/231618349",
+        "mask": "inlined"
+      }
+    ],
+    "function/956458971": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/960612858": [
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      }
+    ],
+    "function/964398244": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      }
+    ],
+    "function/968631083": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/968631083",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/973238019": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/123297685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/123297685",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/976856253": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      }
+    ],
+    "function/977037784": [
+      {
+        "id": "function/1041854750",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      }
+    ],
+    "function/982751380": [
+      {
+        "id": "function/301370282",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      }
+    ],
+    "function/983353088": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167405219",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/72073576",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": null
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
+      }
+    ],
+    "function/999221506": [
+      {
+        "id": "function/745680035",
+        "mask": null
+      },
+      {
+        "id": "function/745680035",
+        "mask": "inlined"
+      }
+    ],
+    "function/1010766199": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      }
+    ],
+    "function/1027535878": [
+      {
+        "id": "field/112618843",
+        "mask": null
+      },
+      {
+        "id": "field/237146195",
+        "mask": null
+      },
+      {
+        "id": "field/504170901",
+        "mask": "[exact=ArrayIterator]"
+      },
+      {
+        "id": "field/577142640",
+        "mask": null
+      },
+      {
+        "id": "field/577142640",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/544746737",
+        "mask": null
+      }
+    ],
+    "function/1032715322": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/1036730465": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": null
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1013396128",
+        "mask": null
+      },
+      {
+        "id": "function/1013396128",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": null
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/1036180926",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1050426556",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1050426556",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/133009644",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": null
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/2781902",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/2781902",
+        "mask": null
+      },
+      {
+        "id": "function/301930977",
+        "mask": null
+      },
+      {
+        "id": "function/304695429",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/347168225",
+        "mask": null
+      },
+      {
+        "id": "function/347710223",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/347710223",
+        "mask": null
+      },
+      {
+        "id": "function/347710223",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/347710223",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/347710223",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/357766771",
+        "mask": null
+      },
+      {
+        "id": "function/358028985",
+        "mask": null
+      },
+      {
+        "id": "function/359606692",
+        "mask": null
+      },
+      {
+        "id": "function/395359035",
+        "mask": null
+      },
+      {
+        "id": "function/409628970",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
+        "mask": null
+      },
+      {
+        "id": "function/477858577",
+        "mask": null
+      },
+      {
+        "id": "function/477858577",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/479155815",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/49259755",
+        "mask": null
+      },
+      {
+        "id": "function/494259168",
+        "mask": null
+      },
+      {
+        "id": "function/495511570",
+        "mask": null
+      },
+      {
+        "id": "function/499032542",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/512286296",
+        "mask": null
+      },
+      {
+        "id": "function/51389871",
+        "mask": null
+      },
+      {
+        "id": "function/514473880",
+        "mask": null
+      },
+      {
+        "id": "function/517189775",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/523878647",
+        "mask": null
+      },
+      {
+        "id": "function/523878647",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57613304",
+        "mask": null
+      },
+      {
+        "id": "function/57613304",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/609214736",
+        "mask": null
+      },
+      {
+        "id": "function/609214736",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/629344964",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/685278809",
+        "mask": null
+      },
+      {
+        "id": "function/689230944",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/712382592",
+        "mask": null
+      },
+      {
+        "id": "function/712382592",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/744088497",
+        "mask": null
+      },
+      {
+        "id": "function/746055337",
+        "mask": null
+      },
+      {
+        "id": "function/746055337",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/78867062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/78867062",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/801619570",
+        "mask": null
+      },
+      {
+        "id": "function/820169204",
+        "mask": null
+      },
+      {
+        "id": "function/821928955",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/864812824",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/866251913",
+        "mask": null
+      },
+      {
+        "id": "function/875358741",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/875358741",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/875358741",
+        "mask": null
+      },
+      {
+        "id": "function/875358741",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/922651191",
+        "mask": null
+      },
+      {
+        "id": "function/922651191",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/935592878",
+        "mask": null
+      },
+      {
+        "id": "function/935592878",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/1042482096": [
+      {
+        "id": "function/109394176",
+        "mask": "inlined"
+      }
+    ],
+    "function/1046014704": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/883935916",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/883935916",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/1050426556": [
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1069756346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/495511570",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/875358741",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      }
+    ],
+    "function/1051093947": [
+      {
+        "id": "function/295807328",
+        "mask": null
+      }
+    ],
+    "function/1068396938": [
+      {
+        "id": "field/239805186",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/105655227",
+        "mask": null
+      },
+      {
+        "id": "function/105655227",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/797484809",
+        "mask": null
+      },
+      {
+        "id": "function/797484809",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/1070901287": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      }
+    ],
+    "function/1072179150": [
       {
         "id": "function/399195151",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/399195151",
         "mask": "inlined"
       },
       {
+        "id": "function/550544609",
+        "mask": null
+      },
+      {
         "id": "function/606513838",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/864228238",
-        "mask": "null"
-      },
-      {
-        "id": "function/864228238",
-        "mask": "null"
+        "mask": null
       }
     ]
   },
   "dependencies": {},
   "outputUnits": [
     {
-      "id": "outputUnit/987444055",
+      "id": "outputUnit/669725655",
       "kind": "outputUnit",
-      "name": null,
-      "size": 10324,
-      "imports": [
-        null
-      ]
+      "name": "main",
+      "size": 94182,
+      "filename": "out.js",
+      "imports": []
     }
   ],
   "dump_version": 5,
   "deferredFiles": {},
-  "dump_minor_version": "0",
+  "dump_minor_version": 1,
   "program": {
-    "entrypoint": "function/531925466",
-    "size": 10324,
-    "dart2jsVersion": "1.23.0-dev.11.7",
-    "compilationMoment": "2017-04-17 09:46:41.661617",
-    "compilationDuration": 357402,
-    "toJsonDuration": 4000,
+    "entrypoint": "function/1072179150",
+    "size": 94182,
+    "dart2jsVersion": null,
+    "compilationMoment": "2021-09-27 15:32:00.380236",
+    "compilationDuration": 2848001,
+    "toJsonDuration": 3000,
     "dumpInfoDuration": 0,
     "noSuchMethodEnabled": false,
+    "isRuntimeTypeUsed": false,
+    "isIsolateInUse": false,
+    "isFunctionApplyUsed": false,
+    "isMirrorsUsed": false,
     "minified": false
   }
 }
\ No newline at end of file
diff --git a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
index 7098f4a..490a537 100644
--- a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
+++ b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
@@ -5,52 +5,51 @@
         "id": "library/174368900",
         "kind": "library",
         "name": "_foreign_helper",
-        "size": 65,
+        "size": 82,
         "children": [
           "class/949988971"
         ],
         "canonicalUri": "dart:_foreign_helper"
       },
-      "237882207": {
-        "id": "library/237882207",
+      "227349358": {
+        "id": "library/227349358",
         "kind": "library",
-        "name": "<unnamed>",
-        "size": 0,
+        "name": "_late_helper",
+        "size": 593,
         "children": [
-          "field/162036481",
-          "field/241563122"
+          "class/745154066",
+          "function/374894045"
         ],
-        "canonicalUri": "dart:_async_await_error_codes"
+        "canonicalUri": "dart:_late_helper"
       },
       "238986171": {
         "id": "library/238986171",
         "kind": "library",
         "name": "dart2js._js_primitives",
-        "size": 483,
+        "size": 450,
         "children": [
           "function/864228238"
         ],
         "canonicalUri": "dart:_js_primitives"
       },
-      "239009133": {
-        "id": "library/239009133",
+      "318986989": {
+        "id": "library/318986989",
         "kind": "library",
         "name": "<unnamed>",
-        "size": 0,
+        "size": 872,
         "children": [
-          "field/83424460"
+          "function/77034453"
         ],
-        "canonicalUri": "file:///usr/local/google/home/lorenvs/git/dart2js_info/test/hello_world_deferred/deferred_import.dart"
+        "canonicalUri": "file:///usr/local/google/home/joshualitt/a/sdk/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart"
       },
       "325218131": {
         "id": "library/325218131",
         "kind": "library",
         "name": "_interceptors",
-        "size": 8861,
+        "size": 9790,
         "children": [
           "class/86936801",
           "class/245082925",
-          "class/359696216",
           "class/418854932",
           "class/506846212",
           "class/523978038",
@@ -58,11 +57,10 @@
           "class/699388972",
           "class/793539876",
           "class/851867060",
+          "class/978801172",
           "class/1003011102",
           "class/1019758482",
-          "class/1034266724",
-          "field/406601007",
-          "function/821285776"
+          "class/1034266724"
         ],
         "canonicalUri": "dart:_interceptors"
       },
@@ -70,45 +68,142 @@
         "id": "library/527944179",
         "kind": "library",
         "name": "dart._js_names",
-        "size": 137,
+        "size": 0,
         "children": [
-          "function/203738274",
-          "function/508874693"
+          "function/745680035"
         ],
         "canonicalUri": "dart:_js_names"
       },
+      "579882441": {
+        "id": "library/579882441",
+        "kind": "library",
+        "name": "rti",
+        "size": 53090,
+        "children": [
+          "class/121755874",
+          "class/214521760",
+          "class/324095577",
+          "class/457024667",
+          "class/642774187",
+          "class/768954396",
+          "class/769860706",
+          "class/926198907",
+          "class/1070435853",
+          "function/11678628",
+          "function/21938161",
+          "function/25075263",
+          "function/66145123",
+          "function/70158663",
+          "function/77140749",
+          "function/83342486",
+          "function/89307104",
+          "function/120424305",
+          "function/132742275",
+          "function/160933185",
+          "function/167217604",
+          "function/195520573",
+          "function/207792788",
+          "function/216705978",
+          "function/247461665",
+          "function/253415970",
+          "function/287475886",
+          "function/310648840",
+          "function/311482390",
+          "function/317451330",
+          "function/331545422",
+          "function/331565025",
+          "function/339437005",
+          "function/351876786",
+          "function/400204433",
+          "function/407860982",
+          "function/417411809",
+          "function/469917674",
+          "function/502696664",
+          "function/504534695",
+          "function/520073200",
+          "function/535892822",
+          "function/536333412",
+          "function/550912538",
+          "function/556772480",
+          "function/575664914",
+          "function/578373084",
+          "function/583427045",
+          "function/589675001",
+          "function/598215859",
+          "function/603464342",
+          "function/603807818",
+          "function/614790632",
+          "function/620456164",
+          "function/631550768",
+          "function/632397862",
+          "function/638672010",
+          "function/640394917",
+          "function/666277254",
+          "function/667416185",
+          "function/680877684",
+          "function/702246006",
+          "function/713151216",
+          "function/777322353",
+          "function/820496795",
+          "function/831592736",
+          "function/848873059",
+          "function/864835321",
+          "function/865184799",
+          "function/881419002",
+          "function/890489632",
+          "function/892227919",
+          "function/896138477",
+          "function/911398026",
+          "function/911422554",
+          "function/923456660",
+          "function/941664110",
+          "function/945625581",
+          "function/956458971",
+          "function/968631083",
+          "function/973238019",
+          "function/982751380",
+          "function/999221506",
+          "function/1032715322",
+          "function/1068396938"
+        ],
+        "canonicalUri": "dart:_rti"
+      },
       "631335891": {
         "id": "library/631335891",
         "kind": "library",
         "name": "dart.core",
-        "size": 9004,
+        "size": 9187,
         "children": [
           "class/36312556",
           "class/56472591",
-          "class/70813553",
           "class/93352366",
           "class/143626168",
           "class/175705485",
           "class/217690375",
           "class/293821936",
-          "class/314168330",
-          "class/335005182",
           "class/347664883",
           "class/351911148",
           "class/481500691",
           "class/542248491",
-          "class/562873772",
           "class/595024907",
           "class/627219877",
           "class/631051714",
-          "class/635685670",
+          "class/786261494",
           "class/803883908",
+          "class/873344497",
           "class/893386369",
           "class/948502579",
           "class/959990109",
           "class/974704527",
           "class/991730135",
-          "class/1052045656",
+          "classType/335005182",
+          "classType/347664884",
+          "classType/351911149",
+          "classType/481500692",
+          "classType/562873772",
+          "classType/627219878",
+          "classType/635685670",
+          "classType/959990110",
           "field/261042870",
           "function/399195151"
         ],
@@ -118,16 +213,13 @@
         "id": "library/689380639",
         "kind": "library",
         "name": "dart._internal",
-        "size": 3245,
+        "size": 788,
         "children": [
-          "class/60704969",
-          "class/171867442",
-          "class/202804702",
-          "class/365655194",
-          "class/540398347",
-          "class/680257415",
-          "class/737466373",
+          "class/43993131",
+          "class/690322225",
           "field/908476008",
+          "function/53371910",
+          "function/203929913",
           "function/606513838"
         ],
         "canonicalUri": "dart:_internal"
@@ -136,37 +228,35 @@
         "id": "library/754126564",
         "kind": "library",
         "name": "dart.collection",
-        "size": 10695,
+        "size": 7914,
         "children": [
           "class/113750884",
           "class/123522748",
           "class/143510818",
           "class/476286669",
+          "class/497663918",
           "class/607623563",
           "class/614050497",
           "class/748502014",
           "class/758572498",
           "class/812154630",
           "class/868658259",
-          "class/943457796",
-          "class/975959345",
           "class/1059387371",
           "class/1070558590",
           "field/522978319",
-          "function/778541068",
-          "function/921677904"
+          "function/778541068"
         ],
         "canonicalUri": "dart:collection"
       },
-      "934372066": {
-        "id": "library/934372066",
+      "828455743": {
+        "id": "library/828455743",
         "kind": "library",
-        "name": "<unnamed>",
-        "size": 996,
+        "name": "dart2js._recipe_syntax",
+        "size": 0,
         "children": [
-          "function/921486255"
+          "class/1013977545"
         ],
-        "canonicalUri": "file:///usr/local/google/home/lorenvs/git/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart"
+        "canonicalUri": "dart:_recipe_syntax"
       },
       "965528565": {
         "id": "library/965528565",
@@ -175,16 +265,8 @@
         "size": 0,
         "children": [
           "class/73206861",
-          "class/716671121",
-          "field/43092689",
-          "field/55541185",
-          "field/110087164",
-          "field/125761045",
-          "field/214758996",
-          "field/637404994",
-          "field/698350444",
-          "field/879032432",
-          "field/1020283310"
+          "class/251751824",
+          "class/716671121"
         ],
         "canonicalUri": "dart:_js_embedded_names"
       },
@@ -192,114 +274,74 @@
         "id": "library/966364039",
         "kind": "library",
         "name": "_js_helper",
-        "size": 53313,
+        "size": 50152,
         "children": [
           "class/8008562",
           "class/17649844",
           "class/27679401",
           "class/44790816",
           "class/138211367",
-          "class/156108056",
+          "class/155954474",
           "class/216047131",
-          "class/269073412",
           "class/294355530",
           "class/317291728",
-          "class/324980341",
           "class/354160010",
           "class/373504153",
+          "class/383904536",
           "class/388380492",
           "class/466061502",
           "class/500662026",
           "class/518228506",
-          "class/644348892",
+          "class/572868957",
           "class/692496355",
           "class/722522722",
           "class/742137989",
           "class/790616034",
           "class/866150578",
-          "class/954836234",
-          "class/958488954",
+          "class/1030881768",
           "field/8965675",
           "field/126292751",
           "field/244162491",
-          "field/417944821",
           "field/496557243",
-          "field/526089142",
-          "field/670005717",
+          "field/845351074",
           "field/907727246",
           "field/926265914",
-          "function/21667157",
           "function/53631526",
           "function/64968119",
           "function/79175019",
-          "function/108053021",
           "function/109394176",
-          "function/136972596",
+          "function/131257513",
           "function/163889622",
-          "function/193787732",
+          "function/196790253",
           "function/225159691",
-          "function/230858033",
-          "function/257728434",
           "function/263798810",
-          "function/264370095",
           "function/265638794",
-          "function/268773900",
-          "function/275681184",
-          "function/292889014",
-          "function/299781104",
-          "function/306374693",
+          "function/295807328",
           "function/308590446",
           "function/309114439",
-          "function/310457557",
-          "function/316732114",
           "function/326542993",
           "function/418915149",
-          "function/419713835",
           "function/435575019",
           "function/445547062",
-          "function/467155193",
-          "function/483766990",
           "function/486797615",
-          "function/487598887",
-          "function/491418529",
           "function/499330809",
-          "function/501712645",
           "function/528985088",
+          "function/540076399",
           "function/544746737",
-          "function/551570860",
-          "function/553851206",
-          "function/555987509",
-          "function/560797298",
-          "function/607704865",
+          "function/559097830",
           "function/638664464",
-          "function/639806883",
-          "function/658082982",
-          "function/665676035",
           "function/668300184",
           "function/679532174",
-          "function/689069465",
-          "function/708419578",
-          "function/710092165",
           "function/714600619",
           "function/717561594",
-          "function/722993348",
-          "function/734834560",
-          "function/736875717",
-          "function/737782244",
-          "function/751200407",
+          "function/753586447",
           "function/756575134",
-          "function/764768055",
           "function/772250195",
           "function/788412943",
-          "function/798288240",
-          "function/813370328",
           "function/827571674",
           "function/906921796",
-          "function/967508646",
-          "function/984452543",
+          "function/959492039",
           "function/992679489",
-          "function/1012615396",
-          "function/1049802380",
           "function/1060205580"
         ],
         "canonicalUri": "dart:_js_helper"
@@ -308,7 +350,7 @@
         "id": "library/1052666095",
         "kind": "library",
         "name": "dart.async",
-        "size": 35210,
+        "size": 41242,
         "children": [
           "class/32494041",
           "class/80405414",
@@ -326,12 +368,12 @@
           "class/784178238",
           "class/850763763",
           "class/934351233",
-          "class/952584796",
           "class/1012203707",
           "class/1040168844",
           "class/1059755229",
+          "classType/438137150",
+          "classType/784178239",
           "field/29748263",
-          "field/370436126",
           "field/639289778",
           "field/931441116",
           "field/952591811",
@@ -347,7 +389,6 @@
           "function/337937411",
           "function/364010339",
           "function/412886703",
-          "function/415620823",
           "function/635153575",
           "function/650942169",
           "function/658921946",
@@ -355,7 +396,8 @@
           "function/710611585",
           "function/831655802",
           "function/835692712",
-          "function/887884267"
+          "function/887884267",
+          "function/924450127"
         ],
         "canonicalUri": "dart:async"
       }
@@ -365,7 +407,7 @@
         "id": "class/8008562",
         "kind": "class",
         "name": "DeferredNotLoadedError",
-        "size": 160,
+        "size": 269,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -381,7 +423,7 @@
         "id": "class/17649844",
         "kind": "class",
         "name": "JsNoSuchMethodError",
-        "size": 763,
+        "size": 669,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -399,7 +441,7 @@
         "id": "class/27679401",
         "kind": "class",
         "name": "UnknownJsTypeError",
-        "size": 167,
+        "size": 282,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -415,7 +457,7 @@
         "id": "class/32494041",
         "kind": "class",
         "name": "_TimerImpl",
-        "size": 786,
+        "size": 658,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
@@ -432,7 +474,7 @@
         "id": "class/36312556",
         "kind": "class",
         "name": "ConcurrentModificationError",
-        "size": 473,
+        "size": 423,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -444,11 +486,28 @@
           "function/745741399"
         ]
       },
+      "43993131": {
+        "id": "class/43993131",
+        "kind": "class",
+        "name": "LateError",
+        "size": 241,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/994897322",
+          "function/796762824",
+          "function/842507496",
+          "function/1005175086"
+        ]
+      },
       "44790816": {
         "id": "class/44790816",
         "kind": "class",
         "name": "TearOffClosure",
-        "size": 29,
+        "size": 98,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -460,51 +519,16 @@
         "id": "class/56472591",
         "kind": "class",
         "name": "AssertionError",
-        "size": 0,
+        "size": 302,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/840751619"
-        ]
-      },
-      "60704969": {
-        "id": "class/60704969",
-        "kind": "class",
-        "name": "SubListIterable",
-        "size": 2236,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/689380639",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": [
-          "field/52345936",
-          "field/373519716",
-          "field/850921879",
-          "function/150523169",
-          "function/199851072",
-          "function/494094492",
-          "function/784650927",
-          "function/990521259",
-          "function/1016194181"
-        ]
-      },
-      "70813553": {
-        "id": "class/70813553",
-        "kind": "class",
-        "name": "Iterable",
-        "size": 323,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/631335891",
-        "modifiers": {
-          "abstract": true
-        },
-        "children": [
-          "function/66015995",
-          "function/430236296"
+          "field/840751619",
+          "function/72073576",
+          "function/658851039"
         ]
       },
       "73206861": {
@@ -518,27 +542,7 @@
           "abstract": false
         },
         "children": [
-          "field/159930244",
           "field/190934046",
-          "field/202409972",
-          "field/391942199",
-          "field/422530140",
-          "field/447707988",
-          "field/496083304",
-          "field/586155906",
-          "field/626399440",
-          "field/645423404",
-          "field/667376711",
-          "field/701716969",
-          "field/743971885",
-          "field/842452872",
-          "field/844410756",
-          "field/854910375",
-          "field/864119084",
-          "field/875039735",
-          "field/914172423",
-          "field/960584371",
-          "field/1012317118",
           "field/1019580176"
         ]
       },
@@ -546,25 +550,17 @@
         "id": "class/80405414",
         "kind": "class",
         "name": "_FutureListener",
-        "size": 683,
+        "size": 1615,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/79374407",
           "field/187449514",
           "field/304825305",
           "field/343514633",
-          "field/378321689",
-          "field/421412262",
-          "field/449691021",
-          "field/516194057",
-          "field/708528118",
           "field/714493219",
-          "field/966669333",
-          "field/969673523",
           "field/1055298109",
           "function/39768413",
           "function/68051831",
@@ -573,7 +569,9 @@
           "function/350333970",
           "function/370120278",
           "function/373761717",
+          "function/383496058",
           "function/430787578",
+          "function/432258434",
           "function/552271305",
           "function/692185405",
           "function/748173162",
@@ -587,7 +585,7 @@
         "id": "class/86936801",
         "kind": "class",
         "name": "Interceptor",
-        "size": 341,
+        "size": 358,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -603,7 +601,7 @@
         "id": "class/93352366",
         "kind": "class",
         "name": "CyclicInitializationError",
-        "size": 269,
+        "size": 413,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -619,7 +617,7 @@
         "id": "class/113750884",
         "kind": "class",
         "name": "_LinkedHashSetIterator",
-        "size": 645,
+        "size": 947,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/754126564",
         "modifiers": {
@@ -635,11 +633,35 @@
           "function/834909172"
         ]
       },
+      "121755874": {
+        "id": "class/121755874",
+        "kind": "class",
+        "name": "_FunctionParameters",
+        "size": 198,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/430387875",
+          "field/449743822",
+          "field/884701761",
+          "function/301930977",
+          "function/304695429",
+          "function/338600142",
+          "function/358028985",
+          "function/395359035",
+          "function/514473880",
+          "function/753032370",
+          "function/807601340"
+        ]
+      },
       "123522748": {
         "id": "class/123522748",
         "kind": "class",
         "name": "_LinkedHashSet",
-        "size": 3795,
+        "size": 3477,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/754126564",
         "modifiers": {
@@ -678,35 +700,36 @@
         "id": "class/138211367",
         "kind": "class",
         "name": "BoundClosure",
-        "size": 1734,
+        "size": 717,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/125830184",
-          "field/180845508",
           "field/302220255",
-          "field/435101137",
-          "field/709451133",
-          "field/1061931090",
+          "field/525672864",
+          "field/588058281",
+          "field/636292115",
+          "function/5571021",
           "function/15478302",
-          "function/292195356",
+          "function/180845508",
+          "function/293305096",
           "function/393060060",
           "function/564404904",
+          "function/589677414",
+          "function/659844135",
           "function/705889064",
-          "function/724475372",
           "function/762030080",
-          "function/791079680",
-          "function/906797235"
+          "function/906797235",
+          "function/1061931090"
         ]
       },
       "143510818": {
         "id": "class/143510818",
         "kind": "class",
         "name": "LinkedHashSet",
-        "size": 31,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/754126564",
         "modifiers": {
@@ -720,7 +743,7 @@
         "id": "class/143626168",
         "kind": "class",
         "name": "ArgumentError",
-        "size": 967,
+        "size": 922,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -738,51 +761,26 @@
           "function/885768717"
         ]
       },
-      "156108056": {
-        "id": "class/156108056",
+      "155954474": {
+        "id": "class/155954474",
         "kind": "class",
-        "name": "ReflectionInfo",
-        "size": 756,
+        "name": "_AssertionError",
+        "size": 260,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/116849538",
-          "field/130159427",
-          "field/206386055",
-          "field/259683855",
-          "field/338588500",
-          "field/420557924",
-          "field/446360348",
-          "field/603434183",
-          "field/656800516",
-          "field/840091021",
-          "field/911662921",
-          "function/222294695",
-          "function/684612786"
-        ]
-      },
-      "171867442": {
-        "id": "class/171867442",
-        "kind": "class",
-        "name": "SkipIterable",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/689380639",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": [
-          "field/648221667"
+          "function/339189097",
+          "function/692531098"
         ]
       },
       "175705485": {
         "id": "class/175705485",
         "kind": "class",
         "name": "IndexError",
-        "size": 742,
+        "size": 745,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -800,7 +798,7 @@
         "id": "class/185316425",
         "kind": "class",
         "name": "_Zone",
-        "size": 28,
+        "size": 72,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
@@ -810,17 +808,73 @@
           "function/57158184"
         ]
       },
-      "202804702": {
-        "id": "class/202804702",
+      "214521760": {
+        "id": "class/214521760",
         "kind": "class",
-        "name": "EfficientLengthIterable",
-        "size": 30,
+        "name": "Rti",
+        "size": 514,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/689380639",
+        "parent": "library/579882441",
         "modifiers": {
-          "abstract": true
+          "abstract": false
         },
-        "children": []
+        "children": [
+          "field/111785749",
+          "field/206062167",
+          "field/239805186",
+          "field/242140830",
+          "field/351779368",
+          "field/410674423",
+          "field/511786572",
+          "field/523754696",
+          "field/639918601",
+          "field/787049592",
+          "field/806634540",
+          "field/928850752",
+          "field/946051721",
+          "field/1002990507",
+          "function/25816218",
+          "function/54796797",
+          "function/55984201",
+          "function/74759397",
+          "function/103899378",
+          "function/105655227",
+          "function/110436482",
+          "function/194452894",
+          "function/245364359",
+          "function/264634420",
+          "function/352620724",
+          "function/362880086",
+          "function/405722833",
+          "function/412727111",
+          "function/436761607",
+          "function/467920119",
+          "function/490424967",
+          "function/491504779",
+          "function/492521940",
+          "function/501313936",
+          "function/517327012",
+          "function/522820503",
+          "function/561625953",
+          "function/587828093",
+          "function/598784217",
+          "function/616327902",
+          "function/675189669",
+          "function/697367085",
+          "function/710793957",
+          "function/781422565",
+          "function/791758355",
+          "function/797484809",
+          "function/806059380",
+          "function/864971496",
+          "function/885353355",
+          "function/944782426",
+          "function/947722698",
+          "function/960612858",
+          "function/964398244",
+          "function/1041854750",
+          "function/1070901287"
+        ]
       },
       "216047131": {
         "id": "class/216047131",
@@ -842,7 +896,7 @@
         "id": "class/217690375",
         "kind": "class",
         "name": "_Exception",
-        "size": 121,
+        "size": 181,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -872,7 +926,7 @@
         "id": "class/245082925",
         "kind": "class",
         "name": "JSBool",
-        "size": 225,
+        "size": 239,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -883,26 +937,29 @@
           "function/991909617"
         ]
       },
-      "269073412": {
-        "id": "class/269073412",
+      "251751824": {
+        "id": "class/251751824",
         "kind": "class",
-        "name": "TypeImpl",
+        "name": "RtiUniverseFieldNames",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/965528565",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/70141207",
-          "field/412345286"
+          "field/307514869",
+          "field/558782121",
+          "field/726821079",
+          "field/862009491",
+          "field/1034922434"
         ]
       },
       "293821936": {
         "id": "class/293821936",
         "kind": "class",
         "name": "StringBuffer",
-        "size": 836,
+        "size": 288,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -924,7 +981,7 @@
         "id": "class/294355530",
         "kind": "class",
         "name": "TypeErrorDecoder",
-        "size": 2490,
+        "size": 979,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -960,23 +1017,11 @@
           "function/932567378"
         ]
       },
-      "314168330": {
-        "id": "class/314168330",
-        "kind": "class",
-        "name": "double",
-        "size": 25,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/631335891",
-        "modifiers": {
-          "abstract": true
-        },
-        "children": []
-      },
       "317291728": {
         "id": "class/317291728",
         "kind": "class",
         "name": "Closure",
-        "size": 266,
+        "size": 431,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -988,42 +1033,32 @@
           "function/273024378",
           "function/320253842",
           "function/476860251",
+          "function/807434881",
           "function/899124813",
           "function/922840913",
           "function/1051093947"
         ]
       },
-      "324980341": {
-        "id": "class/324980341",
+      "324095577": {
+        "id": "class/324095577",
         "kind": "class",
-        "name": "TypeErrorImplementation",
-        "size": 0,
+        "name": "_TypeError",
+        "size": 147,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/319720392"
+          "function/361871829",
+          "function/949168228"
         ]
       },
-      "335005182": {
-        "id": "class/335005182",
-        "kind": "class",
-        "name": "num",
-        "size": 28,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/631335891",
-        "modifiers": {
-          "abstract": true
-        },
-        "children": []
-      },
       "347664883": {
         "id": "class/347664883",
         "kind": "class",
         "name": "StackTrace",
-        "size": 28,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -1059,48 +1094,16 @@
           "abstract": false
         },
         "children": [
-          "field/118657756",
+          "function/71377758",
+          "function/353303220",
           "function/507333070",
           "function/540949546",
-          "function/549577701",
+          "function/599340356",
           "function/712365042",
           "function/873863767",
-          "function/890739228",
           "function/993180100"
         ]
       },
-      "359696216": {
-        "id": "class/359696216",
-        "kind": "class",
-        "name": "JSDouble",
-        "size": 30,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/325218131",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": []
-      },
-      "365655194": {
-        "id": "class/365655194",
-        "kind": "class",
-        "name": "ListIterator",
-        "size": 707,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/689380639",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": [
-          "field/153843292",
-          "field/154746101",
-          "field/525450391",
-          "field/626762025",
-          "function/80270395",
-          "function/581270226",
-          "function/1047605700"
-        ]
-      },
       "373504153": {
         "id": "class/373504153",
         "kind": "class",
@@ -1117,11 +1120,27 @@
           "function/950782810"
         ]
       },
+      "383904536": {
+        "id": "class/383904536",
+        "kind": "class",
+        "name": "NullThrownFromJavaScriptException",
+        "size": 339,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/35094111",
+          "function/33492639",
+          "function/608115318"
+        ]
+      },
       "388380492": {
         "id": "class/388380492",
         "kind": "class",
         "name": "ExceptionAndStackTrace",
-        "size": 52,
+        "size": 195,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -1137,7 +1156,7 @@
         "id": "class/410333734",
         "kind": "class",
         "name": "DeferredLoadException",
-        "size": 262,
+        "size": 234,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
@@ -1153,7 +1172,7 @@
         "id": "class/418854932",
         "kind": "class",
         "name": "JSNull",
-        "size": 268,
+        "size": 253,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -1169,24 +1188,39 @@
         "id": "class/438137149",
         "kind": "class",
         "name": "Future",
-        "size": 1279,
+        "size": 1890,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
           "abstract": true
         },
         "children": [
-          "field/1016218670",
           "function/385444888",
           "function/513053773",
           "function/754498726"
         ]
       },
+      "457024667": {
+        "id": "class/457024667",
+        "kind": "class",
+        "name": "_Error",
+        "size": 123,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/914116059",
+          "function/319720211",
+          "function/425183906"
+        ]
+      },
       "466061502": {
         "id": "class/466061502",
         "kind": "class",
         "name": "StaticClosure",
-        "size": 238,
+        "size": 309,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -1201,14 +1235,13 @@
         "id": "class/471305727",
         "kind": "class",
         "name": "Completer",
-        "size": 31,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
           "abstract": true
         },
         "children": [
-          "function/350634082",
           "function/1014821943"
         ]
       },
@@ -1216,7 +1249,7 @@
         "id": "class/476286669",
         "kind": "class",
         "name": "MapMixin",
-        "size": 195,
+        "size": 211,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/754126564",
         "modifiers": {
@@ -1231,7 +1264,7 @@
         "id": "class/481500691",
         "kind": "class",
         "name": "bool",
-        "size": 28,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -1242,11 +1275,23 @@
           "function/808159833"
         ]
       },
+      "497663918": {
+        "id": "class/497663918",
+        "kind": "class",
+        "name": "_SetBase",
+        "size": 129,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
       "500662026": {
         "id": "class/500662026",
         "kind": "class",
         "name": "LinkedHashMapCell",
-        "size": 100,
+        "size": 219,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -1264,7 +1309,7 @@
         "id": "class/506846212",
         "kind": "class",
         "name": "UnknownJavaScriptObject",
-        "size": 38,
+        "size": 134,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -1276,7 +1321,7 @@
         "id": "class/518228506",
         "kind": "class",
         "name": "_StackTrace",
-        "size": 393,
+        "size": 431,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -1293,7 +1338,7 @@
         "id": "class/523978038",
         "kind": "class",
         "name": "JSArray",
-        "size": 3800,
+        "size": 1378,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -1302,19 +1347,20 @@
         "children": [
           "function/80736041",
           "function/144469777",
-          "function/144469778",
           "function/162825675",
-          "function/221934998",
+          "function/231618349",
           "function/369614033",
           "function/405266426",
-          "function/407139250",
           "function/437395524",
-          "function/453686242",
           "function/456567103",
+          "function/476211666",
           "function/478486472",
-          "function/482441661",
+          "function/630788869",
           "function/653699436",
+          "function/869103502",
+          "function/950377748",
           "function/952130975",
+          "function/958066535",
           "function/979933658",
           "function/997099929",
           "function/1024143730"
@@ -1324,7 +1370,7 @@
         "id": "class/535478555",
         "kind": "class",
         "name": "JSInt",
-        "size": 47,
+        "size": 81,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -1332,25 +1378,11 @@
         },
         "children": []
       },
-      "540398347": {
-        "id": "class/540398347",
-        "kind": "class",
-        "name": "ListIterable",
-        "size": 161,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/689380639",
-        "modifiers": {
-          "abstract": true
-        },
-        "children": [
-          "function/852972506"
-        ]
-      },
       "542248491": {
         "id": "class/542248491",
         "kind": "class",
         "name": "StackOverflowError",
-        "size": 121,
+        "size": 240,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -1358,26 +1390,15 @@
         },
         "children": [
           "function/93381370",
-          "function/632290992"
+          "function/632290992",
+          "function/1008070289"
         ]
       },
-      "562873772": {
-        "id": "class/562873772",
-        "kind": "class",
-        "name": "int",
-        "size": 25,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/631335891",
-        "modifiers": {
-          "abstract": true
-        },
-        "children": []
-      },
       "566341130": {
         "id": "class/566341130",
         "kind": "class",
         "name": "_RootZone",
-        "size": 1610,
+        "size": 1901,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
@@ -1391,7 +1412,6 @@
           "function/390828239",
           "function/417406426",
           "function/613322203",
-          "function/633677177",
           "function/644221207",
           "function/888466063",
           "function/904115316",
@@ -1400,11 +1420,23 @@
           "function/1036675160"
         ]
       },
+      "572868957": {
+        "id": "class/572868957",
+        "kind": "class",
+        "name": "Closure0Args",
+        "size": 138,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
       "577121337": {
         "id": "class/577121337",
         "kind": "class",
         "name": "AsyncError",
-        "size": 137,
+        "size": 275,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
@@ -1414,6 +1446,7 @@
           "field/24026359",
           "field/1023319897",
           "function/11804710",
+          "function/593090281",
           "function/613119304"
         ]
       },
@@ -1421,7 +1454,7 @@
         "id": "class/595024907",
         "kind": "class",
         "name": "NullThrownError",
-        "size": 101,
+        "size": 162,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -1450,7 +1483,7 @@
         "id": "class/611525899",
         "kind": "class",
         "name": "_AsyncRun",
-        "size": 688,
+        "size": 1739,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
@@ -1483,7 +1516,7 @@
         "id": "class/627219877",
         "kind": "class",
         "name": "Object",
-        "size": 378,
+        "size": 396,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -1499,7 +1532,7 @@
         "id": "class/631051714",
         "kind": "class",
         "name": "Exception",
-        "size": 28,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -1509,45 +1542,36 @@
           "function/301932486"
         ]
       },
-      "635685670": {
-        "id": "class/635685670",
+      "642774187": {
+        "id": "class/642774187",
         "kind": "class",
-        "name": "String",
-        "size": 28,
+        "name": "_Type",
+        "size": 161,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/631335891",
-        "modifiers": {
-          "abstract": true
-        },
-        "children": []
-      },
-      "644348892": {
-        "id": "class/644348892",
-        "kind": "class",
-        "name": "CastErrorImplementation",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/185234473"
+          "field/924001250",
+          "function/268212636",
+          "function/505296423"
         ]
       },
-      "680257415": {
-        "id": "class/680257415",
+      "690322225": {
+        "id": "class/690322225",
         "kind": "class",
-        "name": "SkipIterator",
-        "size": 0,
+        "name": "NotNullableError",
+        "size": 363,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/689380639",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/51929026",
-          "field/824622307"
+          "field/532403335",
+          "function/18312199",
+          "function/539615930"
         ]
       },
       "692496355": {
@@ -1568,7 +1592,7 @@
         "id": "class/699388972",
         "kind": "class",
         "name": "JSUnmodifiableArray",
-        "size": 29,
+        "size": 164,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -1580,7 +1604,7 @@
         "id": "class/714718140",
         "kind": "class",
         "name": "_AsyncCompleter",
-        "size": 383,
+        "size": 473,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
@@ -1603,27 +1627,15 @@
           "abstract": false
         },
         "children": [
-          "field/17152193",
           "field/153611669",
-          "field/221593932",
-          "field/413692838",
-          "field/434352794",
-          "field/483247773",
-          "field/563519506",
-          "field/618333384",
-          "field/680112395",
-          "field/701363438",
-          "field/793498792",
-          "field/805748014",
-          "field/936474054",
-          "field/1063003009"
+          "field/936474054"
         ]
       },
       "722522722": {
         "id": "class/722522722",
         "kind": "class",
         "name": "JsLinkedHashMap",
-        "size": 5142,
+        "size": 5136,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -1667,7 +1679,7 @@
         "id": "class/733467750",
         "kind": "class",
         "name": "_AsyncCallbackEntry",
-        "size": 41,
+        "size": 170,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
@@ -1679,20 +1691,6 @@
           "function/895978326"
         ]
       },
-      "737466373": {
-        "id": "class/737466373",
-        "kind": "class",
-        "name": "IterableElementError",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/689380639",
-        "modifiers": {
-          "abstract": true
-        },
-        "children": [
-          "function/458931695"
-        ]
-      },
       "742137989": {
         "id": "class/742137989",
         "kind": "class",
@@ -1710,11 +1708,30 @@
           "field/1051861725"
         ]
       },
+      "745154066": {
+        "id": "class/745154066",
+        "kind": "class",
+        "name": "_Cell",
+        "size": 343,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/227349358",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/468492193",
+          "field/707077825",
+          "function/62411321",
+          "function/395066818",
+          "function/517290884",
+          "function/755054712"
+        ]
+      },
       "748502014": {
         "id": "class/748502014",
         "kind": "class",
         "name": "MapBase",
-        "size": 379,
+        "size": 591,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/754126564",
         "modifiers": {
@@ -1728,7 +1745,7 @@
         "id": "class/758572498",
         "kind": "class",
         "name": "SetMixin",
-        "size": 137,
+        "size": 169,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/754126564",
         "modifiers": {
@@ -1738,11 +1755,101 @@
           "function/176570718"
         ]
       },
+      "768954396": {
+        "id": "class/768954396",
+        "kind": "class",
+        "name": "TypeRule",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/46139592",
+          "function/181998699"
+        ]
+      },
+      "769860706": {
+        "id": "class/769860706",
+        "kind": "class",
+        "name": "_Universe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/49259755",
+          "function/57613304",
+          "function/63055866",
+          "function/78867062",
+          "function/83781773",
+          "function/95816591",
+          "function/101848641",
+          "function/111998270",
+          "function/122441553",
+          "function/133009644",
+          "function/148486138",
+          "function/171156881",
+          "function/195587727",
+          "function/200890444",
+          "function/253560656",
+          "function/266572710",
+          "function/294207503",
+          "function/301370282",
+          "function/321900710",
+          "function/337498518",
+          "function/340789555",
+          "function/357766771",
+          "function/422605719",
+          "function/426435180",
+          "function/438117901",
+          "function/447148542",
+          "function/489157293",
+          "function/499032542",
+          "function/512286296",
+          "function/522380745",
+          "function/523878647",
+          "function/552658686",
+          "function/564449621",
+          "function/592658352",
+          "function/619610668",
+          "function/631685979",
+          "function/637526703",
+          "function/637790089",
+          "function/656417734",
+          "function/671381451",
+          "function/689230944",
+          "function/695455779",
+          "function/709915292",
+          "function/729126945",
+          "function/748762392",
+          "function/750091346",
+          "function/765963979",
+          "function/791619288",
+          "function/801619570",
+          "function/820169204",
+          "function/834015338",
+          "function/864812824",
+          "function/866251913",
+          "function/883935916",
+          "function/893622437",
+          "function/929852730",
+          "function/976856253",
+          "function/977037784",
+          "function/1010766199",
+          "function/1017330300",
+          "function/1036180926",
+          "function/1046014704"
+        ]
+      },
       "770824752": {
         "id": "class/770824752",
         "kind": "class",
         "name": "_Completer",
-        "size": 510,
+        "size": 475,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
@@ -1757,23 +1864,16 @@
         "id": "class/784178238",
         "kind": "class",
         "name": "_Future",
-        "size": 15179,
+        "size": 14012,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/240049228",
-          "field/285504086",
-          "field/370348518",
           "field/485816538",
           "field/786919906",
-          "field/840661601",
-          "field/927731351",
           "field/978504898",
-          "function/15925204",
-          "function/16930089",
           "function/18599313",
           "function/22227107",
           "function/51167109",
@@ -1786,6 +1886,7 @@
           "function/352514166",
           "function/492708773",
           "function/519629171",
+          "function/527450614",
           "function/533906117",
           "function/553149607",
           "function/556268777",
@@ -1795,9 +1896,11 @@
           "function/664449932",
           "function/717417998",
           "function/722405802",
+          "function/753558090",
           "function/772606842",
           "function/823929753",
           "function/853973218",
+          "function/871707959",
           "function/901078366",
           "function/941710296",
           "function/971160936",
@@ -1806,11 +1909,26 @@
           "function/1058735230"
         ]
       },
+      "786261494": {
+        "id": "class/786261494",
+        "kind": "class",
+        "name": "_StringStackTrace",
+        "size": 178,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/103923631",
+          "function/656826361"
+        ]
+      },
       "790616034": {
         "id": "class/790616034",
         "kind": "class",
         "name": "NullError",
-        "size": 429,
+        "size": 397,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -1827,7 +1945,7 @@
         "id": "class/793539876",
         "kind": "class",
         "name": "JSString",
-        "size": 1983,
+        "size": 1183,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -1835,7 +1953,6 @@
         },
         "children": [
           "function/186999466",
-          "function/204916897",
           "function/312768442",
           "function/347974666",
           "function/550544609",
@@ -1855,17 +1972,7 @@
           "abstract": false
         },
         "children": [
-          "field/186466978",
-          "field/299693352",
-          "field/478876039",
-          "field/728368328",
-          "field/790173099",
-          "field/795392143",
-          "field/849640421",
           "field/914591285",
-          "field/951952385",
-          "field/962499289",
-          "field/996584734",
           "function/357240896"
         ]
       },
@@ -1880,7 +1987,6 @@
           "abstract": true
         },
         "children": [
-          "function/430480673",
           "function/580865640"
         ]
       },
@@ -1888,15 +1994,15 @@
         "id": "class/850763763",
         "kind": "class",
         "name": "_AsyncAwaitCompleter",
-        "size": 1026,
+        "size": 860,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/334228980",
           "field/368460625",
+          "field/918430961",
           "function/618126497",
           "function/693686431",
           "function/852141617",
@@ -1907,7 +2013,7 @@
         "id": "class/851867060",
         "kind": "class",
         "name": "JavaScriptObject",
-        "size": 182,
+        "size": 225,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -1922,7 +2028,7 @@
         "id": "class/866150578",
         "kind": "class",
         "name": "RuntimeError",
-        "size": 123,
+        "size": 192,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "modifiers": {
@@ -1938,7 +2044,7 @@
         "id": "class/868658259",
         "kind": "class",
         "name": "_LinkedHashSetCell",
-        "size": 52,
+        "size": 167,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/754126564",
         "modifiers": {
@@ -1951,22 +2057,75 @@
           "function/411231605"
         ]
       },
+      "873344497": {
+        "id": "class/873344497",
+        "kind": "class",
+        "name": "TypeError",
+        "size": 78,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
       "893386369": {
         "id": "class/893386369",
         "kind": "class",
         "name": "Error",
-        "size": 28,
+        "size": 153,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": false
         },
         "children": [
+          "function/63763718",
           "function/302617892",
           "function/355012434",
           "function/1042482096"
         ]
       },
+      "926198907": {
+        "id": "class/926198907",
+        "kind": "class",
+        "name": "_Parser",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/2781902",
+          "function/212177062",
+          "function/347168225",
+          "function/347710223",
+          "function/359606692",
+          "function/409628970",
+          "function/477858577",
+          "function/479155815",
+          "function/490035833",
+          "function/494259168",
+          "function/495511570",
+          "function/517189775",
+          "function/566090952",
+          "function/609214736",
+          "function/685278809",
+          "function/712382592",
+          "function/744088497",
+          "function/747174278",
+          "function/821928955",
+          "function/875358741",
+          "function/922651191",
+          "function/935592878",
+          "function/983353088",
+          "function/1007804883",
+          "function/1019584284",
+          "function/1036730465",
+          "function/1050426556"
+        ]
+      },
       "934351233": {
         "id": "class/934351233",
         "kind": "class",
@@ -1982,23 +2141,11 @@
           "field/657138181"
         ]
       },
-      "943457796": {
-        "id": "class/943457796",
-        "kind": "class",
-        "name": "SetBase",
-        "size": 30,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/754126564",
-        "modifiers": {
-          "abstract": true
-        },
-        "children": []
-      },
       "948502579": {
         "id": "class/948502579",
         "kind": "class",
         "name": "StateError",
-        "size": 240,
+        "size": 181,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -2014,7 +2161,7 @@
         "id": "class/949988971",
         "kind": "class",
         "name": "JS_CONST",
-        "size": 32,
+        "size": 82,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/174368900",
         "modifiers": {
@@ -2024,63 +2171,18 @@
           "field/249142929"
         ]
       },
-      "952584796": {
-        "id": "class/952584796",
-        "kind": "class",
-        "name": "_SyncCompleter",
-        "size": 495,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/1052666095",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": [
-          "function/99501118",
-          "function/162872908",
-          "function/477609809"
-        ]
-      },
-      "954836234": {
-        "id": "class/954836234",
-        "kind": "class",
-        "name": "_StringAllMatchesIterable",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": [
-          "field/771598536"
-        ]
-      },
-      "958488954": {
-        "id": "class/958488954",
-        "kind": "class",
-        "name": "_StringAllMatchesIterator",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "modifiers": {
-          "abstract": false
-        },
-        "children": [
-          "field/16888485",
-          "field/275000790",
-          "field/661173290"
-        ]
-      },
       "959990109": {
         "id": "class/959990109",
         "kind": "class",
         "name": "List",
-        "size": 28,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
           "abstract": true
         },
         "children": [
+          "function/140617653",
           "function/210974499",
           "function/436170439"
         ]
@@ -2089,7 +2191,7 @@
         "id": "class/974704527",
         "kind": "class",
         "name": "RangeError",
-        "size": 1580,
+        "size": 902,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -2102,19 +2204,18 @@
           "function/349997389",
           "function/427434111",
           "function/539017937",
-          "function/965257927",
           "function/1024465827"
         ]
       },
-      "975959345": {
-        "id": "class/975959345",
+      "978801172": {
+        "id": "class/978801172",
         "kind": "class",
-        "name": "_HashSetBase",
-        "size": 29,
+        "name": "JSNumNotInt",
+        "size": 86,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/754126564",
+        "parent": "library/325218131",
         "modifiers": {
-          "abstract": true
+          "abstract": false
         },
         "children": []
       },
@@ -2122,7 +2223,7 @@
         "id": "class/991730135",
         "kind": "class",
         "name": "UnsupportedError",
-        "size": 264,
+        "size": 217,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "modifiers": {
@@ -2138,18 +2239,14 @@
         "id": "class/1003011102",
         "kind": "class",
         "name": "JSNumber",
-        "size": 967,
+        "size": 1104,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/717638099",
-          "field/1001207931",
           "function/440018750",
-          "function/499807915",
-          "function/738104072",
           "function/752981084",
           "function/830798781",
           "function/854200700"
@@ -2169,11 +2266,27 @@
           "function/367762222"
         ]
       },
+      "1013977545": {
+        "id": "class/1013977545",
+        "kind": "class",
+        "name": "Recipe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/828455743",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/266327677",
+          "function/746055337",
+          "function/1013396128"
+        ]
+      },
       "1019758482": {
         "id": "class/1019758482",
         "kind": "class",
         "name": "ArrayIterator",
-        "size": 574,
+        "size": 798,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -2189,11 +2302,23 @@
           "function/1027535878"
         ]
       },
+      "1030881768": {
+        "id": "class/1030881768",
+        "kind": "class",
+        "name": "Closure2Args",
+        "size": 129,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
       "1034266724": {
         "id": "class/1034266724",
         "kind": "class",
         "name": "PlainJavaScriptObject",
-        "size": 38,
+        "size": 144,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/325218131",
         "modifiers": {
@@ -2205,31 +2330,19 @@
         "id": "class/1040168844",
         "kind": "class",
         "name": "_StreamIterator",
-        "size": 66,
+        "size": 125,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "modifiers": {
           "abstract": false
         },
         "children": [
-          "field/51249772",
           "field/172148876",
+          "field/173819446",
           "field/305114389",
           "function/188708191"
         ]
       },
-      "1052045656": {
-        "id": "class/1052045656",
-        "kind": "class",
-        "name": "Map",
-        "size": 28,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/631335891",
-        "modifiers": {
-          "abstract": true
-        },
-        "children": []
-      },
       "1059387371": {
         "id": "class/1059387371",
         "kind": "class",
@@ -2261,6 +2374,44 @@
           "function/975105635"
         ]
       },
+      "1070435853": {
+        "id": "class/1070435853",
+        "kind": "class",
+        "name": "_Utils",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/51389871",
+          "function/65470864",
+          "function/91691962",
+          "function/104513495",
+          "function/123297685",
+          "function/332074411",
+          "function/457543033",
+          "function/481740897",
+          "function/497781031",
+          "function/629344964",
+          "function/716694085",
+          "function/747795707",
+          "function/764092534",
+          "function/822673760",
+          "function/832692823",
+          "function/852326327",
+          "function/852359021",
+          "function/873774381",
+          "function/916119111",
+          "function/942726385",
+          "function/986643735",
+          "function/1002613704",
+          "function/1033254962",
+          "function/1055215220",
+          "function/1069756346"
+        ]
+      },
       "1070558590": {
         "id": "class/1070558590",
         "kind": "class",
@@ -2278,12 +2429,94 @@
         ]
       }
     },
+    "classType": {
+      "335005182": {
+        "id": "classType/335005182",
+        "kind": "classType",
+        "name": "num",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      },
+      "347664884": {
+        "id": "classType/347664884",
+        "kind": "classType",
+        "name": "StackTrace",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      },
+      "351911149": {
+        "id": "classType/351911149",
+        "kind": "classType",
+        "name": "Null",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      },
+      "438137150": {
+        "id": "classType/438137150",
+        "kind": "classType",
+        "name": "Future",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095"
+      },
+      "481500692": {
+        "id": "classType/481500692",
+        "kind": "classType",
+        "name": "bool",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      },
+      "562873772": {
+        "id": "classType/562873772",
+        "kind": "classType",
+        "name": "int",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      },
+      "627219878": {
+        "id": "classType/627219878",
+        "kind": "classType",
+        "name": "Object",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      },
+      "635685670": {
+        "id": "classType/635685670",
+        "kind": "classType",
+        "name": "String",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      },
+      "784178239": {
+        "id": "classType/784178239",
+        "kind": "classType",
+        "name": "_Future",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095"
+      },
+      "959990110": {
+        "id": "classType/959990110",
+        "kind": "classType",
+        "name": "List",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891"
+      }
+    },
     "function": {
       "538046": {
         "id": "function/538046",
         "kind": "function",
         "name": "_newHashTable",
-        "size": 234,
+        "size": 220,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -2298,9 +2531,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_newHashTable$0: function() {\n  var table = Object.create(null);\n  this._setTableEntry$3(table, \"<non-identifier-key>\", table);\n  this._deleteTableEntry$2(table, \"<non-identifier-key>\");\n  return table;\n}\n",
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "_newHashTable$0() {\n      var _s20_ = \"<non-identifier-key>\",\n        table = Object.create(null);\n      this._setTableEntry$3(table, _s20_, table);\n      this._deleteTableEntry$2(table, _s20_);\n      return table;\n    }",
+        "type": "dynamic Function()"
       },
       "702510": {
         "id": "function/702510",
@@ -2332,15 +2564,108 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 3,
-        "code": null,
-        "type": "dynamic Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic,dynamic)"
+      },
+      "2781902": {
+        "id": "function/2781902",
+        "kind": "function",
+        "name": "toGenericFunctionParameter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "item",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,Object?)"
+      },
+      "5571021": {
+        "id": "function/5571021",
+        "kind": "function",
+        "name": "evalRecipe",
+        "size": 154,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[null|exact=BoundClosure]",
+            "declaredType": "BoundClosure"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "BoundClosure_evalRecipe(closure, recipe) {\n      return A._Universe_evalInEnvironment(init.typeUniverse, A.instanceType(closure._receiver), recipe);\n    }",
+        "type": "dynamic Function(BoundClosure,String)"
+      },
+      "11678628": {
+        "id": "function/11678628",
+        "kind": "function",
+        "name": "_isListTestViaProperty",
+        "size": 404,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isListTestViaProperty(object) {\n      var tag, testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      if (typeof object != \"object\")\n        return false;\n      if (Array.isArray(object))\n        return true;\n      tag = testRti._specializedTestResource;\n      if (object instanceof A.Object)\n        return !!object[tag];\n      return !!J.getInterceptor$(object)[tag];\n    }",
+        "type": "bool Function(Object?)"
       },
       "11804710": {
         "id": "function/11804710",
         "kind": "function",
         "name": "AsyncError",
-        "size": 0,
+        "size": 211,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/577121337",
         "children": [],
@@ -2361,20 +2686,19 @@
           {
             "name": "stackTrace",
             "type": "[null|subclass=Object]",
-            "declaredType": "StackTrace"
+            "declaredType": "StackTrace?"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 4,
-        "code": null,
-        "type": "dynamic Function(Object,StackTrace)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "AsyncError$(error, stackTrace) {\n      var t1 = A.checkNotNullable(error, \"error\", type$.Object);\n      return new A.AsyncError(t1, stackTrace == null ? A.AsyncError_defaultStackTrace(error) : stackTrace);\n    }",
+        "type": "dynamic Function(Object,StackTrace?)"
       },
       "15204906": {
         "id": "function/15204906",
         "kind": "function",
         "name": "call",
-        "size": 1534,
+        "size": 1551,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/963665986",
         "children": [],
@@ -2389,15 +2713,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  var completeResult, e, s, t1, exception, t2, originalSource;\n  completeResult = null;\n  try {\n    t1 = this.listener;\n    completeResult = t1.result._zone.run$1(t1.callback);\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    if (this.hasError) {\n      t1 = this._box_1.source._resultOrListeners.get$error();\n      t2 = e;\n      t2 = t1 == null ? t2 == null : t1 === t2;\n      t1 = t2;\n    } else\n      t1 = false;\n    t2 = this._box_0;\n    if (t1)\n      t2.listenerValueOrError = this._box_1.source._resultOrListeners;\n    else\n      t2.listenerValueOrError = new P.AsyncError(e, s);\n    t2.listenerHasError = true;\n    return;\n  }\n  if (!!J.getInterceptor(completeResult).$isFuture) {\n    if (completeResult instanceof P._Future && completeResult.get$_state() >= 4) {\n      if (completeResult.get$_state() === 8) {\n        t1 = this._box_0;\n        t1.listenerValueOrError = completeResult.get$_resultOrListeners();\n        t1.listenerHasError = true;\n      }\n      return;\n    }\n    originalSource = this._box_1.source;\n    t1 = this._box_0;\n    t1.listenerValueOrError = completeResult.then$1(new P._Future__propagateToListeners_handleWhenCompleteCallback_closure(originalSource));\n    t1.listenerHasError = false;\n  }\n}\n",
-        "type": "void Function()",
-        "measurements": null
+        "code": "call$0() {\n      var e, s, t1, exception, t2, originalSource, _this = this, completeResult = null;\n      try {\n        t1 = _this._box_0.listener;\n        completeResult = t1.result._zone.run$1$1(type$.dynamic_Function._as(t1.callback), type$.dynamic);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        if (_this.hasError) {\n          t1 = type$.AsyncError._as(_this._box_1.source._resultOrListeners).error;\n          t2 = e;\n          t2 = t1 == null ? t2 == null : t1 === t2;\n          t1 = t2;\n        } else\n          t1 = false;\n        t2 = _this._box_0;\n        if (t1)\n          t2.listenerValueOrError = type$.AsyncError._as(_this._box_1.source._resultOrListeners);\n        else\n          t2.listenerValueOrError = A.AsyncError$(e, s);\n        t2.listenerHasError = true;\n        return;\n      }\n      if (completeResult instanceof A._Future && (completeResult._state & 24) !== 0) {\n        if ((completeResult._state & 16) !== 0) {\n          t1 = _this._box_0;\n          t1.listenerValueOrError = type$.AsyncError._as(completeResult._resultOrListeners);\n          t1.listenerHasError = true;\n        }\n        return;\n      }\n      if (type$.Future_dynamic._is(completeResult)) {\n        originalSource = _this._box_1.source;\n        t1 = _this._box_0;\n        t1.listenerValueOrError = completeResult.then$1$1(new A._Future__propagateToListeners_handleWhenCompleteCallback_closure(originalSource), type$.dynamic);\n        t1.listenerHasError = false;\n      }\n    }",
+        "type": "void Function()"
       },
       "15478302": {
         "id": "function/15478302",
         "kind": "function",
         "name": "toString",
-        "size": 257,
+        "size": 153,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/138211367",
         "children": [],
@@ -2412,44 +2735,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  var receiver = this._receiver;\n  if (receiver == null)\n    receiver = this._self;\n  return \"Closure '\" + H.S(this._name) + \"' of \" + (\"Instance of '\" + H.Primitives_objectTypeName(receiver) + \"'\");\n}\n",
-        "type": "String Function()",
-        "measurements": null
-      },
-      "15925204": {
-        "id": "function/15925204",
-        "kind": "function",
-        "name": "_complete",
-        "size": 590,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/784178238",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "void",
-        "inferredReturnType": "[null]",
-        "parameters": [
-          {
-            "name": "value",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "_complete$1: function(value) {\n  var t1, t2, listeners;\n  t1 = this.$ti;\n  t2 = H.checkSubtypeV1(value, \"$isFuture\", t1, \"$asFuture\");\n  if (t2) {\n    t1 = H.checkSubtypeV1(value, \"$is_Future\", t1, null);\n    if (t1)\n      P._Future__chainCoreFuture(value, this);\n    else\n      P._Future__chainForeignFuture(value, this);\n  } else {\n    listeners = this._removeListeners$0();\n    this._state = 4;\n    this._resultOrListeners = value;\n    P._Future__propagateToListeners(this, listeners);\n  }\n}\n",
-        "type": "void Function(dynamic)",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"Closure '\" + A.S(this.$_name) + \"' of \" + (\"Instance of '\" + A.S(A.Primitives_objectTypeName(this._receiver)) + \"'\");\n    }",
+        "type": "String Function()"
       },
       "16600620": {
         "id": "function/16600620",
         "kind": "function",
         "name": "_add",
-        "size": 563,
+        "size": 596,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -2470,17 +2763,16 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_add$1: function(element) {\n  var rest, hash, bucket;\n  rest = this._rest;\n  if (rest == null) {\n    rest = P._LinkedHashSet__newHashTable();\n    this._rest = rest;\n  }\n  hash = this._computeHashCode$1(element);\n  bucket = rest[hash];\n  if (bucket == null)\n    rest[hash] = [this._newLinkedCell$1(element)];\n  else {\n    if (this._findBucketIndex$2(bucket, element) >= 0)\n      return false;\n    bucket.push(this._newLinkedCell$1(element));\n  }\n  return true;\n}\n",
-        "type": "bool Function(_LinkedHashSet.E)",
-        "measurements": null
+        "code": "_add$1(element) {\n      var rest, hash, bucket, _this = this;\n      A._instanceType(_this)._precomputed1._as(element);\n      rest = _this._collection$_rest;\n      if (rest == null)\n        rest = _this._collection$_rest = A._LinkedHashSet__newHashTable();\n      hash = _this._computeHashCode$1(element);\n      bucket = rest[hash];\n      if (bucket == null)\n        rest[hash] = [_this._newLinkedCell$1(element)];\n      else {\n        if (_this._findBucketIndex$2(bucket, element) >= 0)\n          return false;\n        bucket.push(_this._newLinkedCell$1(element));\n      }\n      return true;\n    }",
+        "type": "bool Function(Object?)"
       },
-      "16930089": {
-        "id": "function/16930089",
+      "18312199": {
+        "id": "function/18312199",
         "kind": "function",
-        "name": "_thenNoZoneRegistration",
-        "size": 253,
+        "name": "NotNullableError",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/784178238",
+        "parent": "class/690322225",
         "children": [],
         "modifiers": {
           "static": false,
@@ -2488,31 +2780,25 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Future<_thenNoZoneRegistration.E>",
-        "inferredReturnType": "[exact=_Future]",
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=NotNullableError]",
         "parameters": [
           {
-            "name": "f",
-            "type": "[subclass=Closure]",
-            "declaredType": "dynamic Function(_Future.T)"
-          },
-          {
-            "name": "onError",
-            "type": "[null|subclass=Closure]",
-            "declaredType": "Function"
+            "name": "_name",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "_thenNoZoneRegistration$2: function(f, onError) {\n  var result = new P._Future(0, $.Zone__current, null, [null]);\n  this._addListener$1(new P._FutureListener(null, result, onError == null ? 1 : 3, f, onError));\n  return result;\n}\n",
-        "type": "Future<_thenNoZoneRegistration.E> Function(dynamic Function(_Future.T),Function)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(String)"
       },
       "18599313": {
         "id": "function/18599313",
         "kind": "function",
         "name": "_addListener",
-        "size": 869,
+        "size": 1019,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [
@@ -2535,17 +2821,16 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_addListener$1: function(listener) {\n  var t1, source;\n  t1 = this._state;\n  if (t1 <= 1) {\n    listener._nextListener = this._resultOrListeners;\n    this._resultOrListeners = listener;\n  } else {\n    if (t1 === 2) {\n      source = this._resultOrListeners;\n      if (source.get$_state() < 4) {\n        source._addListener$1(listener);\n        return;\n      }\n      this._state = source._state;\n      this._resultOrListeners = source._resultOrListeners;\n    }\n    t1 = this._zone;\n    t1.toString;\n    P._rootScheduleMicrotask(null, null, t1, new P._Future__addListener_closure(this, listener));\n  }\n}\n",
-        "type": "void Function(_FutureListener<dynamic,dynamic>)",
-        "measurements": null
+        "code": "_addListener$1(listener) {\n      var source, _this = this,\n        t1 = _this._state;\n      if (t1 <= 3) {\n        listener._nextListener = type$.nullable__FutureListener_dynamic_dynamic._as(_this._resultOrListeners);\n        _this._resultOrListeners = listener;\n      } else {\n        if ((t1 & 4) !== 0) {\n          source = type$._Future_dynamic._as(_this._resultOrListeners);\n          if ((source._state & 24) === 0) {\n            source._addListener$1(listener);\n            return;\n          }\n          _this._cloneResult$1(source);\n        }\n        A._rootScheduleMicrotask(null, null, _this._zone, type$.void_Function._as(new A._Future__addListener_closure(_this, listener)));\n      }\n    }",
+        "type": "void Function(_FutureListener<dynamic,dynamic>)"
       },
-      "21667157": {
-        "id": "function/21667157",
+      "21938161": {
+        "id": "function/21938161",
         "kind": "function",
-        "name": "areAssignableV1",
-        "size": 631,
+        "name": "_asNum",
+        "size": 159,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -2553,30 +2838,19 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "num",
+        "inferredReturnType": "[subclass=JSNumber]",
         "parameters": [
           {
-            "name": "s",
-            "type": "[null|subclass=JSArray]",
-            "declaredType": "List<dynamic>"
-          },
-          {
-            "name": "t",
-            "type": "[null|subclass=JSArray]",
-            "declaredType": "List<dynamic>"
-          },
-          {
-            "name": "allowShorter",
-            "type": "[exact=JSBool]",
-            "declaredType": "bool"
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "areAssignableV1: function(s, t, allowShorter) {\n  var t1, sLength, tLength, i, t2;\n  t1 = t == null;\n  if (t1 && s == null)\n    return true;\n  if (t1)\n    return allowShorter;\n  if (s == null)\n    return false;\n  sLength = s.length;\n  tLength = t.length;\n  if (allowShorter) {\n    if (sLength < tLength)\n      return false;\n  } else if (sLength !== tLength)\n    return false;\n  for (i = 0; i < tLength; ++i) {\n    t1 = s[i];\n    t2 = t[i];\n    if (!(H.isSubtypeV1(t1, t2) || H.isSubtypeV1(t2, t1)))\n      return false;\n  }\n  return true;\n}\n",
-        "type": "bool Function(List<dynamic>,List<dynamic>,bool)",
-        "measurements": null
+        "code": "_asNum(object) {\n      if (typeof object == \"number\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num\"));\n    }",
+        "type": "num Function(Object?)"
       },
       "22227107": {
         "id": "function/22227107",
@@ -2602,15 +2876,95 @@
           },
           {
             "name": "stackTrace",
-            "type": "[null|subclass=Object]",
+            "type": "[null|subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
-        "sideEffects": "SideEffects(reads static; writes field)",
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function(Object,StackTrace)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(Object,StackTrace)"
+      },
+      "25075263": {
+        "id": "function/25075263",
+        "kind": "function",
+        "name": "_areArgumentsSubtypes",
+        "size": 322,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "sArgs",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "sVariances",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "sEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "tArgs",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "tEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_areArgumentsSubtypes(universe, sArgs, sVariances, sEnv, tArgs, tEnv) {\n      var i, t1, t2,\n        $length = sArgs.length;\n      for (i = 0; i < $length; ++i) {\n        t1 = sArgs[i];\n        t2 = tArgs[i];\n        if (!A._isSubtype(universe, t1, sEnv, t2, tEnv))\n          return false;\n      }\n      return true;\n    }",
+        "type": "bool Function(Object?,Object?,Object?,Object?,Object?,Object?)"
+      },
+      "25816218": {
+        "id": "function/25816218",
+        "kind": "function",
+        "name": "_getBindingArguments",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Rti)"
       },
       "30570662": {
         "id": "function/30570662",
@@ -2647,15 +3001,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
-        "code": null,
-        "type": "void Function(dynamic,dynamic,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(dynamic,dynamic,dynamic)"
       },
       "31139860": {
         "id": "function/31139860",
         "kind": "function",
         "name": "length",
-        "size": 74,
+        "size": 60,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -2670,15 +3023,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$length: function(_) {\n  return this._collection$_length;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$length(_) {\n      return this._collection$_length;\n    }",
+        "type": "int Function()"
+      },
+      "33492639": {
+        "id": "function/33492639",
+        "kind": "function",
+        "name": "NullThrownFromJavaScriptException",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/383904536",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=NullThrownFromJavaScriptException]",
+        "parameters": [
+          {
+            "name": "_irritant",
+            "type": "[null]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(dynamic)"
       },
       "38646490": {
         "id": "function/38646490",
         "kind": "function",
         "name": "_setTableEntry",
-        "size": 83,
+        "size": 69,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -2709,15 +3089,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_setTableEntry$3: function(table, key, value) {\n  table[key] = value;\n}\n",
-        "type": "void Function(dynamic,dynamic,dynamic)",
-        "measurements": null
+        "code": "_setTableEntry$3(table, key, value) {\n      table[key] = value;\n    }",
+        "type": "void Function(dynamic,dynamic,dynamic)"
       },
       "39412415": {
         "id": "function/39412415",
         "kind": "function",
         "name": "call",
-        "size": 526,
+        "size": 608,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/938184478",
         "children": [],
@@ -2727,25 +3106,24 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [
           {
             "name": "theError",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           },
           {
             "name": "theStackTrace",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$2: function(theError, theStackTrace) {\n  var t1, t2;\n  t1 = this._box_0;\n  t2 = --t1.remaining;\n  if (t1.values != null) {\n    t1.values = null;\n    if (t1.remaining === 0 || this.eagerError)\n      this.result._completeError$2(theError, theStackTrace);\n    else {\n      t1.error = theError;\n      t1.stackTrace = theStackTrace;\n    }\n  } else if (t2 === 0 && !this.eagerError)\n    this.result._completeError$2(t1.error, t1.stackTrace);\n}\n",
-        "type": "Null Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "call$2(theError, theStackTrace) {\n      var t1, t2, _this = this;\n      type$.StackTrace._as(theStackTrace);\n      t1 = _this._box_0;\n      t2 = --t1.remaining;\n      if (t1.values != null) {\n        t1.values = null;\n        if (t1.remaining === 0 || _this.eagerError)\n          _this._future._completeError$2(theError, theStackTrace);\n        else {\n          _this.error._value = theError;\n          _this.stackTrace._value = theStackTrace;\n        }\n      } else if (t2 === 0 && !_this.eagerError)\n        _this._future._completeError$2(_this.error._readLocal$0(), _this.stackTrace._readLocal$0());\n    }",
+        "type": "void Function(Object,StackTrace)"
       },
       "39768413": {
         "id": "function/39768413",
@@ -2764,11 +3142,81 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads field, static; writes nothing)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "bool Function()"
+      },
+      "46139592": {
+        "id": "function/46139592",
+        "kind": "function",
+        "name": "lookupTypeVariable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/768954396",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "rule",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "typeVariable",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String? Function(Object?,String)"
+      },
+      "49259755": {
+        "id": "function/49259755",
+        "kind": "function",
+        "name": "_lookupQuestionRti",
+        "size": 341,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupQuestionRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"?\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createQuestionRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,bool)"
       },
       "51167109": {
         "id": "function/51167109",
@@ -2789,15 +3237,80 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 8,
-        "code": null,
-        "type": "AsyncError Function()",
-        "measurements": null
+        "code": "",
+        "type": "AsyncError Function()"
+      },
+      "51389871": {
+        "id": "function/51389871",
+        "kind": "function",
+        "name": "arraySplice",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "position",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?,int)"
+      },
+      "53371910": {
+        "id": "function/53371910",
+        "kind": "function",
+        "name": "checkNotNullable",
+        "size": 184,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "#A/*free*/",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "checkNotNullable.T"
+          },
+          {
+            "name": "name",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "checkNotNullable(value, $name, $T) {\n      if (value == null)\n        throw A.wrapException(new A.NotNullableError($name, $T._eval$1(\"NotNullableError<0>\")));\n      return value;\n    }",
+        "type": "#A Function<#A extends Object>(#A,String)"
       },
       "53631526": {
         "id": "function/53631526",
         "kind": "function",
         "name": "loadDeferredLibrary",
-        "size": 4011,
+        "size": 5108,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [
@@ -2823,9 +3336,69 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "loadDeferredLibrary: function(loadId) {\n  var _box_0, indexes, t1, uris, hashes, index2uri, index2hash, i, index, total, waitingForLoad, isHunkLoaded;\n  _box_0 = {};\n  indexes = init.deferredLibraryParts[loadId];\n  if (indexes == null) {\n    t1 = new P._Future(0, $.Zone__current, null, [P.Null]);\n    t1._asyncComplete$1(null);\n    return t1;\n  }\n  uris = [];\n  hashes = [];\n  index2uri = init.deferredPartUris;\n  index2hash = init.deferredPartHashes;\n  for (i = 0; i < indexes.length; ++i) {\n    index = indexes[i];\n    uris.push(index2uri[index]);\n    hashes.push(index2hash[index]);\n  }\n  total = hashes.length;\n  waitingForLoad = P.List_List$filled(total, true, false);\n  _box_0.nextHunkToInitialize = 0;\n  isHunkLoaded = init.isHunkLoaded;\n  t1 = new H.loadDeferredLibrary_initializeSomeLoadedHunks(_box_0, total, waitingForLoad, uris, hashes, init.isHunkInitialized, isHunkLoaded, init.initializeLoadedHunk);\n  return P.Future_wait(P.List_List$generate(total, new H.loadDeferredLibrary_loadAndInitialize(isHunkLoaded, hashes, waitingForLoad, uris, t1), true), null, false).then$1(new H.loadDeferredLibrary_closure(_box_0, t1, total, loadId));\n}\n",
-        "type": "Future<Null> Function(String)",
-        "measurements": null
+        "code": "loadDeferredLibrary(loadId) {\n      var t1, uris, hashes, index2uri, index2hash, i, index, total, waitingForLoad, isHunkLoaded, _box_0 = {},\n        indexes = init.deferredLibraryParts[loadId];\n      if (indexes == null)\n        return A.Future_Future$value(null, type$.Null);\n      t1 = type$.JSArray_String;\n      uris = A._setArrayType([], t1);\n      hashes = A._setArrayType([], t1);\n      index2uri = init.deferredPartUris;\n      index2hash = init.deferredPartHashes;\n      for (i = 0; i < indexes.length; ++i) {\n        index = indexes[i];\n        B.JSArray_methods.add$1(uris, index2uri[index]);\n        B.JSArray_methods.add$1(hashes, index2hash[index]);\n      }\n      total = hashes.length;\n      waitingForLoad = A.List_List$filled(total, true, type$.bool);\n      _box_0.nextHunkToInitialize = 0;\n      isHunkLoaded = init.isHunkLoaded;\n      t1 = new A.loadDeferredLibrary_initializeSomeLoadedHunks(_box_0, total, waitingForLoad, uris, hashes, init.isHunkInitialized, isHunkLoaded, init.initializeLoadedHunk);\n      return A.Future_wait(A.List_List$generate(total, new A.loadDeferredLibrary_loadAndInitialize(isHunkLoaded, hashes, waitingForLoad, uris, loadId, t1), type$.Future_dynamic), type$.dynamic).then$1$1(new A.loadDeferredLibrary_closure(_box_0, t1, total, loadId), type$.Null);\n    }",
+        "type": "Future<Null> Function(String)"
+      },
+      "54796797": {
+        "id": "function/54796797",
+        "kind": "function",
+        "name": "_getSpecializedTestResource",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "55984201": {
+        "id": "function/55984201",
+        "kind": "function",
+        "name": "_setSpecializedTestResource",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "[exact=JSString]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
       },
       "57158184": {
         "id": "function/57158184",
@@ -2846,21 +3419,98 @@
         "parameters": [
           {
             "name": "otherZone",
-            "type": "[null|exact=_RootZone]",
+            "type": "[exact=_RootZone]",
             "declaredType": "Zone"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 3,
-        "code": null,
-        "type": "bool Function(Zone)",
-        "measurements": null
+        "code": "",
+        "type": "bool Function(Zone)"
+      },
+      "57613304": {
+        "id": "function/57613304",
+        "kind": "function",
+        "name": "_lookupErasedRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "62411321": {
+        "id": "function/62411321",
+        "kind": "function",
+        "name": "_readLocal",
+        "size": 208,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/745154066",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "_readLocal$0() {\n      var t1 = this._value;\n      if (t1 === this)\n        throw A.wrapException(new A.LateError(\"Local '\" + this.__late_helper$_name + \"' has not been initialized.\"));\n      return t1;\n    }",
+        "type": "Object? Function()"
+      },
+      "63055866": {
+        "id": "function/63055866",
+        "kind": "function",
+        "name": "_lookupAnyRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?)"
       },
       "63166902": {
         "id": "function/63166902",
         "kind": "function",
         "name": "run",
-        "size": 152,
+        "size": 176,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/566341130",
         "children": [],
@@ -2870,7 +3520,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "run.R",
+        "returnType": "#A/*free*/",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
@@ -2881,9 +3531,30 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "run$1: function(f) {\n  if ($.Zone__current === C.C__RootZone)\n    return f.call$0();\n  return P._rootRun(null, null, this, f);\n}\n",
-        "type": "run.R Function(run.R Function())",
-        "measurements": null
+        "code": "run$1$1(f, $R) {\n      $R._eval$1(\"0()\")._as(f);\n      if ($.Zone__current === B.C__RootZone)\n        return f.call$0();\n      return A._rootRun(null, null, this, f, $R);\n    }",
+        "type": "#A Function<#A extends Object?>(#A Function())"
+      },
+      "63763718": {
+        "id": "function/63763718",
+        "kind": "function",
+        "name": "stackTrace",
+        "size": 83,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/893386369",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StackTrace?",
+        "inferredReturnType": "[null|subtype=StackTrace]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$stackTrace() {\n      return A.getTraceFromException(this.$thrownJsError);\n    }",
+        "type": "StackTrace? Function()"
       },
       "64968119": {
         "id": "function/64968119",
@@ -2899,28 +3570,55 @@
           "factory": false,
           "external": false
         },
-        "returnType": "String",
+        "returnType": "String?",
         "inferredReturnType": "[null|exact=JSString]",
         "parameters": [
           {
             "name": "ex",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "dynamic"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "String? Function(dynamic)"
       },
-      "66015995": {
-        "id": "function/66015995",
+      "65470864": {
+        "id": "function/65470864",
         "kind": "function",
-        "name": "toString",
-        "size": 102,
+        "name": "asRtiOrNull",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/70813553",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti?",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti? Function(Object?)"
+      },
+      "66145123": {
+        "id": "function/66145123",
+        "kind": "function",
+        "name": "getTypeFromTypesTable",
+        "size": 284,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -2928,20 +3626,25 @@
           "factory": false,
           "external": false
         },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
-        "parameters": [],
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return P.IterableBase_iterableToShortString(this, \"(\", \")\");\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "getTypeFromTypesTable(index) {\n      var rti,\n        table = init.types,\n        type = table[index];\n      if (typeof type == \"string\") {\n        rti = A._Universe_eval(init.typeUniverse, type, false);\n        table[index] = rti;\n        return rti;\n      }\n      return type;\n    }",
+        "type": "Rti Function(int)"
       },
       "67489885": {
         "id": "function/67489885",
         "kind": "function",
         "name": "_scheduleImmediateJsOverride",
-        "size": 382,
+        "size": 691,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/611525899",
         "children": [
@@ -2964,9 +3667,8 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_AsyncRun__scheduleImmediateJsOverride: [function(callback) {\n  self.scheduleImmediate(H.convertDartClosureToJS(new P._AsyncRun__scheduleImmediateJsOverride_internalCallback(callback), 0));\n}, \"call$1\", \"async__AsyncRun__scheduleImmediateJsOverride$closure\", 4, 0, 3]\n",
-        "type": "void Function(void Function())",
-        "measurements": null
+        "code": "_AsyncRun__scheduleImmediateJsOverride(callback) {\n      self.scheduleImmediate(A.convertDartClosureToJS(new A._AsyncRun__scheduleImmediateJsOverride_internalCallback(type$.void_Function._as(callback)), 0));\n    }\n_static_1(A, \"async__AsyncRun__scheduleImmediateJsOverride$closure\", \"_AsyncRun__scheduleImmediateJsOverride\", 2);\n",
+        "type": "void Function(void Function())"
       },
       "67701762": {
         "id": "function/67701762",
@@ -2987,15 +3689,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
       "68051831": {
         "id": "function/68051831",
         "kind": "function",
         "name": "handleError",
-        "size": 409,
+        "size": 1091,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/80405414",
         "children": [],
@@ -3005,7 +3706,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
+        "returnType": "FutureOr<_FutureListener.T>",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
@@ -3016,15 +3717,98 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "handleError$1: function(asyncError) {\n  var errorCallback, t1;\n  errorCallback = this.errorCallback;\n  t1 = this.result._zone;\n  if (H.functionTypeTest(errorCallback, {func: 1, args: [P.Object, P.StackTrace]}))\n    return t1.runBinary$3(errorCallback, asyncError.error, asyncError.stackTrace);\n  else\n    return t1.runUnary$2(errorCallback, asyncError.error);\n}\n",
-        "type": "dynamic Function(AsyncError)",
-        "measurements": null
+        "code": "handleError$1(asyncError) {\n      var exception, _this = this,\n        errorCallback = _this.errorCallback,\n        result = null,\n        t1 = type$.dynamic,\n        t2 = type$.Object,\n        t3 = _this.result._zone;\n      if (type$.dynamic_Function_Object_StackTrace._is(errorCallback))\n        result = t3.runBinary$3$3(errorCallback, asyncError.error, asyncError.stackTrace, t1, t2, type$.StackTrace);\n      else\n        result = t3.runUnary$2$2(type$.dynamic_Function_Object._as(errorCallback), asyncError.error, t1, t2);\n      try {\n        t1 = _this.$ti._eval$1(\"2/\")._as(result);\n        return t1;\n      } catch (exception) {\n        if (type$.TypeError._is(A.unwrapException(exception))) {\n          if ((_this.state & 1) !== 0)\n            throw A.wrapException(A.ArgumentError$(\"The error handler of Future.then must return a value of the returned future's type\", \"onError\"));\n          throw A.wrapException(A.ArgumentError$(\"The error handler of Future.catchError must return a value of the future's type\", \"onError\"));\n        } else\n          throw exception;\n      }\n    }",
+        "type": "FutureOr<_FutureListener.T> Function(AsyncError)"
+      },
+      "70158663": {
+        "id": "function/70158663",
+        "kind": "function",
+        "name": "_asDoubleS",
+        "size": 215,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "double?",
+        "inferredReturnType": "[null|subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asDoubleS(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double\"));\n    }",
+        "type": "double? Function(dynamic)"
+      },
+      "71377758": {
+        "id": "function/71377758",
+        "kind": "function",
+        "name": "_saneNativeClassName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "name",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(dynamic)"
+      },
+      "72073576": {
+        "id": "function/72073576",
+        "kind": "function",
+        "name": "AssertionError",
+        "size": 76,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/56472591",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=AssertionError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "AssertionError$(message) {\n      return new A.AssertionError(message);\n    }",
+        "type": "dynamic Function([Object?])"
       },
       "72077250": {
         "id": "function/72077250",
         "kind": "function",
         "name": "toString",
-        "size": 92,
+        "size": 78,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/410333734",
         "children": [],
@@ -3039,9 +3823,119 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"DeferredLoadException: '\" + this._s + \"'\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"DeferredLoadException: '\" + this._s + \"'\";\n    }",
+        "type": "String Function()"
+      },
+      "74759397": {
+        "id": "function/74759397",
+        "kind": "function",
+        "name": "_getGenericFunctionBase",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "Rti Function(Rti)"
+      },
+      "77034453": {
+        "id": "function/77034453",
+        "kind": "function",
+        "name": "main",
+        "size": 872,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/318986989",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<void>*",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "main() {\n      var $async$goto = 0,\n        $async$completer = A._makeAsyncAwaitCompleter(type$.void);\n      var $async$main = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {\n        if ($async$errorCode === 1)\n          return A._asyncRethrow($async$result, $async$completer);\n        while (true)\n          switch ($async$goto) {\n            case 0:\n              // Function start\n              $async$goto = 2;\n              return A._asyncAwait(A.loadDeferredLibrary(\"deferred_import\"), $async$main);\n            case 2:\n              // returning from await.\n              A.checkDeferredIsLoaded(\"deferred_import\");\n              A.printString(C.C_Deferred);\n              // implicit return\n              return A._asyncReturn(null, $async$completer);\n          }\n      });\n      return A._asyncStartSync($async$main, $async$completer);\n    }",
+        "type": "Future<void>* Function()"
+      },
+      "77140749": {
+        "id": "function/77140749",
+        "kind": "function",
+        "name": "_rtiArrayToString",
+        "size": 241,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "genericContext",
+            "type": "Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
+            "declaredType": "List<String>?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rtiArrayToString(array, genericContext) {\n      var s, sep, i;\n      for (s = \"\", sep = \"\", i = 0; i < array.length; ++i, sep = \", \")\n        s += B.JSString_methods.$add(sep, A._rtiToString(array[i], genericContext));\n      return s;\n    }",
+        "type": "String Function(Object?,List<String>?)"
+      },
+      "78867062": {
+        "id": "function/78867062",
+        "kind": "function",
+        "name": "_lookupVoidRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?)"
       },
       "79175019": {
         "id": "function/79175019",
@@ -3058,42 +3952,18 @@
           "external": false
         },
         "returnType": "bool",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[null|subtype=bool]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
-      },
-      "80270395": {
-        "id": "function/80270395",
-        "kind": "function",
-        "name": "current",
-        "size": 74,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/365655194",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "ListIterator.E",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads field; writes nothing)",
-        "inlinedCount": 0,
-        "code": "get$current: function() {\n  return this.__internal$_current;\n}\n",
-        "type": "ListIterator.E Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
       "80736041": {
         "id": "function/80736041",
         "kind": "function",
         "name": "hashCode",
-        "size": 96,
+        "size": 82,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/523978038",
         "children": [],
@@ -3108,38 +3978,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(receiver) {\n  return H.Primitives_objectHashCode(receiver);\n}\n",
-        "type": "int Function()",
-        "measurements": null
-      },
-      "81057679": {
-        "id": "function/81057679",
-        "kind": "function",
-        "name": "call",
-        "size": 69,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "closure/310226650",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "bindCallback.R",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "call$0: function() {\n  return this.$this.run$1(this.f);\n}\n",
-        "type": "bindCallback.R Function()",
-        "measurements": null
+        "code": "get$hashCode(receiver) {\n      return A.Primitives_objectHashCode(receiver);\n    }",
+        "type": "int Function()"
       },
       "82702408": {
         "id": "function/82702408",
         "kind": "function",
         "name": "_startMicrotaskLoop",
-        "size": 415,
+        "size": 424,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -3154,15 +4000,108 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_startMicrotaskLoop: [function() {\n  $._isInCallbackLoop = true;\n  try {\n    P._microtaskLoop();\n  } finally {\n    $._lastPriorityCallback = null;\n    $._isInCallbackLoop = false;\n    if ($._nextCallback != null)\n      $.$get$_AsyncRun__scheduleImmediateClosure().call$1(P.async___startMicrotaskLoop$closure());\n  }\n}, \"call$0\", \"async___startMicrotaskLoop$closure\", 0, 0, 1]\n",
-        "type": "void Function()",
-        "measurements": null
+        "code": "_startMicrotaskLoop() {\n      $._isInCallbackLoop = true;\n      try {\n        A._microtaskLoop();\n      } finally {\n        $._lastPriorityCallback = null;\n        $._isInCallbackLoop = false;\n        if ($._nextCallback != null)\n          $.$get$_AsyncRun__scheduleImmediateClosure().call$1(A.async___startMicrotaskLoop$closure());\n      }\n    }\n_static_0(A, \"async___startMicrotaskLoop$closure\", \"_startMicrotaskLoop\", 0);\n",
+        "type": "void Function()"
+      },
+      "83342486": {
+        "id": "function/83342486",
+        "kind": "function",
+        "name": "_isInt",
+        "size": 95,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": "_isInt(object) {\n      return typeof object == \"number\" && Math.floor(object) === object;\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "83781773": {
+        "id": "function/83781773",
+        "kind": "function",
+        "name": "_lookupInterfaceRti",
+        "size": 622,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "name",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupInterfaceRti(universe, $name, $arguments) {\n      var probe, rti, t1,\n        s = $name;\n      if ($arguments.length > 0)\n        s += \"<\" + A._Universe__canonicalRecipeJoin($arguments) + \">\";\n      probe = universe.eC.get(s);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 9;\n      rti._primary = $name;\n      rti._rest = $arguments;\n      if ($arguments.length > 0)\n        rti._precomputed1 = $arguments[0];\n      rti._canonicalRecipe = s;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(s, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,String,Object?)"
+      },
+      "89307104": {
+        "id": "function/89307104",
+        "kind": "function",
+        "name": "instanceTypeName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "String Function(Object?)"
       },
       "91425461": {
         "id": "function/91425461",
         "kind": "function",
         "name": "hashCode",
-        "size": 60,
+        "size": 46,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/851867060",
         "children": [],
@@ -3177,15 +4116,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(receiver) {\n  return 0;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$hashCode(receiver) {\n      return 0;\n    }",
+        "type": "int Function()"
+      },
+      "91691962": {
+        "id": "function/91691962",
+        "kind": "function",
+        "name": "arrayLength",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 35,
+        "code": "",
+        "type": "int Function(Object?)"
       },
       "93381370": {
         "id": "function/93381370",
         "kind": "function",
         "name": "toString",
-        "size": 66,
+        "size": 52,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/542248491",
         "children": [],
@@ -3200,9 +4166,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"Stack Overflow\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"Stack Overflow\";\n    }",
+        "type": "String Function()"
       },
       "94108092": {
         "id": "function/94108092",
@@ -3221,11 +4186,10 @@
         "returnType": "dynamic",
         "inferredReturnType": "[exact=_Future]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 5,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 6,
+        "code": "",
+        "type": "dynamic Function()"
       },
       "95599505": {
         "id": "function/95599505",
@@ -3246,15 +4210,47 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "95816591": {
+        "id": "function/95816591",
+        "kind": "function",
+        "name": "_findRule",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "targetType",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "Object? Function(Object?,String)"
       },
       "96457955": {
         "id": "function/96457955",
         "kind": "function",
         "name": "_completeWithValue",
-        "size": 222,
+        "size": 279,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
@@ -3275,15 +4271,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_completeWithValue$1: function(value) {\n  var listeners = this._removeListeners$0();\n  this._state = 4;\n  this._resultOrListeners = value;\n  P._Future__propagateToListeners(this, listeners);\n}\n",
-        "type": "void Function(_Future.T)",
-        "measurements": null
+        "code": "_completeWithValue$1(value) {\n      var listeners, _this = this;\n      _this.$ti._precomputed1._as(value);\n      listeners = _this._removeListeners$0();\n      _this._state = 8;\n      _this._resultOrListeners = value;\n      A._Future__propagateToListeners(_this, listeners);\n    }",
+        "type": "void Function(Object?)"
       },
       "98156511": {
         "id": "function/98156511",
         "kind": "function",
         "name": "contains",
-        "size": 534,
+        "size": 363,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -3298,21 +4293,20 @@
         "parameters": [
           {
             "name": "object",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "type": "[null|exact=JSString]",
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "contains$1: function(_, object) {\n  var strings, nums;\n  if (typeof object === \"string\" && object !== \"__proto__\") {\n    strings = this._strings;\n    if (strings == null)\n      return false;\n    return strings[object] != null;\n  } else if (typeof object === \"number\" && (object & 0x3ffffff) === object) {\n    nums = this._nums;\n    if (nums == null)\n      return false;\n    return nums[object] != null;\n  } else\n    return this._contains$1(object);\n}\n",
-        "type": "bool Function(Object)",
-        "measurements": null
+        "code": "contains$1(_, object) {\n      var strings, t1;\n      if (typeof object == \"string\" && object !== \"__proto__\") {\n        strings = this._strings;\n        if (strings == null)\n          return false;\n        return type$.nullable__LinkedHashSetCell._as(strings[object]) != null;\n      } else {\n        t1 = this._contains$1(object);\n        return t1;\n      }\n    }",
+        "type": "bool Function(Object?)"
       },
       "99251871": {
         "id": "function/99251871",
         "kind": "function",
         "name": "iterator",
-        "size": 172,
+        "size": 228,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -3327,44 +4321,47 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
-        "code": "get$iterator: function(_) {\n  var t1 = new P._LinkedHashSetIterator(this, this._modifications, null, null);\n  t1._cell = this._first;\n  return t1;\n}\n",
-        "type": "Iterator<_LinkedHashSet.E> Function()",
-        "measurements": null
+        "code": "get$iterator(_) {\n      var _this = this,\n        t1 = new A._LinkedHashSetIterator(_this, _this._modifications, A._instanceType(_this)._eval$1(\"_LinkedHashSetIterator<1>\"));\n      t1._cell = _this._first;\n      return t1;\n    }",
+        "type": "Iterator<_LinkedHashSet.E> Function()"
       },
-      "99501118": {
-        "id": "function/99501118",
+      "101848641": {
+        "id": "function/101848641",
         "kind": "function",
-        "name": "complete",
-        "size": 325,
+        "name": "_canonicalRecipeOfFunction",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/952584796",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "void",
-        "inferredReturnType": "[null]",
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
-            "name": "value",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "returnType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "complete$1: [function(value) {\n  var t1 = this.future;\n  if (t1._state !== 0)\n    throw H.wrapException(P.StateError$(\"Future already completed\"));\n  t1._complete$1(value);\n}, function() {\n  return this.complete$1(null);\n}, \"complete$0\", \"call$1\", \"call$0\", \"get$complete\", 0, 2, 15]\n",
-        "type": "void Function([dynamic])",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti,_FunctionParameters)"
       },
       "102471615": {
         "id": "function/102471615",
         "kind": "function",
         "name": "complete",
-        "size": 208,
+        "size": 286,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/714718140",
         "children": [],
@@ -3380,22 +4377,21 @@
           {
             "name": "value",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "FutureOr<_AsyncCompleter.T>?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "complete$1: function(value) {\n  var t1 = this.future;\n  if (t1._state !== 0)\n    throw H.wrapException(P.StateError$(\"Future already completed\"));\n  t1._asyncComplete$1(value);\n}\n",
-        "type": "void Function([dynamic])",
-        "measurements": null
+        "code": "complete$1(value) {\n      var t2,\n        t1 = this.$ti;\n      t1._eval$1(\"1/?\")._as(value);\n      t2 = this.future;\n      if ((t2._state & 30) !== 0)\n        throw A.wrapException(A.StateError$(\"Future already completed\"));\n      t2._asyncComplete$1(t1._eval$1(\"1/\")._as(value));\n    }",
+        "type": "void Function([Object?])"
       },
-      "108053021": {
-        "id": "function/108053021",
+      "103899378": {
+        "id": "function/103899378",
         "kind": "function",
-        "name": "hasNoField",
-        "size": 0,
+        "name": "_bind",
+        "size": 97,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/214521760",
         "children": [],
         "modifiers": {
           "static": false,
@@ -3403,25 +4399,85 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "typeOrTuple",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_bind$1(typeOrTuple) {\n      return A._Universe_bind(init.typeUniverse, this, typeOrTuple);\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "104513495": {
+        "id": "function/104513495",
+        "kind": "function",
+        "name": "arrayConcat",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "a1",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "a2",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?,Object?)"
+      },
+      "105655227": {
+        "id": "function/105655227",
+        "kind": "function",
+        "name": "_asCheck",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [
           {
-            "name": "object",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
           },
           {
-            "name": "name",
+            "name": "object",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "dynamic Function(dynamic,dynamic)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(Rti,Object?)"
       },
       "109394176": {
         "id": "function/109394176",
@@ -3448,9 +4504,64 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(String)",
-        "measurements": null
+        "code": "",
+        "type": "String Function(String)"
+      },
+      "110436482": {
+        "id": "function/110436482",
+        "kind": "function",
+        "name": "_getGenericFunctionBounds",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Rti)"
+      },
+      "111998270": {
+        "id": "function/111998270",
+        "kind": "function",
+        "name": "_canonicalRecipeOfStar",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti)"
       },
       "114607430": {
         "id": "function/114607430",
@@ -3466,31 +4577,30 @@
           "factory": false,
           "external": false
         },
-        "returnType": "List<dynamic>",
-        "inferredReturnType": "[null|subclass=Object]",
+        "returnType": "List<dynamic>?",
+        "inferredReturnType": "[null|subclass=JSArray]",
         "parameters": [
           {
             "name": "table",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "dynamic"
           },
           {
             "name": "element",
-            "type": "[null|subclass=Object]",
+            "type": "[null|exact=JSString]",
             "declaredType": "dynamic"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "List<dynamic> Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "List<dynamic>? Function(dynamic,dynamic)"
       },
       "116203851": {
         "id": "function/116203851",
         "kind": "function",
         "name": "toString",
-        "size": 114,
+        "size": 100,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/8008562",
         "children": [],
@@ -3505,15 +4615,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"Deferred library \" + H.S(this.libraryName) + \" was not loaded.\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"Deferred library \" + A.S(this.libraryName) + \" was not loaded.\";\n    }",
+        "type": "String Function()"
       },
       "116583875": {
         "id": "function/116583875",
         "kind": "function",
         "name": "_asyncRethrow",
-        "size": 143,
+        "size": 133,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -3539,15 +4648,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_asyncRethrow: function(object, completer) {\n  completer.completeError$2(H.unwrapException(object), H.getTraceFromException(object));\n}\n",
-        "type": "dynamic Function(dynamic,Completer<dynamic>)",
-        "measurements": null
+        "code": "_asyncRethrow(object, completer) {\n      completer.completeError$2(A.unwrapException(object), A.getTraceFromException(object));\n    }",
+        "type": "dynamic Function(dynamic,Completer<dynamic>)"
       },
       "116599339": {
         "id": "function/116599339",
         "kind": "function",
         "name": "LinkedHashMap._empty",
-        "size": 126,
+        "size": 150,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/614050497",
         "children": [],
@@ -3557,14 +4665,13 @@
           "factory": true,
           "external": false
         },
-        "returnType": "LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>",
+        "returnType": "LinkedHashMap<#A/*free*/,#B/*free*/>",
         "inferredReturnType": "[subclass=JsLinkedHashMap]",
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "LinkedHashMap_LinkedHashMap$_empty: function() {\n  return new H.JsLinkedHashMap(0, null, null, null, null, null, 0);\n}\n",
-        "type": "LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V> Function()",
-        "measurements": null
+        "code": "LinkedHashMap_LinkedHashMap$_empty($K, $V) {\n      return new A.JsLinkedHashMap($K._eval$1(\"@<0>\")._bind$1($V)._eval$1(\"JsLinkedHashMap<1,2>\"));\n    }",
+        "type": "LinkedHashMap<#A,#B> Function<#A extends Object?,#B extends Object?>()"
       },
       "120153851": {
         "id": "function/120153851",
@@ -3585,9 +4692,97 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "120424305": {
+        "id": "function/120424305",
+        "kind": "function",
+        "name": "isTopType",
+        "size": 225,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 5,
+        "code": "isTopType(t) {\n      var t1;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = t === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
+        "type": "bool Function(Rti)"
+      },
+      "122441553": {
+        "id": "function/122441553",
+        "kind": "function",
+        "name": "_recipeJoin",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "String Function(String,String)"
+      },
+      "123297685": {
+        "id": "function/123297685",
+        "kind": "function",
+        "name": "asNum",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num",
+        "inferredReturnType": "[subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "num Function(Object?)"
       },
       "123959555": {
         "id": "function/123959555",
@@ -3608,15 +4803,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
       },
       "128684509": {
         "id": "function/128684509",
         "kind": "function",
         "name": "LinkedHashSet",
-        "size": 156,
+        "size": 107,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143510818",
         "children": [],
@@ -3626,36 +4820,19 @@
           "factory": true,
           "external": false
         },
-        "returnType": "LinkedHashSet<LinkedHashSet.E>",
+        "returnType": "LinkedHashSet<#A/*free*/>",
         "inferredReturnType": "[subclass=_LinkedHashSet]",
-        "parameters": [
-          {
-            "name": "equals",
-            "type": "[null]",
-            "declaredType": "bool Function(LinkedHashSet.E,LinkedHashSet.E)"
-          },
-          {
-            "name": "hashCode",
-            "type": "[null]",
-            "declaredType": "int Function(LinkedHashSet.E)"
-          },
-          {
-            "name": "isValidKey",
-            "type": "[null]",
-            "declaredType": "bool Function(dynamic)"
-          }
-        ],
+        "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "LinkedHashSet_LinkedHashSet: function(equals, hashCode, isValidKey, $E) {\n  return new P._LinkedHashSet(0, null, null, null, null, null, 0, [$E]);\n}\n",
-        "type": "LinkedHashSet<LinkedHashSet.E> Function({bool Function(LinkedHashSet.E,LinkedHashSet.E) equals,int Function(LinkedHashSet.E) hashCode,bool Function(dynamic) isValidKey})",
-        "measurements": null
+        "code": "LinkedHashSet_LinkedHashSet($E) {\n      return new A._LinkedHashSet($E._eval$1(\"_LinkedHashSet<0>\"));\n    }",
+        "type": "LinkedHashSet<#A> Function<#A extends Object?>({bool Function(#A,#A)? equals,int Function(#A)? hashCode,bool Function(dynamic)? isValidKey})"
       },
       "130041650": {
         "id": "function/130041650",
         "kind": "function",
         "name": "toString",
-        "size": 78,
+        "size": 64,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/948502579",
         "children": [],
@@ -3670,15 +4847,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"Bad state: \" + this.message;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"Bad state: \" + this.message;\n    }",
+        "type": "String Function()"
       },
       "130131853": {
         "id": "function/130131853",
         "kind": "function",
         "name": "_contains",
-        "size": 212,
+        "size": 204,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -3693,21 +4869,20 @@
         "parameters": [
           {
             "name": "object",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "type": "[null|exact=JSString]",
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_contains$1: function(object) {\n  var rest = this._rest;\n  if (rest == null)\n    return false;\n  return this._findBucketIndex$2(rest[this._computeHashCode$1(object)], object) >= 0;\n}\n",
-        "type": "bool Function(Object)",
-        "measurements": null
+        "code": "_contains$1(object) {\n      var rest = this._collection$_rest;\n      if (rest == null)\n        return false;\n      return this._findBucketIndex$2(rest[this._computeHashCode$1(object)], object) >= 0;\n    }",
+        "type": "bool Function(Object?)"
       },
-      "136972596": {
-        "id": "function/136972596",
+      "131257513": {
+        "id": "function/131257513",
         "kind": "function",
-        "name": "isFunctionSubtype",
-        "size": 0,
+        "name": "saveStackTrace",
+        "size": 166,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -3717,31 +4892,96 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "s",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "ex",
+            "type": "[subclass=Object]",
+            "declaredType": "Object"
           },
           {
-            "name": "t",
+            "name": "error",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function(dynamic,dynamic)",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "saveStackTrace(ex, error) {\n      if (type$.Error._is(error))\n        if (error.$thrownJsError == null)\n          error.$thrownJsError = ex;\n      return error;\n    }",
+        "type": "Object Function(Object,Object)"
+      },
+      "132742275": {
+        "id": "function/132742275",
+        "kind": "function",
+        "name": "_arrayInstanceType",
+        "size": 266,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_arrayInstanceType(object) {\n      var rti = object[init.arrayRti],\n        defaultRti = type$.JSArray_dynamic;\n      if (rti == null)\n        return defaultRti;\n      if (rti.constructor !== defaultRti.constructor)\n        return defaultRti;\n      return rti;\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "133009644": {
+        "id": "function/133009644",
+        "kind": "function",
+        "name": "_lookupFunctionRti",
+        "size": 1319,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "returnType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupFunctionRti(universe, returnType, parameters) {\n      var sep, t1, key, probe, rti,\n        s = returnType._canonicalRecipe,\n        requiredPositional = parameters._requiredPositional,\n        requiredPositionalLength = requiredPositional.length,\n        optionalPositional = parameters._optionalPositional,\n        optionalPositionalLength = optionalPositional.length,\n        named = parameters._named,\n        namedLength = named.length,\n        recipe = \"(\" + A._Universe__canonicalRecipeJoin(requiredPositional);\n      if (optionalPositionalLength > 0) {\n        sep = requiredPositionalLength > 0 ? \",\" : \"\";\n        t1 = A._Universe__canonicalRecipeJoin(optionalPositional);\n        recipe += sep + \"[\" + t1 + \"]\";\n      }\n      if (namedLength > 0) {\n        sep = requiredPositionalLength > 0 ? \",\" : \"\";\n        t1 = A._Universe__canonicalRecipeJoinNamed(named);\n        recipe += sep + \"{\" + t1 + \"}\";\n      }\n      key = s + (recipe + \")\");\n      probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 11;\n      rti._primary = returnType;\n      rti._rest = parameters;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,_FunctionParameters)"
       },
       "139456351": {
         "id": "function/139456351",
         "kind": "function",
         "name": "call",
-        "size": 297,
+        "size": 265,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/637664934",
         "children": [],
@@ -3751,25 +4991,52 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [
           {
             "name": "k",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           },
           {
             "name": "v",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "call$2: function(k, v) {\n  var t1, t2;\n  t1 = this._box_0;\n  if (!t1.first)\n    this.result._contents += \", \";\n  t1.first = false;\n  t1 = this.result;\n  t2 = t1._contents += H.S(k);\n  t1._contents = t2 + \": \";\n  t1._contents += H.S(v);\n}\n",
-        "type": "Null Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "call$2(k, v) {\n      var t2,\n        t1 = this._box_0;\n      if (!t1.first)\n        this.result._contents += \", \";\n      t1.first = false;\n      t1 = this.result;\n      t2 = t1._contents += A.S(k);\n      t1._contents = t2 + \": \";\n      t1._contents += A.S(v);\n    }",
+        "type": "void Function(Object?,Object?)"
+      },
+      "140617653": {
+        "id": "function/140617653",
+        "kind": "function",
+        "name": "List.from",
+        "size": 252,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/959990109",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "List<#A/*free*/>",
+        "inferredReturnType": "Union([exact=JSExtendableArray], [exact=JSFixedArray])",
+        "parameters": [
+          {
+            "name": "elements",
+            "type": "Container([exact=JSFixedArray], element: [null|subclass=Object], length: null)",
+            "declaredType": "Iterable<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "List_List$from(elements, $E) {\n      var t1, _i,\n        list = A._setArrayType([], $E._eval$1(\"JSArray<0>\"));\n      for (t1 = elements.length, _i = 0; _i < t1; ++_i)\n        B.JSArray_methods.add$1(list, $E._as(elements[_i]));\n      return list;\n    }",
+        "type": "List<#A> Function<#A extends Object?>(Iterable<dynamic>,{bool growable})"
       },
       "143567266": {
         "id": "function/143567266",
@@ -3790,15 +5057,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
       },
       "143741280": {
         "id": "function/143741280",
         "kind": "function",
         "name": "toString",
-        "size": 214,
+        "size": 217,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/790616034",
         "children": [],
@@ -3813,44 +5079,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  var t1 = this._method;\n  if (t1 == null)\n    return \"NullError: \" + H.S(this._message);\n  return \"NullError: method not found: '\" + H.S(t1) + \"' on null\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      var t1 = this._method;\n      if (t1 == null)\n        return \"NoSuchMethodError: \" + A.S(this.__js_helper$_message);\n      return \"NoSuchMethodError: method not found: '\" + t1 + \"' on null\";\n    }",
+        "type": "String Function()"
       },
       "144469777": {
         "id": "function/144469777",
         "kind": "function",
         "name": "length",
-        "size": 308,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/523978038",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "void",
-        "inferredReturnType": "[null]",
-        "parameters": [
-          {
-            "name": "newLength",
-            "type": "[subclass=JSInt]",
-            "declaredType": "int"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "set$length: function(receiver, newLength) {\n  if (!!receiver.fixed$length)\n    H.throwExpression(P.UnsupportedError$(\"set length\"));\n  if (newLength < 0)\n    throw H.wrapException(P.RangeError$range(newLength, 0, null, \"newLength\", null));\n  receiver.length = newLength;\n}\n",
-        "type": "void Function(int)",
-        "measurements": null
-      },
-      "144469778": {
-        "id": "function/144469778",
-        "kind": "function",
-        "name": "length",
-        "size": 72,
+        "size": 58,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/523978038",
         "children": [],
@@ -3865,15 +5101,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$length: function(receiver) {\n  return receiver.length;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$length(receiver) {\n      return receiver.length;\n    }",
+        "type": "int Function()"
+      },
+      "148486138": {
+        "id": "function/148486138",
+        "kind": "function",
+        "name": "evalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 19,
+        "code": "",
+        "type": "Object Function(Object?)"
       },
       "148863126": {
         "id": "function/148863126",
         "kind": "function",
         "name": "NullError",
-        "size": 130,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/790616034",
         "children": [],
@@ -3898,39 +5161,15 @@
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
-        "inlinedCount": 0,
-        "code": "NullError$: function(_message, match) {\n  return new H.NullError(_message, match == null ? null : match.method);\n}\n",
-        "type": "dynamic Function(String,dynamic)",
-        "measurements": null
-      },
-      "150523169": {
-        "id": "function/150523169",
-        "kind": "function",
-        "name": "_startIndex",
-        "size": 221,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/60704969",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "int",
-        "inferredReturnType": "[subclass=JSInt]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "get$_startIndex: function() {\n  var $length, t1;\n  $length = J.get$length$as(this.__internal$_iterable);\n  t1 = this._start;\n  if (t1 > $length)\n    return $length;\n  return t1;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "inlinedCount": 2,
+        "code": "",
+        "type": "dynamic Function(String,dynamic)"
       },
       "150705145": {
         "id": "function/150705145",
         "kind": "function",
         "name": "toString",
-        "size": 222,
+        "size": 231,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/93352366",
         "children": [],
@@ -3945,15 +5184,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  var t1 = this.variableName;\n  return t1 == null ? \"Reading static variable during its initialization\" : \"Reading static variable '\" + H.S(t1) + \"' during its initialization\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      var variableName = this.variableName;\n      return variableName == null ? \"Reading static variable during its initialization\" : \"Reading static variable '\" + variableName + \"' during its initialization\";\n    }",
+        "type": "String Function()"
+      },
+      "160933185": {
+        "id": "function/160933185",
+        "kind": "function",
+        "name": "_instanceType",
+        "size": 130,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "_instanceType(object) {\n      var rti = object.$ti;\n      return rti != null ? rti : A._instanceTypeFromConstructor(object);\n    }",
+        "type": "Rti Function(Object?)"
       },
       "160969748": {
         "id": "function/160969748",
         "kind": "function",
         "name": "_rootRunUnary",
-        "size": 323,
+        "size": 319,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -3963,18 +5229,18 @@
           "factory": false,
           "external": false
         },
-        "returnType": "_rootRunUnary.R",
+        "returnType": "#A/*free*/",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
             "name": "self",
             "type": "[null]",
-            "declaredType": "Zone"
+            "declaredType": "Zone?"
           },
           {
             "name": "parent",
             "type": "[null]",
-            "declaredType": "ZoneDelegate"
+            "declaredType": "ZoneDelegate?"
           },
           {
             "name": "zone",
@@ -3994,15 +5260,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_rootRunUnary: function($self, $parent, zone, f, arg) {\n  var old, t1;\n  t1 = $.Zone__current;\n  if (t1 === zone)\n    return f.call$1(arg);\n  $.Zone__current = zone;\n  old = t1;\n  try {\n    t1 = f.call$1(arg);\n    return t1;\n  } finally {\n    $.Zone__current = old;\n  }\n}\n",
-        "type": "_rootRunUnary.R Function(Zone,ZoneDelegate,Zone,_rootRunUnary.R Function(_rootRunUnary.T),_rootRunUnary.T)",
-        "measurements": null
+        "code": "_rootRunUnary($self, $parent, zone, f, arg, $R, $T) {\n      var old,\n        t1 = $.Zone__current;\n      if (t1 === zone)\n        return f.call$1(arg);\n      $.Zone__current = zone;\n      old = t1;\n      try {\n        t1 = f.call$1(arg);\n        return t1;\n      } finally {\n        $.Zone__current = old;\n      }\n    }",
+        "type": "#A Function<#A extends Object?,#B extends Object?>(Zone?,ZoneDelegate?,Zone,#A Function(#B),#B)"
       },
       "162825675": {
         "id": "function/162825675",
         "kind": "function",
         "name": "join",
-        "size": 383,
+        "size": 248,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/523978038",
         "children": [],
@@ -4023,38 +5288,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "join$1: function(receiver, separator) {\n  var t1, list, i, t2;\n  t1 = receiver.length;\n  list = new Array(t1);\n  list.fixed$length = Array;\n  for (i = 0; i < receiver.length; ++i) {\n    t2 = H.S(receiver[i]);\n    if (i >= t1)\n      return H.ioore(list, i);\n    list[i] = t2;\n  }\n  return list.join(separator);\n}\n",
-        "type": "String Function([String])",
-        "measurements": null
-      },
-      "162872908": {
-        "id": "function/162872908",
-        "kind": "function",
-        "name": "_SyncCompleter",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/952584796",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[exact=_SyncCompleter]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "join$1(receiver, separator) {\n      var i,\n        list = A.List_List$filled(receiver.length, \"\", type$.String);\n      for (i = 0; i < receiver.length; ++i)\n        this.$indexSet(list, i, A.S(receiver[i]));\n      return list.join(separator);\n    }",
+        "type": "String Function([String])"
       },
       "163884478": {
         "id": "function/163884478",
         "kind": "function",
         "name": "_scheduleImmediateWithSetImmediate",
-        "size": 395,
+        "size": 734,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/611525899",
         "children": [
@@ -4077,15 +5318,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_AsyncRun__scheduleImmediateWithSetImmediate: [function(callback) {\n  self.setImmediate(H.convertDartClosureToJS(new P._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback(callback), 0));\n}, \"call$1\", \"async__AsyncRun__scheduleImmediateWithSetImmediate$closure\", 4, 0, 3]\n",
-        "type": "void Function(void Function())",
-        "measurements": null
+        "code": "_AsyncRun__scheduleImmediateWithSetImmediate(callback) {\n      self.setImmediate(A.convertDartClosureToJS(new A._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback(type$.void_Function._as(callback)), 0));\n    }\n_static_1(A, \"async__AsyncRun__scheduleImmediateWithSetImmediate$closure\", \"_AsyncRun__scheduleImmediateWithSetImmediate\", 2);\n",
+        "type": "void Function(void Function())"
       },
       "163889622": {
         "id": "function/163889622",
         "kind": "function",
         "name": "wrapException",
-        "size": 402,
+        "size": 396,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -4106,9 +5346,8 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "wrapException: function(ex) {\n  var wrapper;\n  if (ex == null)\n    ex = new P.NullThrownError();\n  wrapper = new Error();\n  wrapper.dartException = ex;\n  if (\"defineProperty\" in Object) {\n    Object.defineProperty(wrapper, \"message\", {get: H.toStringWrapper});\n    wrapper.name = \"\";\n  } else\n    wrapper.toString = H.toStringWrapper;\n  return wrapper;\n}\n",
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "wrapException(ex) {\n      var wrapper, t1;\n      if (ex == null)\n        ex = new A.NullThrownError();\n      wrapper = new Error();\n      wrapper.dartException = ex;\n      t1 = A.toStringWrapper;\n      if (\"defineProperty\" in Object) {\n        Object.defineProperty(wrapper, \"message\", {get: t1});\n        wrapper.name = \"\";\n      } else\n        wrapper.toString = t1;\n      return wrapper;\n    }",
+        "type": "dynamic Function(dynamic)"
       },
       "164775669": {
         "id": "function/164775669",
@@ -4124,7 +5363,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "registerCallback.R Function()",
+        "returnType": "#A/*free*/ Function()",
         "inferredReturnType": "[subclass=Closure]",
         "parameters": [
           {
@@ -4135,15 +5374,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "registerCallback.R Function() Function(registerCallback.R Function())",
-        "measurements": null
+        "code": "",
+        "type": "#A Function() Function<#A extends Object?>(#A Function())"
       },
       "165003912": {
         "id": "function/165003912",
         "kind": "function",
         "name": "_initializeScheduleImmediate",
-        "size": 1331,
+        "size": 1826,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/611525899",
         "children": [
@@ -4161,15 +5399,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_AsyncRun__initializeScheduleImmediate: function() {\n  var t1, div, span;\n  t1 = {};\n  if (self.scheduleImmediate != null)\n    return P.async__AsyncRun__scheduleImmediateJsOverride$closure();\n  if (self.MutationObserver != null && self.document != null) {\n    div = self.document.createElement(\"div\");\n    span = self.document.createElement(\"span\");\n    t1.storedCallback = null;\n    new self.MutationObserver(H.convertDartClosureToJS(new P._AsyncRun__initializeScheduleImmediate_internalCallback(t1), 1)).observe(div, {childList: true});\n    return new P._AsyncRun__initializeScheduleImmediate_closure(t1, div, span);\n  } else if (self.setImmediate != null)\n    return P.async__AsyncRun__scheduleImmediateWithSetImmediate$closure();\n  return P.async__AsyncRun__scheduleImmediateWithTimer$closure();\n}\n",
-        "type": "Function Function()",
-        "measurements": null
+        "code": "_AsyncRun__initializeScheduleImmediate() {\n      var div, span, t1 = {};\n      if (self.scheduleImmediate != null)\n        return A.async__AsyncRun__scheduleImmediateJsOverride$closure();\n      if (self.MutationObserver != null && self.document != null) {\n        div = self.document.createElement(\"div\");\n        span = self.document.createElement(\"span\");\n        t1.storedCallback = null;\n        new self.MutationObserver(A.convertDartClosureToJS(new A._AsyncRun__initializeScheduleImmediate_internalCallback(t1), 1)).observe(div, {childList: true});\n        return new A._AsyncRun__initializeScheduleImmediate_closure(t1, div, span);\n      } else if (self.setImmediate != null)\n        return A.async__AsyncRun__scheduleImmediateWithSetImmediate$closure();\n      return A.async__AsyncRun__scheduleImmediateWithTimer$closure();\n    }",
+        "type": "Function Function()"
+      },
+      "167217604": {
+        "id": "function/167217604",
+        "kind": "function",
+        "name": "_asIntQ",
+        "size": 243,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int?",
+        "inferredReturnType": "[null|subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asIntQ(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int?\"));\n    }",
+        "type": "int? Function(dynamic)"
       },
       "167405219": {
         "id": "function/167405219",
         "kind": "function",
         "name": "toString",
-        "size": 107,
+        "size": 98,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/627219877",
         "children": [],
@@ -4184,9 +5449,36 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"Instance of '\" + H.Primitives_objectTypeName(this) + \"'\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(this)) + \"'\";\n    }",
+        "type": "String Function()"
+      },
+      "171156881": {
+        "id": "function/171156881",
+        "kind": "function",
+        "name": "typeParameterVariances",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object Function(Object?)"
       },
       "171287120": {
         "id": "function/171287120",
@@ -4202,14 +5494,13 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Function",
+        "returnType": "Function?",
         "inferredReturnType": "[null|subclass=Closure]",
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "Function Function()",
-        "measurements": null
+        "code": "",
+        "type": "Function? Function()"
       },
       "173469993": {
         "id": "function/173469993",
@@ -4230,15 +5521,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": null,
-        "type": "String Function()",
-        "measurements": null
+        "code": "",
+        "type": "String Function()"
       },
       "175997763": {
         "id": "function/175997763",
         "kind": "function",
         "name": "hashCode",
-        "size": 85,
+        "size": 71,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/245082925",
         "children": [],
@@ -4249,19 +5539,18 @@
           "external": false
         },
         "returnType": "int",
-        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "inferredReturnType": "[exact=JSUInt31]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(receiver) {\n  return receiver ? 519018 : 218159;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$hashCode(receiver) {\n      return receiver ? 519018 : 218159;\n    }",
+        "type": "int Function()"
       },
       "176570718": {
         "id": "function/176570718",
         "kind": "function",
         "name": "toString",
-        "size": 101,
+        "size": 87,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/758572498",
         "children": [],
@@ -4276,15 +5565,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return P.IterableBase_iterableToFullString(this, \"{\", \"}\");\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return A.IterableBase_iterableToFullString(this, \"{\", \"}\");\n    }",
+        "type": "String Function()"
       },
       "176842663": {
         "id": "function/176842663",
         "kind": "function",
         "name": "moveNext",
-        "size": 480,
+        "size": 479,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/113750884",
         "children": [],
@@ -4299,9 +5587,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
-        "code": "moveNext$0: function() {\n  var t1 = this._set;\n  if (this._modifications !== t1._modifications)\n    throw H.wrapException(P.ConcurrentModificationError$(t1));\n  else {\n    t1 = this._cell;\n    if (t1 == null) {\n      this._collection$_current = null;\n      return false;\n    } else {\n      this._collection$_current = t1._element;\n      this._cell = t1._next;\n      return true;\n    }\n  }\n}\n",
-        "type": "bool Function()",
-        "measurements": null
+        "code": "moveNext$0() {\n      var _this = this,\n        cell = _this._cell,\n        t1 = _this._set;\n      if (_this._modifications !== t1._modifications)\n        throw A.wrapException(A.ConcurrentModificationError$(t1));\n      else if (cell == null) {\n        _this.set$_collection$_current(null);\n        return false;\n      } else {\n        _this.set$_collection$_current(_this.$ti._eval$1(\"1?\")._as(cell._element));\n        _this._cell = cell._next;\n        return true;\n      }\n    }",
+        "type": "bool Function()"
       },
       "179653294": {
         "id": "function/179653294",
@@ -4322,21 +5609,75 @@
         "parameters": [
           {
             "name": "libraryName",
-            "type": "[null|subclass=Object]",
+            "type": "[null|exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(String)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(String)"
+      },
+      "180845508": {
+        "id": "function/180845508",
+        "kind": "function",
+        "name": "_target",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "Object Function()"
+      },
+      "181998699": {
+        "id": "function/181998699",
+        "kind": "function",
+        "name": "lookupSupertype",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/768954396",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>?",
+        "inferredReturnType": "[null|subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "rule",
+            "type": "[subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "supertype",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "JSArray<dynamic>? Function(Object?,String)"
       },
       "186999466": {
         "id": "function/186999466",
         "kind": "function",
         "name": "length",
-        "size": 72,
+        "size": 58,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/793539876",
         "children": [],
@@ -4351,9 +5692,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$length: function(receiver) {\n  return receiver.length;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$length(receiver) {\n      return receiver.length;\n    }",
+        "type": "int Function()"
       },
       "188708191": {
         "id": "function/188708191",
@@ -4374,22 +5714,105 @@
         "parameters": [
           {
             "name": "stream",
-            "type": "[null|subclass=Object]",
+            "type": "[null]",
             "declaredType": "Stream<_StreamIterator.T>"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(Stream<_StreamIterator.T>)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(Stream<_StreamIterator.T>)"
       },
-      "193787732": {
-        "id": "function/193787732",
+      "194452894": {
+        "id": "function/194452894",
         "kind": "function",
-        "name": "_getRuntimeTypeAsStringV1",
+        "name": "_getRest",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 19,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "195520573": {
+        "id": "function/195520573",
+        "kind": "function",
+        "name": "isFunctionType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "195587727": {
+        "id": "function/195587727",
+        "kind": "function",
+        "name": "erasedTypes",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Object Function(Object?)"
+      },
+      "196790253": {
+        "id": "function/196790253",
+        "kind": "function",
+        "name": "assertThrow",
+        "size": 89,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
         "modifiers": {
@@ -4398,128 +5821,91 @@
           "factory": false,
           "external": false
         },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
+        "returnType": "void",
+        "inferredReturnType": "[empty]",
         "parameters": [
           {
-            "name": "rti",
+            "name": "message",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "onTypeVariable",
-            "type": "[null]",
-            "declaredType": "String Function(int)"
+            "declaredType": "Object"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(dynamic,{String Function(int) onTypeVariable})",
-        "measurements": null
-      },
-      "199851072": {
-        "id": "function/199851072",
-        "kind": "function",
-        "name": "SubListIterable",
-        "size": 232,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/60704969",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[exact=SubListIterable]",
-        "parameters": [
-          {
-            "name": "_iterable",
-            "type": "Union([exact=SubListIterable], [subclass=JSArray])",
-            "declaredType": "Iterable<SubListIterable.E>"
-          },
-          {
-            "name": "_start",
-            "type": "[exact=JSUInt31]",
-            "declaredType": "int"
-          },
-          {
-            "name": "_endOrLength",
-            "type": "[null]",
-            "declaredType": "int"
-          }
-        ],
-        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "SubListIterable$: function(_iterable, _start, _endOrLength) {\n  var t1 = new H.SubListIterable(_iterable, _start, _endOrLength);\n  t1.SubListIterable$3(_iterable, _start, _endOrLength);\n  return t1;\n}\n",
-        "type": "dynamic Function(Iterable<SubListIterable.E>,int,int)",
-        "measurements": null
+        "code": "assertThrow(message) {\n      throw A.wrapException(new A._AssertionError(message));\n    }",
+        "type": "void Function(Object)"
       },
-      "203738274": {
-        "id": "function/203738274",
+      "200890444": {
+        "id": "function/200890444",
         "kind": "function",
-        "name": "extractKeys",
-        "size": 114,
+        "name": "_createGenericFunctionParameterRti",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/527944179",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "List<dynamic>",
-        "inferredReturnType": "[exact=JSFixedArray]",
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
-            "name": "victim",
+            "name": "universe",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "extractKeys: function(victim) {\n  return J.JSArray_JSArray$markFixed(victim ? Object.keys(victim) : []);\n}\n",
-        "type": "List<dynamic> Function(dynamic)",
-        "measurements": null
-      },
-      "204916897": {
-        "id": "function/204916897",
-        "kind": "function",
-        "name": "_codeUnitAt",
-        "size": 203,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/793539876",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "int",
-        "inferredReturnType": "[exact=JSUInt31]",
-        "parameters": [
+            "declaredType": "Object?"
+          },
           {
             "name": "index",
             "type": "[subclass=JSInt]",
             "declaredType": "int"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "_codeUnitAt$1: function(receiver, index) {\n  if (index >= receiver.length)\n    throw H.wrapException(H.diagnoseIndexError(receiver, index));\n  return receiver.charCodeAt(index);\n}\n",
-        "type": "int Function(int)",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,int,String)"
+      },
+      "203929913": {
+        "id": "function/203929913",
+        "kind": "function",
+        "name": "makeListFixedLength",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<#A/*free*/>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "growableList",
+            "type": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
+            "declaredType": "List<makeListFixedLength.T>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "List<#A> Function<#A extends Object?>(List<#A>)"
       },
       "205154197": {
         "id": "function/205154197",
         "kind": "function",
         "name": "_registerErrorHandler",
-        "size": 498,
+        "size": 446,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -4543,17 +5929,44 @@
             "declaredType": "Zone"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "_registerErrorHandler: function(errorHandler, zone) {\n  if (H.functionTypeTest(errorHandler, {func: 1, args: [P.Object, P.StackTrace]}))\n    return zone.registerBinaryCallback$1(errorHandler);\n  if (H.functionTypeTest(errorHandler, {func: 1, args: [P.Object]}))\n    return errorHandler;\n  throw H.wrapException(P.ArgumentError$value(errorHandler, \"onError\", \"Error handler must accept one Object or one Object and a StackTrace as arguments, and return a a valid result\"));\n}\n",
-        "type": "Function Function(Function,Zone)",
-        "measurements": null
+        "code": "_registerErrorHandler(errorHandler, zone) {\n      var t1;\n      if (type$.dynamic_Function_Object_StackTrace._is(errorHandler))\n        return zone.registerBinaryCallback$3$1(errorHandler, type$.dynamic, type$.Object, type$.StackTrace);\n      t1 = type$.dynamic_Function_Object;\n      if (t1._is(errorHandler))\n        return t1._as(errorHandler);\n      throw A.wrapException(A.ArgumentError$value(errorHandler, \"onError\", string$.Error_));\n    }",
+        "type": "Function Function(Function,Zone)"
+      },
+      "207792788": {
+        "id": "function/207792788",
+        "kind": "function",
+        "name": "_installSpecializedIsTest",
+        "size": 1476,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_installSpecializedIsTest(object) {\n      var unstarred, isFn, $name, testRti = this,\n        t1 = type$.Object;\n      if (testRti === t1)\n        return A._finishIsFn(testRti, object, A._isObject);\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = testRti === t1;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return A._finishIsFn(testRti, object, A._isTop);\n      t1 = testRti._kind;\n      unstarred = t1 === 6 ? testRti._primary : testRti;\n      if (unstarred === type$.int)\n        isFn = A._isInt;\n      else if (unstarred === type$.double || unstarred === type$.num)\n        isFn = A._isNum;\n      else if (unstarred === type$.String)\n        isFn = A._isString;\n      else\n        isFn = unstarred === type$.bool ? A._isBool : null;\n      if (isFn != null)\n        return A._finishIsFn(testRti, object, isFn);\n      if (unstarred._kind === 9) {\n        $name = unstarred._primary;\n        if (unstarred._rest.every(A.isTopType)) {\n          testRti._specializedTestResource = \"$is\" + $name;\n          if ($name === \"List\")\n            return A._finishIsFn(testRti, object, A._isListTestViaProperty);\n          return A._finishIsFn(testRti, object, A._isTestViaProperty);\n        }\n      } else if (t1 === 7)\n        return A._finishIsFn(testRti, object, A._generalNullableIsTestImplementation);\n      return A._finishIsFn(testRti, object, A._generalIsTestImplementation);\n    }",
+        "type": "bool Function(Object?)"
       },
       "208283907": {
         "id": "function/208283907",
         "kind": "function",
         "name": "UnsupportedError",
-        "size": 98,
+        "size": 80,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/991730135",
         "children": [],
@@ -4574,9 +5987,8 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "UnsupportedError$: function(message) {\n  return new P.UnsupportedError(message);\n}\n",
-        "type": "dynamic Function(String)",
-        "measurements": null
+        "code": "UnsupportedError$(message) {\n      return new A.UnsupportedError(message);\n    }",
+        "type": "dynamic Function(String)"
       },
       "210296716": {
         "id": "function/210296716",
@@ -4602,16 +6014,15 @@
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
-        "inlinedCount": 4,
-        "code": null,
-        "type": "dynamic Function([Object])",
-        "measurements": null
+        "inlinedCount": 2,
+        "code": "",
+        "type": "dynamic Function([Object])"
       },
       "210974499": {
         "id": "function/210974499",
         "kind": "function",
         "name": "List.filled",
-        "size": 268,
+        "size": 239,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/959990109",
         "children": [],
@@ -4621,30 +6032,80 @@
           "factory": true,
           "external": false
         },
-        "returnType": "List<List.E>",
+        "returnType": "List<#A/*free*/>",
         "inferredReturnType": "Union([exact=JSExtendableArray], [exact=JSFixedArray])",
         "parameters": [
           {
             "name": "length",
-            "type": "[subclass=JSUInt32]",
+            "type": "[subclass=JSInt]",
             "declaredType": "int"
           },
           {
             "name": "fill",
-            "type": "Value([exact=JSBool], value: true)",
+            "type": "Union(null, [exact=JSBool], [exact=JSString])",
             "declaredType": "List.E"
-          },
-          {
-            "name": "growable",
-            "type": "Value([exact=JSBool], value: false)",
-            "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "List_List$filled: function($length, fill, growable) {\n  var result, t1, i;\n  result = J.JSArray_JSArray$fixed($length);\n  if ($length !== 0 && true)\n    for (t1 = result.length, i = 0; i < t1; ++i)\n      result[i] = true;\n  return result;\n}\n",
-        "type": "List<List.E> Function(int,List.E,{bool growable})",
-        "measurements": null
+        "code": "List_List$filled($length, fill, $E) {\n      var i,\n        result = J.JSArray_JSArray$fixed($length, $E);\n      if ($length !== 0 && fill != null)\n        for (i = 0; i < $length; ++i)\n          result[i] = fill;\n      return result;\n    }",
+        "type": "List<#A> Function<#A extends Object?>(int,#A,{bool growable})"
+      },
+      "212177062": {
+        "id": "function/212177062",
+        "kind": "function",
+        "name": "environment",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 12,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "216705978": {
+        "id": "function/216705978",
+        "kind": "function",
+        "name": "_asTop",
+        "size": 43,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_asTop(object) {\n      return object;\n    }",
+        "type": "Object? Function(Object?)"
       },
       "219348673": {
         "id": "function/219348673",
@@ -4665,97 +6126,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function()",
-        "measurements": null
-      },
-      "221934998": {
-        "id": "function/221934998",
-        "kind": "function",
-        "name": "+",
-        "size": 369,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/523978038",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "List<JSArray.E>",
-        "inferredReturnType": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
-        "parameters": [
-          {
-            "name": "other",
-            "type": "[exact=JSUInt31]",
-            "declaredType": "List<JSArray.E>"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "$add: function(receiver, other) {\n  var totalLength, t1;\n  totalLength = C.JSInt_methods.$add(receiver.length, C.JSInt_methods.get$length(other));\n  t1 = [];\n  this.set$length(t1, totalLength);\n  this.setRange$3(t1, 0, receiver.length, receiver);\n  this.setRange$3(t1, receiver.length, totalLength, other);\n  return t1;\n}\n",
-        "type": "List<JSArray.E> Function(List<JSArray.E>)",
-        "measurements": null
-      },
-      "222294695": {
-        "id": "function/222294695",
-        "kind": "function",
-        "name": "ReflectionInfo.internal",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[exact=ReflectionInfo]",
-        "parameters": [
-          {
-            "name": "jsFunction",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "data",
-            "type": "[exact=JSFixedArray]",
-            "declaredType": "List<dynamic>"
-          },
-          {
-            "name": "isAccessor",
-            "type": "[exact=JSBool]",
-            "declaredType": "bool"
-          },
-          {
-            "name": "requiredParameterCount",
-            "type": "[subclass=JSInt]",
-            "declaredType": "int"
-          },
-          {
-            "name": "optionalParameterCount",
-            "type": "[subclass=JSInt]",
-            "declaredType": "int"
-          },
-          {
-            "name": "areOptionalParametersNamed",
-            "type": "[exact=JSBool]",
-            "declaredType": "bool"
-          },
-          {
-            "name": "functionType",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic,List<dynamic>,bool,int,int,bool,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "String Function()"
       },
       "225159691": {
         "id": "function/225159691",
@@ -4782,15 +6154,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic)"
       },
       "229841336": {
         "id": "function/229841336",
         "kind": "function",
         "name": "provokePropertyErrorOn",
-        "size": 255,
+        "size": 213,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
@@ -4811,49 +6182,42 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "TypeErrorDecoder_provokePropertyErrorOn: function(expression) {\n  return function($expr$) {\n    try {\n      $expr$.$method$;\n    } catch (e) {\n      return e.message;\n    }\n  }(expression);\n}\n",
-        "type": "String Function(dynamic)",
-        "measurements": null
+        "code": "TypeErrorDecoder_provokePropertyErrorOn(expression) {\n      return function($expr$) {\n        try {\n          $expr$.$method$;\n        } catch (e) {\n          return e.message;\n        }\n      }(expression);\n    }",
+        "type": "String Function(dynamic)"
       },
-      "230858033": {
-        "id": "function/230858033",
+      "231618349": {
+        "id": "function/231618349",
         "kind": "function",
-        "name": "runtimeTypeToStringV1",
-        "size": 736,
+        "name": "isGrowable",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/523978038",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
         "parameters": [
           {
-            "name": "rti",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "onTypeVariable",
-            "type": "[null]",
-            "declaredType": "String Function(int)"
+            "name": "a",
+            "type": "[subclass=JSArray]",
+            "declaredType": "JSArray<dynamic>"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "runtimeTypeToStringV1: function(rti, onTypeVariable) {\n  var typedefInfo;\n  if (rti == null)\n    return \"dynamic\";\n  if (typeof rti === \"object\" && rti !== null && rti.constructor === Array)\n    return rti[0].builtin$cls + H.joinArgumentsV1(rti, 1, onTypeVariable);\n  if (typeof rti == \"function\")\n    return rti.builtin$cls;\n  if (typeof rti === \"number\" && Math.floor(rti) === rti)\n    return H.S(rti);\n  if (typeof rti.func != \"undefined\") {\n    typedefInfo = rti.typedef;\n    if (typedefInfo != null)\n      return H.runtimeTypeToStringV1(typedefInfo, onTypeVariable);\n    return H._functionRtiToStringV1(rti, onTypeVariable);\n  }\n  return \"unknown-reified-type\";\n}\n",
-        "type": "String Function(dynamic,{String Function(int) onTypeVariable})",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(JSArray<dynamic>)"
       },
       "231669663": {
         "id": "function/231669663",
         "kind": "function",
         "name": "call",
-        "size": 470,
+        "size": 590,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/30023746",
         "children": [],
@@ -4868,15 +6232,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  var e, s, t1, exception;\n  try {\n    t1 = this.listener;\n    this._box_0.listenerValueOrError = t1.result._zone.runUnary$2(t1.callback, this.sourceResult);\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    t1 = this._box_0;\n    t1.listenerValueOrError = new P.AsyncError(e, s);\n    t1.listenerHasError = true;\n  }\n}\n",
-        "type": "void Function()",
-        "measurements": null
+        "code": "call$0() {\n      var e, s, t1, t2, t3, t4, t5, exception;\n      try {\n        t1 = this._box_0;\n        t2 = t1.listener;\n        t3 = t2.$ti;\n        t4 = t3._precomputed1;\n        t5 = t4._as(this.sourceResult);\n        t1.listenerValueOrError = t2.result._zone.runUnary$2$2(t3._eval$1(\"2/(1)\")._as(t2.callback), t5, t3._eval$1(\"2/\"), t4);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        t1 = this._box_0;\n        t1.listenerValueOrError = A.AsyncError$(e, s);\n        t1.listenerHasError = true;\n      }\n    }",
+        "type": "void Function()"
       },
       "243489700": {
         "id": "function/243489700",
         "kind": "function",
         "name": "checkValidRange",
-        "size": 379,
+        "size": 310,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/974704527",
         "children": [],
@@ -4887,44 +6250,61 @@
           "external": false
         },
         "returnType": "int",
-        "inferredReturnType": "[subclass=JSUInt32]",
+        "inferredReturnType": "[subclass=JSInt]",
         "parameters": [
           {
             "name": "start",
-            "type": "[subclass=JSUInt32]",
+            "type": "[exact=JSUInt31]",
             "declaredType": "int"
           },
           {
             "name": "end",
-            "type": "[subclass=JSUInt32]",
-            "declaredType": "int"
+            "type": "[subclass=JSInt]",
+            "declaredType": "int?"
           },
           {
             "name": "length",
-            "type": "[subclass=JSUInt32]",
+            "type": "[subclass=JSInt]",
             "declaredType": "int"
-          },
-          {
-            "name": "startName",
-            "type": "[null]",
-            "declaredType": "String"
-          },
-          {
-            "name": "endName",
-            "type": "[null]",
-            "declaredType": "String"
-          },
-          {
-            "name": "message",
-            "type": "[null]",
-            "declaredType": "String"
           }
         ],
-        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "RangeError_checkValidRange: function(start, end, $length, startName, endName, message) {\n  if (start > $length)\n    throw H.wrapException(P.RangeError$range(start, 0, $length, \"start\", message));\n  if (start > end || end > $length)\n    throw H.wrapException(P.RangeError$range(end, start, $length, \"end\", message));\n  return end;\n}\n",
-        "type": "int Function(int,int,int,[String,String,String])",
-        "measurements": null
+        "code": "RangeError_checkValidRange(start, end, $length) {\n      if (start > $length)\n        throw A.wrapException(A.RangeError$range(start, 0, $length, \"start\", null));\n      if (start > end || end > $length)\n        throw A.wrapException(A.RangeError$range(end, start, $length, \"end\", null));\n      return end;\n    }",
+        "type": "int Function(int,int?,int,[String?,String?,String?])"
+      },
+      "245364359": {
+        "id": "function/245364359",
+        "kind": "function",
+        "name": "_getFutureFromFutureOr",
+        "size": 215,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Rti__getFutureFromFutureOr(universe, rti) {\n      var future = rti._precomputed1;\n      return future == null ? rti._precomputed1 = A._Universe__lookupInterfaceRti(universe, \"Future\", [rti._primary]) : future;\n    }",
+        "type": "Rti Function(Object?,Rti)"
       },
       "245651187": {
         "id": "function/245651187",
@@ -4951,17 +6331,16 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "bool Function(dynamic)"
       },
-      "248499885": {
-        "id": "function/248499885",
+      "247461665": {
+        "id": "function/247461665",
         "kind": "function",
-        "name": "call",
-        "size": 92,
+        "name": "_asInt",
+        "size": 192,
         "outputUnit": "outputUnit/669725655",
-        "parent": "closure/741043867",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -4969,20 +6348,25 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
-        "inferredReturnType": "[null]",
-        "parameters": [],
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  this.$this._completer.completeError$2(this.e, this.st);\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "code": "_asInt(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int\"));\n    }",
+        "type": "int Function(Object?)"
       },
       "248883787": {
         "id": "function/248883787",
         "kind": "function",
         "name": "call",
-        "size": 240,
+        "size": 160,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/601101415",
         "children": [],
@@ -4998,20 +6382,19 @@
           {
             "name": "_",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Null"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(_) {\n  var t1, t2;\n  t1 = this.waitingForLoad;\n  t2 = this.i;\n  if (t2 >= t1.length)\n    return H.ioore(t1, t2);\n  t1[t2] = false;\n  this.initializeSomeLoadedHunks.call$0();\n}\n",
-        "type": "Null Function(Object)",
-        "measurements": null
+        "code": "call$1(_) {\n      type$.Null._as(_);\n      B.JSArray_methods.$indexSet(this.waitingForLoad, this.i, false);\n      this.initializeSomeLoadedHunks.call$0();\n    }",
+        "type": "Null Function(Null)"
       },
       "249771766": {
         "id": "function/249771766",
         "kind": "function",
         "name": "call",
-        "size": 138,
+        "size": 46,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/637416128",
         "children": [],
@@ -5026,15 +6409,95 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  var t1 = this.$this;\n  t1._handle = null;\n  t1._tick = 1;\n  this.callback.call$0();\n}\n",
-        "type": "void Function()",
-        "measurements": null
+        "code": "call$0() {\n      this.callback.call$0();\n    }",
+        "type": "void Function()"
+      },
+      "253415970": {
+        "id": "function/253415970",
+        "kind": "function",
+        "name": "_finishIsFn",
+        "size": 102,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "isFn",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_finishIsFn(testRti, object, isFn) {\n      testRti._is = isFn;\n      return testRti._is(object);\n    }",
+        "type": "bool Function(Rti,Object?,Object?)"
+      },
+      "253560656": {
+        "id": "function/253560656",
+        "kind": "function",
+        "name": "_createBindingRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "base",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,Rti,Object?,String)"
       },
       "253794122": {
         "id": "function/253794122",
         "kind": "function",
         "name": "fromTearOff",
-        "size": 2845,
+        "size": 2504,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/317291728",
         "children": [],
@@ -5048,70 +6511,15 @@
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "receiver",
+            "name": "parameters",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "functions",
-            "type": "[exact=JSFixedArray]",
-            "declaredType": "List<dynamic>"
-          },
-          {
-            "name": "reflectionInfo",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "isStatic",
-            "type": "[exact=JSBool]",
-            "declaredType": "bool"
-          },
-          {
-            "name": "jsArguments",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "propertyName",
-            "type": "[exact=JSString]",
-            "declaredType": "String"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_fromTearOff: function(receiver, functions, reflectionInfo, isStatic, jsArguments, propertyName) {\n  var $function, callName, functionType, $prototype, $constructor, t1, isIntercepted, trampoline, signatureFunction, getReceiver, i, stub, stubCallName, t2;\n  $function = functions[0];\n  callName = $function.$callName;\n  if (!!J.getInterceptor(reflectionInfo).$isList) {\n    $function.$reflectionInfo = reflectionInfo;\n    functionType = H.ReflectionInfo_ReflectionInfo($function).functionType;\n  } else\n    functionType = reflectionInfo;\n  $prototype = isStatic ? Object.create(new H.StaticClosure().constructor.prototype) : Object.create(new H.BoundClosure(null, null, null, null).constructor.prototype);\n  $prototype.$initialize = $prototype.constructor;\n  if (isStatic)\n    $constructor = function() {\n      this.$initialize();\n    };\n  else {\n    t1 = $.Closure_functionCounter;\n    $.Closure_functionCounter = J.$add$ans(t1, 1);\n    $constructor = new Function(\"a,b,c,d\" + t1, \"this.$initialize(a,b,c,d\" + t1 + \")\");\n  }\n  $prototype.constructor = $constructor;\n  $constructor.prototype = $prototype;\n  if (!isStatic) {\n    isIntercepted = jsArguments.length == 1 && true;\n    trampoline = H.Closure_forwardCallTo(receiver, $function, isIntercepted);\n    trampoline.$reflectionInfo = reflectionInfo;\n  } else {\n    $prototype.$static_name = propertyName;\n    trampoline = $function;\n    isIntercepted = false;\n  }\n  if (typeof functionType == \"number\")\n    signatureFunction = function(getType, t) {\n      return function() {\n        return getType(t);\n      };\n    }(H.getType, functionType);\n  else if (typeof functionType == \"function\")\n    if (isStatic)\n      signatureFunction = functionType;\n    else {\n      getReceiver = isIntercepted ? H.BoundClosure_receiverOf : H.BoundClosure_selfOf;\n      signatureFunction = function(f, r) {\n        return function() {\n          return f.apply({$receiver: r(this)}, arguments);\n        };\n      }(functionType, getReceiver);\n    }\n  else\n    throw H.wrapException(\"Error in reflectionInfo.\");\n  $prototype.$signature = signatureFunction;\n  $prototype[callName] = trampoline;\n  for (t1 = functions.length, i = 1; i < t1; ++i) {\n    stub = functions[i];\n    stubCallName = stub.$callName;\n    if (stubCallName != null) {\n      t2 = isStatic ? stub : H.Closure_forwardCallTo(receiver, stub, isIntercepted);\n      $prototype[stubCallName] = t2;\n    }\n  }\n  $prototype[\"call*\"] = trampoline;\n  $prototype.$requiredArgCount = $function.$requiredArgCount;\n  $prototype.$defaultValues = $function.$defaultValues;\n  return $constructor;\n}\n",
-        "type": "dynamic Function(dynamic,List<dynamic>,dynamic,bool,dynamic,String)",
-        "measurements": null
-      },
-      "257728434": {
-        "id": "function/257728434",
-        "kind": "function",
-        "name": "isDartFunctionTypeRti",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "type",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          }
-        ],
-        "sideEffects": "SideEffects(reads static; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function(Object)",
-        "measurements": null
+        "code": "Closure_fromTearOff(parameters) {\n      var $prototype, $constructor, t2, trampoline, applyTrampoline, i, stub, stub0, stubName, stubCallName,\n        container = parameters.co,\n        isStatic = parameters.iS,\n        isIntercepted = parameters.iI,\n        needsDirectAccess = parameters.nDA,\n        applyTrampolineIndex = parameters.aI,\n        funsOrNames = parameters.fs,\n        callNames = parameters.cs,\n        $name = funsOrNames[0],\n        callName = callNames[0],\n        $function = container[$name],\n        t1 = parameters.fT;\n      t1.toString;\n      A.boolConversionCheck(isStatic);\n      $prototype = isStatic ? Object.create(new A.StaticClosure().constructor.prototype) : Object.create(new A.BoundClosure(null, null).constructor.prototype);\n      $prototype.$initialize = $prototype.constructor;\n      if (isStatic)\n        $constructor = function static_tear_off() {\n          this.$initialize();\n        };\n      else {\n        t2 = $.Closure_functionCounter;\n        if (typeof t2 !== \"number\")\n          return t2.$add();\n        $.Closure_functionCounter = t2 + 1;\n        t2 = new Function(\"a,b\" + t2, \"this.$initialize(a,b\" + t2 + \")\");\n        $constructor = t2;\n      }\n      $prototype.constructor = $constructor;\n      $constructor.prototype = $prototype;\n      $prototype.$_name = $name;\n      $prototype.$_target = $function;\n      t2 = !isStatic;\n      if (t2)\n        trampoline = A.Closure_forwardCallTo($name, $function, isIntercepted, needsDirectAccess);\n      else {\n        $prototype.$static_name = $name;\n        trampoline = $function;\n      }\n      $prototype.$signature = A.Closure__computeSignatureFunctionNewRti(t1, isStatic, isIntercepted);\n      $prototype[callName] = trampoline;\n      for (applyTrampoline = trampoline, i = 1; i < funsOrNames.length; ++i) {\n        stub = funsOrNames[i];\n        if (typeof stub == \"string\") {\n          stub0 = container[stub];\n          stubName = stub;\n          stub = stub0;\n        } else\n          stubName = \"\";\n        stubCallName = callNames[i];\n        if (stubCallName != null) {\n          if (t2)\n            stub = A.Closure_forwardCallTo(stubName, stub, isIntercepted, needsDirectAccess);\n          $prototype[stubCallName] = stub;\n        }\n        if (i === applyTrampolineIndex)\n          applyTrampoline = stub;\n      }\n      $prototype[\"call*\"] = applyTrampoline;\n      $prototype.$requiredArgCount = parameters.rC;\n      $prototype.$defaultValues = parameters.dV;\n      return $constructor;\n    }",
+        "type": "dynamic Function(Object?)"
       },
       "259223906": {
         "id": "function/259223906",
@@ -5137,21 +6545,20 @@
           },
           {
             "name": "stackTrace",
-            "type": "[null|subclass=Object]",
+            "type": "[null|subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic,StackTrace)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic,StackTrace)"
       },
       "262026503": {
         "id": "function/262026503",
         "kind": "function",
         "name": "_rootRun",
-        "size": 307,
+        "size": 299,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -5161,18 +6568,18 @@
           "factory": false,
           "external": false
         },
-        "returnType": "_rootRun.R",
+        "returnType": "#A/*free*/",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
             "name": "self",
             "type": "[null]",
-            "declaredType": "Zone"
+            "declaredType": "Zone?"
           },
           {
             "name": "parent",
             "type": "[null]",
-            "declaredType": "ZoneDelegate"
+            "declaredType": "ZoneDelegate?"
           },
           {
             "name": "zone",
@@ -5187,15 +6594,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_rootRun: function($self, $parent, zone, f) {\n  var old, t1;\n  t1 = $.Zone__current;\n  if (t1 === zone)\n    return f.call$0();\n  $.Zone__current = zone;\n  old = t1;\n  try {\n    t1 = f.call$0();\n    return t1;\n  } finally {\n    $.Zone__current = old;\n  }\n}\n",
-        "type": "_rootRun.R Function(Zone,ZoneDelegate,Zone,_rootRun.R Function())",
-        "measurements": null
+        "code": "_rootRun($self, $parent, zone, f, $R) {\n      var old,\n        t1 = $.Zone__current;\n      if (t1 === zone)\n        return f.call$0();\n      $.Zone__current = zone;\n      old = t1;\n      try {\n        t1 = f.call$0();\n        return t1;\n      } finally {\n        $.Zone__current = old;\n      }\n    }",
+        "type": "#A Function<#A extends Object?>(Zone?,ZoneDelegate?,Zone,#A Function())"
       },
       "263363184": {
         "id": "function/263363184",
         "kind": "function",
         "name": "_asyncCompleteError",
-        "size": 420,
+        "size": 634,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [
@@ -5213,7 +6619,7 @@
           {
             "name": "error",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           },
           {
             "name": "stackTrace",
@@ -5223,15 +6629,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_asyncCompleteError$2: function(error, stackTrace) {\n  var t1;\n  this._state = 1;\n  t1 = this._zone;\n  t1.toString;\n  P._rootScheduleMicrotask(null, null, t1, new P._Future__asyncCompleteError_closure(this, error, stackTrace));\n}\n",
-        "type": "void Function(dynamic,StackTrace)",
-        "measurements": null
+        "code": "_asyncCompleteError$2(error, stackTrace) {\n      type$.StackTrace._as(stackTrace);\n      this._state ^= 2;\n      A._rootScheduleMicrotask(null, null, this._zone, type$.void_Function._as(new A._Future__asyncCompleteError_closure(this, error, stackTrace)));\n    }",
+        "type": "void Function(Object,StackTrace)"
       },
       "263798810": {
         "id": "function/263798810",
         "kind": "function",
         "name": "convertDartClosureToJS",
-        "size": 412,
+        "size": 402,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -5257,16 +6662,43 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "convertDartClosureToJS: function(closure, arity) {\n  var $function = closure.$identity;\n  if (!!$function)\n    return $function;\n  $function = function(closure, arity, invoke) {\n    return function(a1, a2, a3, a4) {\n      return invoke(closure, arity, a1, a2, a3, a4);\n    };\n  }(closure, arity, H.invokeClosure);\n  closure.$identity = $function;\n  return $function;\n}\n",
-        "type": "dynamic Function(dynamic,int)",
-        "measurements": null
+        "code": "convertDartClosureToJS(closure, arity) {\n      var $function = closure.$identity;\n      if (!!$function)\n        return $function;\n      $function = function(closure, arity, invoke) {\n        return function(a1, a2, a3, a4) {\n          return invoke(closure, arity, a1, a2, a3, a4);\n        };\n      }(closure, arity, A.invokeClosure);\n      closure.$identity = $function;\n      return $function;\n    }",
+        "type": "dynamic Function(dynamic,int)"
       },
-      "264370095": {
-        "id": "function/264370095",
+      "264634420": {
+        "id": "function/264634420",
         "kind": "function",
-        "name": "rawRtiToJsConstructorName",
+        "name": "_getGenericFunctionParameterIndex",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "int Function(Rti)"
+      },
+      "265638794": {
+        "id": "function/265638794",
+        "kind": "function",
+        "name": "unwrapException",
+        "size": 399,
+        "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
         "modifiers": {
@@ -5275,91 +6707,108 @@
           "factory": false,
           "external": false
         },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "ex",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "unwrapException(ex) {\n      if (ex == null)\n        return new A.NullThrownFromJavaScriptException(ex);\n      if (ex instanceof A.ExceptionAndStackTrace)\n        return A.saveStackTrace(ex, ex.dartException);\n      if (typeof ex !== \"object\")\n        return ex;\n      if (\"dartException\" in ex)\n        return A.saveStackTrace(ex, ex.dartException);\n      return A._unwrapNonDartException(ex);\n    }",
+        "type": "Object Function(Object?)"
+      },
+      "266327677": {
+        "id": "function/266327677",
+        "kind": "function",
+        "name": "digitValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1013977545",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "code",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "int Function(int)"
+      },
+      "266572710": {
+        "id": "function/266572710",
+        "kind": "function",
+        "name": "findTypeParameterVariances",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "cls",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object? Function(Object?,String)"
+      },
+      "268212636": {
+        "id": "function/268212636",
+        "kind": "function",
+        "name": "toString",
+        "size": 67,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/642774187",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
         "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
-        "parameters": [
-          {
-            "name": "rti",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "String Function(Object)",
-        "measurements": null
-      },
-      "265638794": {
-        "id": "function/265638794",
-        "kind": "function",
-        "name": "unwrapException",
-        "size": 4652,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [
-          "closure/771507318"
-        ],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "ex",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "unwrapException: function(ex) {\n  var t1, message, number, ieErrorCode, nsme, notClosure, nullCall, nullLiteralCall, undefCall, undefLiteralCall, nullProperty, undefProperty, undefLiteralProperty, match, t2;\n  t1 = new H.unwrapException_saveStackTrace(ex);\n  if (ex == null)\n    return;\n  if (ex instanceof H.ExceptionAndStackTrace)\n    return t1.call$1(ex.dartException);\n  if (typeof ex !== \"object\")\n    return ex;\n  if (\"dartException\" in ex)\n    return t1.call$1(ex.dartException);\n  else if (!(\"message\" in ex))\n    return ex;\n  message = ex.message;\n  if (\"number\" in ex && typeof ex.number == \"number\") {\n    number = ex.number;\n    ieErrorCode = number & 65535;\n    if ((C.JSInt_methods._shrOtherPositive$1(number, 16) & 8191) === 10)\n      switch (ieErrorCode) {\n        case 438:\n          return t1.call$1(H.JsNoSuchMethodError$(H.S(message) + \" (Error \" + ieErrorCode + \")\", null));\n        case 445:\n        case 5007:\n          return t1.call$1(H.NullError$(H.S(message) + \" (Error \" + ieErrorCode + \")\", null));\n      }\n  }\n  if (ex instanceof TypeError) {\n    nsme = $.$get$TypeErrorDecoder_noSuchMethodPattern();\n    notClosure = $.$get$TypeErrorDecoder_notClosurePattern();\n    nullCall = $.$get$TypeErrorDecoder_nullCallPattern();\n    nullLiteralCall = $.$get$TypeErrorDecoder_nullLiteralCallPattern();\n    undefCall = $.$get$TypeErrorDecoder_undefinedCallPattern();\n    undefLiteralCall = $.$get$TypeErrorDecoder_undefinedLiteralCallPattern();\n    nullProperty = $.$get$TypeErrorDecoder_nullPropertyPattern();\n    $.$get$TypeErrorDecoder_nullLiteralPropertyPattern();\n    undefProperty = $.$get$TypeErrorDecoder_undefinedPropertyPattern();\n    undefLiteralProperty = $.$get$TypeErrorDecoder_undefinedLiteralPropertyPattern();\n    match = nsme.matchTypeError$1(message);\n    if (match != null)\n      return t1.call$1(H.JsNoSuchMethodError$(message, match));\n    else {\n      match = notClosure.matchTypeError$1(message);\n      if (match != null) {\n        match.method = \"call\";\n        return t1.call$1(H.JsNoSuchMethodError$(message, match));\n      } else {\n        match = nullCall.matchTypeError$1(message);\n        if (match == null) {\n          match = nullLiteralCall.matchTypeError$1(message);\n          if (match == null) {\n            match = undefCall.matchTypeError$1(message);\n            if (match == null) {\n              match = undefLiteralCall.matchTypeError$1(message);\n              if (match == null) {\n                match = nullProperty.matchTypeError$1(message);\n                if (match == null) {\n                  match = nullLiteralCall.matchTypeError$1(message);\n                  if (match == null) {\n                    match = undefProperty.matchTypeError$1(message);\n                    if (match == null) {\n                      match = undefLiteralProperty.matchTypeError$1(message);\n                      t2 = match != null;\n                    } else\n                      t2 = true;\n                  } else\n                    t2 = true;\n                } else\n                  t2 = true;\n              } else\n                t2 = true;\n            } else\n              t2 = true;\n          } else\n            t2 = true;\n        } else\n          t2 = true;\n        if (t2)\n          return t1.call$1(H.NullError$(message, match));\n      }\n    }\n    return t1.call$1(new H.UnknownJsTypeError(typeof message === \"string\" ? message : \"\"));\n  }\n  if (ex instanceof RangeError) {\n    if (typeof message === \"string\" && message.indexOf(\"call stack\") !== -1)\n      return new P.StackOverflowError();\n    message = function(ex) {\n      try {\n        return String(ex);\n      } catch (e) {\n      }\n      return null;\n    }(ex);\n    return t1.call$1(new P.ArgumentError(false, null, null, typeof message === \"string\" ? message.replace(/^RangeError:\\s*/, \"\") : message));\n  }\n  if (typeof InternalError == \"function\" && ex instanceof InternalError)\n    if (typeof message === \"string\" && message === \"too much recursion\")\n      return new P.StackOverflowError();\n  return ex;\n}\n",
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
-      },
-      "268773900": {
-        "id": "function/268773900",
-        "kind": "function",
-        "name": "getIndex",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "array",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "index",
-            "type": "[null|subclass=Object]",
-            "declaredType": "int"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes nothing)",
-        "inlinedCount": 14,
-        "code": null,
-        "type": "dynamic Function(dynamic,int)",
-        "measurements": null
+        "code": "toString$0(_) {\n      return A._rtiToString(this._rti, null);\n    }",
+        "type": "String Function()"
       },
       "271556856": {
         "id": "function/271556856",
         "kind": "function",
         "name": "StateError",
-        "size": 86,
+        "size": 68,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/948502579",
         "children": [],
@@ -5380,15 +6829,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "StateError$: function(message) {\n  return new P.StateError(message);\n}\n",
-        "type": "dynamic Function(String)",
-        "measurements": null
+        "code": "StateError$(message) {\n      return new A.StateError(message);\n    }",
+        "type": "dynamic Function(String)"
       },
       "271674536": {
         "id": "function/271674536",
         "kind": "function",
         "name": "_propagateToListeners",
-        "size": 7272,
+        "size": 8434,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [
@@ -5414,20 +6862,19 @@
           {
             "name": "listeners",
             "type": "[null|exact=_FutureListener]",
-            "declaredType": "_FutureListener<dynamic,dynamic>"
+            "declaredType": "_FutureListener<dynamic,dynamic>?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Future__propagateToListeners: function(source, listeners) {\n  var _box_1, t1, _box_0, hasError, asyncError, t2, t3, listeners0, sourceResult, zone, t4, oldZone, current, result;\n  _box_1 = {};\n  _box_1.source = source;\n  for (t1 = source; true;) {\n    _box_0 = {};\n    hasError = t1._state === 8;\n    if (listeners == null) {\n      if (hasError) {\n        asyncError = t1._resultOrListeners;\n        t1 = t1._zone;\n        t2 = asyncError.get$error();\n        t3 = asyncError.stackTrace;\n        t1.toString;\n        P._rootHandleUncaughtError(null, null, t1, t2, t3);\n      }\n      return;\n    }\n    for (; listeners0 = listeners._nextListener, listeners0 != null; listeners = listeners0) {\n      listeners._nextListener = null;\n      P._Future__propagateToListeners(_box_1.source, listeners);\n    }\n    t1 = _box_1.source;\n    sourceResult = t1._resultOrListeners;\n    _box_0.listenerHasError = hasError;\n    _box_0.listenerValueOrError = sourceResult;\n    t2 = !hasError;\n    if (t2) {\n      t3 = listeners.state;\n      t3 = (t3 & 1) !== 0 || t3 === 8;\n    } else\n      t3 = true;\n    if (t3) {\n      t3 = listeners.result;\n      zone = t3._zone;\n      if (hasError) {\n        t4 = t1._zone;\n        t4.toString;\n        t4 = t4 == null ? zone == null : t4 === zone;\n        if (!t4)\n          zone.toString;\n        else\n          t4 = true;\n        t4 = !t4;\n      } else\n        t4 = false;\n      if (t4) {\n        t1 = t1._zone;\n        t2 = sourceResult.get$error();\n        t3 = sourceResult.stackTrace;\n        t1.toString;\n        P._rootHandleUncaughtError(null, null, t1, t2, t3);\n        return;\n      }\n      oldZone = $.Zone__current;\n      if (oldZone == null ? zone != null : oldZone !== zone)\n        $.Zone__current = zone;\n      else\n        oldZone = null;\n      t1 = listeners.state;\n      if (t1 === 8)\n        new P._Future__propagateToListeners_handleWhenCompleteCallback(_box_1, _box_0, listeners, hasError).call$0();\n      else if (t2) {\n        if ((t1 & 1) !== 0)\n          new P._Future__propagateToListeners_handleValueCallback(_box_0, listeners, sourceResult).call$0();\n      } else if ((t1 & 2) !== 0)\n        new P._Future__propagateToListeners_handleError(_box_1, _box_0, listeners).call$0();\n      if (oldZone != null)\n        $.Zone__current = oldZone;\n      t1 = _box_0.listenerValueOrError;\n      if (!!J.getInterceptor(t1).$isFuture) {\n        if (t1._state >= 4) {\n          current = t3._resultOrListeners;\n          t3._resultOrListeners = null;\n          listeners = t3._reverseListeners$1(current);\n          t3._state = t1._state;\n          t3._resultOrListeners = t1._resultOrListeners;\n          _box_1.source = t1;\n          continue;\n        } else\n          P._Future__chainCoreFuture(t1, t3);\n        return;\n      }\n    }\n    result = listeners.result;\n    current = result._resultOrListeners;\n    result._resultOrListeners = null;\n    listeners = result._reverseListeners$1(current);\n    t1 = _box_0.listenerHasError;\n    t2 = _box_0.listenerValueOrError;\n    if (!t1) {\n      result._state = 4;\n      result._resultOrListeners = t2;\n    } else {\n      result._state = 8;\n      result._resultOrListeners = t2;\n    }\n    _box_1.source = result;\n    t1 = result;\n  }\n}\n",
-        "type": "void Function(_Future<dynamic>,_FutureListener<dynamic,dynamic>)",
-        "measurements": null
+        "code": "_Future__propagateToListeners(source, listeners) {\n      var t2, t3, t4, _box_0, t5, t6, hasError, asyncError, nextListener, nextListener0, sourceResult, t7, zone, oldZone, result, current, _box_1 = {},\n        t1 = _box_1.source = source;\n      for (t2 = type$.AsyncError, t3 = type$.nullable__FutureListener_dynamic_dynamic, t4 = type$.Future_dynamic; true;) {\n        _box_0 = {};\n        t5 = t1._state;\n        t6 = (t5 & 16) === 0;\n        hasError = !t6;\n        if (listeners == null) {\n          if (hasError && (t5 & 1) === 0) {\n            asyncError = t2._as(t1._resultOrListeners);\n            A._rootHandleError(asyncError.error, asyncError.stackTrace);\n          }\n          return;\n        }\n        _box_0.listener = listeners;\n        nextListener = listeners._nextListener;\n        for (t1 = listeners; nextListener != null; t1 = nextListener, nextListener = nextListener0) {\n          t1._nextListener = null;\n          A._Future__propagateToListeners(_box_1.source, t1);\n          _box_0.listener = nextListener;\n          nextListener0 = nextListener._nextListener;\n        }\n        t5 = _box_1.source;\n        sourceResult = t5._resultOrListeners;\n        _box_0.listenerHasError = hasError;\n        _box_0.listenerValueOrError = sourceResult;\n        if (t6) {\n          t7 = t1.state;\n          t7 = (t7 & 1) !== 0 || (t7 & 15) === 8;\n        } else\n          t7 = true;\n        if (t7) {\n          zone = t1.result._zone;\n          if (hasError) {\n            t5 = t5._zone === zone;\n            t5 = !(t5 || t5);\n          } else\n            t5 = false;\n          if (t5) {\n            t2._as(sourceResult);\n            A._rootHandleError(sourceResult.error, sourceResult.stackTrace);\n            return;\n          }\n          oldZone = $.Zone__current;\n          if (oldZone !== zone)\n            $.Zone__current = zone;\n          else\n            oldZone = null;\n          t1 = t1.state;\n          if ((t1 & 15) === 8)\n            new A._Future__propagateToListeners_handleWhenCompleteCallback(_box_0, _box_1, hasError).call$0();\n          else if (t6) {\n            if ((t1 & 1) !== 0)\n              new A._Future__propagateToListeners_handleValueCallback(_box_0, sourceResult).call$0();\n          } else if ((t1 & 2) !== 0)\n            new A._Future__propagateToListeners_handleError(_box_1, _box_0).call$0();\n          if (oldZone != null)\n            $.Zone__current = oldZone;\n          t1 = _box_0.listenerValueOrError;\n          if (t4._is(t1)) {\n            t5 = _box_0.listener.$ti;\n            t5 = t5._eval$1(\"Future<2>\")._is(t1) || !t5._rest[1]._is(t1);\n          } else\n            t5 = false;\n          if (t5) {\n            t4._as(t1);\n            result = _box_0.listener.result;\n            if (t1 instanceof A._Future)\n              if ((t1._state & 24) !== 0) {\n                current = t3._as(result._resultOrListeners);\n                result._resultOrListeners = null;\n                listeners = result._reverseListeners$1(current);\n                result._state = t1._state & 30 | result._state & 1;\n                result._resultOrListeners = t1._resultOrListeners;\n                _box_1.source = t1;\n                continue;\n              } else\n                A._Future__chainCoreFuture(t1, result);\n            else\n              result._chainForeignFuture$1(t1);\n            return;\n          }\n        }\n        result = _box_0.listener.result;\n        current = t3._as(result._resultOrListeners);\n        result._resultOrListeners = null;\n        listeners = result._reverseListeners$1(current);\n        t1 = _box_0.listenerHasError;\n        t5 = _box_0.listenerValueOrError;\n        if (!t1) {\n          result.$ti._precomputed1._as(t5);\n          result._state = 8;\n          result._resultOrListeners = t5;\n        } else {\n          t2._as(t5);\n          result._state = result._state & 1 | 16;\n          result._resultOrListeners = t5;\n        }\n        _box_1.source = result;\n        t1 = result;\n      }\n    }",
+        "type": "void Function(_Future<dynamic>,_FutureListener<dynamic,dynamic>?)"
       },
       "271854590": {
         "id": "function/271854590",
         "kind": "function",
         "name": "_asyncReturn",
-        "size": 85,
+        "size": 75,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -5453,15 +6900,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_asyncReturn: function(object, completer) {\n  completer.complete$1(object);\n}\n",
-        "type": "dynamic Function(dynamic,Completer<dynamic>)",
-        "measurements": null
+        "code": "_asyncReturn(object, completer) {\n      completer.complete$1(object);\n    }",
+        "type": "dynamic Function(dynamic,Completer<dynamic>)"
       },
       "272589495": {
         "id": "function/272589495",
         "kind": "function",
         "name": "current",
-        "size": 381,
+        "size": 347,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/347664883",
         "children": [],
@@ -5472,13 +6918,12 @@
           "external": false
         },
         "returnType": "StackTrace",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[null|subtype=StackTrace]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "StackTrace_current: function() {\n  var stackTrace, exception;\n  if ($.$get$_hasErrorStackProperty() === true)\n    return H.getTraceFromException(new Error());\n  try {\n    throw H.wrapException(\"\");\n  } catch (exception) {\n    H.unwrapException(exception);\n    stackTrace = H.getTraceFromException(exception);\n    return stackTrace;\n  }\n}\n",
-        "type": "StackTrace Function()",
-        "measurements": null
+        "code": "StackTrace_current() {\n      var stackTrace, exception;\n      if (A.boolConversionCheck($.$get$_hasErrorStackProperty()))\n        return A.getTraceFromException(new Error());\n      try {\n        throw A.wrapException(\"\");\n      } catch (exception) {\n        stackTrace = A.getTraceFromException(exception);\n        return stackTrace;\n      }\n    }",
+        "type": "StackTrace Function()"
       },
       "272627576": {
         "id": "function/272627576",
@@ -5505,15 +6950,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic)"
       },
       "273024378": {
         "id": "function/273024378",
         "kind": "function",
         "name": "forwardCallTo",
-        "size": 1632,
+        "size": 1570,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/317291728",
         "children": [],
@@ -5527,9 +6971,9 @@
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "receiver",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "stubName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
           },
           {
             "name": "function",
@@ -5538,21 +6982,25 @@
           },
           {
             "name": "isIntercepted",
-            "type": "[exact=JSBool]",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "needsDirectAccess",
+            "type": "[null|subtype=bool]",
             "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_forwardCallTo: function(receiver, $function, isIntercepted) {\n  var stubName, arity, lookedUpFunction, t1, t2, selfName, $arguments;\n  if (isIntercepted)\n    return H.Closure_forwardInterceptedCallTo(receiver, $function);\n  stubName = $function.$stubName;\n  arity = $function.length;\n  lookedUpFunction = receiver[stubName];\n  t1 = $function == null ? lookedUpFunction == null : $function === lookedUpFunction;\n  t2 = !t1 || arity >= 27;\n  if (t2)\n    return H.Closure_cspForwardCall(arity, !t1, stubName, $function);\n  if (arity === 0) {\n    t1 = $.Closure_functionCounter;\n    $.Closure_functionCounter = J.$add$ans(t1, 1);\n    selfName = \"self\" + H.S(t1);\n    t1 = \"return function(){var \" + selfName + \" = this.\";\n    t2 = $.BoundClosure_selfFieldNameCache;\n    if (t2 == null) {\n      t2 = H.BoundClosure_computeFieldNamed(\"self\");\n      $.BoundClosure_selfFieldNameCache = t2;\n    }\n    return new Function(t1 + H.S(t2) + \";return \" + selfName + \".\" + H.S(stubName) + \"();}\")();\n  }\n  $arguments = \"abcdefghijklmnopqrstuvwxyz\".split(\"\").splice(0, arity).join(\",\");\n  t1 = $.Closure_functionCounter;\n  $.Closure_functionCounter = J.$add$ans(t1, 1);\n  $arguments += H.S(t1);\n  t1 = \"return function(\" + $arguments + \"){return this.\";\n  t2 = $.BoundClosure_selfFieldNameCache;\n  if (t2 == null) {\n    t2 = H.BoundClosure_computeFieldNamed(\"self\");\n    $.BoundClosure_selfFieldNameCache = t2;\n  }\n  return new Function(t1 + H.S(t2) + \".\" + H.S(stubName) + \"(\" + $arguments + \");}\")();\n}\n",
-        "type": "dynamic Function(dynamic,dynamic,bool)",
-        "measurements": null
+        "code": "Closure_forwardCallTo(stubName, $function, isIntercepted, needsDirectAccess) {\n      var arity, t1, selfName, t2, $arguments,\n        _s8_ = \"receiver\";\n      if (A.boolConversionCheck(isIntercepted))\n        return A.Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess);\n      arity = $function.length;\n      t1 = A.boolConversionCheck(needsDirectAccess) || arity >= 27;\n      if (t1)\n        return A.Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function);\n      if (arity === 0) {\n        t1 = $.Closure_functionCounter;\n        if (typeof t1 !== \"number\")\n          return t1.$add();\n        $.Closure_functionCounter = t1 + 1;\n        selfName = \"self\" + t1;\n        t1 = \"return function(){var \" + selfName + \" = this.\";\n        t2 = $.BoundClosure__receiverFieldNameCache;\n        return new Function(t1 + (t2 == null ? $.BoundClosure__receiverFieldNameCache = A.BoundClosure__computeFieldNamed(_s8_) : t2) + \";return \" + selfName + \".\" + A.S(stubName) + \"();}\")();\n      }\n      $arguments = \"abcdefghijklmnopqrstuvwxyz\".split(\"\").splice(0, arity).join(\",\");\n      t1 = $.Closure_functionCounter;\n      if (typeof t1 !== \"number\")\n        return t1.$add();\n      $.Closure_functionCounter = t1 + 1;\n      $arguments += t1;\n      t1 = \"return function(\" + $arguments + \"){return this.\";\n      t2 = $.BoundClosure__receiverFieldNameCache;\n      return new Function(t1 + (t2 == null ? $.BoundClosure__receiverFieldNameCache = A.BoundClosure__computeFieldNamed(_s8_) : t2) + \".\" + A.S(stubName) + \"(\" + $arguments + \");}\")();\n    }",
+        "type": "dynamic Function(String,dynamic,bool,bool)"
       },
       "275271990": {
         "id": "function/275271990",
         "kind": "function",
         "name": "_errorName",
-        "size": 65,
+        "size": 51,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/175705485",
         "children": [],
@@ -5567,44 +7015,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$_errorName: function() {\n  return \"RangeError\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
-      },
-      "275681184": {
-        "id": "function/275681184",
-        "kind": "function",
-        "name": "getType",
-        "size": 64,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "index",
-            "type": "[null|subclass=Object]",
-            "declaredType": "int"
-          }
-        ],
-        "sideEffects": "SideEffects(reads static; writes nothing)",
-        "inlinedCount": 1,
-        "code": "getType: function(index) {\n  return init.types[index];\n}\n",
-        "type": "dynamic Function(int)",
-        "measurements": null
+        "code": "get$_errorName() {\n      return \"RangeError\";\n    }",
+        "type": "String Function()"
       },
       "275957193": {
         "id": "function/275957193",
         "kind": "function",
         "name": "add",
-        "size": 724,
+        "size": 639,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -5625,44 +7043,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "add$1: function(_, element) {\n  var strings, nums;\n  if (typeof element === \"string\" && element !== \"__proto__\") {\n    strings = this._strings;\n    if (strings == null) {\n      strings = P._LinkedHashSet__newHashTable();\n      this._strings = strings;\n    }\n    return this._addHashTableEntry$2(strings, element);\n  } else if (typeof element === \"number\" && (element & 0x3ffffff) === element) {\n    nums = this._nums;\n    if (nums == null) {\n      nums = P._LinkedHashSet__newHashTable();\n      this._nums = nums;\n    }\n    return this._addHashTableEntry$2(nums, element);\n  } else\n    return this._add$1(element);\n}\n",
-        "type": "bool Function(_LinkedHashSet.E)",
-        "measurements": null
-      },
-      "282990063": {
-        "id": "function/282990063",
-        "kind": "function",
-        "name": "call",
-        "size": 191,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "closure/771507318",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "error",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "call$1: function(error) {\n  if (!!J.getInterceptor(error).$isError)\n    if (error.$thrownJsError == null)\n      error.$thrownJsError = this.ex;\n  return error;\n}\n",
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "add$1(_, element) {\n      var strings, nums, _this = this;\n      A._instanceType(_this)._precomputed1._as(element);\n      if (typeof element == \"string\" && element !== \"__proto__\") {\n        strings = _this._strings;\n        return _this._addHashTableEntry$2(strings == null ? _this._strings = A._LinkedHashSet__newHashTable() : strings, element);\n      } else if (typeof element == \"number\" && (element & 1073741823) === element) {\n        nums = _this._nums;\n        return _this._addHashTableEntry$2(nums == null ? _this._nums = A._LinkedHashSet__newHashTable() : nums, element);\n      } else\n        return _this._add$1(element);\n    }",
+        "type": "bool Function(Object?)"
       },
       "285148179": {
         "id": "function/285148179",
         "kind": "function",
         "name": "toString",
-        "size": 194,
+        "size": 191,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/466061502",
         "children": [],
@@ -5677,44 +7065,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  var $name = this.$static_name;\n  if ($name == null)\n    return \"Closure of unknown static method\";\n  return \"Closure '\" + $name + \"'\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      var $name = this.$static_name;\n      if ($name == null)\n        return \"Closure of unknown static method\";\n      return \"Closure '\" + A.unminifyOrTag($name) + \"'\";\n    }",
+        "type": "String Function()"
       },
-      "292195356": {
-        "id": "function/292195356",
+      "287475886": {
+        "id": "function/287475886",
         "kind": "function",
-        "name": "computeFieldNamed",
-        "size": 441,
+        "name": "_isTestViaProperty",
+        "size": 287,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/138211367",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
-          "static": true,
+          "static": false,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "String",
-        "inferredReturnType": "[null|exact=JSString]",
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
         "parameters": [
           {
-            "name": "fieldName",
-            "type": "[exact=JSString]",
-            "declaredType": "String"
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "BoundClosure_computeFieldNamed: function(fieldName) {\n  var template, names, t1, i, $name;\n  template = new H.BoundClosure(\"self\", \"target\", \"receiver\", \"name\");\n  names = J.JSArray_markFixedList(Object.getOwnPropertyNames(template));\n  for (t1 = names.length, i = 0; i < t1; ++i) {\n    $name = names[i];\n    if (template[$name] === fieldName)\n      return $name;\n  }\n}\n",
-        "type": "String Function(String)",
-        "measurements": null
+        "code": "_isTestViaProperty(object) {\n      var tag, testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      tag = testRti._specializedTestResource;\n      if (object instanceof A.Object)\n        return !!object[tag];\n      return !!J.getInterceptor$(object)[tag];\n    }",
+        "type": "bool Function(Object?)"
       },
       "292751514": {
         "id": "function/292751514",
         "kind": "function",
         "name": "_prependListeners",
-        "size": 1333,
+        "size": 1520,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [
@@ -5732,20 +7118,84 @@
           {
             "name": "listeners",
             "type": "[null|exact=_FutureListener]",
-            "declaredType": "_FutureListener<dynamic,dynamic>"
+            "declaredType": "_FutureListener<dynamic,dynamic>?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_prependListeners$1: function(listeners) {\n  var _box_0, t1, existingListeners, cursor, cursor0, source;\n  _box_0 = {};\n  _box_0.listeners = listeners;\n  if (listeners == null)\n    return;\n  t1 = this._state;\n  if (t1 <= 1) {\n    existingListeners = this._resultOrListeners;\n    this._resultOrListeners = listeners;\n    if (existingListeners != null) {\n      for (cursor = listeners; cursor0 = cursor._nextListener, cursor0 != null; cursor = cursor0)\n        ;\n      cursor._nextListener = existingListeners;\n    }\n  } else {\n    if (t1 === 2) {\n      source = this._resultOrListeners;\n      if (source.get$_state() < 4) {\n        source._prependListeners$1(listeners);\n        return;\n      }\n      this._state = source._state;\n      this._resultOrListeners = source._resultOrListeners;\n    }\n    _box_0.listeners = this._reverseListeners$1(listeners);\n    t1 = this._zone;\n    t1.toString;\n    P._rootScheduleMicrotask(null, null, t1, new P._Future__prependListeners_closure(_box_0, this));\n  }\n}\n",
-        "type": "void Function(_FutureListener<dynamic,dynamic>)",
-        "measurements": null
+        "code": "_prependListeners$1(listeners) {\n      var t1, existingListeners, next, cursor, next0, source, _this = this, _box_0 = {};\n      _box_0.listeners = listeners;\n      if (listeners == null)\n        return;\n      t1 = _this._state;\n      if (t1 <= 3) {\n        existingListeners = type$.nullable__FutureListener_dynamic_dynamic._as(_this._resultOrListeners);\n        _this._resultOrListeners = listeners;\n        if (existingListeners != null) {\n          next = listeners._nextListener;\n          for (cursor = listeners; next != null; cursor = next, next = next0)\n            next0 = next._nextListener;\n          cursor._nextListener = existingListeners;\n        }\n      } else {\n        if ((t1 & 4) !== 0) {\n          source = type$._Future_dynamic._as(_this._resultOrListeners);\n          if ((source._state & 24) === 0) {\n            source._prependListeners$1(listeners);\n            return;\n          }\n          _this._cloneResult$1(source);\n        }\n        _box_0.listeners = _this._reverseListeners$1(listeners);\n        A._rootScheduleMicrotask(null, null, _this._zone, type$.void_Function._as(new A._Future__prependListeners_closure(_box_0, _this)));\n      }\n    }",
+        "type": "void Function(_FutureListener<dynamic,dynamic>?)"
       },
-      "292889014": {
-        "id": "function/292889014",
+      "293305096": {
+        "id": "function/293305096",
         "kind": "function",
-        "name": "extractFunctionTypeObjectFromInternal",
-        "size": 294,
+        "name": "interceptorFieldName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes static)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
+      },
+      "294207503": {
+        "id": "function/294207503",
+        "kind": "function",
+        "name": "_createStarRti",
+        "size": 567,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__createStarRti(universe, baseType, key, normalize) {\n      var baseKind, t1, rti;\n      if (normalize) {\n        baseKind = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          t1 = baseType === type$.Null || baseType === type$.JSNull || baseKind === 7 || baseKind === 6;\n        else\n          t1 = true;\n        if (t1)\n          return baseType;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 6;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,String,bool)"
+      },
+      "295807328": {
+        "id": "function/295807328",
+        "kind": "function",
+        "name": "unminifyOrTag",
+        "size": 178,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -5755,49 +7205,79 @@
           "factory": false,
           "external": false
         },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rawClassName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "unminifyOrTag(rawClassName) {\n      var preserved = init.mangledGlobalNames[rawClassName];\n      if (preserved != null)\n        return preserved;\n      return rawClassName;\n    }",
+        "type": "String Function(String)"
+      },
+      "301370282": {
+        "id": "function/301370282",
+        "kind": "function",
+        "name": "eval",
+        "size": 307,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_eval(universe, recipe, normalize) {\n      var rti,\n        cache = universe.eC,\n        probe = cache.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, null, recipe, normalize));\n      cache.set(recipe, rti);\n      return rti;\n    }",
+        "type": "Rti Function(Object?,String,bool)"
+      },
+      "301930977": {
+        "id": "function/301930977",
+        "kind": "function",
+        "name": "_FunctionParameters",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
         "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "o",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "extractFunctionTypeObjectFromInternal: function(o) {\n  var signature;\n  if (\"$signature\" in o) {\n    signature = o.$signature;\n    if (typeof signature == \"number\")\n      return init.types[signature];\n    else\n      return o.$signature();\n  }\n  return;\n}\n",
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
-      },
-      "299781104": {
-        "id": "function/299781104",
-        "kind": "function",
-        "name": "isJsArray",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "value",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
+        "inferredReturnType": "[exact=_FunctionParameters]",
+        "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 8,
-        "code": null,
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "inlinedCount": 2,
+        "code": "",
+        "type": "dynamic Function()"
       },
       "301932486": {
         "id": "function/301932486",
@@ -5824,15 +7304,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "Exception Function([dynamic])",
-        "measurements": null
+        "code": "",
+        "type": "Exception Function([dynamic])"
       },
       "302617892": {
         "id": "function/302617892",
         "kind": "function",
         "name": "_objectToString",
-        "size": 227,
+        "size": 192,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/893386369",
         "children": [],
@@ -5847,50 +7326,53 @@
         "parameters": [
           {
             "name": "object",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Error__objectToString: function(object) {\n  var t1 = J.getInterceptor(object);\n  if (!!t1.$isClosure)\n    return t1.toString$0(object);\n  return \"Instance of '\" + H.Primitives_objectTypeName(object) + \"'\";\n}\n",
-        "type": "String Function(Object)",
-        "measurements": null
+        "code": "Error__objectToString(object) {\n      if (object instanceof A.Closure)\n        return object.toString$0(0);\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(object)) + \"'\";\n    }",
+        "type": "String Function(Object)"
       },
-      "306374693": {
-        "id": "function/306374693",
+      "304695429": {
+        "id": "function/304695429",
         "kind": "function",
-        "name": "isDartDynamicTypeRti",
+        "name": "_setRequiredPositional",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/121755874",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "void",
+        "inferredReturnType": "[null]",
         "parameters": [
           {
-            "name": "type",
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "requiredPositional",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "sideEffects": "SideEffects(reads nothing; writes field)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(_FunctionParameters,Object?)"
       },
       "308590446": {
         "id": "function/308590446",
         "kind": "function",
         "name": "throwExpression",
-        "size": 70,
+        "size": 60,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -5911,15 +7393,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "throwExpression: function(ex) {\n  throw H.wrapException(ex);\n}\n",
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "throwExpression(ex) {\n      throw A.wrapException(ex);\n    }",
+        "type": "dynamic Function(dynamic)"
       },
       "309114439": {
         "id": "function/309114439",
         "kind": "function",
         "name": "invokeClosure",
-        "size": 535,
+        "size": 571,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -5965,17 +7446,16 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "invokeClosure: function(closure, numberOfArguments, arg1, arg2, arg3, arg4) {\n  switch (numberOfArguments) {\n    case 0:\n      return closure.call$0();\n    case 1:\n      return closure.call$1(arg1);\n    case 2:\n      return closure.call$2(arg1, arg2);\n    case 3:\n      return closure.call$3(arg1, arg2, arg3);\n    case 4:\n      return closure.call$4(arg1, arg2, arg3, arg4);\n  }\n  throw H.wrapException(new P._Exception(\"Unsupported number of arguments for wrapped closure\"));\n}\n",
-        "type": "dynamic Function(Function,int,dynamic,dynamic,dynamic,dynamic)",
-        "measurements": null
+        "code": "invokeClosure(closure, numberOfArguments, arg1, arg2, arg3, arg4) {\n      type$.Function._as(closure);\n      switch (A._asIntS(numberOfArguments)) {\n        case 0:\n          return closure.call$0();\n        case 1:\n          return closure.call$1(arg1);\n        case 2:\n          return closure.call$2(arg1, arg2);\n        case 3:\n          return closure.call$3(arg1, arg2, arg3);\n        case 4:\n          return closure.call$4(arg1, arg2, arg3, arg4);\n      }\n      throw A.wrapException(new A._Exception(\"Unsupported number of arguments for wrapped closure\"));\n    }",
+        "type": "dynamic Function(Function,int,dynamic,dynamic,dynamic,dynamic)"
       },
-      "310457557": {
-        "id": "function/310457557",
+      "310648840": {
+        "id": "function/310648840",
         "kind": "function",
-        "name": "isAssignableV1",
-        "size": 0,
+        "name": "_asNumS",
+        "size": 209,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -5983,31 +7463,25 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "num?",
+        "inferredReturnType": "[null|subclass=JSNumber]",
         "parameters": [
           {
-            "name": "s",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "t",
+            "name": "object",
             "type": "[null|subclass=Object]",
             "declaredType": "dynamic"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 6,
-        "code": null,
-        "type": "bool Function(dynamic,dynamic)",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "_asNumS(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num\"));\n    }",
+        "type": "num? Function(dynamic)"
       },
       "311229745": {
         "id": "function/311229745",
         "kind": "function",
         "name": "call",
-        "size": 1345,
+        "size": 1336,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/844800611",
         "children": [],
@@ -6022,15 +7496,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  var t1, i, t2, t3, t4, t5, t6, t7, t8, t9, uri, hash;\n  for (t1 = this._box_0, i = t1.nextHunkToInitialize, t2 = this.total, t3 = this.initializer, t4 = this.isHunkLoaded, t5 = this.isHunkInitialized, t6 = this.uris, t7 = this.hashes, t8 = this.waitingForLoad, t9 = t8.length; i < t2; ++i) {\n    if (i >= t9)\n      return H.ioore(t8, i);\n    if (t8[i])\n      return;\n    ++t1.nextHunkToInitialize;\n    if (i >= t6.length)\n      return H.ioore(t6, i);\n    uri = t6[i];\n    if (i >= t7.length)\n      return H.ioore(t7, i);\n    hash = t7[i];\n    if (t5(hash)) {\n      $.$get$_eventLog().push(\" - already initialized: \" + uri + \" (\" + hash + \")\");\n      continue;\n    }\n    if (t4(hash)) {\n      $.$get$_eventLog().push(\" - initialize: \" + uri + \" (\" + hash + \")\");\n      t3(hash);\n    } else {\n      t1 = $.$get$_eventLog();\n      t1.push(\" - missing hunk: \" + uri + \" (\" + hash + \")\");\n      if (i >= t6.length)\n        return H.ioore(t6, i);\n      throw H.wrapException(P.DeferredLoadException$(\"Loading \" + t6[i] + \" failed: the code with hash '\" + hash + \"' was not loaded.\\nevent log:\\n\" + C.JSArray_methods.join$1(t1, \"\\n\") + \"\\n\"));\n    }\n  }\n}\n",
-        "type": "void Function()",
-        "measurements": null
+        "code": "call$0() {\n      var t1, i, t2, t3, t4, t5, t6, t7, t8, t9, uri, hash, _this = this;\n      for (t1 = _this._box_0, i = t1.nextHunkToInitialize, t2 = _this.total, t3 = _this.initializer, t4 = _this.isHunkLoaded, t5 = _this.isHunkInitialized, t6 = _this.uris, t7 = _this.hashes, t8 = _this.waitingForLoad, t9 = t8.length; i < t2; ++i) {\n        if (!(i < t9))\n          return A.ioore(t8, i);\n        if (t8[i])\n          return;\n        ++t1.nextHunkToInitialize;\n        if (!(i < t6.length))\n          return A.ioore(t6, i);\n        uri = t6[i];\n        if (!(i < t7.length))\n          return A.ioore(t7, i);\n        hash = t7[i];\n        if (t5(hash)) {\n          B.JSArray_methods.add$1($._eventLog, \" - already initialized: \" + uri + \" (\" + hash + \")\");\n          continue;\n        }\n        if (t4(hash)) {\n          B.JSArray_methods.add$1($._eventLog, \" - initialize: \" + uri + \" (\" + hash + \")\");\n          t3(hash);\n        } else {\n          B.JSArray_methods.add$1($._eventLog, \" - missing hunk: \" + uri + \" (\" + hash + \")\");\n          if (!(i < t6.length))\n            return A.ioore(t6, i);\n          throw A.wrapException(A.DeferredLoadException$(\"Loading \" + t6[i] + \" failed: the code with hash '\" + hash + \"' was not loaded.\\nevent log:\\n\" + B.JSArray_methods.join$1($._eventLog, \"\\n\") + \"\\n\"));\n        }\n      }\n    }",
+        "type": "void Function()"
+      },
+      "311482390": {
+        "id": "function/311482390",
+        "kind": "function",
+        "name": "createRuntimeType",
+        "size": 604,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Type",
+        "inferredReturnType": "[exact=_Type]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "createRuntimeType(rti) {\n      var recipe, starErasedRecipe, starErasedRti,\n        type = rti._cachedRuntimeType;\n      if (type != null)\n        return type;\n      recipe = rti._canonicalRecipe;\n      starErasedRecipe = recipe.replace(/\\*/g, \"\");\n      if (starErasedRecipe === recipe)\n        return rti._cachedRuntimeType = new A._Type(rti);\n      starErasedRti = A._Universe_eval(init.typeUniverse, starErasedRecipe, true);\n      type = starErasedRti._cachedRuntimeType;\n      return rti._cachedRuntimeType = type == null ? starErasedRti._cachedRuntimeType = new A._Type(starErasedRti) : type;\n    }",
+        "type": "Type Function(Rti)"
       },
       "312768442": {
         "id": "function/312768442",
         "kind": "function",
         "name": "substring",
-        "size": 531,
+        "size": 140,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/793539876",
         "children": [],
@@ -6044,21 +7545,20 @@
         "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
-            "name": "startIndex",
+            "name": "start",
             "type": "[exact=JSUInt31]",
             "declaredType": "int"
           },
           {
-            "name": "endIndex",
-            "type": "[null|subclass=JSInt]",
-            "declaredType": "int"
+            "name": "end",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "substring$2: function(receiver, startIndex, endIndex) {\n  if (endIndex == null)\n    endIndex = receiver.length;\n  if (startIndex > endIndex)\n    throw H.wrapException(P.RangeError$value(startIndex, null, null));\n  if (endIndex > receiver.length)\n    throw H.wrapException(P.RangeError$value(endIndex, null, null));\n  return receiver.substring(startIndex, endIndex);\n}\nsubstring$1: function($receiver, startIndex) {\n  return this.substring$2($receiver, startIndex, null);\n}\n",
-        "type": "String Function(int,[int])",
-        "measurements": null
+        "code": "substring$2(receiver, start, end) {\n      return receiver.substring(start, A.RangeError_checkValidRange(start, end, receiver.length));\n    }",
+        "type": "String Function(int,[int?])"
       },
       "315128565": {
         "id": "function/315128565",
@@ -6085,17 +7585,16 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "bool Function(dynamic)"
       },
-      "316732114": {
-        "id": "function/316732114",
+      "317451330": {
+        "id": "function/317451330",
         "kind": "function",
-        "name": "isDartFunctionType",
-        "size": 0,
+        "name": "instanceType",
+        "size": 342,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -6103,20 +7602,57 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
         "parameters": [
           {
-            "name": "type",
+            "name": "object",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads static; writes nothing)",
-        "inlinedCount": 3,
-        "code": null,
-        "type": "bool Function(Object)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "instanceType(object) {\n      var rti;\n      if (object instanceof A.Object) {\n        rti = object.$ti;\n        return rti != null ? rti : A._instanceTypeFromConstructor(object);\n      }\n      if (Array.isArray(object))\n        return A._arrayInstanceType(object);\n      return A._instanceTypeFromConstructor(J.getInterceptor$(object));\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "319720211": {
+        "id": "function/319720211",
+        "kind": "function",
+        "name": "compose",
+        "size": 378,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/457024667",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "objectRti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti?"
+          },
+          {
+            "name": "checkedTypeDescription",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Error_compose(object, objectRti, checkedTypeDescription) {\n      var objectDescription = A.Error_safeToString(object),\n        objectTypeDescription = A._rtiToString(objectRti == null ? A.instanceType(object) : objectRti, null);\n      return objectDescription + \": type '\" + A.S(objectTypeDescription) + \"' is not a subtype of type '\" + A.S(checkedTypeDescription) + \"'\";\n    }",
+        "type": "String Function(Object?,Rti?,String)"
       },
       "320253842": {
         "id": "function/320253842",
@@ -6133,19 +7669,40 @@
           "external": false
         },
         "returnType": "bool",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[null|subtype=bool]",
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
+      },
+      "321900710": {
+        "id": "function/321900710",
+        "kind": "function",
+        "name": "_canonicalRecipeOfAny",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
       },
       "325386239": {
         "id": "function/325386239",
         "kind": "function",
         "name": "_chainFuture",
-        "size": 641,
+        "size": 792,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [
@@ -6168,15 +7725,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_chainFuture$1: function(value) {\n  var t1 = H.checkSubtypeV1(value, \"$is_Future\", this.$ti, null);\n  if (t1) {\n    if (value._state === 8) {\n      this._state = 1;\n      t1 = this._zone;\n      t1.toString;\n      P._rootScheduleMicrotask(null, null, t1, new P._Future__chainFuture_closure(this, value));\n    } else\n      P._Future__chainCoreFuture(value, this);\n    return;\n  }\n  P._Future__chainForeignFuture(value, this);\n}\n",
-        "type": "void Function(Future<_Future.T>)",
-        "measurements": null
+        "code": "_chainFuture$1(value) {\n      var _this = this,\n        t1 = _this.$ti;\n      t1._eval$1(\"Future<1>\")._as(value);\n      if (t1._is(value)) {\n        if ((value._state & 16) !== 0) {\n          _this._state ^= 2;\n          A._rootScheduleMicrotask(null, null, _this._zone, type$.void_Function._as(new A._Future__chainFuture_closure(_this, value)));\n        } else\n          A._Future__chainCoreFuture(value, _this);\n        return;\n      }\n      _this._chainForeignFuture$1(value);\n    }",
+        "type": "void Function(Object?)"
       },
       "326542993": {
         "id": "function/326542993",
         "kind": "function",
         "name": "_loadHunk",
-        "size": 4563,
+        "size": 5757,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [
@@ -6201,19 +7757,23 @@
             "name": "hunkName",
             "type": "[exact=JSString]",
             "declaredType": "String"
+          },
+          {
+            "name": "loadId",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_loadHunk: function(hunkName) {\n  var t1, deferredLibraryLoader, failure, jsSuccess, jsFailure, error, stackTrace, t2, future, t3, uri, t4, completer, exception, index, xhr, script;\n  t1 = {};\n  t2 = $.$get$_loadingLibraries();\n  future = t2.$index(0, hunkName);\n  t3 = $.$get$_eventLog();\n  t3.push(\" - _loadHunk: \" + hunkName);\n  if (future != null) {\n    t3.push(\"reuse: \" + hunkName);\n    return future.then$1(new H._loadHunk_closure());\n  }\n  uri = $.$get$thisScript();\n  t1.uri = uri;\n  uri = C.JSString_methods.substring$2(uri, 0, J.lastIndexOf$1$as(uri, \"/\") + 1) + hunkName;\n  t1.uri = uri;\n  t3.push(\" - download: \" + hunkName + \" from \" + uri);\n  deferredLibraryLoader = self.dartDeferredLibraryLoader;\n  t3 = P.Null;\n  t4 = new P._Future(0, $.Zone__current, null, [t3]);\n  completer = new P._AsyncCompleter(t4, [t3]);\n  t3 = new H._loadHunk_success(hunkName, completer);\n  failure = new H._loadHunk_failure(t1, hunkName, completer);\n  jsSuccess = H.convertDartClosureToJS(t3, 0);\n  jsFailure = H.convertDartClosureToJS(new H._loadHunk_closure0(failure), 1);\n  if (typeof deferredLibraryLoader === \"function\")\n    try {\n      deferredLibraryLoader(t1.uri, jsSuccess, jsFailure);\n    } catch (exception) {\n      error = H.unwrapException(exception);\n      stackTrace = H.getTraceFromException(exception);\n      failure.call$3(error, \"invoking dartDeferredLibraryLoader hook\", stackTrace);\n    }\n  else if ((!self.window && !!self.postMessage) === true) {\n    index = J.lastIndexOf$1$as(t1.uri, \"/\");\n    t1.uri = J.substring$2$s(t1.uri, 0, index + 1) + hunkName;\n    xhr = new XMLHttpRequest();\n    xhr.open(\"GET\", t1.uri);\n    xhr.addEventListener(\"load\", H.convertDartClosureToJS(new H._loadHunk_closure1(xhr, failure, t3), 1), false);\n    xhr.addEventListener(\"error\", new H._loadHunk_closure2(failure), false);\n    xhr.addEventListener(\"abort\", new H._loadHunk_closure3(failure), false);\n    xhr.send();\n  } else {\n    script = document.createElement(\"script\");\n    script.type = \"text/javascript\";\n    script.src = t1.uri;\n    t1 = $.$get$_cspNonce();\n    if (t1 != null && t1 !== \"\")\n      script.nonce = t1;\n    script.addEventListener(\"load\", jsSuccess, false);\n    script.addEventListener(\"error\", jsFailure, false);\n    document.body.appendChild(script);\n  }\n  t2.$indexSet(0, hunkName, t4);\n  return t4;\n}\n",
-        "type": "Future<Null> Function(String)",
-        "measurements": null
+        "code": "_loadHunk(hunkName, loadId) {\n      var deferredLibraryLoader, failure, jsSuccess, jsFailure, error, stackTrace, t2, uri, completer, exception, index, xhr, script, t1 = {},\n        future = $.$get$_loadingLibraries().$index(0, hunkName);\n      B.JSArray_methods.add$1($._eventLog, \" - _loadHunk: \" + hunkName);\n      if (future != null) {\n        B.JSArray_methods.add$1($._eventLog, \"reuse: \" + hunkName);\n        return future.then$1$1(new A._loadHunk_closure(), type$.Null);\n      }\n      t2 = $.$get$thisScript();\n      t2.toString;\n      t1.uri = t2;\n      uri = B.JSString_methods.substring$2(t2, 0, B.JSString_methods.lastIndexOf$1(t2, \"/\") + 1) + hunkName;\n      t1.uri = uri;\n      B.JSArray_methods.add$1($._eventLog, \" - download: \" + hunkName + \" from \" + uri);\n      deferredLibraryLoader = self.dartDeferredLibraryLoader;\n      completer = new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_Null), type$._AsyncCompleter_Null);\n      t2 = new A._loadHunk_success(hunkName, completer);\n      failure = new A._loadHunk_failure(t1, hunkName, completer);\n      jsSuccess = A.convertDartClosureToJS(t2, 0);\n      jsFailure = A.convertDartClosureToJS(new A._loadHunk_closure0(failure), 1);\n      if (typeof deferredLibraryLoader === \"function\")\n        try {\n          deferredLibraryLoader(t1.uri, jsSuccess, jsFailure, loadId);\n        } catch (exception) {\n          error = A.unwrapException(exception);\n          stackTrace = A.getTraceFromException(exception);\n          failure.call$3(error, \"invoking dartDeferredLibraryLoader hook\", stackTrace);\n        }\n      else if (A.boolConversionCheck(!self.window && !!self.postMessage)) {\n        index = J.lastIndexOf$1$s(t1.uri, \"/\");\n        t1.uri = J.substring$2$s(t1.uri, 0, index + 1) + hunkName;\n        xhr = new XMLHttpRequest();\n        xhr.open(\"GET\", t1.uri);\n        xhr.addEventListener(\"load\", A.convertDartClosureToJS(new A._loadHunk_closure1(xhr, failure, t2), 1), false);\n        xhr.addEventListener(\"error\", new A._loadHunk_closure2(failure), false);\n        xhr.addEventListener(\"abort\", new A._loadHunk_closure3(failure), false);\n        xhr.send();\n      } else {\n        script = document.createElement(\"script\");\n        script.type = \"text/javascript\";\n        script.src = t1.uri;\n        t1 = $.$get$_cspNonce();\n        if (t1 != null && t1 !== \"\") {\n          script.nonce = t1;\n          script.setAttribute(\"nonce\", $.$get$_cspNonce());\n        }\n        t1 = $.$get$_crossOrigin();\n        if (t1 != null && t1 !== \"\")\n          script.crossOrigin = t1;\n        script.addEventListener(\"load\", jsSuccess, false);\n        script.addEventListener(\"error\", jsFailure, false);\n        document.body.appendChild(script);\n      }\n      t1 = completer.future;\n      $.$get$_loadingLibraries().$indexSet(0, hunkName, t1);\n      return t1;\n    }",
+        "type": "Future<Null> Function(String,String)"
       },
       "330018012": {
         "id": "function/330018012",
         "kind": "function",
         "name": "_asyncAwait",
-        "size": 97,
+        "size": 87,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -6239,9 +7799,92 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_asyncAwait: function(object, bodyFunction) {\n  P._awaitOnObject(object, bodyFunction);\n}\n",
-        "type": "dynamic Function(dynamic,void Function(int,dynamic))",
-        "measurements": null
+        "code": "_asyncAwait(object, bodyFunction) {\n      A._awaitOnObject(object, bodyFunction);\n    }",
+        "type": "dynamic Function(dynamic,void Function(int,dynamic))"
+      },
+      "331545422": {
+        "id": "function/331545422",
+        "kind": "function",
+        "name": "_instanceTypeFromConstructor",
+        "size": 251,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "instance",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_instanceTypeFromConstructor(instance) {\n      var $constructor = instance.constructor,\n        probe = $constructor.$ccache;\n      if (probe != null)\n        return probe;\n      return A._instanceTypeFromConstructorMiss(instance, $constructor);\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "331565025": {
+        "id": "function/331565025",
+        "kind": "function",
+        "name": "_isTop",
+        "size": 41,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "Value([exact=JSBool], value: true)",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_isTop(object) {\n      return true;\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "332074411": {
+        "id": "function/332074411",
+        "kind": "function",
+        "name": "asBool",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 6,
+        "code": "",
+        "type": "bool Function(Object?)"
       },
       "335045122": {
         "id": "function/335045122",
@@ -6263,20 +7906,19 @@
           {
             "name": "str",
             "type": "[exact=JSString]",
-            "declaredType": "dynamic"
+            "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes field)",
-        "inlinedCount": 10,
-        "code": null,
-        "type": "void Function(dynamic)",
-        "measurements": null
+        "inlinedCount": 7,
+        "code": "",
+        "type": "void Function(String)"
       },
       "336168458": {
         "id": "function/336168458",
         "kind": "function",
         "name": "scheduleMicrotask",
-        "size": 354,
+        "size": 367,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -6297,15 +7939,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "scheduleMicrotask: function(callback) {\n  var currentZone = $.Zone__current;\n  if (C.C__RootZone === currentZone) {\n    P._rootScheduleMicrotask(null, null, C.C__RootZone, callback);\n    return;\n  }\n  currentZone.toString;\n  P._rootScheduleMicrotask(null, null, currentZone, currentZone.bindCallbackGuarded$1(callback));\n}\n",
-        "type": "void Function(void Function())",
-        "measurements": null
+        "code": "scheduleMicrotask(callback) {\n      var _null = null,\n        currentZone = $.Zone__current;\n      if (B.C__RootZone === currentZone) {\n        A._rootScheduleMicrotask(_null, _null, B.C__RootZone, callback);\n        return;\n      }\n      A._rootScheduleMicrotask(_null, _null, currentZone, type$.void_Function._as(currentZone.bindCallbackGuarded$1(callback)));\n    }",
+        "type": "void Function(void Function())"
       },
       "336352070": {
         "id": "function/336352070",
         "kind": "function",
         "name": "JsNoSuchMethodError",
-        "size": 238,
+        "size": 196,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/17649844",
         "children": [],
@@ -6331,15 +7972,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "JsNoSuchMethodError$: function(_message, match) {\n  var t1, t2;\n  t1 = match == null;\n  t2 = t1 ? null : match.method;\n  return new H.JsNoSuchMethodError(_message, t2, t1 ? null : match.receiver);\n}\n",
-        "type": "dynamic Function(String,dynamic)",
-        "measurements": null
+        "code": "JsNoSuchMethodError$(_message, match) {\n      var t1 = match == null,\n        t2 = t1 ? null : match.method;\n      return new A.JsNoSuchMethodError(_message, t2, t1 ? null : match.receiver);\n    }",
+        "type": "dynamic Function(String,dynamic)"
       },
       "336424489": {
         "id": "function/336424489",
         "kind": "function",
         "name": "_computeHashCode",
-        "size": 100,
+        "size": 87,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -6360,15 +8000,62 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_computeHashCode$1: function(element) {\n  return J.get$hashCode$(element) & 0x3ffffff;\n}\n",
-        "type": "int Function(dynamic)",
-        "measurements": null
+        "code": "_computeHashCode$1(element) {\n      return J.get$hashCode$(element) & 1073741823;\n    }",
+        "type": "int Function(dynamic)"
+      },
+      "337498518": {
+        "id": "function/337498518",
+        "kind": "function",
+        "name": "_createGenericFunctionRti",
+        "size": 1063,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseFunctionType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "bounds",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize) {\n      var $length, typeArguments, count, i, bound, substitutedBase, substitutedBounds, rti;\n      if (normalize) {\n        $length = bounds.length;\n        typeArguments = A._Utils_newArrayOrEmpty($length);\n        for (count = 0, i = 0; i < $length; ++i) {\n          bound = bounds[i];\n          if (bound._kind === 1) {\n            typeArguments[i] = bound;\n            ++count;\n          }\n        }\n        if (count > 0) {\n          substitutedBase = A._substitute(universe, baseFunctionType, typeArguments, 0);\n          substitutedBounds = A._substituteArray(universe, bounds, typeArguments, 0);\n          return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, bounds !== substitutedBounds);\n        }\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 12;\n      rti._primary = baseFunctionType;\n      rti._rest = bounds;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,Object?,String,bool)"
       },
       "337937411": {
         "id": "function/337937411",
         "kind": "function",
         "name": "_awaitOnObject",
-        "size": 1004,
+        "size": 1327,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [
@@ -6391,15 +8078,14 @@
           },
           {
             "name": "bodyFunction",
-            "type": "[null|subclass=Object]",
+            "type": "[null|subclass=Closure]",
             "declaredType": "void Function(int,dynamic)"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_awaitOnObject: function(object, bodyFunction) {\n  var thenCallback, errorCallback, t1, future;\n  thenCallback = new P._awaitOnObject_closure(bodyFunction);\n  errorCallback = new P._awaitOnObject_closure0(bodyFunction);\n  t1 = J.getInterceptor(object);\n  if (!!t1.$is_Future)\n    object._thenNoZoneRegistration$2(thenCallback, errorCallback);\n  else if (!!t1.$isFuture)\n    object.then$2$onError(thenCallback, errorCallback);\n  else {\n    future = new P._Future(0, $.Zone__current, null, [null]);\n    future._state = 4;\n    future._resultOrListeners = object;\n    future._thenNoZoneRegistration$2(thenCallback, null);\n  }\n}\n",
-        "type": "void Function(dynamic,void Function(int,dynamic))",
-        "measurements": null
+        "code": "_awaitOnObject(object, bodyFunction) {\n      var t1, future,\n        thenCallback = new A._awaitOnObject_closure(bodyFunction),\n        errorCallback = new A._awaitOnObject_closure0(bodyFunction);\n      if (object instanceof A._Future)\n        object._thenAwait$1$2(thenCallback, errorCallback, type$.dynamic);\n      else {\n        t1 = type$.dynamic;\n        if (type$.Future_dynamic._is(object))\n          object.then$1$2$onError(thenCallback, errorCallback, t1);\n        else {\n          future = new A._Future($.Zone__current, type$._Future_dynamic);\n          future._state = 8;\n          future._resultOrListeners = object;\n          future._thenAwait$1$2(thenCallback, errorCallback, t1);\n        }\n      }\n    }",
+        "type": "void Function(dynamic,void Function(int,dynamic))"
       },
       "338379080": {
         "id": "function/338379080",
@@ -6415,7 +8101,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "AsyncError",
+        "returnType": "AsyncError?",
         "inferredReturnType": "[null]",
         "parameters": [
           {
@@ -6426,20 +8112,140 @@
           {
             "name": "stackTrace",
             "type": "[null|subclass=Object]",
-            "declaredType": "StackTrace"
+            "declaredType": "StackTrace?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "AsyncError Function(Object,StackTrace)",
-        "measurements": null
+        "code": "",
+        "type": "AsyncError? Function(Object,StackTrace?)"
+      },
+      "338600142": {
+        "id": "function/338600142",
+        "kind": "function",
+        "name": "_getRequiredPositional",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+      },
+      "339189097": {
+        "id": "function/339189097",
+        "kind": "function",
+        "name": "toString",
+        "size": 93,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/155954474",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"Assertion failed: \" + A.Error_safeToString(this.message);\n    }",
+        "type": "String Function()"
+      },
+      "339437005": {
+        "id": "function/339437005",
+        "kind": "function",
+        "name": "_asObject",
+        "size": 46,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asObject(object) {\n      return object;\n    }",
+        "type": "Object? Function(Object?)"
+      },
+      "340789555": {
+        "id": "function/340789555",
+        "kind": "function",
+        "name": "_createInterfaceRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "name",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,String,Object?,String)"
       },
       "341046768": {
         "id": "function/341046768",
         "kind": "function",
         "name": "call",
-        "size": 94,
+        "size": 80,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/411607690",
         "children": [],
@@ -6449,14 +8255,13 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  this.$this._completeError$2(this.error, this.stackTrace);\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "code": "call$0() {\n      this.$this._completeError$2(this.error, this.stackTrace);\n    }",
+        "type": "void Function()"
       },
       "343621437": {
         "id": "function/343621437",
@@ -6472,26 +8277,96 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Zone",
-        "inferredReturnType": "[null|exact=_RootZone]",
+        "returnType": "_Zone",
+        "inferredReturnType": "[exact=_RootZone]",
         "parameters": [
           {
             "name": "zone",
-            "type": "[null|exact=_RootZone]",
-            "declaredType": "Zone"
+            "type": "[exact=_RootZone]",
+            "declaredType": "_Zone"
           }
         ],
         "sideEffects": "SideEffects(reads static; writes static)",
         "inlinedCount": 4,
-        "code": null,
-        "type": "Zone Function(Zone)",
-        "measurements": null
+        "code": "",
+        "type": "_Zone Function(_Zone)"
+      },
+      "347168225": {
+        "id": "function/347168225",
+        "kind": "function",
+        "name": "toTypes",
+        "size": 204,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "items",
+            "type": "[subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_toTypes(universe, environment, items) {\n      var i,\n        $length = items.length;\n      for (i = 0; i < $length; ++i)\n        items[i] = A._Parser_toType(universe, environment, items[i]);\n    }",
+        "type": "void Function(Object?,Rti,Object?)"
+      },
+      "347710223": {
+        "id": "function/347710223",
+        "kind": "function",
+        "name": "pushStackFrame",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
       },
       "347974666": {
         "id": "function/347974666",
         "kind": "function",
         "name": "hashCode",
-        "size": 440,
+        "size": 410,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/793539876",
         "children": [],
@@ -6506,15 +8381,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(receiver) {\n  var t1, hash, i;\n  for (t1 = receiver.length, hash = 0, i = 0; i < t1; ++i) {\n    hash = 536870911 & hash + receiver.charCodeAt(i);\n    hash = 536870911 & hash + ((524287 & hash) << 10);\n    hash ^= hash >> 6;\n  }\n  hash = 536870911 & hash + ((67108863 & hash) << 3);\n  hash ^= hash >> 11;\n  return 536870911 & hash + ((16383 & hash) << 15);\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$hashCode(receiver) {\n      var t1, hash, i;\n      for (t1 = receiver.length, hash = 0, i = 0; i < t1; ++i) {\n        hash = hash + receiver.charCodeAt(i) & 536870911;\n        hash = hash + ((hash & 524287) << 10) & 536870911;\n        hash ^= hash >> 6;\n      }\n      hash = hash + ((hash & 67108863) << 3) & 536870911;\n      hash ^= hash >> 11;\n      return hash + ((hash & 16383) << 15) & 536870911;\n    }",
+        "type": "int Function()"
       },
       "349997389": {
         "id": "function/349997389",
         "kind": "function",
         "name": "RangeError.value",
-        "size": 150,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/974704527",
         "children": [],
@@ -6534,20 +8408,14 @@
           },
           {
             "name": "name",
-            "type": "Value([null|exact=JSString], value: \"index\")",
-            "declaredType": "String"
-          },
-          {
-            "name": "message",
-            "type": "[null]",
-            "declaredType": "String"
+            "type": "Value([exact=JSString], value: \"index\")",
+            "declaredType": "String?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 0,
-        "code": "RangeError$value: function(value, $name, message) {\n  return new P.RangeError(null, null, true, value, $name, \"Value not in range\");\n}\n",
-        "type": "dynamic Function(num,[String,String])",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(num,[String?,String?])"
       },
       "350333970": {
         "id": "function/350333970",
@@ -6563,7 +8431,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
+        "returnType": "FutureOr<_FutureListener.T>",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
@@ -6574,38 +8442,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(_FutureListener.S)",
-        "measurements": null
-      },
-      "350634082": {
-        "id": "function/350634082",
-        "kind": "function",
-        "name": "Completer.sync",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/471305727",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": true,
-          "external": false
-        },
-        "returnType": "Completer<Completer.T>",
-        "inferredReturnType": "[exact=_SyncCompleter]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "Completer<Completer.T> Function()",
-        "measurements": null
+        "code": "",
+        "type": "FutureOr<_FutureListener.T> Function(Object?)"
       },
       "351622741": {
         "id": "function/351622741",
         "kind": "function",
         "name": "runGuarded",
-        "size": 424,
+        "size": 430,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/566341130",
         "children": [],
@@ -6626,15 +8470,57 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "runGuarded$1: function(f) {\n  var e, s, exception;\n  try {\n    if (C.C__RootZone === $.Zone__current) {\n      f.call$0();\n      return;\n    }\n    P._rootRun(null, null, this, f);\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    P._rootHandleUncaughtError(null, null, this, e, s);\n  }\n}\n",
-        "type": "void Function(void Function())",
-        "measurements": null
+        "code": "runGuarded$1(f) {\n      var e, s, exception;\n      type$.void_Function._as(f);\n      try {\n        if (B.C__RootZone === $.Zone__current) {\n          f.call$0();\n          return;\n        }\n        A._rootRun(null, null, this, f, type$.void);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        A._rootHandleError(e, type$.StackTrace._as(s));\n      }\n    }",
+        "type": "void Function(void Function())"
+      },
+      "351876786": {
+        "id": "function/351876786",
+        "kind": "function",
+        "name": "_substitute",
+        "size": 3652,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "depth",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_substitute(universe, rti, typeArguments, depth) {\n      var baseType, substitutedBaseType, interfaceTypeArguments, substitutedInterfaceTypeArguments, base, substitutedBase, $arguments, substitutedArguments, returnType, substitutedReturnType, functionParameters, substitutedFunctionParameters, bounds, substitutedBounds, index, argument,\n        kind = rti._kind;\n      switch (kind) {\n        case 5:\n        case 1:\n        case 2:\n        case 3:\n        case 4:\n          return rti;\n        case 6:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupStarRti(universe, substitutedBaseType, true);\n        case 7:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupQuestionRti(universe, substitutedBaseType, true);\n        case 8:\n          baseType = rti._primary;\n          substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth);\n          if (substitutedBaseType === baseType)\n            return rti;\n          return A._Universe__lookupFutureOrRti(universe, substitutedBaseType, true);\n        case 9:\n          interfaceTypeArguments = rti._rest;\n          substitutedInterfaceTypeArguments = A._substituteArray(universe, interfaceTypeArguments, typeArguments, depth);\n          if (substitutedInterfaceTypeArguments === interfaceTypeArguments)\n            return rti;\n          return A._Universe__lookupInterfaceRti(universe, rti._primary, substitutedInterfaceTypeArguments);\n        case 10:\n          base = rti._primary;\n          substitutedBase = A._substitute(universe, base, typeArguments, depth);\n          $arguments = rti._rest;\n          substitutedArguments = A._substituteArray(universe, $arguments, typeArguments, depth);\n          if (substitutedBase === base && substitutedArguments === $arguments)\n            return rti;\n          return A._Universe__lookupBindingRti(universe, substitutedBase, substitutedArguments);\n        case 11:\n          returnType = rti._primary;\n          substitutedReturnType = A._substitute(universe, returnType, typeArguments, depth);\n          functionParameters = rti._rest;\n          substitutedFunctionParameters = A._substituteFunctionParameters(universe, functionParameters, typeArguments, depth);\n          if (substitutedReturnType === returnType && substitutedFunctionParameters === functionParameters)\n            return rti;\n          return A._Universe__lookupFunctionRti(universe, substitutedReturnType, substitutedFunctionParameters);\n        case 12:\n          bounds = rti._rest;\n          depth += bounds.length;\n          substitutedBounds = A._substituteArray(universe, bounds, typeArguments, depth);\n          base = rti._primary;\n          substitutedBase = A._substitute(universe, base, typeArguments, depth);\n          if (substitutedBounds === bounds && substitutedBase === base)\n            return rti;\n          return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, true);\n        case 13:\n          index = rti._primary;\n          if (index < depth)\n            return rti;\n          argument = typeArguments[index - depth];\n          if (argument == null)\n            return rti;\n          return argument;\n        default:\n          throw A.wrapException(A.AssertionError$(\"Attempted to substitute unexpected RTI kind \" + kind));\n      }\n    }",
+        "type": "Rti Function(Object?,Rti,Object?,int)"
       },
       "352514166": {
         "id": "function/352514166",
         "kind": "function",
         "name": "_chainCoreFuture",
-        "size": 655,
+        "size": 642,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
@@ -6660,15 +8546,75 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Future__chainCoreFuture: function(source, target) {\n  var listeners;\n  for (; source.get$_state() === 2;)\n    source = source._resultOrListeners;\n  if (source._state >= 4) {\n    listeners = target._removeListeners$0();\n    target._state = source._state;\n    target._resultOrListeners = source._resultOrListeners;\n    P._Future__propagateToListeners(target, listeners);\n  } else {\n    listeners = target._resultOrListeners;\n    target._state = 2;\n    target._resultOrListeners = source;\n    source._prependListeners$1(listeners);\n  }\n}\n",
-        "type": "void Function(_Future<dynamic>,_Future<dynamic>)",
-        "measurements": null
+        "code": "_Future__chainCoreFuture(source, target) {\n      var t1, t2, listeners;\n      for (t1 = type$._Future_dynamic; t2 = source._state, (t2 & 4) !== 0;)\n        source = t1._as(source._resultOrListeners);\n      if ((t2 & 24) !== 0) {\n        listeners = target._removeListeners$0();\n        target._cloneResult$1(source);\n        A._Future__propagateToListeners(target, listeners);\n      } else {\n        listeners = type$.nullable__FutureListener_dynamic_dynamic._as(target._resultOrListeners);\n        target._state = target._state & 1 | 4;\n        target._resultOrListeners = source;\n        source._prependListeners$1(listeners);\n      }\n    }",
+        "type": "void Function(_Future<dynamic>,_Future<dynamic>)"
+      },
+      "352620724": {
+        "id": "function/352620724",
+        "kind": "function",
+        "name": "_setPrimary",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "Union(null, [exact=JSString], [exact=Rti], [subclass=JSInt])",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "353303220": {
+        "id": "function/353303220",
+        "kind": "function",
+        "name": "extractStackTrace",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StackTrace",
+        "inferredReturnType": "[null|subtype=StackTrace]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[subclass=Error]",
+            "declaredType": "Error"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "StackTrace Function(Error)"
       },
       "355012434": {
         "id": "function/355012434",
         "kind": "function",
         "name": "safeToString",
-        "size": 292,
+        "size": 270,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/893386369",
         "children": [],
@@ -6679,19 +8625,18 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
             "name": "object",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Error_safeToString: function(object) {\n  if (typeof object === \"number\" || typeof object === \"boolean\" || null == object)\n    return J.toString$0$(object);\n  if (typeof object === \"string\")\n    return JSON.stringify(object);\n  return P.Error__objectToString(object);\n}\n",
-        "type": "String Function(Object)",
-        "measurements": null
+        "code": "Error_safeToString(object) {\n      if (typeof object == \"number\" || A._isBool(object) || object == null)\n        return J.toString$0$(object);\n      if (typeof object == \"string\")\n        return JSON.stringify(object);\n      return A.Error__objectToString(object);\n    }",
+        "type": "String Function(Object?)"
       },
       "357240896": {
         "id": "function/357240896",
@@ -6708,19 +8653,18 @@
           "external": false
         },
         "returnType": "int",
-        "inferredReturnType": "[subclass=JSInt]",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "int Function()",
-        "measurements": null
+        "code": "",
+        "type": "int Function()"
       },
       "357627841": {
         "id": "function/357627841",
         "kind": "function",
         "name": "StreamIterator",
-        "size": 122,
+        "size": 177,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/240292734",
         "children": [],
@@ -6730,7 +8674,7 @@
           "factory": true,
           "external": false
         },
-        "returnType": "StreamIterator<StreamIterator.T>",
+        "returnType": "StreamIterator<#A/*free*/>",
         "inferredReturnType": "[exact=_StreamIterator]",
         "parameters": [
           {
@@ -6741,9 +8685,79 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "StreamIterator_StreamIterator: function(stream, $T) {\n  return new P._StreamIterator(null, stream, false, [$T]);\n}\n",
-        "type": "StreamIterator<StreamIterator.T> Function(Stream<StreamIterator.T>)",
-        "measurements": null
+        "code": "StreamIterator_StreamIterator(stream, $T) {\n      A.checkNotNullable(stream, \"stream\", type$.Object);\n      return new A._StreamIterator($T._eval$1(\"_StreamIterator<0>\"));\n    }",
+        "type": "StreamIterator<#A> Function<#A extends Object?>(Stream<#A>)"
+      },
+      "357766771": {
+        "id": "function/357766771",
+        "kind": "function",
+        "name": "_lookupFutureOrRti",
+        "size": 341,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupFutureOrRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"/\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createFutureOrRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,bool)"
+      },
+      "358028985": {
+        "id": "function/358028985",
+        "kind": "function",
+        "name": "_setOptionalPositional",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "optionalPositional",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "void Function(_FunctionParameters,Object?)"
       },
       "358340511": {
         "id": "function/358340511",
@@ -6765,25 +8779,116 @@
           {
             "name": "obj",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes anything)",
-        "inlinedCount": 10,
-        "code": null,
-        "type": "void Function(Object)",
-        "measurements": null
+        "inlinedCount": 7,
+        "code": "",
+        "type": "void Function(Object?)"
+      },
+      "359606692": {
+        "id": "function/359606692",
+        "kind": "function",
+        "name": "position",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "int Function(Object?)"
+      },
+      "361871829": {
+        "id": "function/361871829",
+        "kind": "function",
+        "name": "_TypeError.forType",
+        "size": 136,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/324095577",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "_TypeError",
+        "inferredReturnType": "[exact=_TypeError]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "type",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_TypeError__TypeError$forType(object, type) {\n      return new A._TypeError(\"TypeError: \" + A._Error_compose(object, null, type));\n    }",
+        "type": "_TypeError Function(dynamic,String)"
+      },
+      "362880086": {
+        "id": "function/362880086",
+        "kind": "function",
+        "name": "_isCheck",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "bool Function(Rti,Object?)"
       },
       "364010339": {
         "id": "function/364010339",
         "kind": "function",
         "name": "_rootHandleUncaughtError",
-        "size": 725,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
-        "children": [
-          "closure/35711406"
-        ],
+        "children": [],
         "modifiers": {
           "static": false,
           "const": false,
@@ -6796,12 +8901,12 @@
           {
             "name": "self",
             "type": "[null]",
-            "declaredType": "Zone"
+            "declaredType": "Zone?"
           },
           {
             "name": "parent",
             "type": "[null]",
-            "declaredType": "ZoneDelegate"
+            "declaredType": "ZoneDelegate?"
           },
           {
             "name": "zone",
@@ -6811,19 +8916,18 @@
           {
             "name": "error",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           },
           {
             "name": "stackTrace",
-            "type": "[null|subclass=Object]",
+            "type": "[null|subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "_rootHandleUncaughtError: function($self, $parent, zone, error, stackTrace) {\n  var t1 = {};\n  t1.error = error;\n  P._schedulePriorityAsyncCallback(new P._rootHandleUncaughtError_closure(t1, stackTrace));\n}\n",
-        "type": "void Function(Zone,ZoneDelegate,Zone,dynamic,StackTrace)",
-        "measurements": null
+        "inlinedCount": 3,
+        "code": "",
+        "type": "void Function(Zone?,ZoneDelegate?,Zone,Object,StackTrace)"
       },
       "367762222": {
         "id": "function/367762222",
@@ -6855,15 +8959,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "Timer Function(Duration,void Function())",
-        "measurements": null
+        "code": "",
+        "type": "Timer Function(Duration,void Function())"
       },
       "369614033": {
         "id": "function/369614033",
         "kind": "function",
         "name": "toString",
-        "size": 112,
+        "size": 98,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/523978038",
         "children": [],
@@ -6878,9 +8981,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(receiver) {\n  return P.IterableBase_iterableToFullString(receiver, \"[\", \"]\");\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(receiver) {\n      return A.IterableBase_iterableToFullString(receiver, \"[\", \"]\");\n    }",
+        "type": "String Function()"
       },
       "370120278": {
         "id": "function/370120278",
@@ -6901,9 +9003,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
       "370295194": {
         "id": "function/370295194",
@@ -6930,15 +9031,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "int Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "int Function(dynamic)"
       },
       "372037963": {
         "id": "function/372037963",
         "kind": "function",
         "name": "toString",
-        "size": 114,
+        "size": 98,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/293821936",
         "children": [],
@@ -6952,16 +9052,15 @@
         "inferredReturnType": "[exact=JSString]",
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
-        "inlinedCount": 3,
-        "code": "toString$0: function(_) {\n  var t1 = this._contents;\n  return t1.charCodeAt(0) == 0 ? t1 : t1;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "inlinedCount": 2,
+        "code": "toString$0(_) {\n      var t1 = this._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
+        "type": "String Function()"
       },
       "372361659": {
         "id": "function/372361659",
         "kind": "function",
         "name": "call",
-        "size": 89,
+        "size": 86,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/629631311",
         "children": [],
@@ -6971,7 +9070,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [
           {
@@ -6981,15 +9080,14 @@
           },
           {
             "name": "result",
-            "type": "[null|subclass=Object]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "dynamic"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$2: function(errorCode, result) {\n  this.$protected(errorCode, result);\n}\n",
-        "type": "Null Function(int,dynamic)",
-        "measurements": null
+        "code": "call$2(errorCode, result) {\n      this.$protected(A._asIntS(errorCode), result);\n    }",
+        "type": "void Function(int,dynamic)"
       },
       "373761717": {
         "id": "function/373761717",
@@ -7005,20 +9103,47 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Zone",
-        "inferredReturnType": "[null|exact=_RootZone]",
+        "returnType": "_Zone",
+        "inferredReturnType": "[exact=_RootZone]",
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 6,
-        "code": null,
-        "type": "Zone Function()",
-        "measurements": null
+        "code": "",
+        "type": "_Zone Function()"
+      },
+      "374894045": {
+        "id": "function/374894045",
+        "kind": "function",
+        "name": "throwLateFieldADI",
+        "size": 160,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/227349358",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "fieldName",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 0,
+        "code": "throwLateFieldADI(fieldName) {\n      return A.throwExpression(new A.LateError(\"Field '\" + A.S(fieldName) + \"' has been assigned during initialization.\"));\n    }",
+        "type": "void Function(String)"
       },
       "380325809": {
         "id": "function/380325809",
         "kind": "function",
         "name": "toString",
-        "size": 73,
+        "size": 59,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/851867060",
         "children": [],
@@ -7033,9 +9158,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(receiver) {\n  return String(receiver);\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(receiver) {\n      return String(receiver);\n    }",
+        "type": "String Function()"
       },
       "380929608": {
         "id": "function/380929608",
@@ -7067,17 +9191,16 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(dynamic,dynamic)"
       },
-      "381680028": {
-        "id": "function/381680028",
+      "383496058": {
+        "id": "function/383496058",
         "kind": "function",
-        "name": "call",
-        "size": 82,
+        "name": "shouldChain",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "closure/561897310",
+        "parent": "class/80405414",
         "children": [],
         "modifiers": {
           "static": false,
@@ -7085,20 +9208,25 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
-        "inferredReturnType": "[null]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "call$0: function() {\n  this.$this._completer.complete$1(this.value);\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|exact=_Future]",
+            "declaredType": "Future<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(Future<dynamic>)"
       },
       "385444888": {
         "id": "function/385444888",
         "kind": "function",
         "name": "wait",
-        "size": 2927,
+        "size": 3766,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/438137149",
         "children": [
@@ -7111,30 +9239,19 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Future<List<wait.T>>",
+        "returnType": "Future<List<#A/*free*/>>",
         "inferredReturnType": "[exact=_Future]",
         "parameters": [
           {
             "name": "futures",
-            "type": "Container(Union([exact=JSExtendableArray], [exact=JSFixedArray]), element: [null|subclass=Object], length: null)",
+            "type": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
             "declaredType": "Iterable<Future<wait.T>>"
-          },
-          {
-            "name": "cleanUp",
-            "type": "[null]",
-            "declaredType": "void Function(wait.T)"
-          },
-          {
-            "name": "eagerError",
-            "type": "Value([exact=JSBool], value: false)",
-            "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Future_wait: function(futures, cleanUp, eagerError) {\n  var _box_0, result, handleError, future, pos, e, st, t1, t2, _i, t3, values, exception, error;\n  _box_0 = {};\n  t1 = [P.List];\n  result = new P._Future(0, $.Zone__current, null, t1);\n  _box_0.values = null;\n  _box_0.remaining = 0;\n  _box_0.error = null;\n  _box_0.stackTrace = null;\n  handleError = new P.Future_wait_handleError(_box_0, cleanUp, false, result);\n  try {\n    for (t2 = futures.length, _i = 0, t3 = 0; _i < futures.length; futures.length === t2 || (0, H.throwConcurrentModificationError)(futures), ++_i) {\n      future = futures[_i];\n      pos = t3;\n      future.then$2$onError(new P.Future_wait_closure(_box_0, pos, result, cleanUp, false), handleError);\n      t3 = ++_box_0.remaining;\n    }\n    if (t3 === 0) {\n      t2 = new P._Future(0, $.Zone__current, null, t1);\n      t2._asyncComplete$1(C.List_empty);\n      return t2;\n    }\n    values = new Array(t3);\n    values.fixed$length = Array;\n    _box_0.values = values;\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    st = H.getTraceFromException(exception);\n    if (_box_0.remaining === 0 || false) {\n      error = e;\n      if (error == null)\n        error = new P.NullThrownError();\n      t2 = $.Zone__current;\n      if (t2 !== C.C__RootZone)\n        t2.toString;\n      t1 = new P._Future(0, t2, null, t1);\n      t1._asyncCompleteError$2(error, st);\n      return t1;\n    } else {\n      _box_0.error = e;\n      _box_0.stackTrace = st;\n    }\n  }\n  return result;\n}\n",
-        "type": "Future<List<wait.T>> Function(Iterable<Future<wait.T>>,{void Function(wait.T) cleanUp,bool eagerError})",
-        "measurements": null
+        "code": "Future_wait(futures, $T) {\n      var error, stackTrace, handleError, future, pos, e, st, t2, t3, _i, t4, exception, _box_0 = {}, cleanUp = null,\n        eagerError = false,\n        t1 = $T._eval$1(\"_Future<List<0>>\"),\n        _future = new A._Future($.Zone__current, t1);\n      _box_0.values = null;\n      _box_0.remaining = 0;\n      error = A._Cell$named(\"error\");\n      stackTrace = A._Cell$named(\"stackTrace\");\n      handleError = new A.Future_wait_handleError(_box_0, cleanUp, eagerError, _future, error, stackTrace);\n      try {\n        for (t2 = futures.length, t3 = type$.Null, _i = 0, t4 = 0; _i < futures.length; futures.length === t2 || (0, A.throwConcurrentModificationError)(futures), ++_i) {\n          future = futures[_i];\n          pos = t4;\n          future.then$1$2$onError(new A.Future_wait_closure(_box_0, pos, _future, cleanUp, eagerError, error, stackTrace, $T), handleError, t3);\n          t4 = ++_box_0.remaining;\n        }\n        if (t4 === 0) {\n          t2 = _future;\n          t2._completeWithValue$1(A._setArrayType([], $T._eval$1(\"JSArray<0>\")));\n          return t2;\n        }\n        _box_0.values = A.List_List$filled(t4, null, $T._eval$1(\"0?\"));\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        st = A.getTraceFromException(exception);\n        if (_box_0.remaining === 0 || A.boolConversionCheck(eagerError)) {\n          error = e;\n          stackTrace = st;\n          A.checkNotNullable(error, \"error\", type$.Object);\n          $.Zone__current !== B.C__RootZone;\n          if (stackTrace == null)\n            stackTrace = A.AsyncError_defaultStackTrace(error);\n          t1 = new A._Future($.Zone__current, t1);\n          t1._asyncCompleteError$2(error, stackTrace);\n          return t1;\n        } else {\n          error._value = e;\n          stackTrace._value = st;\n        }\n      }\n      return _future;\n    }",
+        "type": "Future<List<#A>> Function<#A extends Object?>(Iterable<Future<#A>>,{void Function(#A)? cleanUp,bool eagerError})"
       },
       "388977016": {
         "id": "function/388977016",
@@ -7161,20 +9278,19 @@
           {
             "name": "obj",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes anything)",
         "inlinedCount": 4,
-        "code": null,
-        "type": "String Function(String,Object)",
-        "measurements": null
+        "code": "",
+        "type": "String Function(String,Object?)"
       },
       "390828239": {
         "id": "function/390828239",
         "kind": "function",
         "name": "bindCallbackGuarded",
-        "size": 235,
+        "size": 451,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/566341130",
         "children": [
@@ -7197,9 +9313,8 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "bindCallbackGuarded$1: function(f) {\n  return new P._RootZone_bindCallbackGuarded_closure(this, f);\n}\n",
-        "type": "void Function() Function(void Function())",
-        "measurements": null
+        "code": "bindCallbackGuarded$1(f) {\n      return new A._RootZone_bindCallbackGuarded_closure(this, type$.void_Function._as(f));\n    }",
+        "type": "void Function() Function(void Function())"
       },
       "393060060": {
         "id": "function/393060060",
@@ -7219,37 +9334,26 @@
         "inferredReturnType": "[exact=BoundClosure]",
         "parameters": [
           {
-            "name": "_self",
-            "type": "Value([null|exact=JSString], value: \"self\")",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "_target",
-            "type": "Value([null|exact=JSString], value: \"target\")",
-            "declaredType": "dynamic"
-          },
-          {
             "name": "_receiver",
             "type": "Value([null|exact=JSString], value: \"receiver\")",
             "declaredType": "dynamic"
           },
           {
-            "name": "_name",
-            "type": "Value([null|exact=JSString], value: \"name\")",
-            "declaredType": "String"
+            "name": "_interceptor",
+            "type": "Value([null|exact=JSString], value: \"interceptor\")",
+            "declaredType": "dynamic"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "dynamic Function(dynamic,dynamic,dynamic,String)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic,dynamic)"
       },
       "394885266": {
         "id": "function/394885266",
         "kind": "function",
         "name": "call",
-        "size": 488,
+        "size": 532,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/590764751",
         "children": [],
@@ -7270,9 +9374,63 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(value) {\n  var t1, t2, t3;\n  t1 = this._box_0;\n  t2 = --t1.remaining;\n  t3 = t1.values;\n  if (t3 != null) {\n    t1 = this.pos;\n    if (t1 < 0 || t1 >= t3.length)\n      return H.ioore(t3, t1);\n    t3[t1] = value;\n    if (t2 === 0)\n      this.result._completeWithValue$1(t3);\n  } else if (t1.remaining === 0 && !this.eagerError)\n    this.result._completeError$2(t1.error, t1.stackTrace);\n}\n",
-        "type": "Null Function(wait.T)",
-        "measurements": null
+        "code": "call$1(value) {\n      var valueList, t2, _this = this,\n        t1 = _this.T;\n      t1._as(value);\n      t2 = _this._box_0;\n      --t2.remaining;\n      valueList = t2.values;\n      if (valueList != null) {\n        J.$indexSet$a(valueList, _this.pos, value);\n        if (t2.remaining === 0)\n          _this._future._completeWithValue$1(A.List_List$from(valueList, t1));\n      } else if (t2.remaining === 0 && !_this.eagerError)\n        _this._future._completeError$2(_this.error._readLocal$0(), _this.stackTrace._readLocal$0());\n    }",
+        "type": "Null Function(wait.T)"
+      },
+      "395066818": {
+        "id": "function/395066818",
+        "kind": "function",
+        "name": "readLocal",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/745154066",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "#A/*free*/",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "#A Function<#A extends Object?>()"
+      },
+      "395359035": {
+        "id": "function/395359035",
+        "kind": "function",
+        "name": "_setNamed",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "named",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "void Function(_FunctionParameters,Object?)"
       },
       "399195151": {
         "id": "function/399195151",
@@ -7294,14 +9452,51 @@
           {
             "name": "object",
             "type": "Value([exact=JSString], value: \"Hello, World!\")",
-            "declaredType": "Object"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function(Object)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(Object?)"
+      },
+      "400204433": {
+        "id": "function/400204433",
+        "kind": "function",
+        "name": "_functionRtiToString",
+        "size": 3370,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "functionType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "genericContext",
+            "type": "Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
+            "declaredType": "List<String>?"
+          },
+          {
+            "name": "bounds",
+            "type": "[null|exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_functionRtiToString(functionType, genericContext, bounds) {\n      var boundsLength, outerContextLength, offset, i, t1, t2, t3, typeParametersText, typeSep, t4, t5, boundRti, kind, parameters, requiredPositional, requiredPositionalLength, optionalPositional, optionalPositionalLength, named, namedLength, returnTypeText, argumentsText, sep, _s2_ = \", \";\n      if (bounds != null) {\n        boundsLength = bounds.length;\n        if (genericContext == null) {\n          genericContext = A._setArrayType([], type$.JSArray_String);\n          outerContextLength = null;\n        } else\n          outerContextLength = genericContext.length;\n        offset = genericContext.length;\n        for (i = boundsLength; i > 0; --i)\n          B.JSArray_methods.add$1(genericContext, \"T\" + (offset + i));\n        for (t1 = type$.nullable_Object, t2 = type$.legacy_Object, t3 = type$.Object, typeParametersText = \"<\", typeSep = \"\", i = 0; i < boundsLength; ++i, typeSep = _s2_) {\n          typeParametersText += typeSep;\n          t4 = genericContext.length;\n          t5 = t4 - 1 - i;\n          if (!(t5 >= 0))\n            return A.ioore(genericContext, t5);\n          typeParametersText = B.JSString_methods.$add(typeParametersText, genericContext[t5]);\n          boundRti = bounds[i];\n          kind = boundRti._kind;\n          if (!(kind === 2 || kind === 3 || kind === 4 || kind === 5 || boundRti === t1))\n            if (!(boundRti === t2))\n              t4 = boundRti === t3;\n            else\n              t4 = true;\n          else\n            t4 = true;\n          if (!t4)\n            typeParametersText += B.JSString_methods.$add(\" extends \", A._rtiToString(boundRti, genericContext));\n        }\n        typeParametersText += \">\";\n      } else {\n        typeParametersText = \"\";\n        outerContextLength = null;\n      }\n      t1 = functionType._primary;\n      parameters = functionType._rest;\n      requiredPositional = parameters._requiredPositional;\n      requiredPositionalLength = requiredPositional.length;\n      optionalPositional = parameters._optionalPositional;\n      optionalPositionalLength = optionalPositional.length;\n      named = parameters._named;\n      namedLength = named.length;\n      returnTypeText = A._rtiToString(t1, genericContext);\n      for (argumentsText = \"\", sep = \"\", i = 0; i < requiredPositionalLength; ++i, sep = _s2_)\n        argumentsText += B.JSString_methods.$add(sep, A._rtiToString(requiredPositional[i], genericContext));\n      if (optionalPositionalLength > 0) {\n        argumentsText += sep + \"[\";\n        for (sep = \"\", i = 0; i < optionalPositionalLength; ++i, sep = _s2_)\n          argumentsText += B.JSString_methods.$add(sep, A._rtiToString(optionalPositional[i], genericContext));\n        argumentsText += \"]\";\n      }\n      if (namedLength > 0) {\n        argumentsText += sep + \"{\";\n        for (sep = \"\", i = 0; i < namedLength; i += 3, sep = _s2_) {\n          argumentsText += sep;\n          if (named[i + 1])\n            argumentsText += \"required \";\n          argumentsText += J.$add$ns(A._rtiToString(named[i + 2], genericContext), \" \") + named[i];\n        }\n        argumentsText += \"}\";\n      }\n      if (outerContextLength != null) {\n        genericContext.toString;\n        genericContext.length = outerContextLength;\n      }\n      return typeParametersText + \"(\" + argumentsText + \") => \" + A.S(returnTypeText);\n    }",
+        "type": "String Function(Rti,List<String>?,{Object? bounds})"
       },
       "400990606": {
         "id": "function/400990606",
@@ -7333,15 +9528,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(Object?,Object?)"
       },
       "405266426": {
         "id": "function/405266426",
         "kind": "function",
         "name": "iterator",
-        "size": 114,
+        "size": 151,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/523978038",
         "children": [],
@@ -7354,19 +9548,46 @@
         "returnType": "Iterator<JSArray.E>",
         "inferredReturnType": "[exact=ArrayIterator]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$iterator: function(receiver) {\n  return new J.ArrayIterator(receiver, receiver.length, 0, null);\n}\n",
-        "type": "Iterator<JSArray.E> Function()",
-        "measurements": null
+        "code": "get$iterator(receiver) {\n      return new J.ArrayIterator(receiver, receiver.length, A._arrayInstanceType(receiver)._eval$1(\"ArrayIterator<1>\"));\n    }",
+        "type": "Iterator<JSArray.E> Function()"
       },
-      "407139250": {
-        "id": "function/407139250",
+      "405722833": {
+        "id": "function/405722833",
         "kind": "function",
-        "name": "setRange",
-        "size": 1400,
+        "name": "_getInterfaceTypeArguments",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/523978038",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 7,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Rti)"
+      },
+      "407860982": {
+        "id": "function/407860982",
+        "kind": "function",
+        "name": "isJsFunctionType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -7374,35 +9595,52 @@
           "factory": false,
           "external": false
         },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "409628970": {
+        "id": "function/409628970",
+        "kind": "function",
+        "name": "handleExtendedOperations",
+        "size": 417,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
         "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [
           {
-            "name": "start",
-            "type": "[subclass=JSUInt32]",
-            "declaredType": "int"
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           },
           {
-            "name": "end",
-            "type": "[subclass=JSUInt32]",
-            "declaredType": "int"
-          },
-          {
-            "name": "iterable",
-            "type": "Union([exact=JSUInt31], [subclass=JSArray])",
-            "declaredType": "Iterable<JSArray.E>"
-          },
-          {
-            "name": "skipCount",
-            "type": "[exact=JSUInt31]",
-            "declaredType": "int"
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "setRange$4: function(receiver, start, end, iterable, skipCount) {\n  var $length, t1, otherStart, otherList, i;\n  if (!!receiver.immutable$list)\n    H.throwExpression(P.UnsupportedError$(\"setRange\"));\n  P.RangeError_checkValidRange(start, end, receiver.length, null, null, null);\n  $length = end - start;\n  if ($length === 0)\n    return;\n  t1 = J.getInterceptor(iterable);\n  if (!!t1.$isList) {\n    otherStart = skipCount;\n    otherList = iterable;\n  } else {\n    otherList = t1.skip$1(iterable, skipCount).toList$1$growable(0, false);\n    otherStart = 0;\n  }\n  if (otherStart + $length > otherList.length)\n    throw H.wrapException(P.StateError$(\"Too few elements\"));\n  if (otherStart < start)\n    for (i = $length - 1; i >= 0; --i) {\n      t1 = otherStart + i;\n      if (t1 >= otherList.length)\n        return H.ioore(otherList, t1);\n      receiver[start + i] = otherList[t1];\n    }\n  else\n    for (i = 0; i < $length; ++i) {\n      t1 = otherStart + i;\n      if (t1 >= otherList.length)\n        return H.ioore(otherList, t1);\n      receiver[start + i] = otherList[t1];\n    }\n}\nsetRange$3: function($receiver, start, end, iterable) {\n  return this.setRange$4($receiver, start, end, iterable, 0);\n}\n",
-        "type": "void Function(int,int,Iterable<JSArray.E>,[int])",
-        "measurements": null
+        "code": "_Parser_handleExtendedOperations(parser, stack) {\n      var $top = stack.pop();\n      if (0 === $top) {\n        stack.push(A._Universe__lookupTerminalRti(parser.u, 1, \"0&\"));\n        return;\n      }\n      if (1 === $top) {\n        stack.push(A._Universe__lookupTerminalRti(parser.u, 4, \"1&\"));\n        return;\n      }\n      throw A.wrapException(A.AssertionError$(\"Unexpected extended operation \" + A.S($top)));\n    }",
+        "type": "void Function(Object?,Object?)"
       },
       "411231605": {
         "id": "function/411231605",
@@ -7429,9 +9667,36 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic)"
+      },
+      "412727111": {
+        "id": "function/412727111",
+        "kind": "function",
+        "name": "_getFutureOrArgument",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 10,
+        "code": "",
+        "type": "Rti Function(Rti)"
       },
       "412886703": {
         "id": "function/412886703",
@@ -7457,44 +9722,14 @@
           },
           {
             "name": "stackTrace",
-            "type": "[null|subclass=Object]",
+            "type": "[null|subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function(Object,StackTrace)",
-        "measurements": null
-      },
-      "415620823": {
-        "id": "function/415620823",
-        "kind": "function",
-        "name": "_nonNullError",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/1052666095",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "Object",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "error",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 4,
-        "code": null,
-        "type": "Object Function(Object)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(Object,StackTrace)"
       },
       "417406426": {
         "id": "function/417406426",
@@ -7515,15 +9750,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 6,
-        "code": null,
-        "type": "Zone Function()",
-        "measurements": null
+        "code": "",
+        "type": "Zone Function()"
+      },
+      "417411809": {
+        "id": "function/417411809",
+        "kind": "function",
+        "name": "_asStringS",
+        "size": 215,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asStringS(object) {\n      if (typeof object == \"string\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String\"));\n    }",
+        "type": "String? Function(dynamic)"
       },
       "418915149": {
         "id": "function/418915149",
         "kind": "function",
         "name": "ioore",
-        "size": 171,
+        "size": 161,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -7547,46 +9809,54 @@
             "declaredType": "dynamic"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
-        "code": "ioore: function(receiver, index) {\n  if (receiver == null)\n    J.get$length$as(receiver);\n  throw H.wrapException(H.diagnoseIndexError(receiver, index));\n}\n",
-        "type": "dynamic Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "ioore(receiver, index) {\n      if (receiver == null)\n        J.get$length$as(receiver);\n      throw A.wrapException(A.diagnoseIndexError(receiver, index));\n    }",
+        "type": "dynamic Function(dynamic,dynamic)"
       },
-      "419713835": {
-        "id": "function/419713835",
+      "422605719": {
+        "id": "function/422605719",
         "kind": "function",
-        "name": "extractFunctionTypeObjectFrom",
+        "name": "_recipeJoin3",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
-            "name": "o",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s3",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "String Function(String,String,String)"
       },
       "425007214": {
         "id": "function/425007214",
         "kind": "function",
         "name": "==",
-        "size": 75,
+        "size": 61,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/86936801",
         "children": [],
@@ -7602,20 +9872,84 @@
           {
             "name": "other",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "$eq: function(receiver, other) {\n  return receiver === other;\n}\n",
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "$eq(receiver, other) {\n      return receiver === other;\n    }",
+        "type": "bool Function(Object)"
+      },
+      "425183906": {
+        "id": "function/425183906",
+        "kind": "function",
+        "name": "toString",
+        "size": 49,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/457024667",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return this._message;\n    }",
+        "type": "String Function()"
+      },
+      "426435180": {
+        "id": "function/426435180",
+        "kind": "function",
+        "name": "_parseRecipe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti Function(Object?,Object?,String,bool)"
       },
       "426855684": {
         "id": "function/426855684",
         "kind": "function",
         "name": "call",
-        "size": 159,
+        "size": 126,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/607767883",
         "children": [],
@@ -7636,15 +9970,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(_) {\n  var t1, f;\n  t1 = this._box_0;\n  f = t1.storedCallback;\n  t1.storedCallback = null;\n  f.call$0();\n}\n",
-        "type": "Null Function(dynamic)",
-        "measurements": null
+        "code": "call$1(_) {\n      var t1 = this._box_0,\n        f = t1.storedCallback;\n      t1.storedCallback = null;\n      f.call$0();\n    }",
+        "type": "Null Function(dynamic)"
       },
       "427434111": {
         "id": "function/427434111",
         "kind": "function",
         "name": "RangeError.range",
-        "size": 187,
+        "size": 169,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/974704527",
         "children": [],
@@ -7664,30 +9997,29 @@
           },
           {
             "name": "minValue",
-            "type": "[subclass=JSUInt32]",
-            "declaredType": "int"
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int?"
           },
           {
             "name": "maxValue",
-            "type": "[null|subclass=JSInt]",
-            "declaredType": "int"
+            "type": "[subclass=JSInt]",
+            "declaredType": "int?"
           },
           {
             "name": "name",
             "type": "[null|exact=JSString]",
-            "declaredType": "String"
+            "declaredType": "String?"
           },
           {
             "name": "message",
             "type": "[null]",
-            "declaredType": "String"
+            "declaredType": "String?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "RangeError$range: function(invalidValue, minValue, maxValue, $name, message) {\n  return new P.RangeError(minValue, maxValue, true, invalidValue, $name, \"Invalid value\");\n}\n",
-        "type": "dynamic Function(num,int,int,[String,String])",
-        "measurements": null
+        "code": "RangeError$range(invalidValue, minValue, maxValue, $name, message) {\n      return new A.RangeError(minValue, maxValue, true, invalidValue, $name, \"Invalid value\");\n    }",
+        "type": "dynamic Function(num,int?,int?,[String?,String?])"
       },
       "430193009": {
         "id": "function/430193009",
@@ -7714,71 +10046,8 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(String)",
-        "measurements": null
-      },
-      "430236296": {
-        "id": "function/430236296",
-        "kind": "function",
-        "name": "length",
-        "size": 177,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/70813553",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "int",
-        "inferredReturnType": "[subclass=JSPositiveInt]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "get$length: function(_) {\n  var it, count;\n  it = this.get$iterator(this);\n  for (count = 0; it.moveNext$0();)\n    ++count;\n  return count;\n}\n",
-        "type": "int Function()",
-        "measurements": null
-      },
-      "430480673": {
-        "id": "function/430480673",
-        "kind": "function",
-        "name": "iterableToShortString",
-        "size": 689,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/812154630",
-        "children": [],
-        "modifiers": {
-          "static": true,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
-        "parameters": [
-          {
-            "name": "iterable",
-            "type": "[subclass=Iterable]",
-            "declaredType": "Iterable<dynamic>"
-          },
-          {
-            "name": "leftDelimiter",
-            "type": "Value([exact=JSString], value: \"(\")",
-            "declaredType": "String"
-          },
-          {
-            "name": "rightDelimiter",
-            "type": "Value([exact=JSString], value: \")\")",
-            "declaredType": "String"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "IterableBase_iterableToShortString: function(iterable, leftDelimiter, rightDelimiter) {\n  var parts, t1;\n  if (P._isToStringVisiting(iterable)) {\n    if (leftDelimiter === \"(\" && rightDelimiter === \")\")\n      return \"(...)\";\n    return leftDelimiter + \"...\" + rightDelimiter;\n  }\n  parts = [];\n  t1 = $.$get$_toStringVisiting();\n  t1.push(iterable);\n  try {\n    P._iterablePartsToStrings(iterable, parts);\n  } finally {\n    if (0 >= t1.length)\n      return H.ioore(t1, -1);\n    t1.pop();\n  }\n  t1 = P.StringBuffer__writeAll(leftDelimiter, parts, \", \") + rightDelimiter;\n  return t1.charCodeAt(0) == 0 ? t1 : t1;\n}\n",
-        "type": "String Function(Iterable<dynamic>,[String,String])",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(String)"
       },
       "430787578": {
         "id": "function/430787578",
@@ -7799,15 +10068,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function() Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function() Function()"
       },
       "431897853": {
         "id": "function/431897853",
         "kind": "function",
         "name": "toString",
-        "size": 78,
+        "size": 64,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/217690375",
         "children": [],
@@ -7822,15 +10090,52 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"Exception: \" + this.message;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"Exception: \" + this.message;\n    }",
+        "type": "String Function()"
+      },
+      "432258434": {
+        "id": "function/432258434",
+        "kind": "function",
+        "name": "_FutureListener.thenAwait",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_FutureListener]",
+        "parameters": [
+          {
+            "name": "result",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<_FutureListener.T>"
+          },
+          {
+            "name": "onValue",
+            "type": "[subclass=Closure]",
+            "declaredType": "FutureOr<_FutureListener.T> Function(_FutureListener.S)"
+          },
+          {
+            "name": "errorCallback",
+            "type": "[subclass=Closure]",
+            "declaredType": "Function"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(_Future<_FutureListener.T>,FutureOr<_FutureListener.T> Function(_FutureListener.S),Function)"
       },
       "435575019": {
         "id": "function/435575019",
         "kind": "function",
         "name": "toStringWrapper",
-        "size": 83,
+        "size": 73,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -7841,19 +10146,18 @@
           "external": false
         },
         "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[null|exact=JSString]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toStringWrapper: function() {\n  return J.toString$0$(this.dartException);\n}\n",
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "toStringWrapper() {\n      return J.toString$0$(this.dartException);\n    }",
+        "type": "dynamic Function()"
       },
       "436170439": {
         "id": "function/436170439",
         "kind": "function",
         "name": "List.generate",
-        "size": 357,
+        "size": 247,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/959990109",
         "children": [],
@@ -7863,8 +10167,8 @@
           "factory": true,
           "external": false
         },
-        "returnType": "List<List.E>",
-        "inferredReturnType": "Container(Union([exact=JSExtendableArray], [exact=JSFixedArray]), element: [null|subclass=Object], length: null)",
+        "returnType": "List<#A/*free*/>",
+        "inferredReturnType": "Union([exact=JSExtendableArray], [exact=JSFixedArray])",
         "parameters": [
           {
             "name": "length",
@@ -7875,24 +10179,18 @@
             "name": "generator",
             "type": "[subclass=Closure]",
             "declaredType": "List.E Function(int)"
-          },
-          {
-            "name": "growable",
-            "type": "Value([exact=JSBool], value: true)",
-            "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "List_List$generate: function($length, generator, growable) {\n  var result, i, t1;\n  result = [];\n  C.JSArray_methods.set$length(result, $length);\n  for (i = 0; i < $length; ++i) {\n    t1 = generator.call$1(i);\n    if (i >= result.length)\n      return H.ioore(result, i);\n    result[i] = t1;\n  }\n  return result;\n}\n",
-        "type": "List<List.E> Function(int,List.E Function(int),{bool growable})",
-        "measurements": null
+        "code": "List_List$generate($length, generator, $E) {\n      var i,\n        result = J.JSArray_JSArray$growable($length, $E);\n      for (i = 0; i < $length; ++i)\n        B.JSArray_methods.$indexSet(result, i, generator.call$1(i));\n      return result;\n    }",
+        "type": "List<#A> Function<#A extends Object?>(int,#A Function(int),{bool growable})"
       },
       "436231120": {
         "id": "function/436231120",
         "kind": "function",
         "name": "toString",
-        "size": 316,
+        "size": 259,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/518228506",
         "children": [],
@@ -7907,15 +10205,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  var t1, trace;\n  t1 = this._trace;\n  if (t1 != null)\n    return t1;\n  t1 = this._exception;\n  trace = t1 !== null && typeof t1 === \"object\" ? t1.stack : null;\n  t1 = trace == null ? \"\" : trace;\n  this._trace = t1;\n  return t1;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      var trace,\n        t1 = this._trace;\n      if (t1 != null)\n        return t1;\n      t1 = this._exception;\n      trace = t1 !== null && typeof t1 === \"object\" ? t1.stack : null;\n      return this._trace = trace == null ? \"\" : trace;\n    }",
+        "type": "String Function()"
+      },
+      "436761607": {
+        "id": "function/436761607",
+        "kind": "function",
+        "name": "_getCanonicalRecipe",
+        "size": 71,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 10,
+        "code": "Rti__getCanonicalRecipe(rti) {\n      return rti._canonicalRecipe;\n    }",
+        "type": "String Function(Rti)"
       },
       "437395524": {
         "id": "function/437395524",
         "kind": "function",
         "name": "JSArray.fixed",
-        "size": 264,
+        "size": 285,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/523978038",
         "children": [],
@@ -7925,7 +10250,7 @@
           "factory": true,
           "external": false
         },
-        "returnType": "JSArray<JSArray.E>",
+        "returnType": "JSArray<#A/*free*/>",
         "inferredReturnType": "[exact=JSFixedArray]",
         "parameters": [
           {
@@ -7936,15 +10261,42 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "JSArray_JSArray$fixed: function($length) {\n  if ($length < 0 || $length > 4294967295)\n    throw H.wrapException(P.RangeError$range($length, 0, 4294967295, \"length\", null));\n  return J.JSArray_JSArray$markFixed(new Array($length));\n}\n",
-        "type": "JSArray<JSArray.E> Function(int)",
-        "measurements": null
+        "code": "JSArray_JSArray$fixed($length, $E) {\n      if ($length < 0 || $length > 4294967295)\n        throw A.wrapException(A.RangeError$range($length, 0, 4294967295, \"length\", null));\n      return J.JSArray_markFixedList(A._setArrayType(new Array($length), $E._eval$1(\"JSArray<0>\")), $E);\n    }",
+        "type": "JSArray<#A> Function<#A extends Object?>(int)"
+      },
+      "438117901": {
+        "id": "function/438117901",
+        "kind": "function",
+        "name": "sharedEmptyArray",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?)"
       },
       "440018750": {
         "id": "function/440018750",
         "kind": "function",
         "name": "toString",
-        "size": 158,
+        "size": 138,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1003011102",
         "children": [],
@@ -7959,15 +10311,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "toString$0: function(receiver) {\n  if (receiver === 0 && 1 / receiver < 0)\n    return \"-0.0\";\n  else\n    return \"\" + receiver;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(receiver) {\n      if (receiver === 0 && 1 / receiver < 0)\n        return \"-0.0\";\n      else\n        return \"\" + receiver;\n    }",
+        "type": "String Function()"
       },
       "445547062": {
         "id": "function/445547062",
         "kind": "function",
         "name": "S",
-        "size": 505,
+        "size": 492,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -7988,15 +10339,52 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "S: function(value) {\n  var res;\n  if (typeof value === \"string\")\n    return value;\n  if (typeof value === \"number\") {\n    if (value !== 0)\n      return \"\" + value;\n  } else if (true === value)\n    return \"true\";\n  else if (false === value)\n    return \"false\";\n  else if (value == null)\n    return \"null\";\n  res = J.toString$0$(value);\n  if (typeof res !== \"string\")\n    throw H.wrapException(H.argumentErrorValue(value));\n  return res;\n}\n",
-        "type": "String Function(dynamic)",
-        "measurements": null
+        "code": "S(value) {\n      var res;\n      if (typeof value == \"string\")\n        return value;\n      if (typeof value == \"number\") {\n        if (value !== 0)\n          return \"\" + value;\n      } else if (true === value)\n        return \"true\";\n      else if (false === value)\n        return \"false\";\n      else if (value == null)\n        return \"null\";\n      res = J.toString$0$(value);\n      if (typeof res != \"string\")\n        throw A.wrapException(A.argumentErrorValue(value));\n      return res;\n    }",
+        "type": "String Function(dynamic)"
+      },
+      "447148542": {
+        "id": "function/447148542",
+        "kind": "function",
+        "name": "evalTypeVariable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "name",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,Rti,String)"
       },
       "448031436": {
         "id": "function/448031436",
         "kind": "function",
         "name": "_newHashTable",
-        "size": 216,
+        "size": 186,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -8011,15 +10399,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_LinkedHashSet__newHashTable: function() {\n  var table = Object.create(null);\n  table[\"<non-identifier-key>\"] = table;\n  delete table[\"<non-identifier-key>\"];\n  return table;\n}\n",
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "_LinkedHashSet__newHashTable() {\n      var table = Object.create(null);\n      table[\"<non-identifier-key>\"] = table;\n      delete table[\"<non-identifier-key>\"];\n      return table;\n    }",
+        "type": "dynamic Function()"
       },
       "448227795": {
         "id": "function/448227795",
         "kind": "function",
         "name": "_errorName",
-        "size": 104,
+        "size": 90,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
@@ -8034,44 +10421,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "get$_errorName: function() {\n  return \"Invalid argument\" + (!this._hasValue ? \"(s)\" : \"\");\n}\n",
-        "type": "String Function()",
-        "measurements": null
-      },
-      "453686242": {
-        "id": "function/453686242",
-        "kind": "function",
-        "name": "elementAt",
-        "size": 174,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/523978038",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "JSArray.E",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "index",
-            "type": "[subclass=JSInt]",
-            "declaredType": "int"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "elementAt$1: function(receiver, index) {\n  if (index < 0 || index >= receiver.length)\n    return H.ioore(receiver, index);\n  return receiver[index];\n}\n",
-        "type": "JSArray.E Function(int)",
-        "measurements": null
+        "code": "get$_errorName() {\n      return \"Invalid argument\" + (!this._hasValue ? \"(s)\" : \"\");\n    }",
+        "type": "String Function()"
       },
       "456567103": {
         "id": "function/456567103",
         "kind": "function",
         "name": "JSArray.markFixed",
-        "size": 113,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/523978038",
         "children": [],
@@ -8081,7 +10438,7 @@
           "factory": true,
           "external": false
         },
-        "returnType": "JSArray<JSArray.E>",
+        "returnType": "JSArray<#A/*free*/>",
         "inferredReturnType": "[exact=JSFixedArray]",
         "parameters": [
           {
@@ -8091,18 +10448,17 @@
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "JSArray_JSArray$markFixed: function(allocation) {\n  return J.JSArray_markFixedList(allocation);\n}\n",
-        "type": "JSArray<JSArray.E> Function(dynamic)",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "",
+        "type": "JSArray<#A> Function<#A extends Object?>(dynamic)"
       },
-      "458931695": {
-        "id": "function/458931695",
+      "457543033": {
+        "id": "function/457543033",
         "kind": "function",
-        "name": "tooFew",
+        "name": "stringLessThan",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/737466373",
+        "parent": "class/1070435853",
         "children": [],
         "modifiers": {
           "static": true,
@@ -8110,14 +10466,24 @@
           "factory": false,
           "external": false
         },
-        "returnType": "StateError",
-        "inferredReturnType": "[exact=StateError]",
-        "parameters": [],
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "StateError Function()",
-        "measurements": null
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(String,String)"
       },
       "460512542": {
         "id": "function/460512542",
@@ -8134,19 +10500,18 @@
           "external": false
         },
         "returnType": "Zone",
-        "inferredReturnType": "[null|exact=_RootZone]",
+        "inferredReturnType": "[exact=_RootZone]",
         "parameters": [],
         "sideEffects": "SideEffects(reads static; writes nothing)",
-        "inlinedCount": 18,
-        "code": null,
-        "type": "Zone Function()",
-        "measurements": null
+        "inlinedCount": 7,
+        "code": "",
+        "type": "Zone Function()"
       },
       "464959827": {
         "id": "function/464959827",
         "kind": "function",
         "name": "toString",
-        "size": 550,
+        "size": 544,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
@@ -8161,17 +10526,16 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  var t1, nameString, message, prefix, explanation, errorValue;\n  t1 = this.name;\n  nameString = t1 != null ? \" (\" + t1 + \")\" : \"\";\n  t1 = this.message;\n  message = t1 == null ? \"\" : \": \" + t1;\n  prefix = this.get$_errorName() + nameString + message;\n  if (!this._hasValue)\n    return prefix;\n  explanation = this.get$_errorExplanation();\n  errorValue = P.Error_safeToString(this.invalidValue);\n  return prefix + explanation + \": \" + H.S(errorValue);\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      var explanation, errorValue, _this = this,\n        $name = _this.name,\n        nameString = $name == null ? \"\" : \" (\" + $name + \")\",\n        message = _this.message,\n        messageString = message == null ? \"\" : \": \" + message,\n        prefix = _this.get$_errorName() + nameString + messageString;\n      if (!_this._hasValue)\n        return prefix;\n      explanation = _this.get$_errorExplanation();\n      errorValue = A.Error_safeToString(_this.invalidValue);\n      return prefix + explanation + \": \" + errorValue;\n    }",
+        "type": "String Function()"
       },
-      "467155193": {
-        "id": "function/467155193",
+      "467920119": {
+        "id": "function/467920119",
         "kind": "function",
-        "name": "isJsFunction",
+        "name": "Rti",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/214521760",
         "children": [],
         "modifiers": {
           "static": false,
@@ -8179,26 +10543,62 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "469917674": {
+        "id": "function/469917674",
+        "kind": "function",
+        "name": "_substituteArray",
+        "size": 503,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "o",
+            "name": "universe",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rtiArray",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "depth",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_substituteArray(universe, rtiArray, typeArguments, depth) {\n      var changed, i, rti, substitutedRti,\n        $length = rtiArray.length,\n        result = A._Utils_newArrayOrEmpty($length);\n      for (changed = false, i = 0; i < $length; ++i) {\n        rti = rtiArray[i];\n        substitutedRti = A._substitute(universe, rti, typeArguments, depth);\n        if (substitutedRti !== rti)\n          changed = true;\n        result[i] = substitutedRti;\n      }\n      return changed ? result : rtiArray;\n    }",
+        "type": "Object? Function(Object?,Object?,Object?,int)"
       },
       "469962639": {
         "id": "function/469962639",
         "kind": "function",
         "name": "call",
-        "size": 215,
+        "size": 218,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/913475889",
         "children": [],
@@ -8219,9 +10619,8 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(callback) {\n  var t1, t2;\n  this._box_0.storedCallback = callback;\n  t1 = this.div;\n  t2 = this.span;\n  t1.firstChild ? t1.removeChild(t2) : t1.appendChild(t2);\n}\n",
-        "type": "Null Function(void Function())",
-        "measurements": null
+        "code": "call$1(callback) {\n      var t1, t2;\n      this._box_0.storedCallback = type$.void_Function._as(callback);\n      t1 = this.div;\n      t2 = this.span;\n      t1.firstChild ? t1.removeChild(t2) : t1.appendChild(t2);\n    }",
+        "type": "Null Function(void Function())"
       },
       "473156332": {
         "id": "function/473156332",
@@ -8273,15 +10672,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(int,int,int,int,int,String)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(int,int,int,int,int,String)"
       },
       "474133145": {
         "id": "function/474133145",
         "kind": "function",
         "name": "toString",
-        "size": 90,
+        "size": 76,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/991730135",
         "children": [],
@@ -8296,15 +10694,47 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"Unsupported operation: \" + this.message;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"Unsupported operation: \" + this.message;\n    }",
+        "type": "String Function()"
+      },
+      "476211666": {
+        "id": "function/476211666",
+        "kind": "function",
+        "name": "[]=",
+        "size": 357,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JSArray.E"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "$indexSet(receiver, index, value) {\n      A._arrayInstanceType(receiver)._precomputed1._as(value);\n      if (!!receiver.immutable$list)\n        A.throwExpression(A.UnsupportedError$(\"indexed set\"));\n      if (!(index >= 0 && index < receiver.length))\n        throw A.wrapException(A.diagnoseIndexError(receiver, index));\n      receiver[index] = value;\n    }",
+        "type": "void Function(int,Object?)"
       },
       "476860251": {
         "id": "function/476860251",
         "kind": "function",
         "name": "cspForwardCall",
-        "size": 1409,
+        "size": 1644,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/317291728",
         "children": [],
@@ -8323,14 +10753,14 @@
             "declaredType": "int"
           },
           {
-            "name": "isSuperCall",
-            "type": "[exact=JSBool]",
+            "name": "needsDirectAccess",
+            "type": "[null|subtype=bool]",
             "declaredType": "bool"
           },
           {
             "name": "stubName",
             "type": "[null|exact=JSString]",
-            "declaredType": "String"
+            "declaredType": "String?"
           },
           {
             "name": "function",
@@ -8340,49 +10770,42 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_cspForwardCall: function(arity, isSuperCall, stubName, $function) {\n  var getSelf = H.BoundClosure_selfOf;\n  switch (isSuperCall ? -1 : arity) {\n    case 0:\n      return function(n, S) {\n        return function() {\n          return S(this)[n]();\n        };\n      }(stubName, getSelf);\n    case 1:\n      return function(n, S) {\n        return function(a) {\n          return S(this)[n](a);\n        };\n      }(stubName, getSelf);\n    case 2:\n      return function(n, S) {\n        return function(a, b) {\n          return S(this)[n](a, b);\n        };\n      }(stubName, getSelf);\n    case 3:\n      return function(n, S) {\n        return function(a, b, c) {\n          return S(this)[n](a, b, c);\n        };\n      }(stubName, getSelf);\n    case 4:\n      return function(n, S) {\n        return function(a, b, c, d) {\n          return S(this)[n](a, b, c, d);\n        };\n      }(stubName, getSelf);\n    case 5:\n      return function(n, S) {\n        return function(a, b, c, d, e) {\n          return S(this)[n](a, b, c, d, e);\n        };\n      }(stubName, getSelf);\n    default:\n      return function(f, s) {\n        return function() {\n          return f.apply(s(this), arguments);\n        };\n      }($function, getSelf);\n  }\n}\n",
-        "type": "dynamic Function(int,bool,String,dynamic)",
-        "measurements": null
+        "code": "Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf;\n      switch (A.boolConversionCheck(needsDirectAccess) ? -1 : arity) {\n        case 0:\n          return function(entry, receiverOf) {\n            return function() {\n              return receiverOf(this)[entry]();\n            };\n          }(stubName, getReceiver);\n        case 1:\n          return function(entry, receiverOf) {\n            return function(a) {\n              return receiverOf(this)[entry](a);\n            };\n          }(stubName, getReceiver);\n        case 2:\n          return function(entry, receiverOf) {\n            return function(a, b) {\n              return receiverOf(this)[entry](a, b);\n            };\n          }(stubName, getReceiver);\n        case 3:\n          return function(entry, receiverOf) {\n            return function(a, b, c) {\n              return receiverOf(this)[entry](a, b, c);\n            };\n          }(stubName, getReceiver);\n        case 4:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d) {\n              return receiverOf(this)[entry](a, b, c, d);\n            };\n          }(stubName, getReceiver);\n        case 5:\n          return function(entry, receiverOf) {\n            return function(a, b, c, d, e) {\n              return receiverOf(this)[entry](a, b, c, d, e);\n            };\n          }(stubName, getReceiver);\n        default:\n          return function(f, receiverOf) {\n            return function() {\n              return f.apply(receiverOf(this), arguments);\n            };\n          }($function, getReceiver);\n      }\n    }",
+        "type": "dynamic Function(int,bool,String?,dynamic)"
       },
-      "477609809": {
-        "id": "function/477609809",
+      "477858577": {
+        "id": "function/477858577",
         "kind": "function",
-        "name": "_completeError",
-        "size": 112,
+        "name": "recipe",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/952584796",
+        "parent": "class/926198907",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "void",
-        "inferredReturnType": "[null]",
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
-            "name": "error",
+            "name": "parser",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          },
-          {
-            "name": "stackTrace",
-            "type": "[null|subclass=Object]",
-            "declaredType": "StackTrace"
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "_completeError$2: function(error, stackTrace) {\n  this.future._completeError$2(error, stackTrace);\n}\n",
-        "type": "void Function(Object,StackTrace)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Object?)"
       },
       "478486472": {
         "id": "function/478486472",
         "kind": "function",
         "name": "markFixedList",
-        "size": 109,
+        "size": 91,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/523978038",
         "children": [],
@@ -8392,20 +10815,57 @@
           "factory": false,
           "external": false
         },
-        "returnType": "List<dynamic>",
+        "returnType": "List<#A/*free*/>",
         "inferredReturnType": "[exact=JSFixedArray]",
         "parameters": [
           {
             "name": "list",
             "type": "[null|subclass=Object]",
-            "declaredType": "List<dynamic>"
+            "declaredType": "List<markFixedList.T>"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "JSArray_markFixedList: function(list) {\n  list.fixed$length = Array;\n  return list;\n}\n",
-        "type": "List<dynamic> Function(List<dynamic>)",
-        "measurements": null
+        "code": "JSArray_markFixedList(list, $T) {\n      list.fixed$length = Array;\n      return list;\n    }",
+        "type": "List<#A> Function<#A extends Object?>(List<#A>)"
+      },
+      "479155815": {
+        "id": "function/479155815",
+        "kind": "function",
+        "name": "toType",
+        "size": 303,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "item",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_toType(universe, environment, item) {\n      if (typeof item == \"string\")\n        return A._Universe__lookupInterfaceRti(universe, item, universe.sEA);\n      else if (typeof item == \"number\")\n        return A._Parser_indexToType(universe, environment, item);\n      else\n        return item;\n    }",
+        "type": "Rti Function(Object?,Rti,Object?)"
       },
       "481547973": {
         "id": "function/481547973",
@@ -8437,78 +10897,47 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic,dynamic)"
       },
-      "482441661": {
-        "id": "function/482441661",
+      "481740897": {
+        "id": "function/481740897",
         "kind": "function",
-        "name": "skip",
-        "size": 93,
+        "name": "objectAssign",
+        "size": 219,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/523978038",
+        "parent": "class/1070435853",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "Iterable<JSArray.E>",
-        "inferredReturnType": "[exact=SubListIterable]",
+        "returnType": "void",
+        "inferredReturnType": "[null]",
         "parameters": [
           {
-            "name": "n",
-            "type": "[exact=JSUInt31]",
-            "declaredType": "int"
-          }
-        ],
-        "sideEffects": "SideEffects(reads field; writes nothing)",
-        "inlinedCount": 0,
-        "code": "skip$1: function(receiver, n) {\n  return H.SubListIterable$(receiver, n, null);\n}\n",
-        "type": "Iterable<JSArray.E> Function(int)",
-        "measurements": null
-      },
-      "483766990": {
-        "id": "function/483766990",
-        "kind": "function",
-        "name": "invoke",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "function",
+            "name": "o",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           },
           {
-            "name": "arguments",
+            "name": "other",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "dynamic Function(dynamic,dynamic)",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "_Utils_objectAssign(o, other) {\n      var i, key,\n        keys = Object.keys(other),\n        $length = keys.length;\n      for (i = 0; i < $length; ++i) {\n        key = keys[i];\n        o[key] = other[key];\n      }\n    }",
+        "type": "void Function(Object?,Object?)"
       },
       "486797615": {
         "id": "function/486797615",
         "kind": "function",
         "name": "_computeCspNonce",
-        "size": 173,
+        "size": 266,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -8518,77 +10947,168 @@
           "factory": false,
           "external": false
         },
-        "returnType": "String",
+        "returnType": "String?",
         "inferredReturnType": "[null|exact=JSString]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_computeCspNonce: function() {\n  var currentScript = init.currentScript;\n  if (currentScript == null)\n    return;\n  return String(currentScript.nonce);\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "_computeCspNonce() {\n      var nonce,\n        currentScript = init.currentScript;\n      if (currentScript == null)\n        return null;\n      nonce = currentScript.nonce;\n      return nonce != null && nonce !== \"\" ? nonce : currentScript.getAttribute(\"nonce\");\n    }",
+        "type": "String? Function()"
       },
-      "487598887": {
-        "id": "function/487598887",
+      "489157293": {
+        "id": "function/489157293",
         "kind": "function",
-        "name": "runtimeTypeToString",
-        "size": 136,
+        "name": "findRule",
+        "size": 182,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "rti",
+            "name": "universe",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           },
           {
-            "name": "onTypeVariable",
-            "type": "[null]",
-            "declaredType": "String Function(int)"
+            "name": "targetType",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_Universe_findRule(universe, targetType) {\n      var rule = universe.tR[targetType];\n      for (; typeof rule == \"string\";)\n        rule = universe.tR[rule];\n      return rule;\n    }",
+        "type": "Object? Function(Object?,String)"
+      },
+      "490035833": {
+        "id": "function/490035833",
+        "kind": "function",
+        "name": "push",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "runtimeTypeToString: function(rti, onTypeVariable) {\n  var t1 = H.runtimeTypeToStringV1(rti, onTypeVariable);\n  return t1;\n}\n",
-        "type": "String Function(dynamic,{String Function(int) onTypeVariable})",
-        "measurements": null
+        "inlinedCount": 29,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
       },
-      "491418529": {
-        "id": "function/491418529",
+      "490424967": {
+        "id": "function/490424967",
         "kind": "function",
-        "name": "iae",
-        "size": 92,
+        "name": "_getBindCache",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/214521760",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
-        "inferredReturnType": "[empty]",
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "argument",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 0,
-        "code": "iae: function(argument) {\n  throw H.wrapException(H.argumentErrorValue(argument));\n}\n",
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object? Function(Rti)"
+      },
+      "491504779": {
+        "id": "function/491504779",
+        "kind": "function",
+        "name": "_setBindCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "492521940": {
+        "id": "function/492521940",
+        "kind": "function",
+        "name": "_getPrecomputed1",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Object? Function(Rti)"
       },
       "492708773": {
         "id": "function/492708773",
@@ -8609,38 +11129,62 @@
         "parameters": [
           {
             "name": "result",
-            "type": "Union([exact=_Future], [null|exact=JSUnmodifiableArray])",
-            "declaredType": "dynamic"
+            "type": "[null]",
+            "declaredType": "FutureOr<_Future.T>"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 3,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(FutureOr<_Future.T>)"
       },
-      "494094492": {
-        "id": "function/494094492",
+      "494259168": {
+        "id": "function/494259168",
         "kind": "function",
-        "name": "_endIndex",
-        "size": 125,
+        "name": "handleIdentifier",
+        "size": 1100,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/60704969",
+        "parent": "class/926198907",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
         "returnType": "int",
-        "inferredReturnType": "[null|subclass=JSInt]",
-        "parameters": [],
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "start",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "source",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "hasPeriod",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "get$_endIndex: function() {\n  var $length = J.get$length$as(this.__internal$_iterable);\n  return $length;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "_Parser_handleIdentifier(parser, start, source, stack, hasPeriod) {\n      var t1, ch, t2, string, environment, recipe,\n        i = start + 1;\n      for (t1 = source.length; i < t1; ++i) {\n        ch = source.charCodeAt(i);\n        if (ch === 46) {\n          if (hasPeriod)\n            break;\n          hasPeriod = true;\n        } else {\n          if (!((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36))\n            t2 = ch >= 48 && ch <= 57;\n          else\n            t2 = true;\n          if (!t2)\n            break;\n        }\n      }\n      string = source.substring(start, i);\n      if (hasPeriod) {\n        t1 = parser.u;\n        environment = parser.e;\n        if (environment._kind === 10)\n          environment = environment._primary;\n        recipe = A._Universe_findRule(t1, environment._primary)[string];\n        if (recipe == null)\n          A.throwExpression('No \"' + string + '\" in \"' + A.Rti__getCanonicalRecipe(environment) + '\"');\n        stack.push(A._Universe_evalInEnvironment(t1, environment, recipe));\n      } else\n        stack.push(string);\n      return i;\n    }",
+        "type": "int Function(Object?,int,String,Object?,bool)"
       },
       "494583530": {
         "id": "function/494583530",
@@ -8661,15 +11205,113 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "495511570": {
+        "id": "function/495511570",
+        "kind": "function",
+        "name": "collectArray",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?,Object?)"
+      },
+      "497781031": {
+        "id": "function/497781031",
+        "kind": "function",
+        "name": "asDouble",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "double",
+        "inferredReturnType": "[subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "double Function(Object?)"
+      },
+      "499032542": {
+        "id": "function/499032542",
+        "kind": "function",
+        "name": "_lookupStarRti",
+        "size": 333,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupStarRti(universe, baseType, normalize) {\n      var t1,\n        key = baseType._canonicalRecipe + \"*\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createStarRti(universe, baseType, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,bool)"
       },
       "499330809": {
         "id": "function/499330809",
         "kind": "function",
         "name": "_computeThisScriptFromTrace",
-        "size": 749,
+        "size": 734,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -8684,17 +11326,44 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_computeThisScriptFromTrace: function() {\n  var stack, matches;\n  stack = new Error().stack;\n  if (stack == null) {\n    stack = function() {\n      try {\n        throw new Error();\n      } catch (e) {\n        return e.stack;\n      }\n    }();\n    if (stack == null)\n      throw H.wrapException(P.UnsupportedError$(\"No stack trace\"));\n  }\n  matches = stack.match(new RegExp(\"^ *at [^(]*\\\\((.*):[0-9]*:[0-9]*\\\\)$\", \"m\"));\n  if (matches != null)\n    return matches[1];\n  matches = stack.match(new RegExp(\"^[^@]*@(.*):[0-9]*$\", \"m\"));\n  if (matches != null)\n    return matches[1];\n  throw H.wrapException(P.UnsupportedError$('Cannot extract URI from \"' + stack + '\"'));\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "_computeThisScriptFromTrace() {\n      var matches,\n        stack = new Error().stack;\n      if (stack == null) {\n        stack = function() {\n          try {\n            throw new Error();\n          } catch (e) {\n            return e.stack;\n          }\n        }();\n        if (stack == null)\n          throw A.wrapException(A.UnsupportedError$(\"No stack trace\"));\n      }\n      matches = stack.match(new RegExp(\"^ *at [^(]*\\\\((.*):[0-9]*:[0-9]*\\\\)$\", \"m\"));\n      if (matches != null)\n        return matches[1];\n      matches = stack.match(new RegExp(\"^[^@]*@(.*):[0-9]*$\", \"m\"));\n      if (matches != null)\n        return matches[1];\n      throw A.wrapException(A.UnsupportedError$('Cannot extract URI from \"' + stack + '\"'));\n    }",
+        "type": "String Function()"
       },
-      "499807915": {
-        "id": "function/499807915",
+      "501313936": {
+        "id": "function/501313936",
         "kind": "function",
-        "name": "<",
-        "size": 174,
+        "name": "_getReturnType",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/1003011102",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "Rti Function(Rti)"
+      },
+      "502696664": {
+        "id": "function/502696664",
+        "kind": "function",
+        "name": "_isString",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -8706,24 +11375,23 @@
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [
           {
-            "name": "other",
-            "type": "[null|subclass=JSInt]",
-            "declaredType": "num"
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 0,
-        "code": "$lt: function(receiver, other) {\n  if (typeof other !== \"number\")\n    throw H.wrapException(H.argumentErrorValue(other));\n  return receiver < other;\n}\n",
-        "type": "bool Function(num)",
-        "measurements": null
+        "inlinedCount": 3,
+        "code": "_isString(object) {\n      return typeof object == \"string\";\n    }",
+        "type": "bool Function(Object?)"
       },
-      "501712645": {
-        "id": "function/501712645",
+      "504534695": {
+        "id": "function/504534695",
         "kind": "function",
-        "name": "joinArgumentsV1",
-        "size": 694,
+        "name": "closureFunctionType",
+        "size": 268,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -8731,30 +11399,47 @@
           "factory": false,
           "external": false
         },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
+        "returnType": "Rti?",
+        "inferredReturnType": "[null|exact=Rti]",
         "parameters": [
           {
-            "name": "types",
+            "name": "closure",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "startIndex",
-            "type": "[exact=JSUInt31]",
-            "declaredType": "int"
-          },
-          {
-            "name": "onTypeVariable",
-            "type": "[null]",
-            "declaredType": "String Function(int)"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "joinArgumentsV1: function(types, startIndex, onTypeVariable) {\n  var buffer, index, firstArgument, allDynamic, t1, argument;\n  if (types == null)\n    return \"\";\n  buffer = new P.StringBuffer(\"\");\n  for (index = startIndex, firstArgument = true, allDynamic = true, t1 = \"\"; index < types.length; ++index) {\n    if (firstArgument)\n      firstArgument = false;\n    else\n      buffer._contents = t1 + \", \";\n    argument = types[index];\n    if (argument != null)\n      allDynamic = false;\n    t1 = buffer._contents += H.runtimeTypeToStringV1(argument, onTypeVariable);\n  }\n  return allDynamic ? \"\" : \"<\" + buffer.toString$0(0) + \">\";\n}\n",
-        "type": "String Function(dynamic,int,{String Function(int) onTypeVariable})",
-        "measurements": null
+        "code": "closureFunctionType(closure) {\n      var signature = closure.$signature;\n      if (signature != null) {\n        if (typeof signature == \"number\")\n          return A.getTypeFromTypesTable(signature);\n        return closure.$signature();\n      }\n      return null;\n    }",
+        "type": "Rti? Function(Object?)"
+      },
+      "505296423": {
+        "id": "function/505296423",
+        "kind": "function",
+        "name": "_Type",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/642774187",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Type]",
+        "parameters": [
+          {
+            "name": "_rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "dynamic Function(Rti)"
       },
       "507333070": {
         "id": "function/507333070",
@@ -8785,45 +11470,48 @@
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 14,
-        "code": null,
-        "type": "String Function(String,String)",
-        "measurements": null
+        "inlinedCount": 11,
+        "code": "",
+        "type": "String Function(String,String)"
       },
-      "508874693": {
-        "id": "function/508874693",
+      "512286296": {
+        "id": "function/512286296",
         "kind": "function",
-        "name": "unmangleAllIdentifiersIfPreservedAnyways",
-        "size": 0,
+        "name": "_lookupGenericFunctionParameterRti",
+        "size": 430,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/527944179",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
         "parameters": [
           {
-            "name": "str",
+            "name": "universe",
             "type": "[null|subclass=Object]",
-            "declaredType": "String"
+            "declaredType": "Object?"
+          },
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(String)",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "_Universe__lookupGenericFunctionParameterRti(universe, index) {\n      var rti, t1,\n        key = \"\" + index + \"^\",\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 13;\n      rti._primary = index;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,int)"
       },
       "513053773": {
         "id": "function/513053773",
         "kind": "function",
         "name": "Future.value",
-        "size": 0,
+        "size": 162,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/438137149",
         "children": [],
@@ -8833,26 +11521,136 @@
           "factory": true,
           "external": false
         },
-        "returnType": "Future<Future.T>",
+        "returnType": "Future<#A/*free*/>",
         "inferredReturnType": "[exact=_Future]",
         "parameters": [
           {
             "name": "value",
-            "type": "Container([null|exact=JSUnmodifiableArray], element: [empty], length: 0)",
-            "declaredType": "dynamic"
+            "type": "[null]",
+            "declaredType": "FutureOr<Future.T>?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 3,
-        "code": null,
-        "type": "Future<Future.T> Function([dynamic])",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "Future_Future$value(value, $T) {\n      var t1 = new A._Future($.Zone__current, $T._eval$1(\"_Future<0>\"));\n      t1._asyncComplete$1(value);\n      return t1;\n    }",
+        "type": "Future<#A> Function<#A extends Object?>([FutureOr<#A>?])"
+      },
+      "514473880": {
+        "id": "function/514473880",
+        "kind": "function",
+        "name": "allocate",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_FunctionParameters",
+        "inferredReturnType": "[exact=_FunctionParameters]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "_FunctionParameters Function()"
+      },
+      "517189775": {
+        "id": "function/517189775",
+        "kind": "function",
+        "name": "setPosition",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "p",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "void Function(Object?,int)"
+      },
+      "517290884": {
+        "id": "function/517290884",
+        "kind": "function",
+        "name": "value",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/745154066",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "v",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "void Function(Object?)"
+      },
+      "517327012": {
+        "id": "function/517327012",
+        "kind": "function",
+        "name": "_getPrimary",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "Union(null, [exact=JSString], [exact=Rti], [subclass=JSInt])",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 48,
+        "code": "",
+        "type": "Object? Function(Rti)"
       },
       "519629171": {
         "id": "function/519629171",
         "kind": "function",
         "name": "_removeListeners",
-        "size": 177,
+        "size": 211,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
@@ -8862,20 +11660,19 @@
           "factory": false,
           "external": false
         },
-        "returnType": "_FutureListener<dynamic,dynamic>",
+        "returnType": "_FutureListener<dynamic,dynamic>?",
         "inferredReturnType": "[null|exact=_FutureListener]",
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 2,
-        "code": "_removeListeners$0: function() {\n  var current = this._resultOrListeners;\n  this._resultOrListeners = null;\n  return this._reverseListeners$1(current);\n}\n",
-        "type": "_FutureListener<dynamic,dynamic> Function()",
-        "measurements": null
+        "code": "_removeListeners$0() {\n      var current = type$.nullable__FutureListener_dynamic_dynamic._as(this._resultOrListeners);\n      this._resultOrListeners = null;\n      return this._reverseListeners$1(current);\n    }",
+        "type": "_FutureListener<dynamic,dynamic>? Function()"
       },
       "519947595": {
         "id": "function/519947595",
         "kind": "function",
         "name": "==",
-        "size": 70,
+        "size": 56,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/418854932",
         "children": [],
@@ -8891,20 +11688,47 @@
           {
             "name": "other",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "$eq: function(receiver, other) {\n  return null == other;\n}\n",
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "$eq(receiver, other) {\n      return null == other;\n    }",
+        "type": "bool Function(Object)"
+      },
+      "520073200": {
+        "id": "function/520073200",
+        "kind": "function",
+        "name": "_isNum",
+        "size": 62,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 6,
+        "code": "_isNum(object) {\n      return typeof object == \"number\";\n    }",
+        "type": "bool Function(Object?)"
       },
       "521874428": {
         "id": "function/521874428",
         "kind": "function",
         "name": "length",
-        "size": 71,
+        "size": 57,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/293821936",
         "children": [],
@@ -8917,17 +11741,127 @@
         "returnType": "int",
         "inferredReturnType": "[subclass=JSInt]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$length: function(_) {\n  return this._contents.length;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$length(_) {\n      return this._contents.length;\n    }",
+        "type": "int Function()"
+      },
+      "522380745": {
+        "id": "function/522380745",
+        "kind": "function",
+        "name": "_canonicalRecipeOfFunctionParameters",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(_FunctionParameters)"
+      },
+      "522820503": {
+        "id": "function/522820503",
+        "kind": "function",
+        "name": "_setCanonicalRecipe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "s",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "void Function(Rti,String)"
+      },
+      "523878647": {
+        "id": "function/523878647",
+        "kind": "function",
+        "name": "_lookupDynamicRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?)"
+      },
+      "527450614": {
+        "id": "function/527450614",
+        "kind": "function",
+        "name": "_ignoreError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function()"
       },
       "528985088": {
         "id": "function/528985088",
         "kind": "function",
         "name": "getTraceFromException",
-        "size": 400,
+        "size": 378,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -8938,7 +11872,7 @@
           "external": false
         },
         "returnType": "StackTrace",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[null|subtype=StackTrace]",
         "parameters": [
           {
             "name": "exception",
@@ -8948,9 +11882,8 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "getTraceFromException: function(exception) {\n  var trace;\n  if (exception instanceof H.ExceptionAndStackTrace)\n    return exception.stackTrace;\n  if (exception == null)\n    return new H._StackTrace(exception, null);\n  trace = exception.$cachedTrace;\n  if (trace != null)\n    return trace;\n  return exception.$cachedTrace = new H._StackTrace(exception, null);\n}\n",
-        "type": "StackTrace Function(dynamic)",
-        "measurements": null
+        "code": "getTraceFromException(exception) {\n      var trace;\n      if (exception instanceof A.ExceptionAndStackTrace)\n        return exception.stackTrace;\n      if (exception == null)\n        return new A._StackTrace(exception);\n      trace = exception.$cachedTrace;\n      if (trace != null)\n        return trace;\n      return exception.$cachedTrace = new A._StackTrace(exception);\n    }",
+        "type": "StackTrace Function(dynamic)"
       },
       "533906117": {
         "id": "function/533906117",
@@ -8969,17 +11902,77 @@
         "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads static; writes field)",
+        "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 4,
-        "code": null,
-        "type": "void Function()",
-        "measurements": null
+        "code": "",
+        "type": "void Function()"
+      },
+      "535892822": {
+        "id": "function/535892822",
+        "kind": "function",
+        "name": "isStrongTopType",
+        "size": 150,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 1,
+        "code": "isStrongTopType(t) {\n      var kind = t._kind;\n      return kind === 2 || kind === 3 || kind === 4 || kind === 5 || t === type$.nullable_Object;\n    }",
+        "type": "bool Function(Rti)"
+      },
+      "536333412": {
+        "id": "function/536333412",
+        "kind": "function",
+        "name": "_instanceTypeFromConstructorMiss",
+        "size": 326,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "instance",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "constructor",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_instanceTypeFromConstructorMiss(instance, $constructor) {\n      var effectiveConstructor = instance instanceof A.Closure ? instance.__proto__.__proto__.constructor : $constructor,\n        rti = A._Universe_findErasedType(init.typeUniverse, effectiveConstructor.name);\n      $constructor.$ccache = rti;\n      return rti;\n    }",
+        "type": "Rti Function(Object?,Object?)"
       },
       "539017937": {
         "id": "function/539017937",
         "kind": "function",
         "name": "_errorName",
-        "size": 65,
+        "size": 51,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/974704527",
         "children": [],
@@ -8994,9 +11987,52 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$_errorName: function() {\n  return \"RangeError\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "get$_errorName() {\n      return \"RangeError\";\n    }",
+        "type": "String Function()"
+      },
+      "539615930": {
+        "id": "function/539615930",
+        "kind": "function",
+        "name": "toString",
+        "size": 178,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/690322225",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"Null is not a valid value for the parameter '\" + this._name + \"' of type '\" + A.createRuntimeType(this.$ti._precomputed1).toString$0(0) + \"'\";\n    }",
+        "type": "String Function()"
+      },
+      "540076399": {
+        "id": "function/540076399",
+        "kind": "function",
+        "name": "_computeCrossOrigin",
+        "size": 169,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_computeCrossOrigin() {\n      var currentScript = init.currentScript;\n      if (currentScript == null)\n        return null;\n      return currentScript.crossOrigin;\n    }",
+        "type": "String? Function()"
       },
       "540949546": {
         "id": "function/540949546",
@@ -9022,16 +12058,15 @@
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 4,
-        "code": null,
-        "type": "String Function(String)",
-        "measurements": null
+        "inlinedCount": 3,
+        "code": "",
+        "type": "String Function(String)"
       },
       "542135743": {
         "id": "function/542135743",
         "kind": "function",
         "name": "_deleteTableEntry",
-        "size": 78,
+        "size": 64,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -9057,15 +12092,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_deleteTableEntry$2: function(table, key) {\n  delete table[key];\n}\n",
-        "type": "void Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "_deleteTableEntry$2(table, key) {\n      delete table[key];\n    }",
+        "type": "void Function(dynamic,dynamic)"
       },
       "544746737": {
         "id": "function/544746737",
         "kind": "function",
         "name": "throwConcurrentModificationError",
-        "size": 135,
+        "size": 125,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -9086,9 +12120,8 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "throwConcurrentModificationError: function(collection) {\n  throw H.wrapException(P.ConcurrentModificationError$(collection));\n}\n",
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "throwConcurrentModificationError(collection) {\n      throw A.wrapException(A.ConcurrentModificationError$(collection));\n    }",
+        "type": "dynamic Function(dynamic)"
       },
       "546320785": {
         "id": "function/546320785",
@@ -9115,44 +12148,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "void Function(void Function())",
-        "measurements": null
-      },
-      "549577701": {
-        "id": "function/549577701",
-        "kind": "function",
-        "name": "_objectRawTypeName",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/354160010",
-        "children": [],
-        "modifiers": {
-          "static": true,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
-        "parameters": [
-          {
-            "name": "object",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(Object)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(void Function())"
       },
       "550544609": {
         "id": "function/550544609",
         "kind": "function",
         "name": "toString",
-        "size": 65,
+        "size": 51,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/793539876",
         "children": [],
@@ -9166,18 +12169,17 @@
         "inferredReturnType": "[exact=JSString]",
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 0,
-        "code": "toString$0: function(receiver) {\n  return receiver;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "toString$0(receiver) {\n      return receiver;\n    }",
+        "type": "String Function()"
       },
-      "551570860": {
-        "id": "function/551570860",
+      "550912538": {
+        "id": "function/550912538",
         "kind": "function",
-        "name": "invokeOn",
-        "size": 0,
+        "name": "_generalNullableAsCheckImplementation",
+        "size": 228,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -9185,30 +12187,19 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Object",
+        "returnType": "Object?",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "function",
+            "name": "object",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "receiver",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "arguments",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "Object Function(dynamic,dynamic,dynamic)",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "_generalNullableAsCheckImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return object;\n      else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
+        "type": "Object? Function(Object?)"
       },
       "552271305": {
         "id": "function/552271305",
@@ -9235,25 +12226,57 @@
           {
             "name": "onValue",
             "type": "[subclass=Closure]",
-            "declaredType": "dynamic Function(_FutureListener.S)"
+            "declaredType": "FutureOr<_FutureListener.T> Function(_FutureListener.S)"
           },
           {
             "name": "errorCallback",
             "type": "[null|subclass=Closure]",
-            "declaredType": "Function"
+            "declaredType": "Function?"
           }
         ],
-        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(_Future<_FutureListener.T>,dynamic Function(_FutureListener.S),Function)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(_Future<_FutureListener.T>,FutureOr<_FutureListener.T> Function(_FutureListener.S),Function?)"
+      },
+      "552658686": {
+        "id": "function/552658686",
+        "kind": "function",
+        "name": "_canonicalRecipeOfGenericFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "baseFunctionType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "bounds",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti,Object?)"
       },
       "553149607": {
         "id": "function/553149607",
         "kind": "function",
         "name": "_chainForeignFuture",
-        "size": 1035,
+        "size": 1779,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [
@@ -9262,7 +12285,7 @@
           "closure/953553120"
         ],
         "modifiers": {
-          "static": true,
+          "static": false,
           "const": false,
           "factory": false,
           "external": false
@@ -9274,18 +12297,12 @@
             "name": "source",
             "type": "[null|exact=_Future]",
             "declaredType": "Future<dynamic>"
-          },
-          {
-            "name": "target",
-            "type": "[exact=_Future]",
-            "declaredType": "_Future<dynamic>"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_Future__chainForeignFuture: function(source, target) {\n  var e, s, exception;\n  target._state = 1;\n  try {\n    source.then$2$onError(new P._Future__chainForeignFuture_closure(target), new P._Future__chainForeignFuture_closure0(target));\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    P.scheduleMicrotask(new P._Future__chainForeignFuture_closure1(target, e, s));\n  }\n}\n",
-        "type": "void Function(Future<dynamic>,_Future<dynamic>)",
-        "measurements": null
+        "code": "_chainForeignFuture$1(source) {\n      var e, s, exception, _this = this;\n      _this._state ^= 2;\n      try {\n        source.then$1$2$onError(new A._Future__chainForeignFuture_closure(_this), new A._Future__chainForeignFuture_closure0(_this), type$.Null);\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        A.scheduleMicrotask(new A._Future__chainForeignFuture_closure1(_this, e, s));\n      }\n    }",
+        "type": "void Function(Future<dynamic>)"
       },
       "553278458": {
         "id": "function/553278458",
@@ -9306,72 +12323,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function()",
-        "measurements": null
-      },
-      "553851206": {
-        "id": "function/553851206",
-        "kind": "function",
-        "name": "functionTypeTest",
-        "size": 439,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "value",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "functionTypeRti",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "functionTypeTest: function(value, functionTypeRti) {\n  var functionTypeObject, t1;\n  if (value == null)\n    return false;\n  if (typeof value == \"function\")\n    return true;\n  functionTypeObject = H.extractFunctionTypeObjectFromInternal(J.getInterceptor(value));\n  if (functionTypeObject == null)\n    return false;\n  t1 = H.isFunctionSubtypeV1(functionTypeObject, functionTypeRti);\n  return t1;\n}\n",
-        "type": "dynamic Function(dynamic,dynamic)",
-        "measurements": null
-      },
-      "555987509": {
-        "id": "function/555987509",
-        "kind": "function",
-        "name": "getRuntimeTypeInfo",
-        "size": 111,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "target",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "getRuntimeTypeInfo: function(target) {\n  if (target == null)\n    return;\n  return target.$ti;\n}\n",
-        "type": "dynamic Function(Object)",
-        "measurements": null
+        "code": "",
+        "type": "String Function()"
       },
       "556268777": {
         "id": "function/556268777",
@@ -9390,19 +12343,18 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 5,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
-      "560797298": {
-        "id": "function/560797298",
+      "556772480": {
+        "id": "function/556772480",
         "kind": "function",
-        "name": "checkSubtype",
+        "name": "_isClosure",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -9416,35 +12368,75 @@
           {
             "name": "object",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          },
-          {
-            "name": "isField",
-            "type": "[null|subclass=Object]",
-            "declaredType": "String"
-          },
-          {
-            "name": "checks",
-            "type": "[null|subclass=Object]",
-            "declaredType": "List<dynamic>"
-          },
-          {
-            "name": "asField",
-            "type": "[null|subclass=Object]",
-            "declaredType": "String"
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 5,
-        "code": null,
-        "type": "bool Function(Object,String,List<dynamic>,String)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "559097830": {
+        "id": "function/559097830",
+        "kind": "function",
+        "name": "boolConversionCheck",
+        "size": 141,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "boolConversionCheck(value) {\n      if (value == null)\n        A.assertThrow(\"boolean expression must not be null\");\n      return value;\n    }",
+        "type": "bool Function(dynamic)"
+      },
+      "561625953": {
+        "id": "function/561625953",
+        "kind": "function",
+        "name": "_getCachedRuntimeType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_Type?",
+        "inferredReturnType": "[null|exact=_Type]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "_Type? Function(Rti)"
       },
       "564404904": {
         "id": "function/564404904",
         "kind": "function",
         "name": "hashCode",
-        "size": 399,
+        "size": 123,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/138211367",
         "children": [],
@@ -9459,15 +12451,47 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(_) {\n  var t1, receiverHashCode;\n  t1 = this._receiver;\n  if (t1 == null)\n    receiverHashCode = H.Primitives_objectHashCode(this._self);\n  else\n    receiverHashCode = typeof t1 !== \"object\" ? J.get$hashCode$(t1) : H.Primitives_objectHashCode(t1);\n  return (receiverHashCode ^ H.Primitives_objectHashCode(this._target)) >>> 0;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$hashCode(_) {\n      return (A.objectHashCode(this._receiver) ^ A.Primitives_objectHashCode(this.$_target)) >>> 0;\n    }",
+        "type": "int Function()"
+      },
+      "564449621": {
+        "id": "function/564449621",
+        "kind": "function",
+        "name": "_canonicalRecipeOfBinding",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "base",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti,Object?)"
       },
       "565013754": {
         "id": "function/565013754",
         "kind": "function",
         "name": "toString",
-        "size": 56,
+        "size": 42,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/351911148",
         "children": [],
@@ -9482,15 +12506,47 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"null\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"null\";\n    }",
+        "type": "String Function()"
+      },
+      "566090952": {
+        "id": "function/566090952",
+        "kind": "function",
+        "name": "charCodeAt",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "i",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "int Function(String,int)"
       },
       "569040700": {
         "id": "function/569040700",
         "kind": "function",
         "name": "call",
-        "size": 45,
+        "size": 61,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/566195572",
         "children": [],
@@ -9506,20 +12562,19 @@
           {
             "name": "_",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Null"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "call$1: function(_) {\n  return;\n}\n",
-        "type": "Null Function(Object)",
-        "measurements": null
+        "code": "call$1(_) {\n      type$.Null._as(_);\n      return null;\n    }",
+        "type": "Null Function(Null)"
       },
       "569040701": {
         "id": "function/569040701",
         "kind": "function",
         "name": "call",
-        "size": 142,
+        "size": 128,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/566195573",
         "children": [],
@@ -9540,15 +12595,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(error) {\n  this.failure.call$3(H.unwrapException(error), \"js-failure-wrapper\", H.getTraceFromException(error));\n}\n",
-        "type": "Null Function(dynamic)",
-        "measurements": null
+        "code": "call$1(error) {\n      this.failure.call$3(A.unwrapException(error), \"js-failure-wrapper\", A.getTraceFromException(error));\n    }",
+        "type": "Null Function(dynamic)"
       },
       "569040702": {
         "id": "function/569040702",
         "kind": "function",
         "name": "call",
-        "size": 602,
+        "size": 571,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/566195574",
         "children": [],
@@ -9569,15 +12623,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function($event) {\n  var code, error, stackTrace, t1, $status, exception;\n  t1 = this.xhr;\n  $status = t1.status;\n  if ($status !== 200)\n    this.failure.call$3(\"Request status: \" + $status, \"worker xhr\", null);\n  code = t1.responseText;\n  try {\n    new Function(code)();\n    this.success.call$0();\n  } catch (exception) {\n    error = H.unwrapException(exception);\n    stackTrace = H.getTraceFromException(exception);\n    this.failure.call$3(error, \"evaluating the code in worker xhr\", stackTrace);\n  }\n}\n",
-        "type": "Null Function(dynamic)",
-        "measurements": null
+        "code": "call$1($event) {\n      var code, error, stackTrace, exception, _this = this,\n        t1 = _this.xhr,\n        $status = t1.status;\n      if ($status !== 200)\n        _this.failure.call$3(\"Request status: \" + $status, \"worker xhr\", null);\n      code = t1.responseText;\n      try {\n        new Function(code)();\n        _this.success.call$0();\n      } catch (exception) {\n        error = A.unwrapException(exception);\n        stackTrace = A.getTraceFromException(exception);\n        _this.failure.call$3(error, \"evaluating the code in worker xhr\", stackTrace);\n      }\n    }",
+        "type": "Null Function(dynamic)"
       },
       "569040703": {
         "id": "function/569040703",
         "kind": "function",
         "name": "call",
-        "size": 88,
+        "size": 74,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/566195575",
         "children": [],
@@ -9598,15 +12651,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(e) {\n  this.failure.call$3(e, \"xhr error handler\", null);\n}\n",
-        "type": "Null Function(dynamic)",
-        "measurements": null
+        "code": "call$1(e) {\n      this.failure.call$3(e, \"xhr error handler\", null);\n    }",
+        "type": "Null Function(dynamic)"
       },
       "569040704": {
         "id": "function/569040704",
         "kind": "function",
         "name": "call",
-        "size": 88,
+        "size": 74,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/566195576",
         "children": [],
@@ -9627,9 +12679,8 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(e) {\n  this.failure.call$3(e, \"xhr abort handler\", null);\n}\n",
-        "type": "Null Function(dynamic)",
-        "measurements": null
+        "code": "call$1(e) {\n      this.failure.call$3(e, \"xhr abort handler\", null);\n    }",
+        "type": "Null Function(dynamic)"
       },
       "573775196": {
         "id": "function/573775196",
@@ -9645,20 +12696,19 @@
           "factory": true,
           "external": false
         },
-        "returnType": "JsLinkedHashMap<JsLinkedHashMap.K,JsLinkedHashMap.V>",
+        "returnType": "JsLinkedHashMap<#A/*free*/,#B/*free*/>",
         "inferredReturnType": "[subclass=JsLinkedHashMap]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "JsLinkedHashMap<JsLinkedHashMap.K,JsLinkedHashMap.V> Function()",
-        "measurements": null
+        "code": "",
+        "type": "JsLinkedHashMap<#A,#B> Function<#A extends Object?,#B extends Object?>()"
       },
       "574550003": {
         "id": "function/574550003",
         "kind": "function",
         "name": "_completeError",
-        "size": 260,
+        "size": 269,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
@@ -9684,15 +12734,97 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_completeError$2: function(error, stackTrace) {\n  var listeners = this._removeListeners$0();\n  this._state = 8;\n  this._resultOrListeners = new P.AsyncError(error, stackTrace);\n  P._Future__propagateToListeners(this, listeners);\n}\n",
-        "type": "void Function(Object,[StackTrace])",
-        "measurements": null
+        "code": "_completeError$2(error, stackTrace) {\n      var listeners;\n      type$.StackTrace._as(stackTrace);\n      listeners = this._removeListeners$0();\n      this._setErrorObject$1(A.AsyncError$(error, stackTrace));\n      A._Future__propagateToListeners(this, listeners);\n    }",
+        "type": "void Function(Object,StackTrace)"
+      },
+      "575664914": {
+        "id": "function/575664914",
+        "kind": "function",
+        "name": "_rtiToString",
+        "size": 1597,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "genericContext",
+            "type": "Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
+            "declaredType": "List<String>?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rtiToString(rti, genericContext) {\n      var s, questionArgument, argumentKind, $name, $arguments, t1, t2,\n        kind = rti._kind;\n      if (kind === 5)\n        return \"erased\";\n      if (kind === 2)\n        return \"dynamic\";\n      if (kind === 3)\n        return \"void\";\n      if (kind === 1)\n        return \"Never\";\n      if (kind === 4)\n        return \"any\";\n      if (kind === 6) {\n        s = A._rtiToString(rti._primary, genericContext);\n        return s;\n      }\n      if (kind === 7) {\n        questionArgument = rti._primary;\n        s = A._rtiToString(questionArgument, genericContext);\n        argumentKind = questionArgument._kind;\n        return J.$add$ns(argumentKind === 11 || argumentKind === 12 ? B.JSString_methods.$add(\"(\", s) + \")\" : s, \"?\");\n      }\n      if (kind === 8)\n        return \"FutureOr<\" + A.S(A._rtiToString(rti._primary, genericContext)) + \">\";\n      if (kind === 9) {\n        $name = A._unminifyOrTag(rti._primary);\n        $arguments = rti._rest;\n        return $arguments.length > 0 ? $name + (\"<\" + A._rtiArrayToString($arguments, genericContext) + \">\") : $name;\n      }\n      if (kind === 11)\n        return A._functionRtiToString(rti, genericContext, null);\n      if (kind === 12)\n        return A._functionRtiToString(rti._primary, genericContext, rti._rest);\n      if (kind === 13) {\n        genericContext.toString;\n        t1 = rti._primary;\n        t2 = genericContext.length;\n        t1 = t2 - 1 - t1;\n        if (!(t1 >= 0 && t1 < t2))\n          return A.ioore(genericContext, t1);\n        return genericContext[t1];\n      }\n      return \"?\";\n    }",
+        "type": "String Function(Rti,List<String>?)"
+      },
+      "577244034": {
+        "id": "function/577244034",
+        "kind": "function",
+        "name": "call",
+        "size": 67,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/235259528",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0() {\n      this.$this._completeWithValue$1(this.value);\n    }",
+        "type": "void Function()"
+      },
+      "578373084": {
+        "id": "function/578373084",
+        "kind": "function",
+        "name": "_asDoubleQ",
+        "size": 216,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "double?",
+        "inferredReturnType": "[null|subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asDoubleQ(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double?\"));\n    }",
+        "type": "double? Function(dynamic)"
       },
       "580865640": {
         "id": "function/580865640",
         "kind": "function",
         "name": "iterableToFullString",
-        "size": 712,
+        "size": 700,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/812154630",
         "children": [],
@@ -9723,17 +12855,16 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "IterableBase_iterableToFullString: function(iterable, leftDelimiter, rightDelimiter) {\n  var buffer, t1, t2;\n  if (P._isToStringVisiting(iterable))\n    return leftDelimiter + \"...\" + rightDelimiter;\n  buffer = new P.StringBuffer(leftDelimiter);\n  t1 = $.$get$_toStringVisiting();\n  t1.push(iterable);\n  try {\n    t2 = buffer;\n    t2._contents = P.StringBuffer__writeAll(t2.get$_contents(), iterable, \", \");\n  } finally {\n    if (0 >= t1.length)\n      return H.ioore(t1, -1);\n    t1.pop();\n  }\n  t1 = buffer;\n  t1._contents = t1.get$_contents() + rightDelimiter;\n  t1 = buffer.get$_contents();\n  return t1.charCodeAt(0) == 0 ? t1 : t1;\n}\n",
-        "type": "String Function(Iterable<dynamic>,[String,String])",
-        "measurements": null
+        "code": "IterableBase_iterableToFullString(iterable, leftDelimiter, rightDelimiter) {\n      var buffer, t1;\n      if (A._isToStringVisiting(iterable))\n        return leftDelimiter + \"...\" + rightDelimiter;\n      buffer = new A.StringBuffer(leftDelimiter);\n      B.JSArray_methods.add$1($._toStringVisiting, iterable);\n      try {\n        t1 = buffer;\n        t1._contents = A.StringBuffer__writeAll(t1._contents, iterable, \", \");\n      } finally {\n        if (0 >= $._toStringVisiting.length)\n          return A.ioore($._toStringVisiting, -1);\n        $._toStringVisiting.pop();\n      }\n      buffer._contents += rightDelimiter;\n      t1 = buffer._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
+        "type": "String Function(Iterable<dynamic>,[String,String])"
       },
-      "581270226": {
-        "id": "function/581270226",
+      "583427045": {
+        "id": "function/583427045",
         "kind": "function",
-        "name": "ListIterator",
-        "size": 0,
+        "name": "_asBool",
+        "size": 199,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/365655194",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -9741,26 +12872,25 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
-        "inferredReturnType": "[exact=ListIterator]",
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
         "parameters": [
           {
-            "name": "iterable",
-            "type": "[exact=SubListIterable]",
-            "declaredType": "Iterable<ListIterator.E>"
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(Iterable<ListIterator.E>)",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "_asBool(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool\"));\n    }",
+        "type": "bool Function(Object?)"
       },
       "585544091": {
         "id": "function/585544091",
         "kind": "function",
         "name": "_newLinkedCell",
-        "size": 620,
+        "size": 550,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -9784,17 +12914,16 @@
             "declaredType": "JsLinkedHashMap.V"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
-        "code": "__js_helper$_newLinkedCell$2: function(key, value) {\n  var cell, last;\n  cell = new H.LinkedHashMapCell(key, value, null, null);\n  if (this.__js_helper$_first == null) {\n    this.__js_helper$_last = cell;\n    this.__js_helper$_first = cell;\n  } else {\n    last = this.__js_helper$_last;\n    cell.__js_helper$_previous = last;\n    last.__js_helper$_next = cell;\n    this.__js_helper$_last = cell;\n  }\n  ++this.__js_helper$_length;\n  this.__js_helper$_modifications = this.__js_helper$_modifications + 1 & 67108863;\n  return cell;\n}\n",
-        "type": "LinkedHashMapCell Function(JsLinkedHashMap.K,JsLinkedHashMap.V)",
-        "measurements": null
+        "code": "__js_helper$_newLinkedCell$2(key, value) {\n      var _this = this,\n        t1 = A._instanceType(_this),\n        cell = new A.LinkedHashMapCell(t1._precomputed1._as(key), t1._rest[1]._as(value));\n      if (_this.__js_helper$_first == null)\n        _this.__js_helper$_first = _this.__js_helper$_last = cell;\n      else\n        _this.__js_helper$_last = _this.__js_helper$_last.__js_helper$_next = cell;\n      ++_this.__js_helper$_length;\n      _this.__js_helper$_modifications = _this.__js_helper$_modifications + 1 & 67108863;\n      return cell;\n    }",
+        "type": "LinkedHashMapCell Function(Object?,Object?)"
       },
       "586712659": {
         "id": "function/586712659",
         "kind": "function",
         "name": "call",
-        "size": 929,
+        "size": 911,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/830531955",
         "children": [],
@@ -9809,9 +12938,247 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  var asyncError, e, s, t1, t2, exception, t3, t4;\n  try {\n    asyncError = this._box_1.source._resultOrListeners;\n    t1 = this.listener;\n    if (t1.matchesErrorTest$1(asyncError) === true && t1.errorCallback != null) {\n      t2 = this._box_0;\n      t2.listenerValueOrError = t1.handleError$1(asyncError);\n      t2.listenerHasError = false;\n    }\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    t1 = this._box_1;\n    t2 = t1.source._resultOrListeners.get$error();\n    t3 = e;\n    t4 = this._box_0;\n    if (t2 == null ? t3 == null : t2 === t3)\n      t4.listenerValueOrError = t1.source._resultOrListeners;\n    else\n      t4.listenerValueOrError = new P.AsyncError(e, s);\n    t4.listenerHasError = true;\n  }\n}\n",
-        "type": "void Function()",
-        "measurements": null
+        "code": "call$0() {\n      var asyncError, e, s, t1, exception, t2, t3, t4, _this = this;\n      try {\n        asyncError = type$.AsyncError._as(_this._box_1.source._resultOrListeners);\n        t1 = _this._box_0;\n        if (A.boolConversionCheck(t1.listener.matchesErrorTest$1(asyncError)) && t1.listener.errorCallback != null) {\n          t1.listenerValueOrError = t1.listener.handleError$1(asyncError);\n          t1.listenerHasError = false;\n        }\n      } catch (exception) {\n        e = A.unwrapException(exception);\n        s = A.getTraceFromException(exception);\n        t1 = type$.AsyncError._as(_this._box_1.source._resultOrListeners);\n        t2 = t1.error;\n        t3 = e;\n        t4 = _this._box_0;\n        if (t2 == null ? t3 == null : t2 === t3)\n          t4.listenerValueOrError = t1;\n        else\n          t4.listenerValueOrError = A.AsyncError$(e, s);\n        t4.listenerHasError = true;\n      }\n    }",
+        "type": "void Function()"
+      },
+      "587828093": {
+        "id": "function/587828093",
+        "kind": "function",
+        "name": "_setCachedRuntimeType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "type",
+            "type": "[exact=_Type]",
+            "declaredType": "_Type"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "void Function(Rti,_Type)"
+      },
+      "589675001": {
+        "id": "function/589675001",
+        "kind": "function",
+        "name": "isNullType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "589677414": {
+        "id": "function/589677414",
+        "kind": "function",
+        "name": "interceptorOf",
+        "size": 78,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[null|exact=BoundClosure]",
+            "declaredType": "BoundClosure"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "BoundClosure_interceptorOf(closure) {\n      return closure._interceptor;\n    }",
+        "type": "dynamic Function(BoundClosure)"
+      },
+      "592658352": {
+        "id": "function/592658352",
+        "kind": "function",
+        "name": "addErasedTypes",
+        "size": 105,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "types",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_addErasedTypes(universe, types) {\n      return A._Utils_objectAssign(universe.eT, types);\n    }",
+        "type": "void Function(Object?,Object?)"
+      },
+      "593090281": {
+        "id": "function/593090281",
+        "kind": "function",
+        "name": "defaultStackTrace",
+        "size": 251,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/577121337",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StackTrace",
+        "inferredReturnType": "[subtype=StackTrace]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "AsyncError_defaultStackTrace(error) {\n      var stackTrace;\n      if (type$.Error._is(error)) {\n        stackTrace = error.get$stackTrace();\n        if (stackTrace != null)\n          return stackTrace;\n      }\n      return B.C__StringStackTrace;\n    }",
+        "type": "StackTrace Function(Object)"
+      },
+      "598215859": {
+        "id": "function/598215859",
+        "kind": "function",
+        "name": "_generalIsTestImplementation",
+        "size": 241,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_generalIsTestImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return A._nullIs(testRti);\n      return A._isSubtype(init.typeUniverse, A.instanceOrFunctionType(object, testRti), null, testRti, null);\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "598784217": {
+        "id": "function/598784217",
+        "kind": "function",
+        "name": "_setPrecomputed1",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "precomputed",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "599340356": {
+        "id": "function/599340356",
+        "kind": "function",
+        "name": "_objectTypeNameNewRti",
+        "size": 903,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Primitives__objectTypeNameNewRti(object) {\n      var dispatchName, t1, $constructor, constructorName;\n      if (object instanceof A.Object)\n        return A._rtiToString(A.instanceType(object), null);\n      if (J.getInterceptor$(object) === B.Interceptor_methods || type$.UnknownJavaScriptObject._is(object)) {\n        dispatchName = B.C_JS_CONST(object);\n        t1 = dispatchName !== \"Object\" && dispatchName !== \"\";\n        if (t1)\n          return dispatchName;\n        $constructor = object.constructor;\n        if (typeof $constructor == \"function\") {\n          constructorName = $constructor.name;\n          if (typeof constructorName == \"string\")\n            t1 = constructorName !== \"Object\" && constructorName !== \"\";\n          else\n            t1 = false;\n          if (t1)\n            return constructorName;\n        }\n      }\n      return A._rtiToString(A.instanceType(object), null);\n    }",
+        "type": "String Function(Object)"
       },
       "599927967": {
         "id": "function/599927967",
@@ -9830,17 +13197,16 @@
         "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads static; writes field)",
+        "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function()",
-        "measurements": null
+        "code": "",
+        "type": "void Function()"
       },
       "601638462": {
         "id": "function/601638462",
         "kind": "function",
         "name": "call",
-        "size": 557,
+        "size": 581,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/21475",
         "children": [],
@@ -9866,20 +13232,19 @@
           {
             "name": "stackTrace",
             "type": "[null|subclass=Object]",
-            "declaredType": "StackTrace"
+            "declaredType": "StackTrace?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$3: function(error, context, stackTrace) {\n  var t1, t2;\n  t1 = $.$get$_eventLog();\n  t2 = this.hunkName;\n  t1.push(\" - download failed: \" + t2 + \" (context: \" + context + \")\");\n  $.$get$_loadingLibraries().$indexSet(0, t2, null);\n  if (stackTrace == null)\n    stackTrace = P.StackTrace_current();\n  this.completer.completeError$2(new P.DeferredLoadException(\"Loading \" + H.S(this._box_0.uri) + \" failed: \" + H.S(error) + \"\\nevent log:\\n\" + C.JSArray_methods.join$1(t1, \"\\n\") + \"\\n\"), stackTrace);\n}\n",
-        "type": "void Function(dynamic,String,StackTrace)",
-        "measurements": null
+        "code": "call$3(error, context, stackTrace) {\n      var t1;\n      type$.nullable_StackTrace._as(stackTrace);\n      t1 = this.hunkName;\n      B.JSArray_methods.add$1($._eventLog, \" - download failed: \" + t1 + \" (context: \" + context + \")\");\n      $.$get$_loadingLibraries().$indexSet(0, t1, null);\n      if (stackTrace == null)\n        stackTrace = A.StackTrace_current();\n      this.completer.completeError$2(new A.DeferredLoadException(\"Loading \" + A.S(this._box_0.uri) + \" failed: \" + A.S(error) + \"\\nevent log:\\n\" + B.JSArray_methods.join$1($._eventLog, \"\\n\") + \"\\n\"), stackTrace);\n    }",
+        "type": "void Function(dynamic,String,StackTrace?)"
       },
       "603355140": {
         "id": "function/603355140",
         "kind": "function",
         "name": "call",
-        "size": 60,
+        "size": 46,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/817717319",
         "children": [],
@@ -9894,9 +13259,89 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  this.callback.call$0();\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "code": "call$0() {\n      this.callback.call$0();\n    }",
+        "type": "Null Function()"
+      },
+      "603464342": {
+        "id": "function/603464342",
+        "kind": "function",
+        "name": "_isInterfaceSubtype",
+        "size": 919,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "s",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "sEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "tEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isInterfaceSubtype(universe, s, sEnv, t, tEnv) {\n      var rule, recipes, $length, supertypeArgs, i, t1, t2,\n        sName = s._primary,\n        tName = t._primary;\n      for (; sName !== tName;) {\n        rule = universe.tR[sName];\n        if (rule == null)\n          return false;\n        if (typeof rule == \"string\") {\n          sName = rule;\n          continue;\n        }\n        recipes = rule[tName];\n        if (recipes == null)\n          return false;\n        $length = recipes.length;\n        supertypeArgs = $length > 0 ? new Array($length) : init.typeUniverse.sEA;\n        for (i = 0; i < $length; ++i)\n          supertypeArgs[i] = A._Universe_evalInEnvironment(universe, s, recipes[i]);\n        return A._areArgumentsSubtypes(universe, supertypeArgs, null, sEnv, t._rest, tEnv);\n      }\n      t1 = s._rest;\n      t2 = t._rest;\n      return A._areArgumentsSubtypes(universe, t1, null, sEnv, t2, tEnv);\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+      },
+      "603807818": {
+        "id": "function/603807818",
+        "kind": "function",
+        "name": "_rtiBind",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "types",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Rti,Rti)"
       },
       "606513838": {
         "id": "function/606513838",
@@ -9923,15 +13368,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function(String)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(String)"
       },
       "606572177": {
         "id": "function/606572177",
         "kind": "function",
         "name": "ArgumentError.value",
-        "size": 131,
+        "size": 113,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
@@ -9952,7 +13396,7 @@
           {
             "name": "name",
             "type": "[null|exact=JSString]",
-            "declaredType": "String"
+            "declaredType": "String?"
           },
           {
             "name": "message",
@@ -9962,17 +13406,16 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": "ArgumentError$value: function(value, $name, message) {\n  return new P.ArgumentError(true, value, $name, message);\n}\n",
-        "type": "dynamic Function(dynamic,[String,dynamic])",
-        "measurements": null
+        "code": "ArgumentError$value(value, $name, message) {\n      return new A.ArgumentError(true, value, $name, message);\n    }",
+        "type": "dynamic Function(dynamic,[String?,dynamic])"
       },
-      "607704865": {
-        "id": "function/607704865",
+      "608115318": {
+        "id": "function/608115318",
         "kind": "function",
-        "name": "substitute",
-        "size": 479,
+        "name": "toString",
+        "size": 128,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/383904536",
         "children": [],
         "modifiers": {
           "static": false,
@@ -9980,31 +13423,19 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "substitution",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "arguments",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "substitute: function(substitution, $arguments) {\n  if (substitution == null)\n    return $arguments;\n  substitution = substitution.apply(null, $arguments);\n  if (substitution == null)\n    return;\n  if (typeof substitution === \"object\" && substitution !== null && substitution.constructor === Array)\n    return substitution;\n  if (typeof substitution == \"function\")\n    return substitution.apply(null, $arguments);\n  return $arguments;\n}\n",
-        "type": "dynamic Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"Throw of null ('\" + (this._irritant === null ? \"null\" : \"undefined\") + \"' from JavaScript)\";\n    }",
+        "type": "String Function()"
       },
       "608925525": {
         "id": "function/608925525",
         "kind": "function",
         "name": "_scheduleImmediateWithTimer",
-        "size": 175,
+        "size": 243,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/611525899",
         "children": [],
@@ -10025,15 +13456,47 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_AsyncRun__scheduleImmediateWithTimer: [function(callback) {\n  P._TimerImpl$(0, callback);\n}, \"call$1\", \"async__AsyncRun__scheduleImmediateWithTimer$closure\", 4, 0, 3]\n",
-        "type": "void Function(void Function())",
-        "measurements": null
+        "code": "_AsyncRun__scheduleImmediateWithTimer(callback) {\n      type$.void_Function._as(callback);\n      A._TimerImpl$(0, callback);\n    }\n_static_1(A, \"async__AsyncRun__scheduleImmediateWithTimer$closure\", \"_AsyncRun__scheduleImmediateWithTimer\", 2);\n",
+        "type": "void Function(void Function())"
+      },
+      "609214736": {
+        "id": "function/609214736",
+        "kind": "function",
+        "name": "handleNamedGroup",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
       },
       "611761598": {
         "id": "function/611761598",
         "kind": "function",
         "name": "extractPattern",
-        "size": 1056,
+        "size": 1022,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
@@ -10054,15 +13517,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "TypeErrorDecoder_extractPattern: function(message) {\n  var match, $arguments, argumentsExpr, expr, method, receiver;\n  message = message.replace(String({}), '$receiver$').replace(/[[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\");\n  match = message.match(/\\\\\\$[a-zA-Z]+\\\\\\$/g);\n  if (match == null)\n    match = [];\n  $arguments = match.indexOf(\"\\\\$arguments\\\\$\");\n  argumentsExpr = match.indexOf(\"\\\\$argumentsExpr\\\\$\");\n  expr = match.indexOf(\"\\\\$expr\\\\$\");\n  method = match.indexOf(\"\\\\$method\\\\$\");\n  receiver = match.indexOf(\"\\\\$receiver\\\\$\");\n  return new H.TypeErrorDecoder(message.replace(new RegExp('\\\\\\\\\\\\$arguments\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\\\\\\\$argumentsExpr\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\\\\\\\$expr\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\\\\\\\$method\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\\\\\\\$receiver\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)'), $arguments, argumentsExpr, expr, method, receiver);\n}\n",
-        "type": "dynamic Function(String)",
-        "measurements": null
+        "code": "TypeErrorDecoder_extractPattern(message) {\n      var match, $arguments, argumentsExpr, expr, method, receiver;\n      message = A.quoteStringForRegExp(message.replace(String({}), \"$receiver$\"));\n      match = message.match(/\\\\\\$[a-zA-Z]+\\\\\\$/g);\n      if (match == null)\n        match = A._setArrayType([], type$.JSArray_String);\n      $arguments = match.indexOf(\"\\\\$arguments\\\\$\");\n      argumentsExpr = match.indexOf(\"\\\\$argumentsExpr\\\\$\");\n      expr = match.indexOf(\"\\\\$expr\\\\$\");\n      method = match.indexOf(\"\\\\$method\\\\$\");\n      receiver = match.indexOf(\"\\\\$receiver\\\\$\");\n      return new A.TypeErrorDecoder(message.replace(new RegExp(\"\\\\\\\\\\\\$arguments\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\").replace(new RegExp(\"\\\\\\\\\\\\$argumentsExpr\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\").replace(new RegExp(\"\\\\\\\\\\\\$expr\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\").replace(new RegExp(\"\\\\\\\\\\\\$method\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\").replace(new RegExp(\"\\\\\\\\\\\\$receiver\\\\\\\\\\\\$\", \"g\"), \"((?:x|[^x])*)\"), $arguments, argumentsExpr, expr, method, receiver);\n    }",
+        "type": "dynamic Function(String)"
       },
       "613119304": {
         "id": "function/613119304",
         "kind": "function",
         "name": "toString",
-        "size": 65,
+        "size": 51,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/577121337",
         "children": [],
@@ -10077,9 +13539,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return H.S(this.error);\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return A.S(this.error);\n    }",
+        "type": "String Function()"
       },
       "613322203": {
         "id": "function/613322203",
@@ -10101,7 +13562,7 @@
           {
             "name": "error",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           },
           {
             "name": "stackTrace",
@@ -10111,9 +13572,46 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 3,
-        "code": null,
-        "type": "void Function(dynamic,StackTrace)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(Object,StackTrace)"
+      },
+      "614790632": {
+        "id": "function/614790632",
+        "kind": "function",
+        "name": "isSubtype",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "s",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(Object?,Rti,Rti)"
       },
       "616072379": {
         "id": "function/616072379",
@@ -10132,22 +13630,52 @@
         "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function()",
-        "measurements": null
+        "code": "",
+        "type": "void Function()"
+      },
+      "616327902": {
+        "id": "function/616327902",
+        "kind": "function",
+        "name": "_getQuestionFromStar",
+        "size": 212,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Rti__getQuestionFromStar(universe, rti) {\n      var question = rti._precomputed1;\n      return question == null ? rti._precomputed1 = A._Universe__lookupQuestionRti(universe, rti._primary, true) : question;\n    }",
+        "type": "Rti Function(Object?,Rti)"
       },
       "618126497": {
         "id": "function/618126497",
         "kind": "function",
         "name": "complete",
-        "size": 595,
+        "size": 395,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/850763763",
-        "children": [
-          "closure/561897310"
-        ],
+        "children": [],
         "modifiers": {
           "static": false,
           "const": false,
@@ -10160,20 +13688,47 @@
           {
             "name": "value",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "FutureOr<_AsyncAwaitCompleter.T>?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "complete$1: function(value) {\n  var t1;\n  if (this.isSync)\n    this._completer.complete$1(value);\n  else {\n    t1 = H.checkSubtypeV1(value, \"$isFuture\", this.$ti, \"$asFuture\");\n    if (t1) {\n      t1 = this._completer;\n      value.then$2$onError(t1.get$complete(), t1.get$completeError());\n    } else\n      P.scheduleMicrotask(new P._AsyncAwaitCompleter_complete_closure(this, value));\n  }\n}\n",
-        "type": "void Function([dynamic])",
-        "measurements": null
+        "code": "complete$1(value) {\n      var t2, _this = this,\n        t1 = _this.$ti;\n      t1._eval$1(\"1/?\")._as(value);\n      if (!_this.isSync)\n        _this._future._asyncComplete$1(value);\n      else {\n        t2 = _this._future;\n        if (t1._eval$1(\"Future<1>\")._is(value))\n          t2._chainFuture$1(value);\n        else\n          t2._completeWithValue$1(t1._precomputed1._as(value));\n      }\n    }",
+        "type": "void Function([Object?])"
+      },
+      "619610668": {
+        "id": "function/619610668",
+        "kind": "function",
+        "name": "_lookupNeverRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?)"
       },
       "620005669": {
         "id": "function/620005669",
         "kind": "function",
         "name": "_errorExplanation",
-        "size": 282,
+        "size": 387,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/175705485",
         "children": [],
@@ -10188,9 +13743,168 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "get$_errorExplanation: function() {\n  if (J.$lt$n(this.invalidValue, 0))\n    return \": index must not be negative\";\n  var t1 = this.length;\n  if (t1 === 0)\n    return \": no indices are valid\";\n  return \": index should be less than \" + t1;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "get$_errorExplanation() {\n      var t1,\n        invalidValue = A._asIntS(this.invalidValue);\n      if (typeof invalidValue !== \"number\")\n        return invalidValue.$lt();\n      if (invalidValue < 0)\n        return \": index must not be negative\";\n      t1 = this.length;\n      if (t1 === 0)\n        return \": no indices are valid\";\n      return \": index should be less than \" + t1;\n    }",
+        "type": "String Function()"
+      },
+      "620456164": {
+        "id": "function/620456164",
+        "kind": "function",
+        "name": "_isSubtype",
+        "size": 3001,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "sEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "tEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isSubtype(universe, s, sEnv, t, tEnv) {\n      var t1, sKind, leftTypeVariable, tKind, sBounds, tBounds, sLength, i, sBound, tBound;\n      if (s === t)\n        return true;\n      if (!A.isStrongTopType(t))\n        if (!(t === type$.legacy_Object))\n          t1 = t === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      sKind = s._kind;\n      if (sKind === 4)\n        return true;\n      if (A.isStrongTopType(s))\n        return false;\n      if (s._kind !== 1)\n        t1 = s === type$.Null || s === type$.JSNull;\n      else\n        t1 = true;\n      if (t1)\n        return true;\n      leftTypeVariable = sKind === 13;\n      if (leftTypeVariable)\n        if (A._isSubtype(universe, sEnv[s._primary], sEnv, t, tEnv))\n          return true;\n      tKind = t._kind;\n      if (sKind === 6)\n        return A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n      if (tKind === 6) {\n        t1 = t._primary;\n        return A._isSubtype(universe, s, sEnv, t1, tEnv);\n      }\n      if (sKind === 8) {\n        if (!A._isSubtype(universe, s._primary, sEnv, t, tEnv))\n          return false;\n        return A._isSubtype(universe, A.Rti__getFutureFromFutureOr(universe, s), sEnv, t, tEnv);\n      }\n      if (sKind === 7) {\n        t1 = A._isSubtype(universe, s._primary, sEnv, t, tEnv);\n        return t1;\n      }\n      if (tKind === 8) {\n        if (A._isSubtype(universe, s, sEnv, t._primary, tEnv))\n          return true;\n        return A._isSubtype(universe, s, sEnv, A.Rti__getFutureFromFutureOr(universe, t), tEnv);\n      }\n      if (tKind === 7) {\n        t1 = A._isSubtype(universe, s, sEnv, t._primary, tEnv);\n        return t1;\n      }\n      if (leftTypeVariable)\n        return false;\n      t1 = sKind !== 11;\n      if ((!t1 || sKind === 12) && t === type$.Function)\n        return true;\n      if (tKind === 12) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (sKind !== 12)\n          return false;\n        sBounds = s._rest;\n        tBounds = t._rest;\n        sLength = sBounds.length;\n        if (sLength !== tBounds.length)\n          return false;\n        sEnv = sEnv == null ? sBounds : sBounds.concat(sEnv);\n        tEnv = tEnv == null ? tBounds : tBounds.concat(tEnv);\n        for (i = 0; i < sLength; ++i) {\n          sBound = sBounds[i];\n          tBound = tBounds[i];\n          if (!A._isSubtype(universe, sBound, sEnv, tBound, tEnv) || !A._isSubtype(universe, tBound, tEnv, sBound, sEnv))\n            return false;\n        }\n        return A._isFunctionSubtype(universe, s._primary, sEnv, t._primary, tEnv);\n      }\n      if (tKind === 11) {\n        if (s === type$.JavaScriptFunction)\n          return true;\n        if (t1)\n          return false;\n        return A._isFunctionSubtype(universe, s, sEnv, t, tEnv);\n      }\n      if (sKind === 9) {\n        if (tKind !== 9)\n          return false;\n        return A._isInterfaceSubtype(universe, s, sEnv, t, tEnv);\n      }\n      return false;\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
+      },
+      "629344964": {
+        "id": "function/629344964",
+        "kind": "function",
+        "name": "isNum",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "630788869": {
+        "id": "function/630788869",
+        "kind": "function",
+        "name": "isMutable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "a",
+            "type": "[subclass=JSArray]",
+            "declaredType": "JSArray<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(JSArray<dynamic>)"
+      },
+      "631550768": {
+        "id": "function/631550768",
+        "kind": "function",
+        "name": "_asBoolQ",
+        "size": 250,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool?",
+        "inferredReturnType": "[null|exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asBoolQ(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool?\"));\n    }",
+        "type": "bool? Function(dynamic)"
+      },
+      "631685979": {
+        "id": "function/631685979",
+        "kind": "function",
+        "name": "_canonicalRecipeJoin",
+        "size": 240,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_Universe__canonicalRecipeJoin($arguments) {\n      var s, sep, i,\n        $length = $arguments.length;\n      for (s = \"\", sep = \"\", i = 0; i < $length; ++i, sep = \",\")\n        s += sep + $arguments[i]._canonicalRecipe;\n      return s;\n    }",
+        "type": "String Function(Object?)"
       },
       "632290992": {
         "id": "function/632290992",
@@ -10211,46 +13925,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
       },
-      "633677177": {
-        "id": "function/633677177",
+      "632397862": {
+        "id": "function/632397862",
         "kind": "function",
-        "name": "bindCallback",
-        "size": 278,
+        "name": "_asDouble",
+        "size": 165,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/566341130",
-        "children": [
-          "closure/310226650"
-        ],
+        "parent": "library/579882441",
+        "children": [],
         "modifiers": {
           "static": false,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "bindCallback.R Function()",
-        "inferredReturnType": "[subclass=Closure]",
+        "returnType": "double",
+        "inferredReturnType": "[subclass=JSNumber]",
         "parameters": [
           {
-            "name": "f",
-            "type": "[subclass=Closure]",
-            "declaredType": "bindCallback.R Function()"
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "bindCallback$1: function(f) {\n  return new P._RootZone_bindCallback_closure(this, f);\n}\n",
-        "type": "bindCallback.R Function() Function(bindCallback.R Function())",
-        "measurements": null
+        "code": "_asDouble(object) {\n      if (typeof object == \"number\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"double\"));\n    }",
+        "type": "double Function(Object?)"
       },
       "635153575": {
         "id": "function/635153575",
         "kind": "function",
         "name": "_asyncStartSync",
-        "size": 170,
+        "size": 147,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -10276,15 +13986,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_asyncStartSync: function(bodyFunction, completer) {\n  bodyFunction.call$2(0, null);\n  completer.set$isSync(true);\n  return completer._completer.future;\n}\n",
-        "type": "dynamic Function(void Function(int,dynamic),_AsyncAwaitCompleter<dynamic>)",
-        "measurements": null
+        "code": "_asyncStartSync(bodyFunction, completer) {\n      bodyFunction.call$2(0, null);\n      completer.isSync = true;\n      return completer._future;\n    }",
+        "type": "dynamic Function(void Function(int,dynamic),_AsyncAwaitCompleter<dynamic>)"
       },
       "636061569": {
         "id": "function/636061569",
         "kind": "function",
         "name": "toString",
-        "size": 430,
+        "size": 443,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/17649844",
         "children": [],
@@ -10299,9 +14008,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  var t1, t2;\n  t1 = this._method;\n  if (t1 == null)\n    return \"NoSuchMethodError: \" + H.S(this._message);\n  t2 = this._receiver;\n  if (t2 == null)\n    return \"NoSuchMethodError: method not found: '\" + t1 + \"' (\" + H.S(this._message) + \")\";\n  return \"NoSuchMethodError: method not found: '\" + t1 + \"' on '\" + t2 + \"' (\" + H.S(this._message) + \")\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      var t2, _this = this,\n        _s38_ = \"NoSuchMethodError: method not found: '\",\n        t1 = _this._method;\n      if (t1 == null)\n        return \"NoSuchMethodError: \" + A.S(_this.__js_helper$_message);\n      t2 = _this._receiver;\n      if (t2 == null)\n        return _s38_ + t1 + \"' (\" + A.S(_this.__js_helper$_message) + \")\";\n      return _s38_ + t1 + \"' on '\" + t2 + \"' (\" + A.S(_this.__js_helper$_message) + \")\";\n    }",
+        "type": "String Function()"
       },
       "636443477": {
         "id": "function/636443477",
@@ -10317,12 +14025,12 @@
           "factory": false,
           "external": false
         },
-        "returnType": "List<LinkedHashMapCell>",
-        "inferredReturnType": "[null|subclass=Object]",
+        "returnType": "List<LinkedHashMapCell>?",
+        "inferredReturnType": "[null|subclass=JSArray]",
         "parameters": [
           {
             "name": "table",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "dynamic"
           },
           {
@@ -10333,9 +14041,79 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "List<LinkedHashMapCell> Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "List<LinkedHashMapCell>? Function(dynamic,dynamic)"
+      },
+      "637526703": {
+        "id": "function/637526703",
+        "kind": "function",
+        "name": "_canonicalRecipeJoinNamed",
+        "size": 388,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "arguments",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_Universe__canonicalRecipeJoinNamed($arguments) {\n      var s, sep, i, t1, nameSep, s0,\n        $length = $arguments.length;\n      for (s = \"\", sep = \"\", i = 0; i < $length; i += 3, sep = \",\") {\n        t1 = $arguments[i];\n        nameSep = $arguments[i + 1] ? \"!\" : \":\";\n        s0 = $arguments[i + 2]._canonicalRecipe;\n        s += sep + t1 + nameSep + s0;\n      }\n      return s;\n    }",
+        "type": "String Function(Object?)"
+      },
+      "637790089": {
+        "id": "function/637790089",
+        "kind": "function",
+        "name": "_createQuestionRti",
+        "size": 1113,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__createQuestionRti(universe, baseType, key, normalize) {\n      var baseKind, t1, starArgument, rti;\n      if (normalize) {\n        baseKind = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.Null || baseType === type$.JSNull))\n            if (baseKind !== 7)\n              t1 = baseKind === 8 && A.isNullable(baseType._primary);\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n        if (t1)\n          return baseType;\n        else if (baseKind === 1 || baseType === type$.legacy_Never)\n          return type$.Null;\n        else if (baseKind === 6) {\n          starArgument = baseType._primary;\n          if (starArgument._kind === 8 && A.isNullable(starArgument._primary))\n            return starArgument;\n          else\n            return A.Rti__getQuestionFromStar(universe, baseType);\n        }\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 7;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,String,bool)"
       },
       "638664464": {
         "id": "function/638664464",
@@ -10372,9 +14150,36 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic,dynamic,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic,dynamic,dynamic)"
+      },
+      "638672010": {
+        "id": "function/638672010",
+        "kind": "function",
+        "name": "isNullableObjectType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(Rti)"
       },
       "638807044": {
         "id": "function/638807044",
@@ -10399,19 +14204,18 @@
             "declaredType": "_Future<dynamic>"
           }
         ],
-        "sideEffects": "SideEffects(reads static; writes field)",
+        "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function(_Future<dynamic>)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(_Future<dynamic>)"
       },
-      "639806883": {
-        "id": "function/639806883",
+      "640394917": {
+        "id": "function/640394917",
         "kind": "function",
-        "name": "getArguments",
-        "size": 0,
+        "name": "_generalNullableIsTestImplementation",
+        "size": 139,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -10419,20 +14223,19 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
         "parameters": [
           {
-            "name": "type",
+            "name": "object",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "_generalNullableIsTestImplementation(object) {\n      if (object == null)\n        return true;\n      return this._primary._is(object);\n    }",
+        "type": "bool Function(Object?)"
       },
       "640815092": {
         "id": "function/640815092",
@@ -10453,9 +14256,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function()",
-        "measurements": null
+        "code": "",
+        "type": "String Function()"
       },
       "642221110": {
         "id": "function/642221110",
@@ -10476,15 +14278,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
       },
       "642229693": {
         "id": "function/642229693",
         "kind": "function",
         "name": "call",
-        "size": 143,
+        "size": 140,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/581471934",
         "children": [],
@@ -10499,9 +14300,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  $.$get$_eventLog().push(\" - download success: \" + this.hunkName);\n  this.completer.complete$1(null);\n}\n",
-        "type": "void Function()",
-        "measurements": null
+        "code": "call$0() {\n      B.JSArray_methods.add$1($._eventLog, \" - download success: \" + this.hunkName);\n      this.completer.complete$1(null);\n    }",
+        "type": "void Function()"
       },
       "644221207": {
         "id": "function/644221207",
@@ -10528,15 +14328,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 6,
-        "code": null,
-        "type": "void Function(void Function())",
-        "measurements": null
+        "code": "",
+        "type": "void Function(void Function())"
       },
       "649401243": {
         "id": "function/649401243",
         "kind": "function",
         "name": "_newLinkedCell",
-        "size": 495,
+        "size": 405,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -10555,11 +14354,10 @@
             "declaredType": "_LinkedHashSet.E"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
-        "code": "_newLinkedCell$1: function(element) {\n  var cell, last;\n  cell = new P._LinkedHashSetCell(element, null, null);\n  if (this._first == null) {\n    this._last = cell;\n    this._first = cell;\n  } else {\n    last = this._last;\n    cell._previous = last;\n    last._next = cell;\n    this._last = cell;\n  }\n  ++this._collection$_length;\n  this._modifications = this._modifications + 1 & 67108863;\n  return cell;\n}\n",
-        "type": "_LinkedHashSetCell Function(_LinkedHashSet.E)",
-        "measurements": null
+        "code": "_newLinkedCell$1(element) {\n      var _this = this,\n        cell = new A._LinkedHashSetCell(A._instanceType(_this)._precomputed1._as(element));\n      if (_this._first == null)\n        _this._first = _this._last = cell;\n      else\n        _this._last = _this._last._next = cell;\n      ++_this._collection$_length;\n      _this._modifications = _this._modifications + 1 & 1073741823;\n      return cell;\n    }",
+        "type": "_LinkedHashSetCell Function(Object?)"
       },
       "650942169": {
         "id": "function/650942169",
@@ -10575,18 +14373,18 @@
           "factory": false,
           "external": false
         },
-        "returnType": "_rootRunBinary.R",
+        "returnType": "#A/*free*/",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
             "name": "self",
             "type": "[null]",
-            "declaredType": "Zone"
+            "declaredType": "Zone?"
           },
           {
             "name": "parent",
             "type": "[null]",
-            "declaredType": "ZoneDelegate"
+            "declaredType": "ZoneDelegate?"
           },
           {
             "name": "zone",
@@ -10605,15 +14403,14 @@
           },
           {
             "name": "arg2",
-            "type": "[null|subclass=Object]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "_rootRunBinary.T2"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_rootRunBinary: function($self, $parent, zone, f, arg1, arg2) {\n  var old, t1;\n  t1 = $.Zone__current;\n  if (t1 === zone)\n    return f.call$2(arg1, arg2);\n  $.Zone__current = zone;\n  old = t1;\n  try {\n    t1 = f.call$2(arg1, arg2);\n    return t1;\n  } finally {\n    $.Zone__current = old;\n  }\n}\n",
-        "type": "_rootRunBinary.R Function(Zone,ZoneDelegate,Zone,_rootRunBinary.R Function(_rootRunBinary.T1,_rootRunBinary.T2),_rootRunBinary.T1,_rootRunBinary.T2)",
-        "measurements": null
+        "code": "_rootRunBinary($self, $parent, zone, f, arg1, arg2, $R, T1, T2) {\n      var old,\n        t1 = $.Zone__current;\n      if (t1 === zone)\n        return f.call$2(arg1, arg2);\n      $.Zone__current = zone;\n      old = t1;\n      try {\n        t1 = f.call$2(arg1, arg2);\n        return t1;\n      } finally {\n        $.Zone__current = old;\n      }\n    }",
+        "type": "#A Function<#A extends Object?,#B extends Object?,#C extends Object?>(Zone?,ZoneDelegate?,Zone,#A Function(#B,#C),#B,#C)"
       },
       "653699436": {
         "id": "function/653699436",
@@ -10629,7 +14426,7 @@
           "factory": true,
           "external": false
         },
-        "returnType": "JSArray<JSArray.E>",
+        "returnType": "JSArray<#A/*free*/>",
         "inferredReturnType": "[exact=JSExtendableArray]",
         "parameters": [
           {
@@ -10640,17 +14437,49 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "JSArray<JSArray.E> Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "JSArray<#A> Function<#A extends Object?>(dynamic)"
       },
-      "658082982": {
-        "id": "function/658082982",
+      "656417734": {
+        "id": "function/656417734",
         "kind": "function",
-        "name": "isFunctionSubtypeV1",
-        "size": 2387,
+        "name": "addRules",
+        "size": 99,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rules",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_addRules(universe, rules) {\n      return A._Utils_objectAssign(universe.tR, rules);\n    }",
+        "type": "void Function(Object?,Object?)"
+      },
+      "656826361": {
+        "id": "function/656826361",
+        "kind": "function",
+        "name": "toString",
+        "size": 38,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/786261494",
         "children": [],
         "modifiers": {
           "static": false,
@@ -10658,31 +14487,41 @@
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "s",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "t",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      return \"\";\n    }",
+        "type": "String Function()"
+      },
+      "658851039": {
+        "id": "function/658851039",
+        "kind": "function",
+        "name": "toString",
+        "size": 169,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/56472591",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "isFunctionSubtypeV1: function(s, t) {\n  var sReturnType, tReturnType, sParameterTypes, tParameterTypes, sOptionalParameterTypes, tOptionalParameterTypes, sParametersLen, tParametersLen, sOptionalParametersLen, tOptionalParametersLen, pos, t1, t2, tPos, sPos;\n  if (!('func' in s))\n    return false;\n  if (\"v\" in s) {\n    if (!(\"v\" in t) && \"ret\" in t)\n      return false;\n  } else if (!(\"v\" in t)) {\n    sReturnType = s.ret;\n    tReturnType = t.ret;\n    if (!(H.isSubtypeV1(sReturnType, tReturnType) || H.isSubtypeV1(tReturnType, sReturnType)))\n      return false;\n  }\n  sParameterTypes = s.args;\n  tParameterTypes = t.args;\n  sOptionalParameterTypes = s.opt;\n  tOptionalParameterTypes = t.opt;\n  sParametersLen = sParameterTypes != null ? sParameterTypes.length : 0;\n  tParametersLen = tParameterTypes != null ? tParameterTypes.length : 0;\n  sOptionalParametersLen = sOptionalParameterTypes != null ? sOptionalParameterTypes.length : 0;\n  tOptionalParametersLen = tOptionalParameterTypes != null ? tOptionalParameterTypes.length : 0;\n  if (sParametersLen > tParametersLen)\n    return false;\n  if (sParametersLen + sOptionalParametersLen < tParametersLen + tOptionalParametersLen)\n    return false;\n  if (sParametersLen === tParametersLen) {\n    if (!H.areAssignableV1(sParameterTypes, tParameterTypes, false))\n      return false;\n    if (!H.areAssignableV1(sOptionalParameterTypes, tOptionalParameterTypes, true))\n      return false;\n  } else {\n    for (pos = 0; pos < sParametersLen; ++pos) {\n      t1 = sParameterTypes[pos];\n      t2 = tParameterTypes[pos];\n      if (!(H.isSubtypeV1(t1, t2) || H.isSubtypeV1(t2, t1)))\n        return false;\n    }\n    for (tPos = pos, sPos = 0; tPos < tParametersLen; ++sPos, ++tPos) {\n      t1 = sOptionalParameterTypes[sPos];\n      t2 = tParameterTypes[tPos];\n      if (!(H.isSubtypeV1(t1, t2) || H.isSubtypeV1(t2, t1)))\n        return false;\n    }\n    for (tPos = 0; tPos < tOptionalParametersLen; ++sPos, ++tPos) {\n      t1 = sOptionalParameterTypes[sPos];\n      t2 = tOptionalParameterTypes[tPos];\n      if (!(H.isSubtypeV1(t1, t2) || H.isSubtypeV1(t2, t1)))\n        return false;\n    }\n  }\n  return H.areAssignableMapsV1(s.named, t.named);\n}\n",
-        "type": "bool Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "toString$0(_) {\n      var t1 = this.message;\n      if (t1 != null)\n        return \"Assertion failed: \" + A.Error_safeToString(t1);\n      return \"Assertion failed\";\n    }",
+        "type": "String Function()"
       },
       "658921946": {
         "id": "function/658921946",
         "kind": "function",
         "name": "_rootScheduleMicrotask",
-        "size": 239,
+        "size": 201,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -10698,12 +14537,12 @@
           {
             "name": "self",
             "type": "[null]",
-            "declaredType": "Zone"
+            "declaredType": "Zone?"
           },
           {
             "name": "parent",
             "type": "[null]",
-            "declaredType": "ZoneDelegate"
+            "declaredType": "ZoneDelegate?"
           },
           {
             "name": "zone",
@@ -10718,15 +14557,42 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_rootScheduleMicrotask: function($self, $parent, zone, f) {\n  var t1 = C.C__RootZone !== zone;\n  if (t1)\n    f = !(!t1 || false) ? zone.bindCallbackGuarded$1(f) : zone.bindCallback$1(f);\n  P._scheduleAsyncCallback(f);\n}\n",
-        "type": "void Function(Zone,ZoneDelegate,Zone,void Function())",
-        "measurements": null
+        "code": "_rootScheduleMicrotask($self, $parent, zone, f) {\n      type$.void_Function._as(f);\n      if (B.C__RootZone !== zone)\n        f = zone.bindCallbackGuarded$1(f);\n      A._scheduleAsyncCallback(f);\n    }",
+        "type": "void Function(Zone?,ZoneDelegate?,Zone,void Function())"
+      },
+      "659844135": {
+        "id": "function/659844135",
+        "kind": "function",
+        "name": "_computeFieldNamed",
+        "size": 491,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "fieldName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "BoundClosure__computeFieldNamed(fieldName) {\n      var t1, i, $name,\n        template = new A.BoundClosure(\"receiver\", \"interceptor\"),\n        names = J.JSArray_markFixedList(Object.getOwnPropertyNames(template), type$.nullable_Object);\n      for (t1 = names.length, i = 0; i < t1; ++i) {\n        $name = names[i];\n        if (template[$name] === fieldName)\n          return $name;\n      }\n      throw A.wrapException(A.ArgumentError$(\"Field name \" + fieldName + \" not found.\", null));\n    }",
+        "type": "String Function(String)"
       },
       "663282901": {
         "id": "function/663282901",
         "kind": "function",
         "name": "_wrapJsFunctionForAsync",
-        "size": 627,
+        "size": 828,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [
@@ -10749,20 +14615,17 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_wrapJsFunctionForAsync: function($function) {\n  var $protected = function(fn, ERROR) {\n    return function(errorCode, result) {\n      while (true)\n        try {\n          fn(errorCode, result);\n          break;\n        } catch (error) {\n          result = error;\n          errorCode = ERROR;\n        }\n    };\n  }($function, 1);\n  return $.Zone__current.registerBinaryCallback$1(new P._wrapJsFunctionForAsync_closure($protected));\n}\n",
-        "type": "void Function(int,dynamic) Function(dynamic)",
-        "measurements": null
+        "code": "_wrapJsFunctionForAsync($function) {\n      var $protected = function(fn, ERROR) {\n        return function(errorCode, result) {\n          while (true)\n            try {\n              fn(errorCode, result);\n              break;\n            } catch (error) {\n              result = error;\n              errorCode = ERROR;\n            }\n        };\n      }($function, 1);\n      return $.Zone__current.registerBinaryCallback$3$1(new A._wrapJsFunctionForAsync_closure($protected), type$.void, type$.int, type$.dynamic);\n    }",
+        "type": "void Function(int,dynamic) Function(dynamic)"
       },
       "664449932": {
         "id": "function/664449932",
         "kind": "function",
         "name": "_asyncComplete",
-        "size": 508,
+        "size": 266,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
-        "children": [
-          "closure/379635163"
-        ],
+        "children": [],
         "modifiers": {
           "static": false,
           "const": false,
@@ -10775,20 +14638,19 @@
           {
             "name": "value",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "FutureOr<_Future.T>"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_asyncComplete$1: function(value) {\n  var t1 = H.checkSubtypeV1(value, \"$isFuture\", this.$ti, \"$asFuture\");\n  if (t1) {\n    this._chainFuture$1(value);\n    return;\n  }\n  this._state = 1;\n  t1 = this._zone;\n  t1.toString;\n  P._rootScheduleMicrotask(null, null, t1, new P._Future__asyncComplete_closure(this, value));\n}\n",
-        "type": "void Function(dynamic)",
-        "measurements": null
+        "code": "_asyncComplete$1(value) {\n      var t1 = this.$ti;\n      t1._eval$1(\"1/\")._as(value);\n      if (t1._eval$1(\"Future<1>\")._is(value)) {\n        this._chainFuture$1(value);\n        return;\n      }\n      this._asyncCompleteWithValue$1(t1._precomputed1._as(value));\n    }",
+        "type": "void Function(Object?)"
       },
       "665416673": {
         "id": "function/665416673",
         "kind": "function",
         "name": "[]",
-        "size": 706,
+        "size": 693,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -10798,28 +14660,27 @@
           "factory": false,
           "external": false
         },
-        "returnType": "JsLinkedHashMap.V",
+        "returnType": "JsLinkedHashMap.V?",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
             "name": "key",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "$index: function(_, key) {\n  var strings, cell, t1, nums;\n  if (typeof key === \"string\") {\n    strings = this.__js_helper$_strings;\n    if (strings == null)\n      return;\n    cell = this._getTableCell$2(strings, key);\n    t1 = cell == null ? null : cell.get$hashMapCellValue();\n    return t1;\n  } else if (typeof key === \"number\" && (key & 0x3ffffff) === key) {\n    nums = this.__js_helper$_nums;\n    if (nums == null)\n      return;\n    cell = this._getTableCell$2(nums, key);\n    t1 = cell == null ? null : cell.get$hashMapCellValue();\n    return t1;\n  } else\n    return this.internalGet$1(key);\n}\n",
-        "type": "JsLinkedHashMap.V Function(Object)",
-        "measurements": null
+        "code": "$index(_, key) {\n      var strings, cell, t1, nums, _this = this, _null = null;\n      if (typeof key == \"string\") {\n        strings = _this.__js_helper$_strings;\n        if (strings == null)\n          return _null;\n        cell = _this._getTableCell$2(strings, key);\n        t1 = cell == null ? _null : cell.hashMapCellValue;\n        return t1;\n      } else if (typeof key == \"number\" && (key & 0x3ffffff) === key) {\n        nums = _this.__js_helper$_nums;\n        if (nums == null)\n          return _null;\n        cell = _this._getTableCell$2(nums, key);\n        t1 = cell == null ? _null : cell.hashMapCellValue;\n        return t1;\n      } else\n        return _this.internalGet$1(key);\n    }",
+        "type": "JsLinkedHashMap.V? Function(Object?)"
       },
-      "665676035": {
-        "id": "function/665676035",
+      "666277254": {
+        "id": "function/666277254",
         "kind": "function",
-        "name": "isGenericFunctionTypeParameter",
-        "size": 0,
+        "name": "_isFunctionSubtype",
+        "size": 2694,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -10831,24 +14692,43 @@
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [
           {
-            "name": "type",
+            "name": "universe",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
+          },
+          {
+            "name": "s",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "sEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "tEnv",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isFunctionSubtype(universe, s, sEnv, t, tEnv) {\n      var sParameters, tParameters, sRequiredPositional, tRequiredPositional, sRequiredPositionalLength, tRequiredPositionalLength, requiredPositionalDelta, sOptionalPositional, tOptionalPositional, sOptionalPositionalLength, tOptionalPositionalLength, i, t1, sNamed, tNamed, sNamedLength, tNamedLength, sIndex, tIndex, tName, sName;\n      if (!A._isSubtype(universe, s._primary, sEnv, t._primary, tEnv))\n        return false;\n      sParameters = s._rest;\n      tParameters = t._rest;\n      sRequiredPositional = sParameters._requiredPositional;\n      tRequiredPositional = tParameters._requiredPositional;\n      sRequiredPositionalLength = sRequiredPositional.length;\n      tRequiredPositionalLength = tRequiredPositional.length;\n      if (sRequiredPositionalLength > tRequiredPositionalLength)\n        return false;\n      requiredPositionalDelta = tRequiredPositionalLength - sRequiredPositionalLength;\n      sOptionalPositional = sParameters._optionalPositional;\n      tOptionalPositional = tParameters._optionalPositional;\n      sOptionalPositionalLength = sOptionalPositional.length;\n      tOptionalPositionalLength = tOptionalPositional.length;\n      if (sRequiredPositionalLength + sOptionalPositionalLength < tRequiredPositionalLength + tOptionalPositionalLength)\n        return false;\n      for (i = 0; i < sRequiredPositionalLength; ++i) {\n        t1 = sRequiredPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < requiredPositionalDelta; ++i) {\n        t1 = sOptionalPositional[i];\n        if (!A._isSubtype(universe, tRequiredPositional[sRequiredPositionalLength + i], tEnv, t1, sEnv))\n          return false;\n      }\n      for (i = 0; i < tOptionalPositionalLength; ++i) {\n        t1 = sOptionalPositional[requiredPositionalDelta + i];\n        if (!A._isSubtype(universe, tOptionalPositional[i], tEnv, t1, sEnv))\n          return false;\n      }\n      sNamed = sParameters._named;\n      tNamed = tParameters._named;\n      sNamedLength = sNamed.length;\n      tNamedLength = tNamed.length;\n      for (sIndex = 0, tIndex = 0; tIndex < tNamedLength; tIndex += 3) {\n        tName = tNamed[tIndex];\n        for (; true;) {\n          if (sIndex >= sNamedLength)\n            return false;\n          sName = sNamed[sIndex];\n          sIndex += 3;\n          if (tName < sName)\n            return false;\n          if (sName < tName)\n            continue;\n          t1 = sNamed[sIndex - 1];\n          if (!A._isSubtype(universe, tNamed[tIndex + 2], tEnv, t1, sEnv))\n            return false;\n          break;\n        }\n      }\n      return true;\n    }",
+        "type": "bool Function(Object?,Rti,Object?,Rti,Object?)"
       },
-      "667149426": {
-        "id": "function/667149426",
+      "667416185": {
+        "id": "function/667416185",
         "kind": "function",
-        "name": "call",
-        "size": 81,
+        "name": "_substituteFunctionParameters",
+        "size": 1020,
         "outputUnit": "outputUnit/669725655",
-        "parent": "closure/379635163",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -10856,20 +14736,40 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
-        "inferredReturnType": "[null]",
-        "parameters": [],
+        "returnType": "_FunctionParameters",
+        "inferredReturnType": "[exact=_FunctionParameters]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "functionParameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "depth",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  this.$this._completeWithValue$1(this.value);\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "code": "_substituteFunctionParameters(universe, functionParameters, typeArguments, depth) {\n      var result,\n        requiredPositional = functionParameters._requiredPositional,\n        substitutedRequiredPositional = A._substituteArray(universe, requiredPositional, typeArguments, depth),\n        optionalPositional = functionParameters._optionalPositional,\n        substitutedOptionalPositional = A._substituteArray(universe, optionalPositional, typeArguments, depth),\n        named = functionParameters._named,\n        substitutedNamed = A._substituteNamed(universe, named, typeArguments, depth);\n      if (substitutedRequiredPositional === requiredPositional && substitutedOptionalPositional === optionalPositional && substitutedNamed === named)\n        return functionParameters;\n      result = new A._FunctionParameters();\n      result._requiredPositional = substitutedRequiredPositional;\n      result._optionalPositional = substitutedOptionalPositional;\n      result._named = substitutedNamed;\n      return result;\n    }",
+        "type": "_FunctionParameters Function(Object?,_FunctionParameters,Object?,int)"
       },
       "668300184": {
         "id": "function/668300184",
         "kind": "function",
         "name": "closureFromTearOff",
-        "size": 368,
+        "size": 86,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -10883,47 +14783,21 @@
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "receiver",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "functions",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "reflectionInfo",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "isStatic",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "jsArguments",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "name",
+            "name": "parameters",
             "type": "[null|subclass=Object]",
             "declaredType": "dynamic"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "closureFromTearOff: function(receiver, functions, reflectionInfo, isStatic, jsArguments, $name) {\n  var t1, t2;\n  t1 = J.JSArray_markFixedList(functions);\n  t2 = !!J.getInterceptor(reflectionInfo).$isList ? J.JSArray_markFixedList(reflectionInfo) : reflectionInfo;\n  return H.Closure_fromTearOff(receiver, t1, t2, !!isStatic, jsArguments, $name);\n}\n",
-        "type": "dynamic Function(dynamic,dynamic,dynamic,dynamic,dynamic,dynamic)",
-        "measurements": null
+        "code": "closureFromTearOff(parameters) {\n      return A.Closure_fromTearOff(parameters);\n    }",
+        "type": "dynamic Function(dynamic)"
       },
       "669694580": {
         "id": "function/669694580",
         "kind": "function",
         "name": "internalFindBucketIndex",
-        "size": 296,
+        "size": 268,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -10938,7 +14812,7 @@
         "parameters": [
           {
             "name": "bucket",
-            "type": "[null|subclass=Object]",
+            "type": "[null|subclass=JSArray]",
             "declaredType": "dynamic"
           },
           {
@@ -10947,11 +14821,70 @@
             "declaredType": "dynamic"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "internalFindBucketIndex$2: function(bucket, key) {\n  var $length, i;\n  if (bucket == null)\n    return -1;\n  $length = bucket.length;\n  for (i = 0; i < $length; ++i)\n    if (J.$eq$(bucket[i].hashMapCellKey, key))\n      return i;\n  return -1;\n}\n",
-        "type": "int Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "internalFindBucketIndex$2(bucket, key) {\n      var $length, i;\n      if (bucket == null)\n        return -1;\n      $length = bucket.length;\n      for (i = 0; i < $length; ++i)\n        if (J.$eq$(bucket[i].hashMapCellKey, key))\n          return i;\n      return -1;\n    }",
+        "type": "int Function(dynamic,dynamic)"
+      },
+      "671381451": {
+        "id": "function/671381451",
+        "kind": "function",
+        "name": "_installRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "Rti Function(Object?,String,Rti)"
+      },
+      "675189669": {
+        "id": "function/675189669",
+        "kind": "function",
+        "name": "allocate",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "Rti Function()"
       },
       "676035370": {
         "id": "function/676035370",
@@ -10973,7 +14906,7 @@
           {
             "name": "_set",
             "type": "[subclass=_LinkedHashSet]",
-            "declaredType": "dynamic"
+            "declaredType": "_LinkedHashSet<_LinkedHashSetIterator.E>"
           },
           {
             "name": "_modifications",
@@ -10983,15 +14916,14 @@
         ],
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic,int)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(_LinkedHashSet<_LinkedHashSetIterator.E>,int)"
       },
       "679532174": {
         "id": "function/679532174",
         "kind": "function",
         "name": "argumentErrorValue",
-        "size": 104,
+        "size": 94,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -11012,9 +14944,41 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "argumentErrorValue: function(object) {\n  return new P.ArgumentError(true, object, null, null);\n}\n",
-        "type": "ArgumentError Function(dynamic)",
-        "measurements": null
+        "code": "argumentErrorValue(object) {\n      return new A.ArgumentError(true, object, null, null);\n    }",
+        "type": "ArgumentError Function(dynamic)"
+      },
+      "680877684": {
+        "id": "function/680877684",
+        "kind": "function",
+        "name": "_setArrayType",
+        "size": 90,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "target",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_setArrayType(target, rti) {\n      target[init.arrayRti] = rti;\n      return target;\n    }",
+        "type": "Object? Function(Object?,Object?)"
       },
       "681643547": {
         "id": "function/681643547",
@@ -11035,44 +14999,52 @@
         "parameters": [
           {
             "name": "variableName",
-            "type": "[null|subclass=Object]",
-            "declaredType": "String"
+            "type": "[null|exact=JSString]",
+            "declaredType": "String?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function([String])",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function([String?])"
       },
-      "684612786": {
-        "id": "function/684612786",
+      "685278809": {
+        "id": "function/685278809",
         "kind": "function",
-        "name": "ReflectionInfo",
-        "size": 562,
+        "name": "toTypesNamed",
+        "size": 212,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
+        "parent": "class/926198907",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
-          "factory": true,
+          "factory": false,
           "external": false
         },
-        "returnType": "ReflectionInfo",
-        "inferredReturnType": "[null|exact=ReflectionInfo]",
+        "returnType": "void",
+        "inferredReturnType": "[null]",
         "parameters": [
           {
-            "name": "jsFunction",
+            "name": "universe",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "items",
+            "type": "[subclass=JSArray]",
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "ReflectionInfo_ReflectionInfo: function(jsFunction) {\n  var data, requiredParametersInfo, optionalParametersInfo;\n  data = jsFunction.$reflectionInfo;\n  if (data == null)\n    return;\n  data = J.JSArray_markFixedList(data);\n  requiredParametersInfo = data[0];\n  optionalParametersInfo = data[1];\n  return new H.ReflectionInfo(jsFunction, data, (requiredParametersInfo & 2) === 2, requiredParametersInfo >> 2, optionalParametersInfo >> 1, (optionalParametersInfo & 1) === 1, data[2], null);\n}\n",
-        "type": "ReflectionInfo Function(dynamic)",
-        "measurements": null
+        "code": "_Parser_toTypesNamed(universe, environment, items) {\n      var i,\n        $length = items.length;\n      for (i = 2; i < $length; i += 3)\n        items[i] = A._Parser_toType(universe, environment, items[i]);\n    }",
+        "type": "void Function(Object?,Rti,Object?)"
       },
       "687991937": {
         "id": "function/687991937",
@@ -11093,49 +15065,52 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
-      "689069465": {
-        "id": "function/689069465",
+      "689230944": {
+        "id": "function/689230944",
         "kind": "function",
-        "name": "isSubtypeV1",
-        "size": 1215,
+        "name": "_lookupTerminalRti",
+        "size": 360,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
         "parameters": [
           {
-            "name": "s",
+            "name": "universe",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           },
           {
-            "name": "t",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "kind",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "isSubtypeV1: function(s, t) {\n  var t1, typeOfS, t2, typeOfT, typeOfTString, substitution;\n  if (s === t)\n    return true;\n  if (s == null || t == null)\n    return true;\n  if (typeof s === \"number\")\n    return false;\n  if (typeof t === \"number\")\n    return false;\n  if (s.builtin$cls === \"Null\")\n    return true;\n  if ('func' in t)\n    return H.isFunctionSubtypeV1(s, t);\n  if ('func' in s)\n    return t.builtin$cls === \"Function\" || t.builtin$cls === \"Object\";\n  t1 = typeof s === \"object\" && s !== null && s.constructor === Array;\n  typeOfS = t1 ? s[0] : s;\n  t2 = typeof t === \"object\" && t !== null && t.constructor === Array;\n  typeOfT = t2 ? t[0] : t;\n  if (typeOfT !== typeOfS) {\n    typeOfTString = H.runtimeTypeToString(typeOfT, null);\n    if (!('$is' + typeOfTString in typeOfS.prototype))\n      return false;\n    substitution = typeOfS.prototype[\"$as\" + typeOfTString];\n  } else\n    substitution = null;\n  if (!t1 && substitution == null || !t2)\n    return true;\n  t1 = t1 ? s.slice(1) : null;\n  t2 = t.slice(1);\n  return H.areSubtypesV1(H.substitute(substitution, t1), t2);\n}\n",
-        "type": "bool Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "_Universe__lookupTerminalRti(universe, kind, key) {\n      var rti, t1,\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = kind;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,int,String)"
       },
       "689271731": {
         "id": "function/689271731",
         "kind": "function",
         "name": "forEach",
-        "size": 460,
+        "size": 508,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -11156,9 +15131,8 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "forEach$1: function(_, action) {\n  var cell, modifications;\n  cell = this.__js_helper$_first;\n  modifications = this.__js_helper$_modifications;\n  for (; cell != null;) {\n    action.call$2(cell.hashMapCellKey, cell.hashMapCellValue);\n    if (modifications !== this.__js_helper$_modifications)\n      throw H.wrapException(P.ConcurrentModificationError$(this));\n    cell = cell.__js_helper$_next;\n  }\n}\n",
-        "type": "void Function(void Function(JsLinkedHashMap.K,JsLinkedHashMap.V))",
-        "measurements": null
+        "code": "forEach$1(_, action) {\n      var cell, modifications, _this = this;\n      A._instanceType(_this)._eval$1(\"~(1,2)\")._as(action);\n      cell = _this.__js_helper$_first;\n      modifications = _this.__js_helper$_modifications;\n      for (; cell != null;) {\n        action.call$2(cell.hashMapCellKey, cell.hashMapCellValue);\n        if (modifications !== _this.__js_helper$_modifications)\n          throw A.wrapException(A.ConcurrentModificationError$(_this));\n        cell = cell.__js_helper$_next;\n      }\n    }",
+        "type": "void Function(void Function(JsLinkedHashMap.K,JsLinkedHashMap.V))"
       },
       "692185405": {
         "id": "function/692185405",
@@ -11174,14 +15148,41 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic Function(_FutureListener.S)",
+        "returnType": "FutureOr<_FutureListener.T> Function(_FutureListener.S)",
         "inferredReturnType": "[subclass=Closure]",
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(_FutureListener.S) Function()",
-        "measurements": null
+        "code": "",
+        "type": "FutureOr<_FutureListener.T> Function(_FutureListener.S) Function()"
+      },
+      "692531098": {
+        "id": "function/692531098",
+        "kind": "function",
+        "name": "_AssertionError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/155954474",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_AssertionError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(Object)"
       },
       "693686431": {
         "id": "function/693686431",
@@ -11202,9 +15203,58 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "695455779": {
+        "id": "function/695455779",
+        "kind": "function",
+        "name": "_canonicalRecipeOfNever",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
+      },
+      "697367085": {
+        "id": "function/697367085",
+        "kind": "function",
+        "name": "_isUnionOfFunctionType",
+        "size": 217,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "Rti__isUnionOfFunctionType(rti) {\n      var kind = rti._kind;\n      if (kind === 6 || kind === 7 || kind === 8)\n        return A.Rti__isUnionOfFunctionType(rti._primary);\n      return kind === 11 || kind === 12;\n    }",
+        "type": "bool Function(Rti)"
       },
       "698206676": {
         "id": "function/698206676",
@@ -11223,17 +15273,16 @@
         "returnType": "dynamic",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
       },
       "701409225": {
         "id": "function/701409225",
         "kind": "function",
         "name": "ConcurrentModificationError",
-        "size": 134,
+        "size": 116,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/36312556",
         "children": [],
@@ -11249,20 +15298,19 @@
           {
             "name": "modifiedObject",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "ConcurrentModificationError$: function(modifiedObject) {\n  return new P.ConcurrentModificationError(modifiedObject);\n}\n",
-        "type": "dynamic Function([Object])",
-        "measurements": null
+        "code": "ConcurrentModificationError$(modifiedObject) {\n      return new A.ConcurrentModificationError(modifiedObject);\n    }",
+        "type": "dynamic Function([Object?])"
       },
       "702114504": {
         "id": "function/702114504",
         "kind": "function",
         "name": "_addHashTableEntry",
-        "size": 299,
+        "size": 403,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -11293,15 +15341,36 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "__js_helper$_addHashTableEntry$3: function(table, key, value) {\n  var cell = this._getTableCell$2(table, key);\n  if (cell == null)\n    this._setTableEntry$3(table, key, this.__js_helper$_newLinkedCell$2(key, value));\n  else\n    cell.set$hashMapCellValue(value);\n}\n",
-        "type": "void Function(dynamic,JsLinkedHashMap.K,JsLinkedHashMap.V)",
-        "measurements": null
+        "code": "__js_helper$_addHashTableEntry$3(table, key, value) {\n      var cell, _this = this,\n        t1 = A._instanceType(_this);\n      t1._precomputed1._as(key);\n      t1._rest[1]._as(value);\n      cell = _this._getTableCell$2(table, key);\n      if (cell == null)\n        _this._setTableEntry$3(table, key, _this.__js_helper$_newLinkedCell$2(key, value));\n      else\n        cell.hashMapCellValue = value;\n    }",
+        "type": "void Function(dynamic,Object?,Object?)"
+      },
+      "702246006": {
+        "id": "function/702246006",
+        "kind": "function",
+        "name": "_theUniverse",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 10,
+        "code": "",
+        "type": "Object? Function()"
       },
       "705889064": {
         "id": "function/705889064",
         "kind": "function",
         "name": "==",
-        "size": 322,
+        "size": 268,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/138211367",
         "children": [],
@@ -11317,93 +15386,52 @@
           {
             "name": "other",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           }
         ],
-        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "$eq: function(_, other) {\n  if (other == null)\n    return false;\n  if (this === other)\n    return true;\n  if (!(other instanceof H.BoundClosure))\n    return false;\n  return this._self === other._self && this._target === other._target && this._receiver === other._receiver;\n}\n",
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "$eq(_, other) {\n      if (other == null)\n        return false;\n      if (this === other)\n        return true;\n      if (!(other instanceof A.BoundClosure))\n        return false;\n      return this.$_target === other.$_target && this._receiver === other._receiver;\n    }",
+        "type": "bool Function(Object)"
       },
-      "708419578": {
-        "id": "function/708419578",
+      "709915292": {
+        "id": "function/709915292",
         "kind": "function",
-        "name": "checkArgumentsV1",
+        "name": "_canonicalRecipeOfInterface",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
-            "name": "substitution",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "name",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
           },
           {
             "name": "arguments",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "checks",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function(dynamic,dynamic,dynamic)",
-        "measurements": null
-      },
-      "710092165": {
-        "id": "function/710092165",
-        "kind": "function",
-        "name": "isNotIdentical",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "s",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "t",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "String Function(String,Object?)"
       },
       "710611585": {
         "id": "function/710611585",
         "kind": "function",
         "name": "_makeAsyncAwaitCompleter",
-        "size": 179,
+        "size": 174,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -11413,20 +15441,52 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Completer<_makeAsyncAwaitCompleter.T>",
+        "returnType": "Completer<#A/*free*/>",
         "inferredReturnType": "[exact=_AsyncAwaitCompleter]",
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "_makeAsyncAwaitCompleter: function() {\n  return new P._AsyncAwaitCompleter(new P._SyncCompleter(new P._Future(0, $.Zone__current, null, [null]), [null]), false, [null]);\n}\n",
-        "type": "Completer<_makeAsyncAwaitCompleter.T> Function()",
-        "measurements": null
+        "code": "_makeAsyncAwaitCompleter($T) {\n      return new A._AsyncAwaitCompleter(new A._Future($.Zone__current, $T._eval$1(\"_Future<0>\")), $T._eval$1(\"_AsyncAwaitCompleter<0>\"));\n    }",
+        "type": "Completer<#A> Function<#A extends Object?>()"
+      },
+      "710793957": {
+        "id": "function/710793957",
+        "kind": "function",
+        "name": "_setEvalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
       },
       "712365042": {
         "id": "function/712365042",
         "kind": "function",
         "name": "objectHashCode",
-        "size": 227,
+        "size": 217,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/354160010",
         "children": [],
@@ -11447,15 +15507,70 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Primitives_objectHashCode: function(object) {\n  var hash = object.$identityHash;\n  if (hash == null) {\n    hash = Math.random() * 0x3fffffff | 0;\n    object.$identityHash = hash;\n  }\n  return hash;\n}\n",
-        "type": "int Function(dynamic)",
-        "measurements": null
+        "code": "Primitives_objectHashCode(object) {\n      var hash = object.$identityHash;\n      if (hash == null) {\n        hash = Math.random() * 0x3fffffff | 0;\n        object.$identityHash = hash;\n      }\n      return hash;\n    }",
+        "type": "int Function(dynamic)"
+      },
+      "712382592": {
+        "id": "function/712382592",
+        "kind": "function",
+        "name": "stack",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object Function(Object?)"
+      },
+      "713151216": {
+        "id": "function/713151216",
+        "kind": "function",
+        "name": "isObjectType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 10,
+        "code": "",
+        "type": "bool Function(Rti)"
       },
       "714600619": {
         "id": "function/714600619",
         "kind": "function",
         "name": "diagnoseIndexError",
-        "size": 417,
+        "size": 420,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -11470,7 +15585,7 @@
         "parameters": [
           {
             "name": "indexable",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "dynamic"
           },
           {
@@ -11479,11 +15594,38 @@
             "declaredType": "dynamic"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
-        "code": "diagnoseIndexError: function(indexable, index) {\n  var $length;\n  if (typeof index !== \"number\" || Math.floor(index) !== index)\n    return new P.ArgumentError(true, index, \"index\", null);\n  $length = J.get$length$as(indexable);\n  if (index < 0 || index >= $length)\n    return P.IndexError$(index, indexable, \"index\", null, $length);\n  return P.RangeError$value(index, \"index\", null);\n}\n",
-        "type": "Error Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "diagnoseIndexError(indexable, index) {\n      var $length, _s5_ = \"index\";\n      if (!A._isInt(index))\n        return new A.ArgumentError(true, index, _s5_, null);\n      $length = J.get$length$as(indexable);\n      if (index < 0 || index >= $length)\n        return new A.IndexError($length, true, index, _s5_, \"Index out of range\");\n      return new A.RangeError(null, null, true, index, _s5_, \"Value not in range\");\n    }",
+        "type": "Error Function(dynamic,dynamic)"
+      },
+      "716694085": {
+        "id": "function/716694085",
+        "kind": "function",
+        "name": "isArray",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(Object?)"
       },
       "717417998": {
         "id": "function/717417998",
@@ -11504,20 +15646,19 @@
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "dynamic"
           },
           {
             "name": "stackTrace",
-            "type": "[null|subclass=Object]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic,[StackTrace])",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic,StackTrace)"
       },
       "717561594": {
         "id": "function/717561594",
@@ -11538,15 +15679,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 4,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
       },
       "717852932": {
         "id": "function/717852932",
         "kind": "function",
         "name": "_errorExplanation",
-        "size": 62,
+        "size": 48,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
@@ -11561,9 +15701,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$_errorExplanation: function() {\n  return \"\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "get$_errorExplanation() {\n      return \"\";\n    }",
+        "type": "String Function()"
       },
       "722405802": {
         "id": "function/722405802",
@@ -11582,74 +15721,16 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
-      },
-      "722993348": {
-        "id": "function/722993348",
-        "kind": "function",
-        "name": "hasField",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "object",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "name",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 4,
-        "code": null,
-        "type": "dynamic Function(dynamic,dynamic)",
-        "measurements": null
-      },
-      "724475372": {
-        "id": "function/724475372",
-        "kind": "function",
-        "name": "selfFieldName",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/138211367",
-        "children": [],
-        "modifiers": {
-          "static": true,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "String",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads static; writes static)",
-        "inlinedCount": 3,
-        "code": null,
-        "type": "String Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
       "725505159": {
         "id": "function/725505159",
         "kind": "function",
         "name": "matchTypeError",
-        "size": 714,
+        "size": 680,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
@@ -11670,15 +15751,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "matchTypeError$1: function(message) {\n  var match, result, t1;\n  match = new RegExp(this._pattern).exec(message);\n  if (match == null)\n    return;\n  result = Object.create(null);\n  t1 = this._arguments;\n  if (t1 !== -1)\n    result.arguments = match[t1 + 1];\n  t1 = this._argumentsExpr;\n  if (t1 !== -1)\n    result.argumentsExpr = match[t1 + 1];\n  t1 = this._expr;\n  if (t1 !== -1)\n    result.expr = match[t1 + 1];\n  t1 = this._method;\n  if (t1 !== -1)\n    result.method = match[t1 + 1];\n  t1 = this._receiver;\n  if (t1 !== -1)\n    result.receiver = match[t1 + 1];\n  return result;\n}\n",
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "matchTypeError$1(message) {\n      var result, t1, _this = this,\n        match = new RegExp(_this._pattern).exec(message);\n      if (match == null)\n        return null;\n      result = Object.create(null);\n      t1 = _this._arguments;\n      if (t1 !== -1)\n        result.arguments = match[t1 + 1];\n      t1 = _this._argumentsExpr;\n      if (t1 !== -1)\n        result.argumentsExpr = match[t1 + 1];\n      t1 = _this._expr;\n      if (t1 !== -1)\n        result.expr = match[t1 + 1];\n      t1 = _this._method;\n      if (t1 !== -1)\n        result.method = match[t1 + 1];\n      t1 = _this._receiver;\n      if (t1 !== -1)\n        result.receiver = match[t1 + 1];\n      return result;\n    }",
+        "type": "dynamic Function(dynamic)"
       },
       "726344781": {
         "id": "function/726344781",
         "kind": "function",
         "name": "call",
-        "size": 76,
+        "size": 62,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/558424951",
         "children": [],
@@ -11693,15 +15773,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  return this.$this.runGuarded$1(this.f);\n}\n",
-        "type": "void Function()",
-        "measurements": null
+        "code": "call$0() {\n      return this.$this.runGuarded$1(this.f);\n    }",
+        "type": "void Function()"
       },
       "726979110": {
         "id": "function/726979110",
         "kind": "function",
         "name": "+",
-        "size": 188,
+        "size": 169,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/793539876",
         "children": [],
@@ -11716,21 +15795,63 @@
         "parameters": [
           {
             "name": "other",
-            "type": "[null|subclass=Object]",
+            "type": "[null|exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "$add: function(receiver, other) {\n  if (typeof other !== \"string\")\n    throw H.wrapException(P.ArgumentError$value(other, null, null));\n  return receiver + other;\n}\n",
-        "type": "String Function(String)",
-        "measurements": null
+        "code": "$add(receiver, other) {\n      if (typeof other != \"string\")\n        throw A.wrapException(A.ArgumentError$value(other, null, null));\n      return receiver + other;\n    }",
+        "type": "String Function(String)"
+      },
+      "729126945": {
+        "id": "function/729126945",
+        "kind": "function",
+        "name": "_recipeJoin4",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "Value([exact=JSString], value: \"<\")",
+            "declaredType": "String"
+          },
+          {
+            "name": "s3",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s4",
+            "type": "Value([exact=JSString], value: \">\")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "String Function(String,String,String,String)"
       },
       "730595126": {
         "id": "function/730595126",
         "kind": "function",
         "name": "toString",
-        "size": 66,
+        "size": 52,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/595024907",
         "children": [],
@@ -11745,9 +15866,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"Throw of null.\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"Throw of null.\";\n    }",
+        "type": "String Function()"
       },
       "731794670": {
         "id": "function/731794670",
@@ -11768,135 +15888,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "Iterable<JsLinkedHashMap.K> Function()",
-        "measurements": null
-      },
-      "734834560": {
-        "id": "function/734834560",
-        "kind": "function",
-        "name": "builtinIsSubtype",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "type",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "other",
-            "type": "[null|subclass=Object]",
-            "declaredType": "String"
-          }
-        ],
-        "sideEffects": "SideEffects(reads static; writes nothing)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function(dynamic,String)",
-        "measurements": null
-      },
-      "736875717": {
-        "id": "function/736875717",
-        "kind": "function",
-        "name": "getLength",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "int",
-        "inferredReturnType": "[subclass=JSInt]",
-        "parameters": [
-          {
-            "name": "array",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes nothing)",
-        "inlinedCount": 8,
-        "code": null,
-        "type": "int Function(dynamic)",
-        "measurements": null
-      },
-      "737782244": {
-        "id": "function/737782244",
-        "kind": "function",
-        "name": "_functionRtiToStringV1",
-        "size": 1501,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
-        "parameters": [
-          {
-            "name": "rti",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "onTypeVariable",
-            "type": "[null]",
-            "declaredType": "String Function(int)"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "_functionRtiToStringV1: function(rti, onTypeVariable) {\n  var returnTypeText, $arguments, t1, argumentsText, sep, _i, argument, optionalArguments, namedArguments, t2, t3;\n  returnTypeText = !!rti.v ? \"void\" : H.runtimeTypeToStringV1(rti.ret, onTypeVariable);\n  if (\"args\" in rti) {\n    $arguments = rti.args;\n    for (t1 = $arguments.length, argumentsText = \"\", sep = \"\", _i = 0; _i < t1; ++_i, sep = \", \") {\n      argument = $arguments[_i];\n      argumentsText = argumentsText + sep + H.runtimeTypeToStringV1(argument, onTypeVariable);\n    }\n  } else {\n    argumentsText = \"\";\n    sep = \"\";\n  }\n  if (\"opt\" in rti) {\n    optionalArguments = rti.opt;\n    argumentsText += sep + \"[\";\n    for (t1 = optionalArguments.length, sep = \"\", _i = 0; _i < t1; ++_i, sep = \", \") {\n      argument = optionalArguments[_i];\n      argumentsText = argumentsText + sep + H.runtimeTypeToStringV1(argument, onTypeVariable);\n    }\n    argumentsText += \"]\";\n  }\n  if (\"named\" in rti) {\n    namedArguments = rti.named;\n    argumentsText += sep + \"{\";\n    for (t1 = H.extractKeys(namedArguments), t2 = t1.length, sep = \"\", _i = 0; _i < t2; ++_i, sep = \", \") {\n      t3 = t1[_i];\n      argumentsText = argumentsText + sep + H.runtimeTypeToStringV1(namedArguments[t3], onTypeVariable) + (\" \" + H.S(t3));\n    }\n    argumentsText += \"}\";\n  }\n  return \"(\" + argumentsText + \") => \" + returnTypeText;\n}\n",
-        "type": "String Function(dynamic,String Function(int))",
-        "measurements": null
-      },
-      "738104072": {
-        "id": "function/738104072",
-        "kind": "function",
-        "name": "+",
-        "size": 74,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/1003011102",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "JSNumber",
-        "inferredReturnType": "[subclass=JSNumber]",
-        "parameters": [
-          {
-            "name": "other",
-            "type": "[subclass=JSInt]",
-            "declaredType": "num"
-          }
-        ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 0,
-        "code": "$add: function(receiver, other) {\n  return receiver + other;\n}\n",
-        "type": "JSNumber Function(num)",
-        "measurements": null
+        "code": "",
+        "type": "Iterable<JsLinkedHashMap.K> Function()"
       },
       "739160294": {
         "id": "function/739160294",
@@ -11918,20 +15911,19 @@
           {
             "name": "_map",
             "type": "[subclass=JsLinkedHashMap]",
-            "declaredType": "dynamic"
+            "declaredType": "JsLinkedHashMap<dynamic,dynamic>"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(JsLinkedHashMap<dynamic,dynamic>)"
       },
       "741666293": {
         "id": "function/741666293",
         "kind": "function",
         "name": "call",
-        "size": 654,
+        "size": 566,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/965562379",
         "children": [],
@@ -11952,15 +15944,75 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(i) {\n  var t1 = this.hashes;\n  if (i >= t1.length)\n    return H.ioore(t1, i);\n  if (this.isHunkLoaded(t1[i])) {\n    t1 = this.waitingForLoad;\n    if (i >= t1.length)\n      return H.ioore(t1, i);\n    t1[i] = false;\n    t1 = new P._Future(0, $.Zone__current, null, [null]);\n    t1._asyncComplete$1(null);\n    return t1;\n  }\n  t1 = this.uris;\n  if (i >= t1.length)\n    return H.ioore(t1, i);\n  return H._loadHunk(t1[i]).then$1(new H.loadDeferredLibrary_loadAndInitialize_closure(this.waitingForLoad, i, this.initializeSomeLoadedHunks));\n}\n",
-        "type": "Future<dynamic> Function(int)",
-        "measurements": null
+        "code": "call$1(i) {\n      var _this = this,\n        t1 = _this.hashes;\n      if (!(i < t1.length))\n        return A.ioore(t1, i);\n      if (_this.isHunkLoaded(t1[i])) {\n        B.JSArray_methods.$indexSet(_this.waitingForLoad, i, false);\n        return A.Future_Future$value(null, type$.dynamic);\n      }\n      t1 = _this.uris;\n      if (!(i < t1.length))\n        return A.ioore(t1, i);\n      return A._loadHunk(t1[i], _this.loadId).then$1$1(new A.loadDeferredLibrary_loadAndInitialize_closure(_this.waitingForLoad, i, _this.initializeSomeLoadedHunks), type$.dynamic);\n    }",
+        "type": "Future<dynamic> Function(int)"
+      },
+      "744088497": {
+        "id": "function/744088497",
+        "kind": "function",
+        "name": "collectNamed",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?,Object?)"
+      },
+      "745680035": {
+        "id": "function/745680035",
+        "kind": "function",
+        "name": "unmangleGlobalNameIfPreservedAnyways",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/527944179",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "name",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "String? Function(String)"
       },
       "745741399": {
         "id": "function/745741399",
         "kind": "function",
         "name": "toString",
-        "size": 256,
+        "size": 231,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/36312556",
         "children": [],
@@ -11975,9 +16027,117 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  var t1 = this.modifiedObject;\n  if (t1 == null)\n    return \"Concurrent modification during iteration.\";\n  return \"Concurrent modification during iteration: \" + H.S(P.Error_safeToString(t1)) + \".\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      var t1 = this.modifiedObject;\n      if (t1 == null)\n        return \"Concurrent modification during iteration.\";\n      return \"Concurrent modification during iteration: \" + A.Error_safeToString(t1) + \".\";\n    }",
+        "type": "String Function()"
+      },
+      "746055337": {
+        "id": "function/746055337",
+        "kind": "function",
+        "name": "isIdentifierStart",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1013977545",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "ch",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function(int)"
+      },
+      "747174278": {
+        "id": "function/747174278",
+        "kind": "function",
+        "name": "create",
+        "size": 146,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_Parser_create(universe, environment, recipe, normalize) {\n      return {u: universe, e: environment, r: recipe, s: [], p: 0, n: normalize};\n    }",
+        "type": "Object Function(Object?,Object?,String,bool)"
+      },
+      "747795707": {
+        "id": "function/747795707",
+        "kind": "function",
+        "name": "arraySetAt",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "i",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "value",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 7,
+        "code": "",
+        "type": "void Function(Object?,int,Object?)"
       },
       "748173162": {
         "id": "function/748173162",
@@ -11996,17 +16156,54 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
+      },
+      "748762392": {
+        "id": "function/748762392",
+        "kind": "function",
+        "name": "_createTerminalRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "kind",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,int,String)"
       },
       "749970393": {
         "id": "function/749970393",
         "kind": "function",
         "name": "hashCode",
-        "size": 85,
+        "size": 71,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/627219877",
         "children": [],
@@ -12021,20 +16218,19 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(_) {\n  return H.Primitives_objectHashCode(this);\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$hashCode(_) {\n      return A.Primitives_objectHashCode(this);\n    }",
+        "type": "int Function()"
       },
-      "751200407": {
-        "id": "function/751200407",
+      "750091346": {
+        "id": "function/750091346",
         "kind": "function",
-        "name": "joinArguments",
+        "name": "_canonicalRecipeOfFutureOr",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
@@ -12043,27 +16239,21 @@
         "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
-            "name": "types",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "startIndex",
-            "type": "[exact=JSUInt31]",
-            "declaredType": "int"
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(dynamic,int)",
-        "measurements": null
+        "code": "",
+        "type": "String Function(Rti)"
       },
       "752981084": {
         "id": "function/752981084",
         "kind": "function",
         "name": "_shrOtherPositive",
-        "size": 276,
+        "size": 248,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1003011102",
         "children": [],
@@ -12082,11 +16272,99 @@
             "declaredType": "num"
           }
         ],
-        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "_shrOtherPositive$1: function(receiver, other) {\n  var t1;\n  if (receiver > 0)\n    t1 = this._shrBothPositive$1(receiver, other);\n  else {\n    t1 = other > 31 ? 31 : other;\n    t1 = receiver >> t1 >>> 0;\n  }\n  return t1;\n}\n",
-        "type": "num Function(num)",
-        "measurements": null
+        "code": "_shrOtherPositive$1(receiver, other) {\n      var t1;\n      if (receiver > 0)\n        t1 = this._shrBothPositive$1(receiver, other);\n      else {\n        t1 = other > 31 ? 31 : other;\n        t1 = receiver >> t1 >>> 0;\n      }\n      return t1;\n    }",
+        "type": "num Function(num)"
+      },
+      "753032370": {
+        "id": "function/753032370",
+        "kind": "function",
+        "name": "_getOptionalPositional",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "JSArray<dynamic> Function(_FunctionParameters)"
+      },
+      "753558090": {
+        "id": "function/753558090",
+        "kind": "function",
+        "name": "_thenAwait",
+        "size": 357,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<#A/*free*/>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "FutureOr<_thenAwait.E> Function(_Future.T)"
+          },
+          {
+            "name": "onError",
+            "type": "[subclass=Closure]",
+            "declaredType": "Function"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_thenAwait$1$2(f, onError, $E) {\n      var result,\n        t1 = this.$ti;\n      t1._bind$1($E)._eval$1(\"1/(2)\")._as(f);\n      result = new A._Future($.Zone__current, $E._eval$1(\"_Future<0>\"));\n      this._addListener$1(new A._FutureListener(result, 19, f, onError, t1._eval$1(\"@<1>\")._bind$1($E)._eval$1(\"_FutureListener<1,2>\")));\n      return result;\n    }",
+        "type": "Future<#A> Function<#A extends Object?>(FutureOr<#A> Function(_Future.T),Function)"
+      },
+      "753586447": {
+        "id": "function/753586447",
+        "kind": "function",
+        "name": "objectHashCode",
+        "size": 188,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "objectHashCode(object) {\n      if (object == null || typeof object != \"object\")\n        return J.get$hashCode$(object);\n      else\n        return A.Primitives_objectHashCode(object);\n    }",
+        "type": "int Function(dynamic)"
       },
       "754498726": {
         "id": "function/754498726",
@@ -12102,31 +16380,30 @@
           "factory": true,
           "external": false
         },
-        "returnType": "Future<Future.T>",
+        "returnType": "Future<#A/*free*/>",
         "inferredReturnType": "[exact=_Future]",
         "parameters": [
           {
             "name": "error",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "Object"
           },
           {
             "name": "stackTrace",
             "type": "[null|subclass=Object]",
-            "declaredType": "StackTrace"
+            "declaredType": "StackTrace?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "Future<Future.T> Function(Object,[StackTrace])",
-        "measurements": null
+        "code": "",
+        "type": "Future<#A> Function<#A extends Object?>(Object,[StackTrace?])"
       },
       "754771250": {
         "id": "function/754771250",
         "kind": "function",
         "name": "DeferredLoadException",
-        "size": 98,
+        "size": 90,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/410333734",
         "children": [],
@@ -12140,16 +16417,43 @@
         "inferredReturnType": "[exact=DeferredLoadException]",
         "parameters": [
           {
-            "name": "_s",
+            "name": "message",
             "type": "[exact=JSString]",
             "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": "DeferredLoadException$: function(_s) {\n  return new P.DeferredLoadException(_s);\n}\n",
-        "type": "dynamic Function(String)",
-        "measurements": null
+        "code": "DeferredLoadException$(message) {\n      return new A.DeferredLoadException(message);\n    }",
+        "type": "dynamic Function(String)"
+      },
+      "755054712": {
+        "id": "function/755054712",
+        "kind": "function",
+        "name": "_Cell.named",
+        "size": 90,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/745154066",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Cell]",
+        "parameters": [
+          {
+            "name": "_name",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 0,
+        "code": "_Cell$named(_name) {\n      var t1 = new A._Cell(_name);\n      return t1._value = t1;\n    }",
+        "type": "dynamic Function(String)"
       },
       "756575134": {
         "id": "function/756575134",
@@ -12181,15 +16485,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function(String,String)",
-        "measurements": null
+        "code": "",
+        "type": "bool Function(String,String)"
       },
       "756812986": {
         "id": "function/756812986",
         "kind": "function",
         "name": "length",
-        "size": 74,
+        "size": 60,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -12204,9 +16507,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$length: function(_) {\n  return this.__js_helper$_length;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$length(_) {\n      return this.__js_helper$_length;\n    }",
+        "type": "int Function()"
       },
       "762030080": {
         "id": "function/762030080",
@@ -12223,53 +16525,84 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [],
         "sideEffects": "SideEffects(reads static; writes static)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "String Function()",
-        "measurements": null
+        "inlinedCount": 3,
+        "code": "",
+        "type": "String Function()"
       },
-      "764768055": {
-        "id": "function/764768055",
+      "764092534": {
+        "id": "function/764092534",
         "kind": "function",
-        "name": "areAssignableMapsV1",
-        "size": 574,
+        "name": "newArrayOrEmpty",
+        "size": 110,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/1070435853",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "s",
+            "name": "length",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "_Utils_newArrayOrEmpty($length) {\n      return $length > 0 ? new Array($length) : init.typeUniverse.sEA;\n    }",
+        "type": "Object? Function(int)"
+      },
+      "765963979": {
+        "id": "function/765963979",
+        "kind": "function",
+        "name": "evalInEnvironment",
+        "size": 417,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           },
           {
-            "name": "t",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "environment",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "areAssignableMapsV1: function(s, t) {\n  var names, t1, i, $name, tType, sType;\n  if (t == null)\n    return true;\n  if (s == null)\n    return false;\n  names = J.JSArray_markFixedList(Object.getOwnPropertyNames(t));\n  for (t1 = names.length, i = 0; i < t1; ++i) {\n    $name = names[i];\n    if (!Object.hasOwnProperty.call(s, $name))\n      return false;\n    tType = t[$name];\n    sType = s[$name];\n    if (!(H.isSubtypeV1(tType, sType) || H.isSubtypeV1(sType, tType)))\n      return false;\n  }\n  return true;\n}\n",
-        "type": "bool Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "_Universe_evalInEnvironment(universe, environment, recipe) {\n      var probe, rti,\n        cache = environment._evalCache;\n      if (cache == null)\n        cache = environment._evalCache = new Map();\n      probe = cache.get(recipe);\n      if (probe != null)\n        return probe;\n      rti = A._Parser_parse(A._Parser_create(universe, environment, recipe, true));\n      cache.set(recipe, rti);\n      return rti;\n    }",
+        "type": "Rti Function(Object?,Rti,String)"
       },
       "766396929": {
         "id": "function/766396929",
         "kind": "function",
         "name": "completeError",
-        "size": 471,
+        "size": 385,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/770824752",
         "children": [],
@@ -12289,21 +16622,20 @@
           },
           {
             "name": "stackTrace",
-            "type": "[null|subclass=Object]",
-            "declaredType": "StackTrace"
+            "type": "[null|subtype=StackTrace]",
+            "declaredType": "StackTrace?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "completeError$2: [function(error, stackTrace) {\n  if (error == null)\n    error = new P.NullThrownError();\n  if (this.future._state !== 0)\n    throw H.wrapException(P.StateError$(\"Future already completed\"));\n  $.Zone__current.toString;\n  this._completeError$2(error, stackTrace);\n}, function(error) {\n  return this.completeError$2(error, null);\n}, \"completeError$1\", \"call$2\", \"call$1\", \"get$completeError\", 4, 2, 14]\n",
-        "type": "void Function(Object,[StackTrace])",
-        "measurements": null
+        "code": "completeError$2(error, stackTrace) {\n      var t1;\n      A.checkNotNullable(error, \"error\", type$.Object);\n      t1 = this.future;\n      if ((t1._state & 30) !== 0)\n        throw A.wrapException(A.StateError$(\"Future already completed\"));\n      if (stackTrace == null)\n        stackTrace = A.AsyncError_defaultStackTrace(error);\n      t1._asyncCompleteError$2(error, stackTrace);\n    }",
+        "type": "void Function(Object,[StackTrace?])"
       },
       "772250195": {
         "id": "function/772250195",
         "kind": "function",
         "name": "checkDeferredIsLoaded",
-        "size": 178,
+        "size": 166,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -12320,18 +16652,12 @@
             "name": "loadId",
             "type": "[null|subclass=Object]",
             "declaredType": "String"
-          },
-          {
-            "name": "uri",
-            "type": "[null|subclass=Object]",
-            "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "checkDeferredIsLoaded: function(loadId, uri) {\n  if (!$.$get$_loadedLibraries().contains$1(0, loadId))\n    throw H.wrapException(new H.DeferredNotLoadedError(uri));\n}\n",
-        "type": "void Function(String,String)",
-        "measurements": null
+        "code": "checkDeferredIsLoaded(loadId) {\n      if (!$.$get$_loadedLibraries().contains$1(0, loadId))\n        throw A.wrapException(new A.DeferredNotLoadedError(loadId));\n    }",
+        "type": "void Function(String)"
       },
       "772606842": {
         "id": "function/772606842",
@@ -12352,15 +16678,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
-        "code": null,
-        "type": "_Future<dynamic> Function()",
-        "measurements": null
+        "code": "",
+        "type": "_Future<dynamic> Function()"
       },
       "773230206": {
         "id": "function/773230206",
         "kind": "function",
         "name": "_TimerImpl",
-        "size": 372,
+        "size": 420,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/32494041",
         "children": [
@@ -12377,7 +16702,7 @@
         "parameters": [
           {
             "name": "milliseconds",
-            "type": "[subclass=JSInt]",
+            "type": "[subclass=JSPositiveInt]",
             "declaredType": "int"
           },
           {
@@ -12388,9 +16713,8 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_TimerImpl$: function(milliseconds, callback) {\n  var t1 = new P._TimerImpl(true, null, 0);\n  t1._TimerImpl$2(milliseconds, callback);\n  return t1;\n}\n",
-        "type": "dynamic Function(int,void Function())",
-        "measurements": null
+        "code": "_TimerImpl$(milliseconds, callback) {\n      var t1 = new A._TimerImpl();\n      t1._TimerImpl$2(milliseconds, callback);\n      return t1;\n    }",
+        "type": "dynamic Function(int,void Function())"
       },
       "773528822": {
         "id": "function/773528822",
@@ -12411,9 +16735,36 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
+      },
+      "777322353": {
+        "id": "function/777322353",
+        "kind": "function",
+        "name": "_isObject",
+        "size": 54,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_isObject(object) {\n      return object != null;\n    }",
+        "type": "bool Function(Object?)"
       },
       "778541068": {
         "id": "function/778541068",
@@ -12434,15 +16785,14 @@
         "parameters": [
           {
             "name": "o",
-            "type": "Union([subclass=JsLinkedHashMap], [subtype=Iterable])",
+            "type": "Union([exact=LinkedHashMapKeyIterable], [subclass=JSArray], [subclass=JsLinkedHashMap], [subclass=_LinkedHashSet])",
             "declaredType": "Object"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
-        "code": "_isToStringVisiting: function(o) {\n  var i, t1;\n  for (i = 0; t1 = $.$get$_toStringVisiting(), i < t1.length; ++i)\n    if (o === t1[i])\n      return true;\n  return false;\n}\n",
-        "type": "bool Function(Object)",
-        "measurements": null
+        "code": "_isToStringVisiting(o) {\n      var t1, i;\n      for (t1 = $._toStringVisiting.length, i = 0; i < t1; ++i)\n        if (o === $._toStringVisiting[i])\n          return true;\n      return false;\n    }",
+        "type": "bool Function(Object)"
       },
       "779765691": {
         "id": "function/779765691",
@@ -12463,38 +16813,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
       },
-      "784650927": {
-        "id": "function/784650927",
+      "781422565": {
+        "id": "function/781422565",
         "kind": "function",
-        "name": "length",
-        "size": 222,
+        "name": "_getFunctionParameters",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/60704969",
+        "parent": "class/214521760",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "int",
-        "inferredReturnType": "[subclass=JSInt]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "get$length: function(_) {\n  var $length, t1;\n  $length = J.get$length$as(this.__internal$_iterable);\n  t1 = this._start;\n  if (t1 >= $length)\n    return 0;\n  return $length - t1;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "returnType": "_FunctionParameters",
+        "inferredReturnType": "[exact=_FunctionParameters]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "_FunctionParameters Function(Rti)"
       },
       "788412943": {
         "id": "function/788412943",
         "kind": "function",
         "name": "throwCyclicInit",
-        "size": 119,
+        "size": 109,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -12515,15 +16869,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "throwCyclicInit: function(staticName) {\n  throw H.wrapException(new P.CyclicInitializationError(staticName));\n}\n",
-        "type": "void Function(String)",
-        "measurements": null
+        "code": "throwCyclicInit(staticName) {\n      throw A.wrapException(new A.CyclicInitializationError(staticName));\n    }",
+        "type": "void Function(String)"
       },
       "789545114": {
         "id": "function/789545114",
         "kind": "function",
         "name": "_writeAll",
-        "size": 563,
+        "size": 497,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/293821936",
         "children": [],
@@ -12554,17 +16907,16 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "StringBuffer__writeAll: function(string, objects, separator) {\n  var iterator = J.get$iterator$a(objects);\n  if (!iterator.moveNext$0())\n    return string;\n  if (separator.length === 0) {\n    do\n      string += H.S(iterator.get$current());\n    while (iterator.moveNext$0());\n  } else {\n    string += H.S(iterator.get$current());\n    for (; iterator.moveNext$0();)\n      string = string + separator + H.S(iterator.get$current());\n  }\n  return string;\n}\n",
-        "type": "String Function(String,Iterable<dynamic>,String)",
-        "measurements": null
+        "code": "StringBuffer__writeAll(string, objects, separator) {\n      var iterator = J.get$iterator$a(objects);\n      if (!iterator.moveNext$0())\n        return string;\n      if (separator.length === 0) {\n        do\n          string += A.S(iterator.get$current());\n        while (iterator.moveNext$0());\n      } else {\n        string += A.S(iterator.get$current());\n        for (; iterator.moveNext$0();)\n          string = string + separator + A.S(iterator.get$current());\n      }\n      return string;\n    }",
+        "type": "String Function(String,Iterable<dynamic>,String)"
       },
-      "791079680": {
-        "id": "function/791079680",
+      "791619288": {
+        "id": "function/791619288",
         "kind": "function",
-        "name": "selfOf",
-        "size": 82,
+        "name": "findErasedType",
+        "size": 686,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/138211367",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
           "static": true,
@@ -12572,26 +16924,58 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
         "parameters": [
           {
-            "name": "closure",
-            "type": "[exact=BoundClosure]",
-            "declaredType": "BoundClosure"
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "cls",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
           }
         ],
-        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "BoundClosure_selfOf: function(closure) {\n  return closure._self;\n}\n",
-        "type": "dynamic Function(BoundClosure)",
-        "measurements": null
+        "code": "_Universe_findErasedType(universe, cls) {\n      var $length, erased, $arguments, i, $interface,\n        metadata = universe.eT,\n        probe = metadata[cls];\n      if (probe == null)\n        return A._Universe_eval(universe, cls, false);\n      else if (typeof probe == \"number\") {\n        $length = probe;\n        erased = A._Universe__lookupTerminalRti(universe, 5, \"#\");\n        $arguments = A._Utils_newArrayOrEmpty($length);\n        for (i = 0; i < $length; ++i)\n          $arguments[i] = erased;\n        $interface = A._Universe__lookupInterfaceRti(universe, cls, $arguments);\n        metadata[cls] = $interface;\n        return $interface;\n      } else\n        return probe;\n    }",
+        "type": "Rti Function(Object?,String)"
+      },
+      "791758355": {
+        "id": "function/791758355",
+        "kind": "function",
+        "name": "_eval",
+        "size": 100,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "recipe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_eval$1(recipe) {\n      return A._Universe_evalInEnvironment(init.typeUniverse, this, recipe);\n    }",
+        "type": "Rti Function(Object?)"
       },
       "793410068": {
         "id": "function/793410068",
         "kind": "function",
         "name": "toString",
-        "size": 124,
+        "size": 120,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/27679401",
         "children": [],
@@ -12606,15 +16990,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  var t1 = this._message;\n  return t1.length === 0 ? \"Error\" : \"Error: \" + t1;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      var t1 = this.__js_helper$_message;\n      return t1.length === 0 ? \"Error\" : \"Error: \" + t1;\n    }",
+        "type": "String Function()"
       },
       "795411795": {
         "id": "function/795411795",
         "kind": "function",
         "name": "matchesErrorTest",
-        "size": 181,
+        "size": 230,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/80405414",
         "children": [],
@@ -12625,7 +17008,7 @@
           "external": false
         },
         "returnType": "bool",
-        "inferredReturnType": "[null|subclass=Object]",
+        "inferredReturnType": "[null|subtype=bool]",
         "parameters": [
           {
             "name": "asyncError",
@@ -12635,15 +17018,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "matchesErrorTest$1: function(asyncError) {\n  if (this.state !== 6)\n    return true;\n  return this.result._zone.runUnary$2(this.callback, asyncError.error);\n}\n",
-        "type": "bool Function(AsyncError)",
-        "measurements": null
+        "code": "matchesErrorTest$1(asyncError) {\n      if ((this.state & 15) !== 6)\n        return true;\n      return this.result._zone.runUnary$2$2(type$.bool_Function_Object._as(this.callback), asyncError.error, type$.bool, type$.Object);\n    }",
+        "type": "bool Function(AsyncError)"
       },
       "796179660": {
         "id": "function/796179660",
         "kind": "function",
         "name": "hashCode",
-        "size": 96,
+        "size": 82,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/86936801",
         "children": [],
@@ -12658,15 +17040,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(receiver) {\n  return H.Primitives_objectHashCode(receiver);\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$hashCode(receiver) {\n      return A.Primitives_objectHashCode(receiver);\n    }",
+        "type": "int Function()"
+      },
+      "796762824": {
+        "id": "function/796762824",
+        "kind": "function",
+        "name": "LateError.localNI",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/43993131",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=LateError]",
+        "parameters": [
+          {
+            "name": "localName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(String)"
       },
       "797212862": {
         "id": "function/797212862",
         "kind": "function",
         "name": "call",
-        "size": 117,
+        "size": 373,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/953553118",
         "children": [],
@@ -12687,15 +17096,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(value) {\n  var t1 = this.target;\n  t1._state = 0;\n  t1._complete$1(value);\n}\n",
-        "type": "Null Function(dynamic)",
-        "measurements": null
+        "code": "call$1(value) {\n      var error, stackTrace, exception,\n        t1 = this.$this;\n      t1._state ^= 2;\n      try {\n        t1._completeWithValue$1(t1.$ti._precomputed1._as(value));\n      } catch (exception) {\n        error = A.unwrapException(exception);\n        stackTrace = A.getTraceFromException(exception);\n        t1._completeError$2(error, stackTrace);\n      }\n    }",
+        "type": "Null Function(dynamic)"
       },
       "797212863": {
         "id": "function/797212863",
         "kind": "function",
         "name": "call",
-        "size": 176,
+        "size": 109,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/953553119",
         "children": [],
@@ -12711,25 +17119,24 @@
           {
             "name": "error",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           },
           {
             "name": "stackTrace",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$2: function(error, stackTrace) {\n  this.target._completeError$2(error, stackTrace);\n}\ncall$1: function(error) {\n  return this.call$2(error, null);\n}\n",
-        "type": "Null Function(dynamic,[dynamic])",
-        "measurements": null
+        "code": "call$2(error, stackTrace) {\n      this.$this._completeError$2(error, type$.StackTrace._as(stackTrace));\n    }",
+        "type": "Null Function(Object,StackTrace)"
       },
       "797212864": {
         "id": "function/797212864",
         "kind": "function",
         "name": "call",
-        "size": 82,
+        "size": 67,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/953553120",
         "children": [],
@@ -12739,43 +17146,112 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  this.target._completeError$2(this.e, this.s);\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "code": "call$0() {\n      this.$this._completeError$2(this.e, this.s);\n    }",
+        "type": "void Function()"
       },
-      "798288240": {
-        "id": "function/798288240",
+      "797484809": {
+        "id": "function/797484809",
         "kind": "function",
-        "name": "isNullType",
+        "name": "_setAsCheckFunction",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/214521760",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
+        "returnType": "void",
+        "inferredReturnType": "[null]",
         "parameters": [
           {
-            "name": "type",
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "fn",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Object?"
           }
         ],
-        "sideEffects": "SideEffects(reads static; writes anything)",
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "801619570": {
+        "id": "function/801619570",
+        "kind": "function",
+        "name": "_lookupBindingRti",
+        "size": 761,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "base",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupBindingRti(universe, base, $arguments) {\n      var newBase, newArguments, key, probe, rti, t1;\n      if (base._kind === 10) {\n        newBase = base._primary;\n        newArguments = base._rest.concat($arguments);\n      } else {\n        newArguments = $arguments;\n        newBase = base;\n      }\n      key = newBase._canonicalRecipe + (\";<\" + A._Universe__canonicalRecipeJoin(newArguments) + \">\");\n      probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      rti = new A.Rti(null, null);\n      rti._kind = 10;\n      rti._primary = newBase;\n      rti._rest = newArguments;\n      rti._canonicalRecipe = key;\n      t1 = A._Universe__installTypeTests(universe, rti);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,Object?)"
+      },
+      "806059380": {
+        "id": "function/806059380",
+        "kind": "function",
+        "name": "_getEvalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function(Object)",
-        "measurements": null
+        "code": "",
+        "type": "Object? Function(Rti)"
       },
       "806420362": {
         "id": "function/806420362",
@@ -12802,9 +17278,74 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function([dynamic])",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function([dynamic])"
+      },
+      "807434881": {
+        "id": "function/807434881",
+        "kind": "function",
+        "name": "_computeSignatureFunctionNewRti",
+        "size": 596,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "functionType",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "isStatic",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "isIntercepted",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure__computeSignatureFunctionNewRti(functionType, isStatic, isIntercepted) {\n      if (typeof functionType == \"number\")\n        return functionType;\n      if (typeof functionType == \"string\") {\n        if (A.boolConversionCheck(isStatic))\n          throw A.wrapException(\"Cannot compute signature for static tearoff.\");\n        return function(recipe, evalOnReceiver) {\n          return function() {\n            return evalOnReceiver(this, recipe);\n          };\n        }(functionType, A.BoundClosure_evalRecipe);\n      }\n      throw A.wrapException(\"Error in functionType of tearoff\");\n    }",
+        "type": "dynamic Function(Object,bool,bool)"
+      },
+      "807601340": {
+        "id": "function/807601340",
+        "kind": "function",
+        "name": "_getNamed",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[exact=JSUnmodifiableArray]",
+        "parameters": [
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "JSArray<dynamic> Function(_FunctionParameters)"
       },
       "808159833": {
         "id": "function/808159833",
@@ -12825,67 +17366,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": null,
-        "type": "int Function()",
-        "measurements": null
-      },
-      "811310425": {
-        "id": "function/811310425",
-        "kind": "function",
-        "name": "call",
-        "size": 447,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "closure/35711406",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "Null",
-        "inferredReturnType": "[null]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "call$0: function() {\n  var t1, t2, error;\n  t1 = this._box_0;\n  t2 = t1.error;\n  if (t2 == null) {\n    error = new P.NullThrownError();\n    t1.error = error;\n    t1 = error;\n  } else\n    t1 = t2;\n  t2 = this.stackTrace;\n  if (t2 == null)\n    throw H.wrapException(t1);\n  error = H.wrapException(t1);\n  error.stack = J.toString$0$(t2);\n  throw error;\n}\n",
-        "type": "Null Function()",
-        "measurements": null
-      },
-      "813370328": {
-        "id": "function/813370328",
-        "kind": "function",
-        "name": "isDartObjectTypeRti",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "type",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads static; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "int Function()"
       },
       "813862273": {
         "id": "function/813862273",
         "kind": "function",
         "name": "internalGet",
-        "size": 384,
+        "size": 360,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -12895,20 +17383,19 @@
           "factory": false,
           "external": false
         },
-        "returnType": "JsLinkedHashMap.V",
+        "returnType": "JsLinkedHashMap.V?",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
             "name": "key",
             "type": "[null|subclass=Object]",
-            "declaredType": "Object"
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "internalGet$1: function(key) {\n  var rest, bucket, index;\n  rest = this.__js_helper$_rest;\n  if (rest == null)\n    return;\n  bucket = this._getTableBucket$2(rest, J.get$hashCode$(key) & 0x3ffffff);\n  index = this.internalFindBucketIndex$2(bucket, key);\n  if (index < 0)\n    return;\n  return bucket[index].hashMapCellValue;\n}\n",
-        "type": "JsLinkedHashMap.V Function(Object)",
-        "measurements": null
+        "code": "internalGet$1(key) {\n      var bucket, index,\n        rest = this.__js_helper$_rest;\n      if (rest == null)\n        return null;\n      bucket = this._getTableBucket$2(rest, J.get$hashCode$(key) & 0x3ffffff);\n      index = this.internalFindBucketIndex$2(bucket, key);\n      if (index < 0)\n        return null;\n      return bucket[index].hashMapCellValue;\n    }",
+        "type": "JsLinkedHashMap.V? Function(Object?)"
       },
       "814002251": {
         "id": "function/814002251",
@@ -12929,15 +17416,36 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function()",
-        "measurements": null
+        "code": "",
+        "type": "String Function()"
+      },
+      "820169204": {
+        "id": "function/820169204",
+        "kind": "function",
+        "name": "_canonicalRecipeOfDynamic",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"@\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
       },
       "820195095": {
         "id": "function/820195095",
         "kind": "function",
         "name": "[]=",
-        "size": 1400,
+        "size": 1306,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -12963,17 +17471,16 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "$indexSet: function(_, key, value) {\n  var strings, nums, rest, hash, bucket, index;\n  if (typeof key === \"string\") {\n    strings = this.__js_helper$_strings;\n    if (strings == null) {\n      strings = this._newHashTable$0();\n      this.__js_helper$_strings = strings;\n    }\n    this.__js_helper$_addHashTableEntry$3(strings, key, value);\n  } else if (typeof key === \"number\" && (key & 0x3ffffff) === key) {\n    nums = this.__js_helper$_nums;\n    if (nums == null) {\n      nums = this._newHashTable$0();\n      this.__js_helper$_nums = nums;\n    }\n    this.__js_helper$_addHashTableEntry$3(nums, key, value);\n  } else {\n    rest = this.__js_helper$_rest;\n    if (rest == null) {\n      rest = this._newHashTable$0();\n      this.__js_helper$_rest = rest;\n    }\n    hash = J.get$hashCode$(key) & 0x3ffffff;\n    bucket = this._getTableBucket$2(rest, hash);\n    if (bucket == null)\n      this._setTableEntry$3(rest, hash, [this.__js_helper$_newLinkedCell$2(key, value)]);\n    else {\n      index = this.internalFindBucketIndex$2(bucket, key);\n      if (index >= 0)\n        bucket[index].hashMapCellValue = value;\n      else\n        bucket.push(this.__js_helper$_newLinkedCell$2(key, value));\n    }\n  }\n}\n",
-        "type": "void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)",
-        "measurements": null
+        "code": "$indexSet(_, key, value) {\n      var strings, nums, rest, hash, bucket, index, _this = this,\n        t1 = A._instanceType(_this);\n      t1._precomputed1._as(key);\n      t1._rest[1]._as(value);\n      if (typeof key == \"string\") {\n        strings = _this.__js_helper$_strings;\n        _this.__js_helper$_addHashTableEntry$3(strings == null ? _this.__js_helper$_strings = _this._newHashTable$0() : strings, key, value);\n      } else if (typeof key == \"number\" && (key & 0x3ffffff) === key) {\n        nums = _this.__js_helper$_nums;\n        _this.__js_helper$_addHashTableEntry$3(nums == null ? _this.__js_helper$_nums = _this._newHashTable$0() : nums, key, value);\n      } else {\n        rest = _this.__js_helper$_rest;\n        if (rest == null)\n          rest = _this.__js_helper$_rest = _this._newHashTable$0();\n        hash = J.get$hashCode$(key) & 0x3ffffff;\n        bucket = _this._getTableBucket$2(rest, hash);\n        if (bucket == null)\n          _this._setTableEntry$3(rest, hash, [_this.__js_helper$_newLinkedCell$2(key, value)]);\n        else {\n          index = _this.internalFindBucketIndex$2(bucket, key);\n          if (index >= 0)\n            bucket[index].hashMapCellValue = value;\n          else\n            bucket.push(_this.__js_helper$_newLinkedCell$2(key, value));\n        }\n      }\n    }",
+        "type": "void Function(Object?,Object?)"
       },
-      "821285776": {
-        "id": "function/821285776",
+      "820496795": {
+        "id": "function/820496795",
         "kind": "function",
-        "name": "getInterceptor",
-        "size": 61,
+        "name": "_nullIs",
+        "size": 509,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/325218131",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
           "static": false,
@@ -12981,20 +17488,90 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
         "parameters": [
           {
-            "name": "object",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "getInterceptor: function(object) {\n  return void 0;\n}\n",
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "_nullIs(testRti) {\n      var t1,\n        kind = testRti._kind;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          if (!(testRti === type$.legacy_Never))\n            if (kind !== 7)\n              t1 = kind === 8 && A._nullIs(testRti._primary) || testRti === type$.Null || testRti === type$.JSNull;\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
+        "type": "bool Function(Rti)"
+      },
+      "821928955": {
+        "id": "function/821928955",
+        "kind": "function",
+        "name": "handleDigit",
+        "size": 322,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [
+          {
+            "name": "i",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "digit",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "source",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_handleDigit(i, digit, source, stack) {\n      var t1, ch,\n        value = digit - 48;\n      for (t1 = source.length; i < t1; ++i) {\n        ch = source.charCodeAt(i);\n        if (!(ch >= 48 && ch <= 57))\n          break;\n        value = value * 10 + (ch - 48);\n      }\n      stack.push(value);\n      return i;\n    }",
+        "type": "int Function(int,int,String,Object?)"
+      },
+      "822673760": {
+        "id": "function/822673760",
+        "kind": "function",
+        "name": "objectKeys",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray<dynamic>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "JSArray<dynamic> Function(Object?)"
       },
       "823929753": {
         "id": "function/823929753",
@@ -13013,11 +17590,10 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads field, static; writes nothing)",
-        "inlinedCount": 3,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "bool Function()"
       },
       "827571674": {
         "id": "function/827571674",
@@ -13033,26 +17609,25 @@
           "factory": false,
           "external": false
         },
-        "returnType": "dynamic",
-        "inferredReturnType": "[subclass=JSInt]",
+        "returnType": "int",
+        "inferredReturnType": "[exact=JSUInt31]",
         "parameters": [
           {
             "name": "value",
-            "type": "[subclass=JSInt]",
+            "type": "[exact=JSUInt31]",
             "declaredType": "dynamic"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "",
+        "type": "int Function(dynamic)"
       },
       "830798781": {
         "id": "function/830798781",
         "kind": "function",
         "name": "_shrBothPositive",
-        "size": 107,
+        "size": 93,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1003011102",
         "children": [],
@@ -13073,15 +17648,42 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "_shrBothPositive$1: function(receiver, other) {\n  return other > 31 ? 0 : receiver >>> other;\n}\n",
-        "type": "num Function(num)",
-        "measurements": null
+        "code": "_shrBothPositive$1(receiver, other) {\n      return other > 31 ? 0 : receiver >>> other;\n    }",
+        "type": "num Function(num)"
+      },
+      "831592736": {
+        "id": "function/831592736",
+        "kind": "function",
+        "name": "_isDartObject",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "bool Function(Object?)"
       },
       "831655802": {
         "id": "function/831655802",
         "kind": "function",
         "name": "_microtaskLoop",
-        "size": 290,
+        "size": 325,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -13096,15 +17698,80 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_microtaskLoop: function() {\n  var t1, t2;\n  for (; t1 = $._nextCallback, t1 != null;) {\n    $._lastPriorityCallback = null;\n    t2 = t1.next;\n    $._nextCallback = t2;\n    if (t2 == null)\n      $._lastCallback = null;\n    t1.callback.call$0();\n  }\n}\n",
-        "type": "void Function()",
-        "measurements": null
+        "code": "_microtaskLoop() {\n      var entry, next;\n      for (entry = $._nextCallback; entry != null; entry = $._nextCallback) {\n        $._lastPriorityCallback = null;\n        next = entry.next;\n        $._nextCallback = next;\n        if (next == null)\n          $._lastCallback = null;\n        entry.callback.call$0();\n      }\n    }",
+        "type": "void Function()"
+      },
+      "832692823": {
+        "id": "function/832692823",
+        "kind": "function",
+        "name": "asInt",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 42,
+        "code": "",
+        "type": "int Function(Object?)"
+      },
+      "834015338": {
+        "id": "function/834015338",
+        "kind": "function",
+        "name": "bind",
+        "size": 547,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "argumentsRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe_bind(universe, environment, argumentsRti) {\n      var argumentsRecipe, probe, rti,\n        cache = environment._bindCache;\n      if (cache == null)\n        cache = environment._bindCache = new Map();\n      argumentsRecipe = argumentsRti._canonicalRecipe;\n      probe = cache.get(argumentsRecipe);\n      if (probe != null)\n        return probe;\n      rti = A._Universe__lookupBindingRti(universe, environment, argumentsRti._kind === 10 ? argumentsRti._rest : [argumentsRti]);\n      cache.set(argumentsRecipe, rti);\n      return rti;\n    }",
+        "type": "Rti Function(Object?,Rti,Rti)"
       },
       "834909172": {
         "id": "function/834909172",
         "kind": "function",
         "name": "current",
-        "size": 75,
+        "size": 61,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/113750884",
         "children": [],
@@ -13119,15 +17786,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$current: function() {\n  return this._collection$_current;\n}\n",
-        "type": "_LinkedHashSetIterator.E Function()",
-        "measurements": null
+        "code": "get$current() {\n      return this._collection$_current;\n    }",
+        "type": "_LinkedHashSetIterator.E Function()"
       },
       "835692712": {
         "id": "function/835692712",
         "kind": "function",
         "name": "_scheduleAsyncCallback",
-        "size": 460,
+        "size": 432,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -13148,15 +17814,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_scheduleAsyncCallback: function(callback) {\n  var newEntry = new P._AsyncCallbackEntry(callback, null);\n  if ($._nextCallback == null) {\n    $._lastCallback = newEntry;\n    $._nextCallback = newEntry;\n    if (!$._isInCallbackLoop)\n      $.$get$_AsyncRun__scheduleImmediateClosure().call$1(P.async___startMicrotaskLoop$closure());\n  } else {\n    $._lastCallback.next = newEntry;\n    $._lastCallback = newEntry;\n  }\n}\n",
-        "type": "void Function(void Function())",
-        "measurements": null
+        "code": "_scheduleAsyncCallback(callback) {\n      var newEntry = new A._AsyncCallbackEntry(callback),\n        lastCallback = $._lastCallback;\n      if (lastCallback == null) {\n        $._nextCallback = $._lastCallback = newEntry;\n        if (!$._isInCallbackLoop)\n          $.$get$_AsyncRun__scheduleImmediateClosure().call$1(A.async___startMicrotaskLoop$closure());\n      } else\n        $._lastCallback = lastCallback.next = newEntry;\n    }",
+        "type": "void Function(void Function())"
       },
       "837956997": {
         "id": "function/837956997",
         "kind": "function",
         "name": "==",
-        "size": 64,
+        "size": 50,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/627219877",
         "children": [],
@@ -13172,14 +17837,13 @@
           {
             "name": "other",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "$eq: function(_, other) {\n  return this === other;\n}\n",
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "$eq(_, other) {\n      return this === other;\n    }",
+        "type": "bool Function(Object)"
       },
       "841192189": {
         "id": "function/841192189",
@@ -13206,9 +17870,30 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(dynamic)"
+      },
+      "842507496": {
+        "id": "function/842507496",
+        "kind": "function",
+        "name": "toString",
+        "size": 109,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/43993131",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0(_) {\n      var t1 = \"LateInitializationError: \" + this.__internal$_message;\n      return t1;\n    }",
+        "type": "String Function()"
       },
       "843997665": {
         "id": "function/843997665",
@@ -13239,16 +17924,15 @@
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "void Function(Iterable<dynamic>,[String])",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Iterable<dynamic>,[String])"
       },
       "848267879": {
         "id": "function/848267879",
         "kind": "function",
         "name": "toString",
-        "size": 81,
+        "size": 67,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/866150578",
         "children": [],
@@ -13263,20 +17947,45 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"RuntimeError: \" + this.message;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return \"RuntimeError: \" + this.message;\n    }",
+        "type": "String Function()"
+      },
+      "848873059": {
+        "id": "function/848873059",
+        "kind": "function",
+        "name": "isLegacyObjectType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 7,
+        "code": "",
+        "type": "bool Function(Rti)"
       },
       "852141617": {
         "id": "function/852141617",
         "kind": "function",
         "name": "completeError",
-        "size": 365,
+        "size": 250,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/850763763",
-        "children": [
-          "closure/741043867"
-        ],
+        "children": [],
         "modifiers": {
           "static": false,
           "const": false,
@@ -13293,44 +18002,91 @@
           },
           {
             "name": "st",
-            "type": "[null|subclass=Object]",
-            "declaredType": "StackTrace"
+            "type": "[null|subtype=StackTrace]",
+            "declaredType": "StackTrace?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "completeError$2: function(e, st) {\n  if (this.isSync)\n    this._completer.completeError$2(e, st);\n  else\n    P.scheduleMicrotask(new P._AsyncAwaitCompleter_completeError_closure(this, e, st));\n}\n",
-        "type": "void Function(Object,[StackTrace])",
-        "measurements": null
+        "code": "completeError$2(e, st) {\n      var t1;\n      if (st == null)\n        st = A.AsyncError_defaultStackTrace(e);\n      t1 = this._future;\n      if (this.isSync)\n        t1._completeError$2(e, st);\n      else\n        t1._asyncCompleteError$2(e, st);\n    }",
+        "type": "void Function(Object,[StackTrace?])"
       },
-      "852972506": {
-        "id": "function/852972506",
+      "852326327": {
+        "id": "function/852326327",
         "kind": "function",
-        "name": "iterator",
-        "size": 108,
+        "name": "arrayAt",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/540398347",
+        "parent": "class/1070435853",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "Iterator<ListIterable.E>",
-        "inferredReturnType": "[exact=ListIterator]",
-        "parameters": [],
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "i",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 44,
+        "code": "",
+        "type": "Object? Function(Object?,int)"
+      },
+      "852359021": {
+        "id": "function/852359021",
+        "kind": "function",
+        "name": "substring",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "start",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "end",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          }
+        ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "get$iterator: function(_) {\n  return new H.ListIterator(this, this.get$length(this), 0, null);\n}\n",
-        "type": "Iterator<ListIterable.E> Function()",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(String,int,int)"
       },
       "853169304": {
         "id": "function/853169304",
         "kind": "function",
         "name": "call",
-        "size": 96,
+        "size": 82,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/181809904",
         "children": [],
@@ -13340,20 +18096,19 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  P._Future__propagateToListeners(this.$this, this.listener);\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "code": "call$0() {\n      A._Future__propagateToListeners(this.$this, this.listener);\n    }",
+        "type": "void Function()"
       },
       "853973218": {
         "id": "function/853973218",
         "kind": "function",
         "name": "_reverseListeners",
-        "size": 292,
+        "size": 268,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
@@ -13363,26 +18118,25 @@
           "factory": false,
           "external": false
         },
-        "returnType": "_FutureListener<dynamic,dynamic>",
+        "returnType": "_FutureListener<dynamic,dynamic>?",
         "inferredReturnType": "[null|exact=_FutureListener]",
         "parameters": [
           {
             "name": "listeners",
             "type": "[null|exact=_FutureListener]",
-            "declaredType": "_FutureListener<dynamic,dynamic>"
+            "declaredType": "_FutureListener<dynamic,dynamic>?"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 0,
-        "code": "_reverseListeners$1: function(listeners) {\n  var current, prev, next;\n  for (current = listeners, prev = null; current != null; prev = current, current = next) {\n    next = current._nextListener;\n    current._nextListener = prev;\n  }\n  return prev;\n}\n",
-        "type": "_FutureListener<dynamic,dynamic> Function(_FutureListener<dynamic,dynamic>)",
-        "measurements": null
+        "code": "_reverseListeners$1(listeners) {\n      var current, prev, next;\n      for (current = listeners, prev = null; current != null; prev = current, current = next) {\n        next = current._nextListener;\n        current._nextListener = prev;\n      }\n      return prev;\n    }",
+        "type": "_FutureListener<dynamic,dynamic>? Function(_FutureListener<dynamic,dynamic>?)"
       },
       "854200700": {
         "id": "function/854200700",
         "kind": "function",
         "name": "hashCode",
-        "size": 80,
+        "size": 510,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1003011102",
         "children": [],
@@ -13393,19 +18147,18 @@
           "external": false
         },
         "returnType": "int",
-        "inferredReturnType": "[subclass=JSInt]",
+        "inferredReturnType": "[exact=JSUInt31]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(receiver) {\n  return receiver & 0x1FFFFFFF;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$hashCode(receiver) {\n      var absolute, floorLog2, factor, scaled,\n        intValue = receiver | 0;\n      if (receiver === intValue)\n        return intValue & 536870911;\n      absolute = Math.abs(receiver);\n      floorLog2 = Math.log(absolute) / 0.6931471805599453 | 0;\n      factor = Math.pow(2, floorLog2);\n      scaled = absolute < 1 ? absolute / factor : factor / absolute;\n      return ((scaled * 9007199254740992 | 0) + (scaled * 3542243181176521 | 0)) * 599197 + floorLog2 * 1259 & 536870911;\n    }",
+        "type": "int Function()"
       },
       "860159722": {
         "id": "function/860159722",
         "kind": "function",
         "name": "hashCode",
-        "size": 100,
+        "size": 86,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/351911148",
         "children": [],
@@ -13420,15 +18173,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(_) {\n  return P.Object.prototype.get$hashCode.call(this, this);\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$hashCode(_) {\n      return A.Object.prototype.get$hashCode.call(this, this);\n    }",
+        "type": "int Function()"
       },
       "864228238": {
         "id": "function/864228238",
         "kind": "function",
         "name": "printString",
-        "size": 460,
+        "size": 450,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/238986171",
         "children": [],
@@ -13449,15 +18201,196 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "printString: function(string) {\n  if (typeof dartPrint == \"function\") {\n    dartPrint(string);\n    return;\n  }\n  if (typeof console == \"object\" && typeof console.log != \"undefined\") {\n    console.log(string);\n    return;\n  }\n  if (typeof window == \"object\")\n    return;\n  if (typeof print == \"function\") {\n    print(string);\n    return;\n  }\n  throw \"Unable to print message: \" + String(string);\n}\n",
-        "type": "void Function(String)",
-        "measurements": null
+        "code": "printString(string) {\n      if (typeof dartPrint == \"function\") {\n        dartPrint(string);\n        return;\n      }\n      if (typeof console == \"object\" && typeof console.log != \"undefined\") {\n        console.log(string);\n        return;\n      }\n      if (typeof window == \"object\")\n        return;\n      if (typeof print == \"function\") {\n        print(string);\n        return;\n      }\n      throw \"Unable to print message: \" + String(string);\n    }",
+        "type": "void Function(String)"
+      },
+      "864812824": {
+        "id": "function/864812824",
+        "kind": "function",
+        "name": "_lookupGenericFunctionRti",
+        "size": 446,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "baseFunctionType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "bounds",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__lookupGenericFunctionRti(universe, baseFunctionType, bounds, normalize) {\n      var t1,\n        key = baseFunctionType._canonicalRecipe + (\"<\" + A._Universe__canonicalRecipeJoin(bounds) + \">\"),\n        probe = universe.eC.get(key);\n      if (probe != null)\n        return probe;\n      t1 = A._Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize);\n      universe.eC.set(key, t1);\n      return t1;\n    }",
+        "type": "Rti Function(Object?,Rti,Object?,bool)"
+      },
+      "864835321": {
+        "id": "function/864835321",
+        "kind": "function",
+        "name": "_asString",
+        "size": 165,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asString(object) {\n      if (typeof object == \"string\")\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String\"));\n    }",
+        "type": "String Function(Object?)"
+      },
+      "864971496": {
+        "id": "function/864971496",
+        "kind": "function",
+        "name": "_setIsTestFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "fn",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
+      },
+      "865184799": {
+        "id": "function/865184799",
+        "kind": "function",
+        "name": "_generalAsCheckImplementation",
+        "size": 220,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_generalAsCheckImplementation(object) {\n      var testRti = this;\n      if (object == null)\n        return object;\n      else if (testRti._is(object))\n        return object;\n      A._failedAsCheck(object, testRti);\n    }",
+        "type": "Object? Function(Object?)"
+      },
+      "866251913": {
+        "id": "function/866251913",
+        "kind": "function",
+        "name": "_canonicalRecipeOfErased",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"#\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "String Function()"
+      },
+      "869103502": {
+        "id": "function/869103502",
+        "kind": "function",
+        "name": "add",
+        "size": 211,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JSArray.E"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "add$1(receiver, value) {\n      A._arrayInstanceType(receiver)._precomputed1._as(value);\n      if (!!receiver.fixed$length)\n        A.throwExpression(A.UnsupportedError$(\"add\"));\n      receiver.push(value);\n    }",
+        "type": "void Function(Object?)"
       },
       "869814859": {
         "id": "function/869814859",
         "kind": "function",
         "name": "call",
-        "size": 65,
+        "size": 51,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/69029087",
         "children": [],
@@ -13478,9 +18411,8 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "call$1: function(_) {\n  return this.originalSource;\n}\n",
-        "type": "_Future<dynamic> Function(dynamic)",
-        "measurements": null
+        "code": "call$1(_) {\n      return this.originalSource;\n    }",
+        "type": "_Future<dynamic> Function(dynamic)"
       },
       "870367819": {
         "id": "function/870367819",
@@ -13507,15 +18439,77 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "bool Function(dynamic)"
+      },
+      "871707959": {
+        "id": "function/871707959",
+        "kind": "function",
+        "name": "_asyncCompleteWithValue",
+        "size": 618,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/235259528"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_Future.T"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asyncCompleteWithValue$1(value) {\n      var _this = this;\n      _this.$ti._precomputed1._as(value);\n      _this._state ^= 2;\n      A._rootScheduleMicrotask(null, null, _this._zone, type$.void_Function._as(new A._Future__asyncCompleteWithValue_closure(_this, value)));\n    }",
+        "type": "void Function(Object?)"
+      },
+      "873774381": {
+        "id": "function/873774381",
+        "kind": "function",
+        "name": "isNotIdentical",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "bool Function(Object?,Object?)"
       },
       "873863767": {
         "id": "function/873863767",
         "kind": "function",
         "name": "objectTypeName",
-        "size": 1680,
+        "size": 98,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/354160010",
         "children": [],
@@ -13526,7 +18520,7 @@
           "external": false
         },
         "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
+        "inferredReturnType": "[null|exact=JSString]",
         "parameters": [
           {
             "name": "object",
@@ -13536,15 +18530,42 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Primitives_objectTypeName: function(object) {\n  var interceptor, interceptorConstructor, interceptorConstructorName, $name, dispatchName, objectConstructor, match, decompiledName, t1;\n  interceptor = J.getInterceptor(object);\n  interceptorConstructor = interceptor.constructor;\n  if (typeof interceptorConstructor == \"function\") {\n    interceptorConstructorName = interceptorConstructor.name;\n    $name = typeof interceptorConstructorName === \"string\" ? interceptorConstructorName : null;\n  } else\n    $name = null;\n  if ($name == null || interceptor === C.Interceptor_methods || !!J.getInterceptor(object).$isUnknownJavaScriptObject) {\n    dispatchName = C.JS_CONST_u2C(object);\n    if (dispatchName === \"Object\") {\n      objectConstructor = object.constructor;\n      if (typeof objectConstructor == \"function\") {\n        match = String(objectConstructor).match(/^\\s*function\\s*([\\w$]*)\\s*\\(/);\n        decompiledName = match == null ? null : match[1];\n        if (typeof decompiledName === \"string\" && /^\\w+$/.test(decompiledName))\n          $name = decompiledName;\n      }\n      if ($name == null)\n        $name = dispatchName;\n    } else\n      $name = dispatchName;\n  }\n  $name = $name;\n  if ($name.length > 1 && C.JSString_methods._codeUnitAt$1($name, 0) === 36)\n    $name = C.JSString_methods.substring$1($name, 1);\n  t1 = H.joinArgumentsV1(H.getRuntimeTypeInfo(object), 0, null);\n  return function(str, names) {\n    return str.replace(/[^<,> ]+/g, function(m) {\n      return names[m] || m;\n    });\n  }($name + t1, init.mangledGlobalNames);\n}\n",
-        "type": "String Function(Object)",
-        "measurements": null
+        "code": "Primitives_objectTypeName(object) {\n      return A.Primitives__objectTypeNameNewRti(object);\n    }",
+        "type": "String Function(Object)"
+      },
+      "875358741": {
+        "id": "function/875358741",
+        "kind": "function",
+        "name": "normalize",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "bool Function(Object?)"
       },
       "878987098": {
         "id": "function/878987098",
         "kind": "function",
         "name": "hashCode",
-        "size": 60,
+        "size": 46,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/418854932",
         "children": [],
@@ -13559,15 +18580,130 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$hashCode: function(receiver) {\n  return 0;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$hashCode(receiver) {\n      return 0;\n    }",
+        "type": "int Function()"
+      },
+      "881419002": {
+        "id": "function/881419002",
+        "kind": "function",
+        "name": "isBottomType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(Rti)"
+      },
+      "883935916": {
+        "id": "function/883935916",
+        "kind": "function",
+        "name": "_lookupFutureRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "base",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti Function(Object?,Rti)"
+      },
+      "885353355": {
+        "id": "function/885353355",
+        "kind": "function",
+        "name": "_setKind",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "kind",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 9,
+        "code": "",
+        "type": "void Function(Rti,int)"
+      },
+      "885556629": {
+        "id": "function/885556629",
+        "kind": "function",
+        "name": "call",
+        "size": 134,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/192019265",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0() {\n      var error = A.wrapException(this.error);\n      error.stack = J.toString$0$(this.stackTrace);\n      throw error;\n    }",
+        "type": "void Function()"
       },
       "885768717": {
         "id": "function/885768717",
         "kind": "function",
         "name": "ArgumentError",
-        "size": 0,
+        "size": 101,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
@@ -13584,19 +18720,23 @@
             "name": "message",
             "type": "[null|exact=JSString]",
             "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "Value([null|exact=JSString], value: \"onError\")",
+            "declaredType": "String?"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function([dynamic])",
-        "measurements": null
+        "code": "ArgumentError$(message, $name) {\n      return new A.ArgumentError(false, null, $name, message);\n    }",
+        "type": "dynamic Function([dynamic,String?])"
       },
       "887884267": {
         "id": "function/887884267",
         "kind": "function",
         "name": "_schedulePriorityAsyncCallback",
-        "size": 656,
+        "size": 719,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
@@ -13617,15 +18757,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_schedulePriorityAsyncCallback: function(callback) {\n  var t1, entry, t2;\n  t1 = $._nextCallback;\n  if (t1 == null) {\n    P._scheduleAsyncCallback(callback);\n    $._lastPriorityCallback = $._lastCallback;\n    return;\n  }\n  entry = new P._AsyncCallbackEntry(callback, null);\n  t2 = $._lastPriorityCallback;\n  if (t2 == null) {\n    entry.next = t1;\n    $._lastPriorityCallback = entry;\n    $._nextCallback = entry;\n  } else {\n    entry.next = t2.next;\n    t2.next = entry;\n    $._lastPriorityCallback = entry;\n    if (entry.next == null)\n      $._lastCallback = entry;\n  }\n}\n",
-        "type": "void Function(void Function())",
-        "measurements": null
+        "code": "_schedulePriorityAsyncCallback(callback) {\n      var entry, lastPriorityCallback, next,\n        t1 = $._nextCallback;\n      if (t1 == null) {\n        A._scheduleAsyncCallback(callback);\n        $._lastPriorityCallback = $._lastCallback;\n        return;\n      }\n      entry = new A._AsyncCallbackEntry(callback);\n      lastPriorityCallback = $._lastPriorityCallback;\n      if (lastPriorityCallback == null) {\n        entry.next = t1;\n        $._nextCallback = $._lastPriorityCallback = entry;\n      } else {\n        next = lastPriorityCallback.next;\n        entry.next = next;\n        $._lastPriorityCallback = lastPriorityCallback.next = entry;\n        if (next == null)\n          $._lastCallback = entry;\n      }\n    }",
+        "type": "void Function(void Function())"
       },
       "888466063": {
         "id": "function/888466063",
         "kind": "function",
         "name": "registerBinaryCallback",
-        "size": 65,
+        "size": 131,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/566341130",
         "children": [],
@@ -13635,7 +18774,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "registerBinaryCallback.R Function(registerBinaryCallback.T1,registerBinaryCallback.T2)",
+        "returnType": "#A/*free*/ Function(#B/*free*/,#C/*free*/)",
         "inferredReturnType": "[subclass=Closure]",
         "parameters": [
           {
@@ -13646,15 +18785,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "registerBinaryCallback$1: function(f) {\n  return f;\n}\n",
-        "type": "registerBinaryCallback.R Function(registerBinaryCallback.T1,registerBinaryCallback.T2) Function(registerBinaryCallback.R Function(registerBinaryCallback.T1,registerBinaryCallback.T2))",
-        "measurements": null
+        "code": "registerBinaryCallback$3$1(f, $R, T1, T2) {\n      return $R._eval$1(\"@<0>\")._bind$1(T1)._bind$1(T2)._eval$1(\"1(2,3)\")._as(f);\n    }",
+        "type": "#A Function(#B,#C) Function<#A extends Object?,#B extends Object?,#C extends Object?>(#A Function(#B,#C))"
       },
       "889342435": {
         "id": "function/889342435",
         "kind": "function",
         "name": "_getTableBucket",
-        "size": 76,
+        "size": 62,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -13664,8 +18802,8 @@
           "factory": false,
           "external": false
         },
-        "returnType": "List<LinkedHashMapCell>",
-        "inferredReturnType": "[null|subclass=Object]",
+        "returnType": "List<LinkedHashMapCell>?",
+        "inferredReturnType": "[null|subclass=JSArray]",
         "parameters": [
           {
             "name": "table",
@@ -13680,49 +18818,47 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "_getTableBucket$2: function(table, key) {\n  return table[key];\n}\n",
-        "type": "List<LinkedHashMapCell> Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "_getTableBucket$2(table, key) {\n      return table[key];\n    }",
+        "type": "List<LinkedHashMapCell>? Function(dynamic,dynamic)"
       },
-      "890739228": {
-        "id": "function/890739228",
+      "890489632": {
+        "id": "function/890489632",
         "kind": "function",
-        "name": "formatType",
+        "name": "_rtiEval",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/354160010",
+        "parent": "library/579882441",
         "children": [],
         "modifiers": {
-          "static": true,
+          "static": false,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "String",
-        "inferredReturnType": "[exact=JSString]",
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
         "parameters": [
           {
-            "name": "className",
-            "type": "[exact=JSString]",
-            "declaredType": "String"
+            "name": "environment",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
           },
           {
-            "name": "typeArguments",
-            "type": "[null|subclass=Object]",
-            "declaredType": "List<dynamic>"
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(String,List<dynamic>)",
-        "measurements": null
+        "inlinedCount": 2,
+        "code": "",
+        "type": "Rti Function(Rti,String)"
       },
       "891910474": {
         "id": "function/891910474",
         "kind": "function",
         "name": "toString",
-        "size": 77,
+        "size": 63,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/476286669",
         "children": [],
@@ -13737,9 +18873,69 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return P.MapBase_mapToString(this);\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return A.MapBase_mapToString(this);\n    }",
+        "type": "String Function()"
+      },
+      "892227919": {
+        "id": "function/892227919",
+        "kind": "function",
+        "name": "evalInInstance",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "instance",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "recipe",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,String)"
+      },
+      "893622437": {
+        "id": "function/893622437",
+        "kind": "function",
+        "name": "typeRules",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "Object Function(Object?)"
       },
       "895978326": {
         "id": "function/895978326",
@@ -13766,15 +18962,42 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "dynamic Function(void Function())",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(void Function())"
+      },
+      "896138477": {
+        "id": "function/896138477",
+        "kind": "function",
+        "name": "_simpleSpecializedIsTest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Object? Function(Rti)"
       },
       "897413385": {
         "id": "function/897413385",
         "kind": "function",
         "name": "_getTableCell",
-        "size": 74,
+        "size": 60,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -13784,8 +19007,8 @@
           "factory": false,
           "external": false
         },
-        "returnType": "LinkedHashMapCell",
-        "inferredReturnType": "[null|subclass=Object]",
+        "returnType": "LinkedHashMapCell?",
+        "inferredReturnType": "[null|exact=LinkedHashMapCell]",
         "parameters": [
           {
             "name": "table",
@@ -13800,15 +19023,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "_getTableCell$2: function(table, key) {\n  return table[key];\n}\n",
-        "type": "LinkedHashMapCell Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "_getTableCell$2(table, key) {\n      return table[key];\n    }",
+        "type": "LinkedHashMapCell? Function(dynamic,dynamic)"
       },
       "899124813": {
         "id": "function/899124813",
         "kind": "function",
         "name": "cspForwardInterceptedCall",
-        "size": 1830,
+        "size": 2256,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/317291728",
         "children": [],
@@ -13827,14 +19049,14 @@
             "declaredType": "int"
           },
           {
-            "name": "isSuperCall",
-            "type": "[exact=JSBool]",
+            "name": "needsDirectAccess",
+            "type": "[null|subtype=bool]",
             "declaredType": "bool"
           },
           {
-            "name": "name",
+            "name": "stubName",
             "type": "[null|exact=JSString]",
-            "declaredType": "String"
+            "declaredType": "String?"
           },
           {
             "name": "function",
@@ -13844,15 +19066,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_cspForwardInterceptedCall: function(arity, isSuperCall, $name, $function) {\n  var getSelf, getReceiver;\n  getSelf = H.BoundClosure_selfOf;\n  getReceiver = H.BoundClosure_receiverOf;\n  switch (isSuperCall ? -1 : arity) {\n    case 0:\n      throw H.wrapException(new H.RuntimeError(\"Intercepted function with no arguments.\"));\n    case 1:\n      return function(n, s, r) {\n        return function() {\n          return s(this)[n](r(this));\n        };\n      }($name, getSelf, getReceiver);\n    case 2:\n      return function(n, s, r) {\n        return function(a) {\n          return s(this)[n](r(this), a);\n        };\n      }($name, getSelf, getReceiver);\n    case 3:\n      return function(n, s, r) {\n        return function(a, b) {\n          return s(this)[n](r(this), a, b);\n        };\n      }($name, getSelf, getReceiver);\n    case 4:\n      return function(n, s, r) {\n        return function(a, b, c) {\n          return s(this)[n](r(this), a, b, c);\n        };\n      }($name, getSelf, getReceiver);\n    case 5:\n      return function(n, s, r) {\n        return function(a, b, c, d) {\n          return s(this)[n](r(this), a, b, c, d);\n        };\n      }($name, getSelf, getReceiver);\n    case 6:\n      return function(n, s, r) {\n        return function(a, b, c, d, e) {\n          return s(this)[n](r(this), a, b, c, d, e);\n        };\n      }($name, getSelf, getReceiver);\n    default:\n      return function(f, s, r, a) {\n        return function() {\n          a = [r(this)];\n          Array.prototype.push.apply(a, arguments);\n          return f.apply(s(this), a);\n        };\n      }($function, getSelf, getReceiver);\n  }\n}\n",
-        "type": "dynamic Function(int,bool,String,dynamic)",
-        "measurements": null
+        "code": "Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function) {\n      var getReceiver = A.BoundClosure_receiverOf,\n        getInterceptor = A.BoundClosure_interceptorOf;\n      switch (A.boolConversionCheck(needsDirectAccess) ? -1 : arity) {\n        case 0:\n          throw A.wrapException(new A.RuntimeError(\"Intercepted function with no arguments.\"));\n        case 1:\n          return function(entry, interceptorOf, receiverOf) {\n            return function() {\n              return interceptorOf(this)[entry](receiverOf(this));\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 2:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a) {\n              return interceptorOf(this)[entry](receiverOf(this), a);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 3:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 4:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 5:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        case 6:\n          return function(entry, interceptorOf, receiverOf) {\n            return function(a, b, c, d, e) {\n              return interceptorOf(this)[entry](receiverOf(this), a, b, c, d, e);\n            };\n          }(stubName, getInterceptor, getReceiver);\n        default:\n          return function(f, interceptorOf, receiverOf) {\n            return function() {\n              var a = [receiverOf(this)];\n              Array.prototype.push.apply(a, arguments);\n              return f.apply(interceptorOf(this), a);\n            };\n          }($function, getInterceptor, getReceiver);\n      }\n    }",
+        "type": "dynamic Function(int,bool,String?,dynamic)"
       },
       "899674954": {
         "id": "function/899674954",
         "kind": "function",
         "name": "call",
-        "size": 88,
+        "size": 74,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/385965656",
         "children": [],
@@ -13862,14 +19083,13 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  P._Future__chainCoreFuture(this.value, this.$this);\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "code": "call$0() {\n      A._Future__chainCoreFuture(this.value, this.$this);\n    }",
+        "type": "void Function()"
       },
       "901078366": {
         "id": "function/901078366",
@@ -13894,11 +19114,10 @@
             "declaredType": "_Future.T"
           }
         ],
-        "sideEffects": "SideEffects(reads static; writes field)",
-        "inlinedCount": 4,
-        "code": null,
-        "type": "void Function(_Future.T)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 3,
+        "code": "",
+        "type": "void Function(Object?)"
       },
       "904115316": {
         "id": "function/904115316",
@@ -13914,7 +19133,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "registerUnaryCallback.R Function(registerUnaryCallback.T)",
+        "returnType": "#A/*free*/ Function(#B/*free*/)",
         "inferredReturnType": "[subclass=Closure]",
         "parameters": [
           {
@@ -13925,15 +19144,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "registerUnaryCallback.R Function(registerUnaryCallback.T) Function(registerUnaryCallback.R Function(registerUnaryCallback.T))",
-        "measurements": null
+        "code": "",
+        "type": "#A Function(#B) Function<#A extends Object?,#B extends Object?>(#A Function(#B))"
       },
       "906797235": {
         "id": "function/906797235",
         "kind": "function",
         "name": "receiverOf",
-        "size": 90,
+        "size": 72,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/138211367",
         "children": [],
@@ -13948,21 +19166,20 @@
         "parameters": [
           {
             "name": "closure",
-            "type": "[exact=BoundClosure]",
+            "type": "[null|exact=BoundClosure]",
             "declaredType": "BoundClosure"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
-        "code": "BoundClosure_receiverOf: function(closure) {\n  return closure._receiver;\n}\n",
-        "type": "dynamic Function(BoundClosure)",
-        "measurements": null
+        "code": "BoundClosure_receiverOf(closure) {\n      return closure._receiver;\n    }",
+        "type": "dynamic Function(BoundClosure)"
       },
       "906921796": {
         "id": "function/906921796",
         "kind": "function",
         "name": "quoteStringForRegExp",
-        "size": 0,
+        "size": 164,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -13982,16 +19199,15 @@
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "quoteStringForRegExp(string) {\n      if (/[[\\]{}()*+?.\\\\^$|]/.test(string))\n        return string.replace(/[[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\");\n      return string;\n    }",
+        "type": "dynamic Function(dynamic)"
       },
       "907920633": {
         "id": "function/907920633",
         "kind": "function",
         "name": "call",
-        "size": 86,
+        "size": 72,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/745039293",
         "children": [],
@@ -14012,15 +19228,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(result) {\n  return this.bodyFunction.call$2(0, result);\n}\n",
-        "type": "void Function(dynamic)",
-        "measurements": null
+        "code": "call$1(result) {\n      return this.bodyFunction.call$2(0, result);\n    }",
+        "type": "void Function(dynamic)"
       },
       "907920634": {
         "id": "function/907920634",
         "kind": "function",
         "name": "call",
-        "size": 131,
+        "size": 139,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/745039294",
         "children": [],
@@ -14046,9 +19261,102 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$2: function(error, stackTrace) {\n  this.bodyFunction.call$2(1, new H.ExceptionAndStackTrace(error, stackTrace));\n}\n",
-        "type": "Null Function(dynamic,StackTrace)",
-        "measurements": null
+        "code": "call$2(error, stackTrace) {\n      this.bodyFunction.call$2(1, new A.ExceptionAndStackTrace(error, type$.StackTrace._as(stackTrace)));\n    }",
+        "type": "Null Function(dynamic,StackTrace)"
+      },
+      "911398026": {
+        "id": "function/911398026",
+        "kind": "function",
+        "name": "_asBoolS",
+        "size": 249,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool?",
+        "inferredReturnType": "[null|exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asBoolS(object) {\n      if (true === object)\n        return true;\n      if (false === object)\n        return false;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"bool\"));\n    }",
+        "type": "bool? Function(dynamic)"
+      },
+      "911422554": {
+        "id": "function/911422554",
+        "kind": "function",
+        "name": "_isBool",
+        "size": 73,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_isBool(object) {\n      return true === object || false === object;\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "916119111": {
+        "id": "function/916119111",
+        "kind": "function",
+        "name": "mapSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "cache",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[null|exact=JSString]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "value",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 12,
+        "code": "",
+        "type": "void Function(Object?,Object?,Object?)"
       },
       "919469907": {
         "id": "function/919469907",
@@ -14067,17 +19375,16 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
       "920500080": {
         "id": "function/920500080",
         "kind": "function",
         "name": "_findBucketIndex",
-        "size": 291,
+        "size": 263,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -14101,45 +19408,21 @@
             "declaredType": "dynamic"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 0,
-        "code": "_findBucketIndex$2: function(bucket, element) {\n  var $length, i;\n  if (bucket == null)\n    return -1;\n  $length = bucket.length;\n  for (i = 0; i < $length; ++i)\n    if (J.$eq$(bucket[i]._element, element))\n      return i;\n  return -1;\n}\n",
-        "type": "int Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "_findBucketIndex$2(bucket, element) {\n      var $length, i;\n      if (bucket == null)\n        return -1;\n      $length = bucket.length;\n      for (i = 0; i < $length; ++i)\n        if (J.$eq$(bucket[i]._element, element))\n          return i;\n      return -1;\n    }",
+        "type": "int Function(dynamic,dynamic)"
       },
-      "921486255": {
-        "id": "function/921486255",
+      "922651191": {
+        "id": "function/922651191",
         "kind": "function",
-        "name": "main",
-        "size": 973,
+        "name": "handleOptionalGroup",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/934372066",
+        "parent": "class/926198907",
         "children": [],
         "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "Future<void>",
-        "inferredReturnType": "[exact=_Future]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "main: function() {\n  var $async$goto = 0, $async$completer = P._makeAsyncAwaitCompleter(null);\n  var $async$main = P._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {\n    if ($async$errorCode === 1)\n      return P._asyncRethrow($async$result, $async$completer);\n    while (true)\n      switch ($async$goto) {\n        case 0:\n          // Function start\n          $async$goto = 2;\n          return P._asyncAwait(H.loadDeferredLibrary(\"deferred_import\"), $async$main);\n        case 2:\n          // returning from await.\n          H.checkDeferredIsLoaded(\"deferred_import\", \"file:///usr/local/google/home/lorenvs/git/dart2js_info/test/hello_world_deferred/deferred_import.dart\");\n          H.printString(C.C_Deferred);\n          // implicit return\n          return P._asyncReturn(null, $async$completer);\n      }\n  });\n  return P._asyncStartSync($async$main, $async$completer);\n}\n",
-        "type": "Future<void> Function()",
-        "measurements": null
-      },
-      "921677904": {
-        "id": "function/921677904",
-        "kind": "function",
-        "name": "_iterablePartsToStrings",
-        "size": 2548,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/754126564",
-        "children": [],
-        "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
@@ -14148,27 +19431,26 @@
         "inferredReturnType": "[null]",
         "parameters": [
           {
-            "name": "iterable",
-            "type": "[subclass=Iterable]",
-            "declaredType": "Iterable<dynamic>"
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           },
           {
-            "name": "parts",
-            "type": "Container([exact=JSExtendableArray], element: [exact=JSString], length: null)",
-            "declaredType": "List<dynamic>"
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "_iterablePartsToStrings: function(iterable, parts) {\n  var it, $length, count, next, ultimateString, penultimateString, penultimate, ultimate, ultimate0, elision;\n  it = iterable.get$iterator(iterable);\n  $length = 0;\n  count = 0;\n  while (true) {\n    if (!($length < 80 || count < 3))\n      break;\n    if (!it.moveNext$0())\n      return;\n    next = H.S(it.get$current());\n    parts.push(next);\n    $length += next.length + 2;\n    ++count;\n  }\n  if (!it.moveNext$0()) {\n    if (count <= 5)\n      return;\n    if (0 >= parts.length)\n      return H.ioore(parts, -1);\n    ultimateString = parts.pop();\n    if (0 >= parts.length)\n      return H.ioore(parts, -1);\n    penultimateString = parts.pop();\n  } else {\n    penultimate = it.get$current();\n    ++count;\n    if (!it.moveNext$0()) {\n      if (count <= 4) {\n        parts.push(H.S(penultimate));\n        return;\n      }\n      ultimateString = H.S(penultimate);\n      if (0 >= parts.length)\n        return H.ioore(parts, -1);\n      penultimateString = parts.pop();\n      $length += ultimateString.length + 2;\n    } else {\n      ultimate = it.get$current();\n      ++count;\n      for (; it.moveNext$0(); penultimate = ultimate, ultimate = ultimate0) {\n        ultimate0 = it.get$current();\n        ++count;\n        if (count > 100) {\n          while (true) {\n            if (!($length > 75 && count > 3))\n              break;\n            if (0 >= parts.length)\n              return H.ioore(parts, -1);\n            $length -= parts.pop().length + 2;\n            --count;\n          }\n          parts.push(\"...\");\n          return;\n        }\n      }\n      penultimateString = H.S(penultimate);\n      ultimateString = H.S(ultimate);\n      $length += ultimateString.length + penultimateString.length + 4;\n    }\n  }\n  if (count > parts.length + 2) {\n    $length += 5;\n    elision = \"...\";\n  } else\n    elision = null;\n  while (true) {\n    if (!($length > 80 && parts.length > 3))\n      break;\n    if (0 >= parts.length)\n      return H.ioore(parts, -1);\n    $length -= parts.pop().length + 2;\n    if (elision == null) {\n      $length += 5;\n      elision = \"...\";\n    }\n  }\n  if (elision != null)\n    parts.push(elision);\n  parts.push(penultimateString);\n  parts.push(ultimateString);\n}\n",
-        "type": "void Function(Iterable<dynamic>,List<dynamic>)",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
       },
       "922840913": {
         "id": "function/922840913",
         "kind": "function",
         "name": "forwardInterceptedCallTo",
-        "size": 1512,
+        "size": 1560,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/317291728",
         "children": [],
@@ -14182,27 +19464,132 @@
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
-            "name": "receiver",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "stubName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
           },
           {
             "name": "function",
             "type": "[null|subclass=Object]",
             "declaredType": "dynamic"
+          },
+          {
+            "name": "needsDirectAccess",
+            "type": "[null|subtype=bool]",
+            "declaredType": "bool"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "Closure_forwardInterceptedCallTo: function(receiver, $function) {\n  var t1, t2, stubName, arity, lookedUpFunction, t3, t4, $arguments;\n  t1 = $.BoundClosure_selfFieldNameCache;\n  if (t1 == null) {\n    t1 = H.BoundClosure_computeFieldNamed(\"self\");\n    $.BoundClosure_selfFieldNameCache = t1;\n  }\n  t2 = $.BoundClosure_receiverFieldNameCache;\n  if (t2 == null) {\n    t2 = H.BoundClosure_computeFieldNamed(\"receiver\");\n    $.BoundClosure_receiverFieldNameCache = t2;\n  }\n  stubName = $function.$stubName;\n  arity = $function.length;\n  lookedUpFunction = receiver[stubName];\n  t3 = $function == null ? lookedUpFunction == null : $function === lookedUpFunction;\n  t4 = !t3 || arity >= 28;\n  if (t4)\n    return H.Closure_cspForwardInterceptedCall(arity, !t3, stubName, $function);\n  if (arity === 1) {\n    t1 = \"return function(){return this.\" + H.S(t1) + \".\" + H.S(stubName) + \"(this.\" + H.S(t2) + \");\";\n    t2 = $.Closure_functionCounter;\n    $.Closure_functionCounter = J.$add$ans(t2, 1);\n    return new Function(t1 + H.S(t2) + \"}\")();\n  }\n  $arguments = \"abcdefghijklmnopqrstuvwxyz\".split(\"\").splice(0, arity - 1).join(\",\");\n  t1 = \"return function(\" + $arguments + \"){return this.\" + H.S(t1) + \".\" + H.S(stubName) + \"(this.\" + H.S(t2) + \", \" + $arguments + \");\";\n  t2 = $.Closure_functionCounter;\n  $.Closure_functionCounter = J.$add$ans(t2, 1);\n  return new Function(t1 + H.S(t2) + \"}\")();\n}\n",
-        "type": "dynamic Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess) {\n      var receiverField, arity, t1, t2, $arguments,\n        interceptorField = $.BoundClosure__interceptorFieldNameCache;\n      if (interceptorField == null)\n        interceptorField = $.BoundClosure__interceptorFieldNameCache = A.BoundClosure__computeFieldNamed(\"interceptor\");\n      receiverField = $.BoundClosure__receiverFieldNameCache;\n      if (receiverField == null)\n        receiverField = $.BoundClosure__receiverFieldNameCache = A.BoundClosure__computeFieldNamed(\"receiver\");\n      arity = $function.length;\n      t1 = A.boolConversionCheck(needsDirectAccess) || arity >= 28;\n      if (t1)\n        return A.Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function);\n      if (arity === 1) {\n        t1 = \"return function(){return this.\" + interceptorField + \".\" + A.S(stubName) + \"(this.\" + receiverField + \");\";\n        t2 = $.Closure_functionCounter;\n        if (typeof t2 !== \"number\")\n          return t2.$add();\n        $.Closure_functionCounter = t2 + 1;\n        return new Function(t1 + t2 + \"}\")();\n      }\n      $arguments = \"abcdefghijklmnopqrstuvwxyz\".split(\"\").splice(0, arity - 1).join(\",\");\n      t1 = \"return function(\" + $arguments + \"){return this.\" + interceptorField + \".\" + A.S(stubName) + \"(this.\" + receiverField + \", \" + $arguments + \");\";\n      t2 = $.Closure_functionCounter;\n      if (typeof t2 !== \"number\")\n        return t2.$add();\n      $.Closure_functionCounter = t2 + 1;\n      return new Function(t1 + t2 + \"}\")();\n    }",
+        "type": "dynamic Function(String,dynamic,bool)"
+      },
+      "923456660": {
+        "id": "function/923456660",
+        "kind": "function",
+        "name": "_failedAsCheck",
+        "size": 194,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_failedAsCheck(object, testRti) {\n      throw A.wrapException(A._TypeError$fromMessage(A._Error_compose(object, A.instanceOrFunctionType(object, testRti), A._rtiToString(testRti, null))));\n    }",
+        "type": "void Function(Object?,Rti)"
+      },
+      "924450127": {
+        "id": "function/924450127",
+        "kind": "function",
+        "name": "_rootHandleError",
+        "size": 490,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [
+          "closure/192019265"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subtype=StackTrace]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rootHandleError(error, stackTrace) {\n      A._schedulePriorityAsyncCallback(new A._rootHandleError_closure(error, stackTrace));\n    }",
+        "type": "void Function(Object,StackTrace)"
+      },
+      "929852730": {
+        "id": "function/929852730",
+        "kind": "function",
+        "name": "_installTypeTests",
+        "size": 159,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__installTypeTests(universe, rti) {\n      rti._as = A._installSpecializedAsCheck;\n      rti._is = A._installSpecializedIsTest;\n      return rti;\n    }",
+        "type": "Rti Function(Object?,Rti)"
       },
       "932567378": {
         "id": "function/932567378",
         "kind": "function",
         "name": "provokeCallErrorOn",
-        "size": 317,
+        "size": 271,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
@@ -14223,9 +19610,74 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "TypeErrorDecoder_provokeCallErrorOn: function(expression) {\n  return function($expr$) {\n    var $argumentsExpr$ = '$arguments$';\n    try {\n      $expr$.$method$($argumentsExpr$);\n    } catch (e) {\n      return e.message;\n    }\n  }(expression);\n}\n",
-        "type": "String Function(dynamic)",
-        "measurements": null
+        "code": "TypeErrorDecoder_provokeCallErrorOn(expression) {\n      return function($expr$) {\n        var $argumentsExpr$ = \"$arguments$\";\n        try {\n          $expr$.$method$($argumentsExpr$);\n        } catch (e) {\n          return e.message;\n        }\n      }(expression);\n    }",
+        "type": "String Function(dynamic)"
+      },
+      "935592878": {
+        "id": "function/935592878",
+        "kind": "function",
+        "name": "handleFunctionArguments",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
+      },
+      "941664110": {
+        "id": "function/941664110",
+        "kind": "function",
+        "name": "instanceOrFunctionType",
+        "size": 299,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "testRti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "instanceOrFunctionType(object, testRti) {\n      var rti;\n      if (A.Rti__isUnionOfFunctionType(testRti))\n        if (object instanceof A.Closure) {\n          rti = A.closureFunctionType(object);\n          if (rti != null)\n            return rti;\n        }\n      return A.instanceType(object);\n    }",
+        "type": "Rti Function(Object?,Rti)"
       },
       "941710296": {
         "id": "function/941710296",
@@ -14244,17 +19696,16 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
       "942227822": {
         "id": "function/942227822",
         "kind": "function",
         "name": "lastIndexOf",
-        "size": 359,
+        "size": 206,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/793539876",
         "children": [],
@@ -14271,24 +19722,46 @@
             "name": "pattern",
             "type": "Value([exact=JSString], value: \"/\")",
             "declaredType": "Pattern"
-          },
-          {
-            "name": "start",
-            "type": "[null]",
-            "declaredType": "int"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "lastIndexOf$2: function(receiver, pattern, start) {\n  var t1;\n  start = receiver.length;\n  t1 = pattern.length;\n  if (start + t1 > start)\n    start -= t1;\n  return receiver.lastIndexOf(pattern, start);\n}\nlastIndexOf$1: function($receiver, pattern) {\n  return this.lastIndexOf$2($receiver, pattern, null);\n}\n",
-        "type": "int Function(Pattern,[int])",
-        "measurements": null
+        "code": "lastIndexOf$1(receiver, pattern) {\n      var start = receiver.length,\n        t1 = pattern.length;\n      if (start + t1 > start)\n        start -= t1;\n      return receiver.lastIndexOf(pattern, start);\n    }",
+        "type": "int Function(Pattern,[int?])"
+      },
+      "942726385": {
+        "id": "function/942726385",
+        "kind": "function",
+        "name": "asString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 34,
+        "code": "",
+        "type": "String Function(Object?)"
       },
       "944731702": {
         "id": "function/944731702",
         "kind": "function",
         "name": "toString",
-        "size": 118,
+        "size": 109,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/86936801",
         "children": [],
@@ -14303,15 +19776,85 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(receiver) {\n  return \"Instance of '\" + H.Primitives_objectTypeName(receiver) + \"'\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(receiver) {\n      return \"Instance of '\" + A.S(A.Primitives_objectTypeName(receiver)) + \"'\";\n    }",
+        "type": "String Function()"
+      },
+      "944782426": {
+        "id": "function/944782426",
+        "kind": "function",
+        "name": "_getKind",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 26,
+        "code": "",
+        "type": "int Function(Rti)"
+      },
+      "945625581": {
+        "id": "function/945625581",
+        "kind": "function",
+        "name": "_substituteNamed",
+        "size": 603,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "namedArray",
+            "type": "[exact=JSUnmodifiableArray]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "depth",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_substituteNamed(universe, namedArray, typeArguments, depth) {\n      var changed, i, t1, t2, rti, substitutedRti,\n        $length = namedArray.length,\n        result = A._Utils_newArrayOrEmpty($length);\n      for (changed = false, i = 0; i < $length; i += 3) {\n        t1 = namedArray[i];\n        t2 = namedArray[i + 1];\n        rti = namedArray[i + 2];\n        substitutedRti = A._substitute(universe, rti, typeArguments, depth);\n        if (substitutedRti !== rti)\n          changed = true;\n        result.splice(i, 3, t1, t2, substitutedRti);\n      }\n      return changed ? result : namedArray;\n    }",
+        "type": "Object? Function(Object?,Object?,Object?,int)"
       },
       "947198569": {
         "id": "function/947198569",
         "kind": "function",
         "name": "call",
-        "size": 104,
+        "size": 90,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/827328529",
         "children": [],
@@ -14321,20 +19864,103 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Null",
+        "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  P._Future__propagateToListeners(this.$this, this._box_0.listeners);\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "code": "call$0() {\n      A._Future__propagateToListeners(this.$this, this._box_0.listeners);\n    }",
+        "type": "void Function()"
+      },
+      "947722698": {
+        "id": "function/947722698",
+        "kind": "function",
+        "name": "_getQuestionArgument",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "Rti Function(Rti)"
+      },
+      "949168228": {
+        "id": "function/949168228",
+        "kind": "function",
+        "name": "_TypeError.fromMessage",
+        "size": 95,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/324095577",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_TypeError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "_TypeError$fromMessage(message) {\n      return new A._TypeError(\"TypeError: \" + message);\n    }",
+        "type": "dynamic Function(String)"
+      },
+      "950377748": {
+        "id": "function/950377748",
+        "kind": "function",
+        "name": "isFixedLength",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "a",
+            "type": "[subclass=JSArray]",
+            "declaredType": "JSArray<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "bool Function(JSArray<dynamic>)"
       },
       "950708086": {
         "id": "function/950708086",
         "kind": "function",
         "name": "current",
-        "size": 63,
+        "size": 49,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
@@ -14349,9 +19975,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 0,
-        "code": "get$current: function() {\n  return this._current;\n}\n",
-        "type": "ArrayIterator.E Function()",
-        "measurements": null
+        "code": "get$current() {\n      return this._current;\n    }",
+        "type": "ArrayIterator.E Function()"
       },
       "950782810": {
         "id": "function/950782810",
@@ -14372,9 +19997,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "int Function()",
-        "measurements": null
+        "code": "",
+        "type": "int Function()"
       },
       "952130975": {
         "id": "function/952130975",
@@ -14396,20 +20020,131 @@
           {
             "name": "reason",
             "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(String)"
+      },
+      "956458971": {
+        "id": "function/956458971",
+        "kind": "function",
+        "name": "_asIntS",
+        "size": 242,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int?",
+        "inferredReturnType": "[null|subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
             "declaredType": "dynamic"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asIntS(object) {\n      if (typeof object == \"number\" && Math.floor(object) === object)\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"int\"));\n    }",
+        "type": "int? Function(dynamic)"
+      },
+      "958066535": {
+        "id": "function/958066535",
+        "kind": "function",
+        "name": "isUnmodifiable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "a",
+            "type": "[subclass=JSArray]",
+            "declaredType": "JSArray<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "bool Function(JSArray<dynamic>)"
+      },
+      "959492039": {
+        "id": "function/959492039",
+        "kind": "function",
+        "name": "_unwrapNonDartException",
+        "size": 4326,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "ex",
+            "type": "[subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_unwrapNonDartException(ex) {\n      var message, number, ieErrorCode, t1, nsme, notClosure, nullCall, nullLiteralCall, undefCall, undefLiteralCall, nullProperty, undefProperty, undefLiteralProperty, match, _null = null;\n      if (!(\"message\" in ex))\n        return ex;\n      message = ex.message;\n      if (\"number\" in ex && typeof ex.number == \"number\") {\n        number = ex.number;\n        ieErrorCode = number & 65535;\n        if ((B.JSInt_methods._shrOtherPositive$1(number, 16) & 8191) === 10)\n          switch (ieErrorCode) {\n            case 438:\n              return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A.S(message) + \" (Error \" + ieErrorCode + \")\", _null));\n            case 445:\n            case 5007:\n              t1 = A.S(message) + \" (Error \" + ieErrorCode + \")\";\n              return A.saveStackTrace(ex, new A.NullError(t1, _null));\n          }\n      }\n      if (ex instanceof TypeError) {\n        nsme = $.$get$TypeErrorDecoder_noSuchMethodPattern();\n        notClosure = $.$get$TypeErrorDecoder_notClosurePattern();\n        nullCall = $.$get$TypeErrorDecoder_nullCallPattern();\n        nullLiteralCall = $.$get$TypeErrorDecoder_nullLiteralCallPattern();\n        undefCall = $.$get$TypeErrorDecoder_undefinedCallPattern();\n        undefLiteralCall = $.$get$TypeErrorDecoder_undefinedLiteralCallPattern();\n        nullProperty = $.$get$TypeErrorDecoder_nullPropertyPattern();\n        $.$get$TypeErrorDecoder_nullLiteralPropertyPattern();\n        undefProperty = $.$get$TypeErrorDecoder_undefinedPropertyPattern();\n        undefLiteralProperty = $.$get$TypeErrorDecoder_undefinedLiteralPropertyPattern();\n        match = nsme.matchTypeError$1(message);\n        if (match != null)\n          return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A._asStringS(message), match));\n        else {\n          match = notClosure.matchTypeError$1(message);\n          if (match != null) {\n            match.method = \"call\";\n            return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A._asStringS(message), match));\n          } else {\n            match = nullCall.matchTypeError$1(message);\n            if (match == null) {\n              match = nullLiteralCall.matchTypeError$1(message);\n              if (match == null) {\n                match = undefCall.matchTypeError$1(message);\n                if (match == null) {\n                  match = undefLiteralCall.matchTypeError$1(message);\n                  if (match == null) {\n                    match = nullProperty.matchTypeError$1(message);\n                    if (match == null) {\n                      match = nullLiteralCall.matchTypeError$1(message);\n                      if (match == null) {\n                        match = undefProperty.matchTypeError$1(message);\n                        if (match == null) {\n                          match = undefLiteralProperty.matchTypeError$1(message);\n                          t1 = match != null;\n                        } else\n                          t1 = true;\n                      } else\n                        t1 = true;\n                    } else\n                      t1 = true;\n                  } else\n                    t1 = true;\n                } else\n                  t1 = true;\n              } else\n                t1 = true;\n            } else\n              t1 = true;\n            if (t1) {\n              A._asStringS(message);\n              return A.saveStackTrace(ex, new A.NullError(message, match == null ? _null : match.method));\n            }\n          }\n        }\n        return A.saveStackTrace(ex, new A.UnknownJsTypeError(typeof message == \"string\" ? message : \"\"));\n      }\n      if (ex instanceof RangeError) {\n        if (typeof message == \"string\" && message.indexOf(\"call stack\") !== -1)\n          return new A.StackOverflowError();\n        message = function(ex) {\n          try {\n            return String(ex);\n          } catch (e) {\n          }\n          return null;\n        }(ex);\n        return A.saveStackTrace(ex, new A.ArgumentError(false, _null, _null, typeof message == \"string\" ? message.replace(/^RangeError:\\s*/, \"\") : message));\n      }\n      if (typeof InternalError == \"function\" && ex instanceof InternalError)\n        if (typeof message == \"string\" && message === \"too much recursion\")\n          return new A.StackOverflowError();\n      return ex;\n    }",
+        "type": "Object Function(Object)"
+      },
+      "960612858": {
+        "id": "function/960612858",
+        "kind": "function",
+        "name": "_getInterfaceName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 6,
+        "code": "",
+        "type": "String Function(Rti)"
       },
       "962973203": {
         "id": "function/962973203",
         "kind": "function",
         "name": "toString",
-        "size": 63,
+        "size": 49,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/418854932",
         "children": [],
@@ -14424,17 +20159,16 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 0,
-        "code": "toString$0: function(receiver) {\n  return \"null\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(receiver) {\n      return \"null\";\n    }",
+        "type": "String Function()"
       },
-      "965257927": {
-        "id": "function/965257927",
+      "964398244": {
+        "id": "function/964398244",
         "kind": "function",
-        "name": "checkNotNegative",
+        "name": "_getBindingBase",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/974704527",
+        "parent": "class/214521760",
         "children": [],
         "modifiers": {
           "static": true,
@@ -14442,80 +20176,25 @@
           "factory": false,
           "external": false
         },
-        "returnType": "void",
-        "inferredReturnType": "[null]",
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
         "parameters": [
           {
-            "name": "value",
-            "type": "[null|exact=JSUInt31]",
-            "declaredType": "int"
-          },
-          {
-            "name": "name",
-            "type": "[exact=JSString]",
-            "declaredType": "String"
-          },
-          {
-            "name": "message",
-            "type": "[null]",
-            "declaredType": "String"
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
           }
         ],
         "sideEffects": "SideEffects(reads field; writes nothing)",
-        "inlinedCount": 3,
-        "code": null,
-        "type": "void Function(int,[String,String])",
-        "measurements": null
-      },
-      "967508646": {
-        "id": "function/967508646",
-        "kind": "function",
-        "name": "checkSubtypeV1",
-        "size": 392,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "object",
-            "type": "[null|subclass=Object]",
-            "declaredType": "Object"
-          },
-          {
-            "name": "isField",
-            "type": "[null|subclass=Object]",
-            "declaredType": "String"
-          },
-          {
-            "name": "checks",
-            "type": "[null|subclass=Object]",
-            "declaredType": "List<dynamic>"
-          },
-          {
-            "name": "asField",
-            "type": "[null|subclass=Object]",
-            "declaredType": "String"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "checkSubtypeV1: function(object, isField, checks, asField) {\n  var $arguments, interceptor;\n  if (object == null)\n    return false;\n  $arguments = H.getRuntimeTypeInfo(object);\n  interceptor = J.getInterceptor(object);\n  if (interceptor[isField] == null)\n    return false;\n  return H.areSubtypesV1(H.substitute(interceptor[asField], $arguments), checks);\n}\n",
-        "type": "bool Function(Object,String,List<dynamic>,String)",
-        "measurements": null
+        "inlinedCount": 5,
+        "code": "",
+        "type": "Rti Function(Rti)"
       },
       "968241519": {
         "id": "function/968241519",
         "kind": "function",
         "name": "runUnary",
-        "size": 175,
+        "size": 255,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/566341130",
         "children": [],
@@ -14525,7 +20204,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "runUnary.R",
+        "returnType": "#A/*free*/",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
@@ -14541,9 +20220,8 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "runUnary$2: function(f, arg) {\n  if ($.Zone__current === C.C__RootZone)\n    return f.call$1(arg);\n  return P._rootRunUnary(null, null, this, f, arg);\n}\n",
-        "type": "runUnary.R Function(runUnary.R Function(runUnary.T),runUnary.T)",
-        "measurements": null
+        "code": "runUnary$2$2(f, arg, $R, $T) {\n      $R._eval$1(\"@<0>\")._bind$1($T)._eval$1(\"1(2)\")._as(f);\n      $T._as(arg);\n      if ($.Zone__current === B.C__RootZone)\n        return f.call$1(arg);\n      return A._rootRunUnary(null, null, this, f, arg, $R, $T);\n    }",
+        "type": "#A Function<#A extends Object?,#B extends Object?>(#A Function(#B),#B)"
       },
       "968358412": {
         "id": "function/968358412",
@@ -14563,10 +20241,37 @@
         "inferredReturnType": "[exact=NullThrownError]",
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 6,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function()"
+      },
+      "968631083": {
+        "id": "function/968631083",
+        "kind": "function",
+        "name": "isNullable",
+        "size": 452,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "t",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "isNullable(t) {\n      var t1,\n        kind = t._kind;\n      if (!(t === type$.Null || t === type$.JSNull))\n        if (!A.isStrongTopType(t))\n          if (kind !== 7)\n            if (!(kind === 6 && A.isNullable(t._primary)))\n              t1 = kind === 8 && A.isNullable(t._primary);\n            else\n              t1 = true;\n          else\n            t1 = true;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      return t1;\n    }",
+        "type": "bool Function(Rti)"
       },
       "969026469": {
         "id": "function/969026469",
@@ -14587,15 +20292,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function()",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function()"
       },
       "971160936": {
         "id": "function/971160936",
         "kind": "function",
         "name": "_setErrorObject",
-        "size": 0,
+        "size": 113,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
@@ -14614,11 +20318,38 @@
             "declaredType": "AsyncError"
           }
         ],
-        "sideEffects": "SideEffects(reads static; writes field)",
-        "inlinedCount": 2,
-        "code": null,
-        "type": "void Function(AsyncError)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 1,
+        "code": "_setErrorObject$1(error) {\n      this._state = this._state & 1 | 16;\n      this._resultOrListeners = error;\n    }",
+        "type": "void Function(AsyncError)"
+      },
+      "973238019": {
+        "id": "function/973238019",
+        "kind": "function",
+        "name": "_asNumQ",
+        "size": 210,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num?",
+        "inferredReturnType": "[null|subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asNumQ(object) {\n      if (typeof object == \"number\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"num?\"));\n    }",
+        "type": "num? Function(dynamic)"
       },
       "975105635": {
         "id": "function/975105635",
@@ -14639,15 +20370,85 @@
         "parameters": [
           {
             "name": "previous",
-            "type": "[null|exact=_RootZone]",
-            "declaredType": "Zone"
+            "type": "[exact=_RootZone]",
+            "declaredType": "_Zone"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes static)",
         "inlinedCount": 4,
-        "code": null,
-        "type": "void Function(Zone)",
-        "measurements": null
+        "code": "",
+        "type": "void Function(_Zone)"
+      },
+      "976856253": {
+        "id": "function/976856253",
+        "kind": "function",
+        "name": "_canonicalRecipeOfGenericFunctionParameter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(int)"
+      },
+      "977037784": {
+        "id": "function/977037784",
+        "kind": "function",
+        "name": "_createFunctionRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "returnType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "parameters",
+            "type": "[exact=_FunctionParameters]",
+            "declaredType": "_FunctionParameters"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "Rti Function(Object?,Rti,_FunctionParameters,String)"
       },
       "977867690": {
         "id": "function/977867690",
@@ -14672,11 +20473,10 @@
             "declaredType": "JSArray<ArrayIterator.E>"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(JSArray<ArrayIterator.E>)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(JSArray<ArrayIterator.E>)"
       },
       "979933658": {
         "id": "function/979933658",
@@ -14697,15 +20497,80 @@
         "parameters": [
           {
             "name": "reason",
-            "type": "[exact=JSString]",
-            "declaredType": "dynamic"
+            "type": "Value([exact=JSString], value: \"indexed set\")",
+            "declaredType": "String"
           }
         ],
-        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "dynamic Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "dynamic Function(String)"
+      },
+      "982751380": {
+        "id": "function/982751380",
+        "kind": "function",
+        "name": "findType",
+        "size": 89,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "recipe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "findType(recipe) {\n      return A._Universe_eval(init.typeUniverse, recipe, false);\n    }",
+        "type": "Rti Function(String)"
+      },
+      "983353088": {
+        "id": "function/983353088",
+        "kind": "function",
+        "name": "indexToType",
+        "size": 861,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "universe",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "environment",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_indexToType(universe, environment, index) {\n      var typeArguments, len,\n        kind = environment._kind;\n      if (kind === 10) {\n        if (index === 0)\n          return environment._primary;\n        typeArguments = environment._rest;\n        len = typeArguments.length;\n        if (index <= len)\n          return typeArguments[index - 1];\n        index -= len;\n        environment = environment._primary;\n        kind = environment._kind;\n      } else if (index === 0)\n        return environment;\n      if (kind !== 9)\n        throw A.wrapException(A.AssertionError$(\"Indexed base must be an interface type\"));\n      typeArguments = environment._rest;\n      if (index <= typeArguments.length)\n        return typeArguments[index - 1];\n      throw A.wrapException(A.AssertionError$(\"Bad index \" + index + \" for \" + environment.toString$0(0)));\n    }",
+        "type": "Rti Function(Object?,Rti,int)"
       },
       "983564685": {
         "id": "function/983564685",
@@ -14724,51 +20589,16 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 3,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
-      },
-      "984452543": {
-        "id": "function/984452543",
-        "kind": "function",
-        "name": "areSubtypesV1",
-        "size": 247,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [
-          {
-            "name": "s",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "t",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "areSubtypesV1: function(s, t) {\n  var len, i;\n  if (s == null || t == null)\n    return true;\n  len = s.length;\n  for (i = 0; i < len; ++i)\n    if (!H.isSubtypeV1(s[i], t[i]))\n      return false;\n  return true;\n}\n",
-        "type": "bool Function(dynamic,dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
       "985926244": {
         "id": "function/985926244",
         "kind": "function",
         "name": "IndexError",
-        "size": 257,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/175705485",
         "children": [],
@@ -14788,36 +20618,68 @@
           },
           {
             "name": "indexable",
-            "type": "[null|subclass=Object]",
+            "type": "[subclass=Object]",
             "declaredType": "dynamic"
           },
           {
             "name": "name",
             "type": "Value([exact=JSString], value: \"index\")",
-            "declaredType": "String"
+            "declaredType": "String?"
           },
           {
             "name": "message",
             "type": "[null]",
-            "declaredType": "String"
+            "declaredType": "String?"
           },
           {
             "name": "length",
-            "type": "[null|subclass=JSInt]",
-            "declaredType": "int"
+            "type": "[subclass=JSInt]",
+            "declaredType": "int?"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "IndexError$: function(invalidValue, indexable, $name, message, $length) {\n  var t1 = $length != null ? $length : J.get$length$as(indexable);\n  return new P.IndexError(indexable, t1, true, invalidValue, $name, \"Index out of range\");\n}\n",
-        "type": "dynamic Function(int,dynamic,[String,String,int])",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes field)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(int,dynamic,[String?,String?,int?])"
+      },
+      "986643735": {
+        "id": "function/986643735",
+        "kind": "function",
+        "name": "isIdentical",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 59,
+        "code": "",
+        "type": "bool Function(Object?,Object?)"
       },
       "987295701": {
         "id": "function/987295701",
         "kind": "function",
         "name": "call",
-        "size": 60,
+        "size": 46,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/231160067",
         "children": [],
@@ -14832,15 +20694,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$0: function() {\n  this.callback.call$0();\n}\n",
-        "type": "Null Function()",
-        "measurements": null
+        "code": "call$0() {\n      this.callback.call$0();\n    }",
+        "type": "Null Function()"
       },
       "987508329": {
         "id": "function/987508329",
         "kind": "function",
         "name": "mapToString",
-        "size": 1049,
+        "size": 1116,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/748502014",
         "children": [
@@ -14858,49 +20719,19 @@
           {
             "name": "m",
             "type": "[subclass=JsLinkedHashMap]",
-            "declaredType": "Map<dynamic,dynamic>"
+            "declaredType": "Map<Object?,Object?>"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "MapBase_mapToString: function(m) {\n  var t1, result, t2;\n  t1 = {};\n  if (P._isToStringVisiting(m))\n    return \"{...}\";\n  result = new P.StringBuffer(\"\");\n  try {\n    $.$get$_toStringVisiting().push(m);\n    t2 = result;\n    t2._contents = t2.get$_contents() + \"{\";\n    t1.first = true;\n    m.forEach$1(0, new P.MapBase_mapToString_closure(t1, result));\n    t1 = result;\n    t1._contents = t1.get$_contents() + \"}\";\n  } finally {\n    t1 = $.$get$_toStringVisiting();\n    if (0 >= t1.length)\n      return H.ioore(t1, -1);\n    t1.pop();\n  }\n  t1 = result.get$_contents();\n  return t1.charCodeAt(0) == 0 ? t1 : t1;\n}\n",
-        "type": "String Function(Map<dynamic,dynamic>)",
-        "measurements": null
-      },
-      "990521259": {
-        "id": "function/990521259",
-        "kind": "function",
-        "name": "elementAt",
-        "size": 487,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/60704969",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "SubListIterable.E",
-        "inferredReturnType": "[null|subclass=Object]",
-        "parameters": [
-          {
-            "name": "index",
-            "type": "[subclass=JSInt]",
-            "declaredType": "int"
-          }
-        ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "elementAt$1: function(_, index) {\n  var realIndex, t1;\n  realIndex = this.get$_startIndex() + index;\n  if (index >= 0) {\n    t1 = this.get$_endIndex();\n    if (typeof t1 !== \"number\")\n      return H.iae(t1);\n    t1 = realIndex >= t1;\n  } else\n    t1 = true;\n  if (t1)\n    throw H.wrapException(P.IndexError$(index, this, \"index\", null, null));\n  return J.elementAt$1$a(this.__internal$_iterable, realIndex);\n}\n",
-        "type": "SubListIterable.E Function(int)",
-        "measurements": null
+        "code": "MapBase_mapToString(m) {\n      var result, t1 = {};\n      if (A._isToStringVisiting(m))\n        return \"{...}\";\n      result = new A.StringBuffer(\"\");\n      try {\n        B.JSArray_methods.add$1($._toStringVisiting, m);\n        result._contents += \"{\";\n        t1.first = true;\n        m.forEach$1(0, new A.MapBase_mapToString_closure(t1, result));\n        result._contents += \"}\";\n      } finally {\n        if (0 >= $._toStringVisiting.length)\n          return A.ioore($._toStringVisiting, -1);\n        $._toStringVisiting.pop();\n      }\n      t1 = result._contents;\n      return t1.charCodeAt(0) == 0 ? t1 : t1;\n    }",
+        "type": "String Function(Map<Object?,Object?>)"
       },
       "991909617": {
         "id": "function/991909617",
         "kind": "function",
         "name": "toString",
-        "size": 73,
+        "size": 59,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/245082925",
         "children": [],
@@ -14915,9 +20746,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(receiver) {\n  return String(receiver);\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(receiver) {\n      return String(receiver);\n    }",
+        "type": "String Function()"
       },
       "992393187": {
         "id": "function/992393187",
@@ -14938,9 +20768,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "_ZoneFunction<void Function(Zone,ZoneDelegate,Zone,void Function())> Function()",
-        "measurements": null
+        "code": "",
+        "type": "_ZoneFunction<void Function(Zone,ZoneDelegate,Zone,void Function())> Function()"
       },
       "992679489": {
         "id": "function/992679489",
@@ -14965,11 +20794,10 @@
             "declaredType": "dynamic"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "String Function(dynamic)"
       },
       "993180100": {
         "id": "function/993180100",
@@ -14996,15 +20824,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 4,
-        "code": null,
-        "type": "String Function(Object)",
-        "measurements": null
+        "code": "",
+        "type": "String Function(Object)"
       },
       "997099929": {
         "id": "function/997099929",
         "kind": "function",
         "name": "JSArray.growable",
-        "size": 0,
+        "size": 252,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/523978038",
         "children": [],
@@ -15014,20 +20841,19 @@
           "factory": true,
           "external": false
         },
-        "returnType": "JSArray<JSArray.E>",
+        "returnType": "JSArray<#A/*free*/>",
         "inferredReturnType": "[exact=JSExtendableArray]",
         "parameters": [
           {
             "name": "length",
-            "type": "[subclass=JSUInt32]",
+            "type": "[subclass=JSInt]",
             "declaredType": "int"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "JSArray<JSArray.E> Function(int)",
-        "measurements": null
+        "inlinedCount": 0,
+        "code": "JSArray_JSArray$growable($length, $E) {\n      if ($length < 0)\n        throw A.wrapException(A.ArgumentError$(\"Length must be a non-negative integer: \" + $length, null));\n      return A._setArrayType(new Array($length), $E._eval$1(\"JSArray<0>\"));\n    }",
+        "type": "JSArray<#A> Function<#A extends Object?>(int)"
       },
       "998984172": {
         "id": "function/998984172",
@@ -15052,17 +20878,77 @@
             "declaredType": "dynamic"
           }
         ],
-        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "bool Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "bool Function(dynamic)"
+      },
+      "999221506": {
+        "id": "function/999221506",
+        "kind": "function",
+        "name": "_unminifyOrTag",
+        "size": 179,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rawClassName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_unminifyOrTag(rawClassName) {\n      var preserved = init.mangledGlobalNames[rawClassName];\n      if (preserved != null)\n        return preserved;\n      return rawClassName;\n    }",
+        "type": "String Function(String)"
+      },
+      "1002613704": {
+        "id": "function/1002613704",
+        "kind": "function",
+        "name": "instanceOf",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "constructor",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "bool Function(Object?,Object?)"
       },
       "1002752870": {
         "id": "function/1002752870",
         "kind": "function",
         "name": "_addHashTableEntry",
-        "size": 194,
+        "size": 269,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
@@ -15088,15 +20974,92 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_addHashTableEntry$2: function(table, element) {\n  if (table[element] != null)\n    return false;\n  table[element] = this._newLinkedCell$1(element);\n  return true;\n}\n",
-        "type": "bool Function(dynamic,_LinkedHashSet.E)",
-        "measurements": null
+        "code": "_addHashTableEntry$2(table, element) {\n      A._instanceType(this)._precomputed1._as(element);\n      if (type$.nullable__LinkedHashSetCell._as(table[element]) != null)\n        return false;\n      table[element] = this._newLinkedCell$1(element);\n      return true;\n    }",
+        "type": "bool Function(dynamic,Object?)"
+      },
+      "1005175086": {
+        "id": "function/1005175086",
+        "kind": "function",
+        "name": "LateError.fieldADI",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/43993131",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=LateError]",
+        "parameters": [
+          {
+            "name": "fieldName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "dynamic Function(String)"
+      },
+      "1007804883": {
+        "id": "function/1007804883",
+        "kind": "function",
+        "name": "pop",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 16,
+        "code": "",
+        "type": "Object? Function(Object?)"
+      },
+      "1008070289": {
+        "id": "function/1008070289",
+        "kind": "function",
+        "name": "stackTrace",
+        "size": 43,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/542248491",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StackTrace?",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$stackTrace() {\n      return null;\n    }",
+        "type": "StackTrace? Function()"
       },
       "1008544093": {
         "id": "function/1008544093",
         "kind": "function",
         "name": "length",
-        "size": 74,
+        "size": 60,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/476286669",
         "children": [],
@@ -15109,22 +21072,49 @@
         "returnType": "int",
         "inferredReturnType": "[subclass=JSPositiveInt]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
-        "code": "get$length: function(_) {\n  return this.__js_helper$_length;\n}\n",
-        "type": "int Function()",
-        "measurements": null
+        "code": "get$length(_) {\n      return this.__js_helper$_length;\n    }",
+        "type": "int Function()"
       },
-      "1012615396": {
-        "id": "function/1012615396",
+      "1010766199": {
+        "id": "function/1010766199",
         "kind": "function",
-        "name": "isIdentical",
+        "name": "_canonicalRecipeOfQuestion",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function(Rti)"
+      },
+      "1013396128": {
+        "id": "function/1013396128",
+        "kind": "function",
+        "name": "isDigit",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1013977545",
+        "children": [],
+        "modifiers": {
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
@@ -15133,21 +21123,15 @@
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [
           {
-            "name": "s",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
-          },
-          {
-            "name": "t",
-            "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "name": "code",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
           }
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
-        "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function(dynamic,dynamic)",
-        "measurements": null
+        "inlinedCount": 3,
+        "code": "",
+        "type": "bool Function(int)"
       },
       "1014074245": {
         "id": "function/1014074245",
@@ -15168,9 +21152,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "Future<_AsyncAwaitCompleter.T> Function()",
-        "measurements": null
+        "code": "",
+        "type": "Future<_AsyncAwaitCompleter.T> Function()"
       },
       "1014821943": {
         "id": "function/1014821943",
@@ -15186,14 +21169,13 @@
           "factory": true,
           "external": false
         },
-        "returnType": "Completer<Completer.T>",
+        "returnType": "Completer<#A/*free*/>",
         "inferredReturnType": "[exact=_AsyncCompleter]",
         "parameters": [],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "Completer<Completer.T> Function()",
-        "measurements": null
+        "code": "",
+        "type": "Completer<#A> Function<#A extends Object?>()"
       },
       "1015140651": {
         "id": "function/1015140651",
@@ -15212,40 +21194,86 @@
         "returnType": "void",
         "inferredReturnType": "[null]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads field; writes field)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "void Function()",
-        "measurements": null
+        "code": "",
+        "type": "void Function()"
       },
-      "1016194181": {
-        "id": "function/1016194181",
+      "1017330300": {
+        "id": "function/1017330300",
         "kind": "function",
-        "name": "toList",
-        "size": 723,
+        "name": "_recipeJoin5",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/60704969",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "List<SubListIterable.E>",
-        "inferredReturnType": "Container(Union([exact=JSExtendableArray], [exact=JSFixedArray]), element: [null|subclass=Object], length: null)",
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
         "parameters": [
           {
-            "name": "growable",
-            "type": "Value([exact=JSBool], value: false)",
-            "declaredType": "bool"
+            "name": "s1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s3",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s4",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "s5",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "toList$1$growable: function(_, growable) {\n  var start, t1, t2, end, $length, result, i, t3;\n  start = this._start;\n  t1 = this.__internal$_iterable;\n  t2 = J.getInterceptor$as(t1);\n  end = t2.get$length(t1);\n  $length = end - start;\n  if ($length < 0)\n    $length = 0;\n  result = new Array($length);\n  result.fixed$length = Array;\n  for (i = 0; i < $length; ++i) {\n    t3 = t2.elementAt$1(t1, start + i);\n    if (i >= $length)\n      return H.ioore(result, i);\n    result[i] = t3;\n    if (t2.get$length(t1) < end)\n      throw H.wrapException(P.ConcurrentModificationError$(this));\n  }\n  return result;\n}\n",
-        "type": "List<SubListIterable.E> Function({bool growable})",
-        "measurements": null
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "String Function(String,String,String,String,String)"
+      },
+      "1019584284": {
+        "id": "function/1019584284",
+        "kind": "function",
+        "name": "universe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 18,
+        "code": "",
+        "type": "Object Function(Object?)"
       },
       "1024143730": {
         "id": "function/1024143730",
@@ -15261,7 +21289,7 @@
           "factory": true,
           "external": false
         },
-        "returnType": "JSArray<JSArray.E>",
+        "returnType": "JSArray<#A/*free*/>",
         "inferredReturnType": "[subclass=JSArray]",
         "parameters": [
           {
@@ -15272,15 +21300,14 @@
         ],
         "sideEffects": "SideEffects(reads nothing; writes nothing)",
         "inlinedCount": 2,
-        "code": null,
-        "type": "JSArray<JSArray.E> Function(dynamic)",
-        "measurements": null
+        "code": "",
+        "type": "JSArray<#A> Function<#A extends Object?>(dynamic)"
       },
       "1024465827": {
         "id": "function/1024465827",
         "kind": "function",
         "name": "_errorExplanation",
-        "size": 649,
+        "size": 568,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/974704527",
         "children": [],
@@ -15295,15 +21322,14 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes anything)",
         "inlinedCount": 0,
-        "code": "get$_errorExplanation: function() {\n  var t1, explanation, t2;\n  t1 = this.start;\n  if (t1 == null) {\n    t1 = this.end;\n    explanation = t1 != null ? \": Not less than or equal to \" + H.S(t1) : \"\";\n  } else {\n    t2 = this.end;\n    if (t2 == null)\n      explanation = \": Not greater than or equal to \" + H.S(t1);\n    else if (t2 > t1)\n      explanation = \": Not in range \" + H.S(t1) + \"..\" + H.S(t2) + \", inclusive\";\n    else\n      explanation = t2 < t1 ? \": Valid value range is empty\" : \": Only valid value is \" + H.S(t1);\n  }\n  return explanation;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "get$_errorExplanation() {\n      var explanation,\n        start = this.start,\n        end = this.end;\n      if (start == null)\n        explanation = end != null ? \": Not less than or equal to \" + A.S(end) : \"\";\n      else if (end == null)\n        explanation = \": Not greater than or equal to \" + A.S(start);\n      else if (end > start)\n        explanation = \": Not in inclusive range \" + A.S(start) + \"..\" + A.S(end);\n      else\n        explanation = end < start ? \": Valid value range is empty\" : \": Only valid value is \" + A.S(start);\n      return explanation;\n    }",
+        "type": "String Function()"
       },
       "1027535878": {
         "id": "function/1027535878",
         "kind": "function",
         "name": "moveNext",
-        "size": 434,
+        "size": 406,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
@@ -15316,11 +21342,10 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "sideEffects": "SideEffects(reads anything; writes field)",
         "inlinedCount": 0,
-        "code": "moveNext$0: function() {\n  var t1, $length, t2;\n  t1 = this._iterable;\n  $length = t1.length;\n  if (this._length !== $length)\n    throw H.wrapException(H.throwConcurrentModificationError(t1));\n  t2 = this._index;\n  if (t2 >= $length) {\n    this._current = null;\n    return false;\n  }\n  this._current = t1[t2];\n  this._index = t2 + 1;\n  return true;\n}\n",
-        "type": "bool Function()",
-        "measurements": null
+        "code": "moveNext$0() {\n      var t2, _this = this,\n        t1 = _this._iterable,\n        $length = t1.length;\n      if (_this._length !== $length)\n        throw A.wrapException(A.throwConcurrentModificationError(t1));\n      t2 = _this._index;\n      if (t2 >= $length) {\n        _this.set$_current(null);\n        return false;\n      }\n      _this.set$_current(t1[t2]);\n      ++_this._index;\n      return true;\n    }",
+        "type": "bool Function()"
       },
       "1030881401": {
         "id": "function/1030881401",
@@ -15339,17 +21364,16 @@
         "returnType": "bool",
         "inferredReturnType": "[exact=JSBool]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function()"
       },
       "1031131035": {
         "id": "function/1031131035",
         "kind": "function",
         "name": "_cloneResult",
-        "size": 0,
+        "size": 147,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
@@ -15369,16 +21393,15 @@
           }
         ],
         "sideEffects": "SideEffects(reads field; writes field)",
-        "inlinedCount": 4,
-        "code": null,
-        "type": "void Function(_Future<dynamic>)",
-        "measurements": null
+        "inlinedCount": 1,
+        "code": "_cloneResult$1(source) {\n      this._state = source._state & 30 | this._state & 1;\n      this._resultOrListeners = source._resultOrListeners;\n    }",
+        "type": "void Function(_Future<dynamic>)"
       },
       "1031826457": {
         "id": "function/1031826457",
         "kind": "function",
         "name": "call",
-        "size": 135,
+        "size": 152,
         "outputUnit": "outputUnit/669725655",
         "parent": "closure/624687097",
         "children": [],
@@ -15399,15 +21422,75 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "call$1: function(_) {\n  this.initializeSomeLoadedHunks.call$0();\n  $.$get$_loadedLibraries().add$1(0, this.loadId);\n}\n",
-        "type": "Null Function(List<dynamic>)",
-        "measurements": null
+        "code": "call$1(_) {\n      type$.List_dynamic._as(_);\n      this.initializeSomeLoadedHunks.call$0();\n      $.$get$_loadedLibraries().add$1(0, this.loadId);\n    }",
+        "type": "Null Function(List<dynamic>)"
+      },
+      "1032715322": {
+        "id": "function/1032715322",
+        "kind": "function",
+        "name": "_asStringQ",
+        "size": 216,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asStringQ(object) {\n      if (typeof object == \"string\")\n        return object;\n      if (object == null)\n        return object;\n      throw A.wrapException(A._TypeError__TypeError$forType(object, \"String?\"));\n    }",
+        "type": "String? Function(dynamic)"
+      },
+      "1033254962": {
+        "id": "function/1033254962",
+        "kind": "function",
+        "name": "mapGet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object?",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "cache",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "key",
+            "type": "[null|exact=JSString]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 12,
+        "code": "",
+        "type": "Object? Function(Object?,Object?)"
       },
       "1033661873": {
         "id": "function/1033661873",
         "kind": "function",
         "name": "toString",
-        "size": 77,
+        "size": 63,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
@@ -15422,15 +21505,36 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return P.MapBase_mapToString(this);\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      return A.MapBase_mapToString(this);\n    }",
+        "type": "String Function()"
+      },
+      "1036180926": {
+        "id": "function/1036180926",
+        "kind": "function",
+        "name": "_canonicalRecipeOfVoid",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/769860706",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"~\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
       },
       "1036675160": {
         "id": "function/1036675160",
         "kind": "function",
         "name": "runBinary",
-        "size": 198,
+        "size": 321,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/566341130",
         "children": [],
@@ -15440,7 +21544,7 @@
           "factory": false,
           "external": false
         },
-        "returnType": "runBinary.R",
+        "returnType": "#A/*free*/",
         "inferredReturnType": "[null|subclass=Object]",
         "parameters": [
           {
@@ -15455,15 +21559,75 @@
           },
           {
             "name": "arg2",
-            "type": "[null|subclass=Object]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "runBinary.T2"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "runBinary$3: function(f, arg1, arg2) {\n  if ($.Zone__current === C.C__RootZone)\n    return f.call$2(arg1, arg2);\n  return P._rootRunBinary(null, null, this, f, arg1, arg2);\n}\n",
-        "type": "runBinary.R Function(runBinary.R Function(runBinary.T1,runBinary.T2),runBinary.T1,runBinary.T2)",
-        "measurements": null
+        "code": "runBinary$3$3(f, arg1, arg2, $R, T1, T2) {\n      $R._eval$1(\"@<0>\")._bind$1(T1)._bind$1(T2)._eval$1(\"1(2,3)\")._as(f);\n      T1._as(arg1);\n      T2._as(arg2);\n      if ($.Zone__current === B.C__RootZone)\n        return f.call$2(arg1, arg2);\n      return A._rootRunBinary(null, null, this, f, arg1, arg2, $R, T1, T2);\n    }",
+        "type": "#A Function<#A extends Object?,#B extends Object?,#C extends Object?>(#A Function(#B,#C),#B,#C)"
+      },
+      "1036730465": {
+        "id": "function/1036730465",
+        "kind": "function",
+        "name": "parse",
+        "size": 5256,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Parser_parse(parser) {\n      var t1, i, ch, universe, array, head, base, u, parameters, optionalPositional, named, item,\n        source = parser.r,\n        stack = parser.s;\n      for (t1 = source.length, i = 0; i < t1;) {\n        ch = source.charCodeAt(i);\n        if (ch >= 48 && ch <= 57)\n          i = A._Parser_handleDigit(i + 1, ch, source, stack);\n        else if ((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36)\n          i = A._Parser_handleIdentifier(parser, i, source, stack, false);\n        else if (ch === 46)\n          i = A._Parser_handleIdentifier(parser, i, source, stack, true);\n        else {\n          ++i;\n          switch (ch) {\n            case 44:\n              break;\n            case 58:\n              stack.push(false);\n              break;\n            case 33:\n              stack.push(true);\n              break;\n            case 59:\n              stack.push(A._Parser_toType(parser.u, parser.e, stack.pop()));\n              break;\n            case 94:\n              stack.push(A._Universe__lookupGenericFunctionParameterRti(parser.u, stack.pop()));\n              break;\n            case 35:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 5, \"#\"));\n              break;\n            case 64:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 2, \"@\"));\n              break;\n            case 126:\n              stack.push(A._Universe__lookupTerminalRti(parser.u, 3, \"~\"));\n              break;\n            case 60:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 62:\n              universe = parser.u;\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              head = stack.pop();\n              if (typeof head == \"string\")\n                stack.push(A._Universe__lookupInterfaceRti(universe, head, array));\n              else {\n                base = A._Parser_toType(universe, parser.e, head);\n                switch (base._kind) {\n                  case 11:\n                    stack.push(A._Universe__lookupGenericFunctionRti(universe, base, array, parser.n));\n                    break;\n                  default:\n                    stack.push(A._Universe__lookupBindingRti(universe, base, array));\n                    break;\n                }\n              }\n              break;\n            case 38:\n              A._Parser_handleExtendedOperations(parser, stack);\n              break;\n            case 42:\n              u = parser.u;\n              stack.push(A._Universe__lookupStarRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 63:\n              u = parser.u;\n              stack.push(A._Universe__lookupQuestionRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 47:\n              u = parser.u;\n              stack.push(A._Universe__lookupFutureOrRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n));\n              break;\n            case 40:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 41:\n              universe = parser.u;\n              parameters = new A._FunctionParameters();\n              optionalPositional = universe.sEA;\n              named = universe.sEA;\n              head = stack.pop();\n              if (typeof head == \"number\")\n                switch (head) {\n                  case -1:\n                    optionalPositional = stack.pop();\n                    break;\n                  case -2:\n                    named = stack.pop();\n                    break;\n                  default:\n                    stack.push(head);\n                    break;\n                }\n              else\n                stack.push(head);\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              parameters._requiredPositional = array;\n              parameters._optionalPositional = optionalPositional;\n              parameters._named = named;\n              stack.push(A._Universe__lookupFunctionRti(universe, A._Parser_toType(universe, parser.e, stack.pop()), parameters));\n              break;\n            case 91:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 93:\n              array = stack.splice(parser.p);\n              A._Parser_toTypes(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              stack.push(array);\n              stack.push(-1);\n              break;\n            case 123:\n              stack.push(parser.p);\n              parser.p = stack.length;\n              break;\n            case 125:\n              array = stack.splice(parser.p);\n              A._Parser_toTypesNamed(parser.u, parser.e, array);\n              parser.p = stack.pop();\n              stack.push(array);\n              stack.push(-2);\n              break;\n            default:\n              throw \"Bad character \" + ch;\n          }\n        }\n      }\n      item = stack.pop();\n      return A._Parser_toType(parser.u, parser.e, item);\n    }",
+        "type": "Rti Function(Object?)"
+      },
+      "1041854750": {
+        "id": "function/1041854750",
+        "kind": "function",
+        "name": "_setRest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes field)",
+        "inlinedCount": 4,
+        "code": "",
+        "type": "void Function(Rti,Object?)"
       },
       "1042482096": {
         "id": "function/1042482096",
@@ -15490,72 +21654,90 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(String)",
-        "measurements": null
+        "code": "",
+        "type": "String Function(String)"
       },
-      "1047605700": {
-        "id": "function/1047605700",
+      "1046014704": {
+        "id": "function/1046014704",
         "kind": "function",
-        "name": "moveNext",
-        "size": 512,
+        "name": "_createFutureOrRti",
+        "size": 841,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/365655194",
+        "parent": "class/769860706",
         "children": [],
         "modifiers": {
-          "static": false,
+          "static": true,
           "const": false,
           "factory": false,
           "external": false
         },
-        "returnType": "bool",
-        "inferredReturnType": "[exact=JSBool]",
-        "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "moveNext$0: function() {\n  var t1, $length, t2;\n  t1 = this.__internal$_iterable;\n  $length = t1.get$length(t1);\n  if (this.__internal$_length !== $length)\n    throw H.wrapException(P.ConcurrentModificationError$(t1));\n  t2 = this.__internal$_index;\n  if (t2 >= $length) {\n    this.__internal$_current = null;\n    return false;\n  }\n  this.__internal$_current = t1.elementAt$1(0, t2);\n  ++this.__internal$_index;\n  return true;\n}\n",
-        "type": "bool Function()",
-        "measurements": null
-      },
-      "1049802380": {
-        "id": "function/1049802380",
-        "kind": "function",
-        "name": "getField",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "modifiers": {
-          "static": false,
-          "const": false,
-          "factory": false,
-          "external": false
-        },
-        "returnType": "dynamic",
-        "inferredReturnType": "[null|subclass=Object]",
+        "returnType": "Rti",
+        "inferredReturnType": "[null|exact=Rti]",
         "parameters": [
           {
-            "name": "object",
+            "name": "universe",
             "type": "[null|subclass=Object]",
-            "declaredType": "dynamic"
+            "declaredType": "Object?"
           },
           {
-            "name": "name",
-            "type": "[null|subclass=Object]",
+            "name": "baseType",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          },
+          {
+            "name": "key",
+            "type": "[exact=JSString]",
             "declaredType": "String"
+          },
+          {
+            "name": "normalize",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
           }
         ],
-        "sideEffects": "SideEffects(reads anything; writes nothing)",
-        "inlinedCount": 11,
-        "code": null,
-        "type": "dynamic Function(dynamic,String)",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Universe__createFutureOrRti(universe, baseType, key, normalize) {\n      var t1, t2, rti;\n      if (normalize) {\n        t1 = baseType._kind;\n        if (!A.isStrongTopType(baseType))\n          if (!(baseType === type$.legacy_Object))\n            t2 = baseType === type$.Object;\n          else\n            t2 = true;\n        else\n          t2 = true;\n        if (t2 || baseType === type$.Object)\n          return baseType;\n        else if (t1 === 1)\n          return A._Universe__lookupInterfaceRti(universe, \"Future\", [baseType]);\n        else if (baseType === type$.Null || baseType === type$.JSNull)\n          return type$.nullable_Future_Null;\n      }\n      rti = new A.Rti(null, null);\n      rti._kind = 8;\n      rti._primary = baseType;\n      rti._canonicalRecipe = key;\n      return A._Universe__installTypeTests(universe, rti);\n    }",
+        "type": "Rti Function(Object?,Rti,String,bool)"
+      },
+      "1050426556": {
+        "id": "function/1050426556",
+        "kind": "function",
+        "name": "handleTypeArguments",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/926198907",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "parser",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          },
+          {
+            "name": "stack",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object?,Object?)"
       },
       "1051093947": {
         "id": "function/1051093947",
         "kind": "function",
         "name": "toString",
-        "size": 110,
+        "size": 214,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/317291728",
         "children": [],
@@ -15570,9 +21752,8 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "toString$0: function(_) {\n  return \"Closure '\" + H.Primitives_objectTypeName(this).trim() + \"'\";\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "code": "toString$0(_) {\n      var $constructor = this.constructor,\n        $name = $constructor == null ? null : $constructor.name;\n      return \"Closure '\" + A.unminifyOrTag($name == null ? \"unknown\" : $name) + \"'\";\n    }",
+        "type": "String Function()"
       },
       "1055095230": {
         "id": "function/1055095230",
@@ -15593,15 +21774,42 @@
         "parameters": [],
         "sideEffects": "SideEffects(reads field; writes nothing)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "bool Function(Object) Function()",
-        "measurements": null
+        "code": "",
+        "type": "bool Function(Object) Function()"
+      },
+      "1055215220": {
+        "id": "function/1055215220",
+        "kind": "function",
+        "name": "asRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 96,
+        "code": "",
+        "type": "Rti Function(Object?)"
       },
       "1058735230": {
         "id": "function/1058735230",
         "kind": "function",
         "name": "then",
-        "size": 409,
+        "size": 983,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
@@ -15611,25 +21819,24 @@
           "factory": false,
           "external": false
         },
-        "returnType": "Future<then.R>",
+        "returnType": "Future<#A/*free*/>",
         "inferredReturnType": "[exact=_Future]",
         "parameters": [
           {
             "name": "f",
             "type": "[subclass=Closure]",
-            "declaredType": "dynamic Function(_Future.T)"
+            "declaredType": "FutureOr<then.R> Function(_Future.T)"
           },
           {
             "name": "onError",
             "type": "[null|subclass=Closure]",
-            "declaredType": "Function"
+            "declaredType": "Function?"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "then$2$onError: function(f, onError) {\n  var currentZone = $.Zone__current;\n  if (currentZone !== C.C__RootZone) {\n    currentZone.toString;\n    if (onError != null)\n      onError = P._registerErrorHandler(onError, currentZone);\n  }\n  return this._thenNoZoneRegistration$2(f, onError);\n}\nthen$1: function(f) {\n  return this.then$2$onError(f, null);\n}\n",
-        "type": "Future<then.R> Function(dynamic Function(_Future.T),{Function onError})",
-        "measurements": null
+        "code": "then$1$2$onError(f, onError, $R) {\n      var currentZone, result, t2,\n        t1 = this.$ti;\n      t1._bind$1($R)._eval$1(\"1/(2)\")._as(f);\n      currentZone = $.Zone__current;\n      if (currentZone === B.C__RootZone) {\n        if (onError != null && !type$.dynamic_Function_Object_StackTrace._is(onError) && !type$.dynamic_Function_Object._is(onError))\n          throw A.wrapException(A.ArgumentError$value(onError, \"onError\", string$.Error_));\n      } else {\n        $R._eval$1(\"@<0/>\")._bind$1(t1._precomputed1)._eval$1(\"1(2)\")._as(f);\n        if (onError != null)\n          onError = A._registerErrorHandler(onError, currentZone);\n      }\n      result = new A._Future(currentZone, $R._eval$1(\"_Future<0>\"));\n      t2 = onError == null ? 1 : 3;\n      this._addListener$1(new A._FutureListener(result, t2, f, onError, t1._eval$1(\"@<1>\")._bind$1($R)._eval$1(\"_FutureListener<1,2>\")));\n      return result;\n    }\nthen$1$1(f, $R) {\n      return this.then$1$2$onError(f, null, $R);\n    }",
+        "type": "Future<#A> Function<#A extends Object?>(FutureOr<#A> Function(_Future.T),{Function? onError})"
       },
       "1060110710": {
         "id": "function/1060110710",
@@ -15656,15 +21863,14 @@
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 1,
-        "code": null,
-        "type": "String Function(List<dynamic>)",
-        "measurements": null
+        "code": "",
+        "type": "String Function(List<dynamic>)"
       },
       "1060205580": {
         "id": "function/1060205580",
         "kind": "function",
         "name": "_computeThisScript",
-        "size": 278,
+        "size": 285,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
@@ -15674,20 +21880,41 @@
           "factory": false,
           "external": false
         },
+        "returnType": "String?",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_computeThisScript() {\n      var currentScript = init.currentScript;\n      if (currentScript != null)\n        return String(currentScript.src);\n      if (A.boolConversionCheck(!self.window && !!self.postMessage))\n        return A._computeThisScriptFromTrace();\n      return null;\n    }",
+        "type": "String? Function()"
+      },
+      "1061931090": {
+        "id": "function/1061931090",
+        "kind": "function",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
         "returnType": "String",
         "inferredReturnType": "[null|exact=JSString]",
         "parameters": [],
-        "sideEffects": "SideEffects(reads anything; writes anything)",
-        "inlinedCount": 0,
-        "code": "_computeThisScript: function() {\n  var currentScript = init.currentScript;\n  if (currentScript != null)\n    return String(currentScript.src);\n  if ((!self.window && !!self.postMessage) === true)\n    return H._computeThisScriptFromTrace();\n  return;\n}\n",
-        "type": "String Function()",
-        "measurements": null
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "String Function()"
       },
       "1065856678": {
         "id": "function/1065856678",
         "kind": "function",
         "name": "_completeError",
-        "size": 117,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/714718140",
         "children": [],
@@ -15707,15 +21934,98 @@
           },
           {
             "name": "stackTrace",
-            "type": "[null|subclass=Object]",
+            "type": "[subtype=StackTrace]",
             "declaredType": "StackTrace"
           }
         ],
         "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": "",
+        "type": "void Function(Object,StackTrace)"
+      },
+      "1068396938": {
+        "id": "function/1068396938",
+        "kind": "function",
+        "name": "_installSpecializedAsCheck",
+        "size": 505,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/579882441",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
         "inlinedCount": 0,
-        "code": "_completeError$2: function(error, stackTrace) {\n  this.future._asyncCompleteError$2(error, stackTrace);\n}\n",
-        "type": "void Function(Object,StackTrace)",
-        "measurements": null
+        "code": "_installSpecializedAsCheck(object) {\n      var t1, asFn, testRti = this;\n      if (!A.isStrongTopType(testRti))\n        if (!(testRti === type$.legacy_Object))\n          t1 = testRti === type$.Object;\n        else\n          t1 = true;\n      else\n        t1 = true;\n      if (t1)\n        asFn = A._asTop;\n      else if (testRti === type$.Object)\n        asFn = A._asObject;\n      else\n        asFn = A._generalNullableAsCheckImplementation;\n      testRti._as = asFn;\n      return testRti._as(object);\n    }",
+        "type": "bool Function(Object?)"
+      },
+      "1069756346": {
+        "id": "function/1069756346",
+        "kind": "function",
+        "name": "isString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070435853",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object?"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 5,
+        "code": "",
+        "type": "bool Function(Object?)"
+      },
+      "1070901287": {
+        "id": "function/1070901287",
+        "kind": "function",
+        "name": "_getStarArgument",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Rti",
+        "inferredReturnType": "[exact=Rti]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|exact=Rti]",
+            "declaredType": "Rti"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 8,
+        "code": "",
+        "type": "Rti Function(Rti)"
       }
     },
     "typedef": {},
@@ -15724,197 +22034,122 @@
         "id": "field/607252",
         "kind": "field",
         "name": "callback",
-        "size": 9,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/733467750",
         "children": [],
         "inferredType": "[subclass=Closure]",
-        "code": "callback\n",
+        "code": "",
         "type": "void Function()"
       },
       "4524053": {
         "id": "field/4524053",
         "kind": "field",
         "name": "_hasValue",
-        "size": 30,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
         "inferredType": "[exact=JSBool]",
-        "code": "_hasValue\n_hasValue\n_hasValue\n",
+        "code": "",
         "type": "bool"
       },
       "8965675": {
         "id": "field/8965675",
         "kind": "field",
         "name": "thisScript",
-        "size": 0,
+        "size": 101,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": null,
-        "type": "String"
+        "code": "_lazy($, \"thisScript\", \"$get$thisScript\", function() {\n      return A._computeThisScript();\n    });\n",
+        "type": "String?"
       },
       "9743357": {
         "id": "field/9743357",
         "kind": "field",
         "name": "_handle",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/32494041",
         "children": [],
         "inferredType": "[null|subclass=JSInt]",
-        "code": "_handle\n",
-        "type": "int"
-      },
-      "16888485": {
-        "id": "field/16888485",
-        "kind": "field",
-        "name": "_index",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/958488954",
-        "children": [],
-        "inferredType": "[subclass=JSInt]",
-        "code": null,
-        "type": "int"
-      },
-      "17152193": {
-        "id": "field/17152193",
-        "kind": "field",
-        "name": "getType",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "code": "",
+        "type": "int?"
       },
       "23408725": {
         "id": "field/23408725",
         "kind": "field",
         "name": "_message",
-        "size": 9,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/790616034",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": "_message\n",
+        "code": "",
         "type": "String"
       },
       "24026359": {
         "id": "field/24026359",
         "kind": "field",
         "name": "error",
-        "size": 7,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/577121337",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "error<\n",
+        "code": "",
         "type": "Object"
       },
       "29748263": {
         "id": "field/29748263",
         "kind": "field",
         "name": "_lastPriorityCallback",
-        "size": 0,
+        "size": 33,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
         "inferredType": "[null|exact=_AsyncCallbackEntry]",
-        "code": null,
-        "type": "_AsyncCallbackEntry"
+        "code": "$._lastPriorityCallback = null;\n",
+        "type": "_AsyncCallbackEntry?"
+      },
+      "35094111": {
+        "id": "field/35094111",
+        "kind": "field",
+        "name": "_irritant",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/383904536",
+        "children": [],
+        "inferredType": "[null]",
+        "code": "",
+        "type": "dynamic"
       },
       "42778158": {
         "id": "field/42778158",
         "kind": "field",
         "name": "_current",
-        "size": 0,
+        "size": 34,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1059755229",
         "children": [],
-        "inferredType": "[null|exact=_RootZone]",
-        "code": null,
-        "type": "Zone"
-      },
-      "43092689": {
-        "id": "field/43092689",
-        "kind": "field",
-        "name": "IS_HUNK_LOADED",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/965528565",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"isHunkLoaded\")",
-        "code": null,
-        "type": "String",
-        "const": true
-      },
-      "51249772": {
-        "id": "field/51249772",
-        "kind": "field",
-        "name": "_isPaused",
-        "size": 10,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/1040168844",
-        "children": [],
-        "inferredType": "[exact=JSBool]",
-        "code": "_isPaused\n",
-        "type": "bool"
-      },
-      "51929026": {
-        "id": "field/51929026",
-        "kind": "field",
-        "name": "_iterator",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/680257415",
-        "children": [],
-        "inferredType": "[subtype=Iterator]",
-        "code": null,
-        "type": "Iterator<SkipIterator.E>"
-      },
-      "52345936": {
-        "id": "field/52345936",
-        "kind": "field",
-        "name": "_endOrLength",
-        "size": 13,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/60704969",
-        "children": [],
-        "inferredType": "[null]",
-        "code": "_endOrLength\n",
-        "type": "int"
+        "inferredType": "[exact=_RootZone]",
+        "code": "$.Zone__current = B.C__RootZone;\n",
+        "type": "_Zone"
       },
       "55197673": {
         "id": "field/55197673",
         "kind": "field",
         "name": "_method",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[subclass=JSInt]",
-        "code": "_method\n",
+        "code": "",
         "type": "int"
       },
-      "55541185": {
-        "id": "field/55541185",
-        "kind": "field",
-        "name": "MANGLED_GLOBAL_NAMES",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/965528565",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"mangledGlobalNames\")",
-        "code": null,
-        "type": "String",
-        "const": true
-      },
       "60719081": {
         "id": "field/60719081",
         "kind": "field",
@@ -15924,218 +22159,128 @@
         "parent": "class/742137989",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "LinkedHashMapKeyIterator.E"
+        "code": "",
+        "type": "LinkedHashMapKeyIterator.E?"
       },
       "60920969": {
         "id": "field/60920969",
         "kind": "field",
         "name": "_first",
-        "size": 7,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
         "inferredType": "[null|exact=_LinkedHashSetCell]",
-        "code": "_first\n",
-        "type": "_LinkedHashSetCell"
+        "code": "",
+        "type": "_LinkedHashSetCell?"
       },
       "65712884": {
         "id": "field/65712884",
         "kind": "field",
         "name": "_modifications",
-        "size": 15,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/113750884",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": "_modifications\n",
+        "code": "",
         "type": "int"
       },
-      "70141207": {
-        "id": "field/70141207",
-        "kind": "field",
-        "name": "_typeName",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/269073412",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "String"
-      },
-      "79374407": {
-        "id": "field/79374407",
-        "kind": "field",
-        "name": "maskWhencomplete",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/80405414",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
       "79943715": {
         "id": "field/79943715",
         "kind": "field",
         "name": "nullPropertyPattern",
-        "size": 0,
+        "size": 218,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_nullPropertyPattern\", \"$get$TypeErrorDecoder_nullPropertyPattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokePropertyErrorOn(null));\n    });\n",
         "type": "TypeErrorDecoder"
       },
-      "83424460": {
-        "id": "field/83424460",
+      "103923631": {
+        "id": "field/103923631",
         "kind": "field",
-        "name": "helloWorld",
-        "size": 0,
-        "outputUnit": "outputUnit/7045321",
-        "parent": "library/239009133",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"Hello, World!\")",
-        "code": null,
-        "type": "dynamic",
-        "const": true
-      },
-      "110087164": {
-        "id": "field/110087164",
-        "kind": "field",
-        "name": "IS_HUNK_INITIALIZED",
+        "name": "_stackTrace",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/965528565",
+        "parent": "class/786261494",
         "children": [],
-        "inferredType": "Value([exact=JSString], value: \"isHunkInitialized\")",
-        "code": null,
-        "type": "String",
-        "const": true
+        "inferredType": "Value([exact=JSString], value: \"\")",
+        "code": "",
+        "type": "String"
+      },
+      "111785749": {
+        "id": "field/111785749",
+        "kind": "field",
+        "name": "_precomputed4",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "inferredType": "[null]",
+        "code": "",
+        "type": "Object?"
       },
       "111931226": {
         "id": "field/111931226",
         "kind": "field",
         "name": "start",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/974704527",
         "children": [],
-        "inferredType": "[null|subclass=JSUInt32]",
-        "code": "start\n",
-        "type": "num"
+        "inferredType": "[null|exact=JSUInt31]",
+        "code": "",
+        "type": "num?"
       },
       "112618843": {
         "id": "field/112618843",
         "kind": "field",
         "name": "_length",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
         "inferredType": "[subclass=JSUInt32]",
-        "code": "_length\n",
+        "code": "",
         "type": "int"
       },
-      "116849538": {
-        "id": "field/116849538",
-        "kind": "field",
-        "name": "areOptionalParametersNamed",
-        "size": 27,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[exact=JSBool]",
-        "code": "areOptionalParametersNamed\n",
-        "type": "bool"
-      },
-      "118657756": {
-        "id": "field/118657756",
-        "kind": "field",
-        "name": "DOLLAR_CHAR_VALUE",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/354160010",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
       "123513767": {
         "id": "field/123513767",
         "kind": "field",
         "name": "_expr",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[subclass=JSInt]",
-        "code": "_expr\n",
+        "code": "",
         "type": "int"
       },
-      "125761045": {
-        "id": "field/125761045",
-        "kind": "field",
-        "name": "DEFERRED_PART_URIS",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/965528565",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"deferredPartUris\")",
-        "code": null,
-        "type": "String",
-        "const": true
-      },
-      "125830184": {
-        "id": "field/125830184",
-        "kind": "field",
-        "name": "_self",
-        "size": 6,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/138211367",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "_self\n",
-        "type": "dynamic"
-      },
       "126292751": {
         "id": "field/126292751",
         "kind": "field",
         "name": "_cspNonce",
-        "size": 0,
+        "size": 97,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": null,
-        "type": "String"
+        "code": "_lazy($, \"_cspNonce\", \"$get$_cspNonce\", function() {\n      return A._computeCspNonce();\n    });\n",
+        "type": "String?"
       },
       "127038922": {
         "id": "field/127038922",
         "kind": "field",
         "name": "_trace",
-        "size": 7,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/518228506",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "_trace\n",
-        "type": "String"
-      },
-      "130159427": {
-        "id": "field/130159427",
-        "kind": "field",
-        "name": "OPTIONAL_PARAMETERS_INFO",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[null|exact=JSString]",
+        "code": "",
+        "type": "String?"
       },
       "130629664": {
         "id": "field/130629664",
@@ -16146,31 +22291,31 @@
         "parent": "class/742137989",
         "children": [],
         "inferredType": "[subclass=JsLinkedHashMap]",
-        "code": null,
-        "type": "dynamic"
+        "code": "",
+        "type": "JsLinkedHashMap<dynamic,dynamic>"
       },
       "140571055": {
         "id": "field/140571055",
         "kind": "field",
         "name": "message",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/991730135",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": "message\n",
-        "type": "String"
+        "code": "",
+        "type": "String?"
       },
       "146902950": {
         "id": "field/146902950",
         "kind": "field",
         "name": "noSuchMethodPattern",
-        "size": 0,
+        "size": 291,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_noSuchMethodPattern\", \"$get$TypeErrorDecoder_noSuchMethodPattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokeCallErrorOn({\n        toString: function() {\n          return \"$receiver$\";\n        }\n      }));\n    });\n",
         "type": "TypeErrorDecoder"
       },
       "153611669": {
@@ -16182,154 +22327,79 @@
         "parent": "class/716671121",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
-      "153843292": {
-        "id": "field/153843292",
-        "kind": "field",
-        "name": "_index",
-        "size": 18,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/365655194",
-        "children": [],
-        "inferredType": "[subclass=JSPositiveInt]",
-        "code": "__internal$_index\n",
-        "type": "int"
-      },
-      "154746101": {
-        "id": "field/154746101",
-        "kind": "field",
-        "name": "_current",
-        "size": 20,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/365655194",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "__internal$_current\n",
-        "type": "ListIterator.E"
-      },
-      "159930244": {
-        "id": "field/159930244",
-        "kind": "field",
-        "name": "CALL_CATCH_ALL",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "162036481": {
-        "id": "field/162036481",
-        "kind": "field",
-        "name": "ERROR",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/237882207",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
       "169031325": {
         "id": "field/169031325",
         "kind": "field",
         "name": "undefinedCallPattern",
-        "size": 0,
+        "size": 218,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_undefinedCallPattern\", \"$get$TypeErrorDecoder_undefinedCallPattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokeCallErrorOn(void 0));\n    });\n",
         "type": "TypeErrorDecoder"
       },
       "172148876": {
         "id": "field/172148876",
         "kind": "field",
         "name": "_stateData",
-        "size": 11,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1040168844",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_stateData\n",
-        "type": "Object"
+        "code": "",
+        "type": "Object?"
       },
-      "180845508": {
-        "id": "field/180845508",
+      "173819446": {
+        "id": "field/173819446",
         "kind": "field",
-        "name": "_target",
-        "size": 8,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/138211367",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "_target\n",
-        "type": "dynamic"
-      },
-      "185234473": {
-        "id": "field/185234473",
-        "kind": "field",
-        "name": "message",
+        "name": "_hasValue",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/644348892",
+        "parent": "class/1040168844",
         "children": [],
-        "inferredType": "[exact=JSString]",
-        "code": null,
-        "type": "String"
-      },
-      "186466978": {
-        "id": "field/186466978",
-        "kind": "field",
-        "name": "microsecondsPerSecond",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "Value([exact=JSBool], value: false)",
+        "code": "",
+        "type": "bool"
       },
       "187449514": {
         "id": "field/187449514",
         "kind": "field",
         "name": "state",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/80405414",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": "state\n",
+        "code": "",
         "type": "int"
       },
       "189240247": {
         "id": "field/189240247",
         "kind": "field",
         "name": "undefinedPropertyPattern",
-        "size": 0,
+        "size": 230,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_undefinedPropertyPattern\", \"$get$TypeErrorDecoder_undefinedPropertyPattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokePropertyErrorOn(void 0));\n    });\n",
         "type": "TypeErrorDecoder"
       },
       "190358771": {
         "id": "field/190358771",
         "kind": "field",
         "name": "message",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/948502579",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": "message\n",
+        "code": "",
         "type": "String"
       },
       "190934046": {
@@ -16341,106 +22411,67 @@
         "parent": "class/73206861",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": null,
+        "code": "",
         "type": "String"
       },
       "192950192": {
         "id": "field/192950192",
         "kind": "field",
         "name": "hashMapCellValue",
-        "size": 18,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/500662026",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "hashMapCellValue@\n",
+        "code": "",
         "type": "dynamic"
       },
-      "202409972": {
-        "id": "field/202409972",
-        "kind": "field",
-        "name": "REQUIRED_PARAMETER_PROPERTY",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
       "202484522": {
         "id": "field/202484522",
         "kind": "field",
         "name": "_rest",
-        "size": 18,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "__js_helper$_rest\n",
+        "code": "",
         "type": "dynamic"
       },
-      "206386055": {
-        "id": "field/206386055",
+      "206062167": {
+        "id": "field/206062167",
         "kind": "field",
-        "name": "jsFunction",
-        "size": 11,
+        "name": "_precomputed1",
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
+        "parent": "class/214521760",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "jsFunction\n",
-        "type": "dynamic"
-      },
-      "214758996": {
-        "id": "field/214758996",
-        "kind": "field",
-        "name": "DEFERRED_LIBRARY_PARTS",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/965528565",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"deferredLibraryParts\")",
-        "code": null,
-        "type": "String",
-        "const": true
-      },
-      "221593932": {
-        "id": "field/221593932",
-        "kind": "field",
-        "name": "isFunctionType",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "code": "",
+        "type": "Object?"
       },
       "221913650": {
         "id": "field/221913650",
         "kind": "field",
         "name": "next",
-        "size": 5,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/733467750",
         "children": [],
         "inferredType": "[null|exact=_AsyncCallbackEntry]",
-        "code": "next\n",
-        "type": "_AsyncCallbackEntry"
+        "code": "",
+        "type": "_AsyncCallbackEntry?"
       },
       "229586442": {
         "id": "field/229586442",
         "kind": "field",
         "name": "_rest",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_rest\n",
+        "code": "",
         "type": "dynamic"
       },
       "231027572": {
@@ -16452,179 +22483,127 @@
         "parent": "class/216047131",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": null,
+        "code": "",
         "type": "String"
       },
       "232791153": {
         "id": "field/232791153",
         "kind": "field",
         "name": "_strings",
-        "size": 21,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "__js_helper$_strings\n",
+        "code": "",
         "type": "dynamic"
       },
       "237146195": {
         "id": "field/237146195",
         "kind": "field",
         "name": "_iterable",
-        "size": 10,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
         "inferredType": "[subclass=JSArray]",
-        "code": "_iterable\n",
+        "code": "",
         "type": "JSArray<ArrayIterator.E>"
       },
-      "240049228": {
-        "id": "field/240049228",
+      "239805186": {
+        "id": "field/239805186",
         "kind": "field",
-        "name": "_stateIncomplete",
+        "name": "_as",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/784178238",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
-      "241563122": {
-        "id": "field/241563122",
+      "242140830": {
+        "id": "field/242140830",
         "kind": "field",
-        "name": "SUCCESS",
+        "name": "_precomputed2",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/237882207",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[null]",
+        "code": "",
+        "type": "Object?"
       },
       "244162491": {
         "id": "field/244162491",
         "kind": "field",
         "name": "_loadedLibraries",
-        "size": 0,
+        "size": 139,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
         "inferredType": "[null|subclass=_LinkedHashSet]",
-        "code": null,
+        "code": "_lazyFinal($, \"_loadedLibraries\", \"$get$_loadedLibraries\", function() {\n      return A.LinkedHashSet_LinkedHashSet(type$.String);\n    });\n",
         "type": "Set<String>"
       },
       "249142929": {
         "id": "field/249142929",
         "kind": "field",
         "name": "code",
-        "size": 5,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/949988971",
         "children": [],
         "inferredType": "Value([exact=JSString], value: \"function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n}\")",
-        "code": "code\n",
+        "code": "",
         "type": "String"
       },
-      "259683855": {
-        "id": "field/259683855",
-        "kind": "field",
-        "name": "functionType",
-        "size": 13,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "functionType\n",
-        "type": "dynamic"
-      },
       "261042870": {
         "id": "field/261042870",
         "kind": "field",
         "name": "_hasErrorStackProperty",
-        "size": 0,
+        "size": 130,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/631335891",
         "children": [],
         "inferredType": "[null|exact=JSBool]",
-        "code": null,
+        "code": "_lazy($, \"_hasErrorStackProperty\", \"$get$_hasErrorStackProperty\", function() {\n      return new Error().stack != void 0;\n    });\n",
         "type": "bool"
       },
       "269363605": {
         "id": "field/269363605",
         "kind": "field",
         "name": "_first",
-        "size": 19,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
         "inferredType": "[null|exact=LinkedHashMapCell]",
-        "code": "__js_helper$_first\n",
-        "type": "LinkedHashMapCell"
-      },
-      "275000790": {
-        "id": "field/275000790",
-        "kind": "field",
-        "name": "_pattern",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/958488954",
-        "children": [],
-        "inferredType": "[exact=JSString]",
-        "code": null,
-        "type": "String"
-      },
-      "285504086": {
-        "id": "field/285504086",
-        "kind": "field",
-        "name": "_stateError",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/784178238",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "code": "",
+        "type": "LinkedHashMapCell?"
       },
       "295541341": {
         "id": "field/295541341",
         "kind": "field",
         "name": "_previous",
-        "size": 10,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/868658259",
         "children": [],
         "inferredType": "[null|exact=_LinkedHashSetCell]",
-        "code": "_previous\n",
-        "type": "_LinkedHashSetCell"
-      },
-      "299693352": {
-        "id": "field/299693352",
-        "kind": "field",
-        "name": "microsecondsPerDay",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
-        "children": [],
-        "inferredType": "[subclass=JSPositiveInt]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "code": "",
+        "type": "_LinkedHashSetCell?"
       },
       "302220255": {
         "id": "field/302220255",
         "kind": "field",
         "name": "_receiver",
-        "size": 10,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/138211367",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_receiver\n",
+        "code": "",
         "type": "dynamic"
       },
       "303835005": {
@@ -16636,290 +22615,213 @@
         "parent": "class/934351233",
         "children": [],
         "inferredType": "[exact=_RootZone]",
-        "code": null,
+        "code": "",
         "type": "_Zone"
       },
       "304825305": {
         "id": "field/304825305",
         "kind": "field",
         "name": "result",
-        "size": 7,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/80405414",
         "children": [],
         "inferredType": "[exact=_Future]",
-        "code": "result\n",
+        "code": "",
         "type": "_Future<_FutureListener.T>"
       },
       "305114389": {
         "id": "field/305114389",
         "kind": "field",
         "name": "_subscription",
-        "size": 14,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1040168844",
         "children": [],
         "inferredType": "[null]",
-        "code": "_subscription\n",
-        "type": "StreamSubscription<dynamic>"
+        "code": "",
+        "type": "StreamSubscription<_StreamIterator.T>?"
       },
-      "319720392": {
-        "id": "field/319720392",
+      "307514869": {
+        "id": "field/307514869",
         "kind": "field",
-        "name": "message",
+        "name": "typeParameterVariances",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/324980341",
+        "parent": "class/251751824",
         "children": [],
-        "inferredType": "[null|exact=JSString]",
-        "code": null,
+        "inferredType": "Value([exact=JSString], value: \"tPV\")",
+        "code": "",
         "type": "String"
       },
-      "334228980": {
-        "id": "field/334228980",
-        "kind": "field",
-        "name": "_completer",
-        "size": 11,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/850763763",
-        "children": [],
-        "inferredType": "[exact=_SyncCompleter]",
-        "code": "_completer\n",
-        "type": "Completer<_AsyncAwaitCompleter.T>"
-      },
       "337959975": {
         "id": "field/337959975",
         "kind": "field",
         "name": "undefinedLiteralPropertyPattern",
-        "size": 0,
+        "size": 320,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_undefinedLiteralPropertyPattern\", \"$get$TypeErrorDecoder_undefinedLiteralPropertyPattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(function() {\n        try {\n          (void 0).$method$;\n        } catch (e) {\n          return e.message;\n        }\n      }());\n    });\n",
         "type": "TypeErrorDecoder"
       },
-      "338588500": {
-        "id": "field/338588500",
-        "kind": "field",
-        "name": "requiredParameterCount",
-        "size": 23,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[subclass=JSInt]",
-        "code": "requiredParameterCount\n",
-        "type": "int"
-      },
       "343514633": {
         "id": "field/343514633",
         "kind": "field",
         "name": "callback",
-        "size": 9,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/80405414",
         "children": [],
         "inferredType": "[subclass=Closure]",
-        "code": "callback\n",
-        "type": "Function"
+        "code": "",
+        "type": "Function?"
       },
       "345425066": {
         "id": "field/345425066",
         "kind": "field",
         "name": "_receiver",
-        "size": 10,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/17649844",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": "_receiver\n",
-        "type": "String"
+        "code": "",
+        "type": "String?"
       },
       "346735010": {
         "id": "field/346735010",
         "kind": "field",
         "name": "_message",
-        "size": 9,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/27679401",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": "_message\n",
+        "code": "",
         "type": "String"
       },
       "347443343": {
         "id": "field/347443343",
         "kind": "field",
         "name": "_method",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/17649844",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": "_method\n",
-        "type": "String"
+        "code": "",
+        "type": "String?"
       },
       "347672432": {
         "id": "field/347672432",
         "kind": "field",
         "name": "_nums",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_nums\n",
+        "code": "",
         "type": "dynamic"
       },
+      "351779368": {
+        "id": "field/351779368",
+        "kind": "field",
+        "name": "_canonicalRecipe",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "",
+        "type": "Object?"
+      },
       "359397062": {
         "id": "field/359397062",
         "kind": "field",
         "name": "_pattern",
-        "size": 9,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": "_pattern\n",
+        "code": "",
         "type": "String"
       },
       "366629653": {
         "id": "field/366629653",
         "kind": "field",
         "name": "nullLiteralPropertyPattern",
-        "size": 0,
+        "size": 306,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_nullLiteralPropertyPattern\", \"$get$TypeErrorDecoder_nullLiteralPropertyPattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(function() {\n        try {\n          null.$method$;\n        } catch (e) {\n          return e.message;\n        }\n      }());\n    });\n",
         "type": "TypeErrorDecoder"
       },
       "368460625": {
         "id": "field/368460625",
         "kind": "field",
         "name": "isSync",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/850763763",
         "children": [],
         "inferredType": "[exact=JSBool]",
-        "code": "isSync?\n",
+        "code": "",
         "type": "bool"
       },
       "368849633": {
         "id": "field/368849633",
         "kind": "field",
         "name": "nullLiteralCallPattern",
-        "size": 0,
+        "size": 360,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_nullLiteralCallPattern\", \"$get$TypeErrorDecoder_nullLiteralCallPattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(function() {\n        var $argumentsExpr$ = \"$arguments$\";\n        try {\n          null.$method$($argumentsExpr$);\n        } catch (e) {\n          return e.message;\n        }\n      }());\n    });\n",
         "type": "TypeErrorDecoder"
       },
-      "370348518": {
-        "id": "field/370348518",
-        "kind": "field",
-        "name": "_stateChained",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/784178238",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "370436126": {
-        "id": "field/370436126",
-        "kind": "field",
-        "name": "_rootZone",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/1052666095",
-        "children": [],
-        "inferredType": "[exact=_RootZone]",
-        "code": null,
-        "type": "_RootZone",
-        "const": true,
-        "initializer": "constant/924662595"
-      },
-      "373519716": {
-        "id": "field/373519716",
-        "kind": "field",
-        "name": "_iterable",
-        "size": 21,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/60704969",
-        "children": [],
-        "inferredType": "Union([exact=SubListIterable], [subclass=JSArray])",
-        "code": "__internal$_iterable\n",
-        "type": "Iterable<SubListIterable.E>"
-      },
       "376257386": {
         "id": "field/376257386",
         "kind": "field",
         "name": "modifiedObject",
-        "size": 15,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/36312556",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "modifiedObject\n",
-        "type": "Object"
-      },
-      "378321689": {
-        "id": "field/378321689",
-        "kind": "field",
-        "name": "maskError",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/80405414",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "code": "",
+        "type": "Object?"
       },
       "381082880": {
         "id": "field/381082880",
         "kind": "field",
         "name": "nullCallPattern",
-        "size": 0,
+        "size": 206,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_nullCallPattern\", \"$get$TypeErrorDecoder_nullCallPattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokeCallErrorOn(null));\n    });\n",
         "type": "TypeErrorDecoder"
       },
       "386221903": {
         "id": "field/386221903",
         "kind": "field",
         "name": "functionCounter",
-        "size": 0,
+        "size": 32,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/317291728",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
+        "inferredType": "[null|subclass=JSInt]",
+        "code": "$.Closure_functionCounter = 0;\n",
         "type": "int"
       },
-      "391942199": {
-        "id": "field/391942199",
-        "kind": "field",
-        "name": "OPERATOR_AS_PREFIX",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
       "398469089": {
         "id": "field/398469089",
         "kind": "field",
@@ -16929,7 +22831,7 @@
         "parent": "class/1070558590",
         "children": [],
         "inferredType": "[subclass=Closure]",
-        "code": null,
+        "code": "",
         "type": "bool Function(_LinkedCustomHashSet.E,_LinkedCustomHashSet.E)"
       },
       "402795939": {
@@ -16941,7 +22843,7 @@
         "parent": "class/216047131",
         "children": [],
         "inferredType": "[subclass=JSInt]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
       "404664193": {
@@ -16953,306 +22855,163 @@
         "parent": "class/216047131",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": null,
+        "code": "",
         "type": "String"
       },
-      "406601007": {
-        "id": "field/406601007",
-        "kind": "field",
-        "name": "_ListConstructorSentinel",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/325218131",
-        "children": [],
-        "inferredType": "[exact=_Growable]",
-        "code": null,
-        "type": "_Growable",
-        "const": true
-      },
       "410301694": {
         "id": "field/410301694",
         "kind": "field",
         "name": "_length",
-        "size": 20,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
         "inferredType": "[subclass=JSPositiveInt]",
-        "code": "_collection$_length\n",
+        "code": "",
         "type": "int"
       },
-      "412345286": {
-        "id": "field/412345286",
+      "410674423": {
+        "id": "field/410674423",
         "kind": "field",
-        "name": "_unmangledName",
+        "name": "_kind",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/269073412",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "String"
-      },
-      "413692838": {
-        "id": "field/413692838",
-        "kind": "field",
-        "name": "rawRuntimeType",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "inferredType": "[exact=JSUInt31]",
+        "code": "",
+        "type": "Object?"
       },
       "414662379": {
         "id": "field/414662379",
         "kind": "field",
         "name": "_method",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/790616034",
         "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "",
+        "type": "String?"
+      },
+      "430387875": {
+        "id": "field/430387875",
+        "kind": "field",
+        "name": "_requiredPositional",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_method\n",
-        "type": "String"
-      },
-      "417944821": {
-        "id": "field/417944821",
-        "kind": "field",
-        "name": "_inTypeAssertion",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "inferredType": "[exact=JSBool]",
-        "code": null,
-        "type": "bool"
-      },
-      "420557924": {
-        "id": "field/420557924",
-        "kind": "field",
-        "name": "isAccessor",
-        "size": 11,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[exact=JSBool]",
-        "code": "isAccessor\n",
-        "type": "bool"
-      },
-      "421412262": {
-        "id": "field/421412262",
-        "kind": "field",
-        "name": "stateThenOnerror",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/80405414",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "422530140": {
-        "id": "field/422530140",
-        "kind": "field",
-        "name": "TYPEDEF_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "code": "",
+        "type": "Object?"
       },
       "431266734": {
         "id": "field/431266734",
         "kind": "field",
         "name": "_previous",
-        "size": 22,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/500662026",
         "children": [],
         "inferredType": "[null|exact=LinkedHashMapCell]",
-        "code": "__js_helper$_previous\n",
-        "type": "LinkedHashMapCell"
-      },
-      "434352794": {
-        "id": "field/434352794",
-        "kind": "field",
-        "name": "isFutureOrType",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
-      },
-      "435101137": {
-        "id": "field/435101137",
-        "kind": "field",
-        "name": "selfFieldNameCache",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/138211367",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "String"
+        "code": "",
+        "type": "LinkedHashMapCell?"
       },
       "435679137": {
         "id": "field/435679137",
         "kind": "field",
         "name": "_modifications",
-        "size": 15,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": "_modifications\n",
+        "code": "",
         "type": "int"
       },
       "443749531": {
         "id": "field/443749531",
         "kind": "field",
         "name": "_s",
-        "size": 3,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/410333734",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": "_s\n",
+        "code": "",
         "type": "String"
       },
-      "446360348": {
-        "id": "field/446360348",
+      "449743822": {
+        "id": "field/449743822",
         "kind": "field",
-        "name": "REQUIRED_PARAMETERS_INFO",
+        "name": "_named",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
+        "parent": "class/121755874",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "447707988": {
-        "id": "field/447707988",
-        "kind": "field",
-        "name": "RTI_NAME",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "449691021": {
-        "id": "field/449691021",
-        "kind": "field",
-        "name": "maskValue",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/80405414",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
       "459351028": {
         "id": "field/459351028",
         "kind": "field",
         "name": "_last",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
         "inferredType": "[null|exact=_LinkedHashSetCell]",
-        "code": "_last\n",
-        "type": "_LinkedHashSetCell"
+        "code": "",
+        "type": "_LinkedHashSetCell?"
       },
       "460958077": {
         "id": "field/460958077",
         "kind": "field",
         "name": "_exception",
-        "size": 11,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/518228506",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_exception\n",
+        "code": "",
         "type": "dynamic"
       },
-      "478876039": {
-        "id": "field/478876039",
+      "468492193": {
+        "id": "field/468492193",
         "kind": "field",
-        "name": "hoursPerDay",
+        "name": "_name",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
+        "parent": "class/745154066",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "483247773": {
-        "id": "field/483247773",
-        "kind": "field",
-        "name": "rawRtiToJsConstructorName",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "inferredType": "[exact=JSString]",
+        "code": "",
+        "type": "String"
       },
       "485816538": {
         "id": "field/485816538",
         "kind": "field",
         "name": "_zone",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
-        "inferredType": "[null|exact=_RootZone]",
-        "code": "_zone\n",
-        "type": "Zone"
-      },
-      "496083304": {
-        "id": "field/496083304",
-        "kind": "field",
-        "name": "FUNCTION_TYPE_GENERIC_BOUNDS_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "inferredType": "[exact=_RootZone]",
+        "code": "",
+        "type": "_Zone"
       },
       "496557243": {
         "id": "field/496557243",
         "kind": "field",
         "name": "_eventLog",
-        "size": 0,
+        "size": 58,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
         "inferredType": "Container([exact=JSExtendableArray], element: [exact=JSString], length: null)",
-        "code": null,
+        "code": "$._eventLog = A._setArrayType([], type$.JSArray_String);\n",
         "type": "List<String>"
       },
       "499560688": {
@@ -17264,219 +23023,176 @@
         "parent": "class/373504153",
         "children": [],
         "inferredType": "[subclass=JsLinkedHashMap]",
-        "code": null,
-        "type": "dynamic"
+        "code": "",
+        "type": "JsLinkedHashMap<dynamic,dynamic>"
       },
       "504170901": {
         "id": "field/504170901",
         "kind": "field",
         "name": "_current",
-        "size": 9,
+        "size": 91,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_current\n",
-        "type": "ArrayIterator.E"
+        "code": "set$_current(_current) {\n      this._current = this.$ti._eval$1(\"1?\")._as(_current);\n    }",
+        "type": "ArrayIterator.E?"
       },
       "505549528": {
         "id": "field/505549528",
         "kind": "field",
         "name": "indexable",
-        "size": 10,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/175705485",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "indexable\n",
+        "inferredType": "[subclass=Object]",
+        "code": "",
         "type": "dynamic"
       },
       "509005655": {
         "id": "field/509005655",
         "kind": "field",
         "name": "name",
-        "size": 15,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": "name\nname\nname\n",
-        "type": "String"
+        "code": "",
+        "type": "String?"
       },
       "509651846": {
         "id": "field/509651846",
         "kind": "field",
         "name": "hashMapCellKey",
-        "size": 15,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/500662026",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "hashMapCellKey\n",
+        "code": "",
         "type": "dynamic"
       },
-      "516194057": {
-        "id": "field/516194057",
+      "511786572": {
+        "id": "field/511786572",
         "kind": "field",
-        "name": "maskTestError",
+        "name": "_evalCache",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/80405414",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
       "522978319": {
         "id": "field/522978319",
         "kind": "field",
         "name": "_toStringVisiting",
-        "size": 0,
+        "size": 75,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/754126564",
         "children": [],
-        "inferredType": "Container([exact=JSExtendableArray], element: Union([subclass=JsLinkedHashMap], [subtype=Iterable]), length: null)",
-        "code": null,
-        "type": "List<dynamic>"
+        "inferredType": "Container([exact=JSExtendableArray], element: Union([exact=LinkedHashMapKeyIterable], [subclass=JSArray], [subclass=JsLinkedHashMap], [subclass=_LinkedHashSet]), length: null)",
+        "code": "$._toStringVisiting = A._setArrayType([], A.findType(\"JSArray<Object>\"));\n",
+        "type": "List<Object>"
       },
-      "525450391": {
-        "id": "field/525450391",
+      "523754696": {
+        "id": "field/523754696",
         "kind": "field",
-        "name": "_length",
-        "size": 19,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/365655194",
-        "children": [],
-        "inferredType": "[subclass=JSInt]",
-        "code": "__internal$_length\n",
-        "type": "int"
-      },
-      "526089142": {
-        "id": "field/526089142",
-        "kind": "field",
-        "name": "_constructorNameFallback",
+        "name": "_primary",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JS_CONST]",
-        "code": null,
-        "type": "JS_CONST",
-        "const": true,
-        "initializer": "constant/586866313"
+        "inferredType": "Union(null, [exact=JSString], [exact=Rti], [subclass=JSInt])",
+        "code": "",
+        "type": "Object?"
       },
-      "563519506": {
-        "id": "field/563519506",
+      "525672864": {
+        "id": "field/525672864",
         "kind": "field",
-        "name": "isJsInteropTypeArgument",
+        "name": "_interceptor",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
+        "parent": "class/138211367",
         "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "dynamic"
+      },
+      "532403335": {
+        "id": "field/532403335",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/690322225",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "",
+        "type": "String"
+      },
+      "558782121": {
+        "id": "field/558782121",
+        "kind": "field",
+        "name": "erasedTypes",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/251751824",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"eT\")",
+        "code": "",
+        "type": "String"
       },
       "577142640": {
         "id": "field/577142640",
         "kind": "field",
         "name": "_index",
-        "size": 7,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/1019758482",
         "children": [],
         "inferredType": "[subclass=JSPositiveInt]",
-        "code": "_index\n",
+        "code": "",
         "type": "int"
       },
-      "586155906": {
-        "id": "field/586155906",
+      "588058281": {
+        "id": "field/588058281",
         "kind": "field",
-        "name": "FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG",
-        "size": 0,
+        "name": "_interceptorFieldNameCache",
+        "size": 51,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
+        "parent": "class/138211367",
         "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "603434183": {
-        "id": "field/603434183",
-        "kind": "field",
-        "name": "cachedSortedIndices",
-        "size": 20,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[null]",
-        "code": "cachedSortedIndices\n",
-        "type": "List<dynamic>"
-      },
-      "618333384": {
-        "id": "field/618333384",
-        "kind": "field",
-        "name": "dartObjectConstructor",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
-      },
-      "626399440": {
-        "id": "field/626399440",
-        "kind": "field",
-        "name": "FUNCTION_CLASS_TYPE_NAME",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "626762025": {
-        "id": "field/626762025",
-        "kind": "field",
-        "name": "_iterable",
-        "size": 21,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/365655194",
-        "children": [],
-        "inferredType": "[exact=SubListIterable]",
-        "code": "__internal$_iterable\n",
-        "type": "Iterable<ListIterator.E>"
+        "inferredType": "[null|exact=JSString]",
+        "code": "$.BoundClosure__interceptorFieldNameCache = null;\n",
+        "type": "String?"
       },
       "627383241": {
         "id": "field/627383241",
         "kind": "field",
         "name": "_message",
-        "size": 9,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/17649844",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": "_message\n",
+        "code": "",
         "type": "String"
       },
       "635439616": {
         "id": "field/635439616",
         "kind": "field",
         "name": "_cell",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/113750884",
         "children": [],
         "inferredType": "[null|exact=_LinkedHashSetCell]",
-        "code": "_cell\n",
-        "type": "_LinkedHashSetCell"
+        "code": "",
+        "type": "_LinkedHashSetCell?"
       },
       "635780781": {
         "id": "field/635780781",
@@ -17487,155 +23203,129 @@
         "parent": "class/742137989",
         "children": [],
         "inferredType": "[null|exact=LinkedHashMapCell]",
-        "code": null,
-        "type": "LinkedHashMapCell"
+        "code": "",
+        "type": "LinkedHashMapCell?"
       },
-      "637404994": {
-        "id": "field/637404994",
+      "636292115": {
+        "id": "field/636292115",
         "kind": "field",
-        "name": "INITIALIZE_LOADED_HUNK",
-        "size": 0,
+        "name": "_receiverFieldNameCache",
+        "size": 48,
         "outputUnit": "outputUnit/669725655",
-        "parent": "library/965528565",
+        "parent": "class/138211367",
         "children": [],
-        "inferredType": "Value([exact=JSString], value: \"initializeLoadedHunk\")",
-        "code": null,
-        "type": "String",
-        "const": true
+        "inferredType": "[null|exact=JSString]",
+        "code": "$.BoundClosure__receiverFieldNameCache = null;\n",
+        "type": "String?"
       },
       "639289778": {
         "id": "field/639289778",
         "kind": "field",
         "name": "_nextCallback",
-        "size": 0,
+        "size": 25,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
         "inferredType": "[null|exact=_AsyncCallbackEntry]",
-        "code": null,
-        "type": "_AsyncCallbackEntry"
+        "code": "$._nextCallback = null;\n",
+        "type": "_AsyncCallbackEntry?"
+      },
+      "639918601": {
+        "id": "field/639918601",
+        "kind": "field",
+        "name": "_bindCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/214521760",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
       "645317327": {
         "id": "field/645317327",
         "kind": "field",
         "name": "notClosurePattern",
-        "size": 0,
+        "size": 302,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_notClosurePattern\", \"$get$TypeErrorDecoder_notClosurePattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokeCallErrorOn({$method$: null,\n        toString: function() {\n          return \"$receiver$\";\n        }\n      }));\n    });\n",
         "type": "TypeErrorDecoder"
       },
-      "645423404": {
-        "id": "field/645423404",
-        "kind": "field",
-        "name": "CALL_NAME_PROPERTY",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
       "646361925": {
         "id": "field/646361925",
         "kind": "field",
         "name": "_current",
-        "size": 21,
+        "size": 115,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/113750884",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_collection$_current\n",
-        "type": "_LinkedHashSetIterator.E"
+        "code": "set$_collection$_current(_current) {\n      this._collection$_current = this.$ti._eval$1(\"1?\")._as(_current);\n    }",
+        "type": "_LinkedHashSetIterator.E?"
       },
       "646744185": {
         "id": "field/646744185",
         "kind": "field",
         "name": "undefinedLiteralCallPattern",
-        "size": 0,
+        "size": 374,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[exact=TypeErrorDecoder]",
-        "code": null,
+        "code": "_lazyFinal($, \"TypeErrorDecoder_undefinedLiteralCallPattern\", \"$get$TypeErrorDecoder_undefinedLiteralCallPattern\", function() {\n      return A.TypeErrorDecoder_extractPattern(function() {\n        var $argumentsExpr$ = \"$arguments$\";\n        try {\n          (void 0).$method$($argumentsExpr$);\n        } catch (e) {\n          return e.message;\n        }\n      }());\n    });\n",
         "type": "TypeErrorDecoder"
       },
-      "648221667": {
-        "id": "field/648221667",
-        "kind": "field",
-        "name": "_iterable",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/171867442",
-        "children": [],
-        "inferredType": "[subtype=Iterable]",
-        "code": null,
-        "type": "Iterable<SkipIterable.E>"
-      },
       "649547880": {
         "id": "field/649547880",
         "kind": "field",
         "name": "end",
-        "size": 4,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/974704527",
         "children": [],
         "inferredType": "[null|subclass=JSInt]",
-        "code": "end\n",
-        "type": "num"
+        "code": "",
+        "type": "num?"
       },
       "650081226": {
         "id": "field/650081226",
         "kind": "field",
         "name": "message",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/217690375",
         "children": [],
         "inferredType": "Value([exact=JSString], value: \"Unsupported number of arguments for wrapped closure\")",
-        "code": "message\n",
+        "code": "",
         "type": "dynamic"
       },
       "650800220": {
         "id": "field/650800220",
         "kind": "field",
         "name": "_nums",
-        "size": 18,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "__js_helper$_nums\n",
+        "code": "",
         "type": "dynamic"
       },
       "653339731": {
         "id": "field/653339731",
         "kind": "field",
         "name": "message",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/866150578",
         "children": [],
         "inferredType": "Value([exact=JSString], value: \"Intercepted function with no arguments.\")",
-        "code": "message\n",
+        "code": "",
         "type": "dynamic"
       },
-      "656800516": {
-        "id": "field/656800516",
-        "kind": "field",
-        "name": "data",
-        "size": 5,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[exact=JSFixedArray]",
-        "code": "data\n",
-        "type": "List<dynamic>"
-      },
       "657138181": {
         "id": "field/657138181",
         "kind": "field",
@@ -17645,431 +23335,224 @@
         "parent": "class/934351233",
         "children": [],
         "inferredType": "[subclass=Closure]",
-        "code": null,
+        "code": "",
         "type": "_ZoneFunction.T"
       },
-      "661173290": {
-        "id": "field/661173290",
-        "kind": "field",
-        "name": "_current",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/958488954",
-        "children": [],
-        "inferredType": "[null|exact=StringMatch]",
-        "code": null,
-        "type": "Match"
-      },
-      "667376711": {
-        "id": "field/667376711",
-        "kind": "field",
-        "name": "FUNCTION_TYPE_RETURN_TYPE_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "670005717": {
-        "id": "field/670005717",
-        "kind": "field",
-        "name": "_USE_ES6_MAPS",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/966364039",
-        "children": [],
-        "inferredType": "[exact=JSBool]",
-        "code": null,
-        "type": "bool",
-        "const": true
-      },
       "676869951": {
         "id": "field/676869951",
         "kind": "field",
         "name": "_strings",
-        "size": 9,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/123522748",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_strings\n",
+        "code": "",
         "type": "dynamic"
       },
-      "680112395": {
-        "id": "field/680112395",
-        "kind": "field",
-        "name": "isDynamicType",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
-      },
-      "698350444": {
-        "id": "field/698350444",
-        "kind": "field",
-        "name": "CURRENT_SCRIPT",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/965528565",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"currentScript\")",
-        "code": null,
-        "type": "String",
-        "const": true
-      },
-      "701363438": {
-        "id": "field/701363438",
-        "kind": "field",
-        "name": "isVoidType",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
-      },
-      "701716969": {
-        "id": "field/701716969",
-        "kind": "field",
-        "name": "FUNCTION_TYPE_VOID_RETURN_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
       "701889804": {
         "id": "field/701889804",
         "kind": "field",
         "name": "stackTrace",
-        "size": 11,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/388380492",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "stackTrace\n",
+        "inferredType": "[null|subtype=StackTrace]",
+        "code": "",
         "type": "StackTrace"
       },
-      "708528118": {
-        "id": "field/708528118",
+      "707077825": {
+        "id": "field/707077825",
         "kind": "field",
-        "name": "stateWhencomplete",
+        "name": "_value",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/80405414",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "709451133": {
-        "id": "field/709451133",
-        "kind": "field",
-        "name": "receiverFieldNameCache",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/138211367",
+        "parent": "class/745154066",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "String"
+        "code": "",
+        "type": "Object?"
       },
       "710218156": {
         "id": "field/710218156",
         "kind": "field",
         "name": "_tick",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/32494041",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": "_tick\n",
+        "code": "",
         "type": "int"
       },
       "714493219": {
         "id": "field/714493219",
         "kind": "field",
         "name": "errorCallback",
-        "size": 14,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/80405414",
         "children": [],
         "inferredType": "[null|subclass=Closure]",
-        "code": "errorCallback\n",
-        "type": "Function"
+        "code": "",
+        "type": "Function?"
       },
-      "717638099": {
-        "id": "field/717638099",
+      "726821079": {
+        "id": "field/726821079",
         "kind": "field",
-        "name": "_MAX_INT32",
+        "name": "typeRules",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/1003011102",
+        "parent": "class/251751824",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "Value([exact=JSString], value: \"tR\")",
+        "code": "",
+        "type": "String"
       },
       "727752212": {
         "id": "field/727752212",
         "kind": "field",
         "name": "invalidValue",
-        "size": 39,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "invalidValue\ninvalidValue\ninvalidValue\n",
+        "code": "",
         "type": "dynamic"
       },
-      "728368328": {
-        "id": "field/728368328",
-        "kind": "field",
-        "name": "zero",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
-        "children": [],
-        "inferredType": "[exact=Duration]",
-        "code": null,
-        "type": "Duration",
-        "const": true
-      },
       "742643375": {
         "id": "field/742643375",
         "kind": "field",
         "name": "_modifications",
-        "size": 27,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": "__js_helper$_modifications\n",
+        "code": "",
         "type": "int"
       },
-      "743971885": {
-        "id": "field/743971885",
-        "kind": "field",
-        "name": "FUNCTION_TYPE_NAMED_PARAMETERS_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
       "759319863": {
         "id": "field/759319863",
         "kind": "field",
         "name": "message",
-        "size": 24,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/143626168",
         "children": [],
         "inferredType": "[null|exact=JSString]",
-        "code": "message\nmessage\nmessage\n",
+        "code": "",
         "type": "dynamic"
       },
-      "771598536": {
-        "id": "field/771598536",
-        "kind": "field",
-        "name": "_pattern",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/954836234",
-        "children": [],
-        "inferredType": "[exact=JSString]",
-        "code": null,
-        "type": "String"
-      },
       "786919906": {
         "id": "field/786919906",
         "kind": "field",
         "name": "_resultOrListeners",
-        "size": 20,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_resultOrListeners<\n",
+        "code": "",
         "type": "dynamic"
       },
-      "790173099": {
-        "id": "field/790173099",
+      "787049592": {
+        "id": "field/787049592",
         "kind": "field",
-        "name": "millisecondsPerSecond",
+        "name": "_is",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "793498792": {
-        "id": "field/793498792",
-        "kind": "field",
-        "name": "isGivenTypeRti",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
-      },
-      "795392143": {
-        "id": "field/795392143",
-        "kind": "field",
-        "name": "microsecondsPerMillisecond",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
       "795691913": {
         "id": "field/795691913",
         "kind": "field",
         "name": "_last",
-        "size": 18,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
         "inferredType": "[null|exact=LinkedHashMapCell]",
-        "code": "__js_helper$_last\n",
-        "type": "LinkedHashMapCell"
+        "code": "",
+        "type": "LinkedHashMapCell?"
       },
       "795932009": {
         "id": "field/795932009",
         "kind": "field",
         "name": "_set",
-        "size": 5,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/113750884",
         "children": [],
         "inferredType": "[subclass=_LinkedHashSet]",
-        "code": "_set\n",
-        "type": "dynamic"
+        "code": "",
+        "type": "_LinkedHashSet<_LinkedHashSetIterator.E>"
       },
-      "805748014": {
-        "id": "field/805748014",
+      "806634540": {
+        "id": "field/806634540",
         "kind": "field",
-        "name": "isSubtype",
+        "name": "_cachedRuntimeType",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "inferredType": "[null|exact=_Type]",
+        "code": "",
+        "type": "Object?"
       },
       "817840529": {
         "id": "field/817840529",
         "kind": "field",
         "name": "_arguments",
-        "size": 11,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[subclass=JSInt]",
-        "code": "_arguments\n",
+        "code": "",
         "type": "int"
       },
       "818740436": {
         "id": "field/818740436",
         "kind": "field",
         "name": "_length",
-        "size": 20,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/722522722",
         "children": [],
         "inferredType": "[subclass=JSPositiveInt]",
-        "code": "__js_helper$_length\n",
-        "type": "int"
-      },
-      "824622307": {
-        "id": "field/824622307",
-        "kind": "field",
-        "name": "_skipCount",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/680257415",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
       "826222890": {
         "id": "field/826222890",
         "kind": "field",
         "name": "libraryName",
-        "size": 12,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/8008562",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "libraryName\n",
+        "inferredType": "[null|exact=JSString]",
+        "code": "",
         "type": "String"
       },
       "839347349": {
         "id": "field/839347349",
         "kind": "field",
         "name": "_next",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/868658259",
         "children": [],
         "inferredType": "[null|exact=_LinkedHashSetCell]",
-        "code": "_next\n",
-        "type": "_LinkedHashSetCell"
-      },
-      "840091021": {
-        "id": "field/840091021",
-        "kind": "field",
-        "name": "optionalParameterCount",
-        "size": 23,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
-        "children": [],
-        "inferredType": "[subclass=JSInt]",
-        "code": "optionalParameterCount\n",
-        "type": "int"
-      },
-      "840661601": {
-        "id": "field/840661601",
-        "kind": "field",
-        "name": "_stateValue",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/784178238",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "code": "",
+        "type": "_LinkedHashSetCell?"
       },
       "840751619": {
         "id": "field/840751619",
@@ -18079,112 +23562,33 @@
         "outputUnit": "outputUnit/669725655",
         "parent": "class/56472591",
         "children": [],
-        "inferredType": "[null]",
-        "code": null,
-        "type": "Object"
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
-      "842452872": {
-        "id": "field/842452872",
+      "845351074": {
+        "id": "field/845351074",
         "kind": "field",
-        "name": "FUTURE_CLASS_TYPE_NAME",
+        "name": "_crossOrigin",
+        "size": 106,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "_lazy($, \"_crossOrigin\", \"$get$_crossOrigin\", function() {\n      return A._computeCrossOrigin();\n    });\n",
+        "type": "String?"
+      },
+      "862009491": {
+        "id": "field/862009491",
+        "kind": "field",
+        "name": "sharedEmptyArray",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
+        "parent": "class/251751824",
         "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "844410756": {
-        "id": "field/844410756",
-        "kind": "field",
-        "name": "DEFAULT_VALUES_PROPERTY",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "849640421": {
-        "id": "field/849640421",
-        "kind": "field",
-        "name": "secondsPerMinute",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "850921879": {
-        "id": "field/850921879",
-        "kind": "field",
-        "name": "_start",
-        "size": 7,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/60704969",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": "_start\n",
-        "type": "int"
-      },
-      "854910375": {
-        "id": "field/854910375",
-        "kind": "field",
-        "name": "FUTURE_OR_TYPE_ARGUMENT_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "864119084": {
-        "id": "field/864119084",
-        "kind": "field",
-        "name": "OBJECT_CLASS_TYPE_NAME",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "875039735": {
-        "id": "field/875039735",
-        "kind": "field",
-        "name": "NULL_CLASS_TYPE_NAME",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "879032432": {
-        "id": "field/879032432",
-        "kind": "field",
-        "name": "DEFERRED_PART_HASHES",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/965528565",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"deferredPartHashes\")",
-        "code": null,
-        "type": "String",
-        "const": true
+        "inferredType": "Value([exact=JSString], value: \"sEA\")",
+        "code": "",
+        "type": "String"
       },
       "882420015": {
         "id": "field/882420015",
@@ -18195,44 +23599,56 @@
         "parent": "class/1070558590",
         "children": [],
         "inferredType": "[subclass=Closure]",
-        "code": null,
+        "code": "",
         "type": "int Function(_LinkedCustomHashSet.E)"
       },
+      "884701761": {
+        "id": "field/884701761",
+        "kind": "field",
+        "name": "_optionalPositional",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/121755874",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
+      },
       "889385105": {
         "id": "field/889385105",
         "kind": "field",
         "name": "_once",
-        "size": 6,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/32494041",
         "children": [],
         "inferredType": "Value([exact=JSBool], value: true)",
-        "code": "_once\n",
+        "code": "",
         "type": "bool"
       },
       "906853360": {
         "id": "field/906853360",
         "kind": "field",
         "name": "_argumentsExpr",
-        "size": 15,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[subclass=JSInt]",
-        "code": "_argumentsExpr\n",
+        "code": "",
         "type": "int"
       },
       "907727246": {
         "id": "field/907727246",
         "kind": "field",
         "name": "_loadingLibraries",
-        "size": 0,
+        "size": 176,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/966364039",
         "children": [],
         "inferredType": "Map([subclass=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=_Future])",
-        "code": null,
-        "type": "Map<String,Future<Null>>"
+        "code": "_lazyFinal($, \"_loadingLibraries\", \"$get$_loadingLibraries\", function() {\n      return A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.nullable_Future_Null);\n    });\n",
+        "type": "Map<String,Future<Null>?>"
       },
       "908476008": {
         "id": "field/908476008",
@@ -18243,57 +23659,43 @@
         "parent": "library/689380639",
         "children": [],
         "inferredType": "[null]",
-        "code": null,
-        "type": "void Function(String)"
+        "code": "",
+        "type": "void Function(String)?"
       },
       "909027003": {
         "id": "field/909027003",
         "kind": "field",
         "name": "dartException",
-        "size": 14,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/388380492",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "dartException\n",
+        "code": "",
         "type": "dynamic"
       },
-      "911662921": {
-        "id": "field/911662921",
+      "914116059": {
+        "id": "field/914116059",
         "kind": "field",
-        "name": "FUNCTION_TYPE_INDEX",
+        "name": "_message",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/156108056",
+        "parent": "class/457024667",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "914172423": {
-        "id": "field/914172423",
-        "kind": "field",
-        "name": "FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
+        "inferredType": "[exact=JSString]",
+        "code": "",
+        "type": "String"
       },
       "914365883": {
         "id": "field/914365883",
         "kind": "field",
         "name": "_element",
-        "size": 9,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/868658259",
         "children": [],
         "inferredType": "[null|subclass=Object]",
-        "code": "_element\n",
+        "code": "",
         "type": "dynamic"
       },
       "914591285": {
@@ -18304,10 +23706,34 @@
         "outputUnit": "outputUnit/669725655",
         "parent": "class/803883908",
         "children": [],
-        "inferredType": "[subclass=JSInt]",
-        "code": null,
+        "inferredType": "[exact=JSUInt31]",
+        "code": "",
         "type": "int"
       },
+      "918430961": {
+        "id": "field/918430961",
+        "kind": "field",
+        "name": "_future",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [],
+        "inferredType": "[exact=_Future]",
+        "code": "",
+        "type": "_Future<_AsyncAwaitCompleter.T>"
+      },
+      "924001250": {
+        "id": "field/924001250",
+        "kind": "field",
+        "name": "_rti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/642774187",
+        "children": [],
+        "inferredType": "[null|exact=Rti]",
+        "code": "",
+        "type": "Rti"
+      },
       "926265914": {
         "id": "field/926265914",
         "kind": "field",
@@ -18317,44 +23743,43 @@
         "parent": "library/966364039",
         "children": [],
         "inferredType": "[null]",
-        "code": null,
-        "type": "void Function()"
+        "code": "",
+        "type": "void Function()?"
       },
-      "927731351": {
-        "id": "field/927731351",
+      "928850752": {
+        "id": "field/928850752",
         "kind": "field",
-        "name": "_statePendingComplete",
+        "name": "_rest",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/784178238",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[null|subclass=Object]",
+        "code": "",
+        "type": "Object?"
       },
       "931441116": {
         "id": "field/931441116",
         "kind": "field",
         "name": "_isInCallbackLoop",
-        "size": 0,
+        "size": 30,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
         "inferredType": "[exact=JSBool]",
-        "code": null,
+        "code": "$._isInCallbackLoop = false;\n",
         "type": "bool"
       },
       "932611099": {
         "id": "field/932611099",
         "kind": "field",
         "name": "_scheduleImmediateClosure",
-        "size": 0,
+        "size": 176,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/611525899",
         "children": [],
         "inferredType": "[null|subclass=Closure]",
-        "code": null,
+        "code": "_lazyFinal($, \"_AsyncRun__scheduleImmediateClosure\", \"$get$_AsyncRun__scheduleImmediateClosure\", function() {\n      return A._AsyncRun__initializeScheduleImmediate();\n    });\n",
         "type": "Function"
       },
       "936474054": {
@@ -18366,110 +23791,57 @@
         "parent": "class/716671121",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": null,
+        "code": "",
         "type": "String"
       },
       "944915314": {
         "id": "field/944915314",
         "kind": "field",
         "name": "variableName",
-        "size": 13,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/93352366",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "variableName\n",
-        "type": "String"
+        "inferredType": "[null|exact=JSString]",
+        "code": "",
+        "type": "String?"
       },
-      "951952385": {
-        "id": "field/951952385",
+      "946051721": {
+        "id": "field/946051721",
         "kind": "field",
-        "name": "minutesPerHour",
+        "name": "_precomputed3",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[null]",
+        "code": "",
+        "type": "Object?"
       },
       "952591811": {
         "id": "field/952591811",
         "kind": "field",
         "name": "_lastCallback",
-        "size": 0,
+        "size": 25,
         "outputUnit": "outputUnit/669725655",
         "parent": "library/1052666095",
         "children": [],
         "inferredType": "[null|exact=_AsyncCallbackEntry]",
-        "code": null,
-        "type": "_AsyncCallbackEntry"
+        "code": "$._lastCallback = null;\n",
+        "type": "_AsyncCallbackEntry?"
       },
       "954188953": {
         "id": "field/954188953",
         "kind": "field",
         "name": "length",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/175705485",
         "children": [],
         "inferredType": "[subclass=JSInt]",
-        "code": "length>\n",
+        "code": "",
         "type": "int"
       },
-      "960584371": {
-        "id": "field/960584371",
-        "kind": "field",
-        "name": "FUNCTION_TYPE_TAG",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "962499289": {
-        "id": "field/962499289",
-        "kind": "field",
-        "name": "microsecondsPerMinute",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "966669333": {
-        "id": "field/966669333",
-        "kind": "field",
-        "name": "stateThen",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/80405414",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "969673523": {
-        "id": "field/969673523",
-        "kind": "field",
-        "name": "stateCatcherrorTest",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/80405414",
-        "children": [],
-        "inferredType": "[exact=JSUInt31]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
       "973809471": {
         "id": "field/973809471",
         "kind": "field",
@@ -18479,96 +23851,69 @@
         "parent": "class/1070558590",
         "children": [],
         "inferredType": "[null|subclass=Closure]",
-        "code": null,
+        "code": "",
         "type": "bool Function(dynamic)"
       },
       "978504898": {
         "id": "field/978504898",
         "kind": "field",
         "name": "_state",
-        "size": 8,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/784178238",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": "_state<\n",
+        "code": "",
         "type": "int"
       },
+      "994897322": {
+        "id": "field/994897322",
+        "kind": "field",
+        "name": "_message",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/43993131",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "",
+        "type": "String?"
+      },
       "996559228": {
         "id": "field/996559228",
         "kind": "field",
         "name": "_next",
-        "size": 18,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/500662026",
         "children": [],
         "inferredType": "[null|exact=LinkedHashMapCell]",
-        "code": "__js_helper$_next\n",
-        "type": "LinkedHashMapCell"
+        "code": "",
+        "type": "LinkedHashMapCell?"
       },
-      "996584734": {
-        "id": "field/996584734",
+      "1002990507": {
+        "id": "field/1002990507",
         "kind": "field",
-        "name": "microsecondsPerHour",
+        "name": "_specializedTestResource",
         "size": 0,
         "outputUnit": "outputUnit/669725655",
-        "parent": "class/803883908",
+        "parent": "class/214521760",
         "children": [],
-        "inferredType": "[subclass=JSUInt32]",
-        "code": null,
-        "type": "int",
-        "const": true
-      },
-      "1001207931": {
-        "id": "field/1001207931",
-        "kind": "field",
-        "name": "_MIN_INT32",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/1003011102",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": null,
-        "type": "int",
-        "const": true
+        "inferredType": "[null|exact=JSString]",
+        "code": "",
+        "type": "Object?"
       },
       "1012307238": {
         "id": "field/1012307238",
         "kind": "field",
         "name": "_receiver",
-        "size": 10,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/294355530",
         "children": [],
         "inferredType": "[subclass=JSInt]",
-        "code": "_receiver\n",
+        "code": "",
         "type": "int"
       },
-      "1012317118": {
-        "id": "field/1012317118",
-        "kind": "field",
-        "name": "SIGNATURE_NAME",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/73206861",
-        "children": [],
-        "inferredType": "[exact=JsGetName]",
-        "code": null,
-        "type": "JsGetName",
-        "const": true
-      },
-      "1016218670": {
-        "id": "field/1016218670",
-        "kind": "field",
-        "name": "_falseFuture",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/438137149",
-        "children": [],
-        "inferredType": "[null|exact=_Future]",
-        "code": null,
-        "type": "_Future<bool>"
-      },
       "1019580176": {
         "id": "field/1019580176",
         "kind": "field",
@@ -18578,56 +23923,55 @@
         "parent": "class/73206861",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
-      "1020283310": {
-        "id": "field/1020283310",
-        "kind": "field",
-        "name": "STATIC_FUNCTION_NAME_PROPERTY_NAME",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "library/965528565",
-        "children": [],
-        "inferredType": "Value([exact=JSString], value: \"$static_name\")",
-        "code": null,
-        "type": "String",
-        "const": true
-      },
       "1023319897": {
         "id": "field/1023319897",
         "kind": "field",
         "name": "stackTrace",
-        "size": 11,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/577121337",
         "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "stackTrace\n",
+        "inferredType": "[subtype=StackTrace]",
+        "code": "",
         "type": "StackTrace"
       },
       "1025923114": {
         "id": "field/1025923114",
         "kind": "field",
         "name": "future",
-        "size": 14,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/770824752",
         "children": [],
         "inferredType": "[exact=_Future]",
-        "code": "future\nfuture\n",
+        "code": "",
         "type": "_Future<_Completer.T>"
       },
+      "1034922434": {
+        "id": "field/1034922434",
+        "kind": "field",
+        "name": "evalCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/251751824",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"eC\")",
+        "code": "",
+        "type": "String"
+      },
       "1047452024": {
         "id": "field/1047452024",
         "kind": "field",
         "name": "_contents",
-        "size": 11,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/293821936",
         "children": [],
         "inferredType": "[exact=JSString]",
-        "code": "_contents<\n",
+        "code": "",
         "type": "String"
       },
       "1051861725": {
@@ -18639,107 +23983,86 @@
         "parent": "class/742137989",
         "children": [],
         "inferredType": "[exact=JSUInt31]",
-        "code": null,
+        "code": "",
         "type": "int"
       },
       "1055298109": {
         "id": "field/1055298109",
         "kind": "field",
         "name": "_nextListener",
-        "size": 14,
+        "size": 0,
         "outputUnit": "outputUnit/669725655",
         "parent": "class/80405414",
         "children": [],
         "inferredType": "[null|exact=_FutureListener]",
-        "code": "_nextListener\n",
-        "type": "_FutureListener<dynamic,dynamic>"
-      },
-      "1061931090": {
-        "id": "field/1061931090",
-        "kind": "field",
-        "name": "_name",
-        "size": 6,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/138211367",
-        "children": [],
-        "inferredType": "[null|subclass=Object]",
-        "code": "_name\n",
-        "type": "String"
-      },
-      "1063003009": {
-        "id": "field/1063003009",
-        "kind": "field",
-        "name": "isCheckPropertyToJsConstructorName",
-        "size": 0,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "class/716671121",
-        "children": [],
-        "inferredType": "[exact=JsBuiltin]",
-        "code": null,
-        "type": "JsBuiltin",
-        "const": true
+        "code": "",
+        "type": "_FutureListener<dynamic,dynamic>?"
       }
     },
     "constant": {
-      "441220530": {
-        "id": "constant/441220530",
-        "kind": "constant",
-        "name": null,
-        "size": 32,
-        "outputUnit": "outputUnit/7045321",
-        "code": "C.C_Deferred = \"Hello, World!\";\n"
-      },
-      "545451897": {
-        "id": "constant/545451897",
-        "kind": "constant",
-        "name": null,
-        "size": 37,
-        "code": "C.JSInt_methods = J.JSInt.prototype;\n"
-      },
-      "586866313": {
-        "id": "constant/586866313",
-        "kind": "constant",
-        "name": null,
-        "size": 133,
-        "outputUnit": "outputUnit/669725655",
-        "code": "C.JS_CONST_u2C = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
-      },
-      "591262442": {
-        "id": "constant/591262442",
+      "22040747": {
+        "id": "constant/22040747",
         "kind": "constant",
         "name": null,
         "size": 49,
-        "code": "C.Interceptor_methods = J.Interceptor.prototype;\n"
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
       },
-      "896140272": {
-        "id": "constant/896140272",
-        "kind": "constant",
-        "name": null,
-        "size": 41,
-        "code": "C.JSArray_methods = J.JSArray.prototype;\n"
-      },
-      "924662595": {
-        "id": "constant/924662595",
+      "29125423": {
+        "id": "constant/29125423",
         "kind": "constant",
         "name": null,
         "size": 35,
         "outputUnit": "outputUnit/669725655",
-        "code": "C.C__RootZone = new P._RootZone();\n"
+        "code": "B.C__RootZone = new A._RootZone();\n"
       },
-      "940460073": {
-        "id": "constant/940460073",
-        "kind": "constant",
-        "name": null,
-        "size": 45,
-        "outputUnit": "outputUnit/669725655",
-        "code": "C.List_empty = Isolate.makeConstantList([]);\n"
-      },
-      "985964451": {
-        "id": "constant/985964451",
+      "99446204": {
+        "id": "constant/99446204",
         "kind": "constant",
         "name": null,
         "size": 43,
-        "code": "C.JSString_methods = J.JSString.prototype;\n"
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.JSString_methods = J.JSString.prototype;\n"
+      },
+      "553768666": {
+        "id": "constant/553768666",
+        "kind": "constant",
+        "name": null,
+        "size": 41,
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.JSArray_methods = J.JSArray.prototype;\n"
+      },
+      "818195557": {
+        "id": "constant/818195557",
+        "kind": "constant",
+        "name": null,
+        "size": 51,
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.C__StringStackTrace = new A._StringStackTrace();\n"
+      },
+      "950164294": {
+        "id": "constant/950164294",
+        "kind": "constant",
+        "name": null,
+        "size": 37,
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.JSInt_methods = J.JSInt.prototype;\n"
+      },
+      "994572070": {
+        "id": "constant/994572070",
+        "kind": "constant",
+        "name": null,
+        "size": 131,
+        "outputUnit": "outputUnit/669725655",
+        "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
+      },
+      "1016140060": {
+        "id": "constant/1016140060",
+        "kind": "constant",
+        "name": null,
+        "size": 32,
+        "outputUnit": "outputUnit/7045321",
+        "code": "A.C_Deferred = \"Hello, World!\";\n"
       }
     },
     "closure": {
@@ -18747,7 +24070,7 @@
         "id": "closure/21475",
         "kind": "closure",
         "name": "_loadHunk_failure",
-        "size": 621,
+        "size": 805,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/326542993",
         "function": "function/601638462"
@@ -18756,25 +24079,16 @@
         "id": "closure/30023746",
         "kind": "closure",
         "name": "_Future__propagateToListeners_handleValueCallback",
-        "size": 537,
+        "size": 915,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/271674536",
         "function": "function/231669663"
       },
-      "35711406": {
-        "id": "closure/35711406",
-        "kind": "closure",
-        "name": "_rootHandleUncaughtError_closure",
-        "size": 503,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "function/364010339",
-        "function": "function/811310425"
-      },
       "69029087": {
         "id": "closure/69029087",
         "kind": "closure",
         "name": "_Future__propagateToListeners_handleWhenCompleteCallback_closure",
-        "size": 119,
+        "size": 411,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/271674536",
         "function": "function/869814859"
@@ -18783,43 +24097,43 @@
         "id": "closure/181809904",
         "kind": "closure",
         "name": "_Future__addListener_closure",
-        "size": 149,
+        "size": 318,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/18599313",
         "function": "function/853169304"
       },
+      "192019265": {
+        "id": "closure/192019265",
+        "kind": "closure",
+        "name": "_rootHandleError_closure",
+        "size": 356,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/924450127",
+        "function": "function/885556629"
+      },
       "231160067": {
         "id": "closure/231160067",
         "kind": "closure",
         "name": "_AsyncRun__scheduleImmediateJsOverride_internalCallback",
-        "size": 107,
+        "size": 363,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/67489885",
         "function": "function/987295701"
       },
-      "310226650": {
-        "id": "closure/310226650",
+      "235259528": {
+        "id": "closure/235259528",
         "kind": "closure",
-        "name": "_RootZone_bindCallback_closure",
-        "size": 179,
+        "name": "_Future__asyncCompleteWithValue_closure",
+        "size": 344,
         "outputUnit": "outputUnit/669725655",
-        "parent": "function/633677177",
-        "function": "function/81057679"
-      },
-      "379635163": {
-        "id": "closure/379635163",
-        "kind": "closure",
-        "name": "_Future__asyncComplete_closure",
-        "size": 131,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "function/664449932",
-        "function": "function/667149426"
+        "parent": "function/871707959",
+        "function": "function/577244034"
       },
       "385965656": {
         "id": "closure/385965656",
         "kind": "closure",
         "name": "_Future__chainFuture_closure",
-        "size": 138,
+        "size": 307,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/325386239",
         "function": "function/899674954"
@@ -18828,7 +24142,7 @@
         "id": "closure/411607690",
         "kind": "closure",
         "name": "_Future__asyncCompleteError_closure",
-        "size": 155,
+        "size": 373,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/263363184",
         "function": "function/341046768"
@@ -18837,25 +24151,16 @@
         "id": "closure/558424951",
         "kind": "closure",
         "name": "_RootZone_bindCallbackGuarded_closure",
-        "size": 122,
+        "size": 327,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/390828239",
         "function": "function/726344781"
       },
-      "561897310": {
-        "id": "closure/561897310",
-        "kind": "closure",
-        "name": "_AsyncAwaitCompleter_complete_closure",
-        "size": 132,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "function/618126497",
-        "function": "function/381680028"
-      },
       "566195572": {
         "id": "closure/566195572",
         "kind": "closure",
         "name": "_loadHunk_closure",
-        "size": 84,
+        "size": 198,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/326542993",
         "function": "function/569040700"
@@ -18864,7 +24169,7 @@
         "id": "closure/566195573",
         "kind": "closure",
         "name": "_loadHunk_closure",
-        "size": 188,
+        "size": 296,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/326542993",
         "function": "function/569040701"
@@ -18873,7 +24178,7 @@
         "id": "closure/566195574",
         "kind": "closure",
         "name": "_loadHunk_closure",
-        "size": 660,
+        "size": 793,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/326542993",
         "function": "function/569040702"
@@ -18882,7 +24187,7 @@
         "id": "closure/566195575",
         "kind": "closure",
         "name": "_loadHunk_closure",
-        "size": 134,
+        "size": 242,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/326542993",
         "function": "function/569040703"
@@ -18891,7 +24196,7 @@
         "id": "closure/566195576",
         "kind": "closure",
         "name": "_loadHunk_closure",
-        "size": 134,
+        "size": 242,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/326542993",
         "function": "function/569040704"
@@ -18900,7 +24205,7 @@
         "id": "closure/581471934",
         "kind": "closure",
         "name": "_loadHunk_success",
-        "size": 200,
+        "size": 336,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/326542993",
         "function": "function/642229693"
@@ -18909,7 +24214,7 @@
         "id": "closure/590764751",
         "kind": "closure",
         "name": "Future_wait_closure",
-        "size": 651,
+        "size": 943,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/385444888",
         "function": "function/394885266"
@@ -18918,7 +24223,7 @@
         "id": "closure/601101415",
         "kind": "closure",
         "name": "loadDeferredLibrary_loadAndInitialize_closure",
-        "size": 321,
+        "size": 513,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/53631526",
         "function": "function/248883787"
@@ -18927,7 +24232,7 @@
         "id": "closure/607767883",
         "kind": "closure",
         "name": "_AsyncRun__initializeScheduleImmediate_internalCallback",
-        "size": 204,
+        "size": 441,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/165003912",
         "function": "function/426855684"
@@ -18936,7 +24241,7 @@
         "id": "closure/624687097",
         "kind": "closure",
         "name": "loadDeferredLibrary_closure",
-        "size": 219,
+        "size": 465,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/53631526",
         "function": "function/1031826457"
@@ -18945,7 +24250,7 @@
         "id": "closure/629631311",
         "kind": "closure",
         "name": "_wrapJsFunctionForAsync_closure",
-        "size": 139,
+        "size": 310,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/663282901",
         "function": "function/372361659"
@@ -18954,7 +24259,7 @@
         "id": "closure/637416128",
         "kind": "closure",
         "name": "_TimerImpl_internalCallback",
-        "size": 191,
+        "size": 278,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/773230206",
         "function": "function/249771766"
@@ -18963,25 +24268,16 @@
         "id": "closure/637664934",
         "kind": "closure",
         "name": "MapBase_mapToString_closure",
-        "size": 349,
+        "size": 497,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/987508329",
         "function": "function/139456351"
       },
-      "741043867": {
-        "id": "closure/741043867",
-        "kind": "closure",
-        "name": "_AsyncAwaitCompleter_completeError_closure",
-        "size": 141,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "function/852141617",
-        "function": "function/248499885"
-      },
       "745039293": {
         "id": "closure/745039293",
         "kind": "closure",
         "name": "_awaitOnObject_closure",
-        "size": 138,
+        "size": 261,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/337937411",
         "function": "function/907920633"
@@ -18990,25 +24286,16 @@
         "id": "closure/745039294",
         "kind": "closure",
         "name": "_awaitOnObject_closure",
-        "size": 183,
+        "size": 347,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/337937411",
         "function": "function/907920634"
       },
-      "771507318": {
-        "id": "closure/771507318",
-        "kind": "closure",
-        "name": "unwrapException_saveStackTrace",
-        "size": 232,
-        "outputUnit": "outputUnit/669725655",
-        "parent": "function/265638794",
-        "function": "function/282990063"
-      },
       "817717319": {
         "id": "closure/817717319",
         "kind": "closure",
         "name": "_AsyncRun__scheduleImmediateWithSetImmediate_internalCallback",
-        "size": 107,
+        "size": 387,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/163884478",
         "function": "function/603355140"
@@ -19017,7 +24304,7 @@
         "id": "closure/827328529",
         "kind": "closure",
         "name": "_Future__prependListeners_closure",
-        "size": 155,
+        "size": 344,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/292751514",
         "function": "function/947198569"
@@ -19026,7 +24313,7 @@
         "id": "closure/830531955",
         "kind": "closure",
         "name": "_Future__propagateToListeners_handleError",
-        "size": 990,
+        "size": 1198,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/271674536",
         "function": "function/586712659"
@@ -19035,7 +24322,7 @@
         "id": "closure/844800611",
         "kind": "closure",
         "name": "loadDeferredLibrary_initializeSomeLoadedHunks",
-        "size": 1466,
+        "size": 1844,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/53631526",
         "function": "function/311229745"
@@ -19044,7 +24331,7 @@
         "id": "closure/913475889",
         "kind": "closure",
         "name": "_AsyncRun__initializeScheduleImmediate_closure",
-        "size": 270,
+        "size": 548,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/165003912",
         "function": "function/469962639"
@@ -19053,7 +24340,7 @@
         "id": "closure/938184478",
         "kind": "closure",
         "name": "Future_wait_handleError",
-        "size": 597,
+        "size": 947,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/385444888",
         "function": "function/39412415"
@@ -19062,7 +24349,7 @@
         "id": "closure/953553118",
         "kind": "closure",
         "name": "_Future__chainForeignFuture_closure",
-        "size": 162,
+        "size": 607,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/553149607",
         "function": "function/797212862"
@@ -19071,7 +24358,7 @@
         "id": "closure/953553119",
         "kind": "closure",
         "name": "_Future__chainForeignFuture_closure",
-        "size": 230,
+        "size": 348,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/553149607",
         "function": "function/797212863"
@@ -19080,7 +24367,7 @@
         "id": "closure/953553120",
         "kind": "closure",
         "name": "_Future__chainForeignFuture_closure",
-        "size": 131,
+        "size": 351,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/553149607",
         "function": "function/797212864"
@@ -19089,7 +24376,7 @@
         "id": "closure/963665986",
         "kind": "closure",
         "name": "_Future__propagateToListeners_handleWhenCompleteCallback",
-        "size": 1604,
+        "size": 1928,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/271674536",
         "function": "function/15204906"
@@ -19098,7 +24385,7 @@
         "id": "closure/965562379",
         "kind": "closure",
         "name": "loadDeferredLibrary_loadAndInitialize",
-        "size": 758,
+        "size": 982,
         "outputUnit": "outputUnit/669725655",
         "parent": "function/53631526",
         "function": "function/741666293"
@@ -19106,244 +24393,11380 @@
     }
   },
   "holding": {
-    "field/8965675": [
+    "field/607252": [
       {
-        "id": "function/1060205580",
-        "mask": "null"
+        "id": "field/607252",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/4524053": [
+      {
+        "id": "field/4524053",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/8965675": [
+      {
+        "id": "function/1060205580",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/9743357": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/23408725": [
+      {
+        "id": "field/23408725",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/24026359": [
+      {
+        "id": "field/24026359",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/35094111": [
+      {
+        "id": "field/35094111",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/42778158": [
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/55197673": [
+      {
+        "id": "field/55197673",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/60920969": [
+      {
+        "id": "field/60920969",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/65712884": [
+      {
+        "id": "field/65712884",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/79943715": [
       {
         "id": "function/229841336",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
       },
       {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/111785749": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/111931226": [
+      {
+        "id": "field/111931226",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/112618843": [
+      {
+        "id": "field/112618843",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/123513767": [
+      {
+        "id": "field/123513767",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/126292751": [
       {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
         "id": "function/486797615",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/127038922": [
+      {
+        "id": "field/127038922",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/140571055": [
+      {
+        "id": "field/140571055",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/146902950": [
       {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/642221110",
+        "mask": null
       },
       {
         "id": "function/642221110",
         "mask": "inlined"
       },
       {
-        "id": "function/642221110",
-        "mask": "null"
-      },
-      {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/932567378",
-        "mask": "null"
+        "mask": null
       }
     ],
     "field/169031325": [
       {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/932567378",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/172148876": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/173819446": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/187449514": [
+      {
+        "id": "field/187449514",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/189240247": [
       {
         "id": "function/229841336",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
       },
       {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/190358771": [
+      {
+        "id": "field/190358771",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/192950192": [
+      {
+        "id": "field/192950192",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/202484522": [
+      {
+        "id": "field/202484522",
+        "mask": null
+      }
+    ],
+    "field/206062167": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      }
+    ],
+    "field/221913650": [
+      {
+        "id": "field/221913650",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/229586442": [
+      {
+        "id": "field/229586442",
+        "mask": null
+      }
+    ],
+    "field/232791153": [
+      {
+        "id": "field/232791153",
+        "mask": null
+      }
+    ],
+    "field/237146195": [
+      {
+        "id": "field/237146195",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/239805186": [
+      {
+        "id": "field/239805186",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/242140830": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
       }
     ],
     "field/244162491": [
       {
         "id": "function/128684509",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/249142929": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/261042870": [
       {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/269363605": [
+      {
+        "id": "field/269363605",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/295541341": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/302220255": [
+      {
+        "id": "field/302220255",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/304825305": [
+      {
+        "id": "field/304825305",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/305114389": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/337959975": [
       {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/814002251",
+        "mask": null
       },
       {
         "id": "function/814002251",
         "mask": "inlined"
+      }
+    ],
+    "field/343514633": [
+      {
+        "id": "field/343514633",
+        "mask": null
       },
       {
-        "id": "function/814002251",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/345425066": [
+      {
+        "id": "field/345425066",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/346735010": [
+      {
+        "id": "field/346735010",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/347443343": [
+      {
+        "id": "field/347443343",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/347672432": [
+      {
+        "id": "field/347672432",
+        "mask": null
+      }
+    ],
+    "field/351779368": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      }
+    ],
+    "field/359397062": [
+      {
+        "id": "field/359397062",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/366629653": [
       {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/640815092",
+        "mask": null
       },
       {
         "id": "function/640815092",
         "mask": "inlined"
       },
       {
-        "id": "function/640815092",
-        "mask": "null"
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/368460625": [
+      {
+        "id": "field/368460625",
+        "mask": null
       },
       {
-        "id": "function/788412943",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/368849633": [
       {
         "id": "function/219348673",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/219348673",
-        "mask": "null"
+        "mask": "inlined"
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
       },
       {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/376257386": [
+      {
+        "id": "field/376257386",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
       }
     ],
     "field/381082880": [
       {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/932567378",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/410301694": [
+      {
+        "id": "field/410301694",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/410674423": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      }
+    ],
+    "field/414662379": [
+      {
+        "id": "field/414662379",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/430387875": [
+      {
+        "id": "field/430387875",
+        "mask": null
+      }
+    ],
+    "field/431266734": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/435679137": [
+      {
+        "id": "field/435679137",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/443749531": [
+      {
+        "id": "field/443749531",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/449743822": [
+      {
+        "id": "field/449743822",
+        "mask": null
+      }
+    ],
+    "field/459351028": [
+      {
+        "id": "field/459351028",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/460958077": [
+      {
+        "id": "field/460958077",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/468492193": [
+      {
+        "id": "field/468492193",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/485816538": [
+      {
+        "id": "field/485816538",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/496557243": [
       {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/499560688": [
+      {
+        "id": "field/499560688",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/504170901": [
+      {
+        "id": "field/504170901",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/505549528": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/509005655": [
+      {
+        "id": "field/509005655",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/509651846": [
+      {
+        "id": "field/509651846",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/511786572": [
+      {
+        "id": "field/511786572",
+        "mask": null
       }
     ],
     "field/522978319": [
       {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/523754696": [
+      {
+        "id": "field/523754696",
+        "mask": null
+      }
+    ],
+    "field/525672864": [
+      {
+        "id": "field/525672864",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/532403335": [
+      {
+        "id": "field/532403335",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/577142640": [
+      {
+        "id": "field/577142640",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/627383241": [
+      {
+        "id": "field/627383241",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/635439616": [
+      {
+        "id": "field/635439616",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/639918601": [
+      {
+        "id": "field/639918601",
+        "mask": null
       }
     ],
     "field/645317327": [
       {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/698206676",
+        "mask": null
       },
       {
         "id": "function/698206676",
         "mask": "inlined"
       },
       {
-        "id": "function/698206676",
-        "mask": "null"
-      },
-      {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/932567378",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/646361925": [
+      {
+        "id": "field/646361925",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/646744185": [
       {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/553278458",
+        "mask": null
+      },
+      {
         "id": "function/553278458",
         "mask": "inlined"
       },
       {
-        "id": "function/553278458",
-        "mask": "null"
-      },
-      {
         "id": "function/611761598",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/649547880": [
+      {
+        "id": "field/649547880",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/650081226": [
+      {
+        "id": "field/650081226",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/650800220": [
+      {
+        "id": "field/650800220",
+        "mask": null
+      }
+    ],
+    "field/653339731": [
+      {
+        "id": "field/653339731",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/676869951": [
+      {
+        "id": "field/676869951",
+        "mask": null
+      }
+    ],
+    "field/701889804": [
+      {
+        "id": "field/701889804",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/707077825": [
+      {
+        "id": "field/707077825",
+        "mask": null
+      }
+    ],
+    "field/710218156": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/714493219": [
+      {
+        "id": "field/714493219",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/727752212": [
+      {
+        "id": "field/727752212",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/742643375": [
+      {
+        "id": "field/742643375",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/759319863": [
+      {
+        "id": "field/759319863",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/786919906": [
+      {
+        "id": "field/786919906",
+        "mask": null
+      }
+    ],
+    "field/787049592": [
+      {
+        "id": "field/787049592",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/795691913": [
+      {
+        "id": "field/795691913",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/795932009": [
+      {
+        "id": "field/795932009",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/806634540": [
+      {
+        "id": "field/806634540",
+        "mask": null
+      }
+    ],
+    "field/817840529": [
+      {
+        "id": "field/817840529",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/818740436": [
+      {
+        "id": "field/818740436",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/826222890": [
+      {
+        "id": "field/826222890",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/839347349": [
+      {
+        "id": "field/839347349",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/840751619": [
+      {
+        "id": "field/840751619",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/845351074": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/540076399",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/884701761": [
+      {
+        "id": "field/884701761",
+        "mask": null
+      }
+    ],
+    "field/889385105": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/906853360": [
+      {
+        "id": "field/906853360",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "field/907727246": [
       {
         "id": "function/116599339",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/909027003": [
+      {
+        "id": "field/909027003",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/914116059": [
+      {
+        "id": "field/914116059",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/914365883": [
+      {
+        "id": "field/914365883",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/918430961": [
+      {
+        "id": "field/918430961",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/924001250": [
+      {
+        "id": "field/924001250",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/928850752": [
+      {
+        "id": "field/928850752",
+        "mask": null
       }
     ],
     "field/932611099": [
       {
         "id": "function/165003912",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
       },
       {
         "id": "function/788412943",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "field/944915314": [
+      {
+        "id": "field/944915314",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/946051721": [
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      }
+    ],
+    "field/954188953": [
+      {
+        "id": "field/954188953",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/978504898": [
+      {
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/994897322": [
+      {
+        "id": "field/994897322",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/996559228": [
+      {
+        "id": "field/996559228",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/1002990507": [
+      {
+        "id": "field/1002990507",
+        "mask": null
+      }
+    ],
+    "field/1012307238": [
+      {
+        "id": "field/1012307238",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/1023319897": [
+      {
+        "id": "field/1023319897",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/1025923114": [
+      {
+        "id": "field/1025923114",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/1047452024": [
+      {
+        "id": "field/1047452024",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/374894045",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/788412943",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "field/1055298109": [
+      {
+        "id": "field/1055298109",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/538046": [
@@ -19356,58 +35779,350 @@
         "mask": "[subclass=JsLinkedHashMap]"
       }
     ],
+    "function/2781902": [
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/5571021": [
+      {
+        "id": "field/302220255",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/765963979",
+        "mask": null
+      },
+      {
+        "id": "function/890489632",
+        "mask": null
+      },
+      {
+        "id": "function/892227919",
+        "mask": null
+      },
+      {
+        "id": "function/892227919",
+        "mask": "inlined"
+      }
+    ],
+    "function/11678628": [
+      {
+        "id": "field/1002990507",
+        "mask": null
+      },
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/54796797",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/54796797",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/716694085",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/716694085",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/820496795",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/11804710": [
+      {
+        "id": "function/53371910",
+        "mask": null
+      },
+      {
+        "id": "function/593090281",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
     "function/15204906": [
       {
         "id": "field/24026359",
-        "mask": "[null|subclass=Object]"
+        "mask": null
       },
       {
         "id": "field/304825305",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/343514633",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/485816538",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/786919906",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "field/786919906",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "[null|subclass=Object]"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
       },
       {
         "id": "function/1058735230",
-        "mask": "[null|subclass=Object]"
+        "mask": "[exact=_Future]"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
       },
       {
         "id": "function/11804710",
-        "mask": "inlined"
+        "mask": null
       },
       {
-        "id": "function/11804710",
-        "mask": "null"
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/373761717",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/430787578",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/51167109",
@@ -19415,213 +36130,445 @@
       },
       {
         "id": "function/51167109",
-        "mask": "null"
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51167109",
+        "mask": null
+      },
+      {
+        "id": "function/51167109",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/556268777",
+        "mask": null
       },
       {
         "id": "function/556268777",
         "mask": "inlined"
       },
       {
-        "id": "function/556268777",
-        "mask": "null"
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
       },
       {
         "id": "function/63166902",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/869814859",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/869814859",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/95599505",
+        "mask": null
       },
       {
         "id": "function/95599505",
         "mask": "inlined"
       },
       {
-        "id": "function/95599505",
-        "mask": "null"
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/983564685",
+        "mask": null
       },
       {
         "id": "function/983564685",
         "mask": "inlined"
-      },
-      {
-        "id": "function/983564685",
-        "mask": "null"
       }
     ],
     "function/15478302": [
       {
-        "id": "field/1061931090",
-        "mask": "null"
-      },
-      {
-        "id": "field/125830184",
-        "mask": "null"
-      },
-      {
         "id": "field/302220255",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1061931090",
+        "mask": null
+      },
+      {
+        "id": "function/1061931090",
+        "mask": "inlined"
       },
       {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/873863767",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": null
       },
       {
         "id": "function/993180100",
         "mask": "inlined"
-      },
-      {
-        "id": "function/993180100",
-        "mask": "null"
-      }
-    ],
-    "function/15925204": [
-      {
-        "id": "field/786919906",
-        "mask": "null"
-      },
-      {
-        "id": "field/978504898",
-        "mask": "null"
-      },
-      {
-        "id": "function/271674536",
-        "mask": "null"
-      },
-      {
-        "id": "function/352514166",
-        "mask": "null"
-      },
-      {
-        "id": "function/519629171",
-        "mask": "null"
-      },
-      {
-        "id": "function/553149607",
-        "mask": "null"
-      },
-      {
-        "id": "function/560797298",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/560797298",
-        "mask": "null"
-      },
-      {
-        "id": "function/901078366",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/901078366",
-        "mask": "null"
-      },
-      {
-        "id": "function/967508646",
-        "mask": "null"
       }
     ],
     "function/16600620": [
       {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
         "id": "field/229586442",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/229586442",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/30570662",
+        "mask": null
       },
       {
         "id": "function/30570662",
         "mask": "inlined"
       },
       {
-        "id": "function/30570662",
-        "mask": "null"
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
       },
       {
         "id": "function/336424489",
         "mask": "[subclass=_LinkedHashSet]"
       },
       {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
         "id": "function/448031436",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/649401243",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
       },
       {
         "id": "function/920500080",
         "mask": "[subclass=_LinkedHashSet]"
-      }
-    ],
-    "function/16930089": [
-      {
-        "id": "field/42778158",
-        "mask": "null"
       },
       {
-        "id": "function/18599313",
-        "mask": "null"
+        "id": "function/956458971",
+        "mask": null
       },
       {
-        "id": "function/460512542",
-        "mask": "null"
+        "id": "function/973238019",
+        "mask": null
       },
       {
-        "id": "function/552271305",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/552271305",
-        "mask": "null"
-      },
-      {
-        "id": "function/94108092",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/94108092",
-        "mask": "null"
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/18599313": [
       {
         "id": "field/1055298109",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/485816538",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/786919906",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/786919906",
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "field/978504898",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/1031131035",
-        "mask": "inlined"
+        "mask": null
       },
       {
-        "id": "function/1031131035",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
       },
       {
         "id": "function/18599313",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
       },
       {
         "id": "function/556268777",
@@ -19629,39 +36576,103 @@
       },
       {
         "id": "function/556268777",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/644221207",
+        "mask": null
       },
       {
         "id": "function/644221207",
         "mask": "inlined"
       },
       {
-        "id": "function/644221207",
-        "mask": "null"
-      },
-      {
         "id": "function/658921946",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/722405802",
+        "mask": null
       },
       {
         "id": "function/722405802",
         "mask": "inlined"
       },
       {
-        "id": "function/722405802",
-        "mask": "null"
-      },
-      {
         "id": "function/772606842",
         "mask": "inlined"
       },
       {
         "id": "function/772606842",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
       },
       {
         "id": "function/853169304",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/853169304",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
       },
       {
         "id": "function/941710296",
@@ -19669,69 +36680,671 @@
       },
       {
         "id": "function/941710296",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/21667157": [
+    "function/21938161": [
       {
-        "id": "function/268773900",
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/123297685",
         "mask": "inlined"
       },
       {
-        "id": "function/268773900",
-        "mask": "null"
+        "id": "function/123297685",
+        "mask": null
       },
       {
-        "id": "function/310457557",
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
         "mask": "inlined"
       },
       {
-        "id": "function/310457557",
-        "mask": "null"
+        "id": "function/520073200",
+        "mask": null
       },
       {
-        "id": "function/689069465",
-        "mask": "null"
+        "id": "function/520073200",
+        "mask": null
       },
       {
-        "id": "function/736875717",
-        "mask": "inlined"
+        "id": "function/550912538",
+        "mask": null
       },
       {
-        "id": "function/736875717",
-        "mask": "null"
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/22227107": [
+    "function/25075263": [
       {
-        "id": "function/11804710",
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
         "mask": "inlined"
       },
       {
-        "id": "function/971160936",
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/620456164",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/25816218": [
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
         "mask": "inlined"
       }
     ],
     "function/31139860": [
       {
         "id": "field/410301694",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/39412415": [
       {
+        "id": "field/707077825",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/395066818",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/395066818",
+        "mask": null
+      },
+      {
+        "id": "function/395066818",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517290884",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517290884",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517290884",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
         "id": "function/574550003",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/62411321",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/49259755": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1010766199",
+        "mask": null
+      },
+      {
+        "id": "function/1010766199",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/637790089",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      }
+    ],
+    "function/53371910": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/18312199",
+        "mask": null
+      },
+      {
+        "id": "function/18312199",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
       }
     ],
     "function/53631526": [
       {
-        "id": "field/42778158",
-        "mask": "null"
+        "id": "function/1031826457",
+        "mask": null
       },
       {
         "id": "function/1031826457",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/1058735230",
@@ -19739,75 +37352,639 @@
       },
       {
         "id": "function/210974499",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/311229745",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/311229745",
+        "mask": null
       },
       {
         "id": "function/385444888",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/436170439",
-        "mask": "null"
-      },
-      {
-        "id": "function/460512542",
-        "mask": "null"
-      },
-      {
-        "id": "function/492708773",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/513053773",
-        "mask": "inlined"
+        "mask": null
       },
       {
-        "id": "function/513053773",
-        "mask": "null"
+        "id": "function/680877684",
+        "mask": null
       },
       {
-        "id": "function/664449932",
-        "mask": "null"
+        "id": "function/680877684",
+        "mask": null
       },
       {
         "id": "function/741666293",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/741666293",
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/57158184": [
       {
         "id": "function/417406426",
         "mask": "inlined"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "inlined"
+      }
+    ],
+    "function/57613304": [
+      {
+        "id": "function/866251913",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/866251913",
+        "mask": "inlined"
+      }
+    ],
+    "function/62411321": [
+      {
+        "id": "field/468492193",
+        "mask": null
+      },
+      {
+        "id": "field/707077825",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/796762824",
+        "mask": null
+      },
+      {
+        "id": "function/796762824",
+        "mask": "inlined"
+      }
+    ],
+    "function/63055866": [
+      {
+        "id": "function/321900710",
+        "mask": "inlined"
       }
     ],
     "function/63166902": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/262026503",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/66015995": [
+    "function/63763718": [
       {
-        "id": "function/430480673",
-        "mask": "null"
+        "id": "function/353303220",
+        "mask": null
+      },
+      {
+        "id": "function/353303220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/528985088",
+        "mask": null
+      }
+    ],
+    "function/66145123": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/301370282",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": "inlined"
       }
     ],
     "function/67489885": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
         "id": "function/263798810",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       },
       {
         "id": "function/987295701",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/987295701",
+        "mask": null
       }
     ],
     "function/67701762": [
@@ -19819,27 +37996,95 @@
     "function/68051831": [
       {
         "id": "field/1023319897",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/187449514",
+        "mask": null
       },
       {
         "id": "field/24026359",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/304825305",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/485816538",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/714493219",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
       },
       {
         "id": "function/1036675160",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/265638794",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/373761717",
@@ -19847,85 +38092,595 @@
       },
       {
         "id": "function/373761717",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/553851206",
-        "mask": "null"
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/39768413",
+        "mask": null
+      },
+      {
+        "id": "function/39768413",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/885768717",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
       },
       {
         "id": "function/968241519",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/70158663": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/72077250": [
       {
         "id": "field/443749531",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/74759397": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      }
+    ],
+    "function/77034453": [
+      {
+        "id": "function/116583875",
+        "mask": null
+      },
+      {
+        "id": "function/271854590",
+        "mask": null
+      },
+      {
+        "id": "function/330018012",
+        "mask": null
+      },
+      {
+        "id": "function/357627841",
+        "mask": null
+      },
+      {
+        "id": "function/399195151",
+        "mask": null
+      },
+      {
+        "id": "function/399195151",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/53631526",
+        "mask": null
+      },
+      {
+        "id": "function/550544609",
+        "mask": null
+      },
+      {
+        "id": "function/606513838",
+        "mask": null
+      },
+      {
+        "id": "function/635153575",
+        "mask": null
+      },
+      {
+        "id": "function/663282901",
+        "mask": null
+      },
+      {
+        "id": "function/710611585",
+        "mask": null
+      },
+      {
+        "id": "function/772250195",
+        "mask": null
+      },
+      {
+        "id": "function/864228238",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/77140749": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      }
+    ],
+    "function/78867062": [
+      {
+        "id": "function/1036180926",
+        "mask": "inlined"
       }
     ],
     "function/79175019": [
       {
         "id": "function/717561594",
         "mask": "inlined"
-      }
-    ],
-    "function/80270395": [
+      },
       {
-        "id": "field/154746101",
-        "mask": "null"
+        "id": "function/717561594",
+        "mask": "inlined"
       }
     ],
     "function/80736041": [
       {
         "id": "function/712365042",
-        "mask": "null"
-      }
-    ],
-    "function/81057679": [
-      {
-        "id": "function/63166902",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/82702408": [
       {
         "id": "field/29748263",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/639289778",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/931441116",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/932611099",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/546320785",
+        "mask": null
       },
       {
         "id": "function/546320785",
         "mask": "inlined"
       },
       {
-        "id": "function/546320785",
-        "mask": "null"
-      },
-      {
-        "id": "function/82702408",
-        "mask": "null"
-      },
-      {
         "id": "function/831655802",
-        "mask": "null"
+        "mask": null
       }
     ],
-    "function/94108092": [
+    "function/83781773": [
       {
-        "id": "function/460512542",
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
         "mask": "inlined"
+      },
+      {
+        "id": "function/1041854750",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/340789555",
+        "mask": null
+      },
+      {
+        "id": "function/340789555",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": null
+      },
+      {
+        "id": "function/631685979",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/709915292",
+        "mask": null
+      },
+      {
+        "id": "function/709915292",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/729126945",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
       }
     ],
     "function/95599505": [
@@ -19938,22 +38693,160 @@
         "mask": "inlined"
       }
     ],
+    "function/95816591": [
+      {
+        "id": "function/893622437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/893622437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/893622437",
+        "mask": "inlined"
+      }
+    ],
     "function/96457955": [
       {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
         "id": "field/786919906",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/271674536",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/519629171",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/901078366",
@@ -19961,21 +38854,137 @@
       },
       {
         "id": "function/901078366",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/98156511": [
       {
-        "id": "field/347672432",
-        "mask": "null"
+        "id": "field/676869951",
+        "mask": null
       },
       {
-        "id": "field/676869951",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
       },
       {
         "id": "function/130131853",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/702510",
@@ -19983,97 +38992,245 @@
       },
       {
         "id": "function/702510",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/702510",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/870367819",
+        "mask": null
       },
       {
         "id": "function/870367819",
         "mask": "inlined"
       },
       {
-        "id": "function/870367819",
-        "mask": "null"
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/998984172",
+        "mask": null
       },
       {
         "id": "function/998984172",
         "mask": "inlined"
-      },
-      {
-        "id": "function/998984172",
-        "mask": "null"
       }
     ],
     "function/99251871": [
       {
         "id": "field/435679137",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/60920969",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/635439616",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/676035370",
+        "mask": null
       },
       {
         "id": "function/676035370",
         "mask": "inlined"
       },
       {
-        "id": "function/676035370",
-        "mask": "null"
+        "id": "function/791758355",
+        "mask": null
       }
     ],
-    "function/99501118": [
+    "function/101848641": [
       {
-        "id": "field/1025923114",
-        "mask": "null"
-      },
-      {
-        "id": "field/978504898",
-        "mask": "null"
-      },
-      {
-        "id": "function/15925204",
-        "mask": "null"
-      },
-      {
-        "id": "function/163889622",
-        "mask": "null"
-      },
-      {
-        "id": "function/271556856",
-        "mask": "null"
-      },
-      {
-        "id": "function/823929753",
+        "id": "function/122441553",
         "mask": "inlined"
       },
       {
-        "id": "function/823929753",
-        "mask": "null"
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522380745",
+        "mask": "inlined"
       }
     ],
     "function/102471615": [
       {
         "id": "field/1025923114",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/271556856",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/664449932",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
       },
       {
         "id": "function/823929753",
@@ -20081,103 +39238,685 @@
       },
       {
         "id": "function/823929753",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/108053021": [
+    "function/103899378": [
       {
-        "id": "function/722993348",
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/603807818",
+        "mask": null
+      },
+      {
+        "id": "function/603807818",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/834015338",
+        "mask": null
+      }
+    ],
+    "function/110436482": [
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      }
+    ],
+    "function/111998270": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
         "mask": "inlined"
       }
     ],
     "function/116203851": [
       {
         "id": "field/826222890",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/116583875": [
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/766396929",
-        "mask": "[null|subclass=Object]"
+        "mask": "[null|subtype=Completer]"
       },
       {
         "id": "function/852141617",
-        "mask": "[null|subclass=Object]"
+        "mask": "[null|subtype=Completer]"
       }
     ],
     "function/116599339": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
         "id": "function/123959555",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/494583530",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/573775196",
+        "mask": null
       },
       {
         "id": "function/573775196",
         "mask": "inlined"
       },
       {
-        "id": "function/573775196",
-        "mask": "null"
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/687991937",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/120424305": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
       }
     ],
     "function/128684509": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
         "id": "function/120153851",
         "mask": "inlined"
       },
       {
         "id": "function/120153851",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/969026469",
+        "mask": null
       },
       {
         "id": "function/969026469",
         "mask": "inlined"
       },
       {
-        "id": "function/969026469",
-        "mask": "null"
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/130041650": [
       {
         "id": "field/190358771",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/130131853": [
       {
         "id": "field/229586442",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/114607430",
+        "mask": null
       },
       {
         "id": "function/114607430",
         "mask": "inlined"
       },
       {
-        "id": "function/114607430",
-        "mask": "null"
-      },
-      {
         "id": "function/336424489",
         "mask": "[subclass=_LinkedHashSet]"
       },
@@ -20186,14 +39925,400 @@
         "mask": "[subclass=_LinkedHashSet]"
       }
     ],
+    "function/131257513": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/132742275": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/133009644": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1017330300",
+        "mask": null
+      },
+      {
+        "id": "function/101848641",
+        "mask": null
+      },
+      {
+        "id": "function/101848641",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1041854750",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/522380745",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/631685979",
+        "mask": null
+      },
+      {
+        "id": "function/637526703",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/753032370",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/977037784",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/977037784",
+        "mask": null
+      }
+    ],
     "function/139456351": [
       {
         "id": "field/1047452024",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/1047452024",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
       },
       {
         "id": "function/335045122",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/358340511",
+        "mask": null
       },
       {
         "id": "function/358340511",
@@ -20201,171 +40326,785 @@
       },
       {
         "id": "function/358340511",
-        "mask": "null"
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/507333070",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/140617653": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/203929913",
+        "mask": null
+      },
+      {
+        "id": "function/203929913",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/143741280": [
       {
         "id": "field/23408725",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/414662379",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
-      }
-    ],
-    "function/144469777": [
-      {
-        "id": "function/163889622",
-        "mask": "null"
-      },
-      {
-        "id": "function/208283907",
-        "mask": "null"
-      },
-      {
-        "id": "function/308590446",
-        "mask": "null"
-      },
-      {
-        "id": "function/427434111",
-        "mask": "null"
-      },
-      {
-        "id": "function/952130975",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/952130975",
-        "mask": "null"
-      }
-    ],
-    "function/150523169": [
-      {
-        "id": "field/373519716",
-        "mask": "null"
-      },
-      {
-        "id": "field/850921879",
-        "mask": "null"
-      },
-      {
-        "id": "function/144469778",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
-      },
-      {
-        "id": "function/784650927",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+        "mask": null
       }
     ],
     "function/150705145": [
       {
         "id": "field/944915314",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/160933185": [
+      {
+        "id": "function/1055215220",
+        "mask": null
       },
       {
-        "id": "function/445547062",
-        "mask": "null"
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/331545422",
+        "mask": null
       }
     ],
     "function/160969748": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/42778158",
+        "mask": null
+      },
+      {
+        "id": "function/343621437",
+        "mask": null
       },
       {
         "id": "function/343621437",
         "mask": "inlined"
       },
       {
-        "id": "function/343621437",
-        "mask": "null"
+        "id": "function/975105635",
+        "mask": null
       },
       {
         "id": "function/975105635",
         "mask": "inlined"
-      },
-      {
-        "id": "function/975105635",
-        "mask": "null"
       }
     ],
     "function/162825675": [
       {
-        "id": "function/418915149",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/210974499",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
-      }
-    ],
-    "function/162872908": [
+        "mask": null
+      },
       {
-        "id": "function/94108092",
-        "mask": "inlined"
+        "id": "function/476211666",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/163884478": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
         "id": "function/263798810",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
       },
       {
         "id": "function/603355140",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/603355140",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/163889622": [
       {
         "id": "function/435575019",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/968358412",
+        "mask": null
       },
       {
         "id": "function/968358412",
         "mask": "inlined"
-      },
-      {
-        "id": "function/968358412",
-        "mask": "null"
       }
     ],
     "function/165003912": [
       {
-        "id": "function/163884478",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/263798810",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/426855684",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/426855684",
+        "mask": null
       },
       {
         "id": "function/469962639",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/608925525",
-        "mask": "null"
+        "id": "function/469962639",
+        "mask": null
       },
       {
-        "id": "function/67489885",
-        "mask": "null"
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/717561594",
@@ -20373,109 +41112,595 @@
       },
       {
         "id": "function/717561594",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/167217604": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/167405219": [
       {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
         "id": "function/873863767",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": null
       },
       {
         "id": "function/993180100",
         "mask": "inlined"
-      },
-      {
-        "id": "function/993180100",
-        "mask": "null"
       }
     ],
     "function/176570718": [
       {
         "id": "function/580865640",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/176842663": [
       {
         "id": "field/435679137",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/635439616",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/635439616",
+        "mask": null
       },
       {
         "id": "field/646361925",
-        "mask": "null"
+        "mask": "[exact=_LinkedHashSetIterator]"
       },
       {
         "id": "field/65712884",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/795932009",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/839347349",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/914365883",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/701409225",
-        "mask": "null"
-      }
-    ],
-    "function/193787732": [
-      {
-        "id": "function/264370095",
-        "mask": "inlined"
+        "mask": null
       },
       {
-        "id": "function/268773900",
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/195520573": [
+      {
+        "id": "function/986643735",
         "mask": "inlined"
       }
     ],
-    "function/203738274": [
-      {
-        "id": "function/456567103",
-        "mask": "null"
-      }
-    ],
-    "function/204916897": [
+    "function/196790253": [
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/714600619",
-        "mask": "null"
+        "id": "function/692531098",
+        "mask": null
+      },
+      {
+        "id": "function/692531098",
+        "mask": "inlined"
+      }
+    ],
+    "function/200890444": [
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
       }
     ],
     "function/205154197": [
       {
-        "id": "function/163889622",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/553851206",
-        "mask": "null"
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
       },
       {
         "id": "function/606572177",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/888466063",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/904115316",
@@ -20483,289 +41708,1529 @@
       },
       {
         "id": "function/904115316",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/207792788": [
+      {
+        "id": "field/1002990507",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/11678628",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/253415970",
+        "mask": null
+      },
+      {
+        "id": "function/287475886",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/55984201",
+        "mask": null
+      },
+      {
+        "id": "function/55984201",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/896138477",
+        "mask": null
+      },
+      {
+        "id": "function/896138477",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
       }
     ],
     "function/210974499": [
       {
-        "id": "function/1024143730",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/437395524",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/653699436",
-        "mask": "null"
+        "id": "function/502696664",
+        "mask": null
       },
       {
-        "id": "function/997099929",
-        "mask": "inlined"
+        "id": "function/520073200",
+        "mask": null
       },
       {
-        "id": "function/997099929",
-        "mask": "null"
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/221934998": [
+    "function/231618349": [
       {
-        "id": "function/144469777",
-        "mask": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)"
-      },
-      {
-        "id": "function/407139250",
-        "mask": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)"
-      },
-      {
-        "id": "function/738104072",
-        "mask": "null"
-      }
-    ],
-    "function/230858033": [
-      {
-        "id": "function/193787732",
+        "id": "function/950377748",
         "mask": "inlined"
-      },
-      {
-        "id": "function/193787732",
-        "mask": "null"
-      },
-      {
-        "id": "function/230858033",
-        "mask": "null"
-      },
-      {
-        "id": "function/264370095",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/264370095",
-        "mask": "null"
-      },
-      {
-        "id": "function/268773900",
-        "mask": "null"
-      },
-      {
-        "id": "function/299781104",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/299781104",
-        "mask": "null"
-      },
-      {
-        "id": "function/445547062",
-        "mask": "null"
-      },
-      {
-        "id": "function/467155193",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/467155193",
-        "mask": "null"
-      },
-      {
-        "id": "function/501712645",
-        "mask": "null"
-      },
-      {
-        "id": "function/737782244",
-        "mask": "null"
       }
     ],
     "function/231669663": [
       {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
         "id": "field/304825305",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/343514633",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/485816538",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
       },
       {
         "id": "function/11804710",
-        "mask": "inlined"
+        "mask": null
       },
       {
-        "id": "function/11804710",
-        "mask": "null"
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/350333970",
+        "mask": null
       },
       {
         "id": "function/350333970",
         "mask": "inlined"
       },
       {
-        "id": "function/350333970",
-        "mask": "null"
+        "id": "function/373761717",
+        "mask": null
       },
       {
-        "id": "function/373761717",
-        "mask": "null"
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/692185405",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
       },
       {
         "id": "function/968241519",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/243489700": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/427434111",
-        "mask": "null"
-      }
-    ],
-    "function/248499885": [
-      {
-        "id": "field/334228980",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/766396929",
-        "mask": "null"
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/245364359": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/492521940",
+        "mask": null
+      },
+      {
+        "id": "function/492521940",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/65470864",
+        "mask": null
+      },
+      {
+        "id": "function/65470864",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/883935916",
+        "mask": null
+      },
+      {
+        "id": "function/883935916",
+        "mask": "inlined"
+      }
+    ],
+    "function/247461665": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/248883787": [
       {
-        "id": "function/418915149",
-        "mask": "null"
-      }
-    ],
-    "function/249771766": [
-      {
-        "id": "field/710218156",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "field/9743357",
-        "mask": "null"
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/476211666",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/253415970": [
+      {
+        "id": "field/787049592",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864971496",
+        "mask": null
+      },
+      {
+        "id": "function/864971496",
+        "mask": "inlined"
+      }
+    ],
+    "function/253560656": [
+      {
+        "id": "function/1041854750",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
       }
     ],
     "function/253794122": [
       {
-        "id": "field/259683855",
-        "mask": "null"
+        "id": "field/386221903",
+        "mask": null
       },
       {
         "id": "field/386221903",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/143567266",
+        "mask": null
       },
       {
         "id": "function/143567266",
         "mask": "inlined"
       },
       {
-        "id": "function/143567266",
-        "mask": "null"
+        "id": "function/160933185",
+        "mask": null
       },
       {
-        "id": "function/163889622",
-        "mask": "null"
+        "id": "function/167217604",
+        "mask": null
       },
       {
-        "id": "function/221934998",
-        "mask": "[null|subclass=Object]"
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/273024378",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/275681184",
-        "mask": "null"
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/320253842",
+        "mask": null
       },
       {
         "id": "function/320253842",
         "mask": "inlined"
       },
       {
-        "id": "function/320253842",
-        "mask": "null"
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/393060060",
+        "mask": null
       },
       {
         "id": "function/393060060",
         "mask": "inlined"
       },
       {
-        "id": "function/393060060",
-        "mask": "null"
+        "id": "function/417411809",
+        "mask": null
       },
       {
-        "id": "function/684612786",
-        "mask": "null"
+        "id": "function/502696664",
+        "mask": null
       },
       {
-        "id": "function/726979110",
-        "mask": "[null|subclass=Object]"
+        "id": "function/520073200",
+        "mask": null
       },
       {
-        "id": "function/738104072",
-        "mask": "[null|subclass=Object]"
+        "id": "function/550912538",
+        "mask": null
       },
       {
-        "id": "function/791079680",
-        "mask": "null"
+        "id": "function/559097830",
+        "mask": null
       },
       {
-        "id": "function/906797235",
-        "mask": "null"
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/807434881",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/262026503": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/42778158",
+        "mask": null
+      },
+      {
+        "id": "function/343621437",
+        "mask": null
       },
       {
         "id": "function/343621437",
         "mask": "inlined"
       },
       {
-        "id": "function/343621437",
-        "mask": "null"
+        "id": "function/975105635",
+        "mask": null
       },
       {
         "id": "function/975105635",
         "mask": "inlined"
-      },
-      {
-        "id": "function/975105635",
-        "mask": "null"
       }
     ],
     "function/263363184": [
       {
         "id": "field/485816538",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/341046768",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/341046768",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/533906117",
@@ -20773,7 +43238,35 @@
       },
       {
         "id": "function/533906117",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/644221207",
@@ -20781,165 +43274,191 @@
       },
       {
         "id": "function/644221207",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/658921946",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/263798810": [
       {
         "id": "function/309114439",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/264634420": [
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
       }
     ],
     "function/265638794": [
       {
-        "id": "field/146902950",
-        "mask": "null"
-      },
-      {
-        "id": "field/169031325",
-        "mask": "null"
-      },
-      {
-        "id": "field/189240247",
-        "mask": "null"
-      },
-      {
-        "id": "field/337959975",
-        "mask": "null"
-      },
-      {
-        "id": "field/366629653",
-        "mask": "null"
-      },
-      {
-        "id": "field/368849633",
-        "mask": "null"
-      },
-      {
-        "id": "field/381082880",
-        "mask": "null"
-      },
-      {
-        "id": "field/645317327",
-        "mask": "null"
-      },
-      {
-        "id": "field/646744185",
-        "mask": "null"
-      },
-      {
-        "id": "field/79943715",
-        "mask": "null"
-      },
-      {
         "id": "field/909027003",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/148863126",
-        "mask": "null"
+        "id": "function/131257513",
+        "mask": null
       },
       {
-        "id": "function/282990063",
-        "mask": "null"
+        "id": "function/33492639",
+        "mask": null
       },
       {
-        "id": "function/336352070",
-        "mask": "null"
-      },
-      {
-        "id": "function/430193009",
+        "id": "function/33492639",
         "mask": "inlined"
       },
       {
-        "id": "function/430193009",
-        "mask": "null"
-      },
+        "id": "function/959492039",
+        "mask": null
+      }
+    ],
+    "function/266572710": [
       {
-        "id": "function/445547062",
-        "mask": "null"
-      },
-      {
-        "id": "function/632290992",
+        "id": "function/171156881",
         "mask": "inlined"
+      }
+    ],
+    "function/268212636": [
+      {
+        "id": "field/924001250",
+        "mask": null
       },
       {
-        "id": "function/632290992",
-        "mask": "null"
-      },
-      {
-        "id": "function/64968119",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/64968119",
-        "mask": "null"
-      },
-      {
-        "id": "function/725505159",
-        "mask": "null"
-      },
-      {
-        "id": "function/752981084",
-        "mask": "null"
-      },
-      {
-        "id": "function/756575134",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/756575134",
-        "mask": "null"
-      },
-      {
-        "id": "function/885768717",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/885768717",
-        "mask": "null"
+        "id": "function/575664914",
+        "mask": null
       }
     ],
     "function/271674536": [
       {
         "id": "field/1023319897",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/1055298109",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/1055298109",
+        "mask": null
       },
       {
         "id": "field/187449514",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/206062167",
+        "mask": null
       },
       {
         "id": "field/24026359",
-        "mask": "[null|subclass=Object]"
+        "mask": null
       },
       {
         "id": "field/304825305",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/42778158",
+        "mask": null
       },
       {
         "id": "field/485816538",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/786919906",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/786919906",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/978504898",
+        "mask": null
       },
       {
         "id": "function/1031131035",
@@ -20947,43 +43466,115 @@
       },
       {
         "id": "function/1031131035",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
       },
       {
         "id": "function/15204906",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/15204906",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
       },
       {
         "id": "function/231669663",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/231669663",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/271674536",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/343621437",
+        "mask": null
       },
       {
         "id": "function/343621437",
         "mask": "inlined"
       },
       {
-        "id": "function/343621437",
-        "mask": "null"
-      },
-      {
         "id": "function/352514166",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/364010339",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/373761717",
+        "mask": null
       },
       {
         "id": "function/373761717",
         "mask": "inlined"
       },
       {
-        "id": "function/373761717",
-        "mask": "null"
+        "id": "function/383496058",
+        "mask": null
+      },
+      {
+        "id": "function/383496058",
+        "mask": "inlined"
       },
       {
         "id": "function/39768413",
@@ -20991,19 +43582,23 @@
       },
       {
         "id": "function/39768413",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/39768413",
+        "mask": "inlined"
       },
       {
         "id": "function/417406426",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/460512542",
-        "mask": "inlined"
+        "id": "function/417411809",
+        "mask": null
       },
       {
-        "id": "function/460512542",
-        "mask": "null"
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/51167109",
@@ -21011,7 +43606,15 @@
       },
       {
         "id": "function/51167109",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/51167109",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "inlined"
       },
       {
         "id": "function/519629171",
@@ -21019,7 +43622,27 @@
       },
       {
         "id": "function/519629171",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/527450614",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/527450614",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/553149607",
+        "mask": null
       },
       {
         "id": "function/556268777",
@@ -21027,7 +43650,7 @@
       },
       {
         "id": "function/556268777",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/57158184",
@@ -21035,11 +43658,27 @@
       },
       {
         "id": "function/57158184",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
       },
       {
         "id": "function/586712659",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/586712659",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
       },
       {
         "id": "function/613322203",
@@ -21047,7 +43686,31 @@
       },
       {
         "id": "function/613322203",
-        "mask": "null"
+        "mask": "inlined"
+      },
+      {
+        "id": "function/613322203",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/748173162",
@@ -21055,43 +43718,95 @@
       },
       {
         "id": "function/748173162",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/748173162",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
       },
       {
         "id": "function/853973218",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/901078366",
+        "mask": null
       },
       {
         "id": "function/901078366",
         "mask": "inlined"
       },
       {
-        "id": "function/901078366",
-        "mask": "null"
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/919469907",
+        "mask": null
       },
       {
         "id": "function/919469907",
         "mask": "inlined"
       },
       {
-        "id": "function/919469907",
-        "mask": "null"
+        "id": "function/924450127",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/971160936",
+        "mask": null
       },
       {
         "id": "function/971160936",
         "mask": "inlined"
       },
       {
-        "id": "function/971160936",
-        "mask": "null"
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/975105635",
+        "mask": null
       },
       {
         "id": "function/975105635",
         "mask": "inlined"
       },
       {
-        "id": "function/975105635",
-        "mask": "null"
+        "id": "function/982751380",
+        "mask": null
       },
       {
         "id": "function/983564685",
@@ -21099,57 +43814,241 @@
       },
       {
         "id": "function/983564685",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/271854590": [
       {
         "id": "function/102471615",
-        "mask": "[null|subclass=Object]"
+        "mask": "[null|subtype=Completer]"
       },
       {
         "id": "function/618126497",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/99501118",
-        "mask": "[null|subclass=Object]"
+        "mask": "[null|subtype=Completer]"
       }
     ],
     "function/272589495": [
       {
         "id": "field/261042870",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/265638794",
-        "mask": "null"
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/273024378": [
       {
         "id": "field/386221903",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "field/435101137",
-        "mask": "null"
+        "id": "field/386221903",
+        "mask": null
       },
       {
-        "id": "function/221934998",
-        "mask": "[null|subclass=Object]"
+        "id": "field/636292115",
+        "mask": null
       },
       {
-        "id": "function/292195356",
-        "mask": "null"
+        "id": "field/636292115",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
       },
       {
         "id": "function/320253842",
@@ -21157,57 +44056,285 @@
       },
       {
         "id": "function/320253842",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/476860251",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/724475372",
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/659844135",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/762030080",
         "mask": "inlined"
       },
       {
-        "id": "function/724475372",
-        "mask": "null"
+        "id": "function/762030080",
+        "mask": null
       },
       {
-        "id": "function/726979110",
-        "mask": "[null|subclass=Object]"
+        "id": "function/762030080",
+        "mask": "inlined"
       },
       {
-        "id": "function/738104072",
-        "mask": "[null|subclass=Object]"
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
       },
       {
         "id": "function/922840913",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/275957193": [
       {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
         "id": "field/347672432",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/347672432",
+        "mask": null
       },
       {
         "id": "field/676869951",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/676869951",
+        "mask": null
       },
       {
         "id": "function/1002752870",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
       },
       {
         "id": "function/16600620",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/448031436",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/870367819",
@@ -21215,63 +44342,325 @@
       },
       {
         "id": "function/870367819",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/998984172",
+        "mask": null
       },
       {
         "id": "function/998984172",
         "mask": "inlined"
-      },
-      {
-        "id": "function/998984172",
-        "mask": "null"
       }
     ],
-    "function/292195356": [
+    "function/285148179": [
       {
-        "id": "function/393060060",
+        "id": "function/295807328",
+        "mask": null
+      }
+    ],
+    "function/287475886": [
+      {
+        "id": "field/1002990507",
+        "mask": null
+      },
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
         "mask": "inlined"
       },
       {
-        "id": "function/393060060",
-        "mask": "null"
+        "id": "function/1055215220",
+        "mask": null
       },
       {
-        "id": "function/478486472",
-        "mask": "null"
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/54796797",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/54796797",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/820496795",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/831592736",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/292751514": [
       {
         "id": "field/1055298109",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/1055298109",
+        "mask": null
       },
       {
         "id": "field/485816538",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/786919906",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/786919906",
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "field/978504898",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/1031131035",
-        "mask": "inlined"
+        "mask": null
       },
       {
-        "id": "function/1031131035",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/292751514",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
       },
       {
         "id": "function/556268777",
@@ -21279,7 +44668,31 @@
       },
       {
         "id": "function/556268777",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/644221207",
@@ -21287,31 +44700,67 @@
       },
       {
         "id": "function/644221207",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/658921946",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/722405802",
+        "mask": null
       },
       {
         "id": "function/722405802",
         "mask": "inlined"
       },
       {
-        "id": "function/722405802",
-        "mask": "null"
-      },
-      {
         "id": "function/772606842",
         "mask": "inlined"
       },
       {
         "id": "function/772606842",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
       },
       {
         "id": "function/853973218",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
       },
       {
         "id": "function/941710296",
@@ -21319,21 +44768,313 @@
       },
       {
         "id": "function/941710296",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/947198569",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/947198569",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/292889014": [
+    "function/294207503": [
       {
-        "id": "function/275681184",
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
         "mask": "inlined"
       },
       {
-        "id": "function/275681184",
-        "mask": "null"
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/295807328": [
+      {
+        "id": "function/745680035",
+        "mask": null
+      },
+      {
+        "id": "function/745680035",
+        "mask": "inlined"
+      }
+    ],
+    "function/301370282": [
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1036730465",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/426435180",
+        "mask": null
+      },
+      {
+        "id": "function/426435180",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747174278",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
       }
     ],
     "function/301932486": [
@@ -21356,94 +45097,896 @@
         "mask": "[subclass=Closure]"
       },
       {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
         "id": "function/873863767",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": null
       },
       {
         "id": "function/993180100",
         "mask": "inlined"
-      },
-      {
-        "id": "function/993180100",
-        "mask": "null"
       }
     ],
     "function/308590446": [
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/309114439": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/301932486",
+        "mask": null
       },
       {
         "id": "function/301932486",
         "mask": "inlined"
       },
       {
-        "id": "function/301932486",
-        "mask": "null"
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
       },
       {
         "id": "function/806420362",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/310648840": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/123297685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/123297685",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/311229745": [
       {
         "id": "field/496557243",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/162825675",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/418915149",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/754771250",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
+      }
+    ],
+    "function/311482390": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/806634540",
+        "mask": null
+      },
+      {
+        "id": "field/806634540",
+        "mask": null
+      },
+      {
+        "id": "function/301370282",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/505296423",
+        "mask": null
+      },
+      {
+        "id": "function/505296423",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/505296423",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/505296423",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/561625953",
+        "mask": null
+      },
+      {
+        "id": "function/561625953",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/561625953",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/587828093",
+        "mask": null
+      },
+      {
+        "id": "function/587828093",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
       }
     ],
     "function/312768442": [
       {
-        "id": "function/163889622",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/349997389",
-        "mask": "null"
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/243489700",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/827571674",
+        "mask": null
       },
       {
         "id": "function/827571674",
         "mask": "inlined"
       },
       {
-        "id": "function/827571674",
-        "mask": "null"
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/317451330": [
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331545422",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/716694085",
+        "mask": null
+      },
+      {
+        "id": "function/716694085",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": null
+      },
+      {
+        "id": "function/831592736",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/319720211": [
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/355012434",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      }
+    ],
+    "function/321900710": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
       }
     ],
     "function/325386239": [
       {
         "id": "field/485816538",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/352514166",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/533906117",
@@ -21451,69 +45994,149 @@
       },
       {
         "id": "function/533906117",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
       },
       {
         "id": "function/553149607",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/560797298",
-        "mask": "inlined"
+        "id": "function/578373084",
+        "mask": null
       },
       {
-        "id": "function/560797298",
-        "mask": "null"
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/644221207",
+        "mask": null
       },
       {
         "id": "function/644221207",
         "mask": "inlined"
       },
       {
-        "id": "function/644221207",
-        "mask": "null"
-      },
-      {
         "id": "function/658921946",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/899674954",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/967508646",
-        "mask": "null"
+        "id": "function/899674954",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/983564685",
+        "mask": null
       },
       {
         "id": "function/983564685",
         "mask": "inlined"
-      },
-      {
-        "id": "function/983564685",
-        "mask": "null"
       }
     ],
     "function/326542993": [
       {
+        "id": "field/1025923114",
+        "mask": null
+      },
+      {
         "id": "field/126292751",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/496557243",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/845351074",
+        "mask": null
       },
       {
         "id": "field/8965675",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/907727246",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/1014821943",
@@ -21521,75 +46144,211 @@
       },
       {
         "id": "function/1014821943",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
       },
       {
         "id": "function/1058735230",
         "mask": "[exact=_Future]"
       },
       {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
         "id": "function/263798810",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/312768442",
+        "mask": null
       },
       {
         "id": "function/312768442",
         "mask": "[null|exact=JSString]"
       },
       {
-        "id": "function/312768442",
-        "mask": "null"
+        "id": "function/317451330",
+        "mask": null
       },
       {
-        "id": "function/460512542",
-        "mask": "null"
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
       },
       {
         "id": "function/569040700",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/569040700",
+        "mask": null
       },
       {
         "id": "function/569040701",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/569040701",
+        "mask": null
       },
       {
         "id": "function/569040702",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/569040702",
+        "mask": null
       },
       {
         "id": "function/569040703",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/569040703",
+        "mask": null
       },
       {
         "id": "function/569040704",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/569040704",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
       },
       {
         "id": "function/601638462",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/601638462",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/642229693",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/642229693",
+        "mask": null
       },
       {
         "id": "function/665416673",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/717561594",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
       },
       {
         "id": "function/779765691",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/79175019",
@@ -21597,53 +46356,199 @@
       },
       {
         "id": "function/79175019",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
       },
       {
         "id": "function/820195095",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
       },
       {
         "id": "function/94108092",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/942227822",
+        "mask": null
       },
       {
         "id": "function/942227822",
         "mask": "[null|exact=JSString]"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/330018012": [
       {
         "id": "function/337937411",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/331545422": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/536333412",
+        "mask": null
       }
     ],
     "function/335045122": [
       {
         "id": "function/507333070",
         "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
       }
     ],
     "function/336168458": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/164775669",
+        "mask": null
       },
       {
         "id": "function/164775669",
         "mask": "inlined"
       },
       {
-        "id": "function/164775669",
-        "mask": "null"
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/390828239",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/417406426",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/460512542",
+        "mask": null
       },
       {
         "id": "function/460512542",
@@ -21651,7 +46556,19 @@
       },
       {
         "id": "function/460512542",
-        "mask": "null"
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
       },
       {
         "id": "function/57158184",
@@ -21659,7 +46576,31 @@
       },
       {
         "id": "function/57158184",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/644221207",
@@ -21667,11 +46608,55 @@
       },
       {
         "id": "function/644221207",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/658921946",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       },
       {
         "id": "function/992393187",
@@ -21679,7 +46664,7 @@
       },
       {
         "id": "function/992393187",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/336424489": [
@@ -21728,30 +46713,288 @@
         "mask": "[null|subclass=Object]"
       }
     ],
+    "function/337498518": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1041854750",
+        "mask": null
+      },
+      {
+        "id": "function/1041854750",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/351876786",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/469917674",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864812824",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      }
+    ],
     "function/337937411": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/786919906",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
       },
       {
         "id": "function/1058735230",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/16930089",
-        "mask": "null"
+        "id": "function/1068396938",
+        "mask": null
       },
       {
-        "id": "function/460512542",
-        "mask": "null"
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/753558090",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/901078366",
@@ -21759,29 +47002,339 @@
       },
       {
         "id": "function/901078366",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/907920633",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/907920633",
+        "mask": null
       },
       {
         "id": "function/907920634",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/907920634",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/94108092",
+        "mask": null
       },
       {
         "id": "function/94108092",
         "mask": "inlined"
       },
       {
-        "id": "function/94108092",
-        "mask": "null"
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/339189097": [
+      {
+        "id": "field/840751619",
+        "mask": null
+      },
+      {
+        "id": "function/355012434",
+        "mask": null
+      }
+    ],
+    "function/339437005": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/340789555": [
+      {
+        "id": "function/1041854750",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/598784217",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
       }
     ],
     "function/341046768": [
       {
         "id": "function/574550003",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/347168225": [
+      {
+        "id": "function/479155815",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      }
+    ],
+    "function/347710223": [
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
       }
     ],
     "function/350333970": [
@@ -21794,32 +47347,110 @@
         "mask": "inlined"
       }
     ],
-    "function/350634082": [
-      {
-        "id": "function/162872908",
-        "mask": "inlined"
-      }
-    ],
     "function/351622741": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/262026503",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/364010339",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
       },
       {
         "id": "function/613322203",
@@ -21827,49 +47458,591 @@
       },
       {
         "id": "function/613322203",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/924450127",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/351876786": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/110436482",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/110436482",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/133009644",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/25816218",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/351876786",
+        "mask": null
+      },
+      {
+        "id": "function/357766771",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/469917674",
+        "mask": null
+      },
+      {
+        "id": "function/49259755",
+        "mask": null
+      },
+      {
+        "id": "function/499032542",
+        "mask": null
+      },
+      {
+        "id": "function/501313936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/501313936",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/667416185",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/72073576",
+        "mask": null
+      },
+      {
+        "id": "function/74759397",
+        "mask": null
+      },
+      {
+        "id": "function/74759397",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/801619570",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864812824",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
       }
     ],
     "function/352514166": [
       {
         "id": "field/786919906",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/786919906",
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "[null|subclass=Object]"
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/1031131035",
-        "mask": "inlined"
+        "mask": null
       },
       {
-        "id": "function/1031131035",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/271674536",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/292751514",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/519629171",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/556268777",
+        "mask": null
       },
       {
         "id": "function/556268777",
         "mask": "inlined"
       },
       {
-        "id": "function/556268777",
-        "mask": "null"
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
       },
       {
         "id": "function/638807044",
@@ -21877,203 +48050,385 @@
       },
       {
         "id": "function/638807044",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/722405802",
+        "mask": null
       },
       {
         "id": "function/722405802",
         "mask": "inlined"
       },
       {
-        "id": "function/722405802",
-        "mask": "null"
-      },
-      {
         "id": "function/772606842",
         "mask": "inlined"
       },
       {
         "id": "function/772606842",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/355012434": [
       {
-        "id": "function/1033661873",
-        "mask": "[null|subclass=Object]"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1042482096",
+        "mask": null
       },
       {
         "id": "function/1042482096",
         "mask": "inlined"
       },
       {
-        "id": "function/1042482096",
-        "mask": "null"
-      },
-      {
-        "id": "function/1051093947",
-        "mask": "[null|subclass=Object]"
+        "id": "function/1068396938",
+        "mask": null
       },
       {
         "id": "function/109394176",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/116203851",
-        "mask": "[null|subclass=Object]"
+        "id": "function/132742275",
+        "mask": null
       },
       {
-        "id": "function/130041650",
-        "mask": "[null|subclass=Object]"
+        "id": "function/160933185",
+        "mask": null
       },
       {
-        "id": "function/143741280",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/150705145",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/15478302",
-        "mask": "[null|subclass=Object]"
+        "id": "function/167217604",
+        "mask": null
       },
       {
         "id": "function/167405219",
-        "mask": "[null|subclass=Object]"
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
       },
       {
         "id": "function/173469993",
-        "mask": "[null|subclass=Object]"
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
       },
       {
-        "id": "function/176570718",
-        "mask": "[null|subclass=Object]"
+        "id": "function/207792788",
+        "mask": null
       },
       {
-        "id": "function/285148179",
-        "mask": "[null|subclass=Object]"
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/302617892",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/369614033",
-        "mask": "[null|subclass=Object]"
+        "id": "function/310648840",
+        "mask": null
       },
       {
-        "id": "function/372037963",
-        "mask": "[null|subclass=Object]"
+        "id": "function/317451330",
+        "mask": null
       },
       {
-        "id": "function/380325809",
-        "mask": "[null|subclass=Object]"
+        "id": "function/331565025",
+        "mask": null
       },
       {
-        "id": "function/431897853",
-        "mask": "[null|subclass=Object]"
+        "id": "function/339437005",
+        "mask": null
       },
       {
-        "id": "function/436231120",
-        "mask": "[null|subclass=Object]"
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/440018750",
-        "mask": "[null|subclass=Object]"
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
       },
       {
-        "id": "function/464959827",
-        "mask": "[null|subclass=Object]"
+        "id": "function/502696664",
+        "mask": null
       },
       {
-        "id": "function/474133145",
-        "mask": "[null|subclass=Object]"
+        "id": "function/520073200",
+        "mask": null
       },
       {
-        "id": "function/550544609",
-        "mask": "[null|subclass=Object]"
+        "id": "function/550912538",
+        "mask": null
       },
       {
-        "id": "function/565013754",
-        "mask": "[null|subclass=Object]"
+        "id": "function/578373084",
+        "mask": null
       },
       {
-        "id": "function/613119304",
-        "mask": "[null|subclass=Object]"
+        "id": "function/583427045",
+        "mask": null
       },
       {
-        "id": "function/636061569",
-        "mask": "[null|subclass=Object]"
+        "id": "function/598215859",
+        "mask": null
       },
       {
-        "id": "function/66015995",
-        "mask": "[null|subclass=Object]"
+        "id": "function/631550768",
+        "mask": null
       },
       {
-        "id": "function/72077250",
-        "mask": "[null|subclass=Object]"
+        "id": "function/632397862",
+        "mask": null
       },
       {
-        "id": "function/730595126",
-        "mask": "[null|subclass=Object]"
+        "id": "function/640394917",
+        "mask": null
       },
       {
-        "id": "function/745741399",
-        "mask": "[null|subclass=Object]"
+        "id": "function/70158663",
+        "mask": null
       },
       {
-        "id": "function/793410068",
-        "mask": "[null|subclass=Object]"
+        "id": "function/777322353",
+        "mask": null
       },
       {
-        "id": "function/848267879",
-        "mask": "[null|subclass=Object]"
+        "id": "function/791758355",
+        "mask": null
       },
       {
-        "id": "function/891910474",
-        "mask": "[null|subclass=Object]"
+        "id": "function/83342486",
+        "mask": null
       },
       {
-        "id": "function/93381370",
-        "mask": "[null|subclass=Object]"
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
       },
       {
         "id": "function/944731702",
-        "mask": "[null|subclass=Object]"
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
       },
       {
         "id": "function/962973203",
-        "mask": "[null|subclass=Object]"
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       },
       {
         "id": "function/991909617",
-        "mask": "[null|subclass=Object]"
+        "mask": "Union(null, [subclass=JSNumber], [subtype=bool])"
       }
     ],
     "function/357627841": [
       {
         "id": "function/188708191",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/188708191",
-        "mask": "null"
+        "mask": "inlined"
+      },
+      {
+        "id": "function/53371910",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/357766771": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1046014704",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/750091346",
+        "mask": null
+      },
+      {
+        "id": "function/750091346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
       }
     ],
     "function/358340511": [
       {
         "id": "function/335045122",
         "mask": "inlined"
-      }
-    ],
-    "function/364010339": [
-      {
-        "id": "function/811310425",
-        "mask": "null"
       },
       {
-        "id": "function/887884267",
-        "mask": "null"
+        "id": "function/335045122",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "inlined"
+      }
+    ],
+    "function/361871829": [
+      {
+        "id": "function/319720211",
+        "mask": null
+      },
+      {
+        "id": "function/949168228",
+        "mask": null
+      },
+      {
+        "id": "function/949168228",
+        "mask": "inlined"
       }
     ],
     "function/367762222": [
@@ -22085,15 +48440,15 @@
     "function/369614033": [
       {
         "id": "function/1060110710",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/1060110710",
-        "mask": "null"
+        "mask": "inlined"
       },
       {
         "id": "function/580865640",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/370120278": [
@@ -22105,7 +48460,11 @@
     "function/372037963": [
       {
         "id": "field/1047452024",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/540949546",
+        "mask": null
       },
       {
         "id": "function/540949546",
@@ -22113,137 +48472,1153 @@
       },
       {
         "id": "function/540949546",
-        "mask": "null"
-      }
-    ],
-    "function/381680028": [
-      {
-        "id": "field/334228980",
-        "mask": "null"
+        "mask": "inlined"
       },
       {
-        "id": "function/99501118",
-        "mask": "null"
+        "id": "function/540949546",
+        "mask": "inlined"
+      }
+    ],
+    "function/372361659": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/374894045": [
+      {
+        "id": "function/1005175086",
+        "mask": null
+      },
+      {
+        "id": "function/1005175086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/308590446",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
       }
     ],
     "function/385444888": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/707077825",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
       },
       {
         "id": "function/1058735230",
-        "mask": "[null|subclass=Object]"
+        "mask": "[null|exact=_Future]"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/210974499",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/263363184",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
       },
       {
         "id": "function/338379080",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/39412415",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/39412415",
+        "mask": null
       },
       {
         "id": "function/394885266",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/415620823",
-        "mask": "null"
+        "id": "function/394885266",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/460512542",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/492708773",
-        "mask": "null"
+        "id": "function/502696664",
+        "mask": null
       },
       {
-        "id": "function/513053773",
+        "id": "function/517290884",
+        "mask": null
+      },
+      {
+        "id": "function/517290884",
         "mask": "inlined"
       },
       {
-        "id": "function/513053773",
-        "mask": "null"
+        "id": "function/517290884",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/53371910",
+        "mask": null
       },
       {
         "id": "function/544746737",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/664449932",
-        "mask": "null"
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/593090281",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/717417998",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/754498726",
+        "mask": null
       },
       {
         "id": "function/754498726",
         "mask": "inlined"
       },
       {
-        "id": "function/754498726",
-        "mask": "null"
+        "id": "function/755054712",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/94108092",
+        "mask": null
       },
       {
         "id": "function/94108092",
         "mask": "inlined"
       },
       {
-        "id": "function/94108092",
-        "mask": "null"
+        "id": "function/956458971",
+        "mask": null
       },
       {
-        "id": "function/968358412",
-        "mask": "null"
+        "id": "function/96457955",
+        "mask": "[exact=_Future]"
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/388977016": [
       {
         "id": "function/507333070",
         "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
       }
     ],
     "function/390828239": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
         "id": "function/726344781",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/726344781",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/394885266": [
       {
-        "id": "function/418915149",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/140617653",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/395066818",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/395066818",
+        "mask": null
+      },
+      {
+        "id": "function/395066818",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/476211666",
+        "mask": "Container([exact=JSFixedArray], element: [null|subclass=Object], length: null)"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
       },
       {
         "id": "function/574550003",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/62411321",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
       },
       {
         "id": "function/96457955",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/399195151": [
       {
+        "id": "function/550544609",
+        "mask": "inlined"
+      },
+      {
         "id": "function/606513838",
         "mask": "inlined"
       }
     ],
+    "function/400204433": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/418915149",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/501313936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/501313936",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/638672010",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|exact=JSString]"
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
     "function/400990606": [
       {
         "id": "function/370295194",
@@ -22252,216 +49627,408 @@
     ],
     "function/405266426": [
       {
-        "id": "function/977867690",
-        "mask": "inlined"
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
       },
       {
         "id": "function/977867690",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/977867690",
+        "mask": "inlined"
       }
     ],
-    "function/407139250": [
+    "function/405722833": [
       {
-        "id": "function/1016194181",
-        "mask": "null"
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": "inlined"
+      }
+    ],
+    "function/407860982": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/409628970": [
+      {
+        "id": "function/1007804883",
+        "mask": null
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": null
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/208283907",
-        "mask": "null"
+        "id": "function/321900710",
+        "mask": null
       },
       {
-        "id": "function/243489700",
-        "mask": "null"
+        "id": "function/445547062",
+        "mask": null
       },
       {
-        "id": "function/271556856",
-        "mask": "null"
+        "id": "function/490035833",
+        "mask": null
       },
       {
-        "id": "function/308590446",
-        "mask": "null"
-      },
-      {
-        "id": "function/418915149",
-        "mask": "null"
-      },
-      {
-        "id": "function/458931695",
+        "id": "function/490035833",
         "mask": "inlined"
       },
       {
-        "id": "function/458931695",
-        "mask": "null"
-      },
-      {
-        "id": "function/482441661",
-        "mask": "Union([exact=JSUInt31], [subclass=JSArray])"
-      },
-      {
-        "id": "function/965257927",
+        "id": "function/490035833",
         "mask": "inlined"
       },
       {
-        "id": "function/965257927",
-        "mask": "null"
+        "id": "function/619610668",
+        "mask": null
       },
       {
-        "id": "function/979933658",
+        "id": "function/619610668",
         "mask": "inlined"
       },
       {
-        "id": "function/979933658",
-        "mask": "null"
+        "id": "function/63055866",
+        "mask": null
+      },
+      {
+        "id": "function/63055866",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/689230944",
+        "mask": null
+      },
+      {
+        "id": "function/695455779",
+        "mask": null
+      },
+      {
+        "id": "function/72073576",
+        "mask": null
       }
     ],
-    "function/415620823": [
+    "function/412727111": [
       {
-        "id": "function/968358412",
+        "id": "function/1055215220",
         "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      }
+    ],
+    "function/417411809": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/418915149": [
       {
-        "id": "field/954188953",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/1008544093",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/144469778",
-        "mask": "[null|subclass=Object]"
-      },
-      {
         "id": "function/163889622",
-        "mask": "null"
-      },
-      {
-        "id": "function/186999466",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/31139860",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/430236296",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/521874428",
-        "mask": "[null|subclass=Object]"
+        "mask": null
       },
       {
         "id": "function/714600619",
-        "mask": "null"
-      },
-      {
-        "id": "function/756812986",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/784650927",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/950782810",
-        "mask": "[null|subclass=Object]"
+        "mask": null
       }
     ],
-    "function/430236296": [
+    "function/425183906": [
       {
-        "id": "function/1027535878",
-        "mask": "[subtype=Iterator]"
-      },
-      {
-        "id": "function/1047605700",
-        "mask": "[subtype=Iterator]"
-      },
-      {
-        "id": "function/176842663",
-        "mask": "[subtype=Iterator]"
-      },
-      {
-        "id": "function/852972506",
-        "mask": "[subclass=Iterable]"
-      }
-    ],
-    "function/430480673": [
-      {
-        "id": "field/522978319",
-        "mask": "null"
-      },
-      {
-        "id": "function/210296716",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/210296716",
-        "mask": "null"
-      },
-      {
-        "id": "function/335045122",
-        "mask": "null"
-      },
-      {
-        "id": "function/358340511",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/358340511",
-        "mask": "null"
-      },
-      {
-        "id": "function/372037963",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/372037963",
-        "mask": "null"
-      },
-      {
-        "id": "function/418915149",
-        "mask": "null"
-      },
-      {
-        "id": "function/507333070",
-        "mask": "null"
-      },
-      {
-        "id": "function/540949546",
-        "mask": "null"
-      },
-      {
-        "id": "function/778541068",
-        "mask": "null"
-      },
-      {
-        "id": "function/789545114",
-        "mask": "null"
-      },
-      {
-        "id": "function/843997665",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/843997665",
-        "mask": "null"
-      },
-      {
-        "id": "function/921677904",
-        "mask": "null"
+        "id": "field/914116059",
+        "mask": null
       }
     ],
     "function/431897853": [
       {
         "id": "field/650081226",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/435575019": [
@@ -22506,10 +50073,18 @@
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/268212636",
+        "mask": "[null|subclass=Object]"
+      },
+      {
         "id": "function/285148179",
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/339189097",
+        "mask": "[null|subclass=Object]"
+      },
+      {
         "id": "function/369614033",
         "mask": "[null|subclass=Object]"
       },
@@ -22522,6 +50097,10 @@
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/425183906",
+        "mask": "[null|subclass=Object]"
+      },
+      {
         "id": "function/431897853",
         "mask": "[null|subclass=Object]"
       },
@@ -22542,6 +50121,10 @@
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/539615930",
+        "mask": "[null|subclass=Object]"
+      },
+      {
         "id": "function/550544609",
         "mask": "[null|subclass=Object]"
       },
@@ -22550,6 +50133,10 @@
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/608115318",
+        "mask": "[null|subclass=Object]"
+      },
+      {
         "id": "function/613119304",
         "mask": "[null|subclass=Object]"
       },
@@ -22558,7 +50145,11 @@
         "mask": "[null|subclass=Object]"
       },
       {
-        "id": "function/66015995",
+        "id": "function/656826361",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/658851039",
         "mask": "[null|subclass=Object]"
       },
       {
@@ -22578,6 +50169,10 @@
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/842507496",
+        "mask": "[null|subclass=Object]"
+      },
+      {
         "id": "function/848267879",
         "mask": "[null|subclass=Object]"
       },
@@ -22604,244 +50199,772 @@
     ],
     "function/436170439": [
       {
-        "id": "function/144469777",
-        "mask": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)"
+        "id": "function/476211666",
+        "mask": null
       },
       {
-        "id": "function/418915149",
-        "mask": "null"
+        "id": "function/997099929",
+        "mask": null
       }
     ],
     "function/436231120": [
       {
         "id": "field/127038922",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/127038922",
+        "mask": null
       },
       {
         "id": "field/460958077",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/436761607": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
       }
     ],
     "function/437395524": [
       {
+        "id": "function/1024143730",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/427434111",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/456567103",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/456567103",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/478486472",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/440018750": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/445547062": [
       {
         "id": "function/1033661873",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/1051093947",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/116203851",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/130041650",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/143741280",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/150705145",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/15478302",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/167405219",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/173469993",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/176570718",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/268212636",
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/285148179",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/339189097",
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/369614033",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/372037963",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/380325809",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/425183906",
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/431897853",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/436231120",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/440018750",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/464959827",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/474133145",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/539615930",
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/550544609",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/565013754",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/608115318",
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/613119304",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/636061569",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
-        "id": "function/66015995",
-        "mask": "[null|subclass=Object]"
+        "id": "function/656826361",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/658851039",
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/679532174",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/72077250",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/730595126",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/745741399",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/793410068",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/842507496",
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/848267879",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/891910474",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/93381370",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/944731702",
-        "mask": "[null|subclass=Object]"
-      },
-      {
-        "id": "function/962973203",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/991909617",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      }
+    ],
+    "function/447148542": [
+      {
+        "id": "function/46139592",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
       }
     ],
     "function/448031436": [
       {
         "id": "function/30570662",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/30570662",
-        "mask": "null"
-      },
-      {
-        "id": "function/380929608",
         "mask": "inlined"
       },
       {
         "id": "function/380929608",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/380929608",
+        "mask": "inlined"
       }
     ],
     "function/448227795": [
       {
         "id": "field/4524053",
-        "mask": "null"
-      }
-    ],
-    "function/453686242": [
-      {
-        "id": "function/418915149",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/456567103": [
       {
         "id": "function/1024143730",
         "mask": "inlined"
-      },
-      {
-        "id": "function/1024143730",
-        "mask": "null"
-      },
-      {
-        "id": "function/478486472",
-        "mask": "null"
       }
     ],
     "function/464959827": [
       {
         "id": "field/4524053",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/509005655",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/727752212",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/759319863",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/1024465827",
@@ -22853,11 +50976,7 @@
       },
       {
         "id": "function/355012434",
-        "mask": "null"
-      },
-      {
-        "id": "function/445547062",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/448227795",
@@ -22876,176 +50995,2046 @@
         "mask": "[subclass=ArgumentError]"
       }
     ],
+    "function/469917674": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/351876786",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/469962639": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
     "function/474133145": [
       {
         "id": "field/140571055",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/476211666": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/208283907",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/308590446",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/630788869",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/714600619",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/958066535",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/979933658",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/979933658",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/476860251": [
       {
-        "id": "function/791079680",
-        "mask": "null"
-      }
-    ],
-    "function/477609809": [
-      {
-        "id": "field/1025923114",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/574550003",
-        "mask": "null"
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/906797235",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/482441661": [
+    "function/479155815": [
       {
-        "id": "function/199851072",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/629344964",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/629344964",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/983353088",
+        "mask": null
       }
     ],
-    "function/483766990": [
+    "function/481740897": [
       {
-        "id": "function/551570860",
+        "id": "function/822673760",
+        "mask": null
+      },
+      {
+        "id": "function/822673760",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
         "mask": "inlined"
       }
     ],
-    "function/487598887": [
+    "function/486797615": [
       {
-        "id": "function/230858033",
-        "mask": "null"
-      }
-    ],
-    "function/491418529": [
-      {
-        "id": "function/163889622",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/679532174",
-        "mask": "null"
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/492708773": [
+    "function/489157293": [
       {
-        "id": "function/460512542",
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/893622437",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/95816591",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/95816591",
+        "mask": null
+      },
+      {
+        "id": "function/95816591",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/494259168": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1013396128",
+        "mask": null
+      },
+      {
+        "id": "function/1013396128",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": null
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/212177062",
+        "mask": null
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/308590446",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/447148542",
+        "mask": null
+      },
+      {
+        "id": "function/447148542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/46139592",
+        "mask": null
+      },
+      {
+        "id": "function/489157293",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/746055337",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/746055337",
+        "mask": null
+      },
+      {
+        "id": "function/765963979",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852359021",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852359021",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/964398244",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/495511570": [
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51389871",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51389871",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51389871",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
         "mask": "inlined"
       }
     ],
-    "function/494094492": [
+    "function/499032542": [
       {
-        "id": "field/373519716",
-        "mask": "null"
+        "id": "field/351779368",
+        "mask": null
       },
       {
-        "id": "function/144469778",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+        "id": "function/1033254962",
+        "mask": null
       },
       {
-        "id": "function/784650927",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/111998270",
+        "mask": null
+      },
+      {
+        "id": "function/111998270",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/294207503",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
       }
     ],
     "function/499330809": [
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/208283907",
-        "mask": "null"
+        "mask": null
       }
     ],
-    "function/499807915": [
+    "function/501313936": [
       {
-        "id": "function/163889622",
-        "mask": "null"
+        "id": "function/1055215220",
+        "mask": "inlined"
       },
       {
-        "id": "function/679532174",
-        "mask": "null"
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
       }
     ],
-    "function/501712645": [
+    "function/504534695": [
       {
-        "id": "field/1047452024",
-        "mask": "null"
+        "id": "function/1055215220",
+        "mask": null
       },
       {
-        "id": "function/210296716",
+        "id": "function/1055215220",
         "mask": "inlined"
       },
       {
-        "id": "function/210296716",
-        "mask": "null"
+        "id": "function/66145123",
+        "mask": null
       },
       {
-        "id": "function/230858033",
-        "mask": "null"
+        "id": "function/832692823",
+        "mask": null
       },
       {
-        "id": "function/268773900",
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/512286296": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
         "mask": "inlined"
       },
       {
-        "id": "function/268773900",
-        "mask": "null"
+        "id": "function/1055215220",
+        "mask": null
       },
       {
-        "id": "function/335045122",
-        "mask": "null"
-      },
-      {
-        "id": "function/358340511",
+        "id": "function/1055215220",
         "mask": "inlined"
       },
       {
-        "id": "function/358340511",
-        "mask": "null"
+        "id": "function/122441553",
+        "mask": null
       },
       {
-        "id": "function/372037963",
-        "mask": "null"
+        "id": "function/148486138",
+        "mask": null
       },
       {
-        "id": "function/507333070",
-        "mask": "null"
-      },
-      {
-        "id": "function/736875717",
+        "id": "function/148486138",
         "mask": "inlined"
       },
       {
-        "id": "function/736875717",
-        "mask": "null"
+        "id": "function/200890444",
+        "mask": null
+      },
+      {
+        "id": "function/200890444",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/976856253",
+        "mask": null
+      },
+      {
+        "id": "function/976856253",
+        "mask": "inlined"
       }
     ],
     "function/513053773": [
       {
+        "id": "field/42778158",
+        "mask": null
+      },
+      {
         "id": "function/492708773",
+        "mask": null
+      },
+      {
+        "id": "function/492708773",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/664449932",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      }
+    ],
+    "function/514473880": [
+      {
+        "id": "function/301930977",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/301930977",
         "mask": "inlined"
       }
     ],
     "function/519629171": [
       {
         "id": "field/786919906",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/786919906",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
       },
       {
         "id": "function/853973218",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/521874428": [
       {
         "id": "field/1047452024",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/522380745": [
+      {
+        "id": "function/1017330300",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1017330300",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      }
+    ],
+    "function/523878647": [
+      {
+        "id": "function/820169204",
+        "mask": "inlined"
       }
     ],
     "function/528985088": [
       {
         "id": "field/701889804",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/272627576",
+        "mask": null
       },
       {
         "id": "function/272627576",
@@ -23053,173 +53042,963 @@
       },
       {
         "id": "function/272627576",
-        "mask": "null"
+        "mask": "inlined"
+      }
+    ],
+    "function/535892822": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/638672010",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/638672010",
+        "mask": null
+      },
+      {
+        "id": "function/638672010",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/536333412": [
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/556772480",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556772480",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791619288",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/539615930": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/532403335",
+        "mask": null
+      },
+      {
+        "id": "function/268212636",
+        "mask": null
+      },
+      {
+        "id": "function/311482390",
+        "mask": null
       }
     ],
     "function/544746737": [
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/701409225",
-        "mask": "null"
+        "mask": null
       }
     ],
-    "function/549577701": [
+    "function/550912538": [
       {
-        "id": "function/992679489",
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/923456660",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/552658686": [
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/729126945",
         "mask": "inlined"
       }
     ],
     "function/553149607": [
       {
         "id": "field/978504898",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
       },
       {
         "id": "function/1058735230",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
       },
       {
         "id": "function/336168458",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/533906117",
+        "mask": null
       },
       {
         "id": "function/533906117",
         "mask": "inlined"
       },
       {
-        "id": "function/533906117",
-        "mask": "null"
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
       },
       {
         "id": "function/797212862",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/797212862",
+        "mask": null
       },
       {
         "id": "function/797212863",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/797212863",
+        "mask": null
       },
       {
         "id": "function/797212864",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/797212864",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/553851206": [
+    "function/556772480": [
       {
-        "id": "function/136972596",
+        "id": "function/1002613704",
         "mask": "inlined"
       },
       {
-        "id": "function/136972596",
-        "mask": "null"
-      },
-      {
-        "id": "function/292889014",
-        "mask": "null"
-      },
-      {
-        "id": "function/419713835",
+        "id": "function/1002613704",
         "mask": "inlined"
-      },
+      }
+    ],
+    "function/559097830": [
       {
-        "id": "function/419713835",
-        "mask": "null"
-      },
-      {
-        "id": "function/658082982",
-        "mask": "null"
-      },
-      {
-        "id": "function/821285776",
-        "mask": "null"
+        "id": "function/196790253",
+        "mask": null
       }
     ],
     "function/564404904": [
       {
-        "id": "field/125830184",
-        "mask": "null"
-      },
-      {
-        "id": "field/180845508",
-        "mask": "null"
-      },
-      {
         "id": "field/302220255",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/175997763",
-        "mask": "[subclass=Object]"
+        "id": "function/180845508",
+        "mask": null
       },
       {
-        "id": "function/347974666",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/564404904",
-        "mask": "[subclass=Object]"
+        "id": "function/180845508",
+        "mask": "inlined"
       },
       {
         "id": "function/712365042",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/749970393",
-        "mask": "[subclass=Object]"
+        "id": "function/753586447",
+        "mask": null
+      }
+    ],
+    "function/564449621": [
+      {
+        "id": "function/1017330300",
+        "mask": "inlined"
       },
       {
-        "id": "function/796179660",
-        "mask": "[subclass=Object]"
+        "id": "function/436761607",
+        "mask": "inlined"
+      }
+    ],
+    "function/569040700": [
+      {
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/80736041",
-        "mask": "[subclass=Object]"
+        "id": "function/103899378",
+        "mask": null
       },
       {
-        "id": "function/808159833",
-        "mask": "[subclass=Object]"
+        "id": "function/1068396938",
+        "mask": null
       },
       {
-        "id": "function/854200700",
-        "mask": "[subclass=Object]"
+        "id": "function/132742275",
+        "mask": null
       },
       {
-        "id": "function/860159722",
-        "mask": "[subclass=Object]"
+        "id": "function/160933185",
+        "mask": null
       },
       {
-        "id": "function/91425461",
-        "mask": "[subclass=Object]"
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/569040701": [
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/569040702": [
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/573775196": [
@@ -23238,50 +54017,668 @@
     ],
     "function/574550003": [
       {
-        "id": "field/786919906",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "field/978504898",
-        "mask": "null"
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
       },
       {
         "id": "function/11804710",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/22227107",
+        "mask": null
       },
       {
         "id": "function/22227107",
         "mask": "inlined"
       },
       {
-        "id": "function/22227107",
-        "mask": "null"
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/271674536",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/519629171",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
       },
       {
         "id": "function/971160936",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/575664914": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/110436482",
+        "mask": null
+      },
+      {
+        "id": "function/110436482",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/400204433",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/418915149",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": null
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|exact=JSString]"
+      },
+      {
+        "id": "function/74759397",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/74759397",
+        "mask": null
+      },
+      {
+        "id": "function/77140749",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/999221506",
+        "mask": null
+      }
+    ],
+    "function/577244034": [
+      {
+        "id": "function/96457955",
+        "mask": null
+      }
+    ],
+    "function/578373084": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/580865640": [
       {
         "id": "field/1047452024",
-        "mask": "[null|subclass=Object]"
+        "mask": null
       },
       {
         "id": "field/1047452024",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/522978319",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
       },
       {
         "id": "function/210296716",
@@ -23289,11 +54686,39 @@
       },
       {
         "id": "function/210296716",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
       },
       {
         "id": "function/335045122",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/358340511",
@@ -23301,35 +54726,91 @@
       },
       {
         "id": "function/358340511",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/372037963",
+        "mask": null
       },
       {
         "id": "function/372037963",
         "mask": "inlined"
       },
       {
-        "id": "function/372037963",
-        "mask": "null"
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/418915149",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/507333070",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/540949546",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
       },
       {
         "id": "function/778541068",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/789545114",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
       },
       {
         "id": "function/843997665",
@@ -23337,41 +54818,163 @@
       },
       {
         "id": "function/843997665",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/583427045": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
       }
     ],
     "function/585544091": [
       {
-        "id": "field/269363605",
-        "mask": "null"
+        "id": "field/206062167",
+        "mask": null
       },
       {
-        "id": "field/431266734",
-        "mask": "null"
+        "id": "field/269363605",
+        "mask": null
+      },
+      {
+        "id": "field/269363605",
+        "mask": null
       },
       {
         "id": "field/742643375",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/742643375",
+        "mask": null
       },
       {
         "id": "field/795691913",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/795691913",
+        "mask": null
       },
       {
         "id": "field/818740436",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/818740436",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
       },
       {
         "id": "field/996559228",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1015140651",
+        "mask": null
       },
       {
         "id": "function/1015140651",
         "mask": "inlined"
       },
       {
-        "id": "function/1015140651",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/481547973",
@@ -23379,37 +54982,169 @@
       },
       {
         "id": "function/481547973",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/586712659": [
       {
         "id": "field/24026359",
-        "mask": "[null|subclass=Object]"
+        "mask": null
       },
       {
         "id": "field/714493219",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/786919906",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
       },
       {
         "id": "function/11804710",
-        "mask": "inlined"
+        "mask": null
       },
       {
-        "id": "function/11804710",
-        "mask": "null"
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
       },
       {
         "id": "function/171287120",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/265638794",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/370120278",
@@ -23417,7 +55152,15 @@
       },
       {
         "id": "function/370120278",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/51167109",
@@ -23425,41 +55168,689 @@
       },
       {
         "id": "function/51167109",
-        "mask": "null"
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51167109",
+        "mask": null
+      },
+      {
+        "id": "function/51167109",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/528985088",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/68051831",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
       },
       {
         "id": "function/795411795",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/589675001": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/589677414": [
+      {
+        "id": "field/525672864",
+        "mask": null
+      }
+    ],
+    "function/592658352": [
+      {
+        "id": "function/195587727",
+        "mask": null
+      },
+      {
+        "id": "function/195587727",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/481740897",
+        "mask": null
+      }
+    ],
+    "function/593090281": [
+      {
+        "id": "field/1023319897",
+        "mask": "[subtype=Error]"
+      },
+      {
+        "id": "function/1008070289",
+        "mask": "[subtype=Error]"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/63763718",
+        "mask": "[subtype=Error]"
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/598215859": [
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/614790632",
+        "mask": null
+      },
+      {
+        "id": "function/614790632",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/620456164",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/820496795",
+        "mask": null
+      },
+      {
+        "id": "function/941664110",
+        "mask": null
+      }
+    ],
+    "function/599340356": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/71377758",
+        "mask": null
+      },
+      {
+        "id": "function/71377758",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/71377758",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/89307104",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/89307104",
+        "mask": null
+      },
+      {
+        "id": "function/89307104",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/992679489",
+        "mask": null
+      },
+      {
+        "id": "function/992679489",
+        "mask": "inlined"
       }
     ],
     "function/601638462": [
       {
         "id": "field/496557243",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/907727246",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
       },
       {
         "id": "function/162825675",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/272589495",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/754771250",
@@ -23467,197 +55858,1493 @@
       },
       {
         "id": "function/754771250",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/766396929",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
       },
       {
         "id": "function/820195095",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/607704865": [
+    "function/603464342": [
       {
-        "id": "function/299781104",
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
         "mask": "inlined"
       },
       {
-        "id": "function/299781104",
-        "mask": "null"
+        "id": "function/132742275",
+        "mask": null
       },
       {
-        "id": "function/467155193",
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/171156881",
+        "mask": null
+      },
+      {
+        "id": "function/181998699",
+        "mask": null
+      },
+      {
+        "id": "function/181998699",
         "mask": "inlined"
       },
       {
-        "id": "function/467155193",
-        "mask": "null"
+        "id": "function/194452894",
+        "mask": null
       },
       {
-        "id": "function/483766990",
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/25075263",
+        "mask": null
+      },
+      {
+        "id": "function/266572710",
+        "mask": null
+      },
+      {
+        "id": "function/266572710",
         "mask": "inlined"
       },
       {
-        "id": "function/483766990",
-        "mask": "null"
+        "id": "function/310648840",
+        "mask": null
       },
       {
-        "id": "function/551570860",
-        "mask": "null"
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/765963979",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/893622437",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/95816591",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/95816591",
+        "mask": null
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/960612858",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/603807818": [
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      }
+    ],
+    "function/608115318": [
+      {
+        "id": "field/35094111",
+        "mask": null
       }
     ],
     "function/608925525": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
         "id": "function/357240896",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/367762222",
+        "mask": null
       },
       {
         "id": "function/367762222",
         "mask": "inlined"
       },
       {
-        "id": "function/367762222",
-        "mask": "null"
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/773230206",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/609214736": [
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/744088497",
+        "mask": "inlined"
       }
     ],
     "function/611761598": [
       {
         "id": "function/473156332",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/473156332",
-        "mask": "null"
-      },
-      {
-        "id": "function/906921796",
         "mask": "inlined"
       },
       {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
         "id": "function/906921796",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/613119304": [
       {
         "id": "field/24026359",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/613322203": [
+      {
+        "id": "function/364010339",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/364010339",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/364010339",
+        "mask": "inlined"
+      }
+    ],
+    "function/616327902": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/492521940",
+        "mask": null
+      },
+      {
+        "id": "function/492521940",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/49259755",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": null
+      },
+      {
+        "id": "function/598784217",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/65470864",
+        "mask": null
+      },
+      {
+        "id": "function/65470864",
+        "mask": "inlined"
       }
     ],
     "function/618126497": [
       {
-        "id": "field/334228980",
-        "mask": "null"
+        "id": "field/206062167",
+        "mask": null
       },
       {
         "id": "field/368460625",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/1058735230",
-        "mask": "[null|subclass=Object]"
+        "id": "field/918430961",
+        "mask": null
       },
       {
-        "id": "function/336168458",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/381680028",
-        "mask": "null"
+        "id": "function/103899378",
+        "mask": null
       },
       {
-        "id": "function/560797298",
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/325386239",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/664449932",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/96457955",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/619610668": [
+      {
+        "id": "function/695455779",
         "mask": "inlined"
-      },
-      {
-        "id": "function/560797298",
-        "mask": "null"
-      },
-      {
-        "id": "function/766396929",
-        "mask": "[exact=_Completer]"
-      },
-      {
-        "id": "function/967508646",
-        "mask": "null"
-      },
-      {
-        "id": "function/99501118",
-        "mask": "[exact=_SyncCompleter]"
-      },
-      {
-        "id": "function/99501118",
-        "mask": "null"
       }
     ],
     "function/620005669": [
       {
         "id": "field/727752212",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/954188953",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/499807915",
-        "mask": "[null|subclass=Object]"
+        "id": "function/956458971",
+        "mask": null
       }
     ],
-    "function/633677177": [
+    "function/620456164": [
       {
-        "id": "function/81057679",
-        "mask": "null"
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/104513495",
+        "mask": null
+      },
+      {
+        "id": "function/104513495",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/104513495",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/110436482",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/110436482",
+        "mask": null
+      },
+      {
+        "id": "function/110436482",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/195520573",
+        "mask": null
+      },
+      {
+        "id": "function/195520573",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/245364359",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/264634420",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/264634420",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/407860982",
+        "mask": null
+      },
+      {
+        "id": "function/407860982",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/407860982",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/603464342",
+        "mask": null
+      },
+      {
+        "id": "function/620456164",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/666277254",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/74759397",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/74759397",
+        "mask": null
+      },
+      {
+        "id": "function/74759397",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/881419002",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/881419002",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/947722698",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/630788869": [
+      {
+        "id": "function/958066535",
+        "mask": "inlined"
+      }
+    ],
+    "function/631550768": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      }
+    ],
+    "function/631685979": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/422605719",
+        "mask": null
+      },
+      {
+        "id": "function/422605719",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      }
+    ],
+    "function/632397862": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": null
+      },
+      {
+        "id": "function/497781031",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/635153575": [
       {
-        "id": "field/1025923114",
-        "mask": "null"
-      },
-      {
-        "id": "field/334228980",
-        "mask": "null"
-      },
-      {
         "id": "field/368460625",
-        "mask": "[null|subclass=Object]"
+        "mask": null
+      },
+      {
+        "id": "field/918430961",
+        "mask": null
+      },
+      {
+        "id": "function/1014074245",
+        "mask": null
       },
       {
         "id": "function/1014074245",
         "mask": "inlined"
-      },
-      {
-        "id": "function/1014074245",
-        "mask": "null"
       }
     ],
     "function/636061569": [
       {
         "id": "field/345425066",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/347443343",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/627383241",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/636443477": [
@@ -23666,84 +57353,770 @@
         "mask": "inlined"
       }
     ],
-    "function/639806883": [
+    "function/637526703": [
       {
-        "id": "function/299781104",
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1017330300",
+        "mask": null
+      },
+      {
+        "id": "function/1017330300",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/637790089": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/616327902",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/968631083",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/638672010": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/640394917": [
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/362880086",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/947722698",
+        "mask": null
+      },
+      {
+        "id": "function/947722698",
         "mask": "inlined"
       }
     ],
     "function/642229693": [
       {
         "id": "field/496557243",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/102471615",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/869103502",
+        "mask": null
       }
     ],
     "function/649401243": [
       {
-        "id": "field/295541341",
-        "mask": "null"
+        "id": "field/206062167",
+        "mask": null
       },
       {
         "id": "field/410301694",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/410301694",
+        "mask": null
       },
       {
         "id": "field/435679137",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/435679137",
+        "mask": null
       },
       {
         "id": "field/459351028",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/459351028",
+        "mask": null
       },
       {
         "id": "field/60920969",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/60920969",
+        "mask": null
       },
       {
         "id": "field/839347349",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/411231605",
+        "mask": null
       },
       {
         "id": "function/411231605",
         "mask": "inlined"
       },
       {
-        "id": "function/411231605",
-        "mask": "null"
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/616072379",
+        "mask": null
       },
       {
         "id": "function/616072379",
         "mask": "inlined"
       },
       {
-        "id": "function/616072379",
-        "mask": "null"
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/650942169": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/42778158",
+        "mask": null
+      },
+      {
+        "id": "function/343621437",
+        "mask": null
       },
       {
         "id": "function/343621437",
         "mask": "inlined"
       },
       {
-        "id": "function/343621437",
-        "mask": "null"
+        "id": "function/975105635",
+        "mask": null
       },
       {
         "id": "function/975105635",
         "mask": "inlined"
-      },
-      {
-        "id": "function/975105635",
-        "mask": "null"
       }
     ],
     "function/653699436": [
@@ -23752,232 +58125,1242 @@
         "mask": "inlined"
       }
     ],
-    "function/658082982": [
+    "function/656417734": [
       {
-        "id": "function/1049802380",
+        "id": "function/481740897",
+        "mask": null
+      },
+      {
+        "id": "function/893622437",
+        "mask": null
+      },
+      {
+        "id": "function/893622437",
         "mask": "inlined"
+      }
+    ],
+    "function/658851039": [
+      {
+        "id": "field/840751619",
+        "mask": null
       },
       {
-        "id": "function/1049802380",
-        "mask": "null"
-      },
-      {
-        "id": "function/108053021",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/108053021",
-        "mask": "null"
-      },
-      {
-        "id": "function/21667157",
-        "mask": "null"
-      },
-      {
-        "id": "function/268773900",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/268773900",
-        "mask": "null"
-      },
-      {
-        "id": "function/310457557",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/310457557",
-        "mask": "null"
-      },
-      {
-        "id": "function/316732114",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/316732114",
-        "mask": "null"
-      },
-      {
-        "id": "function/689069465",
-        "mask": "null"
-      },
-      {
-        "id": "function/722993348",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/722993348",
-        "mask": "null"
-      },
-      {
-        "id": "function/736875717",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/736875717",
-        "mask": "null"
-      },
-      {
-        "id": "function/764768055",
-        "mask": "null"
+        "id": "function/355012434",
+        "mask": null
       }
     ],
     "function/658921946": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
         "id": "function/390828239",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/417406426",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/57158184",
+        "mask": null
       },
       {
         "id": "function/57158184",
         "mask": "inlined"
       },
       {
-        "id": "function/57158184",
-        "mask": "null"
+        "id": "function/578373084",
+        "mask": null
       },
       {
-        "id": "function/633677177",
-        "mask": "null"
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
       },
       {
         "id": "function/835692712",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/659844135": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/393060060",
+        "mask": null
+      },
+      {
+        "id": "function/393060060",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/478486472",
+        "mask": null
+      },
+      {
+        "id": "function/885768717",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/663282901": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/372361659",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/372361659",
+        "mask": null
+      },
+      {
+        "id": "function/460512542",
+        "mask": null
       },
       {
         "id": "function/460512542",
         "mask": "inlined"
       },
       {
-        "id": "function/460512542",
-        "mask": "null"
+        "id": "function/680877684",
+        "mask": null
       },
       {
         "id": "function/888466063",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/664449932": [
       {
-        "id": "field/485816538",
-        "mask": "null"
+        "id": "field/206062167",
+        "mask": null
       },
       {
-        "id": "field/978504898",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
       },
       {
         "id": "function/325386239",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/533906117",
-        "mask": "inlined"
+        "id": "function/331565025",
+        "mask": null
       },
       {
-        "id": "function/533906117",
-        "mask": "null"
+        "id": "function/339437005",
+        "mask": null
       },
       {
-        "id": "function/560797298",
-        "mask": "inlined"
+        "id": "function/417411809",
+        "mask": null
       },
       {
-        "id": "function/560797298",
-        "mask": "null"
+        "id": "function/502696664",
+        "mask": null
       },
       {
-        "id": "function/644221207",
-        "mask": "inlined"
+        "id": "function/520073200",
+        "mask": null
       },
       {
-        "id": "function/644221207",
-        "mask": "null"
+        "id": "function/550912538",
+        "mask": null
       },
       {
-        "id": "function/658921946",
-        "mask": "null"
+        "id": "function/578373084",
+        "mask": null
       },
       {
-        "id": "function/667149426",
-        "mask": "null"
+        "id": "function/583427045",
+        "mask": null
       },
       {
-        "id": "function/967508646",
-        "mask": "null"
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/871707959",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/665416673": [
       {
         "id": "field/192950192",
-        "mask": "[subclass=Object]"
+        "mask": null
       },
       {
         "id": "field/232791153",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/650800220",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/245651187",
+        "mask": null
       },
       {
         "id": "function/245651187",
         "mask": "inlined"
       },
       {
-        "id": "function/245651187",
-        "mask": "null"
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/315128565",
+        "mask": null
       },
       {
         "id": "function/315128565",
         "mask": "inlined"
       },
       {
-        "id": "function/315128565",
-        "mask": "null"
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
       },
       {
         "id": "function/813862273",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/897413385",
         "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/667149426": [
+    "function/666277254": [
       {
-        "id": "function/96457955",
-        "mask": "null"
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/338600142",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/457543033",
+        "mask": null
+      },
+      {
+        "id": "function/457543033",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/457543033",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/501313936",
+        "mask": null
+      },
+      {
+        "id": "function/501313936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/501313936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/620456164",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": null
+      },
+      {
+        "id": "function/781422565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/781422565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/807601340",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/667416185": [
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/301930977",
+        "mask": null
+      },
+      {
+        "id": "function/304695429",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/304695429",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/338600142",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/338600142",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/358028985",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358028985",
+        "mask": null
+      },
+      {
+        "id": "function/395359035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/395359035",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/469917674",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/514473880",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/514473880",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/753032370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/753032370",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/807601340",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/807601340",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/945625581",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
       }
     ],
     "function/668300184": [
       {
         "id": "function/253794122",
-        "mask": "null"
-      },
-      {
-        "id": "function/478486472",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/669694580": [
       {
         "id": "field/509651846",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/425007214",
@@ -23996,290 +59379,978 @@
         "mask": "[null|subclass=Object]"
       }
     ],
+    "function/671381451": [
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      }
+    ],
+    "function/675189669": [
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467920119",
+        "mask": "inlined"
+      }
+    ],
     "function/679532174": [
       {
         "id": "function/606572177",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/606572177",
-        "mask": "null"
+        "mask": "inlined"
       }
     ],
-    "function/684612786": [
+    "function/685278809": [
       {
-        "id": "function/222294695",
+        "id": "function/479155815",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
         "mask": "inlined"
       },
       {
-        "id": "function/222294695",
-        "mask": "null"
+        "id": "function/852326327",
+        "mask": null
       },
       {
-        "id": "function/478486472",
-        "mask": "null"
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
       }
     ],
-    "function/689069465": [
+    "function/689230944": [
       {
-        "id": "function/1012615396",
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
         "mask": "inlined"
       },
       {
-        "id": "function/1012615396",
-        "mask": "null"
+        "id": "function/1055215220",
+        "mask": null
       },
       {
-        "id": "function/1049802380",
+        "id": "function/1055215220",
         "mask": "inlined"
       },
       {
-        "id": "function/1049802380",
-        "mask": "null"
+        "id": "function/148486138",
+        "mask": null
       },
       {
-        "id": "function/257728434",
+        "id": "function/148486138",
         "mask": "inlined"
       },
       {
-        "id": "function/257728434",
-        "mask": "null"
+        "id": "function/467920119",
+        "mask": null
       },
       {
-        "id": "function/268773900",
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
         "mask": "inlined"
       },
       {
-        "id": "function/268773900",
-        "mask": "null"
+        "id": "function/675189669",
+        "mask": null
       },
       {
-        "id": "function/299781104",
+        "id": "function/748762392",
+        "mask": null
+      },
+      {
+        "id": "function/748762392",
         "mask": "inlined"
       },
       {
-        "id": "function/299781104",
-        "mask": "null"
+        "id": "function/885353355",
+        "mask": null
       },
       {
-        "id": "function/306374693",
-        "mask": "inlined"
+        "id": "function/916119111",
+        "mask": null
       },
       {
-        "id": "function/306374693",
-        "mask": "null"
-      },
-      {
-        "id": "function/316732114",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/316732114",
-        "mask": "null"
-      },
-      {
-        "id": "function/487598887",
-        "mask": "null"
-      },
-      {
-        "id": "function/607704865",
-        "mask": "null"
-      },
-      {
-        "id": "function/639806883",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/639806883",
-        "mask": "null"
-      },
-      {
-        "id": "function/658082982",
-        "mask": "null"
-      },
-      {
-        "id": "function/665676035",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/665676035",
-        "mask": "null"
-      },
-      {
-        "id": "function/708419578",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/708419578",
-        "mask": "null"
-      },
-      {
-        "id": "function/710092165",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/710092165",
-        "mask": "null"
-      },
-      {
-        "id": "function/734834560",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/734834560",
-        "mask": "null"
-      },
-      {
-        "id": "function/798288240",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/798288240",
-        "mask": "null"
-      },
-      {
-        "id": "function/813370328",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/813370328",
-        "mask": "null"
-      },
-      {
-        "id": "function/984452543",
-        "mask": "null"
+        "id": "function/929852730",
+        "mask": null
       }
     ],
     "function/689271731": [
       {
         "id": "field/192950192",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/269363605",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/509651846",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/742643375",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/996559228",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/701409225",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/693686431": [
       {
-        "id": "function/350634082",
+        "id": "function/94108092",
         "mask": "inlined"
       }
     ],
+    "function/695455779": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      }
+    ],
+    "function/697367085": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/697367085",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
     "function/702114504": [
       {
         "id": "field/192950192",
-        "mask": "[subclass=Object]"
+        "mask": null
+      },
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/38646490",
         "mask": "[subclass=JsLinkedHashMap]"
       },
       {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
         "id": "function/585544091",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/897413385",
         "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/705889064": [
       {
-        "id": "field/125830184",
-        "mask": "null"
-      },
-      {
-        "id": "field/180845508",
-        "mask": "null"
-      },
-      {
         "id": "field/302220255",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/180845508",
+        "mask": null
+      },
+      {
+        "id": "function/180845508",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/180845508",
+        "mask": "inlined"
+      }
+    ],
+    "function/709915292": [
+      {
+        "id": "function/729126945",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
       }
     ],
     "function/710611585": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/162872908",
-        "mask": "null"
-      },
-      {
-        "id": "function/350634082",
-        "mask": "null"
-      },
-      {
-        "id": "function/460512542",
-        "mask": "null"
+        "id": "function/693686431",
+        "mask": null
       },
       {
         "id": "function/693686431",
         "mask": "inlined"
       },
       {
-        "id": "function/693686431",
-        "mask": "null"
+        "id": "function/791758355",
+        "mask": null
       },
       {
         "id": "function/94108092",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/713151216": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
       }
     ],
     "function/714600619": [
       {
         "id": "field/954188953",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
         "id": "function/1008544093",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
-        "id": "function/144469778",
-        "mask": "[null|subclass=Object]"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/144469777",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
       },
       {
         "id": "function/186999466",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
       },
       {
         "id": "function/31139860",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/349997389",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/430236296",
-        "mask": "[null|subclass=Object]"
+        "id": "function/349997389",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/521874428",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
       },
       {
         "id": "function/606572177",
@@ -24287,71 +60358,261 @@
       },
       {
         "id": "function/606572177",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/756812986",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
       },
       {
-        "id": "function/784650927",
-        "mask": "[null|subclass=Object]"
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
       },
       {
         "id": "function/950782810",
-        "mask": "[null|subclass=Object]"
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       },
       {
         "id": "function/985926244",
-        "mask": "null"
-      }
-    ],
-    "function/717417998": [
+        "mask": null
+      },
       {
-        "id": "function/460512542",
+        "id": "function/985926244",
         "mask": "inlined"
       }
     ],
     "function/725505159": [
       {
         "id": "field/1012307238",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/123513767",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/359397062",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/55197673",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/817840529",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/906853360",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/726344781": [
       {
         "id": "function/351622741",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/726979110": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
       },
       {
         "id": "function/606572177",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/731794670": [
@@ -24360,86 +60621,758 @@
         "mask": "inlined"
       }
     ],
-    "function/737782244": [
-      {
-        "id": "function/203738274",
-        "mask": "null"
-      },
-      {
-        "id": "function/230858033",
-        "mask": "null"
-      },
-      {
-        "id": "function/445547062",
-        "mask": "null"
-      }
-    ],
     "function/741666293": [
       {
-        "id": "field/42778158",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
       },
       {
         "id": "function/1058735230",
         "mask": "[exact=_Future]"
       },
       {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
         "id": "function/248883787",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/248883787",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
       },
       {
         "id": "function/326542993",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/418915149",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/460512542",
-        "mask": "null"
+        "id": "function/476211666",
+        "mask": null
       },
       {
-        "id": "function/492708773",
-        "mask": "null"
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/513053773",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/744088497": [
+      {
+        "id": "function/1007804883",
         "mask": "inlined"
       },
       {
-        "id": "function/513053773",
-        "mask": "null"
+        "id": "function/1019584284",
+        "mask": "inlined"
       },
       {
-        "id": "function/664449932",
-        "mask": "null"
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/359606692",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51389871",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517189775",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
       }
     ],
     "function/745741399": [
       {
         "id": "field/376257386",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/355012434",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/748762392": [
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
       },
       {
-        "id": "function/445547062",
-        "mask": "null"
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
       }
     ],
     "function/749970393": [
       {
         "id": "function/712365042",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/750091346": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
       }
     ],
     "function/752981084": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
         "id": "function/830798781",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/753558090": [
+      {
+        "id": "field/42778158",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/18599313",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/432258434",
+        "mask": null
+      },
+      {
+        "id": "function/432258434",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/94108092",
+        "mask": null
+      },
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/753586447": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/175997763",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/347974666",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/564404904",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/712365042",
+        "mask": null
+      },
+      {
+        "id": "function/749970393",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/796179660",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/80736041",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/808159833",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/854200700",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/860159722",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/878987098",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91425461",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/754498726": [
@@ -24448,7 +61381,7 @@
         "mask": "inlined"
       },
       {
-        "id": "function/415620823",
+        "id": "function/460512542",
         "mask": "inlined"
       },
       {
@@ -24460,54 +61393,190 @@
         "mask": "inlined"
       }
     ],
+    "function/755054712": [
+      {
+        "id": "field/707077825",
+        "mask": null
+      }
+    ],
     "function/756812986": [
       {
         "id": "field/818740436",
-        "mask": "null"
+        "mask": null
       }
     ],
-    "function/764768055": [
+    "function/764092534": [
       {
-        "id": "function/310457557",
+        "id": "function/438117901",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
         "mask": "inlined"
       },
       {
-        "id": "function/310457557",
-        "mask": "null"
+        "id": "function/438117901",
+        "mask": "inlined"
       },
       {
-        "id": "function/478486472",
-        "mask": "null"
+        "id": "function/702246006",
+        "mask": null
       },
       {
-        "id": "function/689069465",
-        "mask": "null"
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      }
+    ],
+    "function/765963979": [
+      {
+        "id": "field/511786572",
+        "mask": null
+      },
+      {
+        "id": "field/511786572",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1036730465",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/426435180",
+        "mask": null
+      },
+      {
+        "id": "function/426435180",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/710793957",
+        "mask": null
+      },
+      {
+        "id": "function/710793957",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/747174278",
+        "mask": null
+      },
+      {
+        "id": "function/806059380",
+        "mask": null
+      },
+      {
+        "id": "function/806059380",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
       }
     ],
     "function/766396929": [
       {
         "id": "field/1025923114",
-        "mask": "null"
-      },
-      {
-        "id": "field/42778158",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/978504898",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
       },
       {
         "id": "function/1065856678",
-        "mask": "[subclass=_Completer]"
+        "mask": null
+      },
+      {
+        "id": "function/1065856678",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/263363184",
+        "mask": null
       },
       {
         "id": "function/271556856",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
       },
       {
         "id": "function/338379080",
@@ -24515,59 +61584,139 @@
       },
       {
         "id": "function/338379080",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/415620823",
-        "mask": "inlined"
+        "id": "function/339437005",
+        "mask": null
       },
       {
-        "id": "function/415620823",
-        "mask": "null"
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/460512542",
+        "mask": null
       },
       {
         "id": "function/460512542",
         "mask": "inlined"
       },
       {
-        "id": "function/460512542",
-        "mask": "null"
+        "id": "function/502696664",
+        "mask": null
       },
       {
-        "id": "function/477609809",
-        "mask": "[subclass=_Completer]"
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/53371910",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/593090281",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/823929753",
+        "mask": null
       },
       {
         "id": "function/823929753",
         "mask": "inlined"
       },
       {
-        "id": "function/823929753",
-        "mask": "null"
+        "id": "function/83342486",
+        "mask": null
       },
       {
-        "id": "function/968358412",
-        "mask": "null"
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/772250195": [
       {
         "id": "field/244162491",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/179653294",
+        "mask": null
       },
       {
         "id": "function/179653294",
         "mask": "inlined"
       },
       {
-        "id": "function/179653294",
-        "mask": "null"
-      },
-      {
         "id": "function/98156511",
         "mask": "[null|subclass=_LinkedHashSet]"
       }
@@ -24575,7 +61724,7 @@
     "function/778541068": [
       {
         "id": "field/522978319",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/779765691": [
@@ -24584,36 +61733,36 @@
         "mask": "inlined"
       }
     ],
-    "function/784650927": [
+    "function/781422565": [
       {
-        "id": "field/373519716",
-        "mask": "null"
+        "id": "function/194452894",
+        "mask": "inlined"
       },
       {
-        "id": "field/850921879",
-        "mask": "null"
+        "id": "function/194452894",
+        "mask": "inlined"
       },
       {
-        "id": "function/144469778",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+        "id": "function/194452894",
+        "mask": "inlined"
       },
       {
-        "id": "function/784650927",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+        "id": "function/194452894",
+        "mask": "inlined"
       }
     ],
     "function/788412943": [
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/681643547",
+        "mask": null
       },
       {
         "id": "function/681643547",
         "mask": "inlined"
-      },
-      {
-        "id": "function/681643547",
-        "mask": "null"
       }
     ],
     "function/789545114": [
@@ -24622,134 +61771,896 @@
         "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
       },
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
         "id": "function/176842663",
         "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
       },
       {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
         "id": "function/388977016",
         "mask": "inlined"
       },
       {
         "id": "function/388977016",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/388977016",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/388977016",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/388977016",
+        "mask": "inlined"
       },
       {
         "id": "function/405266426",
         "mask": "Union([subclass=JSArray], [subclass=_LinkedHashSet])"
       },
       {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/507333070",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/773528822",
+        "mask": null
       },
       {
         "id": "function/773528822",
         "mask": "inlined"
       },
       {
-        "id": "function/773528822",
-        "mask": "null"
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
       },
       {
         "id": "function/834909172",
         "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
       },
       {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
         "id": "function/950708086",
         "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
       },
       {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
         "id": "function/99251871",
         "mask": "Union([subclass=JSArray], [subclass=_LinkedHashSet])"
       }
     ],
-    "function/791079680": [
+    "function/791619288": [
       {
-        "id": "field/125830184",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/195587727",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/195587727",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/301370282",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/57613304",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57613304",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/629344964",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/629344964",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/689230944",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": null
+      },
+      {
+        "id": "function/747795707",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/866251913",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/791758355": [
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/765963979",
+        "mask": null
+      },
+      {
+        "id": "function/890489632",
+        "mask": null
+      },
+      {
+        "id": "function/890489632",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
       }
     ],
     "function/793410068": [
       {
         "id": "field/346735010",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/773528822",
+        "mask": null
       },
       {
         "id": "function/773528822",
         "mask": "inlined"
       },
       {
-        "id": "function/773528822",
-        "mask": "null"
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/795411795": [
       {
         "id": "field/187449514",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/24026359",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/304825305",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/343514633",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/485816538",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1030881401",
+        "mask": null
       },
       {
         "id": "function/1030881401",
         "mask": "inlined"
       },
       {
-        "id": "function/1030881401",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055095230",
+        "mask": null
       },
       {
         "id": "function/1055095230",
         "mask": "inlined"
       },
       {
-        "id": "function/1055095230",
-        "mask": "null"
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/373761717",
+        "mask": null
       },
       {
         "id": "function/373761717",
         "mask": "inlined"
       },
       {
-        "id": "function/373761717",
-        "mask": "null"
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
       },
       {
         "id": "function/968241519",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/796179660": [
       {
         "id": "function/712365042",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/797212862": [
       {
-        "id": "field/978504898",
-        "mask": "null"
+        "id": "field/206062167",
+        "mask": null
       },
       {
-        "id": "function/15925204",
-        "mask": "null"
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/265638794",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/528985088",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/574550003",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
       },
       {
         "id": "function/599927967",
@@ -24757,189 +62668,563 @@
       },
       {
         "id": "function/599927967",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/96457955",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/797212863": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
         "id": "function/574550003",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/797212864": [
       {
         "id": "function/574550003",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/801619570": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1017330300",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1041854750",
+        "mask": null
+      },
+      {
+        "id": "function/104513495",
+        "mask": null
+      },
+      {
+        "id": "function/104513495",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/253560656",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/253560656",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/564449621",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/564449621",
+        "mask": null
+      },
+      {
+        "id": "function/631685979",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": null
+      }
+    ],
+    "function/807434881": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/5571021",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/808159833": [
       {
         "id": "function/749970393",
-        "mask": "null"
-      }
-    ],
-    "function/811310425": [
-      {
-        "id": "function/1033661873",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/1051093947",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/116203851",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/130041650",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/143741280",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/150705145",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/15478302",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/163889622",
-        "mask": "null"
-      },
-      {
-        "id": "function/167405219",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/173469993",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/176570718",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/285148179",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/369614033",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/372037963",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/380325809",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/412886703",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/412886703",
-        "mask": "null"
-      },
-      {
-        "id": "function/431897853",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/436231120",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/440018750",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/464959827",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/474133145",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/550544609",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/565013754",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/613119304",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/636061569",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/66015995",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/72077250",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/730595126",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/745741399",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/793410068",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/848267879",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/891910474",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/93381370",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/944731702",
-        "mask": "[subclass=Object]"
-      },
-      {
-        "id": "function/968358412",
-        "mask": "inlined"
-      },
-      {
-        "id": "function/968358412",
-        "mask": "null"
-      },
-      {
-        "id": "function/991909617",
-        "mask": "[subclass=Object]"
+        "mask": null
       }
     ],
     "function/813862273": [
       {
         "id": "field/192950192",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/202484522",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/175997763",
@@ -24951,7 +63236,7 @@
       },
       {
         "id": "function/370295194",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/564404904",
@@ -24959,15 +63244,15 @@
       },
       {
         "id": "function/636443477",
-        "mask": "inlined"
+        "mask": null
       },
       {
         "id": "function/636443477",
-        "mask": "null"
+        "mask": "inlined"
       },
       {
         "id": "function/669694580",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/749970393",
@@ -25009,39 +63294,115 @@
     "function/820195095": [
       {
         "id": "field/192950192",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/202484522",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/202484522",
+        "mask": null
+      },
+      {
+        "id": "field/206062167",
+        "mask": null
       },
       {
         "id": "field/232791153",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/232791153",
+        "mask": null
       },
       {
         "id": "field/650800220",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/650800220",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
       },
       {
         "id": "function/175997763",
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/245651187",
+        "mask": null
+      },
+      {
         "id": "function/245651187",
         "mask": "inlined"
       },
       {
-        "id": "function/245651187",
-        "mask": "null"
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/315128565",
+        "mask": null
       },
       {
         "id": "function/315128565",
         "mask": "inlined"
       },
       {
-        "id": "function/315128565",
-        "mask": "null"
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/347974666",
@@ -25049,7 +63410,7 @@
       },
       {
         "id": "function/370295194",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/38646490",
@@ -25061,33 +63422,85 @@
       },
       {
         "id": "function/400990606",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/538046",
         "mask": "[subclass=JsLinkedHashMap]"
       },
       {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
         "id": "function/564404904",
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
         "id": "function/585544091",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/669694580",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/702114504",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/749970393",
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
         "id": "function/796179660",
         "mask": "[null|subclass=Object]"
       },
@@ -25100,6 +63513,10 @@
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
         "id": "function/854200700",
         "mask": "[null|subclass=Object]"
       },
@@ -25108,6 +63525,14 @@
         "mask": "[null|subclass=Object]"
       },
       {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
         "id": "function/878987098",
         "mask": "[null|subclass=Object]"
       },
@@ -25116,244 +63541,2426 @@
         "mask": "[subclass=JsLinkedHashMap]"
       },
       {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
         "id": "function/91425461",
         "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/820496795": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/820496795",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      }
+    ],
+    "function/821928955": [
+      {
+        "id": "function/1013396128",
+        "mask": null
+      },
+      {
+        "id": "function/1013396128",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/266327677",
+        "mask": null
+      },
+      {
+        "id": "function/266327677",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/266327677",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/830798781": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/831592736": [
+      {
+        "id": "function/1002613704",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1002613704",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1002613704",
+        "mask": "inlined"
       }
     ],
     "function/831655802": [
       {
         "id": "field/221913650",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/29748263",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/607252",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/639289778",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/639289778",
+        "mask": null
       },
       {
         "id": "field/952591811",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/834015338": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/639918601",
+        "mask": null
+      },
+      {
+        "id": "field/639918601",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490424967",
+        "mask": null
+      },
+      {
+        "id": "function/490424967",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/491504779",
+        "mask": null
+      },
+      {
+        "id": "function/491504779",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/801619570",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
       }
     ],
     "function/834909172": [
       {
         "id": "field/646361925",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/835692712": [
       {
         "id": "field/221913650",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/639289778",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/931441116",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/932611099",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/952591811",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/952591811",
+        "mask": null
+      },
+      {
+        "id": "function/546320785",
+        "mask": null
       },
       {
         "id": "function/546320785",
         "mask": "inlined"
       },
       {
-        "id": "function/546320785",
-        "mask": "null"
-      },
-      {
-        "id": "function/82702408",
-        "mask": "null"
+        "id": "function/895978326",
+        "mask": null
       },
       {
         "id": "function/895978326",
         "mask": "inlined"
-      },
+      }
+    ],
+    "function/842507496": [
       {
-        "id": "function/895978326",
-        "mask": "null"
+        "id": "field/994897322",
+        "mask": null
       }
     ],
     "function/848267879": [
       {
         "id": "field/653339731",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/848873059": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
       }
     ],
     "function/852141617": [
       {
-        "id": "field/334228980",
-        "mask": "null"
-      },
-      {
         "id": "field/368460625",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/248499885",
-        "mask": "null"
+        "id": "field/918430961",
+        "mask": null
       },
       {
-        "id": "function/336168458",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/766396929",
-        "mask": "null"
-      }
-    ],
-    "function/852972506": [
-      {
-        "id": "function/581270226",
-        "mask": "inlined"
+        "id": "function/103899378",
+        "mask": null
       },
       {
-        "id": "function/581270226",
-        "mask": "null"
+        "id": "function/1068396938",
+        "mask": null
       },
       {
-        "id": "function/784650927",
-        "mask": "null"
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/263363184",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/574550003",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/593090281",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/853169304": [
       {
         "id": "function/271674536",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/853973218": [
       {
         "id": "field/1055298109",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/1055298109",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/860159722": [
       {
         "id": "function/749970393",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/864228238": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/864812824": [
+      {
+        "id": "field/351779368",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": null
+      },
+      {
+        "id": "function/1033254962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148486138",
+        "mask": null
+      },
+      {
+        "id": "function/148486138",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/337498518",
+        "mask": null
+      },
+      {
+        "id": "function/436761607",
+        "mask": null
+      },
+      {
+        "id": "function/552658686",
+        "mask": null
+      },
+      {
+        "id": "function/552658686",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/631685979",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": null
+      },
+      {
+        "id": "function/671381451",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/729126945",
+        "mask": null
+      },
+      {
+        "id": "function/916119111",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      }
+    ],
+    "function/864835321": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/865184799": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": null
+      },
+      {
+        "id": "function/362880086",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/923456660",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/869103502": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/208283907",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/231618349",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/308590446",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/950377748",
+        "mask": null
+      },
+      {
+        "id": "function/952130975",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/952130975",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/871707959": [
+      {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "field/485816538",
+        "mask": null
+      },
+      {
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/533906117",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/533906117",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/577244034",
+        "mask": null
+      },
+      {
+        "id": "function/577244034",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": null
+      },
+      {
+        "id": "function/658921946",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/873863767": [
       {
-        "id": "function/204916897",
-        "mask": "null"
-      },
+        "id": "function/599340356",
+        "mask": null
+      }
+    ],
+    "function/881419002": [
       {
-        "id": "function/312768442",
-        "mask": "[exact=JSString]"
-      },
-      {
-        "id": "function/501712645",
-        "mask": "null"
-      },
-      {
-        "id": "function/508874693",
-        "mask": "null"
-      },
-      {
-        "id": "function/549577701",
+        "id": "function/589675001",
         "mask": "inlined"
       },
       {
-        "id": "function/549577701",
-        "mask": "null"
+        "id": "function/944782426",
+        "mask": "inlined"
+      }
+    ],
+    "function/885556629": [
+      {
+        "id": "function/163889622",
+        "mask": null
       },
       {
-        "id": "function/555987509",
-        "mask": "null"
+        "id": "function/167405219",
+        "mask": "[null|subtype=StackTrace]"
       },
       {
-        "id": "function/751200407",
-        "mask": "null"
+        "id": "function/412886703",
+        "mask": null
       },
       {
-        "id": "function/821285776",
-        "mask": "null"
-      },
-      {
-        "id": "function/890739228",
+        "id": "function/412886703",
         "mask": "inlined"
       },
       {
-        "id": "function/890739228",
-        "mask": "null"
+        "id": "function/436231120",
+        "mask": "[null|subtype=StackTrace]"
       },
       {
-        "id": "function/992679489",
-        "mask": "null"
+        "id": "function/656826361",
+        "mask": "[null|subtype=StackTrace]"
+      },
+      {
+        "id": "function/962973203",
+        "mask": "[null|subtype=StackTrace]"
       }
     ],
     "function/887884267": [
       {
         "id": "field/221913650",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/221913650",
+        "mask": null
       },
       {
         "id": "field/29748263",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/29748263",
+        "mask": null
       },
       {
         "id": "field/639289778",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/639289778",
+        "mask": null
       },
       {
         "id": "field/952591811",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/952591811",
+        "mask": null
       },
       {
         "id": "function/835692712",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/895978326",
+        "mask": null
       },
       {
         "id": "function/895978326",
         "mask": "inlined"
-      },
-      {
-        "id": "function/895978326",
-        "mask": "null"
       }
     ],
-    "function/890739228": [
+    "function/888466063": [
       {
-        "id": "function/508874693",
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/890489632": [
+      {
+        "id": "function/702246006",
         "mask": "inlined"
       },
       {
-        "id": "function/751200407",
+        "id": "function/702246006",
         "mask": "inlined"
       }
     ],
     "function/891910474": [
       {
         "id": "function/987508329",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/892227919": [
+      {
+        "id": "function/890489632",
+        "mask": "inlined"
+      }
+    ],
+    "function/896138477": [
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/986643735",
+        "mask": "inlined"
       }
     ],
     "function/899124813": [
       {
-        "id": "function/163889622",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/791079680",
-        "mask": "null"
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589677414",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
       },
       {
         "id": "function/841192189",
@@ -25361,39 +65968,217 @@
       },
       {
         "id": "function/841192189",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/906797235",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/899674954": [
       {
         "id": "function/352514166",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/906797235": [
       {
         "id": "field/302220255",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/907920634": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/259223906",
+        "mask": null
+      },
+      {
         "id": "function/259223906",
         "mask": "inlined"
       },
       {
-        "id": "function/259223906",
-        "mask": "null"
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/911398026": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
       }
     ],
     "function/920500080": [
       {
         "id": "field/914365883",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/425007214",
@@ -25412,138 +66197,164 @@
         "mask": "[null|subclass=Object]"
       }
     ],
-    "function/921486255": [
+    "function/922651191": [
       {
-        "id": "function/116583875",
-        "mask": "null"
-      },
-      {
-        "id": "function/271854590",
-        "mask": "null"
-      },
-      {
-        "id": "function/330018012",
-        "mask": "null"
-      },
-      {
-        "id": "function/357627841",
-        "mask": "null"
-      },
-      {
-        "id": "function/399195151",
+        "id": "function/490035833",
         "mask": "inlined"
       },
       {
-        "id": "function/399195151",
-        "mask": "null"
+        "id": "function/490035833",
+        "mask": "inlined"
       },
       {
-        "id": "function/53631526",
-        "mask": "null"
-      },
-      {
-        "id": "function/606513838",
-        "mask": "null"
-      },
-      {
-        "id": "function/635153575",
-        "mask": "null"
-      },
-      {
-        "id": "function/663282901",
-        "mask": "null"
-      },
-      {
-        "id": "function/710611585",
-        "mask": "null"
-      },
-      {
-        "id": "function/772250195",
-        "mask": "null"
-      },
-      {
-        "id": "function/864228238",
-        "mask": "null"
-      }
-    ],
-    "function/921677904": [
-      {
-        "id": "function/1027535878",
-        "mask": "[subtype=Iterator]"
-      },
-      {
-        "id": "function/1047605700",
-        "mask": "[subtype=Iterator]"
-      },
-      {
-        "id": "function/176842663",
-        "mask": "[subtype=Iterator]"
-      },
-      {
-        "id": "function/418915149",
-        "mask": "null"
-      },
-      {
-        "id": "function/445547062",
-        "mask": "null"
-      },
-      {
-        "id": "function/80270395",
-        "mask": "[subtype=Iterator]"
-      },
-      {
-        "id": "function/834909172",
-        "mask": "[subtype=Iterator]"
-      },
-      {
-        "id": "function/852972506",
-        "mask": "[subclass=Iterable]"
-      },
-      {
-        "id": "function/950708086",
-        "mask": "[subtype=Iterator]"
+        "id": "function/495511570",
+        "mask": "inlined"
       }
     ],
     "function/922840913": [
       {
         "id": "field/386221903",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "field/435101137",
-        "mask": "null"
+        "id": "field/386221903",
+        "mask": null
       },
       {
-        "id": "field/709451133",
-        "mask": "null"
+        "id": "field/588058281",
+        "mask": null
       },
       {
-        "id": "function/221934998",
-        "mask": "[null|subclass=Object]"
+        "id": "field/588058281",
+        "mask": null
       },
       {
-        "id": "function/292195356",
-        "mask": "null"
+        "id": "field/636292115",
+        "mask": null
+      },
+      {
+        "id": "field/636292115",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/293305096",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/293305096",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/724475372",
-        "mask": "inlined"
+        "id": "function/502696664",
+        "mask": null
       },
       {
-        "id": "function/724475372",
-        "mask": "null"
+        "id": "function/520073200",
+        "mask": null
       },
       {
-        "id": "function/726979110",
-        "mask": "[null|subclass=Object]"
+        "id": "function/550912538",
+        "mask": null
       },
       {
-        "id": "function/738104072",
-        "mask": "[null|subclass=Object]"
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/659844135",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/762030080",
@@ -25551,193 +66362,2371 @@
       },
       {
         "id": "function/762030080",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
       },
       {
         "id": "function/899124813",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/923456660": [
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/319720211",
+        "mask": null
+      },
+      {
+        "id": "function/575664914",
+        "mask": null
+      },
+      {
+        "id": "function/941664110",
+        "mask": null
+      },
+      {
+        "id": "function/949168228",
+        "mask": null
+      }
+    ],
+    "function/924450127": [
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/885556629",
+        "mask": null
+      },
+      {
+        "id": "function/885556629",
+        "mask": null
+      },
+      {
+        "id": "function/887884267",
+        "mask": null
+      }
+    ],
+    "function/929852730": [
+      {
+        "id": "field/239805186",
+        "mask": null
+      },
+      {
+        "id": "field/787049592",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/797484809",
+        "mask": null
+      },
+      {
+        "id": "function/797484809",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/864971496",
+        "mask": null
+      },
+      {
+        "id": "function/864971496",
+        "mask": "inlined"
+      }
+    ],
+    "function/935592878": [
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/304695429",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358028985",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/395359035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/438117901",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/438117901",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/495511570",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/514473880",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/629344964",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/941664110": [
+      {
+        "id": "function/1002613704",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/504534695",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/556772480",
+        "mask": null
+      },
+      {
+        "id": "function/556772480",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/697367085",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/942227822": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
         "id": "function/225159691",
         "mask": "inlined"
       },
       {
         "id": "function/225159691",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/638664464",
+        "mask": null
       },
       {
         "id": "function/638664464",
         "mask": "inlined"
       },
       {
-        "id": "function/638664464",
-        "mask": "null"
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/944731702": [
       {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
         "id": "function/873863767",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/993180100",
+        "mask": null
       },
       {
         "id": "function/993180100",
         "mask": "inlined"
+      }
+    ],
+    "function/944782426": [
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
       },
       {
-        "id": "function/993180100",
-        "mask": "null"
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/832692823",
+        "mask": "inlined"
+      }
+    ],
+    "function/945625581": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/332074411",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/332074411",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/351876786",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/764092534",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/873774381",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/873774381",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/947198569": [
       {
         "id": "function/271674536",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/947722698": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
       }
     ],
     "function/950708086": [
       {
         "id": "field/504170901",
-        "mask": "null"
+        "mask": null
       }
     ],
-    "function/967508646": [
+    "function/950782810": [
       {
-        "id": "function/1049802380",
+        "id": "field/499560688",
+        "mask": null
+      },
+      {
+        "id": "field/818740436",
+        "mask": null
+      }
+    ],
+    "function/952130975": [
+      {
+        "id": "function/231618349",
+        "mask": "inlined"
+      }
+    ],
+    "function/956458971": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
         "mask": "inlined"
       },
       {
-        "id": "function/1049802380",
-        "mask": "null"
+        "id": "function/832692823",
+        "mask": null
       },
       {
-        "id": "function/555987509",
-        "mask": "null"
+        "id": "function/83342486",
+        "mask": null
       },
       {
-        "id": "function/607704865",
-        "mask": "null"
-      },
-      {
-        "id": "function/708419578",
+        "id": "function/83342486",
         "mask": "inlined"
       },
       {
-        "id": "function/708419578",
-        "mask": "null"
+        "id": "function/83342486",
+        "mask": null
       },
       {
-        "id": "function/821285776",
-        "mask": "null"
+        "id": "function/864835321",
+        "mask": null
       },
       {
-        "id": "function/984452543",
-        "mask": "null"
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/959492039": [
+      {
+        "id": "field/146902950",
+        "mask": null
+      },
+      {
+        "id": "field/169031325",
+        "mask": null
+      },
+      {
+        "id": "field/189240247",
+        "mask": null
+      },
+      {
+        "id": "field/337959975",
+        "mask": null
+      },
+      {
+        "id": "field/366629653",
+        "mask": null
+      },
+      {
+        "id": "field/368849633",
+        "mask": null
+      },
+      {
+        "id": "field/381082880",
+        "mask": null
+      },
+      {
+        "id": "field/645317327",
+        "mask": null
+      },
+      {
+        "id": "field/646744185",
+        "mask": null
+      },
+      {
+        "id": "field/79943715",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/131257513",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/148863126",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148863126",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/148863126",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/336352070",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/430193009",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/430193009",
+        "mask": null
+      },
+      {
+        "id": "function/445547062",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632290992",
+        "mask": null
+      },
+      {
+        "id": "function/632290992",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/632290992",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/64968119",
+        "mask": null
+      },
+      {
+        "id": "function/64968119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/725505159",
+        "mask": null
+      },
+      {
+        "id": "function/752981084",
+        "mask": null
+      },
+      {
+        "id": "function/756575134",
+        "mask": null
+      },
+      {
+        "id": "function/756575134",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/885768717",
+        "mask": null
+      },
+      {
+        "id": "function/885768717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/960612858": [
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      }
+    ],
+    "function/964398244": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
       }
     ],
     "function/968241519": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
       },
       {
         "id": "function/160969748",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
-    "function/984452543": [
+    "function/968631083": [
       {
-        "id": "function/268773900",
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
+        "mask": null
+      },
+      {
+        "id": "function/1070901287",
         "mask": "inlined"
       },
       {
-        "id": "function/268773900",
-        "mask": "null"
+        "id": "function/132742275",
+        "mask": null
       },
       {
-        "id": "function/689069465",
-        "mask": "null"
+        "id": "function/160933185",
+        "mask": null
       },
       {
-        "id": "function/736875717",
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
+        "mask": null
+      },
+      {
+        "id": "function/412727111",
         "mask": "inlined"
       },
       {
-        "id": "function/736875717",
-        "mask": "null"
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/968631083",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
       }
     ],
-    "function/985926244": [
+    "function/971160936": [
       {
-        "id": "field/954188953",
-        "mask": "[null|subclass=Object]"
+        "id": "field/786919906",
+        "mask": null
       },
       {
-        "id": "function/1008544093",
-        "mask": "[null|subclass=Object]"
+        "id": "field/978504898",
+        "mask": null
       },
       {
-        "id": "function/144469778",
-        "mask": "[null|subclass=Object]"
+        "id": "field/978504898",
+        "mask": null
       },
       {
-        "id": "function/186999466",
-        "mask": "[null|subclass=Object]"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/31139860",
-        "mask": "[null|subclass=Object]"
+        "id": "function/103899378",
+        "mask": null
       },
       {
-        "id": "function/430236296",
-        "mask": "[null|subclass=Object]"
+        "id": "function/1068396938",
+        "mask": null
       },
       {
-        "id": "function/521874428",
-        "mask": "[null|subclass=Object]"
+        "id": "function/132742275",
+        "mask": null
       },
       {
-        "id": "function/756812986",
-        "mask": "[null|subclass=Object]"
+        "id": "function/160933185",
+        "mask": null
       },
       {
-        "id": "function/784650927",
-        "mask": "[null|subclass=Object]"
+        "id": "function/167217604",
+        "mask": null
       },
       {
-        "id": "function/950782810",
-        "mask": "[null|subclass=Object]"
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/973238019": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/123297685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/123297685",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/976856253": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
+      }
+    ],
+    "function/977037784": [
+      {
+        "id": "function/1041854750",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      }
+    ],
+    "function/979933658": [
+      {
+        "id": "function/630788869",
+        "mask": "inlined"
+      }
+    ],
+    "function/982751380": [
+      {
+        "id": "function/301370282",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": null
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702246006",
+        "mask": "inlined"
+      }
+    ],
+    "function/983353088": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/523754696",
+        "mask": null
+      },
+      {
+        "id": "field/928850752",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167405219",
+        "mask": null
+      },
+      {
+        "id": "function/194452894",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": null
+      },
+      {
+        "id": "function/25816218",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/405722833",
+        "mask": null
+      },
+      {
+        "id": "function/405722833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": null
+      },
+      {
+        "id": "function/72073576",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": null
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/852326327",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/91691962",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": null
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/964398244",
+        "mask": "inlined"
       }
     ],
     "function/987508329": [
       {
         "id": "field/1047452024",
-        "mask": "[null|subclass=Object]"
+        "mask": null
       },
       {
         "id": "field/1047452024",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/522978319",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
       },
       {
         "id": "function/139456351",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/139456351",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/210296716",
+        "mask": null
       },
       {
         "id": "function/210296716",
         "mask": "inlined"
       },
       {
-        "id": "function/210296716",
-        "mask": "null"
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
       },
       {
         "id": "function/335045122",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
       },
       {
         "id": "function/358340511",
@@ -25745,123 +68734,513 @@
       },
       {
         "id": "function/358340511",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/372037963",
+        "mask": null
       },
       {
         "id": "function/372037963",
         "mask": "inlined"
       },
       {
-        "id": "function/372037963",
-        "mask": "null"
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/418915149",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
       },
       {
         "id": "function/507333070",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
       },
       {
         "id": "function/540949546",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
       },
       {
         "id": "function/689271731",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
       },
       {
         "id": "function/778541068",
-        "mask": "null"
-      }
-    ],
-    "function/990521259": [
-      {
-        "id": "field/373519716",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/150523169",
-        "mask": "null"
+        "id": "function/791758355",
+        "mask": null
       },
       {
-        "id": "function/163889622",
-        "mask": "null"
+        "id": "function/83342486",
+        "mask": null
       },
       {
-        "id": "function/453686242",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+        "id": "function/864835321",
+        "mask": null
       },
       {
-        "id": "function/491418529",
-        "mask": "null"
+        "id": "function/865184799",
+        "mask": null
       },
       {
-        "id": "function/494094492",
-        "mask": "null"
+        "id": "function/869103502",
+        "mask": null
       },
       {
-        "id": "function/985926244",
-        "mask": "null"
+        "id": "function/911398026",
+        "mask": null
       },
       {
-        "id": "function/990521259",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/997099929": [
       {
+        "id": "function/1024143730",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
         "id": "function/653699436",
+        "mask": null
+      },
+      {
+        "id": "function/653699436",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/680877684",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/885768717",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/999221506": [
+      {
+        "id": "function/745680035",
+        "mask": null
+      },
+      {
+        "id": "function/745680035",
         "mask": "inlined"
       }
     ],
     "function/1002752870": [
       {
+        "id": "field/206062167",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/30570662",
+        "mask": null
+      },
+      {
         "id": "function/30570662",
         "mask": "inlined"
       },
       {
-        "id": "function/30570662",
-        "mask": "null"
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/649401243",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/702510",
+        "mask": null
       },
       {
         "id": "function/702510",
         "mask": "inlined"
       },
       {
-        "id": "function/702510",
-        "mask": "null"
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/1008544093": [
       {
         "id": "field/818740436",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/731794670",
+        "mask": null
       },
       {
         "id": "function/731794670",
         "mask": "inlined"
       },
       {
-        "id": "function/731794670",
-        "mask": "null"
-      },
-      {
         "id": "function/739160294",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/950782810",
+        "mask": null
       },
       {
         "id": "function/950782810",
         "mask": "inlined"
+      }
+    ],
+    "function/1010766199": [
+      {
+        "id": "function/122441553",
+        "mask": "inlined"
       },
       {
-        "id": "function/950782810",
-        "mask": "null"
+        "id": "function/436761607",
+        "mask": "inlined"
       }
     ],
     "function/1014821943": [
@@ -25870,108 +69249,1260 @@
         "mask": "inlined"
       }
     ],
-    "function/1016194181": [
-      {
-        "id": "field/373519716",
-        "mask": "null"
-      },
-      {
-        "id": "field/850921879",
-        "mask": "null"
-      },
-      {
-        "id": "function/144469778",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
-      },
-      {
-        "id": "function/163889622",
-        "mask": "null"
-      },
-      {
-        "id": "function/418915149",
-        "mask": "null"
-      },
-      {
-        "id": "function/453686242",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
-      },
-      {
-        "id": "function/701409225",
-        "mask": "null"
-      },
-      {
-        "id": "function/784650927",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
-      },
-      {
-        "id": "function/990521259",
-        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
-      }
-    ],
     "function/1024465827": [
       {
         "id": "field/111931226",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/649547880",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/445547062",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/1027535878": [
       {
         "id": "field/112618843",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/237146195",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "field/504170901",
-        "mask": "null"
+        "mask": "[exact=ArrayIterator]"
       },
       {
         "id": "field/577142640",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "field/577142640",
+        "mask": null
       },
       {
         "id": "function/163889622",
-        "mask": "null"
+        "mask": null
       },
       {
         "id": "function/544746737",
-        "mask": "null"
+        "mask": null
+      }
+    ],
+    "function/1031131035": [
+      {
+        "id": "field/786919906",
+        "mask": null
+      },
+      {
+        "id": "field/786919906",
+        "mask": null
+      },
+      {
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "field/978504898",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/1031826457": [
       {
         "id": "field/244162491",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
       },
       {
         "id": "function/275957193",
         "mask": "[null|subclass=_LinkedHashSet]"
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/1032715322": [
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/361871829",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/1033661873": [
       {
         "id": "function/987508329",
-        "mask": "null"
+        "mask": null
       }
     ],
     "function/1036675160": [
       {
         "id": "field/42778158",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
       },
       {
         "id": "function/650942169",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/1036730465": [
+      {
+        "id": "field/410674423",
+        "mask": null
+      },
+      {
+        "id": "field/430387875",
+        "mask": null
+      },
+      {
+        "id": "field/449743822",
+        "mask": null
+      },
+      {
+        "id": "field/884701761",
+        "mask": null
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": null
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1013396128",
+        "mask": null
+      },
+      {
+        "id": "function/1013396128",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": null
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/1036180926",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1050426556",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1050426556",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/1069756346",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/133009644",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": null
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/2781902",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/2781902",
+        "mask": null
+      },
+      {
+        "id": "function/301930977",
+        "mask": null
+      },
+      {
+        "id": "function/304695429",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/347168225",
+        "mask": null
+      },
+      {
+        "id": "function/347710223",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/347710223",
+        "mask": null
+      },
+      {
+        "id": "function/347710223",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/347710223",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/347710223",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/357766771",
+        "mask": null
+      },
+      {
+        "id": "function/358028985",
+        "mask": null
+      },
+      {
+        "id": "function/359606692",
+        "mask": null
+      },
+      {
+        "id": "function/395359035",
+        "mask": null
+      },
+      {
+        "id": "function/409628970",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/438117901",
+        "mask": null
+      },
+      {
+        "id": "function/477858577",
+        "mask": null
+      },
+      {
+        "id": "function/477858577",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/479155815",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": null
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/49259755",
+        "mask": null
+      },
+      {
+        "id": "function/494259168",
+        "mask": null
+      },
+      {
+        "id": "function/495511570",
+        "mask": null
+      },
+      {
+        "id": "function/499032542",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/512286296",
+        "mask": null
+      },
+      {
+        "id": "function/51389871",
+        "mask": null
+      },
+      {
+        "id": "function/514473880",
+        "mask": null
+      },
+      {
+        "id": "function/517189775",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/523878647",
+        "mask": null
+      },
+      {
+        "id": "function/523878647",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": null
+      },
+      {
+        "id": "function/566090952",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57613304",
+        "mask": null
+      },
+      {
+        "id": "function/57613304",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/609214736",
+        "mask": null
+      },
+      {
+        "id": "function/609214736",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/629344964",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/685278809",
+        "mask": null
+      },
+      {
+        "id": "function/689230944",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/712382592",
+        "mask": null
+      },
+      {
+        "id": "function/712382592",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/744088497",
+        "mask": null
+      },
+      {
+        "id": "function/746055337",
+        "mask": null
+      },
+      {
+        "id": "function/746055337",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/78867062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/78867062",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/801619570",
+        "mask": null
+      },
+      {
+        "id": "function/820169204",
+        "mask": null
+      },
+      {
+        "id": "function/821928955",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/864812824",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/866251913",
+        "mask": null
+      },
+      {
+        "id": "function/875358741",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/875358741",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/875358741",
+        "mask": null
+      },
+      {
+        "id": "function/875358741",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/91691962",
+        "mask": null
+      },
+      {
+        "id": "function/922651191",
+        "mask": null
+      },
+      {
+        "id": "function/922651191",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/935592878",
+        "mask": null
+      },
+      {
+        "id": "function/935592878",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/1042482096": [
@@ -25980,58 +70511,400 @@
         "mask": "inlined"
       }
     ],
-    "function/1047605700": [
+    "function/1046014704": [
       {
-        "id": "field/153843292",
-        "mask": "null"
+        "id": "field/351779368",
+        "mask": null
       },
       {
-        "id": "field/154746101",
-        "mask": "null"
+        "id": "field/410674423",
+        "mask": null
       },
       {
-        "id": "field/525450391",
-        "mask": "null"
+        "id": "field/410674423",
+        "mask": null
       },
       {
-        "id": "field/626762025",
-        "mask": "null"
+        "id": "field/523754696",
+        "mask": null
       },
       {
-        "id": "function/163889622",
-        "mask": "null"
+        "id": "function/1032715322",
+        "mask": null
       },
       {
-        "id": "function/701409225",
-        "mask": "null"
+        "id": "function/103899378",
+        "mask": null
       },
       {
-        "id": "function/784650927",
-        "mask": "null"
+        "id": "function/1068396938",
+        "mask": null
       },
       {
-        "id": "function/990521259",
-        "mask": "null"
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/352620724",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/352620724",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/467920119",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": null
+      },
+      {
+        "id": "function/522820503",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/589675001",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/589675001",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/675189669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/675189669",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/832692823",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/83781773",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/883935916",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/883935916",
+        "mask": null
+      },
+      {
+        "id": "function/885353355",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885353355",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/929852730",
+        "mask": null
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/1050426556": [
+      {
+        "id": "function/1007804883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1019584284",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1069756346",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/212177062",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/490035833",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/495511570",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/875358741",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/942726385",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/944782426",
+        "mask": "inlined"
       }
     ],
     "function/1051093947": [
       {
-        "id": "function/873863767",
-        "mask": "null"
+        "id": "function/295807328",
+        "mask": null
       }
     ],
     "function/1058735230": [
       {
-        "id": "field/42778158",
-        "mask": "null"
+        "id": "field/206062167",
+        "mask": null
       },
       {
-        "id": "function/16930089",
-        "mask": "null"
+        "id": "field/42778158",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/163889622",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/18599313",
+        "mask": null
       },
       {
         "id": "function/205154197",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
       },
       {
         "id": "function/460512542",
@@ -26039,25 +70912,237 @@
       },
       {
         "id": "function/460512542",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/552271305",
+        "mask": null
+      },
+      {
+        "id": "function/552271305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/606572177",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/904115316",
+        "mask": null
       },
       {
         "id": "function/904115316",
         "mask": "inlined"
       },
       {
-        "id": "function/904115316",
-        "mask": "null"
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/94108092",
+        "mask": null
+      },
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
       }
     ],
     "function/1060205580": [
       {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
         "id": "function/499330809",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/559097830",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
       },
       {
         "id": "function/717561594",
-        "mask": "null"
+        "mask": null
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
       },
       {
         "id": "function/79175019",
@@ -26065,17 +71150,307 @@
       },
       {
         "id": "function/79175019",
-        "mask": "null"
-      }
-    ],
-    "function/1065856678": [
-      {
-        "id": "field/1025923114",
-        "mask": "null"
+        "mask": null
       },
       {
-        "id": "function/263363184",
-        "mask": "null"
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      }
+    ],
+    "function/1068396938": [
+      {
+        "id": "field/239805186",
+        "mask": null
+      },
+      {
+        "id": "function/1032715322",
+        "mask": null
+      },
+      {
+        "id": "function/103899378",
+        "mask": null
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": null
+      },
+      {
+        "id": "function/105655227",
+        "mask": null
+      },
+      {
+        "id": "function/105655227",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1068396938",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": null
+      },
+      {
+        "id": "function/120424305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/132742275",
+        "mask": null
+      },
+      {
+        "id": "function/160933185",
+        "mask": null
+      },
+      {
+        "id": "function/167217604",
+        "mask": null
+      },
+      {
+        "id": "function/207792788",
+        "mask": null
+      },
+      {
+        "id": "function/216705978",
+        "mask": null
+      },
+      {
+        "id": "function/21938161",
+        "mask": null
+      },
+      {
+        "id": "function/247461665",
+        "mask": null
+      },
+      {
+        "id": "function/310648840",
+        "mask": null
+      },
+      {
+        "id": "function/317451330",
+        "mask": null
+      },
+      {
+        "id": "function/331565025",
+        "mask": null
+      },
+      {
+        "id": "function/339437005",
+        "mask": null
+      },
+      {
+        "id": "function/417411809",
+        "mask": null
+      },
+      {
+        "id": "function/502696664",
+        "mask": null
+      },
+      {
+        "id": "function/520073200",
+        "mask": null
+      },
+      {
+        "id": "function/535892822",
+        "mask": null
+      },
+      {
+        "id": "function/550912538",
+        "mask": null
+      },
+      {
+        "id": "function/578373084",
+        "mask": null
+      },
+      {
+        "id": "function/583427045",
+        "mask": null
+      },
+      {
+        "id": "function/598215859",
+        "mask": null
+      },
+      {
+        "id": "function/631550768",
+        "mask": null
+      },
+      {
+        "id": "function/632397862",
+        "mask": null
+      },
+      {
+        "id": "function/640394917",
+        "mask": null
+      },
+      {
+        "id": "function/70158663",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": null
+      },
+      {
+        "id": "function/713151216",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/777322353",
+        "mask": null
+      },
+      {
+        "id": "function/791758355",
+        "mask": null
+      },
+      {
+        "id": "function/797484809",
+        "mask": null
+      },
+      {
+        "id": "function/797484809",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/83342486",
+        "mask": null
+      },
+      {
+        "id": "function/848873059",
+        "mask": null
+      },
+      {
+        "id": "function/864835321",
+        "mask": null
+      },
+      {
+        "id": "function/865184799",
+        "mask": null
+      },
+      {
+        "id": "function/911398026",
+        "mask": null
+      },
+      {
+        "id": "function/911422554",
+        "mask": null
+      },
+      {
+        "id": "function/956458971",
+        "mask": null
+      },
+      {
+        "id": "function/973238019",
+        "mask": null
+      },
+      {
+        "id": "function/982751380",
+        "mask": null
+      },
+      {
+        "id": "function/986643735",
+        "mask": null
+      }
+    ],
+    "function/1070901287": [
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055215220",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/517327012",
+        "mask": "inlined"
       }
     ]
   },
@@ -26085,7 +71460,8 @@
       "id": "outputUnit/7045321",
       "kind": "outputUnit",
       "name": "1",
-      "size": 1353,
+      "size": 673,
+      "filename": "hello_world_deferred.js_1.part.js",
       "imports": [
         "deferred_import"
       ]
@@ -26094,7 +71470,8 @@
       "id": "outputUnit/669725655",
       "kind": "outputUnit",
       "name": "main",
-      "size": 156027,
+      "size": 194305,
+      "filename": "hello_world_deferred.js",
       "imports": []
     }
   ],
@@ -26111,12 +71488,12 @@
   },
   "dump_minor_version": 1,
   "program": {
-    "entrypoint": "function/921486255",
-    "size": 157380,
-    "dart2jsVersion": "2.00.0-dev.60.0",
-    "compilationMoment": "2018-06-20 15:19:49.944368",
-    "compilationDuration": 1338565,
-    "toJsonDuration": 11000,
+    "entrypoint": "function/77034453",
+    "size": 194978,
+    "dart2jsVersion": null,
+    "compilationMoment": "2021-09-27 16:21:40.757404",
+    "compilationDuration": 4157850,
+    "toJsonDuration": 6000,
     "dumpInfoDuration": 0,
     "noSuchMethodEnabled": false,
     "isRuntimeTypeUsed": false,
diff --git a/pkg/dart2js_info/test/json_to_proto_deferred_test.dart b/pkg/dart2js_info/test/json_to_proto_deferred_test.dart
index 70d7681..fc0af00 100644
--- a/pkg/dart2js_info/test/json_to_proto_deferred_test.dart
+++ b/pkg/dart2js_info/test/json_to_proto_deferred_test.dart
@@ -12,8 +12,8 @@
 main() {
   group('json to proto conversion with deferred files', () {
     test('hello_world_deferred', () {
-      var uri = Platform.script.resolve(
-          'hello_world_deferred/hello_world_deferred.js.info.json');
+      var uri = Platform.script
+          .resolve('hello_world_deferred/hello_world_deferred.js.info.json');
       final helloWorld = File.fromUri(uri);
       final json = jsonDecode(helloWorld.readAsStringSync());
       final decoded = AllInfoJsonCodec().decode(json);
diff --git a/pkg/dart2js_info/test/json_to_proto_test.dart b/pkg/dart2js_info/test/json_to_proto_test.dart
index 735b2d7..67f7ef0 100644
--- a/pkg/dart2js_info/test/json_to_proto_test.dart
+++ b/pkg/dart2js_info/test/json_to_proto_test.dart
@@ -13,19 +13,18 @@
 main() {
   group('json to proto conversion', () {
     test('hello_world', () {
-      var uri = Platform.script.resolve(
-          'hello_world/hello_world.js.info.json');
+      var uri = Platform.script.resolve('hello_world/hello_world.js.info.json');
       final helloWorld = File.fromUri(uri);
       final json = jsonDecode(helloWorld.readAsStringSync());
       final decoded = AllInfoJsonCodec().decode(json);
       final proto = AllInfoProtoCodec().encode(decoded);
 
       expect(proto.program.entrypointId, isNotNull);
-      expect(proto.program.size, 10324);
+      expect(proto.program.size, 94182);
       expect(proto.program.compilationMoment.toInt(),
-          DateTime.parse("2017-04-17 09:46:41.661617").microsecondsSinceEpoch);
+          DateTime.parse("2021-09-27 15:32:00.380236").microsecondsSinceEpoch);
       expect(proto.program.toProtoDuration.toInt(),
-          Duration(milliseconds: 4).inMicroseconds);
+          Duration(milliseconds: 3).inMicroseconds);
       expect(proto.program.dumpInfoDuration.toInt(),
           Duration(milliseconds: 0).inMicroseconds);
       expect(proto.program.noSuchMethodEnabled, isFalse);
@@ -33,8 +32,7 @@
     });
 
     test('has proper id format', () {
-      var uri = Platform.script.resolve(
-          'hello_world/hello_world.js.info.json');
+      var uri = Platform.script.resolve('hello_world/hello_world.js.info.json');
       final helloWorld = File.fromUri(uri);
       final json = jsonDecode(helloWorld.readAsStringSync());
       final decoded = AllInfoJsonCodec().decode(json);
@@ -53,6 +51,9 @@
         } else if (value.hasClassInfo()) {
           expect(
               value.serializedId, startsWith(expectedPrefixes[InfoKind.clazz]));
+        } else if (value.hasClassTypeInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.classType]));
         } else if (value.hasFunctionInfo()) {
           expect(value.serializedId,
               startsWith(expectedPrefixes[InfoKind.function]));
diff --git a/pkg/dart2js_info/test/parse_test.dart b/pkg/dart2js_info/test/parse_test.dart
index ae71615..bc5883b 100644
--- a/pkg/dart2js_info/test/parse_test.dart
+++ b/pkg/dart2js_info/test/parse_test.dart
@@ -11,8 +11,7 @@
 main() {
   group('parse', () {
     test('hello_world', () {
-      var uri =
-          Platform.script.resolve('hello_world/hello_world.js.info.json');
+      var uri = Platform.script.resolve('hello_world/hello_world.js.info.json');
       var helloWorld = File.fromUri(uri);
       var json = jsonDecode(helloWorld.readAsStringSync());
       var decoded = AllInfoJsonCodec().decode(json);
@@ -21,12 +20,12 @@
       expect(program, isNotNull);
 
       expect(program.entrypoint, isNotNull);
-      expect(program.size, 10324);
+      expect(program.size, 94182);
       expect(program.compilationMoment,
-          DateTime.parse("2017-04-17 09:46:41.661617"));
-      expect(program.compilationDuration, new Duration(microseconds: 357402));
-      expect(program.toJsonDuration, new Duration(milliseconds: 4));
-      expect(program.dumpInfoDuration, new Duration(seconds: 0));
+          DateTime.parse("2021-09-27 15:32:00.380236"));
+      expect(program.compilationDuration, Duration(microseconds: 2848001));
+      expect(program.toJsonDuration, Duration(milliseconds: 3));
+      expect(program.dumpInfoDuration, Duration(seconds: 0));
       expect(program.noSuchMethodEnabled, false);
       expect(program.minified, false);
     });
diff --git a/pkg/dart2js_tools/bin/deobfuscate.dart b/pkg/dart2js_tools/bin/deobfuscate.dart
index d6ba837..009357f 100644
--- a/pkg/dart2js_tools/bin/deobfuscate.dart
+++ b/pkg/dart2js_tools/bin/deobfuscate.dart
@@ -10,7 +10,7 @@
 import 'package:dart2js_tools/src/util.dart';
 import 'package:dart2js_tools/src/trace_decoder.dart';
 
-/// Script that deobuscates a stack-trace given in a text file.
+/// Script that deobfuscates a stack-trace given in a text file.
 ///
 /// To run this script you need 3 or more files:
 ///
@@ -47,24 +47,24 @@
   var sb = new StringBuffer();
   try {
     String obfuscatedTrace = new File(args[0]).readAsStringSync();
-    String error = extractErrorMessage(obfuscatedTrace);
+    String? error = extractErrorMessage(obfuscatedTrace);
     var provider = new CachingFileProvider(logger: Logger());
     StackDeobfuscationResult result =
         deobfuscateStack(obfuscatedTrace, provider);
     Frame firstFrame = result.original.frames.first;
-    String translatedError =
+    String? translatedError =
         translate(error, provider.mappingFor(firstFrame.uri));
     if (translatedError == null) translatedError = '<no error message found>';
     printPadded(translatedError, error, sb);
     int longest =
-        result.deobfuscated.frames.fold(0, (m, f) => max(f.member.length, m));
+        result.deobfuscated.frames.fold(0, (m, f) => max(f.member!.length, m));
     for (var originalFrame in result.original.frames) {
       var deobfuscatedFrames = result.frameMap[originalFrame];
       if (deobfuscatedFrames == null) {
         printPadded('no mapping', '${originalFrame.location}', sb);
       } else {
         for (var frame in deobfuscatedFrames) {
-          printPadded('${frame.member.padRight(longest)} ${frame.location}',
+          printPadded('${frame.member!.padRight(longest)} ${frame.location}',
               '${originalFrame.location}', sb);
         }
       }
@@ -77,7 +77,7 @@
 final green = stdout.hasTerminal ? '\x1b[32m' : '';
 final none = stdout.hasTerminal ? '\x1b[0m' : '';
 
-printPadded(String mapping, String original, sb) {
+printPadded(String mapping, String? original, sb) {
   var len = mapping.length;
   var s = mapping.indexOf('\n');
   if (s >= 0) len -= s + 1;
diff --git a/pkg/dart2js_tools/bin/lookup_name.dart b/pkg/dart2js_tools/bin/lookup_name.dart
index f2d5c1b..e14c503 100644
--- a/pkg/dart2js_tools/bin/lookup_name.dart
+++ b/pkg/dart2js_tools/bin/lookup_name.dart
@@ -1,7 +1,8 @@
 import 'dart:io';
 import 'dart:convert';
-import 'package:source_maps/source_maps.dart';
+
 import 'package:dart2js_tools/src/dart2js_mapping.dart';
+import 'package:dart2js_tools/src/util.dart';
 
 main(List<String> args) {
   if (args.length < 2) {
@@ -16,7 +17,7 @@
     exit(1);
   }
   var json = jsonDecode(sourcemapFile.readAsStringSync());
-  Dart2jsMapping mapping = Dart2jsMapping(parseJson(json), json);
+  Dart2jsMapping mapping = Dart2jsMapping(parseSingleMapping(json), json);
   var global = mapping.globalNames[name];
   if (global != null) print('$name => $global (a global name)');
   var instance = mapping.instanceNames[name];
diff --git a/pkg/dart2js_tools/bin/show_inline_data.dart b/pkg/dart2js_tools/bin/show_inline_data.dart
index cc3d5f0..235e380 100644
--- a/pkg/dart2js_tools/bin/show_inline_data.dart
+++ b/pkg/dart2js_tools/bin/show_inline_data.dart
@@ -22,11 +22,11 @@
   var mapping = provider.mappingFor(uri);
   var starts = functionStarts(provider.sourcesFor(uri));
   var file = provider.fileFor(uri);
-  var frames = mapping.frames;
+  var frames = mapping!.frames;
   var offsets = frames.keys.toList()..sort();
   var sb = new StringBuffer();
   int depth = 0;
-  int lastFunctionStart = null;
+  int? lastFunctionStart = null;
   for (var offset in offsets) {
     int functionStart = nextFunctionStart(starts, offset, lastFunctionStart);
     if (lastFunctionStart == null || functionStart > lastFunctionStart) {
@@ -43,7 +43,7 @@
     var pad = ' ' * offsetPrefix.length;
     sb.write(offsetPrefix);
     bool first = true;
-    for (var frame in frames[offset]) {
+    for (var frame in frames[offset]!) {
       if (!first) sb.write('$pad');
       sb.write(' $frame\n');
       first = false;
@@ -75,7 +75,7 @@
   return result;
 }
 
-int nextFunctionStart(List<int> starts, int offset, int last) {
+int nextFunctionStart(List<int> starts, int offset, int? last) {
   int j = last ?? 0;
   for (; j < starts.length && starts[j] <= offset; j++);
   return j - 1;
diff --git a/pkg/dart2js_tools/lib/deobfuscate_stack_trace.dart b/pkg/dart2js_tools/lib/deobfuscate_stack_trace.dart
index 29a209e..4a43b6c 100644
--- a/pkg/dart2js_tools/lib/deobfuscate_stack_trace.dart
+++ b/pkg/dart2js_tools/lib/deobfuscate_stack_trace.dart
@@ -5,7 +5,7 @@
 import 'package:dart2js_tools/src/util.dart';
 import 'package:dart2js_tools/src/trace_decoder.dart';
 
-/// Deobuscates the given [obfuscatedTrace].
+/// Deobfuscates the given [obfuscatedTrace].
 ///
 /// This method assumes a stack trace contains URIs normalized to be file URIs.
 /// If for example you obtain a stack from a browser, you may need to preprocess
@@ -27,7 +27,7 @@
 ///  `//# sourceMappingURL=` line at the end, and load the corresponding
 /// source-map file.
 String deobfuscateStackTrace(String obfuscatedTrace) {
-  String error = extractErrorMessage(obfuscatedTrace);
+  String? error = extractErrorMessage(obfuscatedTrace);
   var provider = CachingFileProvider();
   StackDeobfuscationResult result = deobfuscateStack(obfuscatedTrace, provider);
   Frame firstFrame = result.original.frames.first;
@@ -38,14 +38,14 @@
 
   var sb = StringBuffer();
   sb.writeln(translatedError);
-  maxMemberLengthHelper(int m, Frame f) => max(f.member.length, m);
+  maxMemberLengthHelper(int m, Frame f) => max(f.member!.length, m);
   int longest = result.deobfuscated.frames.fold(0, maxMemberLengthHelper);
   longest = result.original.frames.fold(longest, maxMemberLengthHelper);
   for (var originalFrame in result.original.frames) {
     var deobfuscatedFrames = result.frameMap[originalFrame];
     if (deobfuscatedFrames == null) {
       var name = originalFrame.member;
-      sb.writeln('    at ${name.padRight(longest)} ${originalFrame.location}');
+      sb.writeln('    at ${name!.padRight(longest)} ${originalFrame.location}');
     } else {
       for (var frame in deobfuscatedFrames) {
         var name = frame.member;
@@ -53,7 +53,7 @@
         // client, we can start encoding the function name and remove this
         // workaround.
         if (name == '<unknown>') name = originalFrame.member;
-        sb.writeln('    at ${name.padRight(longest)} ${frame.location}');
+        sb.writeln('    at ${name!.padRight(longest)} ${frame.location}');
       }
     }
   }
diff --git a/pkg/dart2js_tools/lib/src/dart2js_mapping.dart b/pkg/dart2js_tools/lib/src/dart2js_mapping.dart
index ac6b9d7..6432aaa 100644
--- a/pkg/dart2js_tools/lib/src/dart2js_mapping.dart
+++ b/pkg/dart2js_tools/lib/src/dart2js_mapping.dart
@@ -23,38 +23,32 @@
   final Map<String, String> globalNames = {};
   final Map<String, String> instanceNames = {};
   final Map<int, List<FrameEntry>> frames = {};
-  List<int> _frameIndex;
-  List<int> get frameIndex {
-    if (_frameIndex == null) {
-      _frameIndex = frames.keys.toList()..sort();
-    }
-    return _frameIndex;
-  }
+  late final List<int> frameIndex = frames.keys.toList()..sort();
 
-  Dart2jsMapping(this.sourceMap, Map json, {Logger logger}) {
+  Dart2jsMapping(this.sourceMap, Map json, {Logger? logger}) {
     var extensions = json['x_org_dartlang_dart2js'];
     if (extensions == null) return;
     var minifiedNames = extensions['minified_names'];
     if (minifiedNames != null) {
-      _extractMinifedNames(
+      _extractMinifiedNames(
           minifiedNames['global'], sourceMap, globalNames, logger);
-      _extractMinifedNames(
+      _extractMinifiedNames(
           minifiedNames['instance'], sourceMap, instanceNames, logger);
     }
-    String jsonFrames = extensions['frames'];
+    String? jsonFrames = extensions['frames'];
     if (jsonFrames != null) {
       new _FrameDecoder(jsonFrames).parseFrames(frames, sourceMap);
     }
   }
 
-  Dart2jsMapping.json(Map json) : this(parseJson(json), json);
+  Dart2jsMapping.json(Map json) : this(parseSingleMapping(json), json);
 }
 
 class FrameEntry {
-  final String callUri;
-  final int callLine;
-  final int callColumn;
-  final String inlinedMethodName;
+  final String? callUri;
+  final int? callLine;
+  final int? callColumn;
+  final String? inlinedMethodName;
   final bool isEmpty;
   FrameEntry.push(
       this.callUri, this.callLine, this.callColumn, this.inlinedMethodName)
@@ -76,7 +70,7 @@
 }
 
 const _marker = "\n//# sourceMappingURL=";
-Dart2jsMapping parseMappingFor(Uri uri, {Logger logger}) {
+Dart2jsMapping? parseMappingFor(Uri uri, {Logger? logger}) {
   var file = new File.fromUri(uri);
   if (!file.existsSync()) {
     logger?.log('Error: no such file: $uri');
@@ -100,7 +94,7 @@
     return null;
   }
   var json = jsonDecode(sourcemapFile.readAsStringSync());
-  return new Dart2jsMapping(parseJson(json), json, logger: logger);
+  return new Dart2jsMapping(parseSingleMapping(json), json, logger: logger);
 }
 
 class _FrameDecoder implements Iterator<String> {
@@ -112,8 +106,9 @@
   // Iterator API is used by decodeVlq to consume VLQ entries.
   bool moveNext() => ++index < _length;
 
-  String get current =>
-      (index >= 0 && index < _length) ? _internal[index] : null;
+  String get current => (index >= 0 && index < _length)
+      ? _internal[index]
+      : throw StateError('No current value available.');
 
   bool get hasTokens => index < _length - 1 && _length > 0;
 
@@ -150,8 +145,8 @@
   }
 }
 
-_extractMinifedNames(String encodedInput, SingleMapping sourceMap,
-    Map<String, String> minifiedNames, Logger logger) {
+_extractMinifiedNames(String encodedInput, SingleMapping sourceMap,
+    Map<String, String> minifiedNames, Logger? logger) {
   if (encodedInput.isEmpty) return;
   List<String> input = encodedInput.split(',');
   if (input.length % 2 != 0) {
@@ -159,7 +154,7 @@
   }
   for (int i = 0; i < input.length; i += 2) {
     String minifiedName = input[i];
-    int id = int.tryParse(input[i + 1]);
+    int id = int.parse(input[i + 1]);
     minifiedNames[minifiedName] = sourceMap.names[id];
   }
 }
diff --git a/pkg/dart2js_tools/lib/src/name_decoder.dart b/pkg/dart2js_tools/lib/src/name_decoder.dart
index 306bead..862c7b4 100644
--- a/pkg/dart2js_tools/lib/src/name_decoder.dart
+++ b/pkg/dart2js_tools/lib/src/name_decoder.dart
@@ -9,8 +9,8 @@
 import 'dart2js_mapping.dart';
 import 'trace.dart';
 
-String translate(String error, Dart2jsMapping mapping,
-    [StackTraceLine line, TargetEntry entry]) {
+String? translate(String? error, Dart2jsMapping? mapping,
+    [StackTraceLine? line, TargetEntry? entry]) {
   for (var decoder in _errorMapDecoders) {
     var result = decoder.decode(error, mapping, line, entry);
     // More than one decoder might be applied on a single error message. This
@@ -30,10 +30,10 @@
   /// Decode [error] that was reported in [line] and has a corresponding [entry]
   /// in the source-map file. The provided [mapping] includes additional
   /// minification data that may be used to decode the error message.
-  String decode(String error, Dart2jsMapping mapping, StackTraceLine line,
-      TargetEntry entry) {
+  String? decode(String? error, Dart2jsMapping? mapping, StackTraceLine? line,
+      TargetEntry? entry) {
     if (error == null) return null;
-    Match lastMatch = null;
+    Match? lastMatch = null;
     var result = new StringBuffer();
     for (var match in _matcher.allMatches(error)) {
       var decodedMatch = _decodeInternal(match, mapping, line, entry);
@@ -49,8 +49,8 @@
     return '$result';
   }
 
-  String _decodeInternal(Match match, Dart2jsMapping mapping,
-      StackTraceLine line, TargetEntry entry);
+  String? _decodeInternal(Match match, Dart2jsMapping? mapping,
+      StackTraceLine? line, TargetEntry? entry);
 }
 
 typedef String ErrorDecoder(Match match, Dart2jsMapping mapping,
@@ -59,45 +59,45 @@
 class MinifiedNameDecoder extends ErrorMapDecoder {
   final RegExp _matcher = new RegExp("minified:([a-zA-Z0-9_\$]*)");
 
-  String _decodeInternal(Match match, Dart2jsMapping mapping,
-      StackTraceLine line, TargetEntry entry) {
+  String? _decodeInternal(Match match, Dart2jsMapping? mapping,
+      StackTraceLine? line, TargetEntry? entry) {
     var minifiedName = match.group(1);
-    return mapping.globalNames[minifiedName];
+    return mapping!.globalNames[minifiedName];
   }
 }
 
 class CannotReadPropertyDecoder extends ErrorMapDecoder {
   final RegExp _matcher = new RegExp("Cannot read property '([^']*)' of");
 
-  String _decodeInternal(Match match, Dart2jsMapping mapping,
-      StackTraceLine line, TargetEntry entry) {
+  String? _decodeInternal(Match match, Dart2jsMapping? mapping,
+      StackTraceLine? line, TargetEntry? entry) {
     var minifiedName = match.group(1);
-    var name = mapping.instanceNames[minifiedName];
+    var name = mapping!.instanceNames[minifiedName];
     if (name == null) return null;
     return "Cannot read property '$name' of";
   }
 }
 
 abstract class NoSuchMethodDecoderBase extends ErrorMapDecoder {
-  String _translateMinifiedName(Dart2jsMapping mapping, String minifiedName) {
+  String? _translateMinifiedName(Dart2jsMapping mapping, String? minifiedName) {
     var name = mapping.instanceNames[minifiedName];
     if (name != null) return "'$name'";
-    if (minifiedName.startsWith(new RegExp(r'(call)?\$[0-9]'))) {
+    if (minifiedName!.startsWith(new RegExp(r'(call)?\$[0-9]'))) {
       int first$ = minifiedName.indexOf(r'$');
       return _expandCallSignature(minifiedName.substring(first$));
     }
     return null;
   }
 
-  String _expandCallSignature(String callSignature) {
+  String? _expandCallSignature(String callSignature) {
     // Minified names are one of these forms:
     //   $0         // positional arguments only
     //   $1$2       // type parameters and positional arguments
     //   $3$name    // positional and named arguments
     //   $1$3$name  // type parameters and positional and named args
     var signature = callSignature.split(r'$');
-    var typeArgs = null;
-    var totalArgs = null;
+    int? typeArgs = null;
+    int? totalArgs = null;
     var namedArgs = <String>[];
     for (var arg in signature) {
       if (arg == "") continue;
@@ -115,6 +115,7 @@
         namedArgs.add(arg);
       }
     }
+    if (totalArgs == null) return null;
     var sb = new StringBuffer();
     sb.write("'call'");
     sb.write(" (with ");
@@ -136,11 +137,11 @@
   final RegExp _matcher = new RegExp(
       "NoSuchMethodError: method not found: '([^']*)'( on [^\\(]*)? \\(.*\\)");
 
-  String _decodeInternal(Match match, Dart2jsMapping mapping,
-      StackTraceLine line, TargetEntry entry) {
+  String? _decodeInternal(Match match, Dart2jsMapping? mapping,
+      StackTraceLine? line, TargetEntry? entry) {
     var minifiedName = match.group(1);
     var suffix = match.group(2) ?? '';
-    var name = _translateMinifiedName(mapping, minifiedName);
+    var name = _translateMinifiedName(mapping!, minifiedName);
     if (name == null) return null;
     return "NoSuchMethodError: method not found: $name$suffix";
   }
@@ -150,10 +151,10 @@
   final RegExp _matcher =
       new RegExp("NoSuchMethodError: method not found: '([^']*)'");
 
-  String _decodeInternal(Match match, Dart2jsMapping mapping,
-      StackTraceLine line, TargetEntry entry) {
+  String? _decodeInternal(Match match, Dart2jsMapping? mapping,
+      StackTraceLine? line, TargetEntry? entry) {
     var minifiedName = match.group(1);
-    var name = _translateMinifiedName(mapping, minifiedName);
+    var name = _translateMinifiedName(mapping!, minifiedName);
     if (name == null) return null;
     return "NoSuchMethodError: method not found: $name";
   }
@@ -162,10 +163,10 @@
 class UnhandledNotAFunctionError extends ErrorMapDecoder {
   final RegExp _matcher = new RegExp("Error: ([^']*) is not a function");
 
-  String _decodeInternal(Match match, Dart2jsMapping mapping,
-      StackTraceLine line, TargetEntry entry) {
+  String? _decodeInternal(Match match, Dart2jsMapping? mapping,
+      StackTraceLine? line, TargetEntry? entry) {
     var minifiedName = match.group(1);
-    var name = mapping.instanceNames[minifiedName];
+    var name = mapping!.instanceNames[minifiedName];
     if (name == null) return null;
     return "Error: $name is not a function";
   }
diff --git a/pkg/dart2js_tools/lib/src/sourcemap_helper.dart b/pkg/dart2js_tools/lib/src/sourcemap_helper.dart
index 68ffd94..cdbf85a 100644
--- a/pkg/dart2js_tools/lib/src/sourcemap_helper.dart
+++ b/pkg/dart2js_tools/lib/src/sourcemap_helper.dart
@@ -10,11 +10,10 @@
 
 /// Search backwards in [sources] for a function declaration that includes the
 /// [start] offset.
-TargetEntry findEnclosingFunction(FileProvider provider, Uri uri, int start) {
+TargetEntry? findEnclosingFunction(FileProvider provider, Uri uri, int start) {
   String sources = provider.sourcesFor(uri);
-  if (sources == null) return null;
   SourceFile file = provider.fileFor(uri);
-  SingleMapping mapping = provider.mappingFor(uri).sourceMap;
+  SingleMapping mapping = provider.mappingFor(uri)!.sourceMap;
   var index = start;
   while (true) {
     index = nextDeclarationCandidate(sources, index);
@@ -22,7 +21,7 @@
     var line = file.getLine(index);
     var lineEntry = findLine(mapping, line);
     var column = file.getColumn(index);
-    TargetEntry result = findColumn(line, column, lineEntry);
+    TargetEntry? result = findColumn(line, column, lineEntry);
     // If the name entry doesn't start exactly at the column corresponding to
     // `index`, we must be in the middle of a string or code that uses the word
     // "function", but that doesn't have a corresponding mapping. In those
@@ -61,7 +60,7 @@
 /// number is lower or equal to [line].
 ///
 /// Copied from [SingleMapping._findLine].
-TargetLineEntry findLine(SingleMapping sourceMap, int line) {
+TargetLineEntry? findLine(SingleMapping sourceMap, int line) {
   int index = binarySearch(sourceMap.lines, (e) => e.line > line);
   return (index <= 0) ? null : sourceMap.lines[index - 1];
 }
@@ -73,7 +72,7 @@
 /// the very last entry on that line.
 ///
 /// Copied from [SingleMapping._findColumn].
-TargetEntry findColumn(int line, int column, TargetLineEntry lineEntry) {
+TargetEntry? findColumn(int line, int column, TargetLineEntry? lineEntry) {
   if (lineEntry == null || lineEntry.entries.length == 0) return null;
   if (lineEntry.line != line) return lineEntry.entries.last;
   var entries = lineEntry.entries;
diff --git a/pkg/dart2js_tools/lib/src/trace.dart b/pkg/dart2js_tools/lib/src/trace.dart
index 846af16..07bdb1e 100644
--- a/pkg/dart2js_tools/lib/src/trace.dart
+++ b/pkg/dart2js_tools/lib/src/trace.dart
@@ -14,10 +14,10 @@
 
 /// Represents a stack trace line.
 class StackTraceLine {
-  String methodName;
-  String fileName;
-  int lineNo;
-  int columnNo;
+  final String? methodName;
+  final String fileName;
+  final int? lineNo;
+  final int columnNo;
 
   StackTraceLine(this.methodName, this.fileName, this.lineNo, this.columnNo);
 
@@ -31,11 +31,11 @@
   ///     at <fileName>:<lineNo>
   ///     at <fileName>
   ///
-  factory StackTraceLine.fromText(String text, {Logger logger}) {
+  factory StackTraceLine.fromText(String text, {Logger? logger}) {
     text = text.trim();
     assert(text.startsWith('at '));
     text = text.substring('at '.length);
-    String methodName;
+    String? methodName;
     int endParen = text.indexOf(')');
     if (endParen > 0) {
       int nameEnd = text.indexOf('(');
@@ -46,16 +46,16 @@
         logger?.log('Missing left-paren in: $text');
       }
     }
-    int lineNo;
-    int columnNo;
+    int? lineNo;
+    int? columnNo;
     String fileName;
     int lastColon = text.lastIndexOf(':');
     if (lastColon != -1) {
-      int lastValue = int.tryParse(text.substring(lastColon + 1));
+      int? lastValue = int.tryParse(text.substring(lastColon + 1));
       if (lastValue != null) {
         int secondToLastColon = text.lastIndexOf(':', lastColon - 1);
         if (secondToLastColon != -1) {
-          int secondToLastValue =
+          int? secondToLastValue =
               int.tryParse(text.substring(secondToLastColon + 1, lastColon));
           if (secondToLastValue != null) {
             lineNo = secondToLastValue;
@@ -84,14 +84,14 @@
     if (methodName != null) {
       sb.write(methodName);
       sb.write(' (');
-      sb.write(fileName ?? '?');
+      sb.write(fileName);
       sb.write(':');
       sb.write(lineNo);
       sb.write(':');
       sb.write(columnNo);
       sb.write(')');
     } else {
-      sb.write(fileName ?? '?');
+      sb.write(fileName);
       sb.write(':');
       sb.write(lineNo);
       sb.write(':');
@@ -103,27 +103,27 @@
   String get inlineString {
     StringBuffer sb = new StringBuffer();
     var padding = 20;
-    if (methodName != null) {
-      sb.write(methodName);
-      padding -= (methodName.length);
+    var lineMethodName = methodName;
+    if (lineMethodName != null) {
+      sb.write(lineMethodName);
+      padding -= (lineMethodName.length);
       if (padding <= 0) {
         sb.write('\n');
         padding = 20;
       }
     }
     sb.write(' ' * padding);
-    if (fileName != null) {
-      sb.write(p.url.basename(fileName));
-      sb.write(' ');
-      sb.write(lineNo);
-      sb.write(':');
-      sb.write(columnNo);
-    }
+    sb.write(p.url.basename(fileName));
+    sb.write(' ');
+    sb.write(lineNo);
+    sb.write(':');
+    sb.write(columnNo);
+
     return sb.toString();
   }
 }
 
-List<StackTraceLine> parseStackTrace(String trace, {Logger logger}) {
+List<StackTraceLine> parseStackTrace(String trace, {Logger? logger}) {
   List<String> lines = trace.split(new RegExp(r'(\r|\n|\r\n)'));
   List<StackTraceLine> jsStackTrace = <StackTraceLine>[];
   for (String line in lines) {
@@ -138,7 +138,7 @@
 /// Returns the portion of the output that corresponds to the error message.
 ///
 /// Note: some errors can span multiple lines.
-String extractErrorMessage(String trace) {
+String? extractErrorMessage(String trace) {
   var firstStackFrame = trace.indexOf(new RegExp('\n +at'));
   if (firstStackFrame == -1) return null;
   var errorMarker = trace.indexOf('^') + 1;
diff --git a/pkg/dart2js_tools/lib/src/trace_decoder.dart b/pkg/dart2js_tools/lib/src/trace_decoder.dart
index 7ac12aa..6331bad 100644
--- a/pkg/dart2js_tools/lib/src/trace_decoder.dart
+++ b/pkg/dart2js_tools/lib/src/trace_decoder.dart
@@ -2,7 +2,7 @@
 // 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.
 
-/// Logic to expand and deobuscate stack traces.
+/// Logic to expand and deobfuscate stack traces.
 
 import 'package:stack_trace/stack_trace.dart';
 import 'package:source_span/source_span.dart';
@@ -16,12 +16,12 @@
   /// Representation of the obfuscated stack trace.
   final Trace original;
 
-  /// Representation of the deobfsucated stack trace.
+  /// Representation of the deobfuscated stack trace.
   final Trace deobfuscated;
 
   /// Details about how one original frame maps to deobfuscated frames. A single
   /// frame might map to many frames (in the case of inlining), or to a null
-  /// value (when we were unabled to deobfuscate it).
+  /// value (when we were unable to deobfuscate it).
   final Map<Frame, List<Frame>> frameMap;
 
   StackDeobfuscationResult(this.original, this.deobfuscated, this.frameMap);
@@ -35,22 +35,23 @@
   var deobfuscatedFrames = <Frame>[];
   var frameMap = <Frame, List<Frame>>{};
   for (var frame in trace.frames) {
+    var frameLine = frame.line;
     // If there's no line information, there's no way to translate this frame.
     // We could return it as-is, but these lines are usually not useful anyways.
-    if (frame.line == null) {
+    if (frameLine == null) {
       continue;
     }
 
     // If there's no column, try using the first column of the line.
     var column = frame.column ?? 1;
 
-    Dart2jsMapping mapping = provider.mappingFor(frame.uri);
+    Dart2jsMapping? mapping = provider.mappingFor(frame.uri);
     if (mapping == null) continue;
 
     // Subtract 1 because stack traces use 1-indexed lines and columns and
     // source maps uses 0-indexed.
-    SourceSpan span = mapping.sourceMap
-        .spanFor(frame.line - 1, column - 1, uri: frame.uri?.toString());
+    SourceSpan? span = mapping.sourceMap
+        .spanFor(frameLine - 1, column - 1, uri: frame.uri.toString());
 
     // If we can't find a source span, ignore the frame. It's probably something
     // internal that the user doesn't care about.
@@ -59,11 +60,11 @@
     List<Frame> mappedFrames = frameMap[frame] = [];
 
     SourceFile jsFile = provider.fileFor(frame.uri);
-    int offset = jsFile.getOffset(frame.line - 1, column - 1);
+    int offset = jsFile.getOffset(frameLine - 1, column - 1);
     String nameOf(id) =>
         _normalizeName(id >= 0 ? mapping.sourceMap.names[id] : null);
 
-    Uri fileName = span.sourceUrl;
+    Uri? fileName = span.sourceUrl;
     int targetLine = span.start.line + 1;
     int targetColumn = span.start.column + 1;
 
@@ -78,13 +79,13 @@
     int depth = 0;
     outer:
     while (key >= 0) {
-      for (var frame in frames[index[key]].reversed) {
+      for (var frame in frames[index[key]]!.reversed) {
         if (frame.isEmpty) break outer;
         if (frame.isPush) {
           if (depth <= 0) {
-            mappedFrames.add(new Frame(fileName, targetLine, targetColumn,
+            mappedFrames.add(new Frame(fileName!, targetLine, targetColumn,
                 _normalizeName(frame.inlinedMethodName) + "(inlined)"));
-            fileName = Uri.parse(frame.callUri);
+            fileName = Uri.parse(frame.callUri!);
             targetLine = (frame.callLine ?? 0) + 1;
             targetColumn = (frame.callColumn ?? 0) + 1;
           } else {
@@ -100,7 +101,8 @@
 
     var functionEntry = findEnclosingFunction(provider, frame.uri, offset);
     String methodName = nameOf(functionEntry?.sourceNameId ?? -1);
-    mappedFrames.add(new Frame(fileName, targetLine, targetColumn, methodName));
+    mappedFrames
+        .add(new Frame(fileName!, targetLine, targetColumn, methodName));
     deobfuscatedFrames.addAll(mappedFrames);
   }
   return new StackDeobfuscationResult(
@@ -109,6 +111,6 @@
 
 /// Ensure we don't use spaces in method names. At this time, they are only
 /// introduced by `<anonymous function>`.
-_normalizeName(String methodName) =>
+String _normalizeName(String? methodName) =>
     methodName?.replaceAll("<anonymous function>", "<anonymous>") ??
     '<unknown>';
diff --git a/pkg/dart2js_tools/lib/src/util.dart b/pkg/dart2js_tools/lib/src/util.dart
index 433ac5a..1a733ac 100644
--- a/pkg/dart2js_tools/lib/src/util.dart
+++ b/pkg/dart2js_tools/lib/src/util.dart
@@ -1,18 +1,19 @@
 import 'dart:io';
+import 'package:source_maps/parser.dart';
 import 'package:source_span/source_span.dart';
 import 'dart2js_mapping.dart';
 
 abstract class FileProvider {
   String sourcesFor(Uri uri);
   SourceFile fileFor(Uri uri);
-  Dart2jsMapping mappingFor(Uri uri);
+  Dart2jsMapping? mappingFor(Uri uri);
 }
 
 class CachingFileProvider implements FileProvider {
   final Map<Uri, String> _sources = {};
   final Map<Uri, SourceFile> _files = {};
-  final Map<Uri, Dart2jsMapping> _mappings = {};
-  final Logger logger;
+  final Map<Uri, Dart2jsMapping?> _mappings = {};
+  final Logger? logger;
 
   CachingFileProvider({this.logger});
 
@@ -22,7 +23,7 @@
   SourceFile fileFor(Uri uri) =>
       _files[uri] ??= new SourceFile.fromString(sourcesFor(uri));
 
-  Dart2jsMapping mappingFor(Uri uri) =>
+  Dart2jsMapping? mappingFor(Uri uri) =>
       _mappings[uri] ??= parseMappingFor(uri, logger: logger);
 }
 
@@ -44,7 +45,7 @@
 
   SourceFile fileFor(Uri uri) => super.fileFor(_localize(uri));
 
-  Dart2jsMapping mappingFor(Uri uri) => super.mappingFor(_localize(uri));
+  Dart2jsMapping? mappingFor(Uri uri) => super.mappingFor(_localize(uri));
 }
 
 class Logger {
@@ -57,3 +58,5 @@
 }
 
 var logger = Logger();
+
+SingleMapping parseSingleMapping(Map json) => parseJson(json) as SingleMapping;
diff --git a/pkg/dart2js_tools/pubspec.yaml b/pkg/dart2js_tools/pubspec.yaml
index 0d28868..392ed56 100644
--- a/pkg/dart2js_tools/pubspec.yaml
+++ b/pkg/dart2js_tools/pubspec.yaml
@@ -6,8 +6,8 @@
   information, deobfuscation of stack-traces and minified names.
 dependencies:
   path: any
-  source_maps: ^0.10.7
+  source_maps: ^0.10.10
   source_span: any
   stack_trace: ^1.9.3
 environment:
-  sdk: '>=2.3.0 <3.0.0'
+  sdk: '>=2.12.0 <3.0.0'
diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart
index 73cf9c2..9367cf6 100644
--- a/pkg/dartdev/lib/dartdev.dart
+++ b/pkg/dartdev/lib/dartdev.dart
@@ -116,16 +116,20 @@
     addCommand(CompileCommand(verbose: verbose));
     addCommand(DevToolsCommand(
       verbose: verbose,
-      // TODO(devoncarew): Un-hide this command after a stabilization period
-      // likely before the next stable release (before Dart 2.15).
-      hidden: !verbose,
       customDevToolsPath: sdk.devToolsBinaries,
     ));
     addCommand(FixCommand(verbose: verbose));
     addCommand(FormatCommand(verbose: verbose));
     addCommand(LanguageServerCommand(verbose: verbose));
     addCommand(MigrateCommand(verbose: verbose));
-    addCommand(pubCommand());
+    addCommand(
+      pubCommand(
+        analytics: PubAnalytics(
+          () => analytics,
+          dependencyKindCustomDimensionName: dependencyKindCustomDimensionName,
+        ),
+      ),
+    );
     addCommand(RunCommand(verbose: verbose));
     addCommand(TestCommand());
   }
diff --git a/pkg/dartdev/lib/src/analysis_server.dart b/pkg/dartdev/lib/src/analysis_server.dart
index 0954378..580619b 100644
--- a/pkg/dartdev/lib/src/analysis_server.dart
+++ b/pkg/dartdev/lib/src/analysis_server.dart
@@ -95,7 +95,6 @@
 
     _process = await startDartProcess(sdk, command);
     // This callback hookup can't throw.
-    // ignore: unawaited_futures
     _process.exitCode.whenComplete(() => _process = null);
 
     final Stream<String> errorStream = _process.stderr
@@ -110,7 +109,6 @@
 
     _streamController('server.error').stream.listen(_handleServerError);
 
-    // ignore: unawaited_futures
     _sendCommand('server.setSubscriptions', params: <String, dynamic>{
       'subscriptions': <String>['STATUS'],
     });
@@ -136,7 +134,6 @@
       }
     });
 
-    // ignore: unawaited_futures
     _sendCommand('analysis.setAnalysisRoots', params: <String, dynamic>{
       'included': analysisRootPaths,
       'excluded': <String>[]
diff --git a/pkg/dartdev/lib/src/analytics.dart b/pkg/dartdev/lib/src/analytics.dart
index e5e10de..3072c34 100644
--- a/pkg/dartdev/lib/src/analytics.dart
+++ b/pkg/dartdev/lib/src/analytics.dart
@@ -121,6 +121,7 @@
           IOPostHandler(),
           applicationName: appName,
           applicationVersion: getDartVersion(),
+          batchingDelay: Duration(),
         );
 
   @override
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 96f0fbe..2c8837b 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -128,7 +128,6 @@
 
     bool analysisFinished = false;
 
-    // ignore: unawaited_futures
     server.onExit.then((int exitCode) {
       if (!analysisFinished) {
         io.exitCode = exitCode;
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 140b083..4198a79 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -316,14 +316,16 @@
     addSubcommand(CompileJSCommand(verbose: verbose));
     addSubcommand(CompileSnapshotCommand(
       commandName: CompileSnapshotCommand.jitSnapshotCmdName,
-      help: 'to a JIT snapshot.',
+      help: 'to a JIT snapshot.\n'
+          'To run the snapshot use: dart run <JIT file>',
       fileExt: 'jit',
       formatName: 'app-jit',
       verbose: verbose,
     ));
     addSubcommand(CompileSnapshotCommand(
       commandName: CompileSnapshotCommand.kernelCmdName,
-      help: 'to a kernel snapshot.',
+      help: 'to a kernel snapshot.\n'
+          'To run the snapshot use: dart run <kernel file>',
       fileExt: 'dill',
       formatName: 'kernel',
       verbose: verbose,
@@ -336,7 +338,8 @@
     ));
     addSubcommand(CompileNativeCommand(
       commandName: CompileNativeCommand.aotSnapshotCmdName,
-      help: 'to an AOT snapshot.',
+      help: 'to an AOT snapshot.\n'
+          'To run the snapshot use: dartaotruntime <AOT snapshot file>',
       format: 'aot',
       verbose: verbose,
     ));
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index b19b433..c81e467 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -100,7 +100,6 @@
     await server.start();
 
     EditBulkFixesResult fixes;
-    //ignore: unawaited_futures
     server.onExit.then((int exitCode) {
       if (fixes == null && exitCode != 0) {
         progress?.cancel();
diff --git a/pkg/dartdev/lib/src/commands/run.dart b/pkg/dartdev/lib/src/commands/run.dart
index ace7285..69db956 100644
--- a/pkg/dartdev/lib/src/commands/run.dart
+++ b/pkg/dartdev/lib/src/commands/run.dart
@@ -228,31 +228,18 @@
       }
     }
 
-    String path;
-    String packagesConfigOverride;
-
     try {
-      final filename = maybeUriToFilename(mainCommand);
-      if (File(filename).existsSync()) {
-        // TODO(sigurdm): getExecutableForCommand is able to figure this out,
-        // but does not return a package config override.
-        path = filename;
-        packagesConfigOverride = null;
-      } else {
-        path = await getExecutableForCommand(mainCommand);
-        packagesConfigOverride =
-            join(current, '.dart_tool', 'package_config.json');
-      }
+      final executable = await getExecutableForCommand(mainCommand);
+      VmInteropHandler.run(
+        executable.executable,
+        runArgs,
+        packageConfigOverride: executable.packageConfig,
+      );
+      return 0;
     } on CommandResolutionFailedException catch (e) {
       log.stderr(e.message);
       return errorExitCode;
     }
-    VmInteropHandler.run(
-      path,
-      runArgs,
-      packageConfigOverride: packagesConfigOverride,
-    );
-    return 0;
   }
 }
 
diff --git a/pkg/dartdev/lib/src/commands/test.dart b/pkg/dartdev/lib/src/commands/test.dart
index c6711c7..36683af 100644
--- a/pkg/dartdev/lib/src/commands/test.dart
+++ b/pkg/dartdev/lib/src/commands/test.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import 'package:args/args.dart';
-import 'package:path/path.dart';
 import 'package:pub/pub.dart';
 
 import '../core.dart';
@@ -32,15 +31,16 @@
     try {
       final testExecutable = await getExecutableForCommand('test:test');
       log.trace('dart $testExecutable ${argResults.rest.join(' ')}');
-      VmInteropHandler.run(testExecutable, argResults.rest,
-          packageConfigOverride:
-              join(current, '.dart_tool', 'package_config.json'));
+      VmInteropHandler.run(testExecutable.executable, argResults.rest,
+          packageConfigOverride: testExecutable.packageConfig);
       return 0;
     } on CommandResolutionFailedException catch (e) {
       if (project.hasPubspecFile) {
         print(e.message);
-        print('You need to add a dev_dependency on package:test.');
-        print('Try running `dart pub add --dev test`.');
+        if (e.issue == CommandResolutionIssue.packageNotFound) {
+          print('You need to add a dev_dependency on package:test.');
+          print('Try running `dart pub add --dev test`.');
+        }
       } else {
         print(
             'No pubspec.yaml file found - run this command in your project folder.');
diff --git a/pkg/dartdev/lib/src/events.dart b/pkg/dartdev/lib/src/events.dart
index eb30e78..65469c0 100644
--- a/pkg/dartdev/lib/src/events.dart
+++ b/pkg/dartdev/lib/src/events.dart
@@ -20,10 +20,14 @@
   commandExitCode, // cd1
   enabledExperiments, // cd2
   commandFlags, // cd3
+  dependencyKind, // cd4
 }
 
 String _cdKey(_CustomDimensions cd) => 'cd${cd.index + 1}';
 
+final String dependencyKindCustomDimensionName =
+    _cdKey(_CustomDimensions.dependencyKind);
+
 Map<String, String> _useCdKeys(Map<_CustomDimensions, String> parameters) {
   return parameters.map(
     (_CustomDimensions k, String v) => MapEntry<String, String>(_cdKey(k), v),
diff --git a/pkg/dartdev/lib/src/templates/web_simple.dart b/pkg/dartdev/lib/src/templates/web_simple.dart
index 2dde7de..6ea2eb1 100644
--- a/pkg/dartdev/lib/src/templates/web_simple.dart
+++ b/pkg/dartdev/lib/src/templates/web_simple.dart
@@ -48,8 +48,8 @@
 #   path: ^1.7.0
 
 dev_dependencies:
-  build_runner: ^1.10.0
-  build_web_compilers: ^2.11.0
+  build_runner: ^2.1.4
+  build_web_compilers: ^3.2.1
   lints: ^1.0.0
 ''';
 
diff --git a/pkg/dartdev/pubspec.yaml b/pkg/dartdev/pubspec.yaml
index 9fbdb4b..0145fab 100644
--- a/pkg/dartdev/pubspec.yaml
+++ b/pkg/dartdev/pubspec.yaml
@@ -34,6 +34,8 @@
   usage: any
 
 dev_dependencies:
+  expect:
+    path: ../expect
   lints: any
   pub_semver: any
   test: any
diff --git a/pkg/dartdev/test/analytics_test.dart b/pkg/dartdev/test/analytics_test.dart
index b3e1f8b..3ae1f16 100644
--- a/pkg/dartdev/test/analytics_test.dart
+++ b/pkg/dartdev/test/analytics_test.dart
@@ -129,8 +129,12 @@
       ]);
     });
 
-    test('pub get', () {
-      final p = project(logAnalytics: true);
+    test('pub get dry run', () {
+      final p = project(logAnalytics: true, pubspec: {
+        'name': 'foo',
+        'environment': {'sdk': '>=2.10.0 <3.0.0'},
+        'dependencies': {'_dummy_pkg': '0.0.1'}
+      });
       final result = p.runSync(['pub', 'get', '--dry-run']);
       expect(extractAnalytics(result), [
         {
@@ -160,6 +164,60 @@
       ]);
     });
 
+    test('pub get', () {
+      final p = project(logAnalytics: true, pubspec: {
+        'name': 'foo',
+        'environment': {'sdk': '>=2.10.0 <3.0.0'},
+        'dependencies': {'_dummy_pkg': '0.0.1'}
+      });
+      final result = p.runSync(['pub', 'get']);
+      expect(extractAnalytics(result), [
+        {
+          'hitType': 'screenView',
+          'message': {'viewName': 'pub/get'}
+        },
+        {
+          'hitType': 'event',
+          'message': {
+            'category': 'pub-get',
+            'action': '_dummy_pkg',
+            'label': '0.0.1',
+            'value': 1,
+            'ni': '1',
+            'cd4': 'direct'
+          }
+        },
+        {
+          'hitType': 'timing',
+          'message': {
+            'variableName': 'resolution',
+            'time': isA<int>(),
+            'category': 'pub-get',
+            'label': null
+          }
+        },
+        {
+          'hitType': 'event',
+          'message': {
+            'category': 'dartdev',
+            'action': 'pub/get',
+            'label': null,
+            'value': null,
+            'cd1': '0',
+          }
+        },
+        {
+          'hitType': 'timing',
+          'message': {
+            'variableName': 'pub/get',
+            'time': isA<int>(),
+            'category': 'commands',
+            'label': null
+          }
+        }
+      ]);
+    });
+
     test('format', () {
       final p = project(logAnalytics: true);
       final result = p.runSync(['format', '-l80', '.']);
diff --git a/pkg/dartdev/test/regress_46364_test.dart b/pkg/dartdev/test/regress_46364_test.dart
new file mode 100644
index 0000000..09edc21
--- /dev/null
+++ b/pkg/dartdev/test/regress_46364_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2021, 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:io';
+
+import 'package:expect/expect.dart';
+import 'package:path/path.dart' as p;
+
+// Copied from package:io
+Future<void> copyPath(String from, String to) async {
+  await Directory(to).create(recursive: true);
+  await for (final file in Directory(from).list(recursive: true)) {
+    final copyTo = p.join(to, p.relative(file.path, from: from));
+    if (file is Directory) {
+      await Directory(copyTo).create(recursive: true);
+    } else if (file is File) {
+      await File(file.path).copy(copyTo);
+    } else if (file is Link) {
+      await Link(copyTo).create(await file.target(), recursive: true);
+    }
+  }
+}
+
+Future<void> main() async {
+  final exePath = Platform.resolvedExecutable;
+  final sdkDir = p.dirname(p.dirname(exePath));
+  // Try to run the VM located on a path with % encoded characters. The VM
+  // should not try and resolve the path as a URI for SDK artifacts (e.g.,
+  // dartdev.dart.snapshot).
+  final d = Directory.systemTemp.createTempSync('dart_symlink%3A');
+  try {
+    await copyPath(sdkDir, d.path);
+    final path = '${d.path}/bin/dart';
+    final result = await Process.run(path, ['help']);
+    Expect.equals(result.exitCode, 0);
+  } finally {
+    await d.delete(recursive: true);
+  }
+}
diff --git a/pkg/dartdev/test/utils.dart b/pkg/dartdev/test/utils.dart
index ae6be55..73f944f 100644
--- a/pkg/dartdev/test/utils.dart
+++ b/pkg/dartdev/test/utils.dart
@@ -23,12 +23,14 @@
         String analysisOptions,
         bool logAnalytics = false,
         String name = TestProject._defaultProjectName,
-        VersionConstraint sdkConstraint}) =>
+        VersionConstraint sdkConstraint,
+        Map<String, dynamic> pubspec}) =>
     TestProject(
         mainSrc: mainSrc,
         analysisOptions: analysisOptions,
         logAnalytics: logAnalytics,
-        sdkConstraint: sdkConstraint);
+        sdkConstraint: sdkConstraint,
+        pubspec: pubspec);
 
 class TestProject {
   static const String _defaultProjectName = 'dartdev_temp';
@@ -47,21 +49,28 @@
 
   final VersionConstraint sdkConstraint;
 
+  final Map<String, dynamic> pubspec;
+
   TestProject(
       {String mainSrc,
       String analysisOptions,
       this.name = _defaultProjectName,
       this.logAnalytics = false,
-      this.sdkConstraint}) {
+      this.sdkConstraint,
+      this.pubspec}) {
     dir = Directory.systemTemp.createTempSync('a');
-    file('pubspec.yaml', '''
+    file(
+        'pubspec.yaml',
+        pubspec == null
+            ? '''
 name: $name
 environment:
   sdk: '${sdkConstraint ?? '>=2.10.0 <3.0.0'}'
 
 dev_dependencies:
   test: any
-''');
+'''
+            : json.encode(pubspec));
     if (analysisOptions != null) {
       file('analysis_options.yaml', analysisOptions);
     }
diff --git a/pkg/dds/CHANGELOG.md b/pkg/dds/CHANGELOG.md
index 15f499b..cccc7a8 100644
--- a/pkg/dds/CHANGELOG.md
+++ b/pkg/dds/CHANGELOG.md
@@ -1,3 +1,9 @@
+# 2.1.4
+- A new library `package:dds/dap.dart` exposes classes required to build a custom DAP
+  debug-adapter on top of the base Dart DAP functionality in DDS.
+  For more details on DAP support in Dart see
+  [this README](https://github.com/dart-lang/sdk/blob/main/pkg/dds/tool/dap/README.md).
+
 # 2.1.3
 - Ensure cancelling multiple historical streams with the same name doesn't cause an
   asynchronous `StateError` to be thrown.
diff --git a/pkg/dds/lib/src/dap/adapters/dart.dart b/pkg/dds/lib/src/dap/adapters/dart.dart
index cc0e49a..67be4b5 100644
--- a/pkg/dds/lib/src/dap/adapters/dart.dart
+++ b/pkg/dds/lib/src/dap/adapters/dart.dart
@@ -1666,10 +1666,10 @@
     }
   }
 
-  void _logTraffic(String data) {
-    logger?.call(data);
+  void _logTraffic(String message) {
+    logger?.call(message);
     if (sendLogsToClient) {
-      sendEvent(RawEventBody(data), eventType: 'dart.log');
+      sendEvent(RawEventBody({"message": message}), eventType: 'dart.log');
     }
   }
 
@@ -1729,10 +1729,6 @@
   /// Clients may not know about all debug options, so anything not included
   /// in the map will not be updated by this method.
   Future<void> _updateDebugOptions(Map<String, Object?> args) async {
-    // TODO(dantup): Document this - it's a public API we expect to be used
-    //   by editors that can support it (although it will require custom
-    //   code as it's there's no DAP standard for this, or the settings it
-    //   toggles).
     if (args.containsKey('debugSdkLibraries')) {
       _isolateManager.debugSdkLibraries = args['debugSdkLibraries'] as bool;
     }
diff --git a/pkg/dds/pubspec.yaml b/pkg/dds/pubspec.yaml
index a477fca..bafc2dc 100644
--- a/pkg/dds/pubspec.yaml
+++ b/pkg/dds/pubspec.yaml
@@ -3,7 +3,7 @@
   A library used to spawn the Dart Developer Service, used to communicate with
   a Dart VM Service instance.
 
-version: 2.1.3
+version: 2.1.4
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/dds
 
diff --git a/pkg/dds/test/dap/integration/debug_breakpoints_test.dart b/pkg/dds/test/dap/integration/debug_breakpoints_test.dart
index 974380e..8aee55c 100644
--- a/pkg/dds/test/dap/integration/debug_breakpoints_test.dart
+++ b/pkg/dds/test/dap/integration/debug_breakpoints_test.dart
@@ -291,7 +291,7 @@
         ),
       );
 
-      // Step in and expect stopping in the the other package.
+      // Step in and expect stopping in the other package.
       await Future.wait([
         client.expectStop('step', sourceName: '$otherPackageUri'),
         client.stepIn(stop.threadId!),
diff --git a/pkg/dds/test/dap/integration/debug_logging_test.dart b/pkg/dds/test/dap/integration/debug_logging_test.dart
index 27578f5..02685fb 100644
--- a/pkg/dds/test/dap/integration/debug_logging_test.dart
+++ b/pkg/dds/test/dap/integration/debug_logging_test.dart
@@ -5,6 +5,7 @@
 import 'package:test/test.dart';
 
 import 'test_client.dart';
+import 'test_scripts.dart';
 import 'test_support.dart';
 
 main() {
@@ -15,6 +16,33 @@
   tearDown(() => dap.tearDown());
 
   group('debug mode', () {
+    test('sends dart.log events when sendLogsToClient=true', () async {
+      final testFile = dap.createTestFile(simpleArgPrintingProgram);
+
+      final logOutputs = dap.client
+          .events('dart.log')
+          .map((event) => event.body as Map<String, Object?>)
+          .map((body) => body['message'] as String);
+
+      await Future.wait([
+        expectLater(
+          logOutputs,
+          // Check for a known VM Service packet.
+          emitsThrough(
+            contains('"method":"streamListen","params":{"streamId":"Debug"}'),
+          ),
+        ),
+        dap.client.start(
+          file: testFile,
+          launch: () => dap.client.launch(
+            testFile.path,
+            sendLogsToClient: true,
+          ),
+        ),
+      ]);
+      await dap.client.terminate();
+    });
+
     test('prints messages from dart:developer log()', () async {
       final testFile = dap.createTestFile(r'''
 import 'dart:developer';
diff --git a/pkg/dds/test/dap/integration/test_client.dart b/pkg/dds/test/dap/integration/test_client.dart
index 78b145d..66f44da 100644
--- a/pkg/dds/test/dap/integration/test_client.dart
+++ b/pkg/dds/test/dap/integration/test_client.dart
@@ -227,6 +227,7 @@
     bool? debugExternalPackageLibraries,
     bool? evaluateGettersInDebugViews,
     bool? evaluateToStringInDebugViews,
+    bool? sendLogsToClient,
   }) {
     return sendRequest(
       DartLaunchRequestArguments(
@@ -243,7 +244,7 @@
         // When running out of process, VM Service traffic won't be available
         // to the client-side logger, so force logging on which sends VM Service
         // traffic in a custom event.
-        sendLogsToClient: captureVmServiceTraffic,
+        sendLogsToClient: sendLogsToClient ?? captureVmServiceTraffic,
       ),
       // We can't automatically pick the command when using a custom type
       // (DartLaunchRequestArguments).
diff --git a/pkg/dds/tool/dap/README.md b/pkg/dds/tool/dap/README.md
new file mode 100644
index 0000000..216d648
--- /dev/null
+++ b/pkg/dds/tool/dap/README.md
@@ -0,0 +1,172 @@
+# Debug Adapter Protocol
+
+Dart includes support for debugging using [the Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-protocol/) as an alternative to using the [VM Service](https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md) directly, simplying the integration for new editors.
+
+The debug adapters are started with the `dart debug_adapter` command and are intended to be consumed by DAP-compliant tools such as Dart-specific extensions for editors, or configured by users whose editors include generic configurable DAP clients.
+
+Two adapters are available:
+
+- `dart debug_adapter`
+- `dart debug_adapter --test`
+
+The standard adapter will run scripts using `dart` while the `--test` adapter will cause scripts to be run using `dart test` and will emit custom `dart.testNotification` events (described below).
+
+Because in the DAP protocol the client speaks first, running this command from the terminal will result in no output (nor will the process terminate). This is expected behaviour.
+
+For details on the standard DAP functionality, see [the Debug Adapter Protocol Overview](https://microsoft.github.io/debug-adapter-protocol/) and [the Debug Adapter Protocol Specification](https://microsoft.github.io/debug-adapter-protocol/specification). Custom extensions are detailed below.
+
+**Flutter**: To run Flutter apps, the equivalent command should be run through the `flutter` tool. This is unavailable at the time of writing, but details will be linked here once available.
+
+## Launch/Attach Arguments
+
+Arguments common to both `launchRequest` and `attachRequest` are:
+
+- `bool? debugExternalPackageLibraries` - whether to enable debugging for packages that are not inside the current workspace
+- `bool? debugSdkLibraries` - whether to enable debugging for SDK libraries
+- `bool? evaluateGettersInDebugViews` - whether to evaluate getters in expression evaluation requests (inc. hovers/watch windows)
+- `bool? evaluateToStringInDebugViews` - whether to invoke `toString()` in expression evaluation requests (inc. hovers/watch windows)
+- `bool? sendLogsToClient` - used to proxy all VM Service traffic back to the client in custom `dart.log` events (has performance implications, intended for troubleshooting)
+- `int? vmServicePort` - the port to bind the VM Service too
+- `List<String>? additionalProjectPaths` - paths of any projects (outside of `cwd`) that are open in the users workspace
+- `String? cwd` - the working directory for the Dart process to be spawned in
+
+Arguments specific to `launchRequest` are:
+
+- `bool? noDebug` - whether to run in debug or noDebug mode (if not supplied, defaults to debug)
+- `String program` - the path of the Dart program to run
+- `List<String>? args` - arguments to be passed to the Dart program
+- `List<String>? toolArgs` - arguments for the Dart VM
+- `String? console` - if set to `"terminal"` or `"externalTerminal"` will be run using the `runInTerminal` reverse-request; otherwise the debug adapter spawns the Dart process
+- `bool? enableAsserts` - whether to enable asserts (if not supplied, defaults to enabled)
+
+Arguments specific to `attachRequest` are:
+
+- `String vmServiceInfoFile` - the file to read the VM Service info from \*
+- `String vmServiceInfoFile` - the VM Service URI to attach to \*
+
+\* Exactly one of `vmServiceInfoFile` or `vmServiceInfoFile` should be supplied.
+
+## Custom Requests
+
+Some custom requests are available for clients to call.
+
+### `updateDebugOptions`
+
+`updateDebugOptions` allows updating some debug options usually provided at launch/attach while the session is running. Any keys included in the request will overwrite the previously set values. To update only some values, include only those in the parameters.
+
+```
+{
+	"debugSdkLibraries": true
+	"debugExternalPackageLibraries": false
+}
+```
+
+### `callService`
+
+`callService` allows calling arbitrary services (for example service extensions that have been registered). The service RPC/method should be sent in the `method` field and `params` will depend on the service being called.
+
+```
+{
+	"method": "myFooService",
+	"params": {
+		// ...
+	}
+}
+```
+
+## Custom Events
+
+The debug adapter may emit several custom events that are useful to clients.
+
+### `dart.debuggerUris`
+
+When running in debug mode, a `dart.debuggerUris` event will be emitted containing the URI of the VM Service.
+
+```
+{
+	"type": "event",
+	"event": "dart.debuggerUris",
+	"body": {
+		"vmServiceUri": "ws://127.0.0.1:123/abdef123="
+	}
+}
+```
+
+### `dart.log`
+
+When `sendLogsToClient` in the launch/attach arguments is `true`, debug logging and all traffic to the VM Service will be proxied back to the client in `dart.log` events to aid troubleshooting.
+
+```
+{
+	"type": "event",
+	"event": "dart.log",
+	"body": {
+		"message": "<log message or json string>"
+	}
+}
+```
+
+### `dart.serviceRegistered`
+
+Emitted when a VM Service is registered.
+
+```
+{
+	"type": "event",
+	"event": "dart.serviceRegistered",
+	"body": {
+		"service": "ServiceName",
+		"method": "methodName"
+	}
+}
+```
+
+### `dart.serviceUnregistered`
+
+Emitted when a VM Service is unregistered.
+
+```
+{
+	"type": "event",
+	"event": "dart.serviceUnregistered",
+	"body": {
+		"service": "ServiceName",
+		"method": "methodName"
+	}
+}
+```
+
+### `dart.serviceExtensionAdded`
+
+Emitted when a VM Service Extension is added.
+
+```
+{
+	"type": "event",
+	"event": "dart.serviceExtensionAdded",
+	"body": {
+		"extensionRPC": "<extensionRPC to call>",
+		"isolateId": "<isolateId>"
+	}
+}
+```
+
+### `dart.testNotification`
+
+When running the `--test` debug adapter, `package:test` JSON messages will be passed back to the client in a `dart.testNotification` event. For details on this protocol, see the [package:test documentation](https://github.com/dart-lang/test/blob/master/pkgs/test/doc/json_reporter.md).
+
+```
+{
+	"type": "event",
+	"event": "dart.testNotification",
+	"body": {
+		"type": "testStart",
+		"test": {
+			"id": 1,
+			"name": "my test name",
+			// ...
+		}
+	}
+}
+```
+
diff --git a/pkg/dev_compiler/analysis_options.yaml b/pkg/dev_compiler/analysis_options.yaml
index 4c72ad8..c1925c0 100644
--- a/pkg/dev_compiler/analysis_options.yaml
+++ b/pkg/dev_compiler/analysis_options.yaml
@@ -1,10 +1,15 @@
-include: package:pedantic/analysis_options.1.11.0.yaml
+include: package:lints/recommended.yaml
 
 analyzer:
   strong-mode:
     implicit-casts: false
   errors:
     todo: ignore
+    avoid_function_literals_in_foreach_calls: ignore
+    avoid_renaming_method_parameters: ignore
+    constant_identifier_names: ignore
+    implementation_imports: ignore
+    prefer_void_to_null: ignore
   exclude:
     - doc/api/**
     - gen/**
@@ -15,7 +20,10 @@
 
 linter:
   rules:
-    # Not enforced by pedantic at any version.
+    # Not enforced by lints at any version.
+    - always_declare_return_types
     - directives_ordering
-    - prefer_null_aware_operators
-    - prefer_typing_uninitialized_variables
+    - omit_local_variable_types
+    - prefer_single_quotes
+    - prefer_relative_imports
+    - unawaited_futures
diff --git a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
index d9ff9c1..06d5941 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
@@ -322,9 +322,7 @@
   /// Compute fresh IDs to avoid
   static int _uniqueId = 0;
 
-  MetaLetVariable(String displayName)
-      : displayName = displayName,
-        super(displayName + '@${++_uniqueId}');
+  MetaLetVariable(this.displayName) : super(displayName + '@${++_uniqueId}');
 }
 
 class _VariableUseCounter extends BaseVisitor<void> {
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index 922b17f..9761f01 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -5,11 +5,11 @@
 // @dart = 2.9
 
 import 'package:args/args.dart' show ArgParser, ArgResults;
-import 'package:dev_compiler/src/compiler/shared_compiler.dart';
 import 'package:path/path.dart' as p;
 
 import '../js_ast/js_ast.dart';
 import 'js_names.dart';
+import 'shared_compiler.dart';
 
 /// The module format to emit.
 enum ModuleFormat {
diff --git a/pkg/dev_compiler/lib/src/compiler/module_containers.dart b/pkg/dev_compiler/lib/src/compiler/module_containers.dart
index 0040d60..a669e71 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_containers.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_containers.dart
@@ -9,7 +9,7 @@
 import '../js_ast/js_ast.dart' show js;
 
 /// Defines how to emit a value of a table
-typedef _emitValue<K> = js_ast.Expression Function(K, ModuleItemData);
+typedef _EmitValue<K> = js_ast.Expression Function(K, ModuleItemData);
 
 /// Represents a top-level property hoisted to a top-level object.
 class ModuleItemData {
@@ -125,7 +125,7 @@
   /// necessary.
   ///
   /// Uses [emitValue] to emit the values in the table.
-  List<js_ast.Statement> emit({_emitValue<K> emitValue});
+  List<js_ast.Statement> emit({_EmitValue<K> emitValue});
 }
 
 /// Associates a [K] with a container-unique JS key and arbitrary JS value.
@@ -184,7 +184,7 @@
   }
 
   @override
-  List<js_ast.Statement> emit({_emitValue<K> emitValue}) {
+  List<js_ast.Statement> emit({_EmitValue<K> emitValue}) {
     var containersToProperties = <js_ast.Identifier, List<js_ast.Property>>{};
     moduleItems.forEach((k, v) {
       if (!incrementalMode && _noEmit.contains(k)) return;
@@ -240,7 +240,7 @@
   }
 
   @override
-  List<js_ast.Statement> emit({_emitValue<K> emitValue}) {
+  List<js_ast.Statement> emit({_EmitValue<K> emitValue}) {
     var properties = List<js_ast.Expression>.filled(length, null);
 
     // If the entire array holds just one value, generate a short initializer.
diff --git a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
index 49c2ff5..ee52937 100644
--- a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
+++ b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
@@ -28,7 +28,7 @@
 
   /// Holds all top-level JS symbols (used for caching or indexing fields).
   final _symbolContainer = ModuleItemContainer<js_ast.Identifier>.asObject('S',
-      keyToString: (js_ast.Identifier i) => '${i.name}');
+      keyToString: (js_ast.Identifier i) => i.name);
 
   ModuleItemContainer<js_ast.Identifier> get symbolContainer =>
       _symbolContainer;
@@ -191,7 +191,7 @@
   js_ast.Expression emitConstructorAccess(InterfaceType type);
 
   /// When compiling the body of a `operator []=` method, this will be non-null
-  /// and will indicate the the value that should be returned from any `return;`
+  /// and will indicate the value that should be returned from any `return;`
   /// statements.
   js_ast.Identifier get _operatorSetResult {
     var stack = _operatorSetResultStack;
diff --git a/pkg/dev_compiler/lib/src/js_ast/builder.dart b/pkg/dev_compiler/lib/src/js_ast/builder.dart
index 0e0077a..1621087 100644
--- a/pkg/dev_compiler/lib/src/js_ast/builder.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/builder.dart
@@ -4,9 +4,10 @@
 
 // @dart = 2.9
 
-// ignore_for_file: slash_for_doc_comments, unnecessary_new
 // ignore_for_file: always_declare_return_types, prefer_single_quotes
+// ignore_for_file: non_constant_identifier_names
 // ignore_for_file: prefer_collection_literals, omit_local_variable_types
+// ignore_for_file: slash_for_doc_comments, unnecessary_new
 // ignore_for_file: unnecessary_brace_in_string_interps
 
 // Utilities for building JS ASTs at runtime.  Contains a builder class
diff --git a/pkg/dev_compiler/lib/src/js_ast/nodes.dart b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
index d721e6e..8618c7e 100644
--- a/pkg/dev_compiler/lib/src/js_ast/nodes.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
@@ -4,10 +4,11 @@
 
 // @dart = 2.9
 
-// ignore_for_file: slash_for_doc_comments, prefer_single_quotes
 // ignore_for_file: always_declare_return_types, prefer_final_fields
 // ignore_for_file: always_require_non_null_named_parameters
 // ignore_for_file: omit_local_variable_types, unnecessary_this
+// ignore_for_file: prefer_initializing_formals
+// ignore_for_file: slash_for_doc_comments, prefer_single_quotes
 
 part of js_ast;
 
diff --git a/pkg/dev_compiler/lib/src/js_ast/printer.dart b/pkg/dev_compiler/lib/src/js_ast/printer.dart
index c6d7581..ff54cdb 100644
--- a/pkg/dev_compiler/lib/src/js_ast/printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/printer.dart
@@ -4,10 +4,11 @@
 
 // @dart = 2.9
 
-// ignore_for_file: slash_for_doc_comments, unnecessary_const
 // ignore_for_file: always_declare_return_types, prefer_single_quotes
 // ignore_for_file: prefer_collection_literals, omit_local_variable_types
 // ignore_for_file: prefer_final_fields
+// ignore_for_file: prefer_initializing_formals
+// ignore_for_file: slash_for_doc_comments, unnecessary_const
 // ignore_for_file: use_function_type_syntax_for_parameters
 
 part of js_ast;
diff --git a/pkg/dev_compiler/lib/src/js_ast/template.dart b/pkg/dev_compiler/lib/src/js_ast/template.dart
index d421d6a..bcba9f0 100644
--- a/pkg/dev_compiler/lib/src/js_ast/template.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/template.dart
@@ -4,9 +4,10 @@
 
 // @dart = 2.9
 
-// ignore_for_file: slash_for_doc_comments, omit_local_variable_types
 // ignore_for_file: always_declare_return_types, prefer_collection_literals
+// ignore_for_file: avoid_returning_null_for_void
 // ignore_for_file: prefer_single_quotes, prefer_generic_function_type_aliases
+// ignore_for_file: slash_for_doc_comments, omit_local_variable_types
 // ignore_for_file: unnecessary_this
 
 part of js_ast;
diff --git a/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart b/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart
index 54fd3b5..a293c28 100644
--- a/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart
+++ b/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart
@@ -9,9 +9,9 @@
 import 'dart:io';
 
 import 'package:async/async.dart';
-import 'package:dev_compiler/src/kernel/retry_timeout_client.dart';
 import 'package:front_end/src/api_prototype/file_system.dart';
-import 'package:pedantic/pedantic.dart';
+
+import 'retry_timeout_client.dart';
 
 /// A wrapper around asset server that redirects file read requests
 /// to http get requests to the asset server.
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index f55ce1a..ba81acf 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -8,8 +8,7 @@
 import 'dart:convert';
 import 'dart:math' show max, min;
 
-import 'package:front_end/src/fasta/kernel/constructor_tearoff_lowering.dart'
-    show isTearOffLowering;
+import 'package:front_end/src/api_unstable/ddc.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
@@ -1319,7 +1318,7 @@
   /// otherwise define them as lazy properties.
   void _emitStaticFields(Class c, List<js_ast.Statement> body) {
     var fields = c.fields
-        .where((f) => f.isStatic && getRedirectingFactories(f) == null)
+        .where((f) => f.isStatic && !isRedirectingFactoryField(f))
         .toList();
     if (c.isEnum) {
       // We know enum fields can be safely emitted as const fields, as long
@@ -1395,16 +1394,26 @@
     void emitSignature(String name, List<js_ast.Property> elements) {
       if (elements.isEmpty) return;
 
+      js_ast.Statement setSignature;
       if (!name.startsWith('Static')) {
         var proto = c == _coreTypes.objectClass
             ? js.call('Object.create(null)')
             : runtimeCall('get${name}s(#.__proto__)', [className]);
         elements.insert(0, js_ast.Property(propertyName('__proto__'), proto));
+        setSignature = runtimeStatement('set${name}Signature(#, () => #)', [
+          className,
+          js_ast.ObjectInitializer(elements, multiline: elements.length > 1)
+        ]);
+      } else {
+        // TODO(40273) Only tagging with the names of static members until the
+        // debugger consumes signature information from symbol files.
+        setSignature = runtimeStatement('set${name}Signature(#, () => #)', [
+          className,
+          js_ast.ArrayInitializer(elements.map((e) => e.name).toList())
+        ]);
       }
-      body.add(runtimeStatement('set${name}Signature(#, () => #)', [
-        className,
-        js_ast.ObjectInitializer(elements, multiline: elements.length > 1)
-      ]));
+
+      body.add(setSignature);
     }
 
     var extMethods = _classProperties.extensionMethods;
@@ -1416,6 +1425,8 @@
     var staticSetters = <js_ast.Property>[];
     var instanceSetters = <js_ast.Property>[];
     List<js_ast.Property> getSignatureList(Procedure p) {
+      // TODO(40273) Skip for all statics when the debugger consumes signature
+      // information from symbol files.
       if (p.isStatic) {
         if (p.isGetter) {
           return staticGetters;
@@ -1437,9 +1448,14 @@
 
     var classProcedures = c.procedures.where((p) => !p.isAbstract).toList();
     for (var member in classProcedures) {
-      // Static getters/setters/methods cannot be called with dynamic dispatch,
-      // nor can they be torn off.
-      if (member.isStatic) continue;
+      // Static getters/setters cannot be called with dynamic dispatch or torn
+      // off. Static methods can't be called with dynamic dispatch and are
+      // tagged with a type when torn off. Most are implicitly const and
+      // canonicalized. Static signatures are only used by the debugger and are
+      // not needed for runtime correctness.
+      // TODO(40273) Skip for all statics when the debugger consumes signature
+      // information from symbol files.
+      if (isTearOffLowering(member)) continue;
 
       var name = member.name.text;
       var reifiedType = _memberRuntimeType(member, c) as FunctionType;
@@ -1478,6 +1494,8 @@
     }
 
     emitSignature('Method', instanceMethods);
+    // TODO(40273) Skip for all statics when the debugger consumes signature
+    // information from symbol files.
     emitSignature('StaticMethod', staticMethods);
     emitSignature('Getter', instanceGetters);
     emitSignature('Setter', instanceSetters);
@@ -1491,16 +1509,19 @@
 
     var classFields = c.fields.toList();
     for (var field in classFields) {
-      // Only instance fields need to be saved for dynamic dispatch.
-      var isStatic = field.isStatic;
-      if (isStatic) continue;
-
+      // Static fields cannot be called with dynamic dispatch or torn off. The
+      // signatures are only used by the debugger and are not needed for runtime
+      // correctness.
       var memberName = _declareMemberName(field);
       var fieldSig = _emitFieldSignature(field, c);
-      (isStatic ? staticFields : instanceFields)
+      // TODO(40273) Skip static fields when the debugger consumes signature
+      // information from symbol files.
+      (field.isStatic ? staticFields : instanceFields)
           .add(js_ast.Property(memberName, fieldSig));
     }
     emitSignature('Field', instanceFields);
+    // TODO(40273) Skip for all statics when the debugger consumes signature
+    // information from symbol files.
     emitSignature('StaticField', staticFields);
 
     // Add static property dart._runtimeType to Object.
@@ -1831,7 +1852,9 @@
     Set<Member> redirectingFactories;
     for (var m in c.fields) {
       if (m.isStatic) {
-        redirectingFactories ??= getRedirectingFactories(m)?.toSet();
+        if (isRedirectingFactoryField(m)) {
+          redirectingFactories = getRedirectingFactories(m).toSet();
+        }
       } else if (_extensionTypes.isNativeClass(c)) {
         jsMethods.addAll(_emitNativeFieldAccessors(m));
       } else if (virtualFields.containsKey(m)) {
@@ -2006,7 +2029,7 @@
                   superMember.function.positionalParameters[0])) {
         return const [];
       }
-      var setterType = substituteType(superMember.setterType);
+      var setterType = substituteType(superMember.superSetterType);
       if (_types.isTop(setterType)) return const [];
       return [
         js_ast.Method(
@@ -2255,11 +2278,12 @@
 
       // Helper functions to test if a constructor invocation is internal and
       // should be eagerly evaluated.
-      var isInternalConstructor = (ConstructorInvocation node) {
+      bool isInternalConstructor(ConstructorInvocation node) {
         var type = node.getStaticType(_staticTypeContext) as InterfaceType;
         var library = type.classNode.enclosingLibrary;
         return isSdkInternalRuntime(library);
-      };
+      }
+
       for (var field in fields) {
         _staticTypeContext.enterMember(field);
         var init = field.initializer;
@@ -2525,6 +2549,9 @@
       var exportName = _jsExportName(member);
       if (exportName != null) return propertyName(exportName);
     }
+    if (member is Procedure && member.isFactory) {
+      return _constructorName(member.name.text);
+    }
     switch (name) {
       // Reserved for the compiler to do `x as T`.
       case 'as':
@@ -2798,9 +2825,9 @@
       // type arguments are applied.
       if (type.typeParameters.isNotEmpty) return true;
 
-      return (_canEmitTypeAtTopLevel(type.returnType) &&
+      return _canEmitTypeAtTopLevel(type.returnType) &&
           type.positionalParameters.every(_canEmitTypeAtTopLevel) &&
-          type.namedParameters.every((n) => _canEmitTypeAtTopLevel(n.type)));
+          type.namedParameters.every((n) => _canEmitTypeAtTopLevel(n.type));
     }
     if (type is TypedefType) {
       return type.typeArguments.every(_canEmitTypeAtTopLevel);
@@ -3641,6 +3668,7 @@
             _cacheUri(location?.file?.toString()),
             js.number(location?.line ?? -1),
             js.number(location?.column ?? -1),
+            // ignore: unnecessary_string_interpolations
             js.escapedString('${p.name}')
           ])
         ]);
@@ -4803,21 +4831,33 @@
     /// list and the element type is known to be invariant so it can skip the
     /// type check.
     bool isNativeListInvariantAdd(InvocationExpression node) {
-      Expression receiver;
-      if (receiver != null && node.name.text == 'add') {
+      if (node is InstanceInvocation &&
+          node.isInvariant &&
+          node.name.text == 'add') {
         // The call to add is marked as invariant, so the type check on the
         // parameter to add is not needed.
+        var receiver = node.receiver;
         if (receiver is VariableGet &&
             receiver.variable.isFinal &&
             !receiver.variable.isLate) {
           // The receiver is a final variable, so it only contains the
           // initializer value. Also, avoid late variables in case the CFE
           // lowering of late variables is changed in the future.
-          if (receiver.variable.initializer is ListLiteral) {
+          var initializer = receiver.variable.initializer;
+          if (initializer is ListLiteral) {
             // The initializer is a list literal, so we know the list can be
             // grown, modified, and is represented by a JavaScript Array.
             return true;
           }
+          if (initializer is StaticInvocation &&
+              initializer.target.enclosingClass == _coreTypes.listClass &&
+              initializer.target.name.text == 'of' &&
+              initializer.arguments.named.isEmpty) {
+            // The initializer is a `List.of()` call from the dart:core library
+            // and the growable named argument has not been passed (it defaults
+            // to true).
+            return true;
+          }
         }
       }
       return false;
@@ -5044,10 +5084,10 @@
       if (parent.name.text == '&' && parent.arguments.positional.length == 1) {
         var left = getInvocationReceiver(parent);
         var right = parent.arguments.positional[0];
-        final MAX = (1 << width) - 1;
+        final max = (1 << width) - 1;
         if (left != null) {
-          if (_asIntInRange(right, 0, MAX) != null) return true;
-          if (_asIntInRange(left, 0, MAX) != null) return true;
+          if (_asIntInRange(right, 0, max) != null) return true;
+          if (_asIntInRange(left, 0, max) != null) return true;
         }
       }
       return _parentMasksToWidth(parent, width);
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler.dart
index 8d195b3..4e2cd32 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler.dart
@@ -10,10 +10,6 @@
     show Code, Message, PlainAndColorizedString;
 import 'package:_fe_analyzer_shared/src/messages/diagnostic_message.dart'
     show DiagnosticMessage, DiagnosticMessageHandler;
-import 'package:dev_compiler/dev_compiler.dart';
-import 'package:dev_compiler/src/compiler/js_names.dart' as js_ast;
-import 'package:dev_compiler/src/compiler/module_builder.dart';
-import 'package:dev_compiler/src/js_ast/js_ast.dart' as js_ast;
 import 'package:front_end/src/api_unstable/ddc.dart';
 import 'package:kernel/ast.dart'
     show
@@ -36,9 +32,14 @@
         VisitorNullMixin,
         VisitorVoidMixin;
 
+import '../../dev_compiler.dart';
+import '../compiler/js_names.dart' as js_ast;
+import '../compiler/module_builder.dart';
+import '../js_ast/js_ast.dart' as js_ast;
+
 DiagnosticMessage _createInternalError(Uri uri, int line, int col, String msg) {
   return Message(Code<String>('Expression Compiler Internal error'),
-          message: msg)
+          problemMessage: msg)
       .withLocation(uri, 0, 0)
       .withFormatting(PlainAndColorizedString.plainOnly('Internal error: $msg'),
           line, col, Severity.internalProblem, []);
@@ -416,7 +417,7 @@
 
   Future<Library> _getLibrary(Uri libraryUri) async {
     return await _compiler.context.runInContext((_) async {
-      var builder = _compiler.userCode.loader.builders[libraryUri];
+      var builder = _compiler.userCode.loader.lookupLibraryBuilder(libraryUri);
       if (builder != null) {
         var library =
             _compiler.userCode.loader.read(libraryUri, -1, accessor: builder);
@@ -453,7 +454,7 @@
 
     var imports = <js_ast.ModuleItem>[];
     var jsFun = _kernel2jsCompiler.emitFunctionIncremental(imports,
-        scope.library, scope.cls, procedure.function, '$debugProcedureName');
+        scope.library, scope.cls, procedure.function, debugProcedureName);
 
     _log('Generated JavaScript for expression');
 
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
index 6f11aa6..1068a8a 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
@@ -11,9 +11,6 @@
 
 import 'package:args/args.dart';
 import 'package:build_integration/file_system/multi_root.dart';
-import 'package:dev_compiler/dev_compiler.dart';
-import 'package:dev_compiler/src/kernel/target.dart'
-    show sdkLibraryEnvironmentDefines;
 import 'package:front_end/src/api_prototype/file_system.dart';
 import 'package:front_end/src/api_unstable/ddc.dart';
 import 'package:kernel/ast.dart' show Component, Library;
@@ -24,9 +21,11 @@
 import 'package:kernel/target/targets.dart' show TargetFlags;
 import 'package:meta/meta.dart';
 
+import '../../dev_compiler.dart';
 import '../compiler/js_names.dart';
 import 'asset_file_system.dart';
 import 'command.dart';
+import 'target.dart' show sdkLibraryEnvironmentDefines;
 
 /// The service that handles expression compilation requests from
 /// the debugger.
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index 958e4af..44fe33a 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -4,7 +4,6 @@
 
 import 'dart:collection';
 import 'package:collection/collection.dart';
-import 'package:front_end/src/api_unstable/ddc.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
 
@@ -246,18 +245,6 @@
   return false;
 }
 
-/// Returns the redirecting factory constructors for the enclosing class,
-/// if the field [f] is storing that information, otherwise returns `null`.
-Iterable<Member>? getRedirectingFactories(Field f) {
-  // TODO(jmesserly): this relies on implementation details in Kernel
-  if (isRedirectingFactoryField(f)) {
-    assert(f.isStatic);
-    var list = f.initializer as ListLiteral;
-    return list.expressions.map((e) => (e as StaticGet).target);
-  }
-  return null;
-}
-
 /// Gets the real supertype of [c] and the list of [mixins] in reverse
 /// application order (mixins will appear before ones they override).
 ///
diff --git a/pkg/dev_compiler/lib/src/kernel/module_metadata.dart b/pkg/dev_compiler/lib/src/kernel/module_metadata.dart
index 5669874..0ed050a 100644
--- a/pkg/dev_compiler/lib/src/kernel/module_metadata.dart
+++ b/pkg/dev_compiler/lib/src/kernel/module_metadata.dart
@@ -2,9 +2,7 @@
 // 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.
 
-// @dart = 2.9
-
-/// Module metadata format version
+/// Module metadata format version.
 ///
 /// Module reader always creates the current version but is able to read
 /// metadata files with later versions as long as the changes are backward
@@ -22,10 +20,10 @@
     this.patchVersion,
   );
 
-  /// Current metadata version
+  /// The current metadata version.
   ///
-  /// Version follows simple semantic versioning format 'major.minor.patch'
-  /// See https://semver.org
+  /// Version follows simple semantic versioning format 'major.minor.patch'.
+  /// See: https://semver.org
   ///
   /// TODO(annagrin): create metadata package, make version the same as the
   /// metadata package version, automate updating with the package update
@@ -34,7 +32,7 @@
   /// Current metadata version created by the reader
   String get version => '$majorVersion.$minorVersion.$patchVersion';
 
-  /// Is this metadata version compatible with the given version
+  /// True if this metadata version is compatible with [version].
   ///
   /// The minor and patch version changes never remove any fields that current
   /// version supports, so the reader can create current metadata version from
@@ -55,28 +53,27 @@
   }
 }
 
-/// Library metadata
+/// Metadata used by the debugger to describe a library.
 ///
-/// Represents library metadata used in the debugger,
-/// supports reading from and writing to json
+/// Supports reading from and writing to json.
 /// See: https://goto.google.com/dart-web-debugger-metadata
 class LibraryMetadata {
   /// Library name as defined in pubspec.yaml
   final String name;
 
-  /// Library importUri
+  /// URI used to import the library.
   ///
-  /// Example package:path/path.dart
+  /// Example: package:path/path.dart
   final String importUri;
 
-  /// Library fileUri
+  /// File URI for the library.
   ///
-  /// Example file:///path/to/path/path.dart
+  /// Example: file:///path/to/path/path.dart
   final String fileUri;
 
-  /// All file uris from the library
+  /// All file URIs (include part files) from the library.
   ///
-  /// Can be relative paths to the directory of the fileUri
+  /// Can be relative paths to the directory of the fileUri.
   final List<String> partUris;
 
   LibraryMetadata(this.name, this.importUri, this.fileUri, this.partUris);
@@ -98,37 +95,35 @@
   }
 }
 
-/// Module metadata
+/// Metadata used by the debugger to describe a module.
 ///
-/// Represents module metadata used in the debugger,
-/// supports reading from and writing to json
+/// Supports reading from and writing to json.
 /// See: https://goto.google.com/dart-web-debugger-metadata
 class ModuleMetadata {
-  /// Metadata format version
-  String version;
+  /// The version of this metadata.
+  final String version;
 
-  /// Module name
+  /// Name of the js module created by the compiler.
   ///
-  /// Used as a name of the js module created by the compiler and
-  /// as key to store and load modules in the debugger and the browser
+  /// Used as a key to store and load modules in the debugger and the browser.
   final String name;
 
-  /// Name of the function enclosing the module
+  /// Name of the function enclosing the module.
   ///
-  /// Used by debugger to determine the top dart scope
+  /// Used by debugger to determine the top dart scope.
   final String closureName;
 
-  /// Source map uri
+  /// URI of the source map for this module.
   final String sourceMapUri;
 
-  /// Module uri
+  /// URI of the module.
   final String moduleUri;
 
-  /// The uri where DDC wrote a full .dill file for this module.
+  /// The URI where DDC wrote a full .dill file for this module.
   ///
-  /// Can be `null` if the module was compiled without the option to output the
-  /// .dill fle.
-  final String fullDillUri;
+  /// Will be `null` when the module was compiled without the option to output
+  /// the .dill fle.
+  final String? fullDillUri;
 
   final Map<String, LibraryMetadata> libraries = {};
 
@@ -138,22 +133,21 @@
 
   ModuleMetadata(this.name, this.closureName, this.sourceMapUri, this.moduleUri,
       this.fullDillUri, this.soundNullSafety,
-      {this.version}) {
-    version ??= ModuleMetadataVersion.current.version;
-  }
+      {String? version})
+      : version = version ??= ModuleMetadataVersion.current.version;
 
-  /// Add [library] to metadata
+  /// Add [library] to this metadata.
   ///
-  /// Used for filling the metadata in the compiler or for reading from
-  /// stored metadata files.
+  /// Used for filling the metadata in the compiler or for reading from stored
+  /// metadata files.
   void addLibrary(LibraryMetadata library) {
     if (!libraries.containsKey(library.importUri)) {
       libraries[library.importUri] = library;
     } else {
-      throw ('Metadata creation error: '
+      throw 'Metadata creation error: '
           'Cannot add library $library with uri ${library.importUri}: '
           'another library "${libraries[library.importUri]}" is found '
-          'with the same uri');
+          'with the same uri';
     }
   }
 
@@ -165,9 +159,8 @@
         moduleUri = json['moduleUri'] as String,
         fullDillUri = json['fullDillUri'] as String,
         soundNullSafety = json['soundNullSafety'] as bool {
-    var fileVersion = json['version'] as String;
     if (!ModuleMetadataVersion.current.isCompatibleWith(version)) {
-      throw Exception('Unsupported metadata version $fileVersion');
+      throw Exception('Unsupported metadata version $version');
     }
 
     for (var l in json['libraries'] as List<dynamic>) {
diff --git a/pkg/dev_compiler/lib/src/kernel/native_types.dart b/pkg/dev_compiler/lib/src/kernel/native_types.dart
index 5a81641..ef37392 100644
--- a/pkg/dev_compiler/lib/src/kernel/native_types.dart
+++ b/pkg/dev_compiler/lib/src/kernel/native_types.dart
@@ -71,7 +71,6 @@
     _addPendingExtensionTypes(sdk.getLibrary('dart:svg'));
     _addPendingExtensionTypes(sdk.getLibrary('dart:web_audio'));
     _addPendingExtensionTypes(sdk.getLibrary('dart:web_gl'));
-    _addPendingExtensionTypes(sdk.getLibrary('dart:web_sql'));
 
     // For testing purposes only, we add extension types outside the Dart SDK.
     // These are only allowed for native tests (see allowedNativeTest).
diff --git a/pkg/dev_compiler/lib/src/kernel/retry_timeout_client.dart b/pkg/dev_compiler/lib/src/kernel/retry_timeout_client.dart
index dfaa3d9..ce67906 100644
--- a/pkg/dev_compiler/lib/src/kernel/retry_timeout_client.dart
+++ b/pkg/dev_compiler/lib/src/kernel/retry_timeout_client.dart
@@ -8,8 +8,6 @@
 import 'dart:io';
 import 'dart:math';
 
-import 'package:pedantic/pedantic.dart';
-
 /// An HTTP client wrapper that times out connections and requests and
 /// automatically retries failing requests.
 class RetryTimeoutClient {
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 47cd497..7985eb6 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -45,7 +45,6 @@
   'dart.library.ui': 'false',
   'dart.library.web_audio': 'true',
   'dart.library.web_gl': 'true',
-  'dart.library.web_sql': 'true',
 };
 
 /// A kernel [Target] to configure the Dart Front End for dartdevc.
@@ -114,7 +113,6 @@
         'dart:svg',
         'dart:web_audio',
         'dart:web_gl',
-        'dart:web_sql'
       ];
 
   // The libraries required to be indexed via CoreTypes.
@@ -130,7 +128,6 @@
         'dart:svg',
         'dart:web_audio',
         'dart:web_gl',
-        'dart:web_sql',
         'dart:_foreign_helper',
         'dart:_interceptors',
         'dart:_js_helper',
diff --git a/pkg/dev_compiler/pubspec.yaml b/pkg/dev_compiler/pubspec.yaml
index e0271f3..f8e49e9 100644
--- a/pkg/dev_compiler/pubspec.yaml
+++ b/pkg/dev_compiler/pubspec.yaml
@@ -6,8 +6,7 @@
   sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared:
-    path: ../_fe_analyzer_shared
+  _fe_analyzer_shared: any
   _js_interop_checks:
     path: ../_js_interop_checks
   args: any
@@ -21,10 +20,8 @@
     path: ../front_end
   kernel:
     path: ../kernel
-  meta:
-    path: ../meta
+  meta: any
   path: any
-  pedantic: ^1.11.0
   source_maps: any
   source_span: any
 
@@ -32,18 +29,16 @@
   browser_launcher: ^1.0.0
   expect:
     path: ../expect
-  http_multi_server:
-    path: ../../third_party/pkg/http_multi_server
-  js:
-    path: ../js
+  http_multi_server: any
+  js: any
+  lints: ^1.0.0
   modular_test:
     path: ../modular_test
   package_config: any
   sourcemap_testing:
     path: ../sourcemap_testing
   stack_trace: any
-  shelf:
-    path: ../../third_party/pkg/shelf
+  shelf: any
   test: any
   testing:
     path: ../testing
@@ -51,3 +46,14 @@
     path: ../vm
   webkit_inspection_protocol: ^1.0.0
 
+dependency_overrides:
+  _fe_analyzer_shared:
+    path: ../_fe_analyzer_shared
+  js:
+    path: ../js
+  meta:
+    path: ../meta
+  shelf:
+    path: ../../third_party/pkg/shelf
+  http_multi_server:
+    path: ../../third_party/pkg/http_multi_server
diff --git a/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart b/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
index ca481dc..77b6904 100644
--- a/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
@@ -208,17 +208,17 @@
         () async {
       var entity = fileSystem.entityForUri(Uri.parse(_existingFile));
 
-      var elapsedReadAsString = () async {
+      Future<int> elapsedReadAsString() async {
         var stopwatch = Stopwatch()..start();
         await expectLater(entity.readAsString(), isNotNull);
         return stopwatch.elapsedMilliseconds;
-      };
+      }
 
-      var elapsedReadAsBytesAndDecode = () async {
+      Future<int> elapsedReadAsBytesAndDecode() async {
         var stopwatch = Stopwatch()..start();
         await expectLater(utf8.decode(await entity.readAsBytes()), isNotNull);
         return stopwatch.elapsedMilliseconds;
-      };
+      }
 
       await expectLater(await elapsedReadAsString(),
           lessThan(await elapsedReadAsBytesAndDecode()));
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart
index c121403..7eaac57 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart
@@ -520,7 +520,7 @@
       await driver.check(
           breakpointId: 'bp',
           expression: 'typo',
-          expectedError: "Undefined name \'typo\'");
+          expectedError: "Undefined name 'typo'");
     });
 
     test('local', () async {
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
index 8e8f1bf..bc5786d 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
@@ -120,7 +120,7 @@
     var component = await compiler.computeDelta();
     component.computeCanonicalNames();
     // Initialize DDC.
-    var moduleName = '${p.basenameWithoutExtension(output.toFilePath())}';
+    var moduleName = p.basenameWithoutExtension(output.toFilePath());
 
     var classHierarchy = compiler.getClassHierarchy();
     var compilerOptions = SharedCompilerOptions(
@@ -157,7 +157,7 @@
     var codeBytes = utf8.encode(code.code);
     var sourceMapBytes = utf8.encode(json.encode(code.sourceMap));
 
-    File('${output.toFilePath()}').writeAsBytesSync(codeBytes);
+    File(output.toFilePath()).writeAsBytesSync(codeBytes);
     File('${output.toFilePath()}.map').writeAsBytesSync(sourceMapBytes);
 
     // Save the expression evaluator for future evaluations.
@@ -438,7 +438,7 @@
 
     final scriptController = StreamController<wip.ScriptParsedEvent>();
     var scriptSub = debugger.onScriptParsed.listen((event) {
-      if ('${event.script.url}' == '$output') {
+      if (event.script.url == '$output') {
         scriptController.add(event);
       }
     });
@@ -569,7 +569,7 @@
       var response = await connection.runtime
           .getProperties(scope.object, ownProperties: true);
       for (var prop in response) {
-        var propKey = '${prop.name}';
+        var propKey = prop.name;
         var propValue = '${prop.value.value}';
         if (prop.value.type == 'string') {
           propValue = "'$propValue'";
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart
index 4a98206..66db5dd 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart
@@ -218,7 +218,7 @@
   String _normalize(String text) {
     return text
         .replaceAll(RegExp('\'.*foo.dart\''), '\'foo.dart\'')
-        .replaceAll(RegExp('\".*foo.dart\"'), '\'foo.dart\'');
+        .replaceAll(RegExp('".*foo.dart"'), '\'foo.dart\'');
   }
 
   Matcher _matches(String text) {
@@ -281,7 +281,7 @@
                 expression: 'Directory.systemTemp',
                 expectedResult: '''
             (function() {
-              const dart_sdk = ${options.loadModule}(\'dart_sdk\');
+              const dart_sdk = ${options.loadModule}('dart_sdk');
               const io = dart_sdk.io;
               return io.Directory.systemTemp;
             }(
@@ -296,7 +296,7 @@
                 expression: 'p.Directory.systemTemp',
                 expectedResult: '''
             (function() {
-              const dart_sdk = ${options.loadModule}(\'dart_sdk\');
+              const dart_sdk = ${options.loadModule}('dart_sdk');
               const io = dart_sdk.io;
               return io.Directory.systemTemp;
             }(
@@ -313,7 +313,7 @@
                 expression: 'p.utf8.decoder',
                 expectedResult: '''
             (function() {
-              const dart_sdk = ${options.loadModule}(\'dart_sdk\');
+              const dart_sdk = ${options.loadModule}('dart_sdk');
               const convert = dart_sdk.convert;
               return convert.utf8.decoder;
             }(
@@ -543,7 +543,7 @@
                 expression: 'Directory.systemTemp',
                 expectedResult: '''
             (function() {
-              const dart_sdk = ${options.loadModule}(\'dart_sdk\');
+              const dart_sdk = ${options.loadModule}('dart_sdk');
               const io = dart_sdk.io;
               return io.Directory.systemTemp;
             }(
@@ -558,7 +558,7 @@
                 expression: 'p.Directory.systemTemp',
                 expectedResult: '''
             (function() {
-              const dart_sdk = ${options.loadModule}(\'dart_sdk\');
+              const dart_sdk = ${options.loadModule}('dart_sdk');
               const io = dart_sdk.io;
               return io.Directory.systemTemp;
             }(
@@ -575,7 +575,7 @@
                 expression: 'p.utf8.decoder',
                 expectedResult: '''
             (function() {
-              const dart_sdk = ${options.loadModule}(\'dart_sdk\');
+              const dart_sdk = ${options.loadModule}('dart_sdk');
               const convert = dart_sdk.convert;
               return convert.utf8.decoder;
             }(
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_shared.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_shared.dart
index cd8a9ef..a1631cf 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_shared.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_shared.dart
@@ -19,7 +19,6 @@
 import 'package:front_end/src/compute_platform_binaries_location.dart';
 import 'package:http_multi_server/http_multi_server.dart';
 import 'package:path/path.dart' as p;
-import 'package:pedantic/pedantic.dart';
 import 'package:shelf/shelf.dart';
 import 'package:shelf/shelf_io.dart';
 import 'package:test/test.dart';
@@ -1008,7 +1007,7 @@
       if (config.soundNullSafety) '--sound-null-safety',
       if (!config.soundNullSafety) '--no-sound-null-safety',
       '--modules',
-      '${config.moduleFormat}',
+      config.moduleFormat,
     ];
 
     var exitCode = await runProcess(dart, args, config.rootPath);
@@ -1037,7 +1036,7 @@
       if (config.soundNullSafety) '--sound-null-safety',
       if (!config.soundNullSafety) '--no-sound-null-safety',
       '--modules',
-      '${config.moduleFormat}',
+      config.moduleFormat,
     ];
 
     exitCode = await runProcess(dart, args, config.rootPath);
@@ -1069,7 +1068,7 @@
       if (config.soundNullSafety) '--sound-null-safety',
       if (!config.soundNullSafety) '--no-sound-null-safety',
       '--modules',
-      '${config.moduleFormat}',
+      config.moduleFormat,
     ];
 
     exitCode = await runProcess(dart, args, config.rootPath);
@@ -1104,7 +1103,7 @@
       if (config.soundNullSafety) '--sound-null-safety',
       if (!config.soundNullSafety) '--no-sound-null-safety',
       '--modules',
-      '${config.moduleFormat}',
+      config.moduleFormat,
     ];
 
     return await runProcess(dart, args, config.rootPath);
diff --git a/pkg/dev_compiler/test/modular_suite.dart b/pkg/dev_compiler/test/modular_suite.dart
index fde41a3..77ee34f 100644
--- a/pkg/dev_compiler/test/modular_suite.dart
+++ b/pkg/dev_compiler/test/modular_suite.dart
@@ -128,11 +128,11 @@
         '${toUri(sdkModule, dillId)}',
         '--exclude-non-sources',
       ],
-      ...(transitiveDependencies
+      ...transitiveDependencies
           .where((m) => !m.isSdk)
-          .expand((m) => ['--input-summary', '${toUri(m, dillId)}'])),
-      ...(sources.expand((String uri) => ['--source', uri])),
-      ...(flags.expand((String flag) => ['--enable-experiment', flag])),
+          .expand((m) => ['--input-summary', '${toUri(m, dillId)}']),
+      ...sources.expand((String uri) => ['--source', uri]),
+      ...flags.expand((String flag) => ['--enable-experiment', flag]),
     ];
 
     var result =
@@ -211,9 +211,9 @@
       ...sources,
       ...extraArgs,
       for (String flag in flags) '--enable-experiment=$flag',
-      ...(transitiveDependencies
+      ...transitiveDependencies
           .where((m) => !m.isSdk)
-          .expand((m) => ['-s', '${toUri(m, dillId)}=${m.name}'])),
+          .expand((m) => ['-s', '${toUri(m, dillId)}=${m.name}']),
       '-o',
       '$output',
     ];
diff --git a/pkg/dev_compiler/test/modular_suite_nnbd.dart b/pkg/dev_compiler/test/modular_suite_nnbd.dart
index e00e185..2cba274 100644
--- a/pkg/dev_compiler/test/modular_suite_nnbd.dart
+++ b/pkg/dev_compiler/test/modular_suite_nnbd.dart
@@ -126,15 +126,15 @@
         '${toUri(sdkModule, dillId)}',
         '--exclude-non-sources',
       ],
-      ...(transitiveDependencies
+      ...transitiveDependencies
           .where((m) => !m.isSdk)
-          .expand((m) => ['--input-summary', '${toUri(m, dillId)}'])),
-      ...(sources.expand((String uri) => ['--source', uri])),
+          .expand((m) => ['--input-summary', '${toUri(m, dillId)}']),
+      ...sources.expand((String uri) => ['--source', uri]),
       // TODO(40266) After unfork of dart:_runtime only need experiment when
       // compiling SDK. For now always use the Null Safety experiment.
       '--enable-experiment',
       'non-nullable',
-      ...(flags.expand((String flag) => ['--enable-experiment', flag])),
+      ...flags.expand((String flag) => ['--enable-experiment', flag]),
     ];
 
     var result =
@@ -215,9 +215,9 @@
       '--enable-experiment',
       'non-nullable',
       for (String flag in flags) '--enable-experiment=$flag',
-      ...(transitiveDependencies
+      ...transitiveDependencies
           .where((m) => !m.isSdk)
-          .expand((m) => ['-s', '${toUri(m, dillId)}=${m.name}'])),
+          .expand((m) => ['-s', '${toUri(m, dillId)}=${m.name}']),
       '-o',
       '$output',
     ];
diff --git a/pkg/dev_compiler/test/module_metadata_test.dart b/pkg/dev_compiler/test/module_metadata_test.dart
index 9d6c862..e3a74e0 100644
--- a/pkg/dev_compiler/test/module_metadata_test.dart
+++ b/pkg/dev_compiler/test/module_metadata_test.dart
@@ -2,19 +2,17 @@
 // 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.
 
-// @dart = 2.9
-
 import 'dart:convert';
 import 'dart:io';
 
 import 'package:dev_compiler/src/kernel/module_metadata.dart';
 import 'package:test/test.dart';
 
-// Test creating, reading and writing debugger metadata
+/// Test creating, reading and writing debugger metadata.
 void main() {
   group('Module metadata', () {
-    Directory tempDir;
-    File file;
+    late Directory tempDir;
+    late File file;
 
     setUpAll(() {
       var systemTempDir = Directory.systemTemp;
@@ -28,16 +26,16 @@
     });
 
     test('create, write, and read', () async {
-      // create metadata
+      // Create metadata.
       var version = ModuleMetadataVersion.current.version;
       var module = createMetadata(version);
       testMetadataFields(module, version);
 
-      // write metadata
+      // Write metadata.
       file.writeAsBytesSync(utf8.encode(json.encode(module)));
       expect(file.existsSync(), true);
 
-      // read metadata
+      // Read metadata.
       var moduleJson = json.decode(utf8.decode(file.readAsBytesSync()));
       var newModule =
           ModuleMetadata.fromJson(moduleJson as Map<String, dynamic>);
@@ -45,7 +43,7 @@
     });
 
     test('read later backward-compatible patch version', () async {
-      // create metadata with next patch version
+      // Create metadata with next patch version.
       var version = ModuleMetadataVersion(
               ModuleMetadataVersion.current.majorVersion,
               ModuleMetadataVersion.current.minorVersion,
@@ -54,11 +52,11 @@
 
       var module = createMetadata(version);
 
-      // write metadata
+      // Write metadata.
       file.writeAsBytesSync(utf8.encode(json.encode(module)));
       expect(file.existsSync(), true);
 
-      // read metadata
+      // Read metadata.
       var moduleJson = json.decode(utf8.decode(file.readAsBytesSync()));
       var newModule =
           ModuleMetadata.fromJson(moduleJson as Map<String, dynamic>);
@@ -66,7 +64,7 @@
     });
 
     test('read later backward-compatible minor version', () async {
-      // create metadata with next minor version
+      // Create metadata with next minor version.
       var version = ModuleMetadataVersion(
               ModuleMetadataVersion.current.majorVersion,
               ModuleMetadataVersion.current.minorVersion + 1,
@@ -74,11 +72,11 @@
           .version;
       var module = createMetadata(version);
 
-      // write metadata
+      // Write metadata.
       file.writeAsBytesSync(utf8.encode(json.encode(module)));
       expect(file.existsSync(), true);
 
-      // read metadata
+      // Read metadata.
       var moduleJson = json.decode(utf8.decode(file.readAsBytesSync()));
       var newModule =
           ModuleMetadata.fromJson(moduleJson as Map<String, dynamic>);
@@ -86,7 +84,7 @@
     });
 
     test('fail to read later non-backward-compatible major version', () async {
-      // create metadata with next minor version
+      // Create metadata with next minor version.
       var version = ModuleMetadataVersion(
               ModuleMetadataVersion.current.majorVersion + 1,
               ModuleMetadataVersion.current.minorVersion + 1,
@@ -94,13 +92,13 @@
           .version;
       var module = createMetadata(version);
 
-      // write metadata
+      // Write metadata.
       file.writeAsBytesSync(utf8.encode(json.encode(module)));
       expect(file.existsSync(), true);
 
-      // try read metadata, expect to fail
+      // Try read metadata, expect to fail.
       var moduleJson = json.decode(utf8.decode(file.readAsBytesSync()));
-      ModuleMetadata newModule;
+      ModuleMetadata? newModule;
       try {
         newModule = ModuleMetadata.fromJson(moduleJson as Map<String, dynamic>);
       } catch (e) {
@@ -120,7 +118,7 @@
       'file:///source/library/lib/test.dart', ['src/test2.dart']));
 
 void testMetadataFields(ModuleMetadata module, String version) {
-  // reader always creates current metadata version
+  // Reader always creates current metadata version.
   expect(module.version, version);
   expect(module.name, 'module');
   expect(module.closureName, 'closure');
@@ -130,8 +128,7 @@
   expect(module.soundNullSafety, true);
 
   var libUri = module.libraries.keys.first;
-  var lib = module.libraries[libUri];
-
+  var lib = module.libraries[libUri]!;
   expect(libUri, 'package:library/test.dart');
   expect(lib.name, 'library');
   expect(lib.importUri, 'package:library/test.dart');
diff --git a/pkg/dev_compiler/test/module_symbols/class_symbols_test.dart b/pkg/dev_compiler/test/module_symbols/class_symbols_test.dart
index 7d89f6d0..e1af8a8 100644
--- a/pkg/dev_compiler/test/module_symbols/class_symbols_test.dart
+++ b/pkg/dev_compiler/test/module_symbols/class_symbols_test.dart
@@ -451,7 +451,7 @@
           ${options.dartLangComment}
 
           class A {
-            String get publicInstanceGetter() => 'Fosse';
+            String get publicInstanceGetter => 'Fosse';
           }
           ''';
         setUpAll(() async {
@@ -484,7 +484,7 @@
           ${options.dartLangComment}
 
           class A {
-            String get _privateInstanceGetter() => 'Fosse';
+            String get _privateInstanceGetter => 'Fosse';
           }
           ''';
         setUpAll(() async {
@@ -517,7 +517,8 @@
           ${options.dartLangComment}
 
           class A {
-            var _value
+            var _value;
+            A(this._value);
             set publicInstanceSetter(String v) => _value = v;
           }
           ''';
@@ -551,7 +552,8 @@
           ${options.dartLangComment}
 
           class A {
-            var _value
+            var _value;
+            A(this._value);
             set _privateInstanceSetter(String v) => _value = v;
           }
           ''';
@@ -585,7 +587,7 @@
           ${options.dartLangComment}
 
           class A {
-            static String get publicStaticGetter() => 'Fosse';
+            static String get publicStaticGetter => 'Fosse';
           }
           ''';
         setUpAll(() async {
@@ -618,7 +620,7 @@
           ${options.dartLangComment}
 
           class A {
-            static String get _privateStaticGetter() => 'Fosse';
+            static String get _privateStaticGetter => 'Fosse';
           }
           ''';
         setUpAll(() async {
@@ -651,7 +653,7 @@
           ${options.dartLangComment}
 
           class A {
-            var _value;
+            static String _value = 'Cello';
             static set publicStaticSetter(String v) => _value = v;
           }
           ''';
@@ -685,7 +687,7 @@
           ${options.dartLangComment}
 
           class A {
-            var _value;
+            static String _value = 'Cello';
             static set _privateStaticSetter(String v) => _value = v;
           }
           ''';
diff --git a/pkg/dev_compiler/test/module_symbols/module_symbols_test_shared.dart b/pkg/dev_compiler/test/module_symbols/module_symbols_test_shared.dart
index 13bdd4a..4fb6eb6 100644
--- a/pkg/dev_compiler/test/module_symbols/module_symbols_test_shared.dart
+++ b/pkg/dev_compiler/test/module_symbols/module_symbols_test_shared.dart
@@ -23,6 +23,10 @@
     var compiler = DevelopmentIncrementalCompiler(setup.options, input);
     var component = await compiler.computeDelta();
     component.computeCanonicalNames();
+    var errors = setup.errors.where((e) => e.contains('Error'));
+    if (errors.isNotEmpty) {
+      throw Exception('Compilation failed: \n${errors.join('\n')}');
+    }
 
     // Initialize DDC.
     var moduleName = 'foo.dart';
@@ -93,6 +97,7 @@
 
   void cleanUp() {
     tempDir.delete(recursive: true);
+    options.errors.clear();
   }
 }
 
diff --git a/pkg/dev_compiler/test/module_symbols/variable_symbols_test.dart b/pkg/dev_compiler/test/module_symbols/variable_symbols_test.dart
index f74b54c..64b3e57 100644
--- a/pkg/dev_compiler/test/module_symbols/variable_symbols_test.dart
+++ b/pkg/dev_compiler/test/module_symbols/variable_symbols_test.dart
@@ -96,7 +96,9 @@
         final source = '''
           ${options.dartLangComment}
 
-          class A {}
+          class A {
+            const A();
+          }
           const localVariable = A();
           ''';
         setUpAll(() async {
diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart
index da8d7c6..901ca21 100644
--- a/pkg/dev_compiler/test/nullable_inference_test.dart
+++ b/pkg/dev_compiler/test/nullable_inference_test.dart
@@ -530,7 +530,7 @@
 /// Given the Dart [code], expects all the expressions inferred to be not-null.
 Future expectAllNotNull(String code) async {
   code = '// @dart = 2.9\n$code';
-  var result = (await kernelCompile(code));
+  var result = await kernelCompile(code);
   result.component.accept(ExpectAllNotNull(result.librariesFromDill));
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/multiple_debugger_calls.dart b/pkg/dev_compiler/test/sourcemap/testfiles/multiple_debugger_calls.dart
index f976b63..7ce45b4 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/multiple_debugger_calls.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/multiple_debugger_calls.dart
@@ -30,4 +30,4 @@
   foo(/*s:8*/ debugger());
 }
 
-void foo(bool _) => null;
+void foo(bool _) {}
diff --git a/pkg/dev_compiler/test/sourcemap/testing.json b/pkg/dev_compiler/test/sourcemap/testing.json
index 03c2722..5f6e6a8 100644
--- a/pkg/dev_compiler/test/sourcemap/testing.json
+++ b/pkg/dev_compiler/test/sourcemap/testing.json
@@ -2,7 +2,7 @@
 "":"Copyright (c) 2017, 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.md file.",
-  "packages": "../../../../.packages",
+  "packages": "../../../../.dart_tool/package_config.json",
   "suites": [
     {
       "name": "sourcemaps_ddk",
diff --git a/pkg/dev_compiler/test/worker/worker_test.dart b/pkg/dev_compiler/test/worker/worker_test.dart
index b03c32f..84111ba 100644
--- a/pkg/dev_compiler/test/worker/worker_test.dart
+++ b/pkg/dev_compiler/test/worker/worker_test.dart
@@ -378,7 +378,7 @@
 }
 
 Future<WorkResponse> _readResponse(MessageGrouper messageGrouper) async {
-  var buffer = (await messageGrouper.next) as List<int>;
+  var buffer = await messageGrouper.next as List<int>;
   try {
     return WorkResponse.fromBuffer(buffer);
   } catch (_) {
diff --git a/pkg/expect/pubspec.yaml b/pkg/expect/pubspec.yaml
index f84f8c9..70c2817 100644
--- a/pkg/expect/pubspec.yaml
+++ b/pkg/expect/pubspec.yaml
@@ -12,5 +12,8 @@
   sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
-  meta:
-    path: ../meta
+  meta: any
+
+dependency_overrides:
+ meta:
+  path: ../meta
diff --git a/pkg/front_end/lib/src/api_prototype/compiler_options.dart b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
index 370f581..e1b7997 100644
--- a/pkg/front_end/lib/src/api_prototype/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -55,8 +55,8 @@
   ///
   /// A libraries specification file is a JSON file that describes how to map
   /// `dart:*` libraries to URIs in the underlying [fileSystem].  See
-  /// `package:front_end/src/base/libraries_specification.dart` for details on
-  /// the format.
+  /// `package:_fe_analyzer_shared/src/util/libraries_specification.dart` for
+  /// details on the format.
   ///
   /// If a value is not specified and `compileSdk = true`, the compiler will
   /// infer at a default location under [sdkRoot], typically under
@@ -126,6 +126,8 @@
   Map<ExperimentalFlag, Version>? experimentEnabledVersionForTesting;
   Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting;
 
+  bool enableUnscheduledExperiments = false;
+
   /// Environment map used when evaluating `bool.fromEnvironment`,
   /// `int.fromEnvironment` and `String.fromEnvironment` during constant
   /// evaluation. If the map is `null`, all environment constants will be left
@@ -357,6 +359,9 @@
     if (currentSdkVersion != other.currentSdkVersion) return false;
     if (emitDeps != other.emitDeps) return false;
     if (!equalSets(invocationModes, other.invocationModes)) return false;
+    if (enableUnscheduledExperiments != other.enableUnscheduledExperiments) {
+      return false;
+    }
 
     return true;
   }
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index ca19764..4102f5a 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -15,13 +15,16 @@
   constantUpdate2018,
   constructorTearoffs,
   controlFlowCollections,
+  enhancedEnums,
   extensionMethods,
   extensionTypes,
   genericMetadata,
+  namedArgumentsAnywhere,
   nonNullable,
   nonfunctionTypeAliases,
   setLiterals,
   spreadCollections,
+  superParameters,
   testExperiment,
   tripleShift,
   valueClass,
@@ -34,13 +37,16 @@
 const Version enableConstantUpdate2018Version = const Version(2, 0);
 const Version enableConstructorTearoffsVersion = const Version(2, 15);
 const Version enableControlFlowCollectionsVersion = const Version(2, 0);
+const Version enableEnhancedEnumsVersion = const Version(2, 15);
 const Version enableExtensionMethodsVersion = const Version(2, 6);
 const Version enableExtensionTypesVersion = const Version(2, 15);
 const Version enableGenericMetadataVersion = const Version(2, 14);
+const Version enableNamedArgumentsAnywhereVersion = const Version(2, 15);
 const Version enableNonNullableVersion = const Version(2, 12);
 const Version enableNonfunctionTypeAliasesVersion = const Version(2, 13);
 const Version enableSetLiteralsVersion = const Version(2, 0);
 const Version enableSpreadCollectionsVersion = const Version(2, 0);
+const Version enableSuperParametersVersion = const Version(2, 15);
 const Version enableTestExperimentVersion = const Version(2, 15);
 const Version enableTripleShiftVersion = const Version(2, 14);
 const Version enableValueClassVersion = const Version(2, 15);
@@ -58,12 +64,16 @@
       return ExperimentalFlag.constructorTearoffs;
     case "control-flow-collections":
       return ExperimentalFlag.controlFlowCollections;
+    case "enhanced-enums":
+      return ExperimentalFlag.enhancedEnums;
     case "extension-methods":
       return ExperimentalFlag.extensionMethods;
     case "extension-types":
       return ExperimentalFlag.extensionTypes;
     case "generic-metadata":
       return ExperimentalFlag.genericMetadata;
+    case "named-arguments-anywhere":
+      return ExperimentalFlag.namedArgumentsAnywhere;
     case "non-nullable":
       return ExperimentalFlag.nonNullable;
     case "nonfunction-type-aliases":
@@ -72,6 +82,8 @@
       return ExperimentalFlag.setLiterals;
     case "spread-collections":
       return ExperimentalFlag.spreadCollections;
+    case "super-parameters":
+      return ExperimentalFlag.superParameters;
     case "test-experiment":
       return ExperimentalFlag.testExperiment;
     case "triple-shift":
@@ -90,13 +102,16 @@
   ExperimentalFlag.constantUpdate2018: true,
   ExperimentalFlag.constructorTearoffs: true,
   ExperimentalFlag.controlFlowCollections: true,
+  ExperimentalFlag.enhancedEnums: false,
   ExperimentalFlag.extensionMethods: true,
   ExperimentalFlag.extensionTypes: false,
   ExperimentalFlag.genericMetadata: true,
+  ExperimentalFlag.namedArgumentsAnywhere: false,
   ExperimentalFlag.nonNullable: true,
   ExperimentalFlag.nonfunctionTypeAliases: true,
   ExperimentalFlag.setLiterals: true,
   ExperimentalFlag.spreadCollections: true,
+  ExperimentalFlag.superParameters: false,
   ExperimentalFlag.testExperiment: false,
   ExperimentalFlag.tripleShift: true,
   ExperimentalFlag.valueClass: false,
@@ -109,13 +124,16 @@
   ExperimentalFlag.constantUpdate2018: true,
   ExperimentalFlag.constructorTearoffs: false,
   ExperimentalFlag.controlFlowCollections: true,
+  ExperimentalFlag.enhancedEnums: false,
   ExperimentalFlag.extensionMethods: false,
   ExperimentalFlag.extensionTypes: false,
   ExperimentalFlag.genericMetadata: false,
+  ExperimentalFlag.namedArgumentsAnywhere: false,
   ExperimentalFlag.nonNullable: false,
   ExperimentalFlag.nonfunctionTypeAliases: false,
   ExperimentalFlag.setLiterals: true,
   ExperimentalFlag.spreadCollections: true,
+  ExperimentalFlag.superParameters: false,
   ExperimentalFlag.testExperiment: false,
   ExperimentalFlag.tripleShift: false,
   ExperimentalFlag.valueClass: false,
@@ -128,13 +146,16 @@
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
   ExperimentalFlag.constructorTearoffs: const Version(2, 15),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
+  ExperimentalFlag.enhancedEnums: const Version(2, 15),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
   ExperimentalFlag.extensionTypes: const Version(2, 15),
   ExperimentalFlag.genericMetadata: const Version(2, 14),
+  ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 15),
   ExperimentalFlag.nonNullable: const Version(2, 12),
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
   ExperimentalFlag.setLiterals: const Version(2, 0),
   ExperimentalFlag.spreadCollections: const Version(2, 0),
+  ExperimentalFlag.superParameters: const Version(2, 15),
   ExperimentalFlag.testExperiment: const Version(2, 15),
   ExperimentalFlag.tripleShift: const Version(2, 14),
   ExperimentalFlag.valueClass: const Version(2, 15),
@@ -147,13 +168,16 @@
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
   ExperimentalFlag.constructorTearoffs: const Version(2, 15),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
+  ExperimentalFlag.enhancedEnums: const Version(2, 15),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
   ExperimentalFlag.extensionTypes: const Version(2, 15),
   ExperimentalFlag.genericMetadata: const Version(2, 14),
+  ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 15),
   ExperimentalFlag.nonNullable: const Version(2, 10),
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
   ExperimentalFlag.setLiterals: const Version(2, 0),
   ExperimentalFlag.spreadCollections: const Version(2, 0),
+  ExperimentalFlag.superParameters: const Version(2, 15),
   ExperimentalFlag.testExperiment: const Version(2, 15),
   ExperimentalFlag.tripleShift: const Version(2, 14),
   ExperimentalFlag.valueClass: const Version(2, 15),
diff --git a/pkg/front_end/lib/src/api_unstable/dart2js.dart b/pkg/front_end/lib/src/api_unstable/dart2js.dart
index e811ba1..18d185d 100644
--- a/pkg/front_end/lib/src/api_unstable/dart2js.dart
+++ b/pkg/front_end/lib/src/api_unstable/dart2js.dart
@@ -12,6 +12,9 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show StringToken;
 
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart'
+    show LibrariesSpecification;
+
 import 'package:kernel/kernel.dart' show Component;
 
 import 'package:kernel/ast.dart' as ir;
@@ -29,8 +32,6 @@
 
 import '../base/processed_options.dart' show ProcessedOptions;
 
-import '../base/libraries_specification.dart' show LibrariesSpecification;
-
 import '../base/nnbd_mode.dart' show NnbdMode;
 
 import '../fasta/compiler_context.dart' show CompilerContext;
diff --git a/pkg/front_end/lib/src/api_unstable/ddc.dart b/pkg/front_end/lib/src/api_unstable/ddc.dart
index 23e1784..0d7c334 100644
--- a/pkg/front_end/lib/src/api_unstable/ddc.dart
+++ b/pkg/front_end/lib/src/api_unstable/ddc.dart
@@ -64,8 +64,15 @@
 
 export '../fasta/incremental_compiler.dart' show IncrementalCompiler;
 
+export '../fasta/kernel/constructor_tearoff_lowering.dart'
+    show isTearOffLowering;
+
 export '../fasta/kernel/redirecting_factory_body.dart'
-    show RedirectingFactoryBody, isRedirectingFactoryField, redirectingName;
+    show
+        getRedirectingFactories,
+        RedirectingFactoryBody,
+        isRedirectingFactoryField,
+        redirectingName;
 
 export '../fasta/type_inference/type_schema_environment.dart'
     show TypeSchemaEnvironment;
diff --git a/pkg/front_end/lib/src/api_unstable/vm.dart b/pkg/front_end/lib/src/api_unstable/vm.dart
index e981bd3..141014c 100644
--- a/pkg/front_end/lib/src/api_unstable/vm.dart
+++ b/pkg/front_end/lib/src/api_unstable/vm.dart
@@ -54,8 +54,9 @@
         messageFfiExpectedConstant,
         messageFfiLeafCallMustNotReturnHandle,
         messageFfiLeafCallMustNotTakeHandle,
+        messageFfiNativeMustBeExternal,
+        messageFfiNativeOnlyNativeFieldWrapperClassCanBePointer,
         messageFfiPackedAnnotationAlignment,
-        messageFfiNativeAnnotationMustAnnotateStatic,
         messageNonPositiveArrayDimensions,
         noLength,
         templateFfiDartTypeMismatch,
@@ -69,6 +70,8 @@
         templateFfiFieldInitializer,
         templateFfiFieldNoAnnotation,
         templateFfiFieldNull,
+        templateFfiNativeUnexpectedNumberOfParameters,
+        templateFfiNativeUnexpectedNumberOfParametersWithReceiver,
         templateFfiNotStatic,
         templateFfiPackedAnnotation,
         templateFfiPackedNestingNonPacked,
diff --git a/pkg/front_end/lib/src/base/command_line_options.dart b/pkg/front_end/lib/src/base/command_line_options.dart
index 46aabec..a8c7e9b 100644
--- a/pkg/front_end/lib/src/base/command_line_options.dart
+++ b/pkg/front_end/lib/src/base/command_line_options.dart
@@ -29,6 +29,8 @@
   static const String compileSdk = "--compile-sdk";
   static const String dumpIr = "--dump-ir";
   static const String enableExperiment = "--enable-experiment";
+  static const String enableUnscheduledExperiments =
+      "--enable-unscheduled-experiments";
   static const String excludeSource = "--exclude-source";
   static const String omitPlatform = "--omit-platform";
   static const String fatal = "--fatal";
@@ -59,6 +61,8 @@
       const Option(Flags.dumpIr, const BoolValue(false));
   static const Option<List<String>?> enableExperiment =
       const Option(Flags.enableExperiment, const StringListValue());
+  static const Option<bool> enableUnscheduledExperiments =
+      const Option(Flags.enableUnscheduledExperiments, const BoolValue(false));
   static const Option<bool> excludeSource =
       const Option(Flags.excludeSource, const BoolValue(false));
   static const Option<bool> omitPlatform =
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index e6a3ec0..b1377c6 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -8,6 +8,12 @@
 
 import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
 
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart'
+    show
+        LibrariesSpecification,
+        LibrariesSpecificationException,
+        TargetLibrariesSpecification;
+
 import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
 
 import 'package:kernel/kernel.dart'
@@ -70,12 +76,6 @@
 
 import '../fasta/uri_translator.dart' show UriTranslator;
 
-import 'libraries_specification.dart'
-    show
-        LibrariesSpecification,
-        LibrariesSpecificationException,
-        TargetLibrariesSpecification;
-
 import 'nnbd_mode.dart';
 
 /// All options needed for the front end implementation.
@@ -186,6 +186,8 @@
 
   bool get warnOnReachabilityCheck => _raw.warnOnReachabilityCheck;
 
+  bool get enableUnscheduledExperiments => _raw.enableUnscheduledExperiments;
+
   /// The entry-points provided to the compiler.
   final List<Uri> inputs;
 
@@ -249,7 +251,7 @@
       if (_raw.skipForDebugging < 0) {
         print(templateDebugTrace
             .withArguments("$severity", "${StackTrace.current}")
-            .message);
+            .problemMessage);
       } else {
         throw new DebugAbort(
             message.uri, message.charOffset, severity, StackTrace.current);
@@ -604,7 +606,7 @@
       // We throw a new exception to ensure that the message include the uri
       // that led to the exception. Exceptions in Uri don't include the
       // offending uri in the exception message.
-      throw new ArgumentError(message.message);
+      throw new ArgumentError(message.problemMessage);
     }
     return null;
   }
@@ -727,7 +729,7 @@
         // We throw a new exception to ensure that the message include the uri
         // that led to the exception. Exceptions in Uri don't include the
         // offending uri in the exception message.
-        throw new ArgumentError(message.message);
+        throw new ArgumentError(message.problemMessage);
       }
     }
 
diff --git a/pkg/front_end/lib/src/compute_platform_binaries_location.dart b/pkg/front_end/lib/src/compute_platform_binaries_location.dart
index 96039c4..c849e08 100644
--- a/pkg/front_end/lib/src/compute_platform_binaries_location.dart
+++ b/pkg/front_end/lib/src/compute_platform_binaries_location.dart
@@ -41,9 +41,9 @@
     case 'dart2js':
       switch (nnbdMode) {
         case NnbdMode.Strong:
-          return 'dart2js_nnbd_strong_platform.dill';
-        case NnbdMode.Weak:
           return 'dart2js_platform.dill';
+        case NnbdMode.Weak:
+          return 'dart2js_platform_unsound.dill';
         case NnbdMode.Agnostic:
           break;
       }
@@ -51,9 +51,9 @@
     case 'dart2js_server':
       switch (nnbdMode) {
         case NnbdMode.Strong:
-          return 'dart2js_server_nnbd_strong_platform.dill';
-        case NnbdMode.Weak:
           return 'dart2js_server_platform.dill';
+        case NnbdMode.Weak:
+          return 'dart2js_server_platform_unsound.dill';
         case NnbdMode.Agnostic:
           break;
       }
diff --git a/pkg/front_end/lib/src/fasta/TESTING.md b/pkg/front_end/lib/src/fasta/TESTING.md
index e89d5c9..6837c2f 100644
--- a/pkg/front_end/lib/src/fasta/TESTING.md
+++ b/pkg/front_end/lib/src/fasta/TESTING.md
@@ -26,10 +26,10 @@
 
 ```
 # Unit tests for dart2js
-./tools/test.py --dart2js-batch --time -pcolor --report -aia32 -mrelease --checked dart2js
+./tools/test.py --time -pcolor --report -aia32 -mrelease --checked dart2js
 
 # Language and co19, dart2js.
-./tools/test.py --dart2js-batch --time -pcolor --report -aia32 -mrelease -cdart2js -rd8 language co19
+./tools/test.py --time -pcolor --report -aia32 -mrelease -cdart2js -rd8 language co19
 ```
 
 ## Testing the Dart VM
diff --git a/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart
index e87af39..ce5ed5b 100644
--- a/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart
@@ -26,13 +26,12 @@
 
   @override
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     return type.withDeclaredNullability(nullabilityBuilder.build(library));
   }
 
   @override
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return type.withDeclaredNullability(nullability);
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index e893019..c8ffab5 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -168,8 +168,7 @@
   InterfaceType rawType(Nullability nullability);
 
   List<DartType> buildTypeArguments(
-      LibraryBuilder library, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext});
+      LibraryBuilder library, List<TypeBuilder>? arguments);
 
   Supertype buildSupertype(
       LibraryBuilder library, List<TypeBuilder>? arguments);
@@ -234,7 +233,7 @@
   Member? lookupInstanceMember(ClassHierarchy hierarchy, Name name,
       {bool isSetter: false, bool isSuper: false});
 
-  /// Looks up the constructor by [name] on the the class built by this class
+  /// Looks up the constructor by [name] on the class built by this class
   /// builder.
   ///
   /// If [isSuper] is `true`, constructors in the superclass are searched.
@@ -559,7 +558,7 @@
   }
 
   @override
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments) {
     assert(arguments == null || cls.typeParameters.length == arguments.length);
     if (isNullClass) {
@@ -583,8 +582,7 @@
 
   @override
   List<DartType> buildTypeArguments(
-      LibraryBuilder library, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      LibraryBuilder library, List<TypeBuilder>? arguments) {
     if (arguments == null && typeVariables == null) {
       return <DartType>[];
     }
@@ -604,7 +602,7 @@
       return unhandled(
           templateTypeArgumentMismatch
               .withArguments(typeVariablesCount)
-              .message,
+              .problemMessage,
           "buildTypeArguments",
           -1,
           null);
@@ -619,13 +617,11 @@
 
   @override
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
-    return buildTypesWithBuiltArguments(
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
+    return buildTypeWithBuiltArguments(
         library,
         nullabilityBuilder.build(library),
-        buildTypeArguments(library, arguments,
-            nonInstanceContext: nonInstanceContext));
+        buildTypeArguments(library, arguments));
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
index cf6125b..1031699 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
@@ -37,6 +37,7 @@
 import '../source/source_class_builder.dart';
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 import '../type_inference/type_schema.dart';
+import '../type_inference/type_inferrer.dart';
 import '../util/helpers.dart' show DelayedActionPerformer;
 
 import 'builder.dart';
@@ -68,8 +69,8 @@
   void injectInvalidInitializer(Message message, int charOffset, int length,
       ExpressionGeneratorHelper helper);
 
-  void addInitializer(
-      Initializer initializer, ExpressionGeneratorHelper helper);
+  void addInitializer(Initializer initializer, ExpressionGeneratorHelper helper,
+      {required InitializerInferenceResult? inferenceResult});
 
   void prepareInitializers();
 
@@ -126,19 +127,24 @@
       int charOffset,
       this.charOpenParenOffset,
       int charEndOffset,
-      Member? referenceFrom,
+      Reference? constructorReference,
+      Reference? tearOffReference,
       {String? nativeMethodName,
       required bool forAbstractClassOrEnum})
       : _constructor = new Constructor(new FunctionNode(null),
             name: new Name(name, compilationUnit.library),
             fileUri: compilationUnit.fileUri,
-            reference: referenceFrom?.reference)
+            reference: constructorReference)
           ..startFileOffset = startCharOffset
           ..fileOffset = charOffset
           ..fileEndOffset = charEndOffset
           ..isNonNullableByDefault = compilationUnit.isNonNullableByDefault,
         _constructorTearOff = createConstructorTearOffProcedure(
-            name, compilationUnit, compilationUnit.fileUri, charOffset,
+            name,
+            compilationUnit,
+            compilationUnit.fileUri,
+            charOffset,
+            tearOffReference,
             forAbstractClassOrEnum: forAbstractClassOrEnum),
         super(metadata, modifiers, returnType, name, typeVariables, formals,
             compilationUnit, charOffset, nativeMethodName);
@@ -323,8 +329,8 @@
   }
 
   @override
-  void addInitializer(
-      Initializer initializer, ExpressionGeneratorHelper helper) {
+  void addInitializer(Initializer initializer, ExpressionGeneratorHelper helper,
+      {required InitializerInferenceResult? inferenceResult}) {
     List<Initializer> initializers = _constructor.initializers;
     if (initializer is SuperInitializer) {
       if (superInitializer != null) {
@@ -337,6 +343,7 @@
             "super".length,
             helper);
       } else {
+        inferenceResult?.applyResult(initializers, _constructor);
         initializers.add(initializer..parent = _constructor);
         superInitializer = initializer;
       }
@@ -368,9 +375,11 @@
           error.parent = _constructor;
           initializers[i] = error;
         }
+        inferenceResult?.applyResult(initializers, _constructor);
         initializers.add(initializer..parent = _constructor);
         redirectingInitializer = initializer;
       } else {
+        inferenceResult?.applyResult(initializers, _constructor);
         initializers.add(initializer..parent = _constructor);
         redirectingInitializer = initializer;
       }
@@ -386,6 +395,7 @@
       injectInvalidInitializer(messageSuperInitializerNotLast,
           initializer.fileOffset, noLength, helper);
     } else {
+      inferenceResult?.applyResult(initializers, _constructor);
       initializers.add(initializer..parent = _constructor);
     }
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index 6f9fcec..2a94404 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -40,6 +40,7 @@
         templateDuplicatedDeclarationSyntheticCause,
         templateEnumConstantSameNameAsEnclosing;
 
+import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/kernel_helper.dart';
 
 import '../util/helpers.dart';
@@ -131,25 +132,39 @@
         const NullabilityBuilder.omitted(),
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ null,
+        instanceTypeVariableAccess:
+            // If "int" resolves to an instance type variable then that we would
+            // allowed (the types that we are adding are in instance context
+            // after all) but it would be unexpected and we would like an
+            // assertion failure, since "int" was meant to be `int` from
+            // `dart:core`.
+            // TODO(johnniwinther): Add a more robust way of creating named
+            // typed builders for dart:core types. This might be needed for the
+            // enhanced enums feature where enums can actually declare type
+            // variables.
+            InstanceTypeVariableAccessState.Unexpected);
     NamedTypeBuilder stringType = new NamedTypeBuilder(
         "String",
         const NullabilityBuilder.omitted(),
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     NamedTypeBuilder objectType = new NamedTypeBuilder(
         "Object",
         const NullabilityBuilder.omitted(),
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     NamedTypeBuilder enumType = new NamedTypeBuilder(
         "_Enum",
         const NullabilityBuilder.omitted(),
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     Class cls = new Class(
         name: name,
         reference: referencesFromIndexed?.cls.reference,
@@ -161,13 +176,15 @@
         const NullabilityBuilder.omitted(),
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     NamedTypeBuilder listType = new NamedTypeBuilder(
         "List",
         const NullabilityBuilder.omitted(),
         <TypeBuilder>[selfType],
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
     // metadata class E extends _Enum {
     //   const E(int index, String name) : super(index, name);
@@ -198,14 +215,17 @@
             ? referencesFromIndexed.library.reference
             : parent.library.reference);
 
-    Constructor? constructorReference;
+    Reference? constructorReference;
+    Reference? tearOffReference;
     Reference? toStringReference;
     Reference? valuesFieldReference;
     Reference? valuesGetterReference;
     Reference? valuesSetterReference;
     if (referencesFromIndexed != null) {
       constructorReference =
-          referencesFromIndexed.lookupConstructor(new Name("")) as Constructor;
+          referencesFromIndexed.lookupConstructorReference(new Name(""));
+      tearOffReference = referencesFromIndexed.lookupGetterReference(
+          constructorTearOffName("", referencesFromIndexed.library));
       toStringReference =
           referencesFromIndexed.lookupGetterReference(new Name("toString"));
       Name valuesName = new Name("values");
@@ -235,6 +255,7 @@
         charOffset,
         charEndOffset,
         constructorReference,
+        tearOffReference,
         forAbstractClassOrEnum: true);
     constructors[""] = constructorBuilder;
     FieldBuilder valuesBuilder = new SourceFieldBuilder(
@@ -376,8 +397,7 @@
 
   @override
   InterfaceType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     return rawType(nullabilityBuilder.build(library));
   }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
index 4ac03ac..fabf10a 100644
--- a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
@@ -83,15 +83,13 @@
 
   @override
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     if (library is SourceLibraryBuilder &&
         library.enableExtensionTypesInLibrary) {
-      return buildTypesWithBuiltArguments(
+      return buildTypeWithBuiltArguments(
           library,
           nullabilityBuilder.build(library),
-          buildTypeArguments(library, arguments,
-              nonInstanceContext: nonInstanceContext));
+          _buildTypeArguments(library, arguments));
     } else {
       throw new UnsupportedError("ExtensionBuilder.buildType is not supported"
           "in library '${library.importUri}'.");
@@ -99,7 +97,7 @@
   }
 
   @override
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     if (library is SourceLibraryBuilder &&
         library.enableExtensionTypesInLibrary) {
@@ -114,9 +112,8 @@
   @override
   int get typeVariablesCount => typeParameters?.length ?? 0;
 
-  List<DartType> buildTypeArguments(
-      LibraryBuilder library, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+  List<DartType> _buildTypeArguments(
+      LibraryBuilder library, List<TypeBuilder>? arguments) {
     if (arguments == null && typeParameters == null) {
       return <DartType>[];
     }
@@ -137,7 +134,7 @@
       return unhandled(
           templateTypeArgumentMismatch
               .withArguments(typeVariablesCount)
-              .message,
+              .problemMessage,
           "buildTypeArguments",
           -1,
           null);
diff --git a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
index d19bcde..5db68f5 100644
--- a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
@@ -66,6 +66,7 @@
       this.charOpenParenOffset,
       int charEndOffset,
       Reference? procedureReference,
+      Reference? tearOffReference,
       AsyncMarker asyncModifier,
       NameScheme nameScheme,
       {String? nativeMethodName})
@@ -79,8 +80,8 @@
           ..fileOffset = charOffset
           ..fileEndOffset = charEndOffset
           ..isNonNullableByDefault = libraryBuilder.isNonNullableByDefault,
-        _factoryTearOff = createFactoryTearOffProcedure(
-            name, libraryBuilder, libraryBuilder.fileUri, charOffset),
+        _factoryTearOff = createFactoryTearOffProcedure(name, libraryBuilder,
+            libraryBuilder.fileUri, charOffset, tearOffReference),
         super(metadata, modifiers, returnType, name, typeVariables, formals,
             libraryBuilder, charOffset, nativeMethodName) {
     this.asyncModifier = asyncModifier;
@@ -273,6 +274,7 @@
       int charOpenParenOffset,
       int charEndOffset,
       Reference? procedureReference,
+      Reference? tearOffReference,
       NameScheme nameScheme,
       String? nativeMethodName,
       this.redirectionTarget)
@@ -289,6 +291,7 @@
             charOpenParenOffset,
             charEndOffset,
             procedureReference,
+            tearOffReference,
             AsyncMarker.Sync,
             nameScheme,
             nativeMethodName: nativeMethodName);
@@ -401,7 +404,7 @@
         unhandled("${targetBuilder.runtimeType}", "buildOutlineExpressions",
             charOffset, fileUri);
       }
-      Arguments targetInvocationArguments;
+      ArgumentsImpl targetInvocationArguments;
       {
         List<Expression> positionalArguments = <Expression>[];
         for (VariableDeclaration parameter
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index df0d819..229ddf9 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -409,10 +409,7 @@
   /// Builds the core AST structures for this field as needed for the outline.
   void build(SourceLibraryBuilder libraryBuilder) {
     if (type != null) {
-      // notInstanceContext is set to true for extension fields as they
-      // ultimately become static.
-      fieldType = type!.build(libraryBuilder,
-          nonInstanceContext: isStatic || (isExtensionMember && !isExternal));
+      fieldType = type!.build(libraryBuilder);
     }
     _fieldEncoding.build(libraryBuilder, this);
   }
@@ -426,8 +423,14 @@
     _fieldEncoding.completeSignature(coreTypes);
 
     for (Annotatable annotatable in _fieldEncoding.annotatables) {
-      MetadataBuilder.buildAnnotations(annotatable, metadata, library,
-          classBuilder, this, fileUri, classBuilder?.scope ?? library.scope);
+      MetadataBuilder.buildAnnotations(
+          annotatable,
+          metadata,
+          library,
+          declarationBuilder,
+          this,
+          fileUri,
+          declarationBuilder?.scope ?? library.scope);
     }
 
     // For modular compilation we need to include initializers of all const
@@ -439,10 +442,10 @@
                 isClassMember &&
                 classBuilder!.declaresConstConstructor)) &&
         _constInitializerToken != null) {
-      Scope scope = classBuilder?.scope ?? library.scope;
+      Scope scope = declarationBuilder?.scope ?? library.scope;
       BodyBuilder bodyBuilder = library.loader
           .createBodyBuilderForOutlineExpression(
-              library, classBuilder, this, scope, fileUri);
+              library, declarationBuilder, this, scope, fileUri);
       bodyBuilder.constantContext =
           isConst ? ConstantContext.inferred : ConstantContext.required;
       Expression initializer = bodyBuilder.typeInferrer.inferFieldInitializer(
diff --git a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
index 660e08a..74797c3 100644
--- a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
@@ -7,6 +7,7 @@
 import '../problems.dart';
 import '../source/source_library_builder.dart';
 import 'library_builder.dart';
+import 'named_type_builder.dart';
 import 'nullability_builder.dart';
 import 'type_builder.dart';
 
@@ -21,7 +22,7 @@
 
   @override
   TypeBuilder clone(
-      List<TypeBuilder> newTypes,
+      List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
     return this;
@@ -47,8 +48,7 @@
   }
 
   @override
-  DartType build(LibraryBuilder library,
-      {TypedefType? origin, bool? nonInstanceContext}) {
+  DartType build(LibraryBuilder library, {TypedefType? origin}) {
     return type;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index c0df993..3e47192 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -42,6 +42,7 @@
 import 'library_builder.dart';
 import 'metadata_builder.dart';
 import 'modifier_builder.dart';
+import 'named_type_builder.dart';
 import 'type_builder.dart';
 import 'variable_builder.dart';
 
@@ -128,11 +129,9 @@
   String get fullNameForErrors => name;
 
   VariableDeclaration build(
-      SourceLibraryBuilder library, int functionNestingLevel,
-      {bool? nonInstanceContext}) {
+      SourceLibraryBuilder library, int functionNestingLevel) {
     if (variable == null) {
-      DartType? builtType =
-          type?.build(library, nonInstanceContext: nonInstanceContext);
+      DartType? builtType = type?.build(library);
       if (!library.isNonNullableByDefault && builtType != null) {
         builtType = legacyErasure(builtType);
       }
@@ -152,7 +151,7 @@
   }
 
   FormalParameterBuilder clone(
-      List<TypeBuilder> newTypes,
+      List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
     // TODO(dmitryas):  It's not clear how [metadata] is used currently, and
diff --git a/pkg/front_end/lib/src/fasta/builder/function_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
index 8c525b7..0ad02c9 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
@@ -7,8 +7,6 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart';
 
-import 'package:kernel/type_algebra.dart' show containsTypeVariable, substitute;
-
 import '../identifiers.dart';
 import '../scope.dart';
 
@@ -19,7 +17,6 @@
 
 import '../messages.dart'
     show
-        messageNonInstanceTypeVariableUse,
         messagePatchDeclarationMismatch,
         messagePatchDeclarationOrigin,
         messagePatchNonExternal,
@@ -354,8 +351,7 @@
     }
     if (formals != null) {
       for (FormalParameterBuilder formal in formals!) {
-        VariableDeclaration parameter = formal.build(library, 0,
-            nonInstanceContext: !isConstructor && !isDeclarationInstanceMember);
+        VariableDeclaration parameter = formal.build(library, 0);
         if (needsCheckVisitor != null) {
           if (parameter.type.accept(needsCheckVisitor)) {
             parameter.isCovariantByClass = true;
@@ -399,48 +395,7 @@
       function.requiredParameterCount = 1;
     }
     if (returnType != null) {
-      function.returnType = returnType!.build(library,
-          nonInstanceContext: !isConstructor && !isDeclarationInstanceMember);
-    }
-    if (!isConstructor && !isDeclarationInstanceMember) {
-      List<TypeParameter>? typeParameters;
-      if (parent is ClassBuilder) {
-        ClassBuilder enclosingClassBuilder = parent as ClassBuilder;
-        typeParameters = enclosingClassBuilder.cls.typeParameters;
-      } else if (parent is ExtensionBuilder) {
-        ExtensionBuilder enclosingExtensionBuilder = parent as ExtensionBuilder;
-        typeParameters = enclosingExtensionBuilder.extension.typeParameters;
-      }
-
-      if (typeParameters != null && typeParameters.isNotEmpty) {
-        Map<TypeParameter, DartType>? substitution;
-        DartType removeTypeVariables(DartType type) {
-          if (substitution == null) {
-            substitution = <TypeParameter, DartType>{};
-            for (TypeParameter parameter in typeParameters!) {
-              substitution![parameter] = const DynamicType();
-            }
-          }
-          library.addProblem(
-              messageNonInstanceTypeVariableUse, charOffset, noLength, fileUri);
-          return substitute(type, substitution!);
-        }
-
-        Set<TypeParameter> set = typeParameters.toSet();
-        for (VariableDeclaration parameter in function.positionalParameters) {
-          if (containsTypeVariable(parameter.type, set)) {
-            parameter.type = removeTypeVariables(parameter.type);
-          }
-        }
-        for (VariableDeclaration parameter in function.namedParameters) {
-          if (containsTypeVariable(parameter.type, set)) {
-            parameter.type = removeTypeVariables(parameter.type);
-          }
-        }
-        if (containsTypeVariable(function.returnType, set)) {
-          function.returnType = removeTypeVariables(function.returnType);
-        }
-      }
+      function.returnType = returnType!.build(library);
     }
     if (isExtensionInstanceMember) {
       ExtensionBuilder extensionBuilder = parent as ExtensionBuilder;
diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
index 5128a9d..d995931 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
@@ -20,6 +20,7 @@
 
 import 'formal_parameter_builder.dart';
 import 'library_builder.dart';
+import 'named_type_builder.dart';
 import 'nullability_builder.dart';
 import 'type_builder.dart';
 import 'type_variable_builder.dart';
@@ -82,19 +83,15 @@
   }
 
   @override
-  FunctionType build(LibraryBuilder library,
-      {TypedefType? origin, bool? nonInstanceContext}) {
+  FunctionType build(LibraryBuilder library, {TypedefType? origin}) {
     DartType builtReturnType =
-        returnType?.build(library, nonInstanceContext: nonInstanceContext) ??
-            const DynamicType();
+        returnType?.build(library) ?? const DynamicType();
     List<DartType> positionalParameters = <DartType>[];
     List<NamedType>? namedParameters;
     int requiredParameterCount = 0;
     if (formals != null) {
       for (FormalParameterBuilder formal in formals!) {
-        DartType type = formal.type
-                ?.build(library, nonInstanceContext: nonInstanceContext) ??
-            const DynamicType();
+        DartType type = formal.type?.build(library) ?? const DynamicType();
         if (formal.isPositional) {
           positionalParameters.add(type);
           if (formal.isRequired) requiredParameterCount++;
@@ -141,7 +138,7 @@
 
   @override
   FunctionTypeBuilder clone(
-      List<TypeBuilder> newTypes,
+      List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
     List<TypeVariableBuilder>? clonedTypeVariables;
@@ -157,15 +154,13 @@
         return formal.clone(newTypes, contextLibrary, contextDeclaration);
       }, growable: false);
     }
-    FunctionTypeBuilder newType = new FunctionTypeBuilder(
+    return new FunctionTypeBuilder(
         returnType?.clone(newTypes, contextLibrary, contextDeclaration),
         clonedTypeVariables,
         clonedFormals,
         nullabilityBuilder,
         fileUri,
         charOffset);
-    newTypes.add(newType);
-    return newType;
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart
index a004dac..277a400 100644
--- a/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart
@@ -21,16 +21,13 @@
 
   @override
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     return new FutureOrType(
-        arguments!.single
-            .build(library, nonInstanceContext: nonInstanceContext),
-        nullabilityBuilder.build(library));
+        arguments!.single.build(library), nullabilityBuilder.build(library));
   }
 
   @override
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return new FutureOrType(arguments.single, nullability);
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart
index 1adb629..5f2b68b 100644
--- a/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart
@@ -34,14 +34,13 @@
 
   @override
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
-    return buildTypesWithBuiltArguments(library, null, null);
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
+    return buildTypeWithBuiltArguments(library, null, null);
   }
 
   /// [Arguments] have already been built.
   @override
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability? nullability, List<DartType>? arguments) {
     if (!suppressMessage) {
       library.addProblem(message.messageObject, message.charOffset,
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index 772314b..9035466 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -207,6 +207,11 @@
     return buffer;
   }
 
+  /// The builder for the enclosing class or extension, if any.
+  DeclarationBuilder? get declarationBuilder =>
+      parent is DeclarationBuilder ? parent as DeclarationBuilder : null;
+
+  /// The builder for the enclosing class, if any.
   ClassBuilder? get classBuilder =>
       parent is ClassBuilder ? parent as ClassBuilder : null;
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart b/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart
index 079fb6b..f6d7e56 100644
--- a/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart
@@ -10,6 +10,7 @@
 import '../source/source_library_builder.dart';
 
 import 'library_builder.dart';
+import 'named_type_builder.dart';
 import 'nullability_builder.dart';
 import 'type_builder.dart';
 import 'type_variable_builder.dart';
@@ -56,8 +57,7 @@
   }
 
   @override
-  InterfaceType build(LibraryBuilder library,
-      {TypedefType? origin, bool? nonInstanceContext}) {
+  InterfaceType build(LibraryBuilder library, {TypedefType? origin}) {
     int charOffset = -1; // TODO(ahe): Provide these.
     Uri? fileUri = null; // TODO(ahe): Provide these.
     return unsupported("build", charOffset, fileUri);
@@ -83,7 +83,7 @@
 
   @override
   MixinApplicationBuilder clone(
-      List<TypeBuilder> newTypes,
+      List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
     int charOffset = -1; // TODO(dmitryas): Provide these.
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 70e72af..0bfffd5 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -48,6 +48,50 @@
 import 'type_variable_builder.dart';
 import 'void_type_declaration_builder.dart';
 
+/// Enum used to determine how instance type variable access is allowed.
+enum InstanceTypeVariableAccessState {
+  /// Instance type variable access is allowed.
+  ///
+  /// This is used for valid references to instance type variables, like
+  ///
+  ///     class Class<T> {
+  ///       void instanceMethod(T t) {}
+  ///     }
+  Allowed,
+
+  /// Instance type variable access is disallowed and results in a compile-time
+  /// error.
+  ///
+  /// This is used for static references to instance type variables, like
+  ///
+  ///     class Class<T> {
+  ///       static void staticMethod(T t) {}
+  ///     }
+  ///
+  /// The type is resolved as an [InvalidType].
+  Disallowed,
+
+  /// Instance type variable access is invalid since it occurs in an invalid
+  /// context. The occurrence _doesn't_ result in a compile-time error.
+  ///
+  /// This is used for references to instance type variables where they might
+  /// be valid if the context where, like
+  ///
+  ///     class Extension<T> {
+  ///       T field; // Instance extension fields are not allowed.
+  ///     }
+  ///
+  /// The type is resolved as an [InvalidType].
+  Invalid,
+
+  /// Instance type variable access is unexpected and results in an assertion
+  /// failure.
+  ///
+  /// This is used for [NamedTypeBuilder]s for known non-type variable types,
+  /// like for `Object` and `String`.
+  Unexpected,
+}
+
 class NamedTypeBuilder extends TypeBuilder {
   @override
   final Object name;
@@ -66,12 +110,18 @@
   @override
   TypeDeclarationBuilder? declaration;
 
+  final InstanceTypeVariableAccessState instanceTypeVariableAccess;
+
   NamedTypeBuilder(this.name, this.nullabilityBuilder, this.arguments,
-      this.fileUri, this.charOffset);
+      this.fileUri, this.charOffset,
+      {required this.instanceTypeVariableAccess});
 
   NamedTypeBuilder.fromTypeDeclarationBuilder(
       TypeDeclarationBuilder this.declaration, this.nullabilityBuilder,
-      [this.arguments, this.fileUri, this.charOffset])
+      {this.arguments,
+      this.fileUri,
+      this.charOffset,
+      required this.instanceTypeVariableAccess})
       : this.name = declaration.name;
 
   @override
@@ -79,7 +129,7 @@
 
   @override
   void bind(TypeDeclarationBuilder declaration) {
-    this.declaration = declaration.origin as TypeDeclarationBuilder;
+    this.declaration = declaration.origin;
   }
 
   int get nameOffset {
@@ -140,7 +190,7 @@
       }
       return;
     } else if (member is TypeDeclarationBuilder) {
-      declaration = member.origin as TypeDeclarationBuilder;
+      declaration = member.origin;
       if (!declaration!.isExtension ||
           library is SourceLibraryBuilder &&
               library.enableExtensionTypesInLibrary) {
@@ -256,62 +306,58 @@
   }
 
   @override
-  DartType build(LibraryBuilder library,
-      {TypedefType? origin, bool? nonInstanceContext}) {
-    return buildInternal(library,
-        origin: origin,
-        nonInstanceContext: nonInstanceContext,
-        forTypeLiteral: false);
+  DartType build(LibraryBuilder library, {TypedefType? origin}) {
+    return buildInternal(library, origin: origin, forTypeLiteral: false);
   }
 
   @override
-  DartType buildTypeLiteralType(LibraryBuilder library,
-      {TypedefType? origin, bool? nonInstanceContext}) {
-    return buildInternal(library,
-        origin: origin,
-        nonInstanceContext: nonInstanceContext,
-        forTypeLiteral: true);
+  DartType buildTypeLiteralType(LibraryBuilder library, {TypedefType? origin}) {
+    return buildInternal(library, origin: origin, forTypeLiteral: true);
   }
 
   DartType declarationBuildType(LibraryBuilder library,
-      {bool? nonInstanceContext, required bool forTypeLiteral}) {
+      {required bool forTypeLiteral}) {
     if (forTypeLiteral) {
-      return declaration!.buildTypeLiteralType(
-          library, nullabilityBuilder, arguments,
-          nonInstanceContext: nonInstanceContext);
+      return declaration!
+          .buildTypeLiteralType(library, nullabilityBuilder, arguments);
     } else {
-      return declaration!.buildType(library, nullabilityBuilder, arguments,
-          nonInstanceContext: nonInstanceContext);
+      return declaration!.buildType(library, nullabilityBuilder, arguments);
     }
   }
 
   // TODO(johnniwinther): Store [origin] on the built type.
   DartType buildInternal(LibraryBuilder library,
-      {TypedefType? origin,
-      required bool? nonInstanceContext,
-      required bool forTypeLiteral}) {
+      {TypedefType? origin, required bool forTypeLiteral}) {
     assert(declaration != null, "Declaration has not been resolved on $this.");
-    // TODO(johnniwinther): Change `nonInstanceContext == true` to
-    // `nonInstanceContext` when it's passed everywhere.
-    if (nonInstanceContext == true && declaration!.isTypeVariable) {
+    if (declaration!.isTypeVariable) {
       TypeVariableBuilder typeParameterBuilder =
           declaration as TypeVariableBuilder;
       TypeParameter typeParameter = typeParameterBuilder.parameter;
       if (typeParameter.parent is Class || typeParameter.parent is Extension) {
-        library.addProblem(
-            messageTypeVariableInStaticContext,
-            charOffset ?? TreeNode.noOffset,
-            noLength,
-            fileUri ?? library.fileUri);
-        return const InvalidType();
+        switch (instanceTypeVariableAccess) {
+          case InstanceTypeVariableAccessState.Disallowed:
+            library.addProblem(
+                messageTypeVariableInStaticContext,
+                charOffset ?? TreeNode.noOffset,
+                noLength,
+                fileUri ?? library.fileUri);
+            return const InvalidType();
+          case InstanceTypeVariableAccessState.Invalid:
+            return const InvalidType();
+          case InstanceTypeVariableAccessState.Unexpected:
+            assert(false,
+                "Unexpected instance type variable $typeParameterBuilder");
+            break;
+          case InstanceTypeVariableAccessState.Allowed:
+            break;
+        }
       }
     }
 
     if (library is SourceLibraryBuilder) {
       int uncheckedTypedefTypeCount = library.uncheckedTypedefTypes.length;
-      DartType builtType = declarationBuildType(library,
-          nonInstanceContext: nonInstanceContext,
-          forTypeLiteral: forTypeLiteral);
+      DartType builtType =
+          declarationBuildType(library, forTypeLiteral: forTypeLiteral);
       // Set locations for new unchecked TypedefTypes for error reporting.
       for (int i = uncheckedTypedefTypeCount;
           i < library.uncheckedTypedefTypes.length;
@@ -324,9 +370,7 @@
       }
       return builtType;
     } else {
-      return declarationBuildType(library,
-          nonInstanceContext: nonInstanceContext,
-          forTypeLiteral: forTypeLiteral);
+      return declarationBuildType(library, forTypeLiteral: forTypeLiteral);
     }
   }
 
@@ -448,7 +492,8 @@
       }
       if (arguments != null) {
         NamedTypeBuilder result = new NamedTypeBuilder(
-            name, nullabilityBuilder, arguments, fileUri, charOffset);
+            name, nullabilityBuilder, arguments, fileUri, charOffset,
+            instanceTypeVariableAccess: instanceTypeVariableAccess);
         if (declaration != null) {
           result.bind(declaration!);
         } else {
@@ -462,7 +507,7 @@
 
   @override
   NamedTypeBuilder clone(
-      List<TypeBuilder> newTypes,
+      List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
     List<TypeBuilder>? clonedArguments;
@@ -474,7 +519,8 @@
       }, growable: false);
     }
     NamedTypeBuilder newType = new NamedTypeBuilder(
-        name, nullabilityBuilder, clonedArguments, fileUri, charOffset);
+        name, nullabilityBuilder, clonedArguments, fileUri, charOffset,
+        instanceTypeVariableAccess: instanceTypeVariableAccess);
     if (declaration is BuiltinTypeDeclarationBuilder) {
       newType.declaration = declaration;
     } else {
@@ -487,7 +533,8 @@
   NamedTypeBuilder withNullabilityBuilder(
       NullabilityBuilder nullabilityBuilder) {
     return new NamedTypeBuilder(
-        name, nullabilityBuilder, arguments, fileUri, charOffset)
+        name, nullabilityBuilder, arguments, fileUri, charOffset,
+        instanceTypeVariableAccess: instanceTypeVariableAccess)
       ..bind(declaration!);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
index 52b67ee..2e2c1b5 100644
--- a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
@@ -24,13 +24,12 @@
 
   @override
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     return type.withDeclaredNullability(nullabilityBuilder.build(library));
   }
 
   @override
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return type.withDeclaredNullability(nullability);
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart
index 9e18f07..818c6f0 100644
--- a/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart
@@ -21,13 +21,12 @@
 
   @override
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     return type;
   }
 
   @override
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return type;
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index 511ad2e..14a2b41c 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -57,21 +57,15 @@
 
   /// [arguments] have already been built.
   @override
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments);
 
   List<DartType> buildTypeArguments(
-      LibraryBuilder library, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext});
+      LibraryBuilder library, List<TypeBuilder>? arguments);
 
   /// Returns `true` if this typedef is an alias of the `Null` type.
   bool get isNullAlias;
 
-  @override
-  DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext});
-
   /// Returns the [TypeDeclarationBuilder] for the type aliased by `this`,
   /// based on the given [typeArguments]. It expands type aliases repeatedly
   /// until it encounters a builder which is not a [TypeAliasBuilder].
@@ -159,7 +153,7 @@
 
   /// [arguments] have already been built.
   @override
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments) {
     DartType thisType = buildThisType();
     if (const DynamicType() == thisType) return thisType;
@@ -189,23 +183,21 @@
 
   @override
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     return buildTypeInternal(library, nullabilityBuilder, arguments,
-        nonInstanceContext: nonInstanceContext, performLegacyErasure: true);
+        performLegacyErasure: true);
   }
 
   @override
   DartType buildTypeLiteralType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     return buildTypeInternal(library, nullabilityBuilder, arguments,
-        nonInstanceContext: nonInstanceContext, performLegacyErasure: false);
+        performLegacyErasure: false);
   }
 
   DartType buildTypeInternal(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext, required bool performLegacyErasure}) {
+      {required bool performLegacyErasure}) {
     DartType thisType = buildThisType();
     if (thisType is InvalidType) return thisType;
 
@@ -229,7 +221,7 @@
       result = thisType.withDeclaredNullability(nullability);
     } else {
       // Otherwise, substitute.
-      result = buildTypesWithBuiltArguments(
+      result = buildTypeWithBuiltArguments(
           library, nullability, buildTypeArguments(library, arguments));
     }
     if (performLegacyErasure && !library.isNonNullableByDefault) {
@@ -311,12 +303,12 @@
             if (typeVariables != null)
               for (TypeVariableBuilder typeVariable in typeVariables!)
                 new NamedTypeBuilder.fromTypeDeclarationBuilder(
-                  typeVariable,
-                  library.nonNullableBuilder,
-                  const [],
-                  fileUri,
-                  charOffset,
-                ),
+                    typeVariable, library.nonNullableBuilder,
+                    arguments: const [],
+                    fileUri: fileUri,
+                    charOffset: charOffset,
+                    instanceTypeVariableAccess:
+                        InstanceTypeVariableAccessState.Unexpected),
           ];
           TypeDeclarationBuilder? typeDeclarationBuilder =
               _unaliasDeclaration(freshTypeArguments);
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index b7feb2e..73607dd 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -9,6 +9,7 @@
 import '../scope.dart';
 import '../source/source_library_builder.dart';
 import 'library_builder.dart';
+import 'named_type_builder.dart';
 import 'nullability_builder.dart';
 import 'type_declaration_builder.dart';
 import 'type_variable_builder.dart';
@@ -62,19 +63,16 @@
   /// are added to [newTypes], so that they can be added to a proper scope and
   /// resolved later.
   TypeBuilder clone(
-      List<TypeBuilder> newTypes,
+      List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration);
 
   String get fullNameForErrors => "${printOn(new StringBuffer())}";
 
-  DartType build(LibraryBuilder library,
-      {TypedefType? origin, bool? nonInstanceContext});
+  DartType build(LibraryBuilder library, {TypedefType? origin});
 
-  DartType buildTypeLiteralType(LibraryBuilder library,
-      {TypedefType? origin, bool? nonInstanceContext}) {
-    return build(library,
-        origin: origin, nonInstanceContext: nonInstanceContext);
+  DartType buildTypeLiteralType(LibraryBuilder library, {TypedefType? origin}) {
+    return build(library, origin: origin);
   }
 
   Supertype? buildSupertype(
diff --git a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
index 727888b..65085dc 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
@@ -25,16 +25,26 @@
 
   int get typeVariablesCount => 0;
 
+  @override
+  TypeDeclarationBuilder get origin;
+
+  /// Creates the [DartType] corresponding to this declaration applied with
+  /// [arguments] in [library] with the syntactical nullability defined by
+  /// [nullabilityBuilder].
+  ///
+  /// For instance, if this declaration is a class declaration `C`, then
+  /// an occurrence of `C<int>?` in a null safe library `lib1` would call
+  /// `buildType(<lib1>, <?>, [<int>])` to create `C<int>?`, or `C<int>` in a
+  /// legacy library `lib2` call `buildType(<lib2>, <> [<int>]` to create
+  /// `C<int*>*`.
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext});
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments);
 
   DartType buildTypeLiteralType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext});
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments);
 
   /// [arguments] have already been built.
-  DartType buildTypesWithBuiltArguments(LibraryBuilder library,
+  DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments);
 }
 
@@ -56,6 +66,9 @@
         super(parent, charOffset);
 
   @override
+  TypeDeclarationBuilder get origin => this;
+
+  @override
   bool get isNamedMixinApplication => false;
 
   @override
@@ -69,9 +82,7 @@
 
   @override
   DartType buildTypeLiteralType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
-    return buildType(library, nullabilityBuilder, arguments,
-        nonInstanceContext: nonInstanceContext);
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
+    return buildType(library, nullabilityBuilder, arguments);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index a612517..2430ab7a 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -101,8 +101,7 @@
 
   @override
   DartType buildType(LibraryBuilder library,
-      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     if (arguments != null) {
       int charOffset = -1; // TODO(ahe): Provide these.
       Uri? fileUri = null; // TODO(ahe): Provide these.
@@ -129,7 +128,7 @@
       nullability = nullabilityBuilder.build(library);
     }
     TypeParameterType type =
-        buildTypesWithBuiltArguments(library, nullability, null);
+        buildTypeWithBuiltArguments(library, nullability, null);
     if (needsPostUpdate) {
       if (library is SourceLibraryBuilder) {
         library.registerPendingNullability(fileUri!, charOffset, type);
@@ -146,7 +145,7 @@
   }
 
   @override
-  TypeParameterType buildTypesWithBuiltArguments(LibraryBuilder library,
+  TypeParameterType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments) {
     if (arguments != null) {
       int charOffset = -1; // TODO(ahe): Provide these.
@@ -160,12 +159,6 @@
     return new TypeParameterType(parameter, nullability);
   }
 
-  TypeBuilder asTypeBuilder() {
-    return new NamedTypeBuilder(
-        name, const NullabilityBuilder.omitted(), null, fileUri, charOffset)
-      ..bind(this);
-  }
-
   void finish(
       LibraryBuilder library, ClassBuilder object, TypeBuilder dynamicType) {
     if (isPatch) return;
@@ -193,7 +186,7 @@
   }
 
   TypeVariableBuilder clone(
-      List<TypeBuilder> newTypes,
+      List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
     // TODO(dmitryas): Figure out if using [charOffset] here is a good idea.
diff --git a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
deleted file mode 100644
index 39c5f37..0000000
--- a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2017, 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.
-
-library fasta.unresolved_type;
-
-import '../scope.dart';
-
-import 'library_builder.dart';
-import 'type_builder.dart';
-
-/// A wrapper around a type that is yet to be resolved.
-class UnresolvedType {
-  final TypeBuilder builder;
-  final int charOffset;
-  final Uri fileUri;
-
-  UnresolvedType(this.builder, this.charOffset, this.fileUri);
-
-  void resolveIn(Scope scope, LibraryBuilder library) {
-    builder.resolveIn(scope, charOffset, fileUri, library);
-  }
-
-  /// Performs checks on the type after it's resolved.
-  void checkType(LibraryBuilder library) {
-    return builder.check(library, charOffset, fileUri);
-  }
-
-  @override
-  String toString() => "UnresolvedType(@$charOffset, $builder)";
-}
diff --git a/pkg/front_end/lib/src/fasta/command_line_reporting.dart b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
index 9cb19b4..d3bf0bf 100644
--- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart
+++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
@@ -53,10 +53,11 @@
       length = 1;
     }
     String? prefix = severityPrefixes[severity];
-    String messageTextTmp =
-        prefix == null ? message.message : "$prefix: ${message.message}";
-    if (message.tip != null) {
-      messageTextTmp += "\n${message.tip}";
+    String messageTextTmp = prefix == null
+        ? message.problemMessage
+        : "$prefix: ${message.problemMessage}";
+    if (message.correctionMessage != null) {
+      messageTextTmp += "\n${message.correctionMessage}";
     }
     final String messageTextPlain = messageTextTmp;
     String messageTextColorized;
@@ -106,7 +107,7 @@
     }
   } catch (error, trace) {
     print("Crash when formatting: "
-        "[${message.code.name}] ${safeToString(message.message)}\n"
+        "[${message.code.name}] ${safeToString(message.problemMessage)}\n"
         "${safeToString(error)}\n"
         "$trace");
     throw new Crash(message.uri, message.charOffset, error, trace);
diff --git a/pkg/front_end/lib/src/fasta/compiler_context.dart b/pkg/front_end/lib/src/fasta/compiler_context.dart
index a3a99e1..5960574 100644
--- a/pkg/front_end/lib/src/fasta/compiler_context.dart
+++ b/pkg/front_end/lib/src/fasta/compiler_context.dart
@@ -100,9 +100,11 @@
     if (context == null) {
       // Note: we throw directly and don't use internalProblem, because
       // internalProblem depends on having a compiler context available.
-      String message = messageInternalProblemMissingContext.message;
-      String tip = messageInternalProblemMissingContext.tip!;
-      throw "Internal problem: $message\nTip: $tip";
+      String problemMessage =
+          messageInternalProblemMissingContext.problemMessage;
+      String correctionMessage =
+          messageInternalProblemMissingContext.correctionMessage!;
+      throw "Internal problem: $problemMessage\nTip: $correctionMessage";
     }
     return context;
   }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index c4ba7a5..0a5f4e1 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -121,8 +121,7 @@
 
   @override
   List<DartType> buildTypeArguments(
-      LibraryBuilder library, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      LibraryBuilder library, List<TypeBuilder>? arguments) {
     // For performance reasons, [typeVariables] aren't restored from [target].
     // So, if [arguments] is null, the default types should be retrieved from
     // [cls.typeParameters].
@@ -134,9 +133,7 @@
 
     // [arguments] != null
     return new List<DartType>.generate(
-        arguments.length,
-        (int i) =>
-            arguments[i].build(library, nonInstanceContext: nonInstanceContext),
+        arguments.length, (int i) => arguments[i].build(library),
         growable: true);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index 8d60ebc..b367503 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -29,7 +29,10 @@
 
 import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/redirecting_factory_body.dart'
-    show RedirectingFactoryBody, isRedirectingFactoryField;
+    show
+        RedirectingFactoryBody,
+        getRedirectingFactories,
+        isRedirectingFactoryField;
 
 import '../problems.dart' show internalProblem, unhandled, unimplemented;
 
@@ -190,10 +193,8 @@
     }
     for (Field field in cls.fields) {
       if (isRedirectingFactoryField(field)) {
-        ListLiteral initializer = field.initializer as ListLiteral;
-        for (Expression expression in initializer.expressions) {
-          StaticGet get = expression as StaticGet;
-          RedirectingFactoryBody.restoreFromDill(get.target as Procedure);
+        for (Procedure target in getRedirectingFactories(field)) {
+          RedirectingFactoryBody.restoreFromDill(target);
         }
       } else {
         classBuilder.addField(field);
@@ -396,7 +397,7 @@
         } else {
           unhandled("${node.runtimeType}", "finalizeExports", -1, fileUri);
         }
-        LibraryBuilder? library = loader.builders[libraryUri];
+        LibraryBuilder? library = loader.lookupLibraryBuilder(libraryUri);
         if (library == null) {
           internalProblem(
               templateUnspecified
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
index 3598ae5..9524f5b 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -47,8 +47,10 @@
 class DillLoader extends Loader {
   SourceLoader? currentSourceLoader;
 
-  @override
-  final Map<Uri, DillLibraryBuilder> builders = <Uri, DillLibraryBuilder>{};
+  final Map<Uri, DillLibraryBuilder> _knownLibraryBuilders =
+      <Uri, DillLibraryBuilder>{};
+
+  final Map<Uri, DillLibraryBuilder> _builders = <Uri, DillLibraryBuilder>{};
 
   final Queue<DillLibraryBuilder> _unparsedLibraries =
       new Queue<DillLibraryBuilder>();
@@ -87,11 +89,17 @@
   @override
   LibraryBuilder get coreLibrary => _coreLibrary!;
 
-  void set coreLibrary(LibraryBuilder value) {
-    _coreLibrary = value;
+  Ticker get ticker => target.ticker;
+
+  void registerKnownLibrary(Library library) {
+    _knownLibraryBuilders[library.importUri] =
+        new DillLibraryBuilder(library, this);
   }
 
-  Ticker get ticker => target.ticker;
+  // TODO(johnniwinther): This is never called!?!
+  void releaseAncillaryResources() {
+    _knownLibraryBuilders.clear();
+  }
 
   /// Look up a library builder by the [uri], or if such doesn't exist, create
   /// one. The canonical URI of the library is [uri], and its actual location is
@@ -105,12 +113,16 @@
   /// directive. If [accessor] isn't allowed to access [uri], it's a
   /// compile-time error.
   DillLibraryBuilder read(Uri uri, int charOffset, {LibraryBuilder? accessor}) {
-    DillLibraryBuilder builder = builders.putIfAbsent(uri, () {
-      DillLibraryBuilder library = target.createLibraryBuilder(uri);
-      assert(library.loader == this);
+    DillLibraryBuilder? libraryBuilder = _builders[uri];
+    if (libraryBuilder == null) {
+      libraryBuilder = _knownLibraryBuilders.remove(uri);
+      // ignore: unnecessary_null_comparison
+      assert(libraryBuilder != null, "No library found for $uri.");
+      _builders[uri] = libraryBuilder!;
+      assert(libraryBuilder.loader == this);
       if (uri.scheme == "dart") {
         if (uri.path == "core") {
-          _coreLibrary = library;
+          _coreLibrary = libraryBuilder;
         }
       }
       {
@@ -118,19 +130,18 @@
         // firstSourceUri and first library should be done as early as
         // possible.
         firstSourceUri ??= uri;
-        first ??= library;
+        first ??= libraryBuilder;
       }
-      if (_coreLibrary == library) {
+      if (_coreLibrary == libraryBuilder) {
         target.loadExtraRequiredLibraries(this);
       }
       if (target.backendTarget.mayDefineRestrictedType(uri)) {
-        library.mayImplementRestrictedTypes = true;
+        libraryBuilder.mayImplementRestrictedTypes = true;
       }
-      _unparsedLibraries.addLast(library);
-      return library;
-    });
+      _unparsedLibraries.addLast(libraryBuilder);
+    }
     if (accessor != null) {
-      builder.recordAccess(charOffset, noLength, accessor.fileUri);
+      libraryBuilder.recordAccess(charOffset, noLength, accessor.fileUri);
       if (!accessor.isPatch &&
           !accessor.isPart &&
           !target.backendTarget
@@ -139,7 +150,7 @@
             noLength, accessor.fileUri);
       }
     }
-    return builder;
+    return libraryBuilder;
   }
 
   void _ensureCoreLibrary() {
@@ -165,14 +176,14 @@
   void _logSummary(Template<SummaryTemplate> template) {
     ticker.log((Duration elapsed, Duration sinceStart) {
       int libraryCount = 0;
-      for (DillLibraryBuilder library in builders.values) {
+      for (DillLibraryBuilder library in libraryBuilders) {
         assert(library.loader == this);
         libraryCount++;
       }
       double ms = elapsed.inMicroseconds / Duration.microsecondsPerMillisecond;
       Message message = template.withArguments(
           libraryCount, byteCount, ms, byteCount / ms, ms / libraryCount);
-      print("$sinceStart: ${message.message}");
+      print("$sinceStart: ${message.problemMessage}");
     });
   }
 
@@ -218,7 +229,7 @@
     severity ??= message.code.severity;
     if (severity == Severity.ignored) return null;
     String trace = """
-message: ${message.message}
+message: ${message.problemMessage}
 charOffset: $charOffset
 fileUri: $fileUri
 severity: $severity
@@ -264,7 +275,7 @@
       Uri uri = library.importUri;
       if (filter == null || filter(library.importUri)) {
         libraries.add(library);
-        target.registerLibrary(library);
+        registerKnownLibrary(library);
         requestedLibraries.add(uri);
         requestedLibrariesFileUri.add(library.fileUri);
       }
@@ -290,7 +301,7 @@
     //
     // Create dill library builder (adds it to a map where it's fetched
     // again momentarily).
-    target.registerLibrary(library);
+    registerKnownLibrary(library);
     // Set up the dill library builder (fetch it from the map again, add it to
     // another map and setup some auxiliary things).
     return read(library.importUri, -1);
@@ -305,9 +316,8 @@
   }
 
   void finalizeExports({bool suppressFinalizationErrors: false}) {
-    for (LibraryBuilder builder in builders.values) {
-      DillLibraryBuilder library = builder as DillLibraryBuilder;
-      library.markAsReadyToFinalizeExports(
+    for (DillLibraryBuilder builder in libraryBuilders) {
+      builder.markAsReadyToFinalizeExports(
           suppressFinalizationErrors: suppressFinalizationErrors);
     }
   }
@@ -315,9 +325,10 @@
   @override
   ClassBuilder computeClassBuilderFromTargetClass(Class cls) {
     Library kernelLibrary = cls.enclosingLibrary;
-    LibraryBuilder? library = builders[kernelLibrary.importUri];
+    LibraryBuilder? library = lookupLibraryBuilder(kernelLibrary.importUri);
     if (library == null) {
-      library = currentSourceLoader?.builders[kernelLibrary.importUri];
+      library =
+          currentSourceLoader?.lookupLibraryBuilder(kernelLibrary.importUri);
     }
     return library!.lookupLocalMember(cls.name, required: true) as ClassBuilder;
   }
@@ -326,4 +337,28 @@
   TypeBuilder computeTypeBuilder(DartType type) {
     return type.accept(new TypeBuilderComputer(this));
   }
+
+  bool containsLibraryBuilder(Uri importUri) =>
+      _builders.containsKey(importUri);
+
+  @override
+  DillLibraryBuilder? lookupLibraryBuilder(Uri importUri) =>
+      _builders[importUri];
+
+  Iterable<DillLibraryBuilder> get libraryBuilders => _builders.values;
+
+  Iterable<Uri> get libraryImportUris => _builders.keys;
+
+  void registerLibraryBuilder(DillLibraryBuilder libraryBuilder) {
+    Uri importUri = libraryBuilder.importUri;
+    libraryBuilder.loader = this;
+    if (importUri.scheme == "dart" && importUri.path == "core") {
+      _coreLibrary = libraryBuilder;
+    }
+    _builders[importUri] = libraryBuilder;
+  }
+
+  DillLibraryBuilder? deregisterLibraryBuilder(Uri importUri) {
+    return _builders.remove(importUri);
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_target.dart b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
index 28ccfbc..b5b737e 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_target.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
@@ -4,7 +4,7 @@
 
 import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
 
-import 'package:kernel/ast.dart' show Library, Source;
+import 'package:kernel/ast.dart' show Source;
 
 import 'package:kernel/target/targets.dart' show Target;
 
@@ -20,16 +20,11 @@
 
 import '../target_implementation.dart' show TargetImplementation;
 
-import 'dill_library_builder.dart' show DillLibraryBuilder;
-
 import 'dill_loader.dart' show DillLoader;
 
 class DillTarget extends TargetImplementation {
   final Ticker ticker;
 
-  final Map<Uri, DillLibraryBuilder> _knownLibraryBuilders =
-      <Uri, DillLibraryBuilder>{};
-
   bool isLoaded = false;
 
   late final DillLoader loader;
@@ -92,24 +87,4 @@
     }
     isLoaded = true;
   }
-
-  /// Returns the [DillLibraryBuilder] corresponding to [uri].
-  ///
-  /// The [DillLibraryBuilder] is pulled from [_knownLibraryBuilders].
-  DillLibraryBuilder createLibraryBuilder(Uri uri) {
-    DillLibraryBuilder libraryBuilder =
-        _knownLibraryBuilders.remove(uri) as DillLibraryBuilder;
-    // ignore: unnecessary_null_comparison
-    assert(libraryBuilder != null, "No library found for $uri.");
-    return libraryBuilder;
-  }
-
-  void registerLibrary(Library library) {
-    _knownLibraryBuilders[library.importUri] =
-        new DillLibraryBuilder(library, loader);
-  }
-
-  void releaseAncillaryResources() {
-    _knownLibraryBuilders.clear();
-  }
 }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
index 697dbef..65a7fb6 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
@@ -74,8 +74,7 @@
 
   @override
   List<DartType> buildTypeArguments(
-      LibraryBuilder library, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      LibraryBuilder library, List<TypeBuilder>? arguments) {
     // For performance reasons, [typeVariables] aren't restored from [target].
     // So, if [arguments] is null, the default types should be retrieved from
     // [cls.typeParameters].
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
index 5674281..66e0e85 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
@@ -20,9 +20,9 @@
             isNonNullableByDefault)> templateAmbiguousExtensionMethod = const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The method '#name' is defined in multiple extensions for '#type' and neither is more specific.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
     withArguments: _withArgumentsAmbiguousExtensionMethod);
 
@@ -43,10 +43,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeAmbiguousExtensionMethod,
-      message:
+      problemMessage:
           """The method '${name}' is defined in multiple extensions for '${type}' and neither is more specific.""" +
               labeler.originMessages,
-      tip: """Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
+      correctionMessage: """Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -57,9 +57,9 @@
     templateAmbiguousExtensionOperator = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The operator '#name' is defined in multiple extensions for '#type' and neither is more specific.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
         withArguments: _withArgumentsAmbiguousExtensionOperator);
 
@@ -82,10 +82,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeAmbiguousExtensionOperator,
-      message:
+      problemMessage:
           """The operator '${name}' is defined in multiple extensions for '${type}' and neither is more specific.""" +
               labeler.originMessages,
-      tip: """Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
+      correctionMessage: """Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -96,9 +96,9 @@
     templateAmbiguousExtensionProperty = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The property '#name' is defined in multiple extensions for '#type' and neither is more specific.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
         withArguments: _withArgumentsAmbiguousExtensionProperty);
 
@@ -121,10 +121,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeAmbiguousExtensionProperty,
-      message:
+      problemMessage:
           """The property '${name}' is defined in multiple extensions for '${type}' and neither is more specific.""" +
               labeler.originMessages,
-      tip: """Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
+      correctionMessage: """Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -135,7 +135,7 @@
     const Template<
             Message Function(String name, DartType _type, DartType _type2,
                 bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#name' can't implement both '#type' and '#type2'""",
         withArguments: _withArgumentsAmbiguousSupertypes);
 
@@ -159,8 +159,9 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeAmbiguousSupertypes,
-      message: """'${name}' can't implement both '${type}' and '${type2}'""" +
-          labeler.originMessages,
+      problemMessage:
+          """'${name}' can't implement both '${type}' and '${type2}'""" +
+              labeler.originMessages,
       arguments: {'name': name, 'type': _type, 'type2': _type2});
 }
 
@@ -171,7 +172,7 @@
     templateArgumentTypeNotAssignable = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The argument type '#type' can't be assigned to the parameter type '#type2'.""",
         withArguments: _withArgumentsArgumentTypeNotAssignable);
 
@@ -194,7 +195,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeArgumentTypeNotAssignable,
-      message:
+      problemMessage:
           """The argument type '${type}' can't be assigned to the parameter type '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -207,7 +208,7 @@
     templateArgumentTypeNotAssignableNullability = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The argument type '#type' can't be assigned to the parameter type '#type2' because '#type' is nullable and '#type2' isn't.""",
         withArguments: _withArgumentsArgumentTypeNotAssignableNullability);
 
@@ -230,7 +231,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeArgumentTypeNotAssignableNullability,
-      message:
+      problemMessage:
           """The argument type '${type}' can't be assigned to the parameter type '${type2}' because '${type}' is nullable and '${type2}' isn't.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -240,7 +241,7 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateArgumentTypeNotAssignableNullabilityNull = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The value 'null' can't be assigned to the parameter type '#type' because '#type' is not nullable.""",
         withArguments: _withArgumentsArgumentTypeNotAssignableNullabilityNull);
 
@@ -258,7 +259,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeArgumentTypeNotAssignableNullabilityNull,
-      message:
+      problemMessage:
           """The value 'null' can't be assigned to the parameter type '${type}' because '${type}' is not nullable.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -271,7 +272,7 @@
     templateArgumentTypeNotAssignableNullabilityNullType = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The argument type '#type' can't be assigned to the parameter type '#type2' because '#type2' is not nullable.""",
         withArguments:
             _withArgumentsArgumentTypeNotAssignableNullabilityNullType);
@@ -295,7 +296,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeArgumentTypeNotAssignableNullabilityNullType,
-      message:
+      problemMessage:
           """The argument type '${type}' can't be assigned to the parameter type '${type2}' because '${type2}' is not nullable.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -308,7 +309,7 @@
     templateArgumentTypeNotAssignablePartNullability = const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 DartType _type4, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The argument type '#type' can't be assigned to the parameter type '#type2' because '#type3' is nullable and '#type4' isn't.""",
         withArguments: _withArgumentsArgumentTypeNotAssignablePartNullability);
 
@@ -339,7 +340,7 @@
   String type3 = type3Parts.join();
   String type4 = type4Parts.join();
   return new Message(codeArgumentTypeNotAssignablePartNullability,
-      message:
+      problemMessage:
           """The argument type '${type}' can't be assigned to the parameter type '${type2}' because '${type3}' is nullable and '${type4}' isn't.""" +
               labeler.originMessages,
       arguments: {
@@ -355,7 +356,7 @@
         Message Function(Constant _constant, bool isNonNullableByDefault)>
     templateConstEvalCaseImplementsEqual = const Template<
             Message Function(Constant _constant, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Case expression '#constant' does not have a primitive operator '=='.""",
         withArguments: _withArgumentsConstEvalCaseImplementsEqual);
 
@@ -373,7 +374,7 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalCaseImplementsEqual,
-      message:
+      problemMessage:
           """Case expression '${constant}' does not have a primitive operator '=='.""" +
               labeler.originMessages,
       arguments: {'constant': _constant});
@@ -384,7 +385,7 @@
         Message Function(Constant _constant, bool isNonNullableByDefault)>
     templateConstEvalDuplicateElement = const Template<
             Message Function(Constant _constant, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The element '#constant' conflicts with another existing element in the set.""",
         withArguments: _withArgumentsConstEvalDuplicateElement);
 
@@ -402,7 +403,7 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalDuplicateElement,
-      message:
+      problemMessage:
           """The element '${constant}' conflicts with another existing element in the set.""" +
               labeler.originMessages,
       arguments: {'constant': _constant});
@@ -413,7 +414,7 @@
         Message Function(Constant _constant, bool isNonNullableByDefault)>
     templateConstEvalDuplicateKey = const Template<
             Message Function(Constant _constant, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The key '#constant' conflicts with another existing key in the map.""",
         withArguments: _withArgumentsConstEvalDuplicateKey);
 
@@ -431,7 +432,7 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalDuplicateKey,
-      message:
+      problemMessage:
           """The key '${constant}' conflicts with another existing key in the map.""" +
               labeler.originMessages,
       arguments: {'constant': _constant});
@@ -442,7 +443,7 @@
         Message Function(Constant _constant, bool isNonNullableByDefault)>
     templateConstEvalElementImplementsEqual = const Template<
             Message Function(Constant _constant, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The element '#constant' does not have a primitive operator '=='.""",
         withArguments: _withArgumentsConstEvalElementImplementsEqual);
 
@@ -460,7 +461,7 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalElementImplementsEqual,
-      message:
+      problemMessage:
           """The element '${constant}' does not have a primitive operator '=='.""" +
               labeler.originMessages,
       arguments: {'constant': _constant});
@@ -470,7 +471,7 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateConstEvalFreeTypeParameter = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' is not a constant because it depends on a type parameter, only instantiated types are allowed.""",
         withArguments: _withArgumentsConstEvalFreeTypeParameter);
 
@@ -488,7 +489,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeConstEvalFreeTypeParameter,
-      message:
+      problemMessage:
           """The type '${type}' is not a constant because it depends on a type parameter, only instantiated types are allowed.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -501,7 +502,7 @@
     templateConstEvalInvalidBinaryOperandType = const Template<
             Message Function(String stringOKEmpty, Constant _constant,
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Binary operator '#stringOKEmpty' on '#constant' requires operand of type '#type', but was of type '#type2'.""",
         withArguments: _withArgumentsConstEvalInvalidBinaryOperandType);
 
@@ -532,7 +533,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeConstEvalInvalidBinaryOperandType,
-      message:
+      problemMessage:
           """Binary operator '${stringOKEmpty}' on '${constant}' requires operand of type '${type}', but was of type '${type2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -550,7 +551,7 @@
     templateConstEvalInvalidEqualsOperandType = const Template<
             Message Function(Constant _constant, DartType _type,
                 bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Binary operator '==' requires receiver constant '#constant' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type '#type'.""",
         withArguments: _withArgumentsConstEvalInvalidEqualsOperandType);
 
@@ -573,7 +574,7 @@
   String constant = constantParts.join();
   String type = typeParts.join();
   return new Message(codeConstEvalInvalidEqualsOperandType,
-      message:
+      problemMessage:
           """Binary operator '==' requires receiver constant '${constant}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type '${type}'.""" +
               labeler.originMessages,
       arguments: {'constant': _constant, 'type': _type});
@@ -584,9 +585,12 @@
         Message Function(String stringOKEmpty, Constant _constant,
             bool isNonNullableByDefault)>
     templateConstEvalInvalidMethodInvocation = const Template<
-            Message Function(String stringOKEmpty, Constant _constant,
-                bool isNonNullableByDefault)>(
-        messageTemplate:
+            Message Function(
+                String stringOKEmpty,
+                Constant _constant,
+                bool
+                    isNonNullableByDefault)>(
+        problemMessageTemplate:
             r"""The method '#stringOKEmpty' can't be invoked on '#constant' in a constant expression.""",
         withArguments: _withArgumentsConstEvalInvalidMethodInvocation);
 
@@ -609,7 +613,7 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalInvalidMethodInvocation,
-      message:
+      problemMessage:
           """The method '${stringOKEmpty}' can't be invoked on '${constant}' in a constant expression.""" +
               labeler.originMessages,
       arguments: {'stringOKEmpty': stringOKEmpty, 'constant': _constant});
@@ -620,9 +624,12 @@
         Message Function(String stringOKEmpty, Constant _constant,
             bool isNonNullableByDefault)> templateConstEvalInvalidPropertyGet =
     const Template<
-            Message Function(String stringOKEmpty, Constant _constant,
-                bool isNonNullableByDefault)>(
-        messageTemplate:
+            Message Function(
+                String stringOKEmpty,
+                Constant _constant,
+                bool
+                    isNonNullableByDefault)>(
+        problemMessageTemplate:
             r"""The property '#stringOKEmpty' can't be accessed on '#constant' in a constant expression.""",
         withArguments: _withArgumentsConstEvalInvalidPropertyGet);
 
@@ -644,7 +651,7 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalInvalidPropertyGet,
-      message:
+      problemMessage:
           """The property '${stringOKEmpty}' can't be accessed on '${constant}' in a constant expression.""" +
               labeler.originMessages,
       arguments: {'stringOKEmpty': stringOKEmpty, 'constant': _constant});
@@ -655,7 +662,7 @@
         Message Function(Constant _constant, bool isNonNullableByDefault)>
     templateConstEvalInvalidStringInterpolationOperand = const Template<
             Message Function(Constant _constant, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The constant value '#constant' can't be used as part of a string interpolation in a constant expression.
 Only values of type 'null', 'bool', 'int', 'double', or 'String' can be used.""",
         withArguments:
@@ -675,7 +682,7 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalInvalidStringInterpolationOperand,
-      message:
+      problemMessage:
           """The constant value '${constant}' can't be used as part of a string interpolation in a constant expression.
 Only values of type 'null', 'bool', 'int', 'double', or 'String' can be used.""" +
               labeler.originMessages,
@@ -687,7 +694,7 @@
         Message Function(Constant _constant, bool isNonNullableByDefault)>
     templateConstEvalInvalidSymbolName = const Template<
             Message Function(Constant _constant, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '#constant'.""",
         withArguments: _withArgumentsConstEvalInvalidSymbolName);
 
@@ -705,7 +712,7 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalInvalidSymbolName,
-      message:
+      problemMessage:
           """The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '${constant}'.""" +
               labeler.originMessages,
       arguments: {'constant': _constant});
@@ -721,7 +728,7 @@
             isNonNullableByDefault)> templateConstEvalInvalidType = const Template<
         Message Function(Constant _constant, DartType _type, DartType _type2,
             bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Expected constant '#constant' to be of type '#type', but was of type '#type2'.""",
     withArguments: _withArgumentsConstEvalInvalidType);
 
@@ -745,7 +752,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeConstEvalInvalidType,
-      message:
+      problemMessage:
           """Expected constant '${constant}' to be of type '${type}', but was of type '${type2}'.""" +
               labeler.originMessages,
       arguments: {'constant': _constant, 'type': _type, 'type2': _type2});
@@ -756,7 +763,7 @@
         Message Function(Constant _constant, bool isNonNullableByDefault)>
     templateConstEvalKeyImplementsEqual = const Template<
             Message Function(Constant _constant, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The key '#constant' does not have a primitive operator '=='.""",
         withArguments: _withArgumentsConstEvalKeyImplementsEqual);
 
@@ -776,7 +783,7 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalKeyImplementsEqual,
-      message:
+      problemMessage:
           """The key '${constant}' does not have a primitive operator '=='.""" +
               labeler.originMessages,
       arguments: {'constant': _constant});
@@ -787,7 +794,7 @@
         Message Function(Constant _constant, bool isNonNullableByDefault)>
     templateConstEvalUnhandledException = const Template<
             Message Function(Constant _constant, bool isNonNullableByDefault)>(
-        messageTemplate: r"""Unhandled exception: #constant""",
+        problemMessageTemplate: r"""Unhandled exception: #constant""",
         withArguments: _withArgumentsConstEvalUnhandledException);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -804,7 +811,8 @@
   List<Object> constantParts = labeler.labelConstant(_constant);
   String constant = constantParts.join();
   return new Message(codeConstEvalUnhandledException,
-      message: """Unhandled exception: ${constant}""" + labeler.originMessages,
+      problemMessage:
+          """Unhandled exception: ${constant}""" + labeler.originMessages,
       arguments: {'constant': _constant});
 }
 
@@ -817,9 +825,9 @@
             isNonNullableByDefault)> templateDeferredTypeAnnotation = const Template<
         Message Function(
             DartType _type, String name, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The type '#type' is deferred loaded via prefix '#name' and can't be used as a type annotation.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try removing 'deferred' from the import of '#name' or use a supertype of '#type' that isn't deferred.""",
     withArguments: _withArgumentsDeferredTypeAnnotation);
 
@@ -842,10 +850,10 @@
   name = demangleMixinApplicationName(name);
   String type = typeParts.join();
   return new Message(codeDeferredTypeAnnotation,
-      message:
+      problemMessage:
           """The type '${type}' is deferred loaded via prefix '${name}' and can't be used as a type annotation.""" +
               labeler.originMessages,
-      tip: """Try removing 'deferred' from the import of '${name}' or use a supertype of '${type}' that isn't deferred.""",
+      correctionMessage: """Try removing 'deferred' from the import of '${name}' or use a supertype of '${type}' that isn't deferred.""",
       arguments: {'type': _type, 'name': name});
 }
 
@@ -856,7 +864,8 @@
     templateFfiDartTypeMismatch = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate: r"""Expected '#type' to be a subtype of '#type2'.""",
+        problemMessageTemplate:
+            r"""Expected '#type' to be a subtype of '#type2'.""",
         withArguments: _withArgumentsFfiDartTypeMismatch);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -878,7 +887,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeFfiDartTypeMismatch,
-      message: """Expected '${type}' to be a subtype of '${type2}'.""" +
+      problemMessage: """Expected '${type}' to be a subtype of '${type2}'.""" +
           labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
 }
@@ -887,7 +896,7 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateFfiExpectedExceptionalReturn = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Expected an exceptional return value for a native callback returning '#type'.""",
         withArguments: _withArgumentsFfiExpectedExceptionalReturn);
 
@@ -905,7 +914,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeFfiExpectedExceptionalReturn,
-      message:
+      problemMessage:
           """Expected an exceptional return value for a native callback returning '${type}'.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -915,7 +924,7 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateFfiExpectedNoExceptionalReturn = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Exceptional return value cannot be provided for a native callback returning '#type'.""",
         withArguments: _withArgumentsFfiExpectedNoExceptionalReturn);
 
@@ -933,7 +942,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeFfiExpectedNoExceptionalReturn,
-      message:
+      problemMessage:
           """Exceptional return value cannot be provided for a native callback returning '${type}'.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -946,7 +955,7 @@
         bool
             isNonNullableByDefault)> templateFfiTypeInvalid = const Template<
         Message Function(DartType _type, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Expected type '#type' to be a valid and instantiated subtype of 'NativeType'.""",
     withArguments: _withArgumentsFfiTypeInvalid);
 
@@ -964,7 +973,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeFfiTypeInvalid,
-      message:
+      problemMessage:
           """Expected type '${type}' to be a valid and instantiated subtype of 'NativeType'.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -980,7 +989,7 @@
             isNonNullableByDefault)> templateFfiTypeMismatch = const Template<
         Message Function(DartType _type, DartType _type2, DartType _type3,
             bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Expected type '#type' to be '#type2', which is the Dart type corresponding to '#type3'.""",
     withArguments: _withArgumentsFfiTypeMismatch);
 
@@ -1004,7 +1013,7 @@
   String type2 = type2Parts.join();
   String type3 = type3Parts.join();
   return new Message(codeFfiTypeMismatch,
-      message:
+      problemMessage:
           """Expected type '${type}' to be '${type2}', which is the Dart type corresponding to '${type3}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2, 'type3': _type3});
@@ -1017,7 +1026,7 @@
     templateFieldNonNullableNotInitializedByConstructorError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""This constructor should initialize field '#name' because its type '#type' doesn't allow null.""",
         withArguments:
             _withArgumentsFieldNonNullableNotInitializedByConstructorError);
@@ -1041,7 +1050,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeFieldNonNullableNotInitializedByConstructorError,
-      message:
+      problemMessage:
           """This constructor should initialize field '${name}' because its type '${type}' doesn't allow null.""" +
               labeler.originMessages,
       arguments: {'name': name, 'type': _type});
@@ -1054,7 +1063,7 @@
     templateFieldNonNullableWithoutInitializerError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Field '#name' should be initialized because its type '#type' doesn't allow null.""",
         withArguments: _withArgumentsFieldNonNullableWithoutInitializerError);
 
@@ -1077,7 +1086,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeFieldNonNullableWithoutInitializerError,
-      message:
+      problemMessage:
           """Field '${name}' should be initialized because its type '${type}' doesn't allow null.""" +
               labeler.originMessages,
       arguments: {'name': name, 'type': _type});
@@ -1090,9 +1099,10 @@
     templateForInLoopElementTypeNotAssignable = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be assigned to a variable of type '#type2'.""",
-        tipTemplate: r"""Try changing the type of the variable.""",
+        correctionMessageTemplate:
+            r"""Try changing the type of the variable.""",
         withArguments: _withArgumentsForInLoopElementTypeNotAssignable);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1114,10 +1124,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeForInLoopElementTypeNotAssignable,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be assigned to a variable of type '${type2}'.""" +
               labeler.originMessages,
-      tip: """Try changing the type of the variable.""",
+      correctionMessage: """Try changing the type of the variable.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -1128,9 +1138,10 @@
     templateForInLoopElementTypeNotAssignableNullability = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be assigned to a variable of type '#type2' because '#type' is nullable and '#type2' isn't.""",
-        tipTemplate: r"""Try changing the type of the variable.""",
+        correctionMessageTemplate:
+            r"""Try changing the type of the variable.""",
         withArguments:
             _withArgumentsForInLoopElementTypeNotAssignableNullability);
 
@@ -1153,10 +1164,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeForInLoopElementTypeNotAssignableNullability,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be assigned to a variable of type '${type2}' because '${type}' is nullable and '${type2}' isn't.""" +
               labeler.originMessages,
-      tip: """Try changing the type of the variable.""",
+      correctionMessage: """Try changing the type of the variable.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -1167,9 +1178,10 @@
     templateForInLoopElementTypeNotAssignablePartNullability = const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 DartType _type4, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be assigned to a variable of type '#type2' because '#type3' is nullable and '#type4' isn't.""",
-        tipTemplate: r"""Try changing the type of the variable.""",
+        correctionMessageTemplate:
+            r"""Try changing the type of the variable.""",
         withArguments:
             _withArgumentsForInLoopElementTypeNotAssignablePartNullability);
 
@@ -1200,10 +1212,10 @@
   String type3 = type3Parts.join();
   String type4 = type4Parts.join();
   return new Message(codeForInLoopElementTypeNotAssignablePartNullability,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be assigned to a variable of type '${type2}' because '${type3}' is nullable and '${type4}' isn't.""" +
               labeler.originMessages,
-      tip: """Try changing the type of the variable.""",
+      correctionMessage: """Try changing the type of the variable.""",
       arguments: {
         'type': _type,
         'type2': _type2,
@@ -1219,7 +1231,7 @@
     templateForInLoopTypeNotIterable = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' used in the 'for' loop must implement '#type2'.""",
         withArguments: _withArgumentsForInLoopTypeNotIterable);
 
@@ -1242,7 +1254,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeForInLoopTypeNotIterable,
-      message:
+      problemMessage:
           """The type '${type}' used in the 'for' loop must implement '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -1255,7 +1267,7 @@
     templateForInLoopTypeNotIterableNullability = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' used in the 'for' loop must implement '#type2' because '#type' is nullable and '#type2' isn't.""",
         withArguments: _withArgumentsForInLoopTypeNotIterableNullability);
 
@@ -1278,7 +1290,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeForInLoopTypeNotIterableNullability,
-      message:
+      problemMessage:
           """The type '${type}' used in the 'for' loop must implement '${type2}' because '${type}' is nullable and '${type2}' isn't.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -1291,7 +1303,7 @@
     templateForInLoopTypeNotIterablePartNullability = const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 DartType _type4, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' used in the 'for' loop must implement '#type2' because '#type3' is nullable and '#type4' isn't.""",
         withArguments: _withArgumentsForInLoopTypeNotIterablePartNullability);
 
@@ -1322,7 +1334,7 @@
   String type3 = type3Parts.join();
   String type4 = type4Parts.join();
   return new Message(codeForInLoopTypeNotIterablePartNullability,
-      message:
+      problemMessage:
           """The type '${type}' used in the 'for' loop must implement '${type2}' because '${type3}' is nullable and '${type4}' isn't.""" +
               labeler.originMessages,
       arguments: {
@@ -1337,9 +1349,9 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateGenericFunctionTypeInferredAsActualTypeArgument = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Generic function type '#type' inferred as a type argument.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try providing a non-generic function type explicitly.""",
         withArguments:
             _withArgumentsGenericFunctionTypeInferredAsActualTypeArgument);
@@ -1358,10 +1370,11 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeGenericFunctionTypeInferredAsActualTypeArgument,
-      message:
+      problemMessage:
           """Generic function type '${type}' inferred as a type argument.""" +
               labeler.originMessages,
-      tip: """Try providing a non-generic function type explicitly.""",
+      correctionMessage:
+          """Try providing a non-generic function type explicitly.""",
       arguments: {'type': _type});
 }
 
@@ -1369,9 +1382,9 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateImplicitCallOfNonMethod = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Cannot invoke an instance of '#type' because it declares 'call' to be something other than a method.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try changing 'call' to a method or explicitly invoke 'call'.""",
         withArguments: _withArgumentsImplicitCallOfNonMethod);
 
@@ -1389,10 +1402,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeImplicitCallOfNonMethod,
-      message:
+      problemMessage:
           """Cannot invoke an instance of '${type}' because it declares 'call' to be something other than a method.""" +
               labeler.originMessages,
-      tip: """Try changing 'call' to a method or explicitly invoke 'call'.""",
+      correctionMessage: """Try changing 'call' to a method or explicitly invoke 'call'.""",
       arguments: {'type': _type});
 }
 
@@ -1403,7 +1416,7 @@
         bool
             isNonNullableByDefault)> templateImplicitReturnNull = const Template<
         Message Function(DartType _type, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""A non-null value must be returned since the return type '#type' doesn't allow null.""",
     withArguments: _withArgumentsImplicitReturnNull);
 
@@ -1421,7 +1434,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeImplicitReturnNull,
-      message:
+      problemMessage:
           """A non-null value must be returned since the return type '${type}' doesn't allow null.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -1434,7 +1447,7 @@
     templateIncompatibleRedirecteeFunctionType = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The constructor function type '#type' isn't a subtype of '#type2'.""",
         withArguments: _withArgumentsIncompatibleRedirecteeFunctionType);
 
@@ -1457,7 +1470,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeIncompatibleRedirecteeFunctionType,
-      message:
+      problemMessage:
           """The constructor function type '${type}' isn't a subtype of '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -1465,16 +1478,20 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
+    Message Function(
+        DartType _type,
+        DartType _type2,
+        String name,
+        String name2,
+        bool
+            isNonNullableByDefault)> templateIncorrectTypeArgument = const Template<
         Message Function(DartType _type, DartType _type2, String name,
-            String name2, bool isNonNullableByDefault)>
-    templateIncorrectTypeArgument = const Template<
-            Message Function(DartType _type, DartType _type2, String name,
-                String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'.""",
-        tipTemplate:
-            r"""Try changing type arguments so that they conform to the bounds.""",
-        withArguments: _withArgumentsIncorrectTypeArgument);
+            String name2, bool isNonNullableByDefault)>(
+    problemMessageTemplate:
+        r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'.""",
+    correctionMessageTemplate:
+        r"""Try changing type arguments so that they conform to the bounds.""",
+    withArguments: _withArgumentsIncorrectTypeArgument);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<
@@ -1502,10 +1519,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeIncorrectTypeArgument,
-      message:
+      problemMessage:
           """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}'.""" +
               labeler.originMessages,
-      tip: """Try changing type arguments so that they conform to the bounds.""",
+      correctionMessage: """Try changing type arguments so that they conform to the bounds.""",
       arguments: {
         'type': _type,
         'type2': _type2,
@@ -1521,9 +1538,9 @@
     templateIncorrectTypeArgumentInReturnType = const Template<
             Message Function(DartType _type, DartType _type2, String name,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the return type.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try changing type arguments so that they conform to the bounds.""",
         withArguments: _withArgumentsIncorrectTypeArgumentInReturnType);
 
@@ -1550,10 +1567,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeIncorrectTypeArgumentInReturnType,
-      message:
+      problemMessage:
           """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the return type.""" +
               labeler.originMessages,
-      tip: """Try changing type arguments so that they conform to the bounds.""",
+      correctionMessage: """Try changing type arguments so that they conform to the bounds.""",
       arguments: {
         'type': _type,
         'type2': _type2,
@@ -1581,9 +1598,9 @@
                 String name3,
                 String name4,
                 bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try changing type arguments so that they conform to the bounds.""",
         withArguments: _withArgumentsIncorrectTypeArgumentInSupertype);
 
@@ -1632,10 +1649,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeIncorrectTypeArgumentInSupertype,
-      message:
+      problemMessage:
           """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the supertype '${name3}' of class '${name4}'.""" +
               labeler.originMessages,
-      tip:
+      correctionMessage:
           """Try changing type arguments so that they conform to the bounds.""",
       arguments: {
         'type': _type,
@@ -1666,9 +1683,9 @@
                 String name3,
                 String name4,
                 bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
         withArguments: _withArgumentsIncorrectTypeArgumentInSupertypeInferred);
 
@@ -1717,10 +1734,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeIncorrectTypeArgumentInSupertypeInferred,
-      message:
+      problemMessage:
           """Inferred type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the supertype '${name3}' of class '${name4}'.""" +
               labeler.originMessages,
-      tip:
+      correctionMessage:
           """Try specifying type arguments explicitly so that they conform to the bounds.""",
       arguments: {
         'type': _type,
@@ -1739,9 +1756,9 @@
     templateIncorrectTypeArgumentInferred = const Template<
             Message Function(DartType _type, DartType _type2, String name,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
         withArguments: _withArgumentsIncorrectTypeArgumentInferred);
 
@@ -1771,10 +1788,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeIncorrectTypeArgumentInferred,
-      message:
+      problemMessage:
           """Inferred type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}'.""" +
               labeler.originMessages,
-      tip: """Try specifying type arguments explicitly so that they conform to the bounds.""",
+      correctionMessage: """Try specifying type arguments explicitly so that they conform to the bounds.""",
       arguments: {
         'type': _type,
         'type2': _type2,
@@ -1790,9 +1807,9 @@
     templateIncorrectTypeArgumentInstantiation = const Template<
             Message Function(DartType _type, DartType _type2, String name,
                 DartType _type3, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try changing type arguments so that they conform to the bounds.""",
         withArguments: _withArgumentsIncorrectTypeArgumentInstantiation);
 
@@ -1823,10 +1840,10 @@
   String type2 = type2Parts.join();
   String type3 = type3Parts.join();
   return new Message(codeIncorrectTypeArgumentInstantiation,
-      message:
+      problemMessage:
           """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${type3}'.""" +
               labeler.originMessages,
-      tip: """Try changing type arguments so that they conform to the bounds.""",
+      correctionMessage: """Try changing type arguments so that they conform to the bounds.""",
       arguments: {
         'type': _type,
         'type2': _type2,
@@ -1842,9 +1859,9 @@
     templateIncorrectTypeArgumentInstantiationInferred = const Template<
             Message Function(DartType _type, DartType _type2, String name,
                 DartType _type3, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
         withArguments:
             _withArgumentsIncorrectTypeArgumentInstantiationInferred);
@@ -1876,10 +1893,10 @@
   String type2 = type2Parts.join();
   String type3 = type3Parts.join();
   return new Message(codeIncorrectTypeArgumentInstantiationInferred,
-      message:
+      problemMessage:
           """Inferred type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${type3}'.""" +
               labeler.originMessages,
-      tip: """Try specifying type arguments explicitly so that they conform to the bounds.""",
+      correctionMessage: """Try specifying type arguments explicitly so that they conform to the bounds.""",
       arguments: {
         'type': _type,
         'type2': _type2,
@@ -1895,9 +1912,9 @@
     templateIncorrectTypeArgumentQualified = const Template<
             Message Function(DartType _type, DartType _type2, String name,
                 DartType _type3, String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3.#name2'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try changing type arguments so that they conform to the bounds.""",
         withArguments: _withArgumentsIncorrectTypeArgumentQualified);
 
@@ -1935,10 +1952,10 @@
   String type2 = type2Parts.join();
   String type3 = type3Parts.join();
   return new Message(codeIncorrectTypeArgumentQualified,
-      message:
+      problemMessage:
           """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${type3}.${name2}'.""" +
               labeler.originMessages,
-      tip: """Try changing type arguments so that they conform to the bounds.""",
+      correctionMessage: """Try changing type arguments so that they conform to the bounds.""",
       arguments: {
         'type': _type,
         'type2': _type2,
@@ -1955,9 +1972,9 @@
     templateIncorrectTypeArgumentQualifiedInferred = const Template<
             Message Function(DartType _type, DartType _type2, String name,
                 DartType _type3, String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3.#name2'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
         withArguments: _withArgumentsIncorrectTypeArgumentQualifiedInferred);
 
@@ -1991,10 +2008,10 @@
   String type2 = type2Parts.join();
   String type3 = type3Parts.join();
   return new Message(codeIncorrectTypeArgumentQualifiedInferred,
-      message:
+      problemMessage:
           """Inferred type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${type3}.${name2}'.""" +
               labeler.originMessages,
-      tip: """Try specifying type arguments explicitly so that they conform to the bounds.""",
+      correctionMessage: """Try specifying type arguments explicitly so that they conform to the bounds.""",
       arguments: {
         'type': _type,
         'type2': _type2,
@@ -2006,14 +2023,22 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
-        Message Function(String name, DartType _type, DartType _type2,
-            bool isNonNullableByDefault)>
+        Message Function(
+            String name,
+            DartType _type,
+            DartType _type2,
+            bool
+                isNonNullableByDefault)>
     templateInitializingFormalTypeMismatch = const Template<
-            Message Function(String name, DartType _type, DartType _type2,
-                bool isNonNullableByDefault)>(
-        messageTemplate:
+            Message Function(
+                String name,
+                DartType _type,
+                DartType _type2,
+                bool
+                    isNonNullableByDefault)>(
+        problemMessageTemplate:
             r"""The type of parameter '#name', '#type' is not a subtype of the corresponding field's type, '#type2'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try changing the type of parameter '#name' to a subtype of '#type2'.""",
         withArguments: _withArgumentsInitializingFormalTypeMismatch);
 
@@ -2037,10 +2062,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInitializingFormalTypeMismatch,
-      message:
+      problemMessage:
           """The type of parameter '${name}', '${type}' is not a subtype of the corresponding field's type, '${type2}'.""" +
               labeler.originMessages,
-      tip: """Try changing the type of parameter '${name}' to a subtype of '${type2}'.""",
+      correctionMessage: """Try changing the type of parameter '${name}' to a subtype of '${type2}'.""",
       arguments: {'name': name, 'type': _type, 'type2': _type2});
 }
 
@@ -2048,9 +2073,9 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateInstantiationNonGenericFunctionType = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The static type of the explicit instantiation operand must be a generic function type but is '#type'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try changing the operand or remove the type arguments.""",
         withArguments: _withArgumentsInstantiationNonGenericFunctionType);
 
@@ -2068,10 +2093,41 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeInstantiationNonGenericFunctionType,
-      message:
+      problemMessage:
           """The static type of the explicit instantiation operand must be a generic function type but is '${type}'.""" +
               labeler.originMessages,
-      tip: """Try changing the operand or remove the type arguments.""",
+      correctionMessage: """Try changing the operand or remove the type arguments.""",
+      arguments: {'type': _type});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
+    templateInstantiationNullableGenericFunctionType = const Template<
+            Message Function(DartType _type, bool isNonNullableByDefault)>(
+        problemMessageTemplate:
+            r"""The static type of the explicit instantiation operand must be a non-null generic function type but is '#type'.""",
+        correctionMessageTemplate:
+            r"""Try changing the operand or remove the type arguments.""",
+        withArguments: _withArgumentsInstantiationNullableGenericFunctionType);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(DartType _type, bool isNonNullableByDefault)>
+    codeInstantiationNullableGenericFunctionType =
+    const Code<Message Function(DartType _type, bool isNonNullableByDefault)>(
+        "InstantiationNullableGenericFunctionType",
+        analyzerCodes: <String>["DISALLOWED_TYPE_INSTANTIATION_EXPRESSION"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsInstantiationNullableGenericFunctionType(
+    DartType _type, bool isNonNullableByDefault) {
+  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
+  List<Object> typeParts = labeler.labelType(_type);
+  String type = typeParts.join();
+  return new Message(codeInstantiationNullableGenericFunctionType,
+      problemMessage:
+          """The static type of the explicit instantiation operand must be a non-null generic function type but is '${type}'.""" +
+              labeler.originMessages,
+      correctionMessage: """Try changing the operand or remove the type arguments.""",
       arguments: {'type': _type});
 }
 
@@ -2082,7 +2138,7 @@
     templateInternalProblemUnsupportedNullability = const Template<
             Message Function(
                 String string, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Unsupported nullability value '#string' on type '#type'.""",
         withArguments: _withArgumentsInternalProblemUnsupportedNullability);
 
@@ -2104,7 +2160,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeInternalProblemUnsupportedNullability,
-      message:
+      problemMessage:
           """Unsupported nullability value '${string}' on type '${type}'.""" +
               labeler.originMessages,
       arguments: {'string': string, 'type': _type});
@@ -2117,7 +2173,7 @@
     templateInvalidAssignmentError = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be assigned to a variable of type '#type2'.""",
         withArguments: _withArgumentsInvalidAssignmentError);
 
@@ -2140,7 +2196,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidAssignmentError,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be assigned to a variable of type '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -2153,7 +2209,7 @@
     templateInvalidAssignmentErrorNullability = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be assigned to a variable of type '#type2' because '#type' is nullable and '#type2' isn't.""",
         withArguments: _withArgumentsInvalidAssignmentErrorNullability);
 
@@ -2176,7 +2232,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidAssignmentErrorNullability,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be assigned to a variable of type '${type2}' because '${type}' is nullable and '${type2}' isn't.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -2186,7 +2242,7 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateInvalidAssignmentErrorNullabilityNull = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The value 'null' can't be assigned to a variable of type '#type' because '#type' is not nullable.""",
         withArguments: _withArgumentsInvalidAssignmentErrorNullabilityNull);
 
@@ -2204,7 +2260,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeInvalidAssignmentErrorNullabilityNull,
-      message:
+      problemMessage:
           """The value 'null' can't be assigned to a variable of type '${type}' because '${type}' is not nullable.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -2217,7 +2273,7 @@
     templateInvalidAssignmentErrorNullabilityNullType = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be assigned to a variable of type '#type2' because '#type2' is not nullable.""",
         withArguments: _withArgumentsInvalidAssignmentErrorNullabilityNullType);
 
@@ -2240,7 +2296,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidAssignmentErrorNullabilityNullType,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be assigned to a variable of type '${type2}' because '${type2}' is not nullable.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -2253,7 +2309,7 @@
     templateInvalidAssignmentErrorPartNullability = const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 DartType _type4, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be assigned to a variable of type '#type2' because '#type3' is nullable and '#type4' isn't.""",
         withArguments: _withArgumentsInvalidAssignmentErrorPartNullability);
 
@@ -2284,7 +2340,7 @@
   String type3 = type3Parts.join();
   String type4 = type4Parts.join();
   return new Message(codeInvalidAssignmentErrorPartNullability,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be assigned to a variable of type '${type2}' because '${type3}' is nullable and '${type4}' isn't.""" +
               labeler.originMessages,
       arguments: {
@@ -2302,11 +2358,11 @@
         DartType _type2,
         bool
             isNonNullableByDefault)> templateInvalidCastFunctionExpr = const Template<
-        Message Function(
-            DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-    messageTemplate:
+        Message Function(DartType _type, DartType _type2,
+            bool isNonNullableByDefault)>(
+    problemMessageTemplate:
         r"""The function expression type '#type' isn't of expected type '#type2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Change the type of the function expression or the context in which it is used.""",
     withArguments: _withArgumentsInvalidCastFunctionExpr);
 
@@ -2329,10 +2385,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidCastFunctionExpr,
-      message:
+      problemMessage:
           """The function expression type '${type}' isn't of expected type '${type2}'.""" +
               labeler.originMessages,
-      tip: """Change the type of the function expression or the context in which it is used.""",
+      correctionMessage: """Change the type of the function expression or the context in which it is used.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -2343,14 +2399,11 @@
         DartType _type2,
         bool
             isNonNullableByDefault)> templateInvalidCastLiteralList = const Template<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            bool
-                isNonNullableByDefault)>(
-    messageTemplate:
+        Message Function(DartType _type, DartType _type2,
+            bool isNonNullableByDefault)>(
+    problemMessageTemplate:
         r"""The list literal type '#type' isn't of expected type '#type2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Change the type of the list literal or the context in which it is used.""",
     withArguments: _withArgumentsInvalidCastLiteralList);
 
@@ -2373,10 +2426,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidCastLiteralList,
-      message:
+      problemMessage:
           """The list literal type '${type}' isn't of expected type '${type2}'.""" +
               labeler.originMessages,
-      tip: """Change the type of the list literal or the context in which it is used.""",
+      correctionMessage: """Change the type of the list literal or the context in which it is used.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -2387,14 +2440,11 @@
         DartType _type2,
         bool
             isNonNullableByDefault)> templateInvalidCastLiteralMap = const Template<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            bool
-                isNonNullableByDefault)>(
-    messageTemplate:
+        Message Function(DartType _type, DartType _type2,
+            bool isNonNullableByDefault)>(
+    problemMessageTemplate:
         r"""The map literal type '#type' isn't of expected type '#type2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Change the type of the map literal or the context in which it is used.""",
     withArguments: _withArgumentsInvalidCastLiteralMap);
 
@@ -2417,10 +2467,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidCastLiteralMap,
-      message:
+      problemMessage:
           """The map literal type '${type}' isn't of expected type '${type2}'.""" +
               labeler.originMessages,
-      tip: """Change the type of the map literal or the context in which it is used.""",
+      correctionMessage: """Change the type of the map literal or the context in which it is used.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -2431,14 +2481,11 @@
         DartType _type2,
         bool
             isNonNullableByDefault)> templateInvalidCastLiteralSet = const Template<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            bool
-                isNonNullableByDefault)>(
-    messageTemplate:
+        Message Function(DartType _type, DartType _type2,
+            bool isNonNullableByDefault)>(
+    problemMessageTemplate:
         r"""The set literal type '#type' isn't of expected type '#type2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Change the type of the set literal or the context in which it is used.""",
     withArguments: _withArgumentsInvalidCastLiteralSet);
 
@@ -2461,10 +2508,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidCastLiteralSet,
-      message:
+      problemMessage:
           """The set literal type '${type}' isn't of expected type '${type2}'.""" +
               labeler.originMessages,
-      tip: """Change the type of the set literal or the context in which it is used.""",
+      correctionMessage: """Change the type of the set literal or the context in which it is used.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -2475,14 +2522,11 @@
         DartType _type2,
         bool
             isNonNullableByDefault)> templateInvalidCastLocalFunction = const Template<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            bool
-                isNonNullableByDefault)>(
-    messageTemplate:
+        Message Function(DartType _type, DartType _type2,
+            bool isNonNullableByDefault)>(
+    problemMessageTemplate:
         r"""The local function has type '#type' that isn't of expected type '#type2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Change the type of the function or the context in which it is used.""",
     withArguments: _withArgumentsInvalidCastLocalFunction);
 
@@ -2505,10 +2549,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidCastLocalFunction,
-      message:
+      problemMessage:
           """The local function has type '${type}' that isn't of expected type '${type2}'.""" +
               labeler.originMessages,
-      tip: """Change the type of the function or the context in which it is used.""",
+      correctionMessage: """Change the type of the function or the context in which it is used.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -2519,14 +2563,11 @@
         DartType _type2,
         bool
             isNonNullableByDefault)> templateInvalidCastNewExpr = const Template<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            bool
-                isNonNullableByDefault)>(
-    messageTemplate:
+        Message Function(DartType _type, DartType _type2,
+            bool isNonNullableByDefault)>(
+    problemMessageTemplate:
         r"""The constructor returns type '#type' that isn't of expected type '#type2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Change the type of the object being constructed or the context in which it is used.""",
     withArguments: _withArgumentsInvalidCastNewExpr);
 
@@ -2549,10 +2590,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidCastNewExpr,
-      message:
+      problemMessage:
           """The constructor returns type '${type}' that isn't of expected type '${type2}'.""" +
               labeler.originMessages,
-      tip: """Change the type of the object being constructed or the context in which it is used.""",
+      correctionMessage: """Change the type of the object being constructed or the context in which it is used.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -2563,11 +2604,11 @@
         DartType _type2,
         bool
             isNonNullableByDefault)> templateInvalidCastStaticMethod = const Template<
-        Message Function(
-            DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-    messageTemplate:
+        Message Function(DartType _type, DartType _type2,
+            bool isNonNullableByDefault)>(
+    problemMessageTemplate:
         r"""The static method has type '#type' that isn't of expected type '#type2'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Change the type of the method or the context in which it is used.""",
     withArguments: _withArgumentsInvalidCastStaticMethod);
 
@@ -2590,10 +2631,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidCastStaticMethod,
-      message:
+      problemMessage:
           """The static method has type '${type}' that isn't of expected type '${type2}'.""" +
               labeler.originMessages,
-      tip: """Change the type of the method or the context in which it is used.""",
+      correctionMessage: """Change the type of the method or the context in which it is used.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -2604,9 +2645,9 @@
     templateInvalidCastTopLevelFunction = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The top level function has type '#type' that isn't of expected type '#type2'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Change the type of the function or the context in which it is used.""",
         withArguments: _withArgumentsInvalidCastTopLevelFunction);
 
@@ -2629,10 +2670,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidCastTopLevelFunction,
-      message:
+      problemMessage:
           """The top level function has type '${type}' that isn't of expected type '${type2}'.""" +
               labeler.originMessages,
-      tip: """Change the type of the function or the context in which it is used.""",
+      correctionMessage: """Change the type of the function or the context in which it is used.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -2643,7 +2684,7 @@
     templateInvalidGetterSetterType = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the getter '#name' is not a subtype of the type '#type2' of the setter '#name2'.""",
         withArguments: _withArgumentsInvalidGetterSetterType);
 
@@ -2669,7 +2710,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterType,
-      message:
+      problemMessage:
           """The type '${type}' of the getter '${name}' is not a subtype of the type '${type2}' of the setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -2687,7 +2728,7 @@
     templateInvalidGetterSetterTypeBothInheritedField = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the inherited field '#name' is not a subtype of the type '#type2' of the inherited setter '#name2'.""",
         withArguments: _withArgumentsInvalidGetterSetterTypeBothInheritedField);
 
@@ -2714,7 +2755,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeBothInheritedField,
-      message:
+      problemMessage:
           """The type '${type}' of the inherited field '${name}' is not a subtype of the type '${type2}' of the inherited setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -2732,7 +2773,7 @@
     templateInvalidGetterSetterTypeBothInheritedFieldLegacy = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the inherited field '#name' is not assignable to the type '#type2' of the inherited setter '#name2'.""",
         withArguments:
             _withArgumentsInvalidGetterSetterTypeBothInheritedFieldLegacy);
@@ -2764,7 +2805,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeBothInheritedFieldLegacy,
-      message:
+      problemMessage:
           """The type '${type}' of the inherited field '${name}' is not assignable to the type '${type2}' of the inherited setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -2782,7 +2823,7 @@
     templateInvalidGetterSetterTypeBothInheritedGetter = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the inherited getter '#name' is not a subtype of the type '#type2' of the inherited setter '#name2'.""",
         withArguments:
             _withArgumentsInvalidGetterSetterTypeBothInheritedGetter);
@@ -2810,7 +2851,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeBothInheritedGetter,
-      message:
+      problemMessage:
           """The type '${type}' of the inherited getter '${name}' is not a subtype of the type '${type2}' of the inherited setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -2828,7 +2869,7 @@
     templateInvalidGetterSetterTypeBothInheritedGetterLegacy = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the inherited getter '#name' is not assignable to the type '#type2' of the inherited setter '#name2'.""",
         withArguments:
             _withArgumentsInvalidGetterSetterTypeBothInheritedGetterLegacy);
@@ -2860,7 +2901,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeBothInheritedGetterLegacy,
-      message:
+      problemMessage:
           """The type '${type}' of the inherited getter '${name}' is not assignable to the type '${type2}' of the inherited setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -2878,7 +2919,7 @@
     templateInvalidGetterSetterTypeFieldInherited = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the inherited field '#name' is not a subtype of the type '#type2' of the setter '#name2'.""",
         withArguments: _withArgumentsInvalidGetterSetterTypeFieldInherited);
 
@@ -2905,7 +2946,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeFieldInherited,
-      message:
+      problemMessage:
           """The type '${type}' of the inherited field '${name}' is not a subtype of the type '${type2}' of the setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -2923,7 +2964,7 @@
     templateInvalidGetterSetterTypeFieldInheritedLegacy = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the inherited field '#name' is not assignable to the type '#type2' of the setter '#name2'.""",
         withArguments:
             _withArgumentsInvalidGetterSetterTypeFieldInheritedLegacy);
@@ -2955,7 +2996,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeFieldInheritedLegacy,
-      message:
+      problemMessage:
           """The type '${type}' of the inherited field '${name}' is not assignable to the type '${type2}' of the setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -2973,7 +3014,7 @@
     templateInvalidGetterSetterTypeGetterInherited = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the inherited getter '#name' is not a subtype of the type '#type2' of the setter '#name2'.""",
         withArguments: _withArgumentsInvalidGetterSetterTypeGetterInherited);
 
@@ -3000,7 +3041,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeGetterInherited,
-      message:
+      problemMessage:
           """The type '${type}' of the inherited getter '${name}' is not a subtype of the type '${type2}' of the setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -3018,7 +3059,7 @@
     templateInvalidGetterSetterTypeGetterInheritedLegacy = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the inherited getter '#name' is not assignable to the type '#type2' of the setter '#name2'.""",
         withArguments:
             _withArgumentsInvalidGetterSetterTypeGetterInheritedLegacy);
@@ -3050,7 +3091,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeGetterInheritedLegacy,
-      message:
+      problemMessage:
           """The type '${type}' of the inherited getter '${name}' is not assignable to the type '${type2}' of the setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -3068,7 +3109,7 @@
     templateInvalidGetterSetterTypeLegacy = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the getter '#name' is not assignable to the type '#type2' of the setter '#name2'.""",
         withArguments: _withArgumentsInvalidGetterSetterTypeLegacy);
 
@@ -3095,7 +3136,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeLegacy,
-      message:
+      problemMessage:
           """The type '${type}' of the getter '${name}' is not assignable to the type '${type2}' of the setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -3113,7 +3154,7 @@
     templateInvalidGetterSetterTypeSetterInheritedField = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the field '#name' is not a subtype of the type '#type2' of the inherited setter '#name2'.""",
         withArguments:
             _withArgumentsInvalidGetterSetterTypeSetterInheritedField);
@@ -3145,7 +3186,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeSetterInheritedField,
-      message:
+      problemMessage:
           """The type '${type}' of the field '${name}' is not a subtype of the type '${type2}' of the inherited setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -3163,7 +3204,7 @@
     templateInvalidGetterSetterTypeSetterInheritedFieldLegacy = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the field '#name' is not assignable to the type '#type2' of the inherited setter '#name2'.""",
         withArguments:
             _withArgumentsInvalidGetterSetterTypeSetterInheritedFieldLegacy);
@@ -3195,7 +3236,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeSetterInheritedFieldLegacy,
-      message:
+      problemMessage:
           """The type '${type}' of the field '${name}' is not assignable to the type '${type2}' of the inherited setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -3213,7 +3254,7 @@
     templateInvalidGetterSetterTypeSetterInheritedGetter = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the getter '#name' is not a subtype of the type '#type2' of the inherited setter '#name2'.""",
         withArguments:
             _withArgumentsInvalidGetterSetterTypeSetterInheritedGetter);
@@ -3245,7 +3286,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeSetterInheritedGetter,
-      message:
+      problemMessage:
           """The type '${type}' of the getter '${name}' is not a subtype of the type '${type2}' of the inherited setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -3263,7 +3304,7 @@
     templateInvalidGetterSetterTypeSetterInheritedGetterLegacy = const Template<
             Message Function(DartType _type, String name, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the getter '#name' is not assignable to the type '#type2' of the inherited setter '#name2'.""",
         withArguments:
             _withArgumentsInvalidGetterSetterTypeSetterInheritedGetterLegacy);
@@ -3295,7 +3336,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidGetterSetterTypeSetterInheritedGetterLegacy,
-      message:
+      problemMessage:
           """The type '${type}' of the getter '${name}' is not assignable to the type '${type2}' of the inherited setter '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -3315,7 +3356,7 @@
             isNonNullableByDefault)> templateInvalidReturn = const Template<
         Message Function(
             DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""A value of type '#type' can't be returned from a function with return type '#type2'.""",
     withArguments: _withArgumentsInvalidReturn);
 
@@ -3338,7 +3379,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidReturn,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be returned from a function with return type '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -3353,7 +3394,7 @@
             isNonNullableByDefault)> templateInvalidReturnAsync = const Template<
         Message Function(
             DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""A value of type '#type' can't be returned from an async function with return type '#type2'.""",
     withArguments: _withArgumentsInvalidReturnAsync);
 
@@ -3376,7 +3417,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidReturnAsync,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be returned from an async function with return type '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -3389,7 +3430,7 @@
     templateInvalidReturnAsyncNullability = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be returned from an async function with return type '#type2' because '#type' is nullable and '#type2' isn't.""",
         withArguments: _withArgumentsInvalidReturnAsyncNullability);
 
@@ -3412,7 +3453,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidReturnAsyncNullability,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be returned from an async function with return type '${type2}' because '${type}' is nullable and '${type2}' isn't.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -3422,7 +3463,7 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateInvalidReturnAsyncNullabilityNull = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The value 'null' can't be returned from an async function with return type '#type' because '#type' is not nullable.""",
         withArguments: _withArgumentsInvalidReturnAsyncNullabilityNull);
 
@@ -3440,7 +3481,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeInvalidReturnAsyncNullabilityNull,
-      message:
+      problemMessage:
           """The value 'null' can't be returned from an async function with return type '${type}' because '${type}' is not nullable.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -3453,7 +3494,7 @@
     templateInvalidReturnAsyncNullabilityNullType = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be returned from an async function with return type '#type2' because '#type2' is not nullable.""",
         withArguments: _withArgumentsInvalidReturnAsyncNullabilityNullType);
 
@@ -3476,7 +3517,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidReturnAsyncNullabilityNullType,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be returned from an async function with return type '${type2}' because '${type2}' is not nullable.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -3489,7 +3530,7 @@
     templateInvalidReturnAsyncPartNullability = const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 DartType _type4, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be returned from an async function with return type '#type2' because '#type3' is nullable and '#type4' isn't.""",
         withArguments: _withArgumentsInvalidReturnAsyncPartNullability);
 
@@ -3520,7 +3561,7 @@
   String type3 = type3Parts.join();
   String type4 = type4Parts.join();
   return new Message(codeInvalidReturnAsyncPartNullability,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be returned from an async function with return type '${type2}' because '${type3}' is nullable and '${type4}' isn't.""" +
               labeler.originMessages,
       arguments: {
@@ -3538,7 +3579,7 @@
     templateInvalidReturnNullability = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be returned from a function with return type '#type2' because '#type' is nullable and '#type2' isn't.""",
         withArguments: _withArgumentsInvalidReturnNullability);
 
@@ -3561,7 +3602,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidReturnNullability,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be returned from a function with return type '${type2}' because '${type}' is nullable and '${type2}' isn't.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -3571,7 +3612,7 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateInvalidReturnNullabilityNull = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The value 'null' can't be returned from a function with return type '#type' because '#type' is not nullable.""",
         withArguments: _withArgumentsInvalidReturnNullabilityNull);
 
@@ -3589,7 +3630,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeInvalidReturnNullabilityNull,
-      message:
+      problemMessage:
           """The value 'null' can't be returned from a function with return type '${type}' because '${type}' is not nullable.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -3602,7 +3643,7 @@
     templateInvalidReturnNullabilityNullType = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be returned from a function with return type '#type2' because '#type2' is not nullable.""",
         withArguments: _withArgumentsInvalidReturnNullabilityNullType);
 
@@ -3625,7 +3666,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeInvalidReturnNullabilityNullType,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be returned from a function with return type '${type2}' because '${type2}' is not nullable.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -3638,7 +3679,7 @@
     templateInvalidReturnPartNullability = const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 DartType _type4, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""A value of type '#type' can't be returned from a function with return type '#type2' because '#type3' is nullable and '#type4' isn't.""",
         withArguments: _withArgumentsInvalidReturnPartNullability);
 
@@ -3669,7 +3710,7 @@
   String type3 = type3Parts.join();
   String type4 = type4Parts.join();
   return new Message(codeInvalidReturnPartNullability,
-      message:
+      problemMessage:
           """A value of type '${type}' can't be returned from a function with return type '${type2}' because '${type3}' is nullable and '${type4}' isn't.""" +
               labeler.originMessages,
       arguments: {
@@ -3687,7 +3728,7 @@
     templateMainWrongParameterType = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the first parameter of the 'main' method is not a supertype of '#type2'.""",
         withArguments: _withArgumentsMainWrongParameterType);
 
@@ -3710,7 +3751,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeMainWrongParameterType,
-      message:
+      problemMessage:
           """The type '${type}' of the first parameter of the 'main' method is not a supertype of '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -3723,7 +3764,7 @@
     templateMainWrongParameterTypeExported = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#type' of the first parameter of the exported 'main' method is not a supertype of '#type2'.""",
         withArguments: _withArgumentsMainWrongParameterTypeExported);
 
@@ -3746,7 +3787,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeMainWrongParameterTypeExported,
-      message:
+      problemMessage:
           """The type '${type}' of the first parameter of the exported 'main' method is not a supertype of '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -3759,7 +3800,7 @@
     templateMixinApplicationIncompatibleSupertype = const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""'#type' doesn't implement '#type2' so it can't be used with '#type3'.""",
         withArguments: _withArgumentsMixinApplicationIncompatibleSupertype);
 
@@ -3784,7 +3825,7 @@
   String type2 = type2Parts.join();
   String type3 = type3Parts.join();
   return new Message(codeMixinApplicationIncompatibleSupertype,
-      message:
+      problemMessage:
           """'${type}' doesn't implement '${type2}' so it can't be used with '${type3}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2, 'type3': _type3});
@@ -3794,11 +3835,10 @@
 const Template<
         Message Function(String name, String name2, DartType _type,
             bool isNonNullableByDefault)>
-    templateMixinInferenceNoMatchingClass =
-    const Template<
+    templateMixinInferenceNoMatchingClass = const Template<
             Message Function(String name, String name2, DartType _type,
                 bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Type parameters couldn't be inferred for the mixin '#name' because '#name2' does not implement the mixin's supertype constraint '#type'.""",
         withArguments: _withArgumentsMixinInferenceNoMatchingClass);
 
@@ -3822,7 +3862,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeMixinInferenceNoMatchingClass,
-      message:
+      problemMessage:
           """Type parameters couldn't be inferred for the mixin '${name}' because '${name2}' does not implement the mixin's supertype constraint '${type}'.""" +
               labeler.originMessages,
       arguments: {'name': name, 'name2': name2, 'type': _type});
@@ -3832,7 +3872,8 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateNonNullAwareSpreadIsNull = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate: r"""Can't spread a value with static type '#type'.""",
+        problemMessageTemplate:
+            r"""Can't spread a value with static type '#type'.""",
         withArguments: _withArgumentsNonNullAwareSpreadIsNull);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3849,7 +3890,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeNonNullAwareSpreadIsNull,
-      message: """Can't spread a value with static type '${type}'.""" +
+      problemMessage: """Can't spread a value with static type '${type}'.""" +
           labeler.originMessages,
       arguments: {'type': _type});
 }
@@ -3861,7 +3902,7 @@
     templateNonNullableInNullAware = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Operand of null-aware operation '#name' has type '#type' which excludes null.""",
         withArguments: _withArgumentsNonNullableInNullAware);
 
@@ -3884,7 +3925,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeNonNullableInNullAware,
-      message:
+      problemMessage:
           """Operand of null-aware operation '${name}' has type '${type}' which excludes null.""" +
               labeler.originMessages,
       arguments: {'name': name, 'type': _type});
@@ -3894,9 +3935,9 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateNullableExpressionCallError = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't use an expression of type '#type' as a function because it's potentially null.""",
-        tipTemplate: r"""Try calling using ?.call instead.""",
+        correctionMessageTemplate: r"""Try calling using ?.call instead.""",
         withArguments: _withArgumentsNullableExpressionCallError);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3913,10 +3954,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeNullableExpressionCallError,
-      message:
+      problemMessage:
           """Can't use an expression of type '${type}' as a function because it's potentially null.""" +
               labeler.originMessages,
-      tip: """Try calling using ?.call instead.""",
+      correctionMessage: """Try calling using ?.call instead.""",
       arguments: {'type': _type});
 }
 
@@ -3927,9 +3968,9 @@
     templateNullableMethodCallError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Method '#name' cannot be called on '#type' because it is potentially null.""",
-        tipTemplate: r"""Try calling using ?. instead.""",
+        correctionMessageTemplate: r"""Try calling using ?. instead.""",
         withArguments: _withArgumentsNullableMethodCallError);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3949,10 +3990,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeNullableMethodCallError,
-      message:
+      problemMessage:
           """Method '${name}' cannot be called on '${type}' because it is potentially null.""" +
               labeler.originMessages,
-      tip: """Try calling using ?. instead.""",
+      correctionMessage: """Try calling using ?. instead.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -3963,7 +4004,7 @@
     templateNullableOperatorCallError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Operator '#name' cannot be called on '#type' because it is potentially null.""",
         withArguments: _withArgumentsNullableOperatorCallError);
 
@@ -3986,7 +4027,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeNullableOperatorCallError,
-      message:
+      problemMessage:
           """Operator '${name}' cannot be called on '${type}' because it is potentially null.""" +
               labeler.originMessages,
       arguments: {'name': name, 'type': _type});
@@ -3999,9 +4040,9 @@
     templateNullablePropertyAccessError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Property '#name' cannot be accessed on '#type' because it is potentially null.""",
-        tipTemplate: r"""Try accessing using ?. instead.""",
+        correctionMessageTemplate: r"""Try accessing using ?. instead.""",
         withArguments: _withArgumentsNullablePropertyAccessError);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4023,10 +4064,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeNullablePropertyAccessError,
-      message:
+      problemMessage:
           """Property '${name}' cannot be accessed on '${type}' because it is potentially null.""" +
               labeler.originMessages,
-      tip: """Try accessing using ?. instead.""",
+      correctionMessage: """Try accessing using ?. instead.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -4037,9 +4078,9 @@
     templateOptionalNonNullableWithoutInitializerError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The parameter '#name' can't have a value of 'null' because of its type '#type', but the implicit default value is 'null'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try adding either an explicit non-'null' default value or the 'required' modifier.""",
         withArguments:
             _withArgumentsOptionalNonNullableWithoutInitializerError);
@@ -4063,10 +4104,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeOptionalNonNullableWithoutInitializerError,
-      message:
+      problemMessage:
           """The parameter '${name}' can't have a value of 'null' because of its type '${type}', but the implicit default value is 'null'.""" +
               labeler.originMessages,
-      tip: """Try adding either an explicit non-'null' default value or the 'required' modifier.""",
+      correctionMessage: """Try adding either an explicit non-'null' default value or the 'required' modifier.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -4077,9 +4118,9 @@
     templateOverrideTypeMismatchParameter = const Template<
             Message Function(String name, String name2, DartType _type,
                 DartType _type2, String name3, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The parameter '#name' of the method '#name2' has type '#type', which does not match the corresponding type, '#type2', in the overridden method, '#name3'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Change to a supertype of '#type2', or, for a covariant parameter, a subtype.""",
         withArguments: _withArgumentsOverrideTypeMismatchParameter);
 
@@ -4117,10 +4158,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeOverrideTypeMismatchParameter,
-      message:
+      problemMessage:
           """The parameter '${name}' of the method '${name2}' has type '${type}', which does not match the corresponding type, '${type2}', in the overridden method, '${name3}'.""" +
               labeler.originMessages,
-      tip: """Change to a supertype of '${type2}', or, for a covariant parameter, a subtype.""",
+      correctionMessage: """Change to a supertype of '${type2}', or, for a covariant parameter, a subtype.""",
       arguments: {
         'name': name,
         'name2': name2,
@@ -4137,9 +4178,9 @@
     templateOverrideTypeMismatchReturnType = const Template<
             Message Function(String name, DartType _type, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The return type of the method '#name' is '#type', which does not match the return type, '#type2', of the overridden method, '#name2'.""",
-        tipTemplate: r"""Change to a subtype of '#type2'.""",
+        correctionMessageTemplate: r"""Change to a subtype of '#type2'.""",
         withArguments: _withArgumentsOverrideTypeMismatchReturnType);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4172,10 +4213,10 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeOverrideTypeMismatchReturnType,
-      message:
+      problemMessage:
           """The return type of the method '${name}' is '${type}', which does not match the return type, '${type2}', of the overridden method, '${name2}'.""" +
               labeler.originMessages,
-      tip: """Change to a subtype of '${type2}'.""",
+      correctionMessage: """Change to a subtype of '${type2}'.""",
       arguments: {
         'name': name,
         'type': _type,
@@ -4191,7 +4232,7 @@
     templateOverrideTypeMismatchSetter = const Template<
             Message Function(String name, DartType _type, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The field '#name' has type '#type', which does not match the corresponding type, '#type2', in the overridden setter, '#name2'.""",
         withArguments: _withArgumentsOverrideTypeMismatchSetter);
 
@@ -4221,7 +4262,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeOverrideTypeMismatchSetter,
-      message:
+      problemMessage:
           """The field '${name}' has type '${type}', which does not match the corresponding type, '${type2}', in the overridden setter, '${name2}'.""" +
               labeler.originMessages,
       arguments: {
@@ -4239,7 +4280,7 @@
     templateOverrideTypeVariablesBoundMismatch = const Template<
             Message Function(DartType _type, String name, String name2,
                 DartType _type2, String name3, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Declared bound '#type' of type variable '#name' of '#name2' doesn't match the bound '#type2' on overridden method '#name3'.""",
         withArguments: _withArgumentsOverrideTypeVariablesBoundMismatch);
 
@@ -4273,7 +4314,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeOverrideTypeVariablesBoundMismatch,
-      message:
+      problemMessage:
           """Declared bound '${type}' of type variable '${name}' of '${name2}' doesn't match the bound '${type2}' on overridden method '${name3}'.""" +
               labeler.originMessages,
       arguments: {
@@ -4292,8 +4333,10 @@
     templateRedirectingFactoryIncompatibleTypeArgument = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate: r"""The type '#type' doesn't extend '#type2'.""",
-        tipTemplate: r"""Try using a different type as argument.""",
+        problemMessageTemplate:
+            r"""The type '#type' doesn't extend '#type2'.""",
+        correctionMessageTemplate:
+            r"""Try using a different type as argument.""",
         withArguments:
             _withArgumentsRedirectingFactoryIncompatibleTypeArgument);
 
@@ -4316,9 +4359,9 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeRedirectingFactoryIncompatibleTypeArgument,
-      message: """The type '${type}' doesn't extend '${type2}'.""" +
+      problemMessage: """The type '${type}' doesn't extend '${type2}'.""" +
           labeler.originMessages,
-      tip: """Try using a different type as argument.""",
+      correctionMessage: """Try using a different type as argument.""",
       arguments: {'type': _type, 'type2': _type2});
 }
 
@@ -4329,7 +4372,7 @@
     templateSpreadElementTypeMismatch = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't assign spread elements of type '#type' to collection elements of type '#type2'.""",
         withArguments: _withArgumentsSpreadElementTypeMismatch);
 
@@ -4352,7 +4395,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeSpreadElementTypeMismatch,
-      message:
+      problemMessage:
           """Can't assign spread elements of type '${type}' to collection elements of type '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -4365,7 +4408,7 @@
     templateSpreadElementTypeMismatchNullability = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't assign spread elements of type '#type' to collection elements of type '#type2' because '#type' is nullable and '#type2' isn't.""",
         withArguments: _withArgumentsSpreadElementTypeMismatchNullability);
 
@@ -4388,7 +4431,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeSpreadElementTypeMismatchNullability,
-      message:
+      problemMessage:
           """Can't assign spread elements of type '${type}' to collection elements of type '${type2}' because '${type}' is nullable and '${type2}' isn't.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -4401,7 +4444,7 @@
     templateSpreadElementTypeMismatchPartNullability = const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 DartType _type4, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't assign spread elements of type '#type' to collection elements of type '#type2' because '#type3' is nullable and '#type4' isn't.""",
         withArguments: _withArgumentsSpreadElementTypeMismatchPartNullability);
 
@@ -4432,7 +4475,7 @@
   String type3 = type3Parts.join();
   String type4 = type4Parts.join();
   return new Message(codeSpreadElementTypeMismatchPartNullability,
-      message:
+      problemMessage:
           """Can't assign spread elements of type '${type}' to collection elements of type '${type2}' because '${type3}' is nullable and '${type4}' isn't.""" +
               labeler.originMessages,
       arguments: {
@@ -4450,7 +4493,7 @@
     templateSpreadMapEntryElementKeyTypeMismatch = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't assign spread entry keys of type '#type' to map entry keys of type '#type2'.""",
         withArguments: _withArgumentsSpreadMapEntryElementKeyTypeMismatch);
 
@@ -4473,7 +4516,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeSpreadMapEntryElementKeyTypeMismatch,
-      message:
+      problemMessage:
           """Can't assign spread entry keys of type '${type}' to map entry keys of type '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -4486,7 +4529,7 @@
     templateSpreadMapEntryElementKeyTypeMismatchNullability = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't assign spread entry keys of type '#type' to map entry keys of type '#type2' because '#type' is nullable and '#type2' isn't.""",
         withArguments:
             _withArgumentsSpreadMapEntryElementKeyTypeMismatchNullability);
@@ -4510,7 +4553,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeSpreadMapEntryElementKeyTypeMismatchNullability,
-      message:
+      problemMessage:
           """Can't assign spread entry keys of type '${type}' to map entry keys of type '${type2}' because '${type}' is nullable and '${type2}' isn't.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -4524,7 +4567,7 @@
     const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 DartType _type4, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't assign spread entry keys of type '#type' to map entry keys of type '#type2' because '#type3' is nullable and '#type4' isn't.""",
         withArguments:
             _withArgumentsSpreadMapEntryElementKeyTypeMismatchPartNullability);
@@ -4556,7 +4599,7 @@
   String type3 = type3Parts.join();
   String type4 = type4Parts.join();
   return new Message(codeSpreadMapEntryElementKeyTypeMismatchPartNullability,
-      message:
+      problemMessage:
           """Can't assign spread entry keys of type '${type}' to map entry keys of type '${type2}' because '${type3}' is nullable and '${type4}' isn't.""" +
               labeler.originMessages,
       arguments: {
@@ -4574,7 +4617,7 @@
     templateSpreadMapEntryElementValueTypeMismatch = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't assign spread entry values of type '#type' to map entry values of type '#type2'.""",
         withArguments: _withArgumentsSpreadMapEntryElementValueTypeMismatch);
 
@@ -4597,7 +4640,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeSpreadMapEntryElementValueTypeMismatch,
-      message:
+      problemMessage:
           """Can't assign spread entry values of type '${type}' to map entry values of type '${type2}'.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -4610,7 +4653,7 @@
     templateSpreadMapEntryElementValueTypeMismatchNullability = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't assign spread entry values of type '#type' to map entry values of type '#type2' because '#type' is nullable and '#type2' isn't.""",
         withArguments:
             _withArgumentsSpreadMapEntryElementValueTypeMismatchNullability);
@@ -4634,7 +4677,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeSpreadMapEntryElementValueTypeMismatchNullability,
-      message:
+      problemMessage:
           """Can't assign spread entry values of type '${type}' to map entry values of type '${type2}' because '${type}' is nullable and '${type2}' isn't.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -4648,7 +4691,7 @@
     const Template<
             Message Function(DartType _type, DartType _type2, DartType _type3,
                 DartType _type4, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't assign spread entry values of type '#type' to map entry values of type '#type2' because '#type3' is nullable and '#type4' isn't.""",
         withArguments:
             _withArgumentsSpreadMapEntryElementValueTypeMismatchPartNullability);
@@ -4680,7 +4723,7 @@
   String type3 = type3Parts.join();
   String type4 = type4Parts.join();
   return new Message(codeSpreadMapEntryElementValueTypeMismatchPartNullability,
-      message:
+      problemMessage:
           """Can't assign spread entry values of type '${type}' to map entry values of type '${type2}' because '${type3}' is nullable and '${type4}' isn't.""" +
               labeler.originMessages,
       arguments: {
@@ -4695,7 +4738,7 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateSpreadMapEntryTypeMismatch = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Unexpected type '#type' of a map spread entry.  Expected 'dynamic' or a Map.""",
         withArguments: _withArgumentsSpreadMapEntryTypeMismatch);
 
@@ -4713,7 +4756,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeSpreadMapEntryTypeMismatch,
-      message:
+      problemMessage:
           """Unexpected type '${type}' of a map spread entry.  Expected 'dynamic' or a Map.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -4726,7 +4769,7 @@
         bool
             isNonNullableByDefault)> templateSpreadTypeMismatch = const Template<
         Message Function(DartType _type, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""Unexpected type '#type' of a spread.  Expected 'dynamic' or an Iterable.""",
     withArguments: _withArgumentsSpreadTypeMismatch);
 
@@ -4744,7 +4787,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeSpreadTypeMismatch,
-      message:
+      problemMessage:
           """Unexpected type '${type}' of a spread.  Expected 'dynamic' or an Iterable.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -4759,7 +4802,7 @@
             isNonNullableByDefault)> templateSuperBoundedHint = const Template<
         Message Function(
             DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""If you want '#type' to be a super-bounded type, note that the inverted type '#type2' must then satisfy its bounds, which it does not.""",
     withArguments: _withArgumentsSuperBoundedHint);
 
@@ -4782,7 +4825,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeSuperBoundedHint,
-      message:
+      problemMessage:
           """If you want '${type}' to be a super-bounded type, note that the inverted type '${type2}' must then satisfy its bounds, which it does not.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -4795,7 +4838,7 @@
     templateSupertypeIsIllegalAliased = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#name' which is an alias of '#type' can't be used as supertype.""",
         withArguments: _withArgumentsSupertypeIsIllegalAliased);
 
@@ -4818,7 +4861,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeSupertypeIsIllegalAliased,
-      message:
+      problemMessage:
           """The type '${name}' which is an alias of '${type}' can't be used as supertype.""" +
               labeler.originMessages,
       arguments: {'name': name, 'type': _type});
@@ -4831,7 +4874,7 @@
     templateSupertypeIsNullableAliased = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The type '#name' which is an alias of '#type' can't be used as supertype because it is nullable.""",
         withArguments: _withArgumentsSupertypeIsNullableAliased);
 
@@ -4854,7 +4897,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeSupertypeIsNullableAliased,
-      message:
+      problemMessage:
           """The type '${name}' which is an alias of '${type}' can't be used as supertype because it is nullable.""" +
               labeler.originMessages,
       arguments: {'name': name, 'type': _type});
@@ -4867,7 +4910,7 @@
     templateSwitchExpressionNotAssignable = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Type '#type' of the switch expression isn't assignable to the type '#type2' of this case expression.""",
         withArguments: _withArgumentsSwitchExpressionNotAssignable);
 
@@ -4890,7 +4933,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeSwitchExpressionNotAssignable,
-      message:
+      problemMessage:
           """Type '${type}' of the switch expression isn't assignable to the type '${type2}' of this case expression.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -4903,7 +4946,7 @@
     templateSwitchExpressionNotSubtype = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Type '#type' of the case expression is not a subtype of type '#type2' of this switch expression.""",
         withArguments: _withArgumentsSwitchExpressionNotSubtype);
 
@@ -4926,7 +4969,7 @@
   String type = typeParts.join();
   String type2 = type2Parts.join();
   return new Message(codeSwitchExpressionNotSubtype,
-      message:
+      problemMessage:
           """Type '${type}' of the case expression is not a subtype of type '${type2}' of this switch expression.""" +
               labeler.originMessages,
       arguments: {'type': _type, 'type2': _type2});
@@ -4936,7 +4979,7 @@
 const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
     templateThrowingNotAssignableToObjectError = const Template<
             Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""Can't throw a value of '#type' since it is neither dynamic nor non-nullable.""",
         withArguments: _withArgumentsThrowingNotAssignableToObjectError);
 
@@ -4954,7 +4997,7 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeThrowingNotAssignableToObjectError,
-      message:
+      problemMessage:
           """Can't throw a value of '${type}' since it is neither dynamic nor non-nullable.""" +
               labeler.originMessages,
       arguments: {'type': _type});
@@ -4967,9 +5010,9 @@
     templateUndefinedExtensionGetter = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The getter '#name' isn't defined for the extension '#type'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try correcting the name to the name of an existing getter, or defining a getter or field named '#name'.""",
         withArguments: _withArgumentsUndefinedExtensionGetter);
 
@@ -4990,10 +5033,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeUndefinedExtensionGetter,
-      message:
+      problemMessage:
           """The getter '${name}' isn't defined for the extension '${type}'.""" +
               labeler.originMessages,
-      tip: """Try correcting the name to the name of an existing getter, or defining a getter or field named '${name}'.""",
+      correctionMessage: """Try correcting the name to the name of an existing getter, or defining a getter or field named '${name}'.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -5004,9 +5047,9 @@
     templateUndefinedExtensionMethod = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The method '#name' isn't defined for the extension '#type'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try correcting the name to the name of an existing method, or defining a method name '#name'.""",
         withArguments: _withArgumentsUndefinedExtensionMethod);
 
@@ -5027,10 +5070,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeUndefinedExtensionMethod,
-      message:
+      problemMessage:
           """The method '${name}' isn't defined for the extension '${type}'.""" +
               labeler.originMessages,
-      tip: """Try correcting the name to the name of an existing method, or defining a method name '${name}'.""",
+      correctionMessage: """Try correcting the name to the name of an existing method, or defining a method name '${name}'.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -5041,9 +5084,9 @@
     templateUndefinedExtensionOperator = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The operator '#name' isn't defined for the extension '#type'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try correcting the operator to an existing operator, or defining a '#name' operator.""",
         withArguments: _withArgumentsUndefinedExtensionOperator);
 
@@ -5066,10 +5109,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeUndefinedExtensionOperator,
-      message:
+      problemMessage:
           """The operator '${name}' isn't defined for the extension '${type}'.""" +
               labeler.originMessages,
-      tip: """Try correcting the operator to an existing operator, or defining a '${name}' operator.""",
+      correctionMessage: """Try correcting the operator to an existing operator, or defining a '${name}' operator.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -5080,9 +5123,9 @@
     templateUndefinedExtensionSetter = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
+        problemMessageTemplate:
             r"""The setter '#name' isn't defined for the extension '#type'.""",
-        tipTemplate:
+        correctionMessageTemplate:
             r"""Try correcting the name to the name of an existing setter, or defining a setter or field named '#name'.""",
         withArguments: _withArgumentsUndefinedExtensionSetter);
 
@@ -5103,10 +5146,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeUndefinedExtensionSetter,
-      message:
+      problemMessage:
           """The setter '${name}' isn't defined for the extension '${type}'.""" +
               labeler.originMessages,
-      tip: """Try correcting the name to the name of an existing setter, or defining a setter or field named '${name}'.""",
+      correctionMessage: """Try correcting the name to the name of an existing setter, or defining a setter or field named '${name}'.""",
       arguments: {'name': name, 'type': _type});
 }
 
@@ -5119,9 +5162,9 @@
             isNonNullableByDefault)> templateUndefinedGetter = const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The getter '#name' isn't defined for the class '#type'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try correcting the name to the name of an existing getter, or defining a getter or field named '#name'.""",
     withArguments: _withArgumentsUndefinedGetter);
 
@@ -5144,10 +5187,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeUndefinedGetter,
-      message:
+      problemMessage:
           """The getter '${name}' isn't defined for the class '${type}'.""" +
               labeler.originMessages,
-      tip:
+      correctionMessage:
           """Try correcting the name to the name of an existing getter, or defining a getter or field named '${name}'.""",
       arguments: {'name': name, 'type': _type});
 }
@@ -5161,9 +5204,9 @@
             isNonNullableByDefault)> templateUndefinedMethod = const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The method '#name' isn't defined for the class '#type'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try correcting the name to the name of an existing method, or defining a method named '#name'.""",
     withArguments: _withArgumentsUndefinedMethod);
 
@@ -5186,10 +5229,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeUndefinedMethod,
-      message:
+      problemMessage:
           """The method '${name}' isn't defined for the class '${type}'.""" +
               labeler.originMessages,
-      tip:
+      correctionMessage:
           """Try correcting the name to the name of an existing method, or defining a method named '${name}'.""",
       arguments: {'name': name, 'type': _type});
 }
@@ -5201,11 +5244,11 @@
         DartType _type,
         bool
             isNonNullableByDefault)> templateUndefinedOperator = const Template<
-        Message Function(String name, DartType _type,
-            bool isNonNullableByDefault)>(
-    messageTemplate:
+        Message Function(
+            String name, DartType _type, bool isNonNullableByDefault)>(
+    problemMessageTemplate:
         r"""The operator '#name' isn't defined for the class '#type'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try correcting the operator to an existing operator, or defining a '#name' operator.""",
     withArguments: _withArgumentsUndefinedOperator);
 
@@ -5228,10 +5271,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeUndefinedOperator,
-      message:
+      problemMessage:
           """The operator '${name}' isn't defined for the class '${type}'.""" +
               labeler.originMessages,
-      tip:
+      correctionMessage:
           """Try correcting the operator to an existing operator, or defining a '${name}' operator.""",
       arguments: {'name': name, 'type': _type});
 }
@@ -5245,9 +5288,9 @@
             isNonNullableByDefault)> templateUndefinedSetter = const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>(
-    messageTemplate:
+    problemMessageTemplate:
         r"""The setter '#name' isn't defined for the class '#type'.""",
-    tipTemplate:
+    correctionMessageTemplate:
         r"""Try correcting the name to the name of an existing setter, or defining a setter or field named '#name'.""",
     withArguments: _withArgumentsUndefinedSetter);
 
@@ -5270,10 +5313,10 @@
   List<Object> typeParts = labeler.labelType(_type);
   String type = typeParts.join();
   return new Message(codeUndefinedSetter,
-      message:
+      problemMessage:
           """The setter '${name}' isn't defined for the class '${type}'.""" +
               labeler.originMessages,
-      tip:
+      correctionMessage:
           """Try correcting the name to the name of an existing setter, or defining a setter or field named '${name}'.""",
       arguments: {'name': name, 'type': _type});
 }
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index a188b12..61bdb2e 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -102,6 +102,7 @@
 
 import 'dill/dill_library_builder.dart' show DillLibraryBuilder;
 
+import 'dill/dill_loader.dart' show DillLoader;
 import 'dill/dill_target.dart' show DillTarget;
 
 import 'export.dart' show Export;
@@ -283,7 +284,7 @@
       // non-null.
       if (userCode != null) {
         ticker.logMs("Decided to reuse ${reusedLibraries.length}"
-            " of ${userCode!.loader.builders.length} libraries");
+            " of ${userCode!.loader.libraryBuilders.length} libraries");
       }
 
       // For modular compilation we can be asked to load components and track
@@ -368,7 +369,7 @@
       // calculation has the potential to work.
       // ignore: unnecessary_null_comparison
       if (componentWithDill == null) {
-        userCode!.loader.builders.clear();
+        userCode!.loader.clearLibraryBuilders();
         userCode = userCodeOld;
         dillLoadedData!.loader.currentSourceLoader = userCode!.loader;
       } else {
@@ -415,14 +416,16 @@
     Set<Library> newDillLibraryBuilders = new Set<Library>();
     userBuilders ??= <Uri, LibraryBuilder>{};
     Map<LibraryBuilder, List<LibraryBuilder>>? convertedLibraries;
-    for (MapEntry<Uri, LibraryBuilder> entry
-        in userCode!.loader.builders.entries) {
-      if (entry.value is SourceLibraryBuilder) {
-        SourceLibraryBuilder builder = entry.value as SourceLibraryBuilder;
+    for (LibraryBuilder builder in userCode!.loader.libraryBuilders) {
+      if (builder is SourceLibraryBuilder) {
         DillLibraryBuilder dillBuilder =
             dillLoadedData!.loader.appendLibrary(builder.library);
-        userCode!.loader.builders[entry.key] = dillBuilder;
-        userBuilders![entry.key] = dillBuilder;
+        userCode!.loader.registerLibraryBuilder(
+            // TODO(johnniwinther): Why do we need to create
+            //  [DillLibraryBuilder]s for the patch library file uris?
+            dillBuilder,
+            builder.isPatch ? builder.fileUri : null);
+        userBuilders![builder.importUri] = dillBuilder;
         newDillLibraryBuilders.add(builder.library);
         if (userCode!.loader.first == builder) {
           userCode!.loader.first = dillBuilder;
@@ -439,8 +442,7 @@
       // We suppress finalization errors because they have already been
       // reported.
       dillLoadedData!.buildOutlines(suppressFinalizationErrors: true);
-      assert(_checkEquivalentScopes(
-          userCode!.loader.builders, dillLoadedData!.loader.builders));
+      assert(_checkEquivalentScopes(userCode!.loader, dillLoadedData!.loader));
 
       if (experimentalInvalidation != null) {
         /// If doing experimental invalidation that means that some of the old
@@ -485,18 +487,19 @@
     return newDillLibraryBuilders;
   }
 
-  bool _checkEquivalentScopes(Map<Uri, LibraryBuilder> sourceLibraries,
-      Map<Uri, LibraryBuilder> dillLibraries) {
-    sourceLibraries.forEach((Uri uri, LibraryBuilder sourceLibraryBuilder) {
+  bool _checkEquivalentScopes(
+      SourceLoader sourceLoader, DillLoader dillLoader) {
+    for (LibraryBuilder sourceLibraryBuilder in sourceLoader.libraryBuilders) {
       if (sourceLibraryBuilder is SourceLibraryBuilder) {
+        Uri uri = sourceLibraryBuilder.importUri;
         DillLibraryBuilder dillLibraryBuilder =
-            dillLibraries[uri] as DillLibraryBuilder;
+            dillLoader.lookupLibraryBuilder(uri)!;
         assert(
             _hasEquivalentScopes(sourceLibraryBuilder, dillLibraryBuilder) ==
                 null,
             _hasEquivalentScopes(sourceLibraryBuilder, dillLibraryBuilder));
       }
-    });
+    }
     return true;
   }
 
@@ -634,7 +637,7 @@
       // evaluator - that comes from dill - are marked.
       Set<Library> librariesUsedByConstantEvaluator = userCode!.librariesUsed;
 
-      for (LibraryBuilder builder in dillLoadedData!.loader.builders.values) {
+      for (LibraryBuilder builder in dillLoadedData!.loader.libraryBuilders) {
         if (builder is DillLibraryBuilder) {
           if (builder.isBuiltAndMarked ||
               librariesUsedByConstantEvaluator.contains(builder.library)) {
@@ -840,11 +843,7 @@
     List<bool> seenModes = [false, false, false, false];
     for (LibraryBuilder library in reusedLibraries) {
       seenModes[library.library.nonNullableByDefaultCompiledMode.index] = true;
-      userCode!.loader.builders[library.importUri] = library;
-      if (library.importUri.scheme == "dart" &&
-          library.importUri.path == "core") {
-        userCode!.loader.coreLibrary = library;
-      }
+      userCode!.loader.registerLibraryBuilder(library);
     }
     // Check compilation mode up against what we've seen here and set
     // `hasInvalidNnbdModeLibrary` accordingly.
@@ -906,10 +905,12 @@
               ? firstEntryPoint
               : null);
     }
-    if (userCode!.loader.first == null &&
-        userCode!.loader.builders[firstEntryPointImportUri] != null) {
-      userCode!.loader.first =
-          userCode!.loader.builders[firstEntryPointImportUri];
+    if (userCode!.loader.first == null) {
+      LibraryBuilder? libraryBuilder =
+          userCode!.loader.lookupLibraryBuilder(firstEntryPointImportUri);
+      if (libraryBuilder != null) {
+        userCode!.loader.first = libraryBuilder;
+      }
     }
   }
 
@@ -919,7 +920,7 @@
   void resetTrackingOfUsedLibraries(ClassHierarchy? hierarchy) {
     if (trackNeededDillLibraries) {
       // Reset dill loaders and kernel class hierarchy.
-      for (LibraryBuilder builder in dillLoadedData!.loader.builders.values) {
+      for (LibraryBuilder builder in dillLoadedData!.loader.libraryBuilders) {
         if (builder is DillLibraryBuilder) {
           if (builder.isBuiltAndMarked) {
             // Clear cached calculations in classes which upon calculation can
@@ -976,13 +977,9 @@
       // Make sure the dill loader is on the same page.
       DillTarget oldDillLoadedData = dillLoadedData!;
       dillLoadedData = new DillTarget(ticker, uriTranslator, c.options.target);
-      for (LibraryBuilder library in oldDillLoadedData.loader.builders.values) {
-        (library as DillLibraryBuilder).loader = dillLoadedData!.loader;
-        dillLoadedData!.loader.builders[library.importUri] = library;
-        if (library.importUri.scheme == "dart" &&
-            library.importUri.path == "core") {
-          dillLoadedData!.loader.coreLibrary = library;
-        }
+      for (DillLibraryBuilder library
+          in oldDillLoadedData.loader.libraryBuilders) {
+        dillLoadedData!.loader.registerLibraryBuilder(library);
       }
       dillLoadedData!.loader.first = oldDillLoadedData.loader.first;
       dillLoadedData!.loader.libraries
@@ -1006,7 +1003,7 @@
       incrementalSerializer?.invalidate(builder.fileUri);
 
       LibraryBuilder? dillBuilder =
-          dillLoadedData!.loader.builders.remove(builder.importUri);
+          dillLoadedData!.loader.deregisterLibraryBuilder(builder.importUri);
       if (dillBuilder != null) {
         removedDillBuilders = true;
         userBuilders?.remove(builder.importUri);
@@ -1287,13 +1284,14 @@
       dillLoadedData!.buildOutlines(suppressFinalizationErrors: true);
       userBuilders = <Uri, LibraryBuilder>{};
       platformBuilders = <LibraryBuilder>[];
-      dillLoadedData!.loader.builders.forEach((uri, builder) {
+      for (DillLibraryBuilder builder
+          in dillLoadedData!.loader.libraryBuilders) {
         if (builder.importUri.scheme == "dart") {
           platformBuilders!.add(builder);
         } else {
-          userBuilders![uri] = builder;
+          userBuilders![builder.importUri] = builder;
         }
-      });
+      }
       if (userBuilders!.isEmpty) userBuilders = null;
     }
     data.initializationBytes = null;
@@ -1382,7 +1380,7 @@
         Library library = c.enclosingLibrary;
         // Only add if loaded from a dill file (and wasn't a 'dill' that was
         // converted from source builders to dill builders).
-        if (dillLoadedData!.loader.builders.containsKey(library.importUri) &&
+        if (dillLoadedData!.loader.containsLibraryBuilder(library.importUri) &&
             (previousSourceBuilders == null ||
                 !previousSourceBuilders!.contains(library))) {
           neededDillLibraries!.add(library);
@@ -1393,10 +1391,10 @@
       // if all bets are off: Add everything (except for the libraries we just
       // converted from source builders to dill builders).
       neededDillLibraries = new Set<Library>();
-      for (LibraryBuilder builder in dillLoadedData!.loader.builders.values) {
-        if (builder is DillLibraryBuilder &&
-            (previousSourceBuilders == null ||
-                !previousSourceBuilders!.contains(builder.library))) {
+      for (DillLibraryBuilder builder
+          in dillLoadedData!.loader.libraryBuilders) {
+        if (previousSourceBuilders == null ||
+            !previousSourceBuilders!.contains(builder.library)) {
           neededDillLibraries!.add(builder.library);
         }
       }
@@ -1426,9 +1424,9 @@
       for (Component module in modulesToLoad!) {
         bool usedComponent = false;
         for (Library lib in module.libraries) {
-          if (!dillLoadedData!.loader.builders.containsKey(lib.importUri)) {
+          if (!dillLoadedData!.loader.containsLibraryBuilder(lib.importUri)) {
             dillLoadedData!.loader.libraries.add(lib);
-            dillLoadedData!.registerLibrary(lib);
+            dillLoadedData!.loader.registerKnownLibrary(lib);
             reusedLibraries.add(dillLoadedData!.loader.read(lib.importUri, -1));
             usedComponent = true;
           }
@@ -1444,13 +1442,14 @@
         dillLoadedData!.buildOutlines(suppressFinalizationErrors: true);
         userBuilders = <Uri, LibraryBuilder>{};
         platformBuilders = <LibraryBuilder>[];
-        dillLoadedData!.loader.builders.forEach((uri, builder) {
+        for (DillLibraryBuilder builder
+            in dillLoadedData!.loader.libraryBuilders) {
           if (builder.importUri.scheme == "dart") {
             platformBuilders!.add(builder);
           } else {
-            userBuilders![uri] = builder;
+            userBuilders![builder.importUri] = builder;
           }
-        });
+        }
         if (userBuilders!.isEmpty) {
           userBuilders = null;
         }
@@ -1518,7 +1517,7 @@
       // a new error.
       Set<LibraryBuilder> builders = {};
       SourceLoader loader = userCode!.loader;
-      for (LibraryBuilder builder in loader.builders.values) {
+      for (LibraryBuilder builder in loader.libraryBuilders) {
         if (strongModeNNBDPackageOptOutUris.contains(builder.fileUri)) {
           builders.add(builder);
         }
@@ -1634,11 +1633,11 @@
     bool removedDillBuilders = false;
     for (Uri uri in potentiallyReferencedLibraries.keys) {
       if (uri.scheme == "package") continue;
-      LibraryBuilder? builder = userCode!.loader.builders.remove(uri);
+      LibraryBuilder? builder = userCode!.loader.deregisterLibraryBuilder(uri);
       if (builder != null) {
         Library lib = builder.library;
         removedLibraries.add(lib);
-        if (dillLoadedData!.loader.builders.remove(uri) != null) {
+        if (dillLoadedData!.loader.deregisterLibraryBuilder(uri) != null) {
           removedDillBuilders = true;
         }
         cleanupSourcesForBuilder(null, builder, uriTranslator,
@@ -1666,7 +1665,7 @@
   /// This method syncs the [libraries] list with the data in [builders].
   void makeDillLoaderLibrariesUpToDateWithBuildersMap() {
     dillLoadedData!.loader.libraries.clear();
-    for (LibraryBuilder builder in dillLoadedData!.loader.builders.values) {
+    for (LibraryBuilder builder in dillLoadedData!.loader.libraryBuilders) {
       dillLoadedData!.loader.libraries.add(builder.library);
     }
   }
@@ -1695,7 +1694,7 @@
       if (userCode?.loader != null) {
         Uri? partImportUri = uriToSource[partFileUri]?.importUri;
         if (partImportUri != null &&
-            userCode!.loader.builders.containsKey(partImportUri)) {
+            userCode!.loader.containsLibraryBuilder(partImportUri)) {
           continue;
         }
       } else if (reusedResult != null) {
@@ -2201,7 +2200,9 @@
 
     if (userCode != null) {
       // userCode already contains the builders from userBuilders.
-      userCode!.loader.builders.forEach(addBuilderAndInvalidateUris);
+      for (LibraryBuilder libraryBuilder in userCode!.loader.libraryBuilders) {
+        addBuilderAndInvalidateUris(libraryBuilder.importUri, libraryBuilder);
+      }
     } else {
       // userCode was null so we explicitly have to add the builders from
       // userBuilders (which cannot be null as we checked initially that one of
@@ -2291,8 +2292,8 @@
   @override
   void invalidateAllSources() {
     if (userCode != null) {
-      Set<Uri> uris = new Set<Uri>.from(userCode!.loader.builders.keys);
-      uris.removeAll(dillLoadedData!.loader.builders.keys);
+      Set<Uri> uris = new Set<Uri>.from(userCode!.loader.libraryImportUris);
+      uris.removeAll(dillLoadedData!.loader.libraryImportUris);
       if (previousSourceBuilders != null) {
         for (Library library in previousSourceBuilders!) {
           uris.add(library.importUri);
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 3bf6051..c19ef88 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -71,7 +71,6 @@
 import '../builder/type_builder.dart';
 import '../builder/type_declaration_builder.dart';
 import '../builder/type_variable_builder.dart';
-import '../builder/unresolved_type.dart';
 import '../builder/variable_builder.dart';
 import '../builder/void_type_declaration_builder.dart';
 
@@ -113,7 +112,7 @@
 import '../source/value_kinds.dart';
 
 import '../type_inference/type_inferrer.dart'
-    show TypeInferrer, InferredFunctionBody;
+    show TypeInferrer, InferredFunctionBody, InitializerInferenceResult;
 import '../type_inference/type_schema.dart' show UnknownType;
 
 import '../util/helpers.dart' show DelayedActionPerformer;
@@ -427,11 +426,23 @@
     return functionNestingLevel == 0 && member is ConstructorBuilder;
   }
 
+  @override
   bool get isDeclarationInstanceContext {
     return isDeclarationInstanceMember || member is ConstructorBuilder;
   }
 
   @override
+  InstanceTypeVariableAccessState get instanceTypeVariableAccessState {
+    if (member.isExtensionMember && member.isField && !member.isExternal) {
+      return InstanceTypeVariableAccessState.Invalid;
+    } else if (isDeclarationInstanceContext || member is DeclarationBuilder) {
+      return InstanceTypeVariableAccessState.Allowed;
+    } else {
+      return InstanceTypeVariableAccessState.Disallowed;
+    }
+  }
+
+  @override
   TypeEnvironment get typeEnvironment => typeInferrer.typeSchemaEnvironment;
 
   DartType get implicitTypeArgument => const ImplicitTypeArgument();
@@ -451,6 +462,11 @@
     return libraryBuilder.enableConstructorTearOffsInLibrary;
   }
 
+  @override
+  bool get enableNamedArgumentsAnywhereInLibrary {
+    return libraryBuilder.enableNamedArgumentsAnywhereInLibrary;
+  }
+
   void _enterLocalState({bool inLateLocalInitializer: false}) {
     _localInitializerState =
         _localInitializerState.prepend(inLateLocalInitializer);
@@ -820,6 +836,16 @@
           // The initializer was already compiled (e.g., if it appear in the
           // outline, like constant field initializers) so we do not need to
           // perform type inference or transformations.
+
+          // If the body is already built and it's a type aliased constructor or
+          // factory invocation, they shouldn't be checked or resolved the
+          // second time, so they are removed from the corresponding lists.
+          if (initializer is TypeAliasedConstructorInvocation) {
+            typeAliasedConstructorInvocations.remove(initializer);
+          }
+          if (initializer is TypeAliasedFactoryInvocation) {
+            typeAliasedFactoryInvocations.remove(initializer);
+          }
         } else {
           initializer = typeInferrer.inferFieldInitializer(
               this, fieldBuilder.builtType, initializer);
@@ -851,7 +877,7 @@
       // not calling [buildDartType] leads to a missing compile-time
       // error. Also, notice that the type of the problematic field isn't
       // `invalid-type`.
-      UnresolvedType? type = pop() as UnresolvedType?;
+      TypeBuilder? type = pop() as TypeBuilder?;
       if (type != null) {
         buildDartType(type, allowPotentiallyConstantType: false);
       }
@@ -934,7 +960,7 @@
                   formal: formal);
             }
             for (Initializer initializer in initializers) {
-              member.addInitializer(initializer, this);
+              member.addInitializer(initializer, this, inferenceResult: null);
             }
           }
         }
@@ -1241,10 +1267,10 @@
   void ensureLoaded(Member? member) {
     if (member == null) return;
     Library ensureLibraryLoaded = member.enclosingLibrary;
-    LibraryBuilder? builder =
-        libraryBuilder.loader.builders[ensureLibraryLoaded.importUri] ??
-            libraryBuilder.loader.target.dillTarget.loader
-                .builders[ensureLibraryLoaded.importUri];
+    LibraryBuilder? builder = libraryBuilder.loader
+            .lookupLibraryBuilder(ensureLibraryLoaded.importUri) ??
+        libraryBuilder.loader.target.dillTarget.loader
+            .lookupLibraryBuilder(ensureLibraryLoaded.importUri);
     if (builder is DillLibraryBuilder) {
       builder.ensureLoaded();
     }
@@ -1259,10 +1285,10 @@
   bool isLoaded(Member? member) {
     if (member == null) return true;
     Library ensureLibraryLoaded = member.enclosingLibrary;
-    LibraryBuilder? builder =
-        libraryBuilder.loader.builders[ensureLibraryLoaded.importUri] ??
-            libraryBuilder.loader.target.dillTarget.loader
-                .builders[ensureLibraryLoaded.importUri];
+    LibraryBuilder? builder = libraryBuilder.loader
+            .lookupLibraryBuilder(ensureLibraryLoaded.importUri) ??
+        libraryBuilder.loader.target.dillTarget.loader
+            .lookupLibraryBuilder(ensureLibraryLoaded.importUri);
     if (builder is DillLibraryBuilder) {
       return builder.isBuiltAndMarked;
     }
@@ -1622,12 +1648,16 @@
       }
     }
     if (_initializers != null) {
+      Map<Initializer, InitializerInferenceResult> inferenceResults =
+          <Initializer, InitializerInferenceResult>{};
       for (Initializer initializer in _initializers!) {
-        typeInferrer.inferInitializer(this, initializer);
+        inferenceResults[initializer] =
+            typeInferrer.inferInitializer(this, initializer);
       }
       if (!builder.isExternal) {
         for (Initializer initializer in _initializers!) {
-          builder.addInitializer(initializer, this);
+          builder.addInitializer(initializer, this,
+              inferenceResult: inferenceResults[initializer]!);
         }
       }
     }
@@ -1700,35 +1730,72 @@
       push(new ParserRecovery(beginToken.charOffset));
       return;
     }
+    List<Object?>? argumentsOriginalOrder;
+    if (libraryBuilder.enableNamedArgumentsAnywhereInLibrary) {
+      argumentsOriginalOrder = new List<Object?>.from(arguments);
+    }
     int firstNamedArgumentIndex = arguments.length;
+    int positionalCount = 0;
+    bool hasNamedBeforePositional = false;
     for (int i = 0; i < arguments.length; i++) {
       Object? node = arguments[i];
       if (node is NamedExpression) {
         firstNamedArgumentIndex =
             i < firstNamedArgumentIndex ? i : firstNamedArgumentIndex;
       } else {
+        positionalCount++;
         Expression argument = toValue(node);
         arguments[i] = argument;
+        argumentsOriginalOrder?[i] = argument;
         if (i > firstNamedArgumentIndex) {
-          arguments[i] = new NamedExpression(
-              "#$i",
-              buildProblem(fasta.messageExpectedNamedArgument,
-                  argument.fileOffset, noLength))
-            ..fileOffset = beginToken.charOffset;
+          hasNamedBeforePositional = true;
+          if (!libraryBuilder.enableNamedArgumentsAnywhereInLibrary) {
+            arguments[i] = new NamedExpression(
+                "#$i",
+                buildProblem(fasta.messageExpectedNamedArgument,
+                    argument.fileOffset, noLength))
+              ..fileOffset = beginToken.charOffset;
+          }
         }
       }
     }
+    if (!hasNamedBeforePositional) {
+      argumentsOriginalOrder = null;
+    }
     if (firstNamedArgumentIndex < arguments.length) {
-      List<Expression> positional = new List<Expression>.from(
-          arguments.getRange(0, firstNamedArgumentIndex));
-      List<NamedExpression> named = new List<NamedExpression>.from(
-          arguments.getRange(firstNamedArgumentIndex, arguments.length));
-      push(forest.createArguments(beginToken.offset, positional, named: named));
+      List<Expression> positional;
+      List<NamedExpression> named;
+      if (libraryBuilder.enableNamedArgumentsAnywhereInLibrary) {
+        positional =
+            new List<Expression>.filled(positionalCount, dummyExpression);
+        named = new List<NamedExpression>.filled(
+            arguments.length - positionalCount, dummyNamedExpression);
+        int positionalIndex = 0;
+        int namedIndex = 0;
+        for (int i = 0; i < arguments.length; i++) {
+          if (arguments[i] is NamedExpression) {
+            named[namedIndex++] = arguments[i] as NamedExpression;
+          } else {
+            positional[positionalIndex++] = arguments[i] as Expression;
+          }
+        }
+        assert(
+            positionalIndex == positional.length && namedIndex == named.length);
+      } else {
+        positional = new List<Expression>.from(
+            arguments.getRange(0, firstNamedArgumentIndex));
+        named = new List<NamedExpression>.from(
+            arguments.getRange(firstNamedArgumentIndex, arguments.length));
+      }
+
+      push(forest.createArguments(beginToken.offset, positional,
+          named: named, argumentsOriginalOrder: argumentsOriginalOrder));
     } else {
       // TODO(kmillikin): Find a way to avoid allocating a second list in the
       // case where there were no named arguments, which is a common one.
       push(forest.createArguments(
-          beginToken.offset, new List<Expression>.from(arguments)));
+          beginToken.offset, new List<Expression>.from(arguments),
+          argumentsOriginalOrder: argumentsOriginalOrder));
     }
     assert(checkState(beginToken, [ValueKinds.Arguments]));
   }
@@ -1797,7 +1864,7 @@
     ]));
     debugEvent("Send");
     Object? arguments = pop();
-    List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
+    List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
     Object receiver = pop()!;
     // Delay adding [typeArguments] to [forest] for type aliases: They
     // must be unaliased to the type arguments of the denoted type.
@@ -1831,7 +1898,7 @@
     } else if (arguments == null) {
       push(receiver);
     } else {
-      push(finishSend(receiver, typeArguments, arguments as Arguments,
+      push(finishSend(receiver, typeArguments, arguments as ArgumentsImpl,
           beginToken.charOffset,
           isTypeArgumentsInForest: isInForest));
     }
@@ -1848,7 +1915,7 @@
 
   @override
   Expression_Generator_Initializer finishSend(Object receiver,
-      List<UnresolvedType>? typeArguments, Arguments arguments, int charOffset,
+      List<TypeBuilder>? typeArguments, ArgumentsImpl arguments, int charOffset,
       {bool isTypeArgumentsInForest = false}) {
     if (receiver is Generator) {
       return receiver.doInvocation(charOffset, typeArguments, arguments,
@@ -2973,8 +3040,7 @@
     if (!libraryBuilder.isNonNullableByDefault) {
       reportNonNullableModifierError(lateToken);
     }
-    UnresolvedType? unresolvedType =
-        pop(NullValue.UnresolvedType) as UnresolvedType?;
+    TypeBuilder? unresolvedType = pop(NullValue.TypeBuilder) as TypeBuilder?;
     DartType? type = unresolvedType != null
         ? buildDartType(unresolvedType, allowPotentiallyConstantType: false)
         : null;
@@ -3407,7 +3473,7 @@
       }
     }
 
-    List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
+    List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
 
     DartType typeArgument;
     if (typeArguments != null) {
@@ -3439,7 +3505,7 @@
     push(node);
   }
 
-  void buildLiteralSet(List<UnresolvedType>? typeArguments, Token? constKeyword,
+  void buildLiteralSet(List<TypeBuilder>? typeArguments, Token? constKeyword,
       Token leftBrace, List<dynamic>? setOrMapEntries) {
     DartType typeArgument;
     if (typeArguments != null) {
@@ -3508,7 +3574,7 @@
         setOrMapEntries[i] = toValue(elem);
       }
     }
-    List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
+    List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
 
     // Replicate existing behavior that has been removed from the parser.
     // This will be removed once unified collections is implemented.
@@ -3575,7 +3641,7 @@
     push(forest.createNullLiteral(offsetForToken(token)));
   }
 
-  void buildLiteralMap(List<UnresolvedType>? typeArguments, Token? constKeyword,
+  void buildLiteralMap(List<TypeBuilder>? typeArguments, Token? constKeyword,
       Token leftBrace, List<MapLiteralEntry> entries) {
     DartType keyType;
     DartType valueType;
@@ -3683,7 +3749,7 @@
       reportErrorIfNullableType(questionMark);
     }
     bool isMarkedAsNullable = questionMark != null;
-    List<UnresolvedType>? arguments = pop() as List<UnresolvedType>?;
+    List<TypeBuilder>? arguments = pop() as List<TypeBuilder>?;
     Object? name = pop();
     if (name is QualifiedName) {
       QualifiedName qualified = name;
@@ -3698,19 +3764,16 @@
         Message message = fasta.templateNotAType.withArguments(displayName);
         libraryBuilder.addProblem(
             message, offset, lengthOfSpan(beginToken, suffix), uri);
-        push(new UnresolvedType(
-            new NamedTypeBuilder(
+        push(new NamedTypeBuilder.fromTypeDeclarationBuilder(
+            new InvalidTypeDeclarationBuilder(
                 name,
-                libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable),
-                null,
-                uri,
-                offset)
-              ..bind(new InvalidTypeDeclarationBuilder(
-                  name,
-                  message.withLocation(
-                      uri, offset, lengthOfSpan(beginToken, suffix)))),
-            offset,
-            uri));
+                message.withLocation(
+                    uri, offset, lengthOfSpan(beginToken, suffix))),
+            libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable),
+            fileUri: uri,
+            charOffset: offset,
+            instanceTypeVariableAccess:
+                InstanceTypeVariableAccessState.Unexpected));
         return;
       }
     }
@@ -3737,21 +3800,21 @@
       // TODO(ahe): Arguments could be passed here.
       libraryBuilder.addProblem(
           name.message, name.charOffset, name.name.length, name.fileUri);
-      result = new NamedTypeBuilder(
-          name.name,
+      result = new NamedTypeBuilder.fromTypeDeclarationBuilder(
+          new InvalidTypeDeclarationBuilder(
+              name.name,
+              name.message.withLocation(
+                  name.fileUri, name.charOffset, name.name.length)),
           libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable),
-          /* arguments = */ null,
-          name.fileUri,
-          name.charOffset)
-        ..bind(new InvalidTypeDeclarationBuilder(
-            name.name,
-            name.message.withLocation(
-                name.fileUri, name.charOffset, name.name.length)));
+          fileUri: name.fileUri,
+          charOffset: name.charOffset,
+          instanceTypeVariableAccess:
+              InstanceTypeVariableAccessState.Unexpected);
     } else {
       unhandled(
           "${name.runtimeType}", "handleType", beginToken.charOffset, uri);
     }
-    push(new UnresolvedType(result, beginToken.charOffset, uri));
+    push(result);
   }
 
   @override
@@ -3785,7 +3848,7 @@
       reportErrorIfNullableType(questionMark);
     }
     FormalParameters formals = pop() as FormalParameters;
-    UnresolvedType? returnType = pop() as UnresolvedType?;
+    TypeBuilder? returnType = pop() as TypeBuilder?;
     List<TypeVariableBuilder>? typeVariables =
         pop() as List<TypeVariableBuilder>?;
     if (typeVariables != null) {
@@ -3801,7 +3864,7 @@
         }
       }
     }
-    UnresolvedType type = formals.toFunctionType(
+    TypeBuilder type = formals.toFunctionType(
         returnType,
         libraryBuilder.nullableBuilderIfTrue(questionMark != null),
         typeVariables);
@@ -3814,13 +3877,14 @@
     debugEvent("VoidKeyword");
     int offset = offsetForToken(token);
     // "void" is always nullable.
-    push(new UnresolvedType(
-        new NamedTypeBuilder(
-            "void", const NullabilityBuilder.nullable(), null, uri, offset)
-          ..bind(new VoidTypeDeclarationBuilder(
-              const VoidType(), libraryBuilder, offset)),
-        offset,
-        uri));
+    push(new NamedTypeBuilder.fromTypeDeclarationBuilder(
+        new VoidTypeDeclarationBuilder(
+            const VoidType(), libraryBuilder, offset),
+        const NullabilityBuilder.nullable(),
+        fileUri: uri,
+        charOffset: offset,
+        instanceTypeVariableAccess:
+            InstanceTypeVariableAccessState.Unexpected));
   }
 
   @override
@@ -3847,7 +3911,7 @@
   @override
   void handleAsOperator(Token operator) {
     debugEvent("AsOperator");
-    DartType type = buildDartType(pop() as UnresolvedType,
+    DartType type = buildDartType(pop() as TypeBuilder,
         allowPotentiallyConstantType: libraryBuilder.isNonNullableByDefault);
     libraryBuilder.checkBoundsInType(
         type, typeEnvironment, uri, operator.charOffset);
@@ -3871,7 +3935,7 @@
   @override
   void handleIsOperator(Token isOperator, Token? not) {
     debugEvent("IsOperator");
-    DartType type = buildDartType(pop() as UnresolvedType,
+    DartType type = buildDartType(pop() as TypeBuilder,
         allowPotentiallyConstantType: libraryBuilder.isNonNullableByDefault);
     Expression operand = popForValue();
     Expression isExpression = forest.createIsExpression(
@@ -3964,7 +4028,7 @@
       }
     }
     Object? nameNode = pop();
-    UnresolvedType? type = pop() as UnresolvedType?;
+    TypeBuilder? type = pop() as TypeBuilder?;
     if (functionNestingLevel == 0 && type != null) {
       // TODO(ahe): The type we compute here may be different from what is
       // computed in the outline phase. We should make sure that the outline
@@ -3998,14 +4062,13 @@
         return;
       }
     } else {
-      parameter = new FormalParameterBuilder(null, modifiers, type?.builder,
+      parameter = new FormalParameterBuilder(null, modifiers, type,
           name?.name ?? '', libraryBuilder, offsetForToken(nameToken),
           fileUri: uri)
         ..hasDeclaredInitializer = (initializerStart != null);
     }
-    VariableDeclaration variable = parameter.build(
-        libraryBuilder, functionNestingLevel,
-        nonInstanceContext: !isDeclarationInstanceContext);
+    VariableDeclaration variable =
+        parameter.build(libraryBuilder, functionNestingLevel);
     Expression? initializer = name?.initializer;
     if (initializer != null) {
       if (member is RedirectingFactoryBuilder) {
@@ -4074,13 +4137,13 @@
       exitLocalScope();
     }
     FormalParameters formals = pop() as FormalParameters;
-    UnresolvedType? returnType = pop() as UnresolvedType?;
+    TypeBuilder? returnType = pop() as TypeBuilder?;
     List<TypeVariableBuilder>? typeVariables =
         pop() as List<TypeVariableBuilder>?;
     if (!libraryBuilder.isNonNullableByDefault) {
       reportErrorIfNullableType(question);
     }
-    UnresolvedType type = formals.toFunctionType(returnType,
+    TypeBuilder type = formals.toFunctionType(returnType,
         libraryBuilder.nullableBuilderIfTrue(question != null), typeVariables);
     exitLocalScope();
     push(type);
@@ -4177,8 +4240,8 @@
     }
     FormalParameters? catchParameters =
         popIfNotNull(catchKeyword) as FormalParameters?;
-    UnresolvedType? unresolvedExceptionType =
-        popIfNotNull(onKeyword) as UnresolvedType?;
+    TypeBuilder? unresolvedExceptionType =
+        popIfNotNull(onKeyword) as TypeBuilder?;
     DartType exceptionType;
     if (unresolvedExceptionType != null) {
       exceptionType = buildDartType(unresolvedExceptionType,
@@ -4438,7 +4501,7 @@
     }
 
     Identifier? identifier;
-    List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
+    List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
     Object? type = pop();
     if (type is QualifiedName) {
       identifier = type;
@@ -4828,7 +4891,7 @@
     Identifier? nameLastIdentifier = pop(NullValue.Identifier) as Identifier?;
     Token nameLastToken = nameLastIdentifier?.token ?? nameToken;
     String name = pop() as String;
-    List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
+    List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
     if (inMetadata && typeArguments != null) {
       if (!libraryBuilder.enableGenericMetadataInLibrary) {
         handleRecoverableError(fasta.messageMetadataTypeArguments,
@@ -4875,7 +4938,7 @@
   @override
   Expression createInstantiationAndInvocation(
       Expression Function() receiverFunction,
-      List<UnresolvedType>? typeArguments,
+      List<TypeBuilder>? typeArguments,
       String className,
       String constructorName,
       Arguments arguments,
@@ -4885,6 +4948,14 @@
     if (enableConstructorTearOffsInLibrary && inImplicitCreationContext) {
       Expression receiver = receiverFunction();
       if (typeArguments != null) {
+        if (receiver is StaticTearOff &&
+                (receiver.target.isFactory ||
+                    isTearOffLowering(receiver.target)) ||
+            receiver is ConstructorTearOff ||
+            receiver is RedirectingFactoryTearOff) {
+          return buildProblem(fasta.messageConstructorTearOffWithTypeArguments,
+              instantiationOffset, noLength);
+        }
         receiver = forest.createInstantiation(
             instantiationOffset,
             receiver,
@@ -4911,10 +4982,10 @@
   }
 
   @override
-  void endImplicitCreationExpression(Token token) {
+  void endImplicitCreationExpression(Token token, Token openAngleBracket) {
     debugEvent("ImplicitCreationExpression");
     _buildConstructorReferenceInvocation(
-        token.next!, token.offset, Constness.implicit,
+        token, openAngleBracket.offset, Constness.implicit,
         inMetadata: false, inImplicitCreationContext: true);
   }
 
@@ -4925,7 +4996,7 @@
       Token nameLastToken,
       Arguments? arguments,
       String name,
-      List<UnresolvedType>? typeArguments,
+      List<TypeBuilder>? typeArguments,
       int charOffset,
       Constness constness,
       {bool isTypeArgumentsInForest = false,
@@ -4966,8 +5037,8 @@
           usedAsClassFileUri: uri);
       List<TypeBuilder> typeArgumentBuilders = [];
       if (typeArguments != null) {
-        for (UnresolvedType unresolvedType in typeArguments) {
-          typeArgumentBuilders.add(unresolvedType.builder);
+        for (TypeBuilder typeBuilder in typeArguments) {
+          typeArgumentBuilders.add(typeBuilder);
         }
       } else {
         if (aliasBuilder.typeVariablesCount > 0) {
@@ -5337,8 +5408,8 @@
   @override
   void endTypeArguments(int count, Token beginToken, Token endToken) {
     debugEvent("TypeArguments");
-    push(const FixedNullableList<UnresolvedType>()
-            .popNonNullable(stack, count, dummyUnresolvedType) ??
+    push(const FixedNullableList<TypeBuilder>()
+            .popNonNullable(stack, count, dummyTypeBuilder) ??
         NullValue.TypeArguments);
   }
 
@@ -5502,7 +5573,7 @@
     exitLocalScope();
     FormalParameters formals = pop() as FormalParameters;
     Object? declaration = pop();
-    UnresolvedType? returnType = pop() as UnresolvedType?;
+    TypeBuilder? returnType = pop() as TypeBuilder?;
     bool hasImplicitReturnType = returnType == null;
     exitFunction();
     List<TypeVariableBuilder>? typeParameters =
@@ -5512,8 +5583,7 @@
       annotations = pop() as List<Expression>?; // Metadata.
     }
     FunctionNode function = formals.buildFunctionNode(libraryBuilder,
-        returnType, typeParameters, asyncModifier, body, token.charOffset,
-        nonInstanceContext: !isDeclarationInstanceContext);
+        returnType, typeParameters, asyncModifier, body, token.charOffset);
 
     if (declaration is FunctionDeclaration) {
       VariableDeclaration variable = declaration.variable;
@@ -5615,8 +5685,7 @@
     List<TypeVariableBuilder>? typeParameters =
         pop() as List<TypeVariableBuilder>?;
     FunctionNode function = formals.buildFunctionNode(libraryBuilder, null,
-        typeParameters, asyncModifier, body, token.charOffset,
-        nonInstanceContext: !isDeclarationInstanceContext)
+        typeParameters, asyncModifier, body, token.charOffset)
       ..fileOffset = beginToken.charOffset;
 
     Expression result;
@@ -6417,13 +6486,13 @@
   void endTypeVariable(
       Token token, int index, Token? extendsOrSuper, Token? variance) {
     debugEvent("TypeVariable");
-    UnresolvedType? bound = pop() as UnresolvedType?;
+    TypeBuilder? bound = pop() as TypeBuilder?;
     // Peek to leave type parameters on top of stack.
     List<TypeVariableBuilder> typeVariables =
         peek() as List<TypeVariableBuilder>;
 
     TypeVariableBuilder variable = typeVariables[index];
-    variable.bound = bound?.builder;
+    variable.bound = bound;
     if (variance != null) {
       if (!libraryBuilder.enableVarianceInLibrary) {
         reportVarianceModifierNotEnabled(variance);
@@ -6787,8 +6856,8 @@
       ValueKinds.TypeArguments,
       unionOfKinds([ValueKinds.Generator, ValueKinds.Expression])
     ]));
-    List<UnresolvedType>? typeArguments =
-        pop() as List<UnresolvedType>?; // typeArguments
+    List<TypeBuilder>? typeArguments =
+        pop() as List<TypeBuilder>?; // typeArguments
     if (libraryBuilder.enableConstructorTearOffsInLibrary) {
       Object? operand = pop();
       if (operand is Generator) {
@@ -6819,18 +6888,16 @@
   }
 
   @override
-  UnresolvedType validateTypeVariableUse(UnresolvedType unresolved,
+  TypeBuilder validateTypeVariableUse(TypeBuilder typeBuilder,
       {required bool allowPotentiallyConstantType}) {
     // ignore: unnecessary_null_comparison
     assert(allowPotentiallyConstantType != null);
-    _validateTypeVariableUseInternal(
-        unresolved.builder, unresolved.fileUri, unresolved.charOffset,
+    _validateTypeVariableUseInternal(typeBuilder,
         allowPotentiallyConstantType: allowPotentiallyConstantType);
-    return unresolved;
+    return typeBuilder;
   }
 
-  void _validateTypeVariableUseInternal(
-      TypeBuilder? builder, Uri fileUri, int charOffset,
+  void _validateTypeVariableUseInternal(TypeBuilder? builder,
       {required bool allowPotentiallyConstantType}) {
     // ignore: unnecessary_null_comparison
     assert(allowPotentiallyConstantType != null);
@@ -6839,48 +6906,61 @@
         TypeVariableBuilder typeParameterBuilder =
             builder.declaration as TypeVariableBuilder;
         TypeParameter typeParameter = typeParameterBuilder.parameter;
-        bool extensionField =
-            member.isExtensionMember && member.isField && !member.isExternal;
-        if ((extensionField || !isDeclarationInstanceContext) &&
-            (typeParameter.parent is Class ||
-                typeParameter.parent is Extension)) {
-          // TODO(johnniwinther): Can we unify this check with the similar check
-          // in NamedTypeBuilder.buildTypeInternal. If we skip it here, the
-          // error below (type variable in constant context) will be emitted
-          // _instead_ of this (type variable in static context), which seems
-          // like an odd prioritization.
-          LocatedMessage message = fasta.messageTypeVariableInStaticContext
-              .withLocation(builder.fileUri ?? fileUri,
-                  builder.charOffset ?? charOffset, typeParameter.name!.length);
-          builder.bind(
-              new InvalidTypeDeclarationBuilder(typeParameter.name!, message));
-          addProblem(message.messageObject, message.charOffset, message.length);
-        } else if (constantContext != ConstantContext.none &&
-            (!inConstructorInitializer || !allowPotentiallyConstantType)) {
-          LocatedMessage message = fasta.messageTypeVariableInConstantContext
-              .withLocation(fileUri, charOffset, typeParameter.name!.length);
-          builder.bind(
-              new InvalidTypeDeclarationBuilder(typeParameter.name!, message));
-          addProblem(message.messageObject, message.charOffset, message.length);
+        if (typeParameter.parent is Class ||
+            typeParameter.parent is Extension) {
+          switch (builder.instanceTypeVariableAccess) {
+            case InstanceTypeVariableAccessState.Allowed:
+              if (constantContext != ConstantContext.none &&
+                  (!inConstructorInitializer ||
+                      !allowPotentiallyConstantType)) {
+                LocatedMessage message =
+                    fasta.messageTypeVariableInConstantContext.withLocation(
+                        builder.fileUri!,
+                        builder.charOffset!,
+                        typeParameter.name!.length);
+                builder.bind(new InvalidTypeDeclarationBuilder(
+                    typeParameter.name!, message));
+                addProblem(
+                    message.messageObject, message.charOffset, message.length);
+              }
+              break;
+            case InstanceTypeVariableAccessState.Disallowed:
+              // TODO(johnniwinther): Can we unify this check with the similar
+              // check in NamedTypeBuilder.buildTypeInternal. If we skip it
+              // here, the error below (type variable in constant context) will
+              // be emitted _instead_ of this (type variable in static context),
+              // which seems like an odd prioritization.
+              // TODO: Handle this case.
+              LocatedMessage message = fasta.messageTypeVariableInStaticContext
+                  .withLocation(builder.fileUri!, builder.charOffset!,
+                      typeParameter.name!.length);
+              builder.bind(new InvalidTypeDeclarationBuilder(
+                  typeParameter.name!, message));
+              addProblem(
+                  message.messageObject, message.charOffset, message.length);
+              break;
+            case InstanceTypeVariableAccessState.Invalid:
+              break;
+            case InstanceTypeVariableAccessState.Unexpected:
+              assert(false,
+                  "Unexpected instance type variable $typeParameterBuilder");
+              break;
+          }
         }
       }
       if (builder.arguments != null) {
         for (TypeBuilder typeBuilder in builder.arguments!) {
-          _validateTypeVariableUseInternal(
-              typeBuilder,
-              typeBuilder.fileUri ?? fileUri,
-              typeBuilder.charOffset ?? charOffset,
+          _validateTypeVariableUseInternal(typeBuilder,
               allowPotentiallyConstantType: allowPotentiallyConstantType);
         }
       }
     } else if (builder is FunctionTypeBuilder) {
-      _validateTypeVariableUseInternal(builder.returnType, fileUri, charOffset,
+      _validateTypeVariableUseInternal(builder.returnType,
           allowPotentiallyConstantType: allowPotentiallyConstantType);
       if (builder.formals != null) {
         for (FormalParameterBuilder formalParameterBuilder
             in builder.formals!) {
-          _validateTypeVariableUseInternal(
-              formalParameterBuilder.type, fileUri, charOffset,
+          _validateTypeVariableUseInternal(formalParameterBuilder.type,
               allowPotentiallyConstantType: allowPotentiallyConstantType);
         }
       }
@@ -6912,9 +6992,7 @@
   @override
   Expression buildMethodInvocation(
       Expression receiver, Name name, Arguments arguments, int offset,
-      {bool isConstantExpression: false,
-      bool isNullAware: false,
-      bool isSuper: false}) {
+      {bool isConstantExpression: false, bool isNullAware: false}) {
     if (constantContext != ConstantContext.none &&
         !isConstantExpression &&
         !enableConstFunctionsInLibrary) {
@@ -6924,31 +7002,6 @@
           offset,
           name.text.length);
     }
-    if (isSuper) {
-      // We can ignore [isNullAware] on super sends.
-      assert(forest.isThisExpression(receiver));
-      Member? target = lookupInstanceMember(name, isSuper: true);
-
-      if (target == null || (target is Procedure && !target.isAccessor)) {
-        if (target == null) {
-          warnUnresolvedMethod(name, offset, isSuper: true);
-        } else if (!areArgumentsCompatible(target.function!, arguments)) {
-          target = null;
-          addProblemErrorIfConst(
-              fasta.templateSuperclassMethodArgumentMismatch
-                  .withArguments(name.text),
-              offset,
-              name.text.length);
-        }
-        return new SuperMethodInvocation(name, arguments, target as Procedure?)
-          ..fileOffset = offset;
-      }
-
-      receiver = new SuperPropertyGet(name, target)..fileOffset = offset;
-      return forest.createExpressionInvocation(
-          arguments.fileOffset, receiver, arguments);
-    }
-
     if (isNullAware) {
       VariableDeclarationImpl variable =
           createVariableDeclarationForValue(receiver);
@@ -6966,6 +7019,47 @@
   }
 
   @override
+  Expression buildSuperInvocation(Name name, Arguments arguments, int offset,
+      {bool isConstantExpression: false,
+      bool isNullAware: false,
+      bool isImplicitCall: false}) {
+    if (constantContext != ConstantContext.none &&
+        !isConstantExpression &&
+        !enableConstFunctionsInLibrary) {
+      return buildProblem(
+          fasta.templateNotConstantExpression
+              .withArguments('Method invocation'),
+          offset,
+          name.text.length);
+    }
+    Member? target = lookupInstanceMember(name, isSuper: true);
+
+    if (target == null || (target is Procedure && !target.isAccessor)) {
+      if (target == null) {
+        warnUnresolvedMethod(name, offset, isSuper: true);
+      } else if (!areArgumentsCompatible(target.function!, arguments)) {
+        target = null;
+        addProblemErrorIfConst(
+            fasta.templateSuperclassMethodArgumentMismatch
+                .withArguments(name.text),
+            offset,
+            name.text.length);
+      }
+      return new SuperMethodInvocation(name, arguments, target as Procedure?)
+        ..fileOffset = offset;
+    }
+    if (isImplicitCall) {
+      return buildProblem(
+          fasta.messageImplicitSuperCallOfNonMethod, offset, noLength);
+    } else {
+      Expression receiver = new SuperPropertyGet(name, target)
+        ..fileOffset = offset;
+      return forest.createExpressionInvocation(
+          arguments.fileOffset, receiver, arguments);
+    }
+  }
+
+  @override
   void addProblem(Message message, int charOffset, int length,
       {bool wasHandled: false,
       List<LocatedMessage>? context,
@@ -7024,11 +7118,6 @@
   }
 
   @override
-  StaticGet makeStaticGet(Member readTarget, Token token) {
-    return new StaticGet(readTarget)..fileOffset = offsetForToken(token);
-  }
-
-  @override
   Expression wrapInDeferredCheck(
       Expression expression, PrefixBuilder prefix, int charOffset) {
     VariableDeclaration check = new VariableDeclaration.forValue(
@@ -7042,25 +7131,23 @@
   }
 
   @override
-  DartType buildDartType(UnresolvedType unresolvedType,
+  DartType buildDartType(TypeBuilder typeBuilder,
       {required bool allowPotentiallyConstantType}) {
-    return validateTypeVariableUse(unresolvedType,
+    return validateTypeVariableUse(typeBuilder,
             allowPotentiallyConstantType: allowPotentiallyConstantType)
-        .builder
         .build(libraryBuilder);
   }
 
   @override
-  DartType buildTypeLiteralDartType(UnresolvedType unresolvedType,
+  DartType buildTypeLiteralDartType(TypeBuilder typeBuilder,
       {required bool allowPotentiallyConstantType}) {
-    return validateTypeVariableUse(unresolvedType,
+    return validateTypeVariableUse(typeBuilder,
             allowPotentiallyConstantType: allowPotentiallyConstantType)
-        .builder
         .buildTypeLiteralType(libraryBuilder);
   }
 
   @override
-  List<DartType> buildDartTypeArguments(List<UnresolvedType>? unresolvedTypes,
+  List<DartType> buildDartTypeArguments(List<TypeBuilder>? unresolvedTypes,
       {required bool allowPotentiallyConstantType}) {
     if (unresolvedTypes == null) return <DartType>[];
     return new List<DartType>.generate(
@@ -7288,16 +7375,14 @@
 
   FunctionNode buildFunctionNode(
       SourceLibraryBuilder library,
-      UnresolvedType? returnType,
+      TypeBuilder? returnType,
       List<TypeVariableBuilder>? typeParameters,
       AsyncMarker asyncModifier,
       Statement body,
-      int fileEndOffset,
-      {required bool nonInstanceContext}) {
+      int fileEndOffset) {
     FunctionType type = toFunctionType(
             returnType, const NullabilityBuilder.omitted(), typeParameters)
-        .builder
-        .build(library, nonInstanceContext: nonInstanceContext) as FunctionType;
+        .build(library) as FunctionType;
     List<VariableDeclaration> positionalParameters = <VariableDeclaration>[];
     List<VariableDeclaration> namedParameters = <VariableDeclaration>[];
     if (parameters != null) {
@@ -7323,14 +7408,11 @@
       ..fileEndOffset = fileEndOffset;
   }
 
-  UnresolvedType toFunctionType(
-      UnresolvedType? returnType, NullabilityBuilder nullabilityBuilder,
+  TypeBuilder toFunctionType(
+      TypeBuilder? returnType, NullabilityBuilder nullabilityBuilder,
       [List<TypeVariableBuilder>? typeParameters]) {
-    return new UnresolvedType(
-        new FunctionTypeBuilder(returnType?.builder, typeParameters, parameters,
-            nullabilityBuilder, uri, charOffset),
-        charOffset,
-        uri);
+    return new FunctionTypeBuilder(returnType, typeParameters, parameters,
+        nullabilityBuilder, uri, charOffset);
   }
 
   Scope computeFormalParameterScope(
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index b11496e..8508470 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -3106,7 +3106,7 @@
             new DelayedTypeComputation(this, classMember, overriddenMembers);
         hierarchy.registerDelayedTypeComputation(computation);
 
-        /// Declared members must be checked to validly override the the
+        /// Declared members must be checked to validly override the
         /// overridden members.
         hierarchy.registerOverrideCheck(
             classBuilder as SourceClassBuilder, classMember, overriddenMembers);
diff --git a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
index 414c8c2..abff877 100644
--- a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
@@ -701,8 +701,9 @@
       } else if (member.isSetter) {
         type = member.setterType;
       } else {
-        type = member.function
-            .computeFunctionType(classBuilder.cls.enclosingLibrary.nonNullable);
+        // TODO(johnniwinther): Why do we need the specific nullability here?
+        type = member.getterType.withDeclaredNullability(
+            classBuilder.cls.enclosingLibrary.nonNullable);
       }
     } else if (member is Field) {
       type = member.type;
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 13f9ead..bc2af8b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -35,7 +35,6 @@
 import '../fasta_codes.dart';
 
 import 'constant_int_folder.dart';
-import 'constructor_tearoff_lowering.dart';
 
 part 'constant_collection_builders.dart';
 
@@ -701,34 +700,6 @@
     if (expression is ConstantExpression) {
       if (result.typeArguments.every(isInstantiated)) {
         return evaluateAndTransformWithContext(node, result);
-      } else if (enableConstructorTearOff) {
-        Constant constant = expression.constant;
-        if (constant is TypedefTearOffConstant) {
-          Substitution substitution =
-              Substitution.fromPairs(constant.parameters, node.typeArguments);
-          return new Instantiation(
-              new ConstantExpression(constant.tearOffConstant,
-                  constant.tearOffConstant.getType(_staticTypeContext!))
-                ..fileOffset = expression.fileOffset,
-              constant.types.map(substitution.substituteType).toList());
-        } else {
-          LoweredTypedefTearOff? loweredTypedefTearOff =
-              LoweredTypedefTearOff.fromConstant(constant);
-          if (loweredTypedefTearOff != null) {
-            Constant tearOffConstant = constantEvaluator
-                .canonicalize(loweredTypedefTearOff.targetTearOffConstant);
-            Substitution substitution = Substitution.fromPairs(
-                loweredTypedefTearOff.typedefTearOff.function.typeParameters,
-                node.typeArguments);
-            return new Instantiation(
-                new ConstantExpression(tearOffConstant,
-                    tearOffConstant.getType(_staticTypeContext!))
-                  ..fileOffset = expression.fileOffset,
-                loweredTypedefTearOff.typeArguments
-                    .map(substitution.substituteType)
-                    .toList());
-          }
-        }
       }
     }
     return node;
@@ -1066,7 +1037,7 @@
           errorReporter.report(locatedMessageActualError);
         }
         return new UnevaluatedConstant(
-            new InvalidExpression(result.message.message));
+            new InvalidExpression(result.message.problemMessage));
       }
       if (result is _AbortDueToThrowConstant) {
         final Object value = result.throwValue;
@@ -1090,7 +1061,8 @@
               createLocatedMessage(node, messageConstEvalStartingPoint);
           errorReporter.report(locatedMessage, contextMessages);
         }
-        return new UnevaluatedConstant(new InvalidExpression(message.message));
+        return new UnevaluatedConstant(
+            new InvalidExpression(message.problemMessage));
       }
       if (result is _AbortDueToInvalidExpressionConstant) {
         return new UnevaluatedConstant(
@@ -3363,29 +3335,8 @@
         // ignore: unnecessary_null_comparison
         assert(types != null);
 
-        List<DartType> typeArguments = types;
-        if (constant is TypedefTearOffConstant) {
-          Substitution substitution =
-              Substitution.fromPairs(constant.parameters, typeArguments);
-          typeArguments =
-              constant.types.map(substitution.substituteType).toList();
-          constant = constant.tearOffConstant;
-        } else {
-          LoweredTypedefTearOff? loweredTypedefTearOff =
-              LoweredTypedefTearOff.fromConstant(constant);
-          if (loweredTypedefTearOff != null) {
-            constant =
-                canonicalize(loweredTypedefTearOff.targetTearOffConstant);
-            Substitution substitution = Substitution.fromPairs(
-                loweredTypedefTearOff.typedefTearOff.function.typeParameters,
-                node.typeArguments);
-            typeArguments = loweredTypedefTearOff.typeArguments
-                .map(substitution.substituteType)
-                .toList();
-          }
-        }
         return canonicalize(
-            new InstantiationConstant(constant, convertTypes(typeArguments)));
+            new InstantiationConstant(constant, convertTypes(types)));
       } else {
         // Probably unreachable.
         return createEvaluationErrorConstant(
@@ -3597,10 +3548,12 @@
     final DartType result = env.substituteType(type);
 
     if (!isInstantiated(result)) {
-      _gotError = createEvaluationErrorConstant(
-          node,
-          templateConstEvalFreeTypeParameter.withArguments(
-              type, isNonNullableByDefault));
+      // TODO(johnniwinther): Maybe we should always report this in the body
+      // builder. Currently we report some, because we need to handle
+      // potentially constant types, but we should be able to handle all (or
+      // none) in the body builder.
+      _gotError = createExpressionErrorConstant(
+          node, messageTypeVariableInConstantContext);
       return null;
     }
 
@@ -4534,7 +4487,7 @@
   }
 
   void _report(LocatedMessage message) {
-    reportMessage(message.uri, message.charOffset, message.message);
+    reportMessage(message.uri, message.charOffset, message.problemMessage);
   }
 
   void reportMessage(Uri? uri, int offset, String message) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
index 4fff165..244a71d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
@@ -97,8 +97,12 @@
 /// the given [name] in [compilationUnit].
 ///
 /// If constructor tear off lowering is not enabled, `null` is returned.
-Procedure? createConstructorTearOffProcedure(String name,
-    SourceLibraryBuilder compilationUnit, Uri fileUri, int fileOffset,
+Procedure? createConstructorTearOffProcedure(
+    String name,
+    SourceLibraryBuilder compilationUnit,
+    Uri fileUri,
+    int fileOffset,
+    Reference? reference,
     {required bool forAbstractClassOrEnum}) {
   if (!forAbstractClassOrEnum &&
       compilationUnit
@@ -107,7 +111,8 @@
         compilationUnit,
         constructorTearOffName(name, compilationUnit.library),
         fileUri,
-        fileOffset);
+        fileOffset,
+        reference);
   }
   return null;
 }
@@ -116,15 +121,20 @@
 /// the given [name] in [compilationUnit].
 ///
 /// If constructor tear off lowering is not enabled, `null` is returned.
-Procedure? createFactoryTearOffProcedure(String name,
-    SourceLibraryBuilder compilationUnit, Uri fileUri, int fileOffset) {
+Procedure? createFactoryTearOffProcedure(
+    String name,
+    SourceLibraryBuilder compilationUnit,
+    Uri fileUri,
+    int fileOffset,
+    Reference? reference) {
   if (compilationUnit
       .loader.target.backendTarget.isFactoryTearOffLoweringEnabled) {
     return _createTearOffProcedure(
         compilationUnit,
         constructorTearOffName(name, compilationUnit.library),
         fileUri,
-        fileOffset);
+        fileOffset,
+        reference);
   }
   return null;
 }
@@ -132,13 +142,19 @@
 /// Creates the [Procedure] for the lowering of a typedef tearoff of a
 /// constructor of the given [name] in with the typedef defined in
 /// [libraryBuilder].
-Procedure createTypedefTearOffProcedure(String typedefName, String name,
-    SourceLibraryBuilder libraryBuilder, Uri fileUri, int fileOffset) {
+Procedure createTypedefTearOffProcedure(
+    String typedefName,
+    String name,
+    SourceLibraryBuilder libraryBuilder,
+    Uri fileUri,
+    int fileOffset,
+    Reference? reference) {
   return _createTearOffProcedure(
       libraryBuilder,
       typedefTearOffName(typedefName, name, libraryBuilder.library),
       fileUri,
-      fileOffset);
+      fileOffset,
+      reference);
 }
 
 /// Creates the parameters and body for [tearOff] based on [constructor] in
@@ -307,9 +323,9 @@
 /// Creates the synthesized [Procedure] node for a tear off lowering by the
 /// given [name].
 Procedure _createTearOffProcedure(SourceLibraryBuilder libraryBuilder,
-    Name name, Uri fileUri, int fileOffset) {
+    Name name, Uri fileUri, int fileOffset, Reference? reference) {
   return new Procedure(name, ProcedureKind.Method, new FunctionNode(null),
-      fileUri: fileUri, isStatic: true)
+      fileUri: fileUri, isStatic: true, reference: reference)
     ..startFileOffset = fileOffset
     ..fileOffset = fileOffset
     ..fileEndOffset = fileOffset
@@ -362,7 +378,9 @@
       substitution.substituteType(function.returnType);
   tearOff.function.requiredParameterCount = function.requiredParameterCount;
   libraryBuilder.loader.registerTypeDependency(
-      tearOff, new TypeDependency(tearOff, constructor, substitution));
+      tearOff,
+      new TypeDependency(tearOff, constructor, substitution,
+          copyReturnType: true));
 }
 
 /// Creates the [Arguments] for passing the parameters from [tearOff] to its
@@ -410,19 +428,18 @@
 /// Reverse engineered typedef tear off information.
 class LoweredTypedefTearOff {
   Procedure typedefTearOff;
-  Constant targetTearOffConstant;
+  Expression targetTearOff;
   List<DartType> typeArguments;
 
   LoweredTypedefTearOff(
-      this.typedefTearOff, this.targetTearOffConstant, this.typeArguments);
+      this.typedefTearOff, this.targetTearOff, this.typeArguments);
 
-  /// Reverse engineers [constant] to a [LoweredTypedefTearOff] if [constant] is
-  /// the encoding of a lowered typedef tear off.
-  // TODO(johnniwinther): Check that this works with outlines.
-  static LoweredTypedefTearOff? fromConstant(Constant constant) {
-    if (constant is StaticTearOffConstant &&
-        isTypedefTearOffLowering(constant.target)) {
-      Procedure typedefTearOff = constant.target;
+  /// Reverse engineers [expression] to a [LoweredTypedefTearOff] if
+  /// [expression] is the encoding of a lowered typedef tear off.
+  static LoweredTypedefTearOff? fromExpression(Expression expression) {
+    if (expression is StaticTearOff &&
+        isTypedefTearOffLowering(expression.target)) {
+      Procedure typedefTearOff = expression.target;
       Statement? body = typedefTearOff.function.body;
       if (body is ReturnStatement) {
         Expression? constructorInvocation = body.expression;
@@ -445,15 +462,15 @@
               break;
             }
           }
-          Constant tearOffConstant;
+          Expression targetTearOff;
           if (target is Constructor ||
               target is Procedure && target.isFactory) {
-            tearOffConstant = new ConstructorTearOffConstant(target!);
+            targetTearOff = new ConstructorTearOff(target!);
           } else {
-            tearOffConstant = new StaticTearOffConstant(target as Procedure);
+            targetTearOff = new StaticTearOff(target as Procedure);
           }
           return new LoweredTypedefTearOff(
-              typedefTearOff, tearOffConstant, typeArguments!);
+              typedefTearOff, targetTearOff, typeArguments!);
         }
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 04979e2..ff0fb53 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -27,7 +27,6 @@
 import '../builder/type_builder.dart';
 import '../builder/type_declaration_builder.dart';
 import '../builder/type_variable_builder.dart';
-import '../builder/unresolved_type.dart';
 
 import '../constant_context.dart' show ConstantContext;
 
@@ -217,24 +216,25 @@
   /// If the invocation has explicit type arguments
   /// [buildTypeWithResolvedArguments] called instead.
   Expression_Generator_Initializer doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, ArgumentsImpl arguments,
       {bool isTypeArgumentsInForest = false});
 
   Expression_Generator buildSelectorAccess(
-      Selector send, int operatorOffset, bool isNullAware) {
-    if (send is InvocationSelector) {
-      return _helper.buildMethodInvocation(buildSimpleRead(), send.name,
-          send.arguments, offsetForToken(send.token),
+      Selector selector, int operatorOffset, bool isNullAware) {
+    selector.reportNewAsSelector();
+    if (selector is InvocationSelector) {
+      return _helper.buildMethodInvocation(buildSimpleRead(), selector.name,
+          selector.arguments, offsetForToken(selector.token),
           isNullAware: isNullAware,
-          isConstantExpression: send.isPotentiallyConstant);
+          isConstantExpression: selector.isPotentiallyConstant);
     } else {
       if (_helper.constantContext != ConstantContext.none &&
-          send.name != lengthName) {
+          selector.name != lengthName) {
         _helper.addProblem(
             messageNotAConstantExpression, fileOffset, token.length);
       }
-      return PropertyAccessGenerator.make(
-          _helper, send.token, buildSimpleRead(), send.name, isNullAware);
+      return PropertyAccessGenerator.make(_helper, selector.token,
+          buildSimpleRead(), selector.name, isNullAware);
     }
   }
 
@@ -258,7 +258,7 @@
   }
 
   Expression_Generator applyTypeArguments(
-      int fileOffset, List<UnresolvedType>? typeArguments) {
+      int fileOffset, List<TypeBuilder>? typeArguments) {
     return new Instantiation(
         buildSimpleRead(),
         _helper.buildDartTypeArguments(typeArguments,
@@ -272,7 +272,7 @@
   /// The type arguments have not been resolved and should be resolved to
   /// create a [TypeBuilder] for a valid type.
   TypeBuilder buildTypeWithResolvedArguments(
-      NullabilityBuilder nullabilityBuilder, List<UnresolvedType>? arguments,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType}) {
     // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
     NamedTypeBuilder result = new NamedTypeBuilder(
@@ -280,7 +280,8 @@
         nullabilityBuilder,
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: _helper.instanceTypeVariableAccessState);
     Message message = templateNotAType.withArguments(token.lexeme);
     _helper.libraryBuilder
         .addProblem(message, fileOffset, lengthForToken(token), _uri);
@@ -294,7 +295,7 @@
   }
 
   Expression invokeConstructor(
-      List<UnresolvedType>? typeArguments,
+      List<TypeBuilder>? typeArguments,
       String name,
       Arguments arguments,
       Token nameToken,
@@ -412,7 +413,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.forest.createExpressionInvocation(
         adjustForImplicitCall(_plainNameForRead, offset),
@@ -474,7 +475,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.buildMethodInvocation(receiver, name, arguments, offset);
   }
@@ -704,7 +705,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.buildMethodInvocation(
         _forest.createThisExpression(fileOffset), name, arguments, offset);
@@ -812,7 +813,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return unsupported("doInvocation", offset, _uri);
   }
@@ -919,7 +920,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     if (_helper.constantContext != ConstantContext.none) {
       // TODO(brianwilkerson) Fix the length
@@ -1082,7 +1083,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.forest.createExpressionInvocation(
         arguments.fileOffset, buildSimpleRead(), arguments);
@@ -1205,7 +1206,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.forest
         .createExpressionInvocation(offset, buildSimpleRead(), arguments);
@@ -1310,7 +1311,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.forest
         .createExpressionInvocation(offset, buildSimpleRead(), arguments);
@@ -1437,11 +1438,16 @@
 
   Expression _createRead() {
     Expression read;
+    Member? readTarget = this.readTarget;
     if (readTarget == null) {
       read = _makeInvalidRead(UnresolvedKind.Getter);
     } else {
       _reportNonNullableInNullAwareWarningIfNeeded();
-      read = _helper.makeStaticGet(readTarget!, token);
+      if (readTarget is Procedure && readTarget.kind == ProcedureKind.Method) {
+        read = _helper.forest.createStaticTearOff(fileOffset, readTarget);
+      } else {
+        read = _helper.forest.createStaticGet(fileOffset, readTarget);
+      }
     }
     return read;
   }
@@ -1501,7 +1507,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     if (_helper.constantContext != ConstantContext.none &&
         !_helper.isIdentical(readTarget) &&
@@ -1774,7 +1780,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, ArgumentsImpl arguments,
       {bool isTypeArgumentsInForest = false}) {
     if (invokeTarget != null) {
       return _helper.buildExtensionMethodInvocation(
@@ -1789,7 +1795,8 @@
               extensionTypeArguments: _createExtensionTypeArguments(),
               typeArguments: arguments.types,
               positionalArguments: arguments.positional,
-              namedArguments: arguments.named),
+              namedArguments: arguments.named,
+              argumentsOriginalOrder: arguments.argumentsOriginalOrder),
           isTearOff: false);
     } else {
       return _helper.forest.createExpressionInvocation(
@@ -2183,7 +2190,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     VariableDeclarationImpl? receiverVariable;
     Expression receiverExpression = receiver;
@@ -2504,7 +2511,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.forest
         .createExpressionInvocation(offset, buildSimpleRead(), arguments);
@@ -2641,17 +2648,18 @@
 
   @override
   Expression_Generator buildSelectorAccess(
-      Selector send, int operatorOffset, bool isNullAware) {
+      Selector selector, int operatorOffset, bool isNullAware) {
+    selector.reportNewAsSelector();
     if (_helper.constantContext != ConstantContext.none) {
       _helper.addProblem(
           messageNotAConstantExpression, fileOffset, token.length);
     }
-    Generator generator =
-        _createInstanceAccess(send.token, send.name, isNullAware: isNullAware);
-    if (send.arguments != null) {
-      return generator.doInvocation(
-          offsetForToken(send.token), send.typeArguments, send.arguments!,
-          isTypeArgumentsInForest: send.isTypeArgumentsInForest);
+    Generator generator = _createInstanceAccess(selector.token, selector.name,
+        isNullAware: isNullAware);
+    if (selector.arguments != null) {
+      return generator.doInvocation(offsetForToken(selector.token),
+          selector.typeArguments, selector.arguments! as ArgumentsImpl,
+          isTypeArgumentsInForest: selector.isTypeArgumentsInForest);
     } else {
       return generator;
     }
@@ -2676,7 +2684,7 @@
 
   @override
   Expression_Generator_Initializer doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, ArgumentsImpl arguments,
       {bool isTypeArgumentsInForest = false}) {
     Generator generator = _createInstanceAccess(token, callName);
     return generator.doInvocation(offset, typeArguments, arguments,
@@ -2790,7 +2798,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     if (_forest.argumentsPositional(arguments).length > 0 ||
         _forest.argumentsNamed(arguments).length > 0) {
@@ -2877,9 +2885,10 @@
 
   @override
   Expression_Generator buildSelectorAccess(
-      Selector send, int operatorOffset, bool isNullAware) {
-    Object propertyAccess =
-        suffixGenerator.buildSelectorAccess(send, operatorOffset, isNullAware);
+      Selector selector, int operatorOffset, bool isNullAware) {
+    selector.reportNewAsSelector();
+    Object propertyAccess = suffixGenerator.buildSelectorAccess(
+        selector, operatorOffset, isNullAware);
     if (propertyAccess is Generator) {
       return new DeferredAccessGenerator(
           _helper, token, prefixGenerator, propertyAccess);
@@ -2900,7 +2909,7 @@
 
   @override
   TypeBuilder buildTypeWithResolvedArguments(
-      NullabilityBuilder nullabilityBuilder, List<UnresolvedType>? arguments,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType}) {
     String name = "${prefixGenerator._plainNameForRead}."
         "${suffixGenerator._plainNameForRead}";
@@ -2917,7 +2926,7 @@
       int charOffset = offsetForToken(prefixGenerator.token);
       message = templateDeferredTypeAnnotation
           .withArguments(
-              _helper.buildDartType(new UnresolvedType(type, charOffset, _uri),
+              _helper.buildDartType(type,
                   allowPotentiallyConstantType: allowPotentiallyConstantType),
               prefixGenerator._plainNameForRead,
               _helper.libraryBuilder.isNonNullableByDefault)
@@ -2926,7 +2935,8 @@
     }
     // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
     NamedTypeBuilder result = new NamedTypeBuilder(name, nullabilityBuilder,
-        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null);
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     _helper.libraryBuilder.addProblem(
         message.messageObject, message.charOffset, message.length, message.uri);
     result.bind(result.buildInvalidTypeDeclarationBuilder(message));
@@ -2935,7 +2945,7 @@
 
   @override
   Expression_Generator_Initializer doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, ArgumentsImpl arguments,
       {bool isTypeArgumentsInForest = false}) {
     Object suffix = suffixGenerator.doInvocation(
         offset, typeArguments, arguments,
@@ -2951,7 +2961,7 @@
 
   @override
   Expression invokeConstructor(
-      List<UnresolvedType>? typeArguments,
+      List<TypeBuilder>? typeArguments,
       String name,
       Arguments arguments,
       Token nameToken,
@@ -3005,7 +3015,7 @@
 ///
 class TypeUseGenerator extends AbstractReadOnlyAccessGenerator {
   final TypeDeclarationBuilder declaration;
-  List<UnresolvedType>? typeArguments;
+  List<TypeBuilder>? typeArguments;
 
   @override
   final String targetName;
@@ -3028,7 +3038,7 @@
 
   @override
   TypeBuilder buildTypeWithResolvedArguments(
-      NullabilityBuilder nullabilityBuilder, List<UnresolvedType>? arguments,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType}) {
     if (declaration.isExtension && !_helper.enableExtensionTypesInLibrary) {
       // Extension declarations cannot be used as types.
@@ -3055,20 +3065,19 @@
     if (arguments != null) {
       argumentBuilders =
           new List<TypeBuilder>.generate(arguments.length, (int i) {
-        return _helper
-            .validateTypeVariableUse(arguments![i],
-                allowPotentiallyConstantType: allowPotentiallyConstantType)
-            .builder;
+        return _helper.validateTypeVariableUse(arguments![i],
+            allowPotentiallyConstantType: allowPotentiallyConstantType);
       }, growable: false);
     }
     return new NamedTypeBuilder(
-        targetName, nullabilityBuilder, argumentBuilders, _uri, fileOffset)
+        targetName, nullabilityBuilder, argumentBuilders, _uri, fileOffset,
+        instanceTypeVariableAccess: _helper.instanceTypeVariableAccessState)
       ..bind(declaration);
   }
 
   @override
   Expression invokeConstructor(
-      List<UnresolvedType>? typeArguments,
+      List<TypeBuilder>? typeArguments,
       String name,
       Arguments arguments,
       Token nameToken,
@@ -3107,13 +3116,9 @@
         _expression = _forest.createTypeLiteral(
             offsetForToken(token),
             _helper.buildTypeLiteralDartType(
-                new UnresolvedType(
-                    buildTypeWithResolvedArguments(
-                        _helper.libraryBuilder.nonNullableBuilder,
-                        typeArguments,
-                        allowPotentiallyConstantType: true),
-                    fileOffset,
-                    _uri),
+                buildTypeWithResolvedArguments(
+                    _helper.libraryBuilder.nonNullableBuilder, typeArguments,
+                    allowPotentiallyConstantType: true),
                 allowPotentiallyConstantType:
                     _helper.enableConstructorTearOffsInLibrary));
       }
@@ -3126,7 +3131,7 @@
       Selector send, int operatorOffset, bool isNullAware) {
     int nameOffset = offsetForToken(send.token);
     Name name = send.name;
-    Arguments? arguments = send.arguments;
+    ArgumentsImpl? arguments = send.arguments as ArgumentsImpl?;
 
     TypeDeclarationBuilder? declarationBuilder = declaration;
     TypeAliasBuilder? aliasBuilder;
@@ -3143,10 +3148,8 @@
           _helper.enableConstructorTearOffsInLibrary &&
           declarationBuilder is ClassBuilder;
       List<TypeBuilder>? aliasedTypeArguments = typeArguments
-          ?.map((unknownType) => _helper
-              .validateTypeVariableUse(unknownType,
-                  allowPotentiallyConstantType: isConstructorTearOff)
-              .builder)
+          ?.map((unknownType) => _helper.validateTypeVariableUse(unknownType,
+              allowPotentiallyConstantType: isConstructorTearOff))
           .toList();
       if (aliasedTypeArguments != null &&
           aliasedTypeArguments.length != aliasBuilder.typeVariablesCount) {
@@ -3179,7 +3182,9 @@
             for (TypeVariableBuilder typeVariable
                 in aliasBuilder.typeVariables!) {
               aliasedTypeArguments.add(new NamedTypeBuilder(typeVariable.name,
-                  const NullabilityBuilder.omitted(), null, _uri, fileOffset)
+                  const NullabilityBuilder.omitted(), null, _uri, fileOffset,
+                  instanceTypeVariableAccess:
+                      _helper.instanceTypeVariableAccessState)
                 ..bind(typeVariable));
             }
           }
@@ -3221,6 +3226,9 @@
               if (tearOff.isRedirectingFactory) {
                 tearOffExpression = _helper.forest
                     .createRedirectingFactoryTearOff(token.charOffset, tearOff);
+              } else if (tearOff.isFactory) {
+                tearOffExpression = _helper.forest
+                    .createConstructorTearOff(token.charOffset, tearOff);
               } else {
                 tearOffExpression = _helper.forest
                     .createStaticTearOff(token.charOffset, tearOff);
@@ -3264,8 +3272,13 @@
                     aliasBuilder.findConstructorOrFactory(
                         name.text, nameOffset, _uri, _helper.libraryBuilder);
                 if (tearOffLowering != null) {
-                  return _helper.forest
-                      .createStaticTearOff(token.charOffset, tearOffLowering);
+                  if (tearOffLowering.isFactory) {
+                    return _helper.forest.createConstructorTearOff(
+                        token.charOffset, tearOffLowering);
+                  } else {
+                    return _helper.forest
+                        .createStaticTearOff(token.charOffset, tearOffLowering);
+                  }
                 }
                 FreshTypeParameters freshTypeParameters =
                     getFreshTypeParameters(aliasBuilder.typedef.typeParameters);
@@ -3361,7 +3374,7 @@
 
   @override
   Expression_Generator_Builder doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     if (declaration.isExtension) {
       ExtensionBuilder extensionBuilder = declaration as ExtensionBuilder;
@@ -3398,7 +3411,7 @@
 
   @override
   Expression_Generator applyTypeArguments(
-      int fileOffset, List<UnresolvedType>? typeArguments) {
+      int fileOffset, List<TypeBuilder>? typeArguments) {
     return new TypeUseGenerator(_helper, token, declaration, targetName)
       ..typeArguments = typeArguments;
   }
@@ -3545,7 +3558,7 @@
 
   @override
   Expression_Generator_Initializer doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.forest.createExpressionInvocation(
         adjustForImplicitCall(targetName, offset), _createRead(), arguments);
@@ -3600,7 +3613,7 @@
 
   @override
   Expression_Generator_Initializer doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return buildError(arguments,
         charOffset: offset, kind: UnresolvedKind.Method);
@@ -3676,7 +3689,7 @@
 
   @override
   Expression invokeConstructor(
-      List<UnresolvedType>? typeArguments,
+      List<TypeBuilder>? typeArguments,
       String name,
       Arguments arguments,
       Token nameToken,
@@ -3728,7 +3741,7 @@
 
   @override
   Expression doInvocation(
-      int charOffset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int charOffset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return buildError(arguments,
         charOffset: charOffset, kind: UnresolvedKind.Method);
@@ -3805,7 +3818,7 @@
 
   @override
   Never doInvocation(
-      int charOffset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int charOffset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return unhandled("${runtimeType}", "doInvocation", charOffset, _uri);
   }
@@ -4051,7 +4064,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.wrapInLocatedProblem(
         _helper.evaluateArgumentsBefore(
@@ -4062,14 +4075,15 @@
 
   @override
   Expression_Generator buildSelectorAccess(
-      Selector send, int operatorOffset, bool isNullAware) {
-    assert(send.name.text == send.token.lexeme,
-        "'${send.name.text}' != ${send.token.lexeme}");
-    Object result = qualifiedLookup(send.token);
-    if (send is InvocationSelector) {
-      result = _helper.finishSend(
-          result, send.typeArguments, send.arguments, send.fileOffset,
-          isTypeArgumentsInForest: send.isTypeArgumentsInForest);
+      Selector selector, int operatorOffset, bool isNullAware) {
+    assert(selector.name.text == selector.token.lexeme,
+        "'${selector.name.text}' != ${selector.token.lexeme}");
+    selector.reportNewAsSelector();
+    Object result = qualifiedLookup(selector.token);
+    if (selector is InvocationSelector) {
+      result = _helper.finishSend(result, selector.typeArguments,
+          selector.arguments as ArgumentsImpl, selector.fileOffset,
+          isTypeArgumentsInForest: selector.isTypeArgumentsInForest);
     }
     if (isNullAware) {
       result = _helper.wrapInLocatedProblem(
@@ -4154,7 +4168,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return _helper.buildUnresolvedError(_forest.createNullLiteral(offset),
         _plainNameForRead, arguments, fileOffset,
@@ -4163,7 +4177,7 @@
 
   @override
   TypeBuilder buildTypeWithResolvedArguments(
-      NullabilityBuilder nullabilityBuilder, List<UnresolvedType>? arguments,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType}) {
     Template<Message Function(String, String)> template = isUnresolved
         ? templateUnresolvedPrefixInTypeAnnotation
@@ -4174,7 +4188,8 @@
         nullabilityBuilder,
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     Message message =
         template.withArguments(prefixGenerator.token.lexeme, token.lexeme);
     _helper.libraryBuilder.addProblem(
@@ -4275,7 +4290,7 @@
 
   @override
   Expression doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return buildProblem();
   }
@@ -4288,7 +4303,7 @@
 
   @override
   TypeBuilder buildTypeWithResolvedArguments(
-      NullabilityBuilder nullabilityBuilder, List<UnresolvedType>? arguments,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType}) {
     // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
     NamedTypeBuilder result = new NamedTypeBuilder(
@@ -4296,7 +4311,8 @@
         nullabilityBuilder,
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null);
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     _helper.libraryBuilder.addProblem(message, fileOffset, noLength, _uri);
     result.bind(result.buildInvalidTypeDeclarationBuilder(
         message.withLocation(_uri, fileOffset, noLength)));
@@ -4310,7 +4326,7 @@
 
   @override
   Expression invokeConstructor(
-      List<UnresolvedType>? typeArguments,
+      List<TypeBuilder>? typeArguments,
       String name,
       Arguments arguments,
       Token nameToken,
@@ -4443,32 +4459,37 @@
 
   @override
   Expression_Generator buildSelectorAccess(
-      Selector send, int operatorOffset, bool isNullAware) {
-    Name name = send.name;
-    Arguments? arguments = send.arguments;
-    int offset = offsetForToken(send.token);
-    if (isInitializer && send is InvocationSelector) {
+      Selector selector, int operatorOffset, bool isNullAware) {
+    Name name = selector.name;
+    Arguments? arguments = selector.arguments;
+    int offset = offsetForToken(selector.token);
+    if (isInitializer && selector is InvocationSelector) {
       if (isNullAware) {
         _helper.addProblem(
             messageInvalidUseOfNullAwareAccess, operatorOffset, 2);
       }
       return buildConstructorInitializer(offset, name, arguments!);
     }
+    selector.reportNewAsSelector();
     if (inFieldInitializer && !inLateFieldInitializer && !isInitializer) {
       return buildFieldInitializerError(null);
     }
-    if (send is InvocationSelector) {
+    if (selector is InvocationSelector) {
       // Notice that 'this' or 'super' can't be null. So we can ignore the
       // value of [isNullAware].
       if (isNullAware) {
         _reportNonNullableInNullAwareWarningIfNeeded();
       }
-      return _helper.buildMethodInvocation(
-          _forest.createThisExpression(fileOffset),
-          name,
-          send.arguments,
-          offsetForToken(send.token),
-          isSuper: isSuper);
+      if (isSuper) {
+        return _helper.buildSuperInvocation(
+            name, selector.arguments, offsetForToken(selector.token));
+      } else {
+        return _helper.buildMethodInvocation(
+            _forest.createThisExpression(fileOffset),
+            name,
+            selector.arguments,
+            offsetForToken(selector.token));
+      }
     } else {
       if (isSuper) {
         Member? getter = _helper.lookupInstanceMember(name, isSuper: isSuper);
@@ -4477,7 +4498,7 @@
         return new SuperPropertyAccessGenerator(
             _helper,
             // TODO(ahe): This is not the 'super' token.
-            send.token,
+            selector.token,
             name,
             getter,
             setter);
@@ -4485,7 +4506,7 @@
         return new ThisPropertyAccessGenerator(
             _helper,
             // TODO(ahe): This is not the 'this' token.
-            send.token,
+            selector.token,
             name,
             thisOffset: fileOffset,
             isNullAware: isNullAware);
@@ -4495,12 +4516,13 @@
 
   @override
   Expression_Generator_Initializer doInvocation(
-      int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+      int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     if (isInitializer) {
       return buildConstructorInitializer(offset, new Name(""), arguments);
     } else if (isSuper) {
-      return _helper.buildProblem(messageSuperAsExpression, offset, noLength);
+      return _helper.buildSuperInvocation(Name.callName, arguments, offset,
+          isImplicitCall: true);
     } else {
       return _helper.forest.createExpressionInvocation(
           offset, _forest.createThisExpression(fileOffset), arguments);
@@ -4514,12 +4536,8 @@
     assert(isNot != null);
     if (isSuper) {
       int offset = offsetForToken(token);
-      Expression result = _helper.buildMethodInvocation(
-          _forest.createThisExpression(fileOffset),
-          equalsName,
-          _forest.createArguments(offset, <Expression>[right]),
-          offset,
-          isSuper: true);
+      Expression result = _helper.buildSuperInvocation(equalsName,
+          _forest.createArguments(offset, <Expression>[right]), offset);
       if (isNot) {
         result = _forest.createNot(offset, result);
       }
@@ -4533,12 +4551,8 @@
       Token token, Name binaryName, Expression right) {
     if (isSuper) {
       int offset = offsetForToken(token);
-      return _helper.buildMethodInvocation(
-          _forest.createThisExpression(fileOffset),
-          binaryName,
-          _forest.createArguments(offset, <Expression>[right]),
-          offset,
-          isSuper: true);
+      return _helper.buildSuperInvocation(binaryName,
+          _forest.createArguments(offset, <Expression>[right]), offset);
     }
     return super.buildBinaryOperation(token, binaryName, right);
   }
@@ -4547,12 +4561,8 @@
   Expression_Generator buildUnaryOperation(Token token, Name unaryName) {
     if (isSuper) {
       int offset = offsetForToken(token);
-      return _helper.buildMethodInvocation(
-          _forest.createThisExpression(fileOffset),
-          unaryName,
-          _forest.createArgumentsEmpty(offset),
-          offset,
-          isSuper: true);
+      return _helper.buildSuperInvocation(
+          unaryName, _forest.createArgumentsEmpty(offset), offset);
     }
     return super.buildUnaryOperation(token, unaryName);
   }
@@ -4696,7 +4706,7 @@
 
   @override
   Generator doInvocation(
-          int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
+          int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
           {bool isTypeArgumentsInForest = false}) =>
       this;
 
@@ -4741,31 +4751,32 @@
   String get targetName => '';
 
   @override
-  Expression buildSimpleRead() => expression;
+  Expression buildSimpleRead() => _createRead();
 
   @override
   Expression _createRead() =>
-      _helper.forest.createParenthesized(fileOffset, expression);
+      _helper.forest.createParenthesized(expression.fileOffset, expression);
 
   @override
   String get _debugName => "ParenthesizedExpressionGenerator";
 
   @override
   Expression_Generator buildSelectorAccess(
-      Selector send, int operatorOffset, bool isNullAware) {
-    if (send is InvocationSelector) {
-      return _helper.buildMethodInvocation(
-          _createRead(), send.name, send.arguments, offsetForToken(send.token),
+      Selector selector, int operatorOffset, bool isNullAware) {
+    selector.reportNewAsSelector();
+    if (selector is InvocationSelector) {
+      return _helper.buildMethodInvocation(_createRead(), selector.name,
+          selector.arguments, offsetForToken(selector.token),
           isNullAware: isNullAware,
-          isConstantExpression: send.isPotentiallyConstant);
+          isConstantExpression: selector.isPotentiallyConstant);
     } else {
       if (_helper.constantContext != ConstantContext.none &&
-          send.name != lengthName) {
+          selector.name != lengthName) {
         _helper.addProblem(
             messageNotAConstantExpression, fileOffset, token.length);
       }
       return PropertyAccessGenerator.make(
-          _helper, send.token, _createRead(), send.name, isNullAware);
+          _helper, selector.token, _createRead(), selector.name, isNullAware);
     }
   }
 }
@@ -4812,7 +4823,7 @@
   Expression_Generator withReceiver(Object? receiver, int operatorOffset,
       {bool isNullAware: false});
 
-  List<UnresolvedType>? get typeArguments => null;
+  List<TypeBuilder>? get typeArguments => null;
 
   bool get isTypeArgumentsInForest => true;
 
@@ -4823,6 +4834,14 @@
 
   void printOn(StringSink sink);
 
+  /// Report an error if the selector name "new" when the constructor-tearoff
+  /// feature is enabled.
+  void reportNewAsSelector() {
+    if (name.text == 'new' && _helper.enableConstructorTearOffsInLibrary) {
+      _helper.addProblem(messageNewAsSelector, fileOffset, name.text.length);
+    }
+  }
+
   @override
   String toString() {
     StringBuffer buffer = new StringBuffer();
@@ -4849,7 +4868,7 @@
   final Name name;
 
   @override
-  final List<UnresolvedType>? typeArguments;
+  final List<TypeBuilder>? typeArguments;
 
   @override
   final bool isTypeArgumentsInForest;
@@ -4876,6 +4895,7 @@
     if (receiver is Generator) {
       return receiver.buildSelectorAccess(this, operatorOffset, isNullAware);
     }
+    reportNewAsSelector();
     return _helper.buildMethodInvocation(
         _helper.toValue(receiver), name, arguments, fileOffset,
         isNullAware: isNullAware);
@@ -4918,6 +4938,7 @@
     if (receiver is Generator) {
       return receiver.buildSelectorAccess(this, operatorOffset, isNullAware);
     }
+    reportNewAsSelector();
     return PropertyAccessGenerator.make(
         _helper, token, _helper.toValue(receiver), name, isNullAware);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 96e8b7f..42258ae 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -11,9 +11,10 @@
 
 import '../builder/builder.dart';
 import '../builder/formal_parameter_builder.dart';
+import '../builder/named_type_builder.dart';
 import '../builder/prefix_builder.dart';
+import '../builder/type_builder.dart';
 import '../builder/type_declaration_builder.dart';
-import '../builder/unresolved_type.dart';
 
 import '../constant_context.dart' show ConstantContext;
 import '../fasta_codes.dart' show LocatedMessage;
@@ -40,6 +41,14 @@
 
   ConstantContext get constantContext;
 
+  bool get isDeclarationInstanceContext;
+
+  /// Whether instance type variables can be accessed.
+  ///
+  /// This is used when creating [NamedTypeBuilder]s within
+  /// [ExpressionGenerator]s.
+  InstanceTypeVariableAccessState get instanceTypeVariableAccessState;
+
   Forest get forest;
 
   Constructor? lookupConstructor(Name name, {bool isSuper: false});
@@ -54,12 +63,14 @@
 
   bool get enableConstructorTearOffsInLibrary;
 
+  bool get enableNamedArgumentsAnywhereInLibrary;
+
   Expression_Generator_Builder scopeLookup(
       Scope scope, String name, Token token,
       {bool isQualified: false, PrefixBuilder? prefix});
 
   Expression_Generator_Initializer finishSend(Object receiver,
-      List<UnresolvedType>? typeArguments, Arguments arguments, int offset,
+      List<TypeBuilder>? typeArguments, ArgumentsImpl arguments, int offset,
       {bool isTypeArgumentsInForest = false});
 
   Initializer buildInvalidInitializer(Expression expression,
@@ -96,8 +107,6 @@
   LocatedMessage? checkArgumentsForFunction(FunctionNode function,
       Arguments arguments, int offset, List<TypeParameter> typeParameters);
 
-  StaticGet makeStaticGet(Member readTarget, Token token);
-
   Expression wrapInDeferredCheck(
       Expression expression, PrefixBuilder prefix, int charOffset);
 
@@ -105,9 +114,12 @@
 
   Expression buildMethodInvocation(
       Expression receiver, Name name, Arguments arguments, int offset,
+      {bool isConstantExpression: false, bool isNullAware: false});
+
+  Expression buildSuperInvocation(Name name, Arguments arguments, int offset,
       {bool isConstantExpression: false,
       bool isNullAware: false,
-      bool isSuper: false});
+      bool isImplicitCall: false});
 
   Expression buildConstructorInvocation(
       TypeDeclarationBuilder type,
@@ -115,14 +127,14 @@
       Token nameLastToken,
       Arguments? arguments,
       String name,
-      List<UnresolvedType>? typeArguments,
+      List<TypeBuilder>? typeArguments,
       int charOffset,
       Constness constness,
       {bool isTypeArgumentsInForest = false,
       TypeDeclarationBuilder? typeAliasBuilder,
       required UnresolvedKind unresolvedKind});
 
-  UnresolvedType validateTypeVariableUse(UnresolvedType unresolved,
+  TypeBuilder validateTypeVariableUse(TypeBuilder typeBuilder,
       {required bool allowPotentiallyConstantType});
 
   void addProblemErrorIfConst(Message message, int charOffset, int length);
@@ -145,13 +157,13 @@
   Expression evaluateArgumentsBefore(
       Arguments arguments, Expression expression);
 
-  DartType buildDartType(UnresolvedType unresolvedType,
+  DartType buildDartType(TypeBuilder typeBuilder,
       {required bool allowPotentiallyConstantType});
 
-  DartType buildTypeLiteralDartType(UnresolvedType unresolvedType,
+  DartType buildTypeLiteralDartType(TypeBuilder typeBuilder,
       {required bool allowPotentiallyConstantType});
 
-  List<DartType> buildDartTypeArguments(List<UnresolvedType>? unresolvedTypes,
+  List<DartType> buildDartTypeArguments(List<TypeBuilder>? typeArguments,
       {required bool allowPotentiallyConstantType});
 
   void reportDuplicatedDeclaration(
@@ -194,7 +206,7 @@
   /// creating the instantiation and invocation.
   Expression createInstantiationAndInvocation(
       Expression Function() receiverFunction,
-      List<UnresolvedType>? typeArguments,
+      List<TypeBuilder>? typeArguments,
       String className,
       String constructorName,
       Arguments arguments,
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 4cc99a7..9ce125d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -27,19 +27,25 @@
 class Forest {
   const Forest();
 
-  Arguments createArguments(int fileOffset, List<Expression> positional,
+  ArgumentsImpl createArguments(int fileOffset, List<Expression> positional,
       {List<DartType>? types,
       List<NamedExpression>? named,
-      bool hasExplicitTypeArguments = true}) {
+      bool hasExplicitTypeArguments = true,
+      List<Object?>? argumentsOriginalOrder}) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
     if (!hasExplicitTypeArguments) {
-      ArgumentsImpl arguments =
-          new ArgumentsImpl(positional, types: <DartType>[], named: named);
+      ArgumentsImpl arguments = new ArgumentsImpl(positional,
+          types: <DartType>[],
+          named: named,
+          argumentsOriginalOrder: argumentsOriginalOrder);
       arguments.types.addAll(types!);
       return arguments;
     } else {
-      return new ArgumentsImpl(positional, types: types, named: named)
+      return new ArgumentsImpl(positional,
+          types: types,
+          named: named,
+          argumentsOriginalOrder: argumentsOriginalOrder)
         ..fileOffset = fileOffset;
     }
   }
@@ -53,7 +59,8 @@
       int? extensionTypeArgumentOffset,
       List<DartType> typeArguments = const <DartType>[],
       List<Expression> positionalArguments = const <Expression>[],
-      List<NamedExpression> namedArguments = const <NamedExpression>[]}) {
+      List<NamedExpression> namedArguments = const <NamedExpression>[],
+      List<Object?>? argumentsOriginalOrder}) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
     return new ArgumentsImpl.forExtensionMethod(
@@ -62,11 +69,12 @@
         extensionTypeArgumentOffset: extensionTypeArgumentOffset,
         typeArguments: typeArguments,
         positionalArguments: positionalArguments,
-        namedArguments: namedArguments)
+        namedArguments: namedArguments,
+        argumentsOriginalOrder: argumentsOriginalOrder)
       ..fileOffset = fileOffset;
   }
 
-  Arguments createArgumentsEmpty(int fileOffset) {
+  ArgumentsImpl createArgumentsEmpty(int fileOffset) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
     return createArguments(fileOffset, <Expression>[]);
@@ -825,24 +833,36 @@
     return new ParenthesizedExpression(expression)..fileOffset = fileOffset;
   }
 
-  ConstructorTearOff createConstructorTearOff(
-      int fileOffset, Constructor constructor) {
+  ConstructorTearOff createConstructorTearOff(int fileOffset, Member target) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
-    return new ConstructorTearOff(constructor)..fileOffset = fileOffset;
+    assert(target is Constructor || (target is Procedure && target.isFactory),
+        "Unexpected constructor tear off target: $target");
+    return new ConstructorTearOff(target)..fileOffset = fileOffset;
   }
 
   StaticTearOff createStaticTearOff(int fileOffset, Procedure procedure) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
-    assert(!procedure.isRedirectingFactory);
+    assert(procedure.kind == ProcedureKind.Method,
+        "Unexpected static tear off target: $procedure");
+    assert(!procedure.isRedirectingFactory,
+        "Unexpected static tear off target: $procedure");
     return new StaticTearOff(procedure)..fileOffset = fileOffset;
   }
 
+  StaticGet createStaticGet(int fileOffset, Member target) {
+    // ignore: unnecessary_null_comparison
+    assert(fileOffset != null);
+    assert(target is Field || (target is Procedure && target.isGetter));
+    return new StaticGet(target)..fileOffset = fileOffset;
+  }
+
   RedirectingFactoryTearOff createRedirectingFactoryTearOff(
       int fileOffset, Procedure procedure) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
+    assert(procedure.isRedirectingFactory);
     return new RedirectingFactoryTearOff(procedure)..fileOffset = fileOffset;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
index 2ae41d0..f05f378 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -167,6 +167,10 @@
       superTarget = superTarget.memberSignatureOrigin ?? superTarget;
     }
     procedure.isAbstract = false;
+    FunctionType signatureType = procedure.function
+        .computeFunctionType(procedure.enclosingLibrary.nonNullable);
+    bool isForwardingSemiStub = isForwardingStub && !procedure.isSynthetic;
+    bool needsSignatureType = false;
     Expression superCall;
     // ignore: unnecessary_null_comparison
     assert(superTarget != null,
@@ -197,15 +201,22 @@
           Expression expression = new VariableGet(parameter)
             ..fileOffset = fileOffset;
           DartType superParameterType = type.positionalParameters[index];
-          if (!_combinedMemberSignature.hierarchy.types.isSubtypeOf(
-              parameter.type,
-              superParameterType,
-              _combinedMemberSignature
-                      .classBuilder.library.isNonNullableByDefault
-                  ? SubtypeCheckMode.withNullabilities
-                  : SubtypeCheckMode.ignoringNullabilities)) {
-            expression = new AsExpression(expression, superParameterType)
-              ..fileOffset = fileOffset;
+          if (isForwardingSemiStub) {
+            if (parameter.type != superParameterType) {
+              parameter.type = superParameterType;
+              needsSignatureType = true;
+            }
+          } else {
+            if (!_combinedMemberSignature.hierarchy.types.isSubtypeOf(
+                parameter.type,
+                superParameterType,
+                _combinedMemberSignature
+                        .classBuilder.library.isNonNullableByDefault
+                    ? SubtypeCheckMode.withNullabilities
+                    : SubtypeCheckMode.ignoringNullabilities)) {
+              expression = new AsExpression(expression, superParameterType)
+                ..fileOffset = fileOffset;
+            }
           }
           return expression;
         }, growable: true);
@@ -219,15 +230,22 @@
               .singleWhere(
                   (NamedType namedType) => namedType.name == parameter.name)
               .type;
-          if (!_combinedMemberSignature.hierarchy.types.isSubtypeOf(
-              parameter.type,
-              superParameterType,
-              _combinedMemberSignature
-                      .classBuilder.library.isNonNullableByDefault
-                  ? SubtypeCheckMode.withNullabilities
-                  : SubtypeCheckMode.ignoringNullabilities)) {
-            expression = new AsExpression(expression, superParameterType)
-              ..fileOffset = fileOffset;
+          if (isForwardingSemiStub) {
+            if (parameter.type != superParameterType) {
+              parameter.type = superParameterType;
+              needsSignatureType = true;
+            }
+          } else {
+            if (!_combinedMemberSignature.hierarchy.types.isSubtypeOf(
+                parameter.type,
+                superParameterType,
+                _combinedMemberSignature
+                        .classBuilder.library.isNonNullableByDefault
+                    ? SubtypeCheckMode.withNullabilities
+                    : SubtypeCheckMode.ignoringNullabilities)) {
+              expression = new AsExpression(expression, superParameterType)
+                ..fileOffset = fileOffset;
+            }
           }
           return new NamedExpression(parameter.name!, expression);
         }, growable: true);
@@ -251,14 +269,22 @@
         int fileOffset = parameter.fileOffset;
         Expression expression = new VariableGet(parameter)
           ..fileOffset = fileOffset;
-        if (!_combinedMemberSignature.hierarchy.types.isSubtypeOf(
-            parameter.type,
-            superParameterType,
-            _combinedMemberSignature.classBuilder.library.isNonNullableByDefault
-                ? SubtypeCheckMode.withNullabilities
-                : SubtypeCheckMode.ignoringNullabilities)) {
-          expression = new AsExpression(expression, superParameterType)
-            ..fileOffset = fileOffset;
+        if (isForwardingSemiStub) {
+          if (parameter.type != superParameterType) {
+            parameter.type = superParameterType;
+            needsSignatureType = true;
+          }
+        } else {
+          if (!_combinedMemberSignature.hierarchy.types.isSubtypeOf(
+              parameter.type,
+              superParameterType,
+              _combinedMemberSignature
+                      .classBuilder.library.isNonNullableByDefault
+                  ? SubtypeCheckMode.withNullabilities
+                  : SubtypeCheckMode.ignoringNullabilities)) {
+            expression = new AsExpression(expression, superParameterType)
+              ..fileOffset = fileOffset;
+          }
         }
         superCall = new SuperPropertySet(name, expression, superTarget);
         break;
@@ -273,5 +299,8 @@
         ? ProcedureStubKind.ConcreteForwardingStub
         : ProcedureStubKind.ConcreteMixinStub;
     procedure.stubTarget = superTarget;
+    if (needsSignatureType) {
+      procedure.signatureType = signatureType;
+    }
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 9956d82..87a0d06 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -42,7 +42,7 @@
     implements
         ExpressionVisitor1<ExpressionInferenceResult, DartType>,
         StatementVisitor<StatementInferenceResult>,
-        InitializerVisitor<void> {
+        InitializerVisitor<InitializerInferenceResult> {
   final TypeInferrerImpl inferrer;
 
   Class? mapEntryClass;
@@ -326,23 +326,23 @@
     return _unhandledStatement(node);
   }
 
-  void _unhandledInitializer(Initializer node) {
+  Never _unhandledInitializer(Initializer node) {
     unhandled("${node.runtimeType}", "InferenceVisitor", node.fileOffset,
         node.location!.file);
   }
 
   @override
-  void defaultInitializer(Initializer node) {
+  InitializerInferenceResult defaultInitializer(Initializer node) {
     _unhandledInitializer(node);
   }
 
   @override
-  void visitInvalidInitializer(InvalidInitializer node) {
+  InitializerInferenceResult visitInvalidInitializer(InvalidInitializer node) {
     _unhandledInitializer(node);
   }
 
   @override
-  void visitLocalInitializer(LocalInitializer node) {
+  InitializerInferenceResult visitLocalInitializer(LocalInitializer node) {
     _unhandledInitializer(node);
   }
 
@@ -364,18 +364,72 @@
     ExpressionInferenceResult operandResult = inferrer.inferExpression(
         node.expression, const UnknownType(), true,
         isVoidAllowed: true);
-    node.expression = operandResult.expression..parent = node;
+    Expression operand = operandResult.expression;
     DartType operandType = operandResult.inferredType;
+    if (operandType is! FunctionType) {
+      ObjectAccessTarget callMember = inferrer.findInterfaceMember(
+          operandType, callName, operand.fileOffset,
+          callSiteAccessKind: CallSiteAccessKind.getterInvocation,
+          includeExtensionMethods: true);
+      switch (callMember.kind) {
+        case ObjectAccessTargetKind.instanceMember:
+          Member? target = callMember.member;
+          if (target is Procedure && target.kind == ProcedureKind.Method) {
+            operandType = inferrer.getGetterType(callMember, operandType);
+            operand = new InstanceTearOff(
+                InstanceAccessKind.Instance, operand, callName,
+                interfaceTarget: target, resultType: operandType)
+              ..fileOffset = operand.fileOffset;
+          }
+          break;
+        case ObjectAccessTargetKind.extensionMember:
+          if (callMember.tearoffTarget != null &&
+              callMember.extensionMethodKind == ProcedureKind.Method) {
+            operandType = inferrer.getGetterType(callMember, operandType);
+            operand = new StaticInvocation(
+                callMember.tearoffTarget as Procedure,
+                new Arguments(<Expression>[operand],
+                    types: callMember.inferredExtensionTypeArguments)
+                  ..fileOffset = operand.fileOffset)
+              ..fileOffset = operand.fileOffset;
+          }
+          break;
+        case ObjectAccessTargetKind.nullableInstanceMember:
+        case ObjectAccessTargetKind.objectMember:
+        case ObjectAccessTargetKind.nullableCallFunction:
+        case ObjectAccessTargetKind.nullableExtensionMember:
+        case ObjectAccessTargetKind.dynamic:
+        case ObjectAccessTargetKind.never:
+        case ObjectAccessTargetKind.invalid:
+        case ObjectAccessTargetKind.missing:
+        case ObjectAccessTargetKind.ambiguous:
+        case ObjectAccessTargetKind.callFunction:
+          break;
+      }
+    }
+    node.expression = operand..parent = node;
     Expression result = node;
     DartType resultType = const InvalidType();
     if (operandType is FunctionType) {
       if (operandType.typeParameters.length == node.typeArguments.length) {
-        inferrer.checkBoundsInInstantiation(
-            operandType, node.typeArguments, node.fileOffset,
-            inferred: false);
-        resultType = Substitution.fromPairs(
-                operandType.typeParameters, node.typeArguments)
-            .substituteType(operandType.withoutTypeParameters);
+        if (!inferrer.isTopLevel) {
+          inferrer.checkBoundsInInstantiation(
+              operandType, node.typeArguments, node.fileOffset,
+              inferred: false);
+        }
+        if (operandType.isPotentiallyNullable) {
+          if (!inferrer.isTopLevel) {
+            result = inferrer.helper!.buildProblem(
+                templateInstantiationNullableGenericFunctionType.withArguments(
+                    operandType, inferrer.isNonNullableByDefault),
+                node.fileOffset,
+                noLength);
+          }
+        } else {
+          resultType = Substitution.fromPairs(
+                  operandType.typeParameters, node.typeArguments)
+              .substituteType(operandType.withoutTypeParameters);
+        }
       } else {
         if (!inferrer.isTopLevel) {
           if (operandType.typeParameters.isEmpty) {
@@ -434,11 +488,12 @@
   }
 
   @override
-  void visitAssertInitializer(AssertInitializer node) {
+  InitializerInferenceResult visitAssertInitializer(AssertInitializer node) {
     StatementInferenceResult result = inferrer.inferStatement(node.statement);
     if (result.hasChanged) {
       node.statement = (result.statement as AssertStatement)..parent = node;
     }
+    return const SuccessfulInitializerInferenceResult();
   }
 
   @override
@@ -640,8 +695,8 @@
     bool hadExplicitTypeArguments = hasExplicitTypeArguments(node.arguments);
     FunctionType functionType = node.target.function
         .computeThisFunctionType(inferrer.library.nonNullable);
-    InvocationInferenceResult result = inferrer.inferInvocation(
-        typeContext, node.fileOffset, functionType, node.arguments,
+    InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
+        node.fileOffset, functionType, node.arguments as ArgumentsImpl,
         isConst: node.isConst, staticTarget: node.target);
     if (!inferrer.isTopLevel) {
       SourceLibraryBuilder library = inferrer.library;
@@ -670,8 +725,8 @@
         : new FunctionType(
             [], const DynamicType(), inferrer.library.nonNullable);
     TypeArgumentsInfo typeArgumentsInfo = getTypeArgumentsInfo(node.arguments);
-    InvocationInferenceResult result = inferrer.inferInvocation(
-        typeContext, node.fileOffset, calleeType, node.arguments,
+    InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
+        node.fileOffset, calleeType, node.arguments as ArgumentsImpl,
         staticTarget: node.target);
     StaticInvocation replacement =
         new StaticInvocation(node.target, node.arguments);
@@ -932,8 +987,8 @@
     FunctionType functionType = node.target.function
         .computeThisFunctionType(inferrer.library.nonNullable);
 
-    InvocationInferenceResult result = inferrer.inferInvocation(
-        typeContext, node.fileOffset, functionType, node.arguments,
+    InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
+        node.fileOffset, functionType, node.arguments as ArgumentsImpl,
         isConst: node.isConst, staticTarget: node.target);
     node.hasBeenInferred = true;
     Expression resultNode = node;
@@ -963,8 +1018,8 @@
         .computeAliasedConstructorFunctionType(
             typedef, inferrer.library.library);
     calleeType = replaceReturnType(calleeType, calleeType.returnType.unalias);
-    InvocationInferenceResult result = inferrer.inferInvocation(
-        typeContext, node.fileOffset, calleeType, node.arguments,
+    InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
+        node.fileOffset, calleeType, node.arguments as ArgumentsImpl,
         isConst: node.isConst, staticTarget: node.target);
     node.hasBeenInferred = true;
     Expression resultNode = node;
@@ -987,8 +1042,8 @@
     FunctionType calleeType = node.target.function
         .computeAliasedFactoryFunctionType(typedef, inferrer.library.library);
     calleeType = replaceReturnType(calleeType, calleeType.returnType.unalias);
-    InvocationInferenceResult result = inferrer.inferInvocation(
-        typeContext, node.fileOffset, calleeType, node.arguments,
+    InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
+        node.fileOffset, calleeType, node.arguments as ArgumentsImpl,
         isConst: node.isConst, staticTarget: node.target);
     node.hasBeenInferred = true;
     Expression resultNode = node;
@@ -1005,13 +1060,14 @@
   }
 
   @override
-  void visitFieldInitializer(FieldInitializer node) {
+  InitializerInferenceResult visitFieldInitializer(FieldInitializer node) {
     ExpressionInferenceResult initializerResult =
         inferrer.inferExpression(node.value, node.field.type, true);
     Expression initializer = inferrer.ensureAssignableResult(
         node.field.type, initializerResult,
         fileOffset: node.fileOffset);
     node.value = initializer..parent = node;
+    return const SuccessfulInitializerInferenceResult();
   }
 
   ForInResult handleForInDeclaringVariable(
@@ -1356,7 +1412,7 @@
     return new ExpressionInferenceResult(inferredType, node);
   }
 
-  void visitInvalidSuperInitializerJudgment(
+  InitializerInferenceResult visitInvalidSuperInitializerJudgment(
       InvalidSuperInitializerJudgment node) {
     Substitution substitution = Substitution.fromSupertype(
         inferrer.classHierarchy.getClassAsInstanceOf(
@@ -1366,9 +1422,12 @@
             .computeThisFunctionType(inferrer.library.nonNullable)
             .withoutTypeParameters) as FunctionType,
         inferrer.thisType!);
-    inferrer.inferInvocation(const UnknownType(), node.fileOffset, functionType,
-        node.argumentsJudgment,
-        skipTypeArgumentInference: true);
+    InvocationInferenceResult invocationInferenceResult =
+        inferrer.inferInvocation(const UnknownType(), node.fileOffset,
+            functionType, node.argumentsJudgment,
+            skipTypeArgumentInference: true);
+    return new InitializerInferenceResult.fromInvocationInferenceResult(
+        invocationInferenceResult);
   }
 
   ExpressionInferenceResult visitIfNullExpression(
@@ -1379,7 +1438,7 @@
         node.left, inferrer.computeNullable(typeContext), true,
         isVoidAllowed: false);
     reportNonNullableInNullAwareWarningIfNeeded(
-        lhsResult.inferredType, "??", node.left.fileOffset);
+        lhsResult.inferredType, "??", lhsResult.expression.fileOffset);
 
     // This ends any shorting in `node.left`.
     Expression left = lhsResult.expression;
@@ -1512,19 +1571,23 @@
     return new ExpressionInferenceResult(inferredType, replacement);
   }
 
-  void visitShadowInvalidInitializer(ShadowInvalidInitializer node) {
+  InitializerInferenceResult visitShadowInvalidInitializer(
+      ShadowInvalidInitializer node) {
     ExpressionInferenceResult initializerResult = inferrer.inferExpression(
         node.variable.initializer!, const UnknownType(), !inferrer.isTopLevel,
         isVoidAllowed: false);
     node.variable.initializer = initializerResult.expression
       ..parent = node.variable;
+    return const SuccessfulInitializerInferenceResult();
   }
 
-  void visitShadowInvalidFieldInitializer(ShadowInvalidFieldInitializer node) {
+  InitializerInferenceResult visitShadowInvalidFieldInitializer(
+      ShadowInvalidFieldInitializer node) {
     ExpressionInferenceResult initializerResult = inferrer.inferExpression(
         node.value, node.field.type, !inferrer.isTopLevel,
         isVoidAllowed: false);
     node.value = initializerResult.expression..parent = node;
+    return const SuccessfulInitializerInferenceResult();
   }
 
   @override
@@ -2827,9 +2890,16 @@
     Link<NullAwareGuard> nullAwareGuards = result.nullAwareGuards;
     Expression receiver = result.nullAwareAction;
     DartType receiverType = result.nullAwareActionType;
-    return inferrer.inferMethodInvocation(node.fileOffset, nullAwareGuards,
-        receiver, receiverType, node.name, node.arguments, typeContext,
-        isExpressionInvocation: false, isImplicitCall: false);
+    return inferrer.inferMethodInvocation(
+        node.fileOffset,
+        nullAwareGuards,
+        receiver,
+        receiverType,
+        node.name,
+        node.arguments as ArgumentsImpl,
+        typeContext,
+        isExpressionInvocation: false,
+        isImplicitCall: false);
   }
 
   ExpressionInferenceResult visitExpressionInvocation(
@@ -2839,9 +2909,16 @@
     Link<NullAwareGuard> nullAwareGuards = result.nullAwareGuards;
     Expression receiver = result.nullAwareAction;
     DartType receiverType = result.nullAwareActionType;
-    return inferrer.inferMethodInvocation(node.fileOffset, nullAwareGuards,
-        receiver, receiverType, callName, node.arguments, typeContext,
-        isExpressionInvocation: true, isImplicitCall: true);
+    return inferrer.inferMethodInvocation(
+        node.fileOffset,
+        nullAwareGuards,
+        receiver,
+        receiverType,
+        callName,
+        node.arguments as ArgumentsImpl,
+        typeContext,
+        isExpressionInvocation: true,
+        isImplicitCall: true);
   }
 
   ExpressionInferenceResult visitNamedFunctionExpressionJudgment(
@@ -5782,7 +5859,8 @@
   }
 
   @override
-  void visitRedirectingInitializer(RedirectingInitializer node) {
+  InitializerInferenceResult visitRedirectingInitializer(
+      RedirectingInitializer node) {
     inferrer.inferConstructorParameterTypes(node.target);
     List<TypeParameter> classTypeParameters =
         node.target.enclosingClass.typeParameters;
@@ -5798,11 +5876,17 @@
             .computeThisFunctionType(inferrer.library.nonNullable),
         inferrer.coreTypes.thisInterfaceType(
             node.target.enclosingClass, inferrer.library.nonNullable));
-    inferrer.inferInvocation(
-        const UnknownType(), node.fileOffset, functionType, node.arguments,
-        skipTypeArgumentInference: true, staticTarget: node.target);
+    InvocationInferenceResult inferenceResult = inferrer.inferInvocation(
+        const UnknownType(),
+        node.fileOffset,
+        functionType,
+        node.arguments as ArgumentsImpl,
+        skipTypeArgumentInference: true,
+        staticTarget: node.target);
     ArgumentsImpl.removeNonInferrableArgumentTypes(
         node.arguments as ArgumentsImpl);
+    return new InitializerInferenceResult.fromInvocationInferenceResult(
+        inferenceResult);
   }
 
   @override
@@ -5974,8 +6058,8 @@
         : new FunctionType(
             [], const DynamicType(), inferrer.library.nonNullable);
     TypeArgumentsInfo typeArgumentsInfo = getTypeArgumentsInfo(node.arguments);
-    InvocationInferenceResult result = inferrer.inferInvocation(
-        typeContext, node.fileOffset, calleeType, node.arguments,
+    InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
+        node.fileOffset, calleeType, node.arguments as ArgumentsImpl,
         staticTarget: node.target);
     // ignore: unnecessary_null_comparison
     if (!inferrer.isTopLevel && node.target != null) {
@@ -6012,7 +6096,7 @@
   }
 
   @override
-  void visitSuperInitializer(SuperInitializer node) {
+  InitializerInferenceResult visitSuperInitializer(SuperInitializer node) {
     inferrer.inferConstructorParameterTypes(node.target);
     Substitution substitution = Substitution.fromSupertype(
         inferrer.classHierarchy.getClassAsInstanceOf(
@@ -6022,9 +6106,15 @@
             .computeThisFunctionType(inferrer.library.nonNullable)
             .withoutTypeParameters) as FunctionType,
         inferrer.thisType!);
-    inferrer.inferInvocation(
-        const UnknownType(), node.fileOffset, functionType, node.arguments,
-        skipTypeArgumentInference: true, staticTarget: node.target);
+    InvocationInferenceResult inferenceResult = inferrer.inferInvocation(
+        const UnknownType(),
+        node.fileOffset,
+        functionType,
+        node.arguments as ArgumentsImpl,
+        skipTypeArgumentInference: true,
+        staticTarget: node.target);
+    return new InitializerInferenceResult.fromInvocationInferenceResult(
+        inferenceResult);
   }
 
   @override
@@ -6770,8 +6860,8 @@
     if (node.arguments != null) {
       FunctionType calleeType =
           new FunctionType([], inferredType, inferrer.library.nonNullable);
-      inferrer.inferInvocation(
-          typeContext, node.fileOffset, calleeType, node.arguments!);
+      inferrer.inferInvocation(typeContext, node.fileOffset, calleeType,
+          node.arguments! as ArgumentsImpl);
     }
     return new ExpressionInferenceResult(inferredType, node);
   }
@@ -6783,7 +6873,7 @@
         inferrer.typeSchemaEnvironment
             .futureType(const DynamicType(), inferrer.library.nonNullable),
         inferrer.library.nonNullable);
-    Expression replacement = new StaticGet(node.target)
+    Expression replacement = new StaticTearOff(node.target)
       ..fileOffset = node.fileOffset;
     return new ExpressionInferenceResult(inferredType, replacement);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index b587d91..7239b43 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -491,6 +491,8 @@
 
   int _explicitTypeArgumentCount;
 
+  List<Object?>? argumentsOriginalOrder;
+
   ArgumentsImpl.internal(
       {required List<Expression> positional,
       required List<DartType>? types,
@@ -504,10 +506,13 @@
             explicitExtensionTypeArgumentCount,
         this._extensionTypeArgumentOffset = extensionTypeArgumentOffset,
         this._explicitTypeArgumentCount = explicitTypeArgumentCount,
+        this.argumentsOriginalOrder = null,
         super(positional, types: types, named: named);
 
   ArgumentsImpl(List<Expression> positional,
-      {List<DartType>? types, List<NamedExpression>? named})
+      {List<DartType>? types,
+      List<NamedExpression>? named,
+      this.argumentsOriginalOrder})
       : _explicitTypeArgumentCount = types?.length ?? 0,
         _extensionTypeParameterCount = 0,
         _explicitExtensionTypeArgumentCount = 0,
@@ -521,7 +526,8 @@
       int? extensionTypeArgumentOffset,
       List<DartType> typeArguments = const <DartType>[],
       List<Expression> positionalArguments = const <Expression>[],
-      List<NamedExpression> namedArguments = const <NamedExpression>[]})
+      List<NamedExpression> namedArguments = const <NamedExpression>[],
+      this.argumentsOriginalOrder})
       : _extensionTypeParameterCount = extensionTypeParameterCount,
         _explicitExtensionTypeArgumentCount = extensionTypeArguments.length,
         _explicitTypeArgumentCount = typeArguments.length,
@@ -885,7 +891,7 @@
       : super(variable);
 
   @override
-  void acceptInference(InferenceVisitor visitor) {
+  InitializerInferenceResult acceptInference(InferenceVisitor visitor) {
     return visitor.visitInvalidSuperInitializerJudgment(this);
   }
 
@@ -976,7 +982,7 @@
 abstract class InitializerJudgment implements Initializer {
   /// Performs type inference for whatever concrete type of
   /// [InitializerJudgment] this is.
-  void acceptInference(InferenceVisitor visitor);
+  InitializerInferenceResult acceptInference(InferenceVisitor visitor);
 }
 
 Expression? checkWebIntLiteralsErrorIfUnexact(
@@ -1083,7 +1089,7 @@
   ShadowInvalidInitializer(VariableDeclaration variable) : super(variable);
 
   @override
-  void acceptInference(InferenceVisitor visitor) {
+  InitializerInferenceResult acceptInference(InferenceVisitor visitor) {
     return visitor.visitShadowInvalidInitializer(this);
   }
 
@@ -1108,7 +1114,7 @@
   }
 
   @override
-  void acceptInference(InferenceVisitor visitor) {
+  InitializerInferenceResult acceptInference(InferenceVisitor visitor) {
     return visitor.visitShadowInvalidFieldInitializer(this);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
index 67be0a6..af210a0 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
@@ -20,9 +20,9 @@
   @override
   void report(LocatedMessage message, [List<LocatedMessage>? context]) {
     // Try to find library.
-    LibraryBuilder? builder = loader.builders[message.uri];
+    LibraryBuilder? builder = loader.lookupLibraryBuilder(message.uri!);
     if (builder == null) {
-      for (LibraryBuilder candidate in loader.builders.values) {
+      for (LibraryBuilder candidate in loader.libraryBuilders) {
         if (candidate.fileUri == message.uri) {
           // Found it.
           builder = candidate;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
index bb99b32..bf49dae 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
@@ -53,7 +53,7 @@
             new CloneVisitorNotMembers(typeSubstitution: _typeSubstitution);
         clonedParameter.initializer = cloner!
             .clone(originalParameter.initializer!)
-              ..parent = clonedParameter;
+          ..parent = clonedParameter;
       }
     }
 
@@ -116,8 +116,10 @@
   final Member synthesized;
   final Member original;
   final Substitution substitution;
+  final bool copyReturnType;
 
-  TypeDependency(this.synthesized, this.original, this.substitution);
+  TypeDependency(this.synthesized, this.original, this.substitution,
+      {required this.copyReturnType});
 
   void copyInferred() {
     for (int i = 0; i < original.function!.positionalParameters.length; i++) {
@@ -136,7 +138,9 @@
       synthesizedParameter.type =
           substitution.substituteType(originalParameter.type);
     }
-    synthesized.function!.returnType =
-        substitution.substituteType(original.function!.returnType);
+    if (copyReturnType) {
+      synthesized.function!.returnType =
+          substitution.substituteType(original.function!.returnType);
+    }
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 296cbc5..9e0e011 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -13,7 +13,7 @@
     show ChangedStructureNotifier;
 import 'package:kernel/target/targets.dart' show DiagnosticReporter, Target;
 import 'package:kernel/transformations/value_class.dart' as valueClass;
-import 'package:kernel/type_algebra.dart' show substitute;
+import 'package:kernel/type_algebra.dart' show Substitution;
 import 'package:kernel/type_environment.dart' show TypeEnvironment;
 import 'package:package_config/package_config.dart' hide LanguageVersion;
 
@@ -40,7 +40,6 @@
 import '../builder/void_type_declaration_builder.dart';
 import '../compiler_context.dart' show CompilerContext;
 import '../crash.dart' show withCrashReporting;
-import '../dill/dill_library_builder.dart' show DillLibraryBuilder;
 import '../dill/dill_member_builder.dart' show DillMemberBuilder;
 import '../dill/dill_target.dart' show DillTarget;
 import '../kernel/constructor_tearoff_lowering.dart';
@@ -50,16 +49,11 @@
         FormattedMessage,
         LocatedMessage,
         Message,
-        messageAgnosticWithStrongDillLibrary,
-        messageAgnosticWithWeakDillLibrary,
         messageConstConstructorLateFinalFieldCause,
         messageConstConstructorLateFinalFieldError,
         messageConstConstructorNonFinalField,
         messageConstConstructorNonFinalFieldCause,
         messageConstConstructorRedirectionToNonConst,
-        messageInvalidNnbdDillLibrary,
-        messageStrongWithWeakDillLibrary,
-        messageWeakWithStrongDillLibrary,
         noLength,
         templateFieldNonNullableNotInitializedByConstructorError,
         templateFieldNonNullableWithoutInitializerError,
@@ -72,8 +66,7 @@
 import '../scope.dart' show AmbiguousBuilder;
 import '../source/name_scheme.dart';
 import '../source/source_class_builder.dart' show SourceClassBuilder;
-import '../source/source_library_builder.dart'
-    show LanguageVersion, SourceLibraryBuilder;
+import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 import '../source/source_loader.dart' show SourceLoader;
 import '../target_implementation.dart' show TargetImplementation;
 import '../ticker.dart' show Ticker;
@@ -112,14 +105,16 @@
       const NullabilityBuilder.nullable(),
       /* arguments = */ null,
       /* fileUri = */ null,
-      /* charOffset = */ null);
+      /* charOffset = */ null,
+      instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   final NamedTypeBuilder objectType = new NamedTypeBuilder(
       "Object",
       const NullabilityBuilder.omitted(),
       /* arguments = */ null,
       /* fileUri = */ null,
-      /* charOffset = */ null);
+      /* charOffset = */ null,
+      instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   // Null is always nullable.
   // TODO(johnniwinther): This could (maybe) use a FixedTypeBuilder when we
@@ -129,7 +124,8 @@
       const NullabilityBuilder.nullable(),
       /* arguments = */ null,
       /* fileUri = */ null,
-      /* charOffset = */ null);
+      /* charOffset = */ null,
+      instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   // TODO(johnniwinther): Why isn't this using a FixedTypeBuilder?
   final TypeBuilder bottomType = new NamedTypeBuilder(
@@ -137,7 +133,8 @@
       const NullabilityBuilder.omitted(),
       /* arguments = */ null,
       /* fileUri = */ null,
-      /* charOffset = */ null);
+      /* charOffset = */ null,
+      instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   final bool excludeSource = !CompilerContext.current.options.embedSourceText;
 
@@ -364,94 +361,10 @@
     return entryPoint;
   }
 
-  /// Creates a [LibraryBuilder] corresponding to [uri], if one doesn't exist
-  /// already.
-  ///
-  /// [fileUri] must not be null and is a URI that can be passed to FileSystem
-  /// to locate the corresponding file.
-  ///
-  /// [origin] is non-null if the created library is a patch to [origin].
-  ///
-  /// [packageUri] is the base uri for the package which the library belongs to.
-  /// For instance 'package:foo'.
-  ///
-  /// This is used to associate libraries in for instance the 'bin' and 'test'
-  /// folders of a package source with the package uri of the 'lib' folder.
-  ///
-  /// If the [packageUri] is `null` the package association of this library is
-  /// based on its [importUri].
-  ///
-  /// For libraries with a 'package:' [importUri], the package path must match
-  /// the path in the [importUri]. For libraries with a 'dart:' [importUri] the
-  /// [packageUri] must be `null`.
-  ///
-  /// [packageLanguageVersion] is the language version defined by the package
-  /// which the library belongs to, or the current sdk version if the library
-  /// doesn't belong to a package.
-  LibraryBuilder createLibraryBuilder(
-      Uri uri,
-      Uri fileUri,
-      Uri? packageUri,
-      LanguageVersion packageLanguageVersion,
-      SourceLibraryBuilder? origin,
-      Library? referencesFrom,
-      bool? referenceIsPartOwner) {
-    if (dillTarget.isLoaded) {
-      DillLibraryBuilder? builder = dillTarget.loader.builders[uri];
-      if (builder != null) {
-        if (!builder.isNonNullableByDefault &&
-            (loader.nnbdMode == NnbdMode.Strong ||
-                loader.nnbdMode == NnbdMode.Agnostic)) {
-          loader.registerStrongOptOutLibrary(builder);
-        } else {
-          NonNullableByDefaultCompiledMode libraryMode =
-              builder.library.nonNullableByDefaultCompiledMode;
-          if (libraryMode == NonNullableByDefaultCompiledMode.Invalid) {
-            loader.registerNnbdMismatchLibrary(
-                builder, messageInvalidNnbdDillLibrary);
-          } else {
-            switch (loader.nnbdMode) {
-              case NnbdMode.Weak:
-                if (libraryMode != NonNullableByDefaultCompiledMode.Agnostic &&
-                    libraryMode != NonNullableByDefaultCompiledMode.Weak) {
-                  loader.registerNnbdMismatchLibrary(
-                      builder, messageWeakWithStrongDillLibrary);
-                }
-                break;
-              case NnbdMode.Strong:
-                if (libraryMode != NonNullableByDefaultCompiledMode.Agnostic &&
-                    libraryMode != NonNullableByDefaultCompiledMode.Strong) {
-                  loader.registerNnbdMismatchLibrary(
-                      builder, messageStrongWithWeakDillLibrary);
-                }
-                break;
-              case NnbdMode.Agnostic:
-                if (libraryMode != NonNullableByDefaultCompiledMode.Agnostic) {
-                  if (libraryMode == NonNullableByDefaultCompiledMode.Strong) {
-                    loader.registerNnbdMismatchLibrary(
-                        builder, messageAgnosticWithStrongDillLibrary);
-                  } else {
-                    loader.registerNnbdMismatchLibrary(
-                        builder, messageAgnosticWithWeakDillLibrary);
-                  }
-                }
-                break;
-            }
-          }
-        }
-        return builder;
-      }
-    }
-    return new SourceLibraryBuilder(
-        uri, fileUri, packageUri, packageLanguageVersion, loader, origin,
-        referencesFrom: referencesFrom,
-        referenceIsPartOwner: referenceIsPartOwner);
-  }
-
   /// Returns classes defined in libraries in [loader].
   List<SourceClassBuilder> collectMyClasses() {
     List<SourceClassBuilder> result = <SourceClassBuilder>[];
-    for (LibraryBuilder library in loader.builders.values) {
+    for (LibraryBuilder library in loader.libraryBuilders) {
       if (library.loader == loader) {
         Iterator<Builder> iterator = library.iterator;
         while (iterator.moveNext()) {
@@ -478,7 +391,8 @@
         const NullabilityBuilder.omitted(),
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null)
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
       ..bind(objectClassBuilder);
     builder.interfaceBuilders = null;
     builder.mixedInTypeBuilder = null;
@@ -522,7 +436,6 @@
       loader.checkTypes();
       loader.checkRedirectingFactories(myClasses);
       loader.checkMainMethods();
-      _updateDelayedParameterTypes();
       installAllComponentProblems(loader.allComponentProblems);
       loader.allComponentProblems.clear();
       return component;
@@ -710,7 +623,7 @@
 
   void installDefaultSupertypes() {
     Class objectClass = this.objectClass;
-    for (LibraryBuilder library in loader.builders.values) {
+    for (LibraryBuilder library in loader.libraryBuilders) {
       if (library.loader == loader) {
         Iterator<Builder> iterator = library.iterator;
         while (iterator.moveNext()) {
@@ -724,7 +637,9 @@
                   const NullabilityBuilder.omitted(),
                   /* arguments = */ null,
                   /* fileUri = */ null,
-                  /* charOffset = */ null)
+                  /* charOffset = */ null,
+                  instanceTypeVariableAccess:
+                      InstanceTypeVariableAccessState.Unexpected)
                 ..bind(objectClassBuilder);
             }
             if (declaration.isMixinApplication) {
@@ -758,17 +673,6 @@
     ticker.logMs("Installed synthetic constructors");
   }
 
-  List<DelayedParameterType> _delayedParameterTypes = <DelayedParameterType>[];
-
-  /// Update the type of parameters cloned from parameters with inferred
-  /// parameter types.
-  void _updateDelayedParameterTypes() {
-    for (DelayedParameterType delayedParameterType in _delayedParameterTypes) {
-      delayedParameterType.updateType();
-    }
-    _delayedParameterTypes.clear();
-  }
-
   ClassBuilder get objectClassBuilder => objectType.declaration as ClassBuilder;
 
   Class get objectClass => objectClassBuilder.cls;
@@ -785,10 +689,13 @@
     }
 
     IndexedClass? indexedClass = builder.referencesFromIndexed;
-    Constructor? referenceFrom;
+    Reference? constructorReference;
+    Reference? tearOffReference;
     if (indexedClass != null) {
-      referenceFrom =
-          indexedClass.lookupConstructor(new Name("")) as Constructor?;
+      constructorReference =
+          indexedClass.lookupConstructorReference(new Name(""));
+      tearOffReference = indexedClass.lookupGetterReference(
+          constructorTearOffName("", indexedClass.library));
     }
 
     /// From [Dart Programming Language Specification, 4th Edition](
@@ -796,8 +703,8 @@
     /// >Iff no constructor is specified for a class C, it implicitly has a
     /// >default constructor C() : super() {}, unless C is class Object.
     // The superinitializer is installed below in [finishConstructors].
-    builder.addSyntheticConstructor(
-        _makeDefaultConstructor(builder, referenceFrom));
+    builder.addSyntheticConstructor(_makeDefaultConstructor(
+        builder, constructorReference, tearOffReference));
   }
 
   void installForwardingConstructors(SourceClassBuilder builder) {
@@ -840,10 +747,13 @@
     }
 
     IndexedClass? indexedClass = builder.referencesFromIndexed;
-    Constructor? referenceFrom;
+    Reference? constructorReference;
+    Reference? tearOffReference;
     if (indexedClass != null) {
-      referenceFrom =
-          indexedClass.lookupConstructor(new Name("")) as Constructor?;
+      constructorReference =
+          indexedClass.lookupConstructorReference(new Name(""));
+      tearOffReference = indexedClass.lookupGetterReference(
+          constructorTearOffName("", indexedClass.library));
     }
 
     if (supertype is ClassBuilder) {
@@ -854,14 +764,36 @@
       void addSyntheticConstructor(String name, MemberBuilder memberBuilder) {
         if (memberBuilder.member is Constructor) {
           substitutionMap ??= builder.getSubstitutionMap(superclassBuilder.cls);
-          Constructor? referenceFrom = indexedClass?.lookupConstructor(
-              new Name(name, indexedClass.library)) as Constructor?;
+          Reference? constructorReference;
+          Reference? tearOffReference;
+          if (indexedClass != null) {
+            constructorReference = indexedClass
+                // We use the name of the member builder here since it refers to
+                // the library of the original declaration when private. For
+                // instance:
+                //
+                //     // lib1:
+                //     class Super { Super._() }
+                //     class Subclass extends Class {
+                //       Subclass() : super._();
+                //     }
+                //     // lib2:
+                //     class Mixin {}
+                //     class Class = Super with Mixin;
+                //
+                // Here `super._()` in `Subclass` targets the forwarding stub
+                // added to `Class` whose name is `_` private to `lib1`.
+                .lookupConstructorReference(memberBuilder.member.name);
+            tearOffReference = indexedClass.lookupGetterReference(
+                constructorTearOffName(name, indexedClass.library));
+          }
           builder.addSyntheticConstructor(_makeMixinApplicationConstructor(
               builder,
               builder.cls.mixin,
               memberBuilder as MemberBuilderImpl,
               substitutionMap!,
-              referenceFrom));
+              constructorReference,
+              tearOffReference));
           isConstructorAdded = true;
         }
       }
@@ -870,16 +802,16 @@
           includeInjectedConstructors: true);
 
       if (!isConstructorAdded) {
-        builder.addSyntheticConstructor(
-            _makeDefaultConstructor(builder, referenceFrom));
+        builder.addSyntheticConstructor(_makeDefaultConstructor(
+            builder, constructorReference, tearOffReference));
       }
     } else if (supertype is InvalidTypeDeclarationBuilder ||
         supertype is TypeVariableBuilder ||
         supertype is DynamicTypeDeclarationBuilder ||
         supertype is VoidTypeDeclarationBuilder ||
         supertype is NeverTypeDeclarationBuilder) {
-      builder.addSyntheticConstructor(
-          _makeDefaultConstructor(builder, referenceFrom));
+      builder.addSyntheticConstructor(_makeDefaultConstructor(
+          builder, constructorReference, tearOffReference));
     } else {
       unhandled("${supertype.runtimeType}", "installForwardingConstructors",
           builder.charOffset, builder.fileUri);
@@ -889,26 +821,30 @@
   SyntheticConstructorBuilder _makeMixinApplicationConstructor(
       SourceClassBuilder classBuilder,
       Class mixin,
-      MemberBuilderImpl memberBuilder,
+      MemberBuilderImpl superConstructorBuilder,
       Map<TypeParameter, DartType> substitutionMap,
-      Constructor? referenceFrom) {
+      Reference? constructorReference,
+      Reference? tearOffReference) {
+    bool hasTypeDependency = false;
+    Substitution substitution = Substitution.fromMap(substitutionMap);
+
     VariableDeclaration copyFormal(VariableDeclaration formal) {
       VariableDeclaration copy = new VariableDeclaration(formal.name,
           isFinal: formal.isFinal,
           isConst: formal.isConst,
           type: const UnknownType());
-      if (formal.type is! UnknownType) {
-        copy.type = substitute(formal.type, substitutionMap);
+      if (!hasTypeDependency && formal.type is! UnknownType) {
+        copy.type = substitution.substituteType(formal.type);
       } else {
-        _delayedParameterTypes
-            .add(new DelayedParameterType(formal, copy, substitutionMap));
+        hasTypeDependency = true;
       }
       return copy;
     }
 
     Class cls = classBuilder.cls;
-    Constructor constructor = memberBuilder.member as Constructor;
-    bool isConst = constructor.isConst;
+    Constructor superConstructor =
+        superConstructorBuilder.member as Constructor;
+    bool isConst = superConstructor.isConst;
     if (isConst && mixin.fields.isNotEmpty) {
       for (Field field in mixin.fields) {
         if (!field.isStatic) {
@@ -923,11 +859,12 @@
     List<NamedExpression> named = <NamedExpression>[];
 
     for (VariableDeclaration formal
-        in constructor.function.positionalParameters) {
+        in superConstructor.function.positionalParameters) {
       positionalParameters.add(copyFormal(formal));
       positional.add(new VariableGet(positionalParameters.last));
     }
-    for (VariableDeclaration formal in constructor.function.namedParameters) {
+    for (VariableDeclaration formal
+        in superConstructor.function.namedParameters) {
       VariableDeclaration clone = copyFormal(formal);
       namedParameters.add(clone);
       named.add(new NamedExpression(
@@ -936,13 +873,14 @@
     FunctionNode function = new FunctionNode(new EmptyStatement(),
         positionalParameters: positionalParameters,
         namedParameters: namedParameters,
-        requiredParameterCount: constructor.function.requiredParameterCount,
+        requiredParameterCount:
+            superConstructor.function.requiredParameterCount,
         returnType: makeConstructorReturnType(cls));
     SuperInitializer initializer = new SuperInitializer(
-        constructor, new Arguments(positional, named: named));
+        superConstructor, new Arguments(positional, named: named));
     SynthesizedFunctionNode synthesizedFunctionNode =
         new SynthesizedFunctionNode(
-            substitutionMap, constructor.function, function);
+            substitutionMap, superConstructor.function, function);
     if (!isConst) {
       // For constant constructors default values are computed and cloned part
       // of the outline expression and therefore passed to the
@@ -952,23 +890,45 @@
       // full compilation using [synthesizedFunctionNodes].
       synthesizedFunctionNodes.add(synthesizedFunctionNode);
     }
+    Constructor constructor = new Constructor(function,
+        name: superConstructor.name,
+        initializers: <Initializer>[initializer],
+        isSynthetic: true,
+        isConst: isConst,
+        reference: constructorReference,
+        fileUri: cls.fileUri)
+      // TODO(johnniwinther): Should we add file offsets to synthesized
+      //  constructors?
+      //..fileOffset = cls.fileOffset
+      //..fileEndOffset = cls.fileOffset
+      ..isNonNullableByDefault = cls.enclosingLibrary.isNonNullableByDefault;
+
+    if (hasTypeDependency) {
+      loader.registerTypeDependency(
+          constructor,
+          new TypeDependency(constructor, superConstructor, substitution,
+              copyReturnType: false));
+    }
+
+    Procedure? constructorTearOff = createConstructorTearOffProcedure(
+        superConstructor.name.text,
+        classBuilder.library,
+        cls.fileUri,
+        cls.fileOffset,
+        tearOffReference,
+        forAbstractClassOrEnum: classBuilder.isAbstract);
+
+    if (constructorTearOff != null) {
+      buildConstructorTearOffProcedure(constructorTearOff, constructor,
+          classBuilder.cls, classBuilder.library);
+    }
     return new SyntheticConstructorBuilder(
-        classBuilder,
-        new Constructor(function,
-            name: constructor.name,
-            initializers: <Initializer>[initializer],
-            isSynthetic: true,
-            isConst: isConst,
-            reference: referenceFrom?.reference,
-            fileUri: cls.fileUri)
-          ..isNonNullableByDefault =
-              cls.enclosingLibrary.isNonNullableByDefault,
-        null,
+        classBuilder, constructor, constructorTearOff,
         // If the constructor is constant, the default values must be part of
         // the outline expressions. We pass on the original constructor and
         // cloned function nodes to ensure that the default values are computed
         // and cloned for the outline.
-        origin: isConst ? memberBuilder : null,
+        origin: isConst ? superConstructorBuilder : null,
         synthesizedFunctionNode: isConst ? synthesizedFunctionNode : null);
   }
 
@@ -982,20 +942,29 @@
   }
 
   SyntheticConstructorBuilder _makeDefaultConstructor(
-      SourceClassBuilder classBuilder, Constructor? referenceFrom) {
+      SourceClassBuilder classBuilder,
+      Reference? constructorReference,
+      Reference? tearOffReference) {
     Class enclosingClass = classBuilder.cls;
     Constructor constructor = new Constructor(
         new FunctionNode(new EmptyStatement(),
             returnType: makeConstructorReturnType(enclosingClass)),
         name: new Name(""),
         isSynthetic: true,
-        reference: referenceFrom?.reference,
+        reference: constructorReference,
         fileUri: enclosingClass.fileUri)
       ..fileOffset = enclosingClass.fileOffset
+      // TODO(johnniwinther): Should we add file end offsets to synthesized
+      //  constructors?
+      //..fileEndOffset = enclosingClass.fileOffset
       ..isNonNullableByDefault =
           enclosingClass.enclosingLibrary.isNonNullableByDefault;
     Procedure? constructorTearOff = createConstructorTearOffProcedure(
-        '', classBuilder.library, classBuilder.fileUri, constructor.fileOffset,
+        '',
+        classBuilder.library,
+        enclosingClass.fileUri,
+        enclosingClass.fileOffset,
+        tearOffReference,
         forAbstractClassOrEnum:
             enclosingClass.isAbstract || enclosingClass.isEnum);
     if (constructorTearOff != null) {
@@ -1041,7 +1010,7 @@
       ...backendTarget.extraIndexedLibraries
     ]) {
       Uri uri = Uri.parse(platformLibrary);
-      LibraryBuilder? libraryBuilder = loader.builders[uri];
+      LibraryBuilder? libraryBuilder = loader.lookupLibraryBuilder(uri);
       if (libraryBuilder == null) {
         // TODO(ahe): This is working around a bug in kernel_driver_test or
         // kernel_driver.
@@ -1438,8 +1407,8 @@
 
     if (loader.target.context.options
         .isExperimentEnabledGlobally(ExperimentalFlag.valueClass)) {
-      valueClass.transformComponent(
-          component!, loader.coreTypes, loader.hierarchy, environment);
+      valueClass.transformComponent(component!, loader.coreTypes,
+          loader.hierarchy, loader.referenceFromIndex, environment);
       ticker.logMs("Lowered value classes");
     }
 
@@ -1599,22 +1568,3 @@
     loader.addProblem(message, charOffset, noLength, fileUri, context: context);
   }
 }
-
-/// Data for updating cloned parameters of parameters with inferred parameter
-/// types.
-///
-/// The type of [source] is not declared so the type of [target] needs to be
-/// updated when the type of [source] has been inferred.
-class DelayedParameterType {
-  final VariableDeclaration source;
-  final VariableDeclaration target;
-  final Map<TypeParameter, DartType> substitutionMap;
-
-  DelayedParameterType(this.source, this.target, this.substitutionMap);
-
-  void updateType() {
-    // ignore: unnecessary_null_comparison
-    assert(source.type is! UnknownType, "No type computed for $source.");
-    target.type = substitute(source.type, substitutionMap);
-  }
-}
diff --git a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
index 3697827..c363409 100644
--- a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
@@ -23,6 +23,29 @@
       member.name.text == redirectingName;
 }
 
+/// Returns the redirecting factory constructors for the enclosing class from
+/// [field].
+///
+/// `isRedirectingFactoryField(field)` is assumed to be true.
+Iterable<Procedure> getRedirectingFactories(Field field) {
+  assert(isRedirectingFactoryField(field));
+  List<Procedure> redirectingFactories = [];
+  ListLiteral initializer = field.initializer as ListLiteral;
+  for (Expression expression in initializer.expressions) {
+    Procedure target;
+    if (expression is ConstantExpression) {
+      ConstructorTearOffConstant constant =
+          expression.constant as ConstructorTearOffConstant;
+      target = constant.target as Procedure;
+    } else {
+      ConstructorTearOff get = expression as ConstructorTearOff;
+      target = get.target as Procedure;
+    }
+    redirectingFactories.add(target);
+  }
+  return redirectingFactories;
+}
+
 /// Name used for a synthesized let variable used to encode redirecting factory
 /// information in a factory method body.
 const String letName = "#redirecting_factory";
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index a64b323..a0fef49 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -267,7 +267,8 @@
     }
     if (arguments != null) {
       NamedTypeBuilder newTypeBuilder = new NamedTypeBuilder(type.name,
-          type.nullabilityBuilder, arguments, type.fileUri, type.charOffset);
+          type.nullabilityBuilder, arguments, type.fileUri, type.charOffset,
+          instanceTypeVariableAccess: type.instanceTypeVariableAccess);
       if (declaration != null) {
         newTypeBuilder.bind(declaration);
       } else {
@@ -312,7 +313,9 @@
               functionTypeLowerSubstitution![variable] =
                   new NamedTypeBuilder.fromTypeDeclarationBuilder(
                       newTypeVariableBuilder,
-                      const NullabilityBuilder.omitted());
+                      const NullabilityBuilder.omitted(),
+                      instanceTypeVariableAccess:
+                          InstanceTypeVariableAccessState.Unexpected);
           changed = true;
         } else {
           variables[i] = variable;
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
index 550c2d2..52d0a58 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
@@ -48,7 +48,8 @@
   TypeBuilder visitDynamicType(DynamicType node) {
     // 'dynamic' is always nullable.
     return new NamedTypeBuilder("dynamic", const NullabilityBuilder.nullable(),
-        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null)
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
       ..bind(new DynamicTypeDeclarationBuilder(
           const DynamicType(), loader.coreLibrary, -1));
   }
@@ -57,7 +58,8 @@
   TypeBuilder visitVoidType(VoidType node) {
     // 'void' is always nullable.
     return new NamedTypeBuilder("void", const NullabilityBuilder.nullable(),
-        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null)
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
       ..bind(new VoidTypeDeclarationBuilder(
           const VoidType(), loader.coreLibrary, -1));
   }
@@ -69,14 +71,16 @@
         new NullabilityBuilder.fromNullability(node.nullability),
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null)
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
       ..bind(new NeverTypeDeclarationBuilder(node, loader.coreLibrary, -1));
   }
 
   @override
   TypeBuilder visitNullType(NullType node) {
     return new NamedTypeBuilder("Null", new NullabilityBuilder.nullable(),
-        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null)
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
       ..bind(new NullTypeDeclarationBuilder(node, loader.coreLibrary, -1));
   }
 
@@ -96,7 +100,8 @@
         new NullabilityBuilder.fromNullability(node.nullability),
         arguments,
         /* fileUri = */ null,
-        /* charOffset = */ null)
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
       ..bind(cls);
   }
 
@@ -113,7 +118,8 @@
         new NullabilityBuilder.fromNullability(node.nullability),
         [argument],
         /* fileUri = */ null,
-        /* charOffset = */ null)
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
       ..bind(new FutureOrTypeDeclarationBuilder(node, loader.coreLibrary, -1));
   }
 
@@ -175,13 +181,15 @@
     } else if (kernelClassOrTypeDef is Typedef) {
       kernelLibrary = kernelClassOrTypeDef.enclosingLibrary;
     }
-    LibraryBuilder library = loader.builders[kernelLibrary!.importUri]!;
+    LibraryBuilder library =
+        loader.lookupLibraryBuilder(kernelLibrary!.importUri)!;
     return new NamedTypeBuilder(
         parameter.name!,
         new NullabilityBuilder.fromNullability(node.nullability),
         /* arguments = */ null,
         /* fileUri = */ null,
-        /* charOffset = */ null)
+        /* charOffset = */ null,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Allowed)
       ..bind(new TypeVariableBuilder.fromKernel(parameter, library));
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
index 4ebcb03..79badb9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
@@ -525,6 +525,6 @@
         ? templateTypeOrigin.withArguments(toString(), importUri)
         : templateTypeOriginWithFileUri.withArguments(
             toString(), importUri, fileUri);
-    return "\n - " + message.message;
+    return "\n - " + message.problemMessage;
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index ad50b91..3a85b46 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -20,7 +20,6 @@
 import '../builder/metadata_builder.dart';
 import '../builder/type_builder.dart';
 import '../builder/type_variable_builder.dart';
-import '../builder/unresolved_type.dart';
 import '../combinator.dart';
 import '../configuration.dart';
 import '../identifiers.dart';
@@ -213,5 +212,3 @@
 final Label dummyLabel = new Label('', -1);
 final FieldInfo dummyFieldInfo = new FieldInfo('', -1, null, dummyToken, -1);
 final Configuration dummyConfiguration = new Configuration(-1, '', '', '');
-final UnresolvedType dummyUnresolvedType =
-    new UnresolvedType(dummyTypeBuilder, -1, dummyUri);
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index 5b07db1..4173b42 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -21,7 +21,7 @@
 abstract class Loader {
   TargetImplementation get target;
 
-  Map<Uri, LibraryBuilder> get builders;
+  LibraryBuilder? lookupLibraryBuilder(Uri importUri);
 
   /// Register [message] as a problem with a severity determined by the
   /// intrinsic severity of the message.
diff --git a/pkg/front_end/lib/src/fasta/problems.dart b/pkg/front_end/lib/src/fasta/problems.dart
index eea59f1..e275e78 100644
--- a/pkg/front_end/lib/src/fasta/problems.dart
+++ b/pkg/front_end/lib/src/fasta/problems.dart
@@ -35,7 +35,7 @@
                 .withoutLocation();
 
   @override
-  String toString() => "DebugAbort: ${message.message}";
+  String toString() => "DebugAbort: ${message.problemMessage}";
 }
 
 /// Used to report an internal error.
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 2a08cd3..a1e2b88 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -267,8 +267,7 @@
   }
 
   @override
-  void endFunctionTypeAlias(
-      Token typedefKeyword, Token? equals, Token endToken) {
+  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
     debugEvent("FunctionTypeAlias");
 
     if (equals == null) pop(); // endToken
@@ -868,7 +867,7 @@
   }
 
   @override
-  void beginClassOrMixinBody(DeclarationKind kind, Token token) {
+  void beginClassOrMixinOrExtensionBody(DeclarationKind kind, Token token) {
     assert(checkState(token, [
       ValueKinds.Token,
       ValueKinds.NameOrParserRecovery,
@@ -890,7 +889,7 @@
   }
 
   @override
-  void endClassOrMixinBody(
+  void endClassOrMixinOrExtensionBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
     debugEvent("ClassOrMixinBody");
     currentDeclaration = null;
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 0a838d9..63f5779 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -24,6 +24,8 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
 
+import 'package:_fe_analyzer_shared/src/util/link.dart';
+
 import 'package:kernel/ast.dart'
     show AsyncMarker, InvalidType, Nullability, ProcedureKind, Variance;
 
@@ -39,7 +41,6 @@
 import '../builder/nullability_builder.dart';
 import '../builder/type_builder.dart';
 import '../builder/type_variable_builder.dart';
-import '../builder/unresolved_type.dart';
 
 import '../combinator.dart' show CombinatorBuilder;
 
@@ -101,6 +102,258 @@
   RedirectingFactoryBody,
 }
 
+/// Enum for the context in which declarations occur.
+///
+/// This is used to determine whether instance type variables access is allowed.
+enum DeclarationContext {
+  /// In the context of the enclosing library.
+  ///
+  /// This is used for library, import, export, part, and part of declarations
+  /// in libraries and parts, as well as annotations on top level declarations.
+  Library,
+
+  /// In a typedef declaration
+  ///
+  /// This excludes annotations on the typedef declaration itself, which are
+  /// seen in the [Library] context.
+  Typedef,
+
+  /// In an enum declaration
+  ///
+  /// This excludes annotations on the enum declaration itself, which are seen
+  /// in the [Library] context.
+  Enum,
+
+  /// In a top level method declaration.
+  ///
+  /// This includes return type of the declaration but excludes annotations on
+  /// the method declaration itself, which are seen in the [Library] context.
+  TopLevelMethod,
+
+  /// In a top level field declaration.
+  ///
+  /// This includes  type of the declaration but excludes annotations on the
+  /// field declaration itself, which are seen in the [Library] context.
+  TopLevelField,
+
+  /// In a `class Name<TypeParams>` or `mixin Name<TypeParams>` prefix of a
+  /// class declaration `class Name<TypeParams> ... { ... }`, mixin declaration
+  /// `mixin Name<TypeParams> ... { ... }` or named mixin application
+  /// `class Name<TypeParams> = ...;`.
+  ///
+  /// This is replaced by [Class], [Mixin] or [NamedMixinApplication] after the
+  /// type parameters have been parsed.
+  ClassOrMixinOrNamedMixinApplication,
+
+  /// In a named mixin application.
+  ///
+  /// This excludes type parameters declared on the named mixin application,
+  /// which are seen in the [ClassOrMixinOrNamedMixinApplication] context,
+  /// and annotations on the named mixin application itself, which are seen in
+  /// the [Library] context.
+  NamedMixinApplication,
+
+  /// In a class declaration before the class body.
+  ///
+  /// This excludes type parameters declared on the class declaration, which are
+  /// seen in the [ClassOrMixinOrNamedMixinApplication] context, and annotations
+  /// on the class declaration itself, which are seen in the [Library] context.
+  Class,
+
+  /// In a class declaration body.
+  ///
+  /// This includes annotations on class member declarations.
+  ClassBody,
+
+  /// In a generative constructor declaration inside a class declaration.
+  ///
+  /// This  excludes annotations on the constructor declaration itself, which
+  /// are seen in the [ClassBody] context.
+  ClassConstructor,
+
+  /// In a factory constructor declaration inside a class declaration.
+  ///
+  /// This excludes annotations on the constructor declaration itself, which
+  /// are seen in the [ClassBody] context.
+  ClassFactory,
+
+  /// In an instance method declaration inside a class declaration.
+  ///
+  /// This includes return type of the declaration but excludes annotations on
+  /// the method declaration itself, which are seen in the [ClassBody] context.
+  ClassInstanceMethod,
+
+  /// In an instance field declaration inside a class declaration.
+  ///
+  /// This includes type of the declaration but excludes annotations on the
+  /// field declaration itself, which are seen in the [ClassBody] context.
+  ClassInstanceField,
+
+  /// In a static method declaration inside a class declaration.
+  ///
+  /// This includes return type of the declaration but excludes annotations on
+  /// the method declaration itself, which are seen in the [ClassBody] context.
+  ClassStaticMethod,
+
+  /// In a static field declaration inside a class declaration.
+  ///
+  /// This includes type of the declaration but excludes annotations on the
+  /// field declaration itself, which are seen in the [ClassBody] context.
+  ClassStaticField,
+
+  /// In a mixin declaration before the mixin body.
+  ///
+  /// This excludes type parameters declared on the mixin declaration, which are
+  /// seen in the [ClassOrMixinOrNamedMixinApplication] context, and annotations
+  /// on the mixin declaration itself, which are seen in the [Library] context.
+  Mixin,
+
+  /// In a mixin declaration body.
+  ///
+  /// This includes annotations on mixin member declarations.
+  MixinBody,
+
+  /// In a generative constructor declaration inside a mixin declaration. This
+  /// is an error case.
+  ///
+  /// This excludes annotations on the constructor declaration itself, which
+  /// are seen in the [MixinBody] context.
+  MixinConstructor,
+
+  /// In a factory constructor declaration inside a mixin declaration. This is
+  /// an error case.
+  ///
+  /// This excludes annotations on the constructor declaration itself, which
+  /// are seen in the [MixinBody] context.
+  MixinFactory,
+
+  /// In an instance method declaration inside a mixin declaration.
+  ///
+  /// This includes return type of the declaration but excludes annotations on
+  /// the method declaration itself, which are seen in the [MixinBody] context.
+  MixinInstanceMethod,
+
+  /// In an instance field declaration inside a mixin declaration.
+  ///
+  /// This includes type of the declaration but excludes annotations on the
+  /// field declaration itself, which are seen in the [MixinBody] context.
+  MixinInstanceField,
+
+  /// In a static method declaration inside a mixin declaration.
+  ///
+  /// This includes return type of the declaration but excludes annotations on
+  /// the method declaration itself, which are seen in the [MixinBody] context.
+  MixinStaticMethod,
+
+  /// In a static field declaration inside a mixin declaration.
+  ///
+  /// This includes type of the declaration but excludes annotations on the
+  /// field declaration itself, which are seen in the [MixinBody] context.
+  MixinStaticField,
+
+  /// In an extension declaration before the extension body.
+  ///
+  /// This includes type parameters declared on the class declaration but
+  /// excludes annotations on the extension declaration itself, which are seen
+  /// in the [Library] context.
+  Extension,
+
+  /// In a extension declaration body.
+  ///
+  /// This includes annotations on extension member declarations.
+  ExtensionBody,
+
+  /// In a generative constructor declaration inside an extension declaration.
+  /// This is an error case.
+  ///
+  /// This excludes annotations on the constructor declaration itself, which
+  /// are seen in the [ExtensionBody] context.
+  ExtensionConstructor,
+
+  /// In a factory constructor declaration inside an extension declaration. This
+  /// is an error case.
+  ///
+  /// This excludes annotations on the constructor declaration itself, which
+  /// are seen in the [ExtensionBody] context.
+  ExtensionFactory,
+
+  /// In an instance method declaration inside an extension declaration.
+  ///
+  /// This includes return type of the declaration but excludes annotations on
+  /// the method declaration itself, which are seen in the [ExtensionBody]
+  /// context.
+  ExtensionInstanceMethod,
+
+  /// In a non-external instance field declaration inside an extension
+  /// declaration. This is an error case.
+  ///
+  /// This includes type of the declaration but excludes annotations on the
+  /// field declaration itself, which are seen in the [ExtensionBody] context.
+  ExtensionInstanceField,
+
+  /// In an external instance field declaration inside an extension declaration.
+  ///
+  /// This includes type of the declaration but excludes annotations on the
+  /// field declaration itself, which are seen in the [ExtensionBody] context.
+  ExtensionExternalInstanceField,
+
+  /// In a static method declaration inside an extension declaration.
+  ///
+  /// This includes return type of the declaration but excludes annotations on
+  /// the method declaration itself, which are seen in the [ExtensionBody]
+  /// context.
+  ExtensionStaticMethod,
+
+  /// In a static field declaration inside an extension declaration.
+  ///
+  /// This includes type of the declaration but excludes annotations on the
+  /// field declaration itself, which are seen in the [ExtensionBody] context.
+  ExtensionStaticField,
+}
+
+extension on DeclarationContext {
+  InstanceTypeVariableAccessState get instanceTypeVariableAccessState {
+    switch (this) {
+      case DeclarationContext.Library:
+      case DeclarationContext.Typedef:
+      case DeclarationContext.TopLevelMethod:
+      case DeclarationContext.TopLevelField:
+      case DeclarationContext.Enum:
+        return InstanceTypeVariableAccessState.Unexpected;
+      case DeclarationContext.ClassOrMixinOrNamedMixinApplication:
+      case DeclarationContext.NamedMixinApplication:
+      case DeclarationContext.Class:
+      case DeclarationContext.ClassConstructor:
+      case DeclarationContext.ClassFactory:
+      case DeclarationContext.ClassInstanceMethod:
+      case DeclarationContext.ClassInstanceField:
+      case DeclarationContext.Mixin:
+      case DeclarationContext.MixinInstanceMethod:
+      case DeclarationContext.MixinInstanceField:
+      case DeclarationContext.Extension:
+      case DeclarationContext.ExtensionInstanceMethod:
+      case DeclarationContext.ExtensionExternalInstanceField:
+        return InstanceTypeVariableAccessState.Allowed;
+      case DeclarationContext.ClassBody:
+      case DeclarationContext.ClassStaticMethod:
+      case DeclarationContext.ClassStaticField:
+      case DeclarationContext.MixinBody:
+      case DeclarationContext.MixinStaticMethod:
+      case DeclarationContext.MixinStaticField:
+      case DeclarationContext.ExtensionBody:
+      case DeclarationContext.ExtensionStaticMethod:
+      case DeclarationContext.ExtensionStaticField:
+        return InstanceTypeVariableAccessState.Disallowed;
+      case DeclarationContext.MixinConstructor:
+      case DeclarationContext.MixinFactory:
+      case DeclarationContext.ExtensionConstructor:
+      case DeclarationContext.ExtensionFactory:
+      case DeclarationContext.ExtensionInstanceField:
+        return InstanceTypeVariableAccessState.Invalid;
+    }
+  }
+}
+
 class OutlineBuilder extends StackListenerImpl {
   @override
   final SourceLibraryBuilder libraryBuilder;
@@ -117,6 +370,8 @@
   /// Counter used for naming unnamed extension declarations.
   int unnamedExtensionCounter = 0;
 
+  Link<DeclarationContext> _declarationContext = const Link();
+
   OutlineBuilder(SourceLibraryBuilder library)
       : libraryBuilder = library,
         enableNative =
@@ -124,6 +379,20 @@
         stringExpectedAfterNative =
             library.loader.target.backendTarget.nativeExtensionExpectsString;
 
+  DeclarationContext get declarationContext => _declarationContext.head;
+
+  void pushDeclarationContext(DeclarationContext value) {
+    _declarationContext = _declarationContext.prepend(value);
+  }
+
+  void popDeclarationContext([DeclarationContext? expectedContext]) {
+    assert(
+        expectedContext == null || expectedContext == declarationContext,
+        "Unexpected declaration context: "
+        "Expected $expectedContext, actual $declarationContext.");
+    _declarationContext = _declarationContext.tail!;
+  }
+
   @override
   Uri get uri => libraryBuilder.fileUri;
 
@@ -146,6 +415,16 @@
   }
 
   @override
+  void beginCompilationUnit(Token token) {
+    pushDeclarationContext(DeclarationContext.Library);
+  }
+
+  @override
+  void endCompilationUnit(int count, Token token) {
+    popDeclarationContext(DeclarationContext.Library);
+  }
+
+  @override
   void endMetadata(Token beginToken, Token? periodBeforeName, Token endToken) {
     debugEvent("Metadata");
     pop(); // arguments
@@ -491,8 +770,10 @@
   }
 
   @override
-  void beginClassOrNamedMixinApplicationPrelude(Token token) {
+  void beginClassOrMixinOrNamedMixinApplicationPrelude(Token token) {
     debugEvent("beginClassOrNamedMixinApplicationPrelude");
+    pushDeclarationContext(
+        DeclarationContext.ClassOrMixinOrNamedMixinApplication);
     libraryBuilder.beginNestedDeclaration(
         TypeParameterScopeKind.classOrNamedMixinApplication,
         "class or mixin application");
@@ -501,6 +782,9 @@
   @override
   void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
     debugEvent("beginClassDeclaration");
+    popDeclarationContext(
+        DeclarationContext.ClassOrMixinOrNamedMixinApplication);
+    pushDeclarationContext(DeclarationContext.Class);
     List<TypeVariableBuilder>? typeVariables =
         pop() as List<TypeVariableBuilder>?;
     push(typeVariables ?? NullValue.TypeVariables);
@@ -514,6 +798,9 @@
   @override
   void beginMixinDeclaration(Token mixinKeyword, Token name) {
     debugEvent("beginMixinDeclaration");
+    popDeclarationContext(
+        DeclarationContext.ClassOrMixinOrNamedMixinApplication);
+    pushDeclarationContext(DeclarationContext.Mixin);
     List<TypeVariableBuilder>? typeVariables =
         pop() as List<TypeVariableBuilder>?;
     push(typeVariables ?? NullValue.TypeVariables);
@@ -523,7 +810,22 @@
   }
 
   @override
-  void beginClassOrMixinBody(DeclarationKind kind, Token token) {
+  void beginClassOrMixinOrExtensionBody(DeclarationKind kind, Token token) {
+    DeclarationContext declarationContext;
+    switch (kind) {
+      case DeclarationKind.TopLevel:
+        throw new UnsupportedError('Unexpected top level body.');
+      case DeclarationKind.Class:
+        declarationContext = DeclarationContext.ClassBody;
+        break;
+      case DeclarationKind.Mixin:
+        declarationContext = DeclarationContext.MixinBody;
+        break;
+      case DeclarationKind.Extension:
+        declarationContext = DeclarationContext.ExtensionBody;
+        break;
+    }
+    pushDeclarationContext(declarationContext);
     if (kind == DeclarationKind.Extension) {
       assert(checkState(token, [
         /* hide type elements = */ ValueKinds.TypeBuilderListOrNull,
@@ -553,7 +855,7 @@
     // Resolve unresolved types from the class header (i.e., superclass, mixins,
     // and implemented types) before adding members from the class body which
     // should not shadow these unresolved types.
-    libraryBuilder.currentTypeParameterScopeBuilder.resolveTypes(
+    libraryBuilder.currentTypeParameterScopeBuilder.resolveNamedTypes(
         libraryBuilder.currentTypeParameterScopeBuilder.typeVariables,
         libraryBuilder);
   }
@@ -562,6 +864,9 @@
   void beginNamedMixinApplication(
       Token begin, Token? abstractToken, Token name) {
     debugEvent("beginNamedMixinApplication");
+    popDeclarationContext(
+        DeclarationContext.ClassOrMixinOrNamedMixinApplication);
+    pushDeclarationContext(DeclarationContext.NamedMixinApplication);
     List<TypeVariableBuilder>? typeVariables =
         pop() as List<TypeVariableBuilder>?;
     push(typeVariables ?? NullValue.TypeVariables);
@@ -710,72 +1015,71 @@
       libraryBuilder
           .endNestedDeclaration(
               TypeParameterScopeKind.classDeclaration, "<syntax-error>")
-          .resolveTypes(typeVariables, libraryBuilder);
-      return;
-    }
+          .resolveNamedTypes(typeVariables, libraryBuilder);
+    } else {
+      final int startCharOffset =
+          metadata == null ? beginToken.charOffset : metadata.first.charOffset;
 
-    final int startCharOffset =
-        metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-
-    if (libraryBuilder.isNonNullableByDefault) {
-      String classNameForErrors = "${name}";
-      TypeBuilder? supertypeForErrors = supertype is MixinApplicationBuilder
-          ? supertype.supertype
-          : supertype;
-      List<TypeBuilder>? mixins =
-          supertype is MixinApplicationBuilder ? supertype.mixins : null;
-      if (supertypeForErrors != null) {
-        if (supertypeForErrors.nullabilityBuilder.build(libraryBuilder) ==
-            Nullability.nullable) {
-          libraryBuilder.addProblem(
-              templateNullableSuperclassError
-                  .withArguments(supertypeForErrors.fullNameForErrors),
-              nameOffset,
-              classNameForErrors.length,
-              uri);
-        }
-      }
-      if (mixins != null) {
-        for (TypeBuilder mixin in mixins) {
-          if (mixin.nullabilityBuilder.build(libraryBuilder) ==
+      if (libraryBuilder.isNonNullableByDefault) {
+        String classNameForErrors = "${name}";
+        TypeBuilder? supertypeForErrors = supertype is MixinApplicationBuilder
+            ? supertype.supertype
+            : supertype;
+        List<TypeBuilder>? mixins =
+            supertype is MixinApplicationBuilder ? supertype.mixins : null;
+        if (supertypeForErrors != null) {
+          if (supertypeForErrors.nullabilityBuilder.build(libraryBuilder) ==
               Nullability.nullable) {
             libraryBuilder.addProblem(
-                templateNullableMixinError
-                    .withArguments(mixin.fullNameForErrors),
+                templateNullableSuperclassError
+                    .withArguments(supertypeForErrors.fullNameForErrors),
                 nameOffset,
                 classNameForErrors.length,
                 uri);
           }
         }
-      }
-      if (interfaces != null) {
-        for (TypeBuilder interface in interfaces) {
-          if (interface.nullabilityBuilder.build(libraryBuilder) ==
-              Nullability.nullable) {
-            libraryBuilder.addProblem(
-                templateNullableInterfaceError
-                    .withArguments(interface.fullNameForErrors),
-                nameOffset,
-                classNameForErrors.length,
-                uri);
+        if (mixins != null) {
+          for (TypeBuilder mixin in mixins) {
+            if (mixin.nullabilityBuilder.build(libraryBuilder) ==
+                Nullability.nullable) {
+              libraryBuilder.addProblem(
+                  templateNullableMixinError
+                      .withArguments(mixin.fullNameForErrors),
+                  nameOffset,
+                  classNameForErrors.length,
+                  uri);
+            }
+          }
+        }
+        if (interfaces != null) {
+          for (TypeBuilder interface in interfaces) {
+            if (interface.nullabilityBuilder.build(libraryBuilder) ==
+                Nullability.nullable) {
+              libraryBuilder.addProblem(
+                  templateNullableInterfaceError
+                      .withArguments(interface.fullNameForErrors),
+                  nameOffset,
+                  classNameForErrors.length,
+                  uri);
+            }
           }
         }
       }
+
+      libraryBuilder.addClass(
+          metadata,
+          modifiers,
+          name as String,
+          typeVariables,
+          supertype,
+          interfaces,
+          startCharOffset,
+          nameOffset,
+          endToken.charOffset,
+          supertypeOffset);
     }
-
-    libraryBuilder.addClass(
-        metadata,
-        modifiers,
-        name as String,
-        typeVariables,
-        supertype,
-        interfaces,
-        startCharOffset,
-        nameOffset,
-        endToken.charOffset,
-        supertypeOffset);
-
     libraryBuilder.setCurrentClassName(null);
+    popDeclarationContext(DeclarationContext.Class);
   }
 
   Object? nullIfParserRecovery(Object? node) {
@@ -800,72 +1104,74 @@
       libraryBuilder
           .endNestedDeclaration(
               TypeParameterScopeKind.mixinDeclaration, "<syntax-error>")
-          .resolveTypes(typeVariables, libraryBuilder);
-      return;
-    }
-    int startOffset =
-        metadata == null ? mixinToken.charOffset : metadata.first.charOffset;
-    TypeBuilder? supertype;
-    if (supertypeConstraints != null && supertypeConstraints.isNotEmpty) {
-      if (supertypeConstraints.length == 1) {
-        supertype = supertypeConstraints.first;
-      } else {
-        supertype = new MixinApplicationBuilder(
-            supertypeConstraints.first,
-            supertypeConstraints.skip(1).toList(),
-            supertypeConstraints.first.fileUri!,
-            supertypeConstraints.first.charOffset!);
+          .resolveNamedTypes(typeVariables, libraryBuilder);
+    } else {
+      int startOffset =
+          metadata == null ? mixinToken.charOffset : metadata.first.charOffset;
+      TypeBuilder? supertype;
+      if (supertypeConstraints != null && supertypeConstraints.isNotEmpty) {
+        if (supertypeConstraints.length == 1) {
+          supertype = supertypeConstraints.first;
+        } else {
+          supertype = new MixinApplicationBuilder(
+              supertypeConstraints.first,
+              supertypeConstraints.skip(1).toList(),
+              supertypeConstraints.first.fileUri!,
+              supertypeConstraints.first.charOffset!);
+        }
       }
-    }
 
-    if (libraryBuilder.isNonNullableByDefault) {
-      String classNameForErrors = "${name}";
-      if (supertypeConstraints != null) {
-        for (TypeBuilder supertype in supertypeConstraints) {
-          if (supertype.nullabilityBuilder.build(libraryBuilder) ==
-              Nullability.nullable) {
-            libraryBuilder.addProblem(
-                templateNullableSuperclassError
-                    .withArguments(supertype.fullNameForErrors),
-                nameOffset,
-                classNameForErrors.length,
-                uri);
+      if (libraryBuilder.isNonNullableByDefault) {
+        String classNameForErrors = "${name}";
+        if (supertypeConstraints != null) {
+          for (TypeBuilder supertype in supertypeConstraints) {
+            if (supertype.nullabilityBuilder.build(libraryBuilder) ==
+                Nullability.nullable) {
+              libraryBuilder.addProblem(
+                  templateNullableSuperclassError
+                      .withArguments(supertype.fullNameForErrors),
+                  nameOffset,
+                  classNameForErrors.length,
+                  uri);
+            }
+          }
+        }
+        if (interfaces != null) {
+          for (TypeBuilder interface in interfaces) {
+            if (interface.nullabilityBuilder.build(libraryBuilder) ==
+                Nullability.nullable) {
+              libraryBuilder.addProblem(
+                  templateNullableInterfaceError
+                      .withArguments(interface.fullNameForErrors),
+                  nameOffset,
+                  classNameForErrors.length,
+                  uri);
+            }
           }
         }
       }
-      if (interfaces != null) {
-        for (TypeBuilder interface in interfaces) {
-          if (interface.nullabilityBuilder.build(libraryBuilder) ==
-              Nullability.nullable) {
-            libraryBuilder.addProblem(
-                templateNullableInterfaceError
-                    .withArguments(interface.fullNameForErrors),
-                nameOffset,
-                classNameForErrors.length,
-                uri);
-          }
-        }
-      }
-    }
 
-    libraryBuilder.addMixinDeclaration(
-        metadata,
-        mixinDeclarationMask,
-        name as String,
-        typeVariables,
-        supertype,
-        interfaces,
-        startOffset,
-        nameOffset,
-        endToken.charOffset,
-        -1);
+      libraryBuilder.addMixinDeclaration(
+          metadata,
+          mixinDeclarationMask,
+          name as String,
+          typeVariables,
+          supertype,
+          interfaces,
+          startOffset,
+          nameOffset,
+          endToken.charOffset,
+          -1);
+    }
     libraryBuilder.setCurrentClassName(null);
+    popDeclarationContext(DeclarationContext.Mixin);
   }
 
   @override
   void beginExtensionDeclarationPrelude(Token extensionKeyword) {
     assert(checkState(extensionKeyword, [ValueKinds.MetadataListOrNull]));
     debugEvent("beginExtensionDeclaration");
+    pushDeclarationContext(DeclarationContext.Extension);
     libraryBuilder.beginNestedDeclaration(
         TypeParameterScopeKind.extensionDeclaration, "extension");
   }
@@ -983,6 +1289,7 @@
         startOffset,
         nameOffset,
         endToken.charOffset);
+    popDeclarationContext(DeclarationContext.Extension);
   }
 
   ProcedureKind computeProcedureKind(Token? token) {
@@ -995,6 +1302,7 @@
 
   @override
   void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
+    pushDeclarationContext(DeclarationContext.TopLevelMethod);
     libraryBuilder.beginNestedDeclaration(
         TypeParameterScopeKind.topLevelMethod, "#method",
         hasMembers: false);
@@ -1036,27 +1344,29 @@
     checkEmpty(beginToken.charOffset);
     libraryBuilder
         .endNestedDeclaration(TypeParameterScopeKind.topLevelMethod, "#method")
-        .resolveTypes(typeVariables, libraryBuilder);
-    if (name is ParserRecovery) return;
-    final int startCharOffset =
-        metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-    libraryBuilder.addProcedure(
-        metadata,
-        modifiers,
-        returnType,
-        name as String,
-        typeVariables,
-        formals,
-        computeProcedureKind(getOrSet),
-        startCharOffset,
-        charOffset,
-        formalsOffset,
-        endToken.charOffset,
-        nativeMethodName,
-        asyncModifier,
-        isInstanceMember: false,
-        isExtensionMember: false);
-    nativeMethodName = null;
+        .resolveNamedTypes(typeVariables, libraryBuilder);
+    if (name is! ParserRecovery) {
+      final int startCharOffset =
+          metadata == null ? beginToken.charOffset : metadata.first.charOffset;
+      libraryBuilder.addProcedure(
+          metadata,
+          modifiers,
+          returnType,
+          name as String,
+          typeVariables,
+          formals,
+          computeProcedureKind(getOrSet),
+          startCharOffset,
+          charOffset,
+          formalsOffset,
+          endToken.charOffset,
+          nativeMethodName,
+          asyncModifier,
+          isInstanceMember: false,
+          isExtensionMember: false);
+      nativeMethodName = null;
+    }
+    popDeclarationContext(DeclarationContext.TopLevelMethod);
   }
 
   @override
@@ -1101,6 +1411,7 @@
 
   @override
   void beginMethod(
+      DeclarationKind declarationKind,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1110,6 +1421,45 @@
     inConstructor =
         name.lexeme == libraryBuilder.currentTypeParameterScopeBuilder.name &&
             getOrSet == null;
+    DeclarationContext declarationContext;
+    switch (declarationKind) {
+      case DeclarationKind.TopLevel:
+        assert(
+            false,
+            "Expected top level method to be handled by "
+            "`beginTopLevelMethod`.");
+        declarationContext = DeclarationContext.TopLevelMethod;
+        break;
+      case DeclarationKind.Class:
+        if (inConstructor) {
+          declarationContext = DeclarationContext.ClassConstructor;
+        } else if (staticToken != null) {
+          declarationContext = DeclarationContext.ClassStaticMethod;
+        } else {
+          declarationContext = DeclarationContext.ClassInstanceMethod;
+        }
+        break;
+      case DeclarationKind.Mixin:
+        if (inConstructor) {
+          declarationContext = DeclarationContext.MixinConstructor;
+        } else if (staticToken != null) {
+          declarationContext = DeclarationContext.MixinStaticMethod;
+        } else {
+          declarationContext = DeclarationContext.MixinInstanceMethod;
+        }
+        break;
+      case DeclarationKind.Extension:
+        if (inConstructor) {
+          declarationContext = DeclarationContext.ExtensionConstructor;
+        } else if (staticToken != null) {
+          declarationContext = DeclarationContext.ExtensionStaticMethod;
+        } else {
+          declarationContext = DeclarationContext.ExtensionInstanceMethod;
+        }
+        break;
+    }
+    pushDeclarationContext(declarationContext);
+
     List<Modifier>? modifiers;
     if (externalToken != null) {
       modifiers ??= <Modifier>[];
@@ -1140,9 +1490,15 @@
     }
     push(varFinalOrConst?.charOffset ?? -1);
     push(modifiers ?? NullValue.Modifiers);
-    libraryBuilder.beginNestedDeclaration(
-        TypeParameterScopeKind.staticOrInstanceMethodOrConstructor, "#method",
-        hasMembers: false);
+    TypeParameterScopeKind kind;
+    if (inConstructor) {
+      kind = TypeParameterScopeKind.constructor;
+    } else if (staticToken != null) {
+      kind = TypeParameterScopeKind.staticMethod;
+    } else {
+      kind = TypeParameterScopeKind.instanceMethod;
+    }
+    libraryBuilder.beginNestedDeclaration(kind, "#method", hasMembers: false);
   }
 
   @override
@@ -1306,140 +1662,149 @@
     int varFinalOrConstOffset = popCharOffset();
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
 
+    TypeParameterScopeKind scopeKind;
+    if (inConstructor) {
+      scopeKind = TypeParameterScopeKind.constructor;
+    } else if ((modifiers & staticMask) != 0) {
+      scopeKind = TypeParameterScopeKind.staticMethod;
+    } else {
+      scopeKind = TypeParameterScopeKind.instanceMethod;
+    }
     TypeParameterScopeBuilder declarationBuilder =
-        libraryBuilder.endNestedDeclaration(
-            TypeParameterScopeKind.staticOrInstanceMethodOrConstructor,
-            "#method");
+        libraryBuilder.endNestedDeclaration(scopeKind, "#method");
     if (name is ParserRecovery) {
       nativeMethodName = null;
       inConstructor = false;
-      declarationBuilder.resolveTypes(typeVariables, libraryBuilder);
-      return;
-    }
-
-    String? constructorName;
-    switch (methodKind) {
-      case _MethodKind.classConstructor:
-      case _MethodKind.mixinConstructor:
-      case _MethodKind.extensionConstructor:
-        constructorName = libraryBuilder.computeAndValidateConstructorName(
-                name, charOffset) ??
-            name as String?;
-        break;
-      case _MethodKind.classMethod:
-      case _MethodKind.mixinMethod:
-      case _MethodKind.extensionMethod:
-        break;
-    }
-    bool isStatic = (modifiers & staticMask) != 0;
-    if (constructorName == null &&
-        !isStatic &&
-        libraryBuilder.currentTypeParameterScopeBuilder.kind ==
-            TypeParameterScopeKind.extensionDeclaration) {
-      TypeParameterScopeBuilder extension =
-          libraryBuilder.currentTypeParameterScopeBuilder;
-      Map<TypeVariableBuilder, TypeBuilder>? substitution;
-      if (extension.typeVariables != null) {
-        // We synthesize the names of the generated [TypeParameter]s, i.e.
-        // rename 'T' to '#T'. We cannot do it on the builders because their
-        // names are used to create the scope.
-        List<TypeVariableBuilder> synthesizedTypeVariables = libraryBuilder
-            .copyTypeVariables(extension.typeVariables!, declarationBuilder,
-                isExtensionTypeParameter: true);
-        substitution = {};
-        for (int i = 0; i < synthesizedTypeVariables.length; i++) {
-          substitution[extension.typeVariables![i]] =
-              new NamedTypeBuilder.fromTypeDeclarationBuilder(
-                  synthesizedTypeVariables[i],
-                  const NullabilityBuilder.omitted());
-        }
-        if (typeVariables != null) {
-          typeVariables = synthesizedTypeVariables..addAll(typeVariables);
-        } else {
-          typeVariables = synthesizedTypeVariables;
-        }
-      }
-      List<FormalParameterBuilder> synthesizedFormals = [];
-      TypeBuilder thisType = extension.extensionThisType;
-      if (substitution != null) {
-        List<TypeBuilder> unboundTypes = [];
-        List<TypeVariableBuilder> unboundTypeVariables = [];
-        thisType = substitute(thisType, substitution,
-            unboundTypes: unboundTypes,
-            unboundTypeVariables: unboundTypeVariables)!;
-        for (TypeBuilder unboundType in unboundTypes) {
-          extension.addType(new UnresolvedType(
-              unboundType, thisType.charOffset!, thisType.fileUri!));
-        }
-        libraryBuilder.boundlessTypeVariables.addAll(unboundTypeVariables);
-      }
-      synthesizedFormals.add(new FormalParameterBuilder(
-          null, finalMask, thisType, extensionThisName, null, charOffset,
-          fileUri: uri, isExtensionThis: true));
-      if (formals != null) {
-        synthesizedFormals.addAll(formals);
-      }
-      formals = synthesizedFormals;
-    }
-
-    declarationBuilder.resolveTypes(typeVariables, libraryBuilder);
-    if (constructorName != null) {
-      if (isConst &&
-          bodyKind != MethodBody.Abstract &&
-          !libraryBuilder.enableConstFunctionsInLibrary) {
-        addProblem(messageConstConstructorWithBody, varFinalOrConstOffset, 5);
-        modifiers &= ~constMask;
-      }
-      if (returnType != null) {
-        addProblem(messageConstructorWithReturnType,
-            returnType.charOffset ?? beginToken.offset, noLength);
-        returnType = null;
-      }
-      final int startCharOffset =
-          metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-      libraryBuilder.addConstructor(
-          metadata,
-          modifiers,
-          returnType,
-          name,
-          constructorName,
-          typeVariables,
-          formals,
-          startCharOffset,
-          charOffset,
-          formalsOffset,
-          endToken.charOffset,
-          nativeMethodName,
-          beginInitializers: beginInitializers,
-          forAbstractClass: inAbstractClass);
+      declarationBuilder.resolveNamedTypes(typeVariables, libraryBuilder);
     } else {
-      if (isConst) {
-        // TODO(danrubel): consider removing this
-        // because it is an error to have a const method.
-        modifiers &= ~constMask;
+      String? constructorName;
+      switch (methodKind) {
+        case _MethodKind.classConstructor:
+        case _MethodKind.mixinConstructor:
+        case _MethodKind.extensionConstructor:
+          constructorName = libraryBuilder.computeAndValidateConstructorName(
+                  name, charOffset) ??
+              name as String?;
+          break;
+        case _MethodKind.classMethod:
+        case _MethodKind.mixinMethod:
+        case _MethodKind.extensionMethod:
+          break;
       }
-      final int startCharOffset =
-          metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-      bool isExtensionMember = methodKind == _MethodKind.extensionMethod;
-      libraryBuilder.addProcedure(
-          metadata,
-          modifiers,
-          returnType,
-          name as String,
-          typeVariables,
-          formals,
-          kind,
-          startCharOffset,
-          charOffset,
-          formalsOffset,
-          endToken.charOffset,
-          nativeMethodName,
-          asyncModifier,
-          isInstanceMember: !isStatic,
-          isExtensionMember: isExtensionMember);
+      bool isStatic = (modifiers & staticMask) != 0;
+      if (constructorName == null &&
+          !isStatic &&
+          libraryBuilder.currentTypeParameterScopeBuilder.kind ==
+              TypeParameterScopeKind.extensionDeclaration) {
+        TypeParameterScopeBuilder extension =
+            libraryBuilder.currentTypeParameterScopeBuilder;
+        Map<TypeVariableBuilder, TypeBuilder>? substitution;
+        if (extension.typeVariables != null) {
+          // We synthesize the names of the generated [TypeParameter]s, i.e.
+          // rename 'T' to '#T'. We cannot do it on the builders because their
+          // names are used to create the scope.
+          List<TypeVariableBuilder> synthesizedTypeVariables = libraryBuilder
+              .copyTypeVariables(extension.typeVariables!, declarationBuilder,
+                  isExtensionTypeParameter: true);
+          substitution = {};
+          for (int i = 0; i < synthesizedTypeVariables.length; i++) {
+            substitution[extension.typeVariables![i]] =
+                new NamedTypeBuilder.fromTypeDeclarationBuilder(
+                    synthesizedTypeVariables[i],
+                    const NullabilityBuilder.omitted(),
+                    instanceTypeVariableAccess:
+                        declarationContext.instanceTypeVariableAccessState);
+          }
+          if (typeVariables != null) {
+            typeVariables = synthesizedTypeVariables..addAll(typeVariables);
+          } else {
+            typeVariables = synthesizedTypeVariables;
+          }
+        }
+        List<FormalParameterBuilder> synthesizedFormals = [];
+        TypeBuilder thisType = extension.extensionThisType;
+        if (substitution != null) {
+          List<NamedTypeBuilder> unboundTypes = [];
+          List<TypeVariableBuilder> unboundTypeVariables = [];
+          thisType = substitute(thisType, substitution,
+              unboundTypes: unboundTypes,
+              unboundTypeVariables: unboundTypeVariables)!;
+          for (NamedTypeBuilder unboundType in unboundTypes) {
+            extension.registerUnresolvedNamedType(unboundType);
+          }
+          libraryBuilder.unboundTypeVariables.addAll(unboundTypeVariables);
+        }
+        synthesizedFormals.add(new FormalParameterBuilder(
+            null, finalMask, thisType, extensionThisName, null, charOffset,
+            fileUri: uri, isExtensionThis: true));
+        if (formals != null) {
+          synthesizedFormals.addAll(formals);
+        }
+        formals = synthesizedFormals;
+      }
+
+      declarationBuilder.resolveNamedTypes(typeVariables, libraryBuilder);
+      if (constructorName != null) {
+        if (isConst &&
+            bodyKind != MethodBody.Abstract &&
+            !libraryBuilder.enableConstFunctionsInLibrary) {
+          addProblem(messageConstConstructorWithBody, varFinalOrConstOffset, 5);
+          modifiers &= ~constMask;
+        }
+        if (returnType != null) {
+          addProblem(messageConstructorWithReturnType,
+              returnType.charOffset ?? beginToken.offset, noLength);
+          returnType = null;
+        }
+        final int startCharOffset = metadata == null
+            ? beginToken.charOffset
+            : metadata.first.charOffset;
+        libraryBuilder.addConstructor(
+            metadata,
+            modifiers,
+            returnType,
+            name,
+            constructorName,
+            typeVariables,
+            formals,
+            startCharOffset,
+            charOffset,
+            formalsOffset,
+            endToken.charOffset,
+            nativeMethodName,
+            beginInitializers: beginInitializers,
+            forAbstractClass: inAbstractClass);
+      } else {
+        if (isConst) {
+          // TODO(danrubel): consider removing this
+          // because it is an error to have a const method.
+          modifiers &= ~constMask;
+        }
+        final int startCharOffset = metadata == null
+            ? beginToken.charOffset
+            : metadata.first.charOffset;
+        bool isExtensionMember = methodKind == _MethodKind.extensionMethod;
+        libraryBuilder.addProcedure(
+            metadata,
+            modifiers,
+            returnType,
+            name as String,
+            typeVariables,
+            formals,
+            kind,
+            startCharOffset,
+            charOffset,
+            formalsOffset,
+            endToken.charOffset,
+            nativeMethodName,
+            asyncModifier,
+            isInstanceMember: !isStatic,
+            isExtensionMember: isExtensionMember);
+      }
     }
     nativeMethodName = null;
     inConstructor = false;
+    popDeclarationContext();
   }
 
   @override
@@ -1475,64 +1840,65 @@
       libraryBuilder
           .endNestedDeclaration(
               TypeParameterScopeKind.namedMixinApplication, "<syntax-error>")
-          .resolveTypes(typeVariables, libraryBuilder);
-      return;
-    }
-
-    if (libraryBuilder.isNonNullableByDefault) {
-      String classNameForErrors = "${name}";
-      MixinApplicationBuilder mixinApplicationBuilder =
-          mixinApplication as MixinApplicationBuilder;
-      TypeBuilder? supertype = mixinApplicationBuilder.supertype;
-      List<TypeBuilder> mixins = mixinApplicationBuilder.mixins;
-      if (supertype != null && supertype is! MixinApplicationBuilder) {
-        if (supertype.nullabilityBuilder.build(libraryBuilder) ==
-            Nullability.nullable) {
-          libraryBuilder.addProblem(
-              templateNullableSuperclassError
-                  .withArguments(supertype.fullNameForErrors),
-              charOffset,
-              classNameForErrors.length,
-              uri);
-        }
-      }
-      for (TypeBuilder mixin in mixins) {
-        if (mixin.nullabilityBuilder.build(libraryBuilder) ==
-            Nullability.nullable) {
-          libraryBuilder.addProblem(
-              templateNullableMixinError.withArguments(mixin.fullNameForErrors),
-              charOffset,
-              classNameForErrors.length,
-              uri);
-        }
-      }
-      if (interfaces != null) {
-        for (TypeBuilder interface in interfaces) {
-          if (interface.nullabilityBuilder.build(libraryBuilder) ==
+          .resolveNamedTypes(typeVariables, libraryBuilder);
+    } else {
+      if (libraryBuilder.isNonNullableByDefault) {
+        String classNameForErrors = "${name}";
+        MixinApplicationBuilder mixinApplicationBuilder =
+            mixinApplication as MixinApplicationBuilder;
+        TypeBuilder? supertype = mixinApplicationBuilder.supertype;
+        List<TypeBuilder> mixins = mixinApplicationBuilder.mixins;
+        if (supertype != null && supertype is! MixinApplicationBuilder) {
+          if (supertype.nullabilityBuilder.build(libraryBuilder) ==
               Nullability.nullable) {
             libraryBuilder.addProblem(
-                templateNullableInterfaceError
-                    .withArguments(interface.fullNameForErrors),
+                templateNullableSuperclassError
+                    .withArguments(supertype.fullNameForErrors),
                 charOffset,
                 classNameForErrors.length,
                 uri);
           }
         }
+        for (TypeBuilder mixin in mixins) {
+          if (mixin.nullabilityBuilder.build(libraryBuilder) ==
+              Nullability.nullable) {
+            libraryBuilder.addProblem(
+                templateNullableMixinError
+                    .withArguments(mixin.fullNameForErrors),
+                charOffset,
+                classNameForErrors.length,
+                uri);
+          }
+        }
+        if (interfaces != null) {
+          for (TypeBuilder interface in interfaces) {
+            if (interface.nullabilityBuilder.build(libraryBuilder) ==
+                Nullability.nullable) {
+              libraryBuilder.addProblem(
+                  templateNullableInterfaceError
+                      .withArguments(interface.fullNameForErrors),
+                  charOffset,
+                  classNameForErrors.length,
+                  uri);
+            }
+          }
+        }
       }
-    }
 
-    int startCharOffset = beginToken.charOffset;
-    int charEndOffset = endToken.charOffset;
-    libraryBuilder.addNamedMixinApplication(
-        metadata,
-        name as String,
-        typeVariables,
-        modifiers,
-        mixinApplication as TypeBuilder?,
-        interfaces,
-        startCharOffset,
-        charOffset,
-        charEndOffset);
+      int startCharOffset = beginToken.charOffset;
+      int charEndOffset = endToken.charOffset;
+      libraryBuilder.addNamedMixinApplication(
+          metadata,
+          name as String,
+          typeVariables,
+          modifiers,
+          mixinApplication as TypeBuilder?,
+          interfaces,
+          startCharOffset,
+          charOffset,
+          charEndOffset);
+    }
+    popDeclarationContext(DeclarationContext.NamedMixinApplication);
   }
 
   @override
@@ -1578,7 +1944,9 @@
           name,
           libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable),
           arguments,
-          charOffset));
+          charOffset,
+          instanceTypeVariableAccess:
+              declarationContext.instanceTypeVariableAccessState));
     }
   }
 
@@ -1786,6 +2154,11 @@
   }
 
   @override
+  void beginEnum(Token enumKeyword) {
+    pushDeclarationContext(DeclarationContext.Enum);
+  }
+
+  @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
     debugEvent("Enum");
     List<EnumConstantInfo?>? enumConstantInfos =
@@ -1795,13 +2168,16 @@
     Object? name = pop();
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     checkEmpty(enumKeyword.charOffset);
-    if (name is ParserRecovery) return;
-    libraryBuilder.addEnum(metadata, name as String, enumConstantInfos,
-        startCharOffset, charOffset, leftBrace.endGroup!.charOffset);
+    if (name is! ParserRecovery) {
+      libraryBuilder.addEnum(metadata, name as String, enumConstantInfos,
+          startCharOffset, charOffset, leftBrace.endGroup!.charOffset);
+    }
+    popDeclarationContext(DeclarationContext.Enum);
   }
 
   @override
-  void beginFunctionTypeAlias(Token token) {
+  void beginTypedef(Token token) {
+    pushDeclarationContext(DeclarationContext.Typedef);
     libraryBuilder.beginNestedDeclaration(
         TypeParameterScopeKind.typedef, "#typedef",
         hasMembers: false);
@@ -1866,8 +2242,7 @@
   }
 
   @override
-  void endFunctionTypeAlias(
-      Token typedefKeyword, Token? equals, Token endToken) {
+  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
     debugEvent("endFunctionTypeAlias");
     List<TypeVariableBuilder>? typeVariables;
     Object? name;
@@ -1888,7 +2263,8 @@
         libraryBuilder
             .endNestedDeclaration(
                 TypeParameterScopeKind.typedef, "<syntax-error>")
-            .resolveTypes(typeVariables, libraryBuilder);
+            .resolveNamedTypes(typeVariables, libraryBuilder);
+        popDeclarationContext(DeclarationContext.Typedef);
         return;
       }
       libraryBuilder.beginNestedDeclaration(
@@ -1907,7 +2283,8 @@
         libraryBuilder
             .endNestedDeclaration(
                 TypeParameterScopeKind.functionType, "<syntax-error>")
-            .resolveTypes(typeVariables, libraryBuilder);
+            .resolveNamedTypes(typeVariables, libraryBuilder);
+        popDeclarationContext(DeclarationContext.Typedef);
         return;
       }
       if (type is FunctionTypeBuilder &&
@@ -1937,12 +2314,64 @@
       } else {
         // TODO(ahe): Improve this error message.
         addProblem(messageTypedefNotFunction, equals.charOffset, equals.length);
+        aliasedType = new NamedTypeBuilder.fromTypeDeclarationBuilder(
+            new InvalidTypeDeclarationBuilder(
+                "${name}",
+                messageTypedefNotType.withLocation(
+                    uri, equals.charOffset, equals.length)),
+            const NullabilityBuilder.omitted(),
+            instanceTypeVariableAccess:
+                InstanceTypeVariableAccessState.Allowed);
       }
     }
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     checkEmpty(typedefKeyword.charOffset);
     libraryBuilder.addFunctionTypeAlias(
         metadata, name as String, typeVariables, aliasedType, charOffset);
+    popDeclarationContext(DeclarationContext.Typedef);
+  }
+
+  @override
+  void beginFields(
+      DeclarationKind declarationKind,
+      Token? abstractToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      Token lastConsumed) {
+    DeclarationContext declarationContext;
+    switch (declarationKind) {
+      case DeclarationKind.TopLevel:
+        declarationContext = DeclarationContext.TopLevelField;
+        break;
+      case DeclarationKind.Class:
+        if (staticToken != null) {
+          declarationContext = DeclarationContext.ClassStaticField;
+        } else {
+          declarationContext = DeclarationContext.ClassInstanceField;
+        }
+        break;
+      case DeclarationKind.Mixin:
+        if (staticToken != null) {
+          declarationContext = DeclarationContext.MixinStaticField;
+        } else {
+          declarationContext = DeclarationContext.MixinInstanceField;
+        }
+        break;
+      case DeclarationKind.Extension:
+        if (staticToken != null) {
+          declarationContext = DeclarationContext.ExtensionStaticField;
+        } else if (externalToken != null) {
+          declarationContext =
+              DeclarationContext.ExtensionExternalInstanceField;
+        } else {
+          declarationContext = DeclarationContext.ExtensionInstanceField;
+        }
+        break;
+    }
+    pushDeclarationContext(declarationContext);
   }
 
   @override
@@ -1979,9 +2408,11 @@
         Modifier.validateVarFinalOrConst(varFinalOrConst?.lexeme);
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     checkEmpty(beginToken.charOffset);
-    if (fieldInfos == null) return;
-    libraryBuilder.addFields(
-        metadata, modifiers, /* isTopLevel = */ true, type, fieldInfos);
+    if (fieldInfos != null) {
+      libraryBuilder.addFields(
+          metadata, modifiers, /* isTopLevel = */ true, type, fieldInfos);
+    }
+    popDeclarationContext();
   }
 
   @override
@@ -2040,9 +2471,11 @@
       modifiers &= ~constMask;
     }
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
-    if (fieldInfos == null) return;
-    libraryBuilder.addFields(
-        metadata, modifiers, /* isTopLevel = */ false, type, fieldInfos);
+    if (fieldInfos != null) {
+      libraryBuilder.addFields(
+          metadata, modifiers, /* isTopLevel = */ false, type, fieldInfos);
+    }
+    popDeclarationContext();
   }
 
   List<FieldInfo>? popFieldInfos(int count) {
@@ -2161,7 +2594,10 @@
                 const NullabilityBuilder.omitted(),
                 null,
                 uri,
-                builder.charOffset)
+                builder.charOffset,
+                instanceTypeVariableAccess:
+                    //InstanceTypeVariableAccessState.Unexpected
+                    declarationContext.instanceTypeVariableAccessState)
               ..bind(new InvalidTypeDeclarationBuilder(
                   builder.name,
                   message.withLocation(
@@ -2212,8 +2648,24 @@
   }
 
   @override
-  void beginFactoryMethod(
-      Token lastConsumed, Token? externalToken, Token? constToken) {
+  void beginFactoryMethod(DeclarationKind declarationKind, Token lastConsumed,
+      Token? externalToken, Token? constToken) {
+    DeclarationContext declarationContext;
+    switch (declarationKind) {
+      case DeclarationKind.TopLevel:
+        throw new UnsupportedError("Unexpected top level factory method.");
+      case DeclarationKind.Class:
+        declarationContext = DeclarationContext.ClassFactory;
+        break;
+      case DeclarationKind.Mixin:
+        declarationContext = DeclarationContext.MixinFactory;
+        break;
+      case DeclarationKind.Extension:
+        declarationContext = DeclarationContext.ExtensionFactory;
+        break;
+    }
+
+    pushDeclarationContext(declarationContext);
     inConstructor = true;
     libraryBuilder.beginNestedDeclaration(
         TypeParameterScopeKind.factoryMethod, "#factory_method",
@@ -2222,8 +2674,7 @@
         (constToken != null ? constMask : 0));
   }
 
-  @override
-  void endClassFactoryMethod(
+  void _endFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     debugEvent("ClassFactoryMethod");
     MethodBody kind = pop() as MethodBody;
@@ -2247,23 +2698,42 @@
     if (name is ParserRecovery) {
       libraryBuilder.endNestedDeclaration(
           TypeParameterScopeKind.factoryMethod, "<syntax-error>");
-      return;
+    } else {
+      libraryBuilder.addFactoryMethod(
+        metadata,
+        modifiers,
+        name,
+        formals,
+        redirectionTarget,
+        beginToken.charOffset,
+        charOffset,
+        formalsOffset,
+        endToken.charOffset,
+        nativeMethodName,
+        asyncModifier,
+      );
     }
-    libraryBuilder.addFactoryMethod(
-      metadata,
-      modifiers,
-      name,
-      formals,
-      redirectionTarget,
-      beginToken.charOffset,
-      charOffset,
-      formalsOffset,
-      endToken.charOffset,
-      nativeMethodName,
-      asyncModifier,
-    );
     nativeMethodName = null;
     inConstructor = false;
+    popDeclarationContext();
+  }
+
+  @override
+  void endClassFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    _endFactoryMethod(beginToken, factoryKeyword, endToken);
+  }
+
+  @override
+  void endMixinFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    _endFactoryMethod(beginToken, factoryKeyword, endToken);
+  }
+
+  @override
+  void endExtensionFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    _endFactoryMethod(beginToken, factoryKeyword, endToken);
   }
 
   @override
@@ -2368,9 +2838,10 @@
   }
 
   @override
-  void endClassOrMixinBody(
+  void endClassOrMixinOrExtensionBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
     debugEvent("ClassOrMixinBody");
+    popDeclarationContext();
   }
 
   @override
@@ -2411,6 +2882,7 @@
   }
 }
 
+/// TODO(johnniwinther): Use [DeclarationContext] instead of [_MethodKind].
 enum _MethodKind {
   classConstructor,
   classMethod,
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 448fe67..a7d6ce8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -10,7 +10,12 @@
 import 'package:kernel/src/bounds_checks.dart';
 import 'package:kernel/src/legacy_erasure.dart';
 import 'package:kernel/src/types.dart' show Types;
-import 'package:kernel/type_algebra.dart' show Substitution;
+import 'package:kernel/type_algebra.dart'
+    show
+        FreshTypeParameters,
+        Substitution,
+        getFreshTypeParameters,
+        updateBoundNullabilities;
 import 'package:kernel/type_environment.dart';
 
 import '../builder/builder.dart';
@@ -334,7 +339,9 @@
           const NullabilityBuilder.omitted(),
           /* arguments = */ null,
           fileUri,
-          charOffset)
+          charOffset,
+          instanceTypeVariableAccess:
+              InstanceTypeVariableAccessState.Unexpected)
         ..bind(new InvalidTypeDeclarationBuilder(supertype.name as String,
             message.withLocation(fileUri, charOffset, noLength)));
     }
@@ -901,8 +908,8 @@
     }
     Field field = constructorsField.field;
     ListLiteral literal = field.initializer as ListLiteral;
-    literal.expressions
-        .add(new StaticGet(constructorBuilder.member)..parent = literal);
+    literal.expressions.add(
+        new ConstructorTearOff(constructorBuilder.member)..parent = literal);
   }
 
   @override
@@ -1285,16 +1292,34 @@
     } else if (declaredFunction?.typeParameters != null) {
       Map<TypeParameter, DartType> substitutionMap =
           <TypeParameter, DartType>{};
+
+      // Since the bound of `interfaceFunction!.parameter[i]` may have changed
+      // during substitution, it can affect the nullabilities of the types in
+      // the substitution map. The first parameter to
+      // [TypeParameterType.forAlphaRenaming] should be updated to account for
+      // the change.
+      List<TypeParameter> interfaceTypeParameters;
+      if (interfaceSubstitution == null) {
+        interfaceTypeParameters = interfaceFunction!.typeParameters;
+      } else {
+        FreshTypeParameters freshTypeParameters =
+            getFreshTypeParameters(interfaceFunction!.typeParameters);
+        interfaceTypeParameters = freshTypeParameters.freshTypeParameters;
+        for (TypeParameter parameter in interfaceTypeParameters) {
+          parameter.bound =
+              interfaceSubstitution.substituteType(parameter.bound);
+        }
+        updateBoundNullabilities(interfaceTypeParameters);
+      }
       for (int i = 0; i < declaredFunction!.typeParameters.length; ++i) {
-        substitutionMap[interfaceFunction!.typeParameters[i]] =
+        substitutionMap[interfaceFunction.typeParameters[i]] =
             new TypeParameterType.forAlphaRenaming(
-                interfaceFunction.typeParameters[i],
-                declaredFunction.typeParameters[i]);
+                interfaceTypeParameters[i], declaredFunction.typeParameters[i]);
       }
       Substitution substitution = Substitution.fromMap(substitutionMap);
       for (int i = 0; i < declaredFunction.typeParameters.length; ++i) {
         TypeParameter declaredParameter = declaredFunction.typeParameters[i];
-        TypeParameter interfaceParameter = interfaceFunction!.typeParameters[i];
+        TypeParameter interfaceParameter = interfaceFunction.typeParameters[i];
         if (!interfaceParameter.isCovariantByClass) {
           DartType declaredBound = declaredParameter.bound;
           DartType interfaceBound = interfaceParameter.bound;
@@ -1479,7 +1504,9 @@
         declaredMember.kind == ProcedureKind.Operator);
     bool seenCovariant = false;
     FunctionNode declaredFunction = declaredMember.function;
+    FunctionType? declaredSignatureType = declaredMember.signatureType;
     FunctionNode interfaceFunction = interfaceMember.function;
+    FunctionType? interfaceSignatureType = interfaceMember.signatureType;
 
     Substitution? interfaceSubstitution = _computeInterfaceSubstitution(
         types,
@@ -1553,9 +1580,17 @@
           declaredFunction.positionalParameters[i];
       VariableDeclaration interfaceParameter =
           interfaceFunction.positionalParameters[i];
+      DartType declaredParameterType = declaredParameter.type;
+      if (declaredSignatureType != null) {
+        declaredParameterType = declaredSignatureType.positionalParameters[i];
+      }
+      DartType interfaceParameterType = interfaceParameter.type;
+      if (interfaceSignatureType != null) {
+        interfaceParameterType = interfaceSignatureType.positionalParameters[i];
+      }
       if (i == 0 &&
           declaredMember.name == equalsName &&
-          declaredParameter.type ==
+          declaredParameterType ==
               types.hierarchy.coreTypes.objectNonNullableRawType &&
           interfaceParameter.type is DynamicType) {
         // TODO(johnniwinther): Add check for opt-in overrides of operator ==.
@@ -1571,8 +1606,8 @@
           declaredMember,
           interfaceMember,
           interfaceMemberOrigin,
-          declaredParameter.type,
-          interfaceParameter.type,
+          declaredParameterType,
+          interfaceParameterType,
           declaredParameter.isCovariantByDeclaration ||
               interfaceParameter.isCovariantByDeclaration,
           declaredParameter,
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index dbecaaa..da6208a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -64,7 +64,6 @@
 import '../builder/type_builder.dart';
 import '../builder/type_declaration_builder.dart';
 import '../builder/type_variable_builder.dart';
-import '../builder/unresolved_type.dart';
 import '../builder/void_type_declaration_builder.dart';
 
 import '../combinator.dart' show CombinatorBuilder;
@@ -82,6 +81,7 @@
 import '../import.dart' show Import;
 
 import '../kernel/class_hierarchy_builder.dart';
+import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/implicit_field_type.dart';
 import '../kernel/internal_ast.dart';
 import '../kernel/load_library_builder.dart';
@@ -101,6 +101,7 @@
     show
         abstractMask,
         constMask,
+        externalMask,
         finalMask,
         declaresConstConstructorMask,
         hasInitializerMask,
@@ -132,7 +133,7 @@
   @override
   final SourceLoader loader;
 
-  final TypeParameterScopeBuilder libraryDeclaration;
+  final TypeParameterScopeBuilder _libraryTypeParameterScopeBuilder;
 
   final List<ConstructorReferenceBuilder> constructorReferences =
       <ConstructorReferenceBuilder>[];
@@ -183,7 +184,7 @@
 
   final List<FunctionBuilder> nativeMethods = <FunctionBuilder>[];
 
-  final List<TypeVariableBuilder> boundlessTypeVariables =
+  final List<TypeVariableBuilder> unboundTypeVariables =
       <TypeVariableBuilder>[];
 
   final List<UncheckedTypedefType> uncheckedTypedefTypes =
@@ -282,18 +283,18 @@
       this.fileUri,
       this._packageUri,
       this.packageLanguageVersion,
-      this.libraryDeclaration,
+      this._libraryTypeParameterScopeBuilder,
       this.importScope,
       this.actualOrigin,
       this.library,
       this._nameOrigin,
       this.referencesFrom)
       : _languageVersion = packageLanguageVersion,
-        currentTypeParameterScopeBuilder = libraryDeclaration,
+        currentTypeParameterScopeBuilder = _libraryTypeParameterScopeBuilder,
         referencesFromIndexed =
             referencesFrom == null ? null : new IndexedLibrary(referencesFrom),
-        super(
-            fileUri, libraryDeclaration.toScope(importScope), new Scope.top()) {
+        super(fileUri, _libraryTypeParameterScopeBuilder.toScope(importScope),
+            new Scope.top()) {
     assert(
         _packageUri == null ||
             importUri.scheme != 'package' ||
@@ -306,6 +307,9 @@
         "'${importUri}'.");
   }
 
+  TypeParameterScopeBuilder get libraryTypeParameterScopeBuilderForTesting =>
+      _libraryTypeParameterScopeBuilder;
+
   bool? _enableConstFunctionsInLibrary;
   bool? _enableVarianceInLibrary;
   bool? _enableNonfunctionTypeAliasesInLibrary;
@@ -313,11 +317,13 @@
   Version? _enableNonNullableVersionInLibrary;
   Version? _enableConstructorTearoffsVersionInLibrary;
   Version? _enableExtensionTypesVersionInLibrary;
+  Version? _enableNamedArgumentsAnywhereVersionInLibrary;
   bool? _enableTripleShiftInLibrary;
   bool? _enableExtensionMethodsInLibrary;
   bool? _enableGenericMetadataInLibrary;
   bool? _enableExtensionTypesInLibrary;
   bool? _enableConstructorTearOffsInLibrary;
+  bool? _enableNamedArgumentsAnywhereInLibrary;
 
   bool get enableConstFunctionsInLibrary => _enableConstFunctionsInLibrary ??=
       loader.target.isExperimentEnabledInLibraryByVersion(
@@ -392,6 +398,19 @@
           .getExperimentEnabledVersionInLibrary(
               ExperimentalFlag.extensionTypes, _packageUri ?? importUri);
 
+  bool get enableNamedArgumentsAnywhereInLibrary =>
+      _enableNamedArgumentsAnywhereInLibrary ??= loader.target
+          .isExperimentEnabledInLibraryByVersion(
+              ExperimentalFlag.namedArgumentsAnywhere,
+              _packageUri ?? importUri,
+              languageVersion.version);
+
+  Version get enableNamedArgumentsAnywhereVersionInLibrary =>
+      _enableNamedArgumentsAnywhereVersionInLibrary ??= loader.target
+          .getExperimentEnabledVersionInLibrary(
+              ExperimentalFlag.namedArgumentsAnywhere,
+              _packageUri ?? importUri);
+
   void _updateLibraryNNBDSettings() {
     library.isNonNullableByDefault = isNonNullableByDefault;
     switch (loader.nnbdMode) {
@@ -444,14 +463,14 @@
   @override
   bool get isPart => partOfName != null || partOfUri != null;
 
-  List<UnresolvedType> get types => libraryDeclaration.types;
+  List<NamedTypeBuilder> get unresolvedNamedTypes =>
+      _libraryTypeParameterScopeBuilder.unresolvedNamedTypes;
 
   @override
   bool get isSynthetic => accessProblem != null;
 
-  T addType<T extends TypeBuilder>(T type, int charOffset) {
-    currentTypeParameterScopeBuilder
-        .addType(new UnresolvedType(type, charOffset, fileUri));
+  NamedTypeBuilder registerUnresolvedNamedType(NamedTypeBuilder type) {
+    currentTypeParameterScopeBuilder.registerUnresolvedNamedType(type);
     return type;
   }
 
@@ -672,7 +691,7 @@
     if (!loader.target.uriTranslator.isLibrarySupported(dottedName)) return "";
 
     LibraryBuilder? imported =
-        loader.builders[new Uri(scheme: "dart", path: dottedName)];
+        loader.lookupLibraryBuilder(new Uri(scheme: "dart", path: dottedName));
 
     if (imported == null) {
       LibraryBuilder coreLibrary = loader.read(
@@ -680,8 +699,8 @@
               new Uri(scheme: "dart", path: "core").toString(), -1),
           -1,
           accessor: loader.first);
-      imported = coreLibrary
-          .loader.builders[new Uri(scheme: 'dart', path: dottedName)];
+      imported = coreLibrary.loader
+          .lookupLibraryBuilder(new Uri(scheme: 'dart', path: dottedName));
     }
     return imported != null && !imported.isSynthetic ? "true" : "";
   }
@@ -805,7 +824,7 @@
     if (setterReference != null) {
       loader.buildersCreatedWithReferences[setterReference] = declaration;
     }
-    if (currentTypeParameterScopeBuilder == libraryDeclaration) {
+    if (currentTypeParameterScopeBuilder == _libraryTypeParameterScopeBuilder) {
       if (declaration is MemberBuilder) {
         declaration.parent = this;
       } else if (declaration is TypeDeclarationBuilder) {
@@ -817,7 +836,8 @@
             "${declaration.runtimeType}", "addBuilder", charOffset, fileUri);
       }
     } else {
-      assert(currentTypeParameterScopeBuilder.parent == libraryDeclaration);
+      assert(currentTypeParameterScopeBuilder.parent ==
+          _libraryTypeParameterScopeBuilder);
     }
     bool isConstructor = declaration is FunctionBuilder &&
         (declaration.isConstructor || declaration.isFactory);
@@ -1230,7 +1250,7 @@
           addBuilder(name, declaration, declaration.charOffset);
         }
       }
-      types.addAll(part.types);
+      unresolvedNamedTypes.addAll(part.unresolvedNamedTypes);
       constructorReferences.addAll(part.constructorReferences);
       part.partOfLibrary = this;
       part.scope.becomePartOf(scope);
@@ -1243,7 +1263,7 @@
       exporters.addAll(part.exporters);
 
       nativeMethods.addAll(part.nativeMethods);
-      boundlessTypeVariables.addAll(part.boundlessTypeVariables);
+      unboundTypeVariables.addAll(part.unboundTypeVariables);
       // Check that the targets are different. This is not normally a problem
       // but is for patch files.
       if (library != part.library && part.library.problemsAsJson != null) {
@@ -1329,7 +1349,7 @@
           default:
             if (member is InvalidTypeDeclarationBuilder) {
               unserializableExports ??= <String, String>{};
-              unserializableExports![name] = member.message.message;
+              unserializableExports![name] = member.message.problemMessage;
             } else {
               // Eventually (in #buildBuilder) members aren't added to the
               // library if the have 'next' pointers, so don't add them as
@@ -1389,15 +1409,16 @@
     }
   }
 
-  /// Resolves all unresolved types in [types]. The list of types is cleared
-  /// when done.
+  /// Resolves all unresolved types in [unresolvedNamedTypes]. The list of types
+  /// is cleared when done.
   int resolveTypes() {
-    int typeCount = types.length;
-    for (UnresolvedType t in types) {
-      t.resolveIn(scope, this);
-      t.checkType(this);
+    int typeCount = unresolvedNamedTypes.length;
+    for (NamedTypeBuilder namedType in unresolvedNamedTypes) {
+      namedType.resolveIn(
+          scope, namedType.charOffset!, namedType.fileUri!, this);
+      namedType.check(this, namedType.charOffset!, namedType.fileUri!);
     }
-    types.clear();
+    unresolvedNamedTypes.clear();
     return typeCount;
   }
 
@@ -1477,24 +1498,23 @@
   }
 
   TypeBuilder addNamedType(Object name, NullabilityBuilder nullabilityBuilder,
-      List<TypeBuilder>? arguments, int charOffset) {
-    return addType(
-        new NamedTypeBuilder(
-            name, nullabilityBuilder, arguments, fileUri, charOffset),
-        charOffset);
+      List<TypeBuilder>? arguments, int charOffset,
+      {required InstanceTypeVariableAccessState instanceTypeVariableAccess}) {
+    return registerUnresolvedNamedType(new NamedTypeBuilder(
+        name, nullabilityBuilder, arguments, fileUri, charOffset,
+        instanceTypeVariableAccess: instanceTypeVariableAccess));
   }
 
   TypeBuilder addMixinApplication(
       TypeBuilder? supertype, List<TypeBuilder> mixins, int charOffset) {
-    return addType(
-        new MixinApplicationBuilder(supertype, mixins, fileUri, charOffset),
-        charOffset);
+    return new MixinApplicationBuilder(supertype, mixins, fileUri, charOffset);
   }
 
   TypeBuilder addVoidType(int charOffset) {
     // 'void' is always nullable.
     return addNamedType(
-        "void", const NullabilityBuilder.nullable(), null, charOffset)
+        "void", const NullabilityBuilder.nullable(), null, charOffset,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
       ..bind(
           new VoidTypeDeclarationBuilder(const VoidType(), this, charOffset));
   }
@@ -1655,8 +1675,8 @@
     // Nested declaration began in `OutlineBuilder.beginClassDeclaration`.
     TypeParameterScopeBuilder declaration =
         endNestedDeclaration(kind, className)
-          ..resolveTypes(typeVariables, this);
-    assert(declaration.parent == libraryDeclaration);
+          ..resolveNamedTypes(typeVariables, this);
+    assert(declaration.parent == _libraryTypeParameterScopeBuilder);
     Map<String, Builder> members = declaration.members!;
     Map<String, MemberBuilder> constructors = declaration.constructors!;
     Map<String, MemberBuilder> setters = declaration.setters!;
@@ -1885,8 +1905,8 @@
     // Nested declaration began in `OutlineBuilder.beginExtensionDeclaration`.
     TypeParameterScopeBuilder declaration = endNestedDeclaration(
         TypeParameterScopeKind.extensionDeclaration, extensionName)
-      ..resolveTypes(typeVariables, this);
-    assert(declaration.parent == libraryDeclaration);
+      ..resolveNamedTypes(typeVariables, this);
+    assert(declaration.parent == _libraryTypeParameterScopeBuilder);
     Map<String, Builder> members = declaration.members!;
     Map<String, MemberBuilder> constructors = declaration.constructors!;
     Map<String, MemberBuilder> setters = declaration.setters!;
@@ -2101,7 +2121,7 @@
             applicationTypeVariables = copyTypeVariables(
                 typeVariables!, currentTypeParameterScopeBuilder);
 
-            List<TypeBuilder> newTypes = <TypeBuilder>[];
+            List<NamedTypeBuilder> newTypes = <NamedTypeBuilder>[];
             if (supertype is NamedTypeBuilder && supertype.arguments != null) {
               for (int i = 0; i < supertype.arguments!.length; ++i) {
                 supertype.arguments![i] = supertype.arguments![i]
@@ -2114,21 +2134,23 @@
                     .clone(newTypes, this, currentTypeParameterScopeBuilder);
               }
             }
-            for (TypeBuilder newType in newTypes) {
-              currentTypeParameterScopeBuilder.addType(new UnresolvedType(
-                  newType, newType.charOffset!, newType.fileUri!));
+            for (NamedTypeBuilder newType in newTypes) {
+              currentTypeParameterScopeBuilder
+                  .registerUnresolvedNamedType(newType);
             }
 
             TypeParameterScopeBuilder mixinDeclaration = this
                 .endNestedDeclaration(
                     TypeParameterScopeKind.unnamedMixinApplication,
                     "mixin application");
-            mixinDeclaration.resolveTypes(applicationTypeVariables, this);
+            mixinDeclaration.resolveNamedTypes(applicationTypeVariables, this);
 
             applicationTypeArguments = <TypeBuilder>[];
             for (TypeVariableBuilder typeVariable in typeVariables) {
               applicationTypeArguments.add(addNamedType(typeVariable.name,
-                  const NullabilityBuilder.omitted(), null, charOffset)
+                  const NullabilityBuilder.omitted(), null, charOffset,
+                  instanceTypeVariableAccess:
+                      InstanceTypeVariableAccessState.Allowed)
                 ..bind(
                     // The type variable types passed as arguments to the
                     // generic class representing the anonymous mixin
@@ -2185,7 +2207,9 @@
         addBuilder(fullname, application, charOffset,
             getterReference: referencesFromIndexedClass?.cls.reference);
         supertype = addNamedType(fullname, const NullabilityBuilder.omitted(),
-            applicationTypeArguments, charOffset);
+            applicationTypeArguments, charOffset,
+            instanceTypeVariableAccess:
+                InstanceTypeVariableAccessState.Allowed);
       }
       return supertype;
     } else {
@@ -2205,7 +2229,7 @@
       int charEndOffset) {
     // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
     endNestedDeclaration(TypeParameterScopeKind.namedMixinApplication, name)
-        .resolveTypes(typeVariables, this);
+        .resolveNamedTypes(typeVariables, this);
     TypeBuilder supertype = applyMixins(mixinApplication, startCharOffset,
         charOffset, charEndOffset, name, false,
         metadata: metadata,
@@ -2230,11 +2254,18 @@
     if (hasInitializer) {
       modifiers |= hasInitializerMask;
     }
-    final bool fieldIsLateWithLowering = (modifiers & lateMask) != 0 &&
-        loader.target.backendTarget.isLateFieldLoweringEnabled(
-            hasInitializer: hasInitializer,
-            isFinal: (modifiers & finalMask) != 0,
-            isStatic: isTopLevel || (modifiers & staticMask) != 0);
+    bool isLate = (modifiers & lateMask) != 0;
+    bool isFinal = (modifiers & finalMask) != 0;
+    bool isStatic = (modifiers & staticMask) != 0;
+    bool isExternal = (modifiers & externalMask) != 0;
+    final bool fieldIsLateWithLowering = isLate &&
+        (loader.target.backendTarget.isLateFieldLoweringEnabled(
+                hasInitializer: hasInitializer,
+                isFinal: isFinal,
+                isStatic: isTopLevel || isStatic) ||
+            (loader.target.backendTarget.useStaticFieldLowering &&
+                (isStatic || isTopLevel)));
+
     final bool isInstanceMember = currentTypeParameterScopeBuilder.kind !=
             TypeParameterScopeKind.library &&
         (modifiers & staticMask) == 0;
@@ -2267,13 +2298,25 @@
     if (referencesFrom != null) {
       IndexedContainer indexedContainer =
           (_currentClassReferencesFromIndexed ?? referencesFromIndexed)!;
-      Name nameToLookupName = nameScheme.getFieldName(FieldNameType.Field, name,
-          isSynthesized: fieldIsLateWithLowering);
-      fieldReference = indexedContainer.lookupFieldReference(nameToLookupName);
-      fieldGetterReference =
-          indexedContainer.lookupGetterReference(nameToLookupName);
-      fieldSetterReference =
-          indexedContainer.lookupSetterReference(nameToLookupName);
+      if (isExtensionMember && isInstanceMember && isExternal) {
+        /// An external extension instance field is special. It is treated
+        /// as an external getter/setter pair and is therefore encoded as a pair
+        /// of top level methods using the extension instance member naming
+        /// convention.
+        fieldGetterReference = indexedContainer.lookupGetterReference(
+            nameScheme.getProcedureName(ProcedureKind.Getter, name));
+        fieldSetterReference = indexedContainer.lookupGetterReference(
+            nameScheme.getProcedureName(ProcedureKind.Setter, name));
+      } else {
+        Name nameToLookup = nameScheme.getFieldName(FieldNameType.Field, name,
+            isSynthesized: fieldIsLateWithLowering);
+        fieldReference = indexedContainer.lookupFieldReference(nameToLookup);
+        fieldGetterReference =
+            indexedContainer.lookupGetterReference(nameToLookup);
+        fieldSetterReference =
+            indexedContainer.lookupSetterReference(nameToLookup);
+      }
+
       if (fieldIsLateWithLowering) {
         Name lateIsSetName = nameScheme.getFieldName(
             FieldNameType.IsSetField, name,
@@ -2347,10 +2390,14 @@
       String? nativeMethodName,
       {Token? beginInitializers,
       required bool forAbstractClass}) {
-    Member? referenceFrom;
+    Reference? constructorReference;
+    Reference? tearOffReference;
     if (_currentClassReferencesFromIndexed != null) {
-      referenceFrom = _currentClassReferencesFromIndexed!.lookupConstructor(
-          new Name(
+      constructorReference = _currentClassReferencesFromIndexed!
+          .lookupConstructorReference(new Name(
+              constructorName, _currentClassReferencesFromIndexed!.library));
+      tearOffReference = _currentClassReferencesFromIndexed!
+          .lookupGetterReference(constructorTearOffName(
               constructorName, _currentClassReferencesFromIndexed!.library));
     }
     ConstructorBuilder constructorBuilder = new SourceConstructorBuilder(
@@ -2365,12 +2412,14 @@
         charOffset,
         charOpenParenOffset,
         charEndOffset,
-        referenceFrom,
+        constructorReference,
+        tearOffReference,
         nativeMethodName: nativeMethodName,
         forAbstractClassOrEnum: forAbstractClass);
     checkTypeVariables(typeVariables, constructorBuilder);
+    // TODO(johnniwinther): There is no way to pass the tear off reference here.
     addBuilder(constructorName, constructorBuilder, charOffset,
-        getterReference: referenceFrom?.reference);
+        getterReference: constructorReference);
     if (nativeMethodName != null) {
       addNativeMethod(constructorBuilder);
     }
@@ -2498,7 +2547,8 @@
         currentTypeParameterScopeBuilder.parent!.name,
         const NullabilityBuilder.omitted(),
         <TypeBuilder>[],
-        charOffset);
+        charOffset,
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Allowed);
     if (currentTypeParameterScopeBuilder.parent?.kind ==
         TypeParameterScopeKind.extensionDeclaration) {
       // Make the synthesized return type invalid for extensions.
@@ -2533,10 +2583,16 @@
                 .reference
             : library.reference);
 
-    Reference? reference = _currentClassReferencesFromIndexed
-        ?.lookupConstructor(new Name(
-            procedureName, _currentClassReferencesFromIndexed!.library))
-        ?.reference;
+    Reference? constructorReference;
+    Reference? tearOffReference;
+    if (_currentClassReferencesFromIndexed != null) {
+      constructorReference = _currentClassReferencesFromIndexed!
+          .lookupConstructorReference(new Name(
+              procedureName, _currentClassReferencesFromIndexed!.library));
+      tearOffReference = _currentClassReferencesFromIndexed!
+          .lookupGetterReference(constructorTearOffName(
+              procedureName, _currentClassReferencesFromIndexed!.library));
+    }
 
     SourceFactoryBuilder procedureBuilder;
     if (redirectionTarget != null) {
@@ -2555,7 +2611,8 @@
           charOffset,
           charOpenParenOffset,
           charEndOffset,
-          reference,
+          constructorReference,
+          tearOffReference,
           procedureNameScheme,
           nativeMethodName,
           redirectionTarget);
@@ -2575,7 +2632,8 @@
           charOffset,
           charOpenParenOffset,
           charEndOffset,
-          reference,
+          constructorReference,
+          tearOffReference,
           asyncModifier,
           procedureNameScheme,
           nativeMethodName: nativeMethodName);
@@ -2587,13 +2645,14 @@
     for (TypeVariableBuilder tv in procedureBuilder.typeVariables!) {
       NamedTypeBuilder t = procedureBuilder.returnType as NamedTypeBuilder;
       t.arguments!.add(addNamedType(tv.name, const NullabilityBuilder.omitted(),
-          null, procedureBuilder.charOffset));
+          null, procedureBuilder.charOffset,
+          instanceTypeVariableAccess: InstanceTypeVariableAccessState.Allowed));
     }
     currentTypeParameterScopeBuilder = savedDeclaration;
 
-    factoryDeclaration.resolveTypes(procedureBuilder.typeVariables, this);
+    factoryDeclaration.resolveNamedTypes(procedureBuilder.typeVariables, this);
     addBuilder(procedureName, procedureBuilder, charOffset,
-        getterReference: reference);
+        getterReference: constructorReference);
     if (nativeMethodName != null) {
       addNativeMethod(procedureBuilder);
     }
@@ -2642,7 +2701,7 @@
     checkTypeVariables(typeVariables, typedefBuilder);
     // Nested declaration began in `OutlineBuilder.beginFunctionTypeAlias`.
     endNestedDeclaration(TypeParameterScopeKind.typedef, "#typedef")
-        .resolveTypes(typeVariables, this);
+        .resolveNamedTypes(typeVariables, this);
     addBuilder(name, typedefBuilder, charOffset,
         getterReference: referenceFrom?.reference);
   }
@@ -2670,8 +2729,8 @@
     // Nested declaration began in `OutlineBuilder.beginFunctionType` or
     // `OutlineBuilder.beginFunctionTypedFormalParameter`.
     endNestedDeclaration(TypeParameterScopeKind.functionType, "#function_type")
-        .resolveTypes(typeVariables, this);
-    return addType(builder, charOffset);
+        .resolveNamedTypes(typeVariables, this);
+    return builder;
   }
 
   FormalParameterBuilder addFormalParameter(
@@ -2698,7 +2757,8 @@
     TypeVariableBuilder builder = new TypeVariableBuilder(
         name, this, charOffset, fileUri,
         bound: bound, metadata: metadata);
-    boundlessTypeVariables.add(builder);
+
+    unboundTypeVariables.add(builder);
     return builder;
   }
 
@@ -3007,7 +3067,7 @@
   List<TypeVariableBuilder> copyTypeVariables(
       List<TypeVariableBuilder> original, TypeParameterScopeBuilder declaration,
       {bool isExtensionTypeParameter: false}) {
-    List<TypeBuilder> newTypes = <TypeBuilder>[];
+    List<NamedTypeBuilder> newTypes = <NamedTypeBuilder>[];
     List<TypeVariableBuilder> copy = <TypeVariableBuilder>[];
     for (TypeVariableBuilder variable in original) {
       TypeVariableBuilder newVariable = new TypeVariableBuilder(
@@ -3017,25 +3077,24 @@
           variableVariance:
               variable.parameter.isLegacyCovariant ? null : variable.variance);
       copy.add(newVariable);
-      boundlessTypeVariables.add(newVariable);
+      unboundTypeVariables.add(newVariable);
     }
-    for (TypeBuilder newType in newTypes) {
-      declaration.addType(
-          new UnresolvedType(newType, newType.charOffset!, newType.fileUri!));
+    for (NamedTypeBuilder newType in newTypes) {
+      declaration.registerUnresolvedNamedType(newType);
     }
     return copy;
   }
 
   @override
   int finishTypeVariables(ClassBuilder object, TypeBuilder dynamicType) {
-    int count = boundlessTypeVariables.length;
+    int count = unboundTypeVariables.length;
     // Ensure that type parameters are built after their dependencies by sorting
     // them topologically using references in bounds.
     for (TypeVariableBuilder builder
-        in _sortTypeVariablesTopologically(boundlessTypeVariables)) {
+        in _sortTypeVariablesTopologically(unboundTypeVariables)) {
       builder.finish(this, object, dynamicType);
     }
-    boundlessTypeVariables.clear();
+    unboundTypeVariables.clear();
 
     processPendingNullabilities();
 
@@ -3136,7 +3195,8 @@
   @override
   int computeVariances() {
     int count = 0;
-    for (Builder? declaration in libraryDeclaration.members!.values) {
+    for (Builder? declaration
+        in _libraryTypeParameterScopeBuilder.members!.values) {
       while (declaration != null) {
         if (declaration is TypeAliasBuilder &&
             declaration.typeVariablesCount > 0) {
@@ -3259,7 +3319,7 @@
         }
 
         if (!haveErroneousBounds) {
-          List<TypeBuilder> unboundTypes = [];
+          List<NamedTypeBuilder> unboundTypes = [];
           List<TypeVariableBuilder> unboundTypeVariables = [];
           List<TypeBuilder> calculatedBounds = calculateBounds(
               variables,
@@ -3268,11 +3328,11 @@
               objectClass,
               unboundTypes: unboundTypes,
               unboundTypeVariables: unboundTypeVariables);
-          for (TypeBuilder unboundType in unboundTypes) {
-            currentTypeParameterScopeBuilder.addType(new UnresolvedType(
-                unboundType, unboundType.charOffset!, unboundType.fileUri!));
+          for (NamedTypeBuilder unboundType in unboundTypes) {
+            currentTypeParameterScopeBuilder
+                .registerUnresolvedNamedType(unboundType);
           }
-          boundlessTypeVariables.addAll(unboundTypeVariables);
+          this.unboundTypeVariables.addAll(unboundTypeVariables);
           for (int i = 0; i < variables.length; ++i) {
             variables[i].defaultType = calculatedBounds[i];
           }
@@ -3297,7 +3357,8 @@
       }
     }
 
-    for (Builder declaration in libraryDeclaration.members!.values) {
+    for (Builder declaration
+        in _libraryTypeParameterScopeBuilder.members!.values) {
       if (declaration is ClassBuilder) {
         {
           List<NonSimplicityIssue> issues =
@@ -3446,7 +3507,8 @@
             "(${declaration.runtimeType}).");
       }
     }
-    for (Builder declaration in libraryDeclaration.setters!.values) {
+    for (Builder declaration
+        in _libraryTypeParameterScopeBuilder.setters!.values) {
       assert(
           declaration is ProcedureBuilder,
           "Expected setter to be a ProcedureBuilder, "
@@ -4511,7 +4573,9 @@
   namedMixinApplication,
   extensionDeclaration,
   typedef,
-  staticOrInstanceMethodOrConstructor,
+  staticMethod,
+  instanceMethod,
+  constructor,
   topLevelMethod,
   factoryMethod,
   functionType,
@@ -4535,7 +4599,7 @@
 
   final Set<SourceExtensionBuilder>? extensions;
 
-  final List<UnresolvedType> types = <UnresolvedType>[];
+  final List<NamedTypeBuilder> unresolvedNamedTypes = <NamedTypeBuilder>[];
 
   // TODO(johnniwinther): Stop using [_name] for determining the declaration
   // kind.
@@ -4694,15 +4758,17 @@
 
   /// Adds the yet unresolved [type] to this scope builder.
   ///
-  /// Unresolved type will be resolved through [resolveTypes] when the scope
-  /// is fully built. This allows for resolving self-referencing types, like
-  /// type parameter used in their own bound, for instance `<T extends A<T>>`.
-  void addType(UnresolvedType type) {
-    types.add(type);
+  /// Unresolved type will be resolved through [resolveNamedTypes] when the
+  /// scope is fully built. This allows for resolving self-referencing types,
+  /// like type parameter used in their own bound, for instance
+  /// `<T extends A<T>>`.
+  void registerUnresolvedNamedType(NamedTypeBuilder type) {
+    unresolvedNamedTypes.add(type);
   }
 
-  /// Resolves type variables in [types] and propagate other types to [parent].
-  void resolveTypes(
+  /// Resolves type variables in [unresolvedNamedTypes] and propagate other
+  /// types to [parent].
+  void resolveNamedTypes(
       List<TypeVariableBuilder>? typeVariables, SourceLibraryBuilder library) {
     Map<String, TypeVariableBuilder>? map;
     if (typeVariables != null) {
@@ -4712,8 +4778,8 @@
       }
     }
     Scope? scope;
-    for (UnresolvedType type in types) {
-      Object? nameOrQualified = type.builder.name;
+    for (NamedTypeBuilder namedTypeBuilder in unresolvedNamedTypes) {
+      Object? nameOrQualified = namedTypeBuilder.name;
       String? name = nameOrQualified is QualifiedName
           ? nameOrQualified.qualifier as String
           : nameOrQualified as String?;
@@ -4729,25 +4795,30 @@
       if (declaration == null) {
         // Since name didn't resolve in this scope, propagate it to the
         // parent declaration.
-        parent!.addType(type);
+        parent!.registerUnresolvedNamedType(namedTypeBuilder);
       } else if (nameOrQualified is QualifiedName) {
-        NamedTypeBuilder builder = type.builder as NamedTypeBuilder;
         // Attempt to use a member or type variable as a prefix.
         Message message = templateNotAPrefixInTypeAnnotation.withArguments(
-            flattenName(
-                nameOrQualified.qualifier, type.charOffset, type.fileUri),
+            flattenName(nameOrQualified.qualifier, namedTypeBuilder.charOffset!,
+                namedTypeBuilder.fileUri!),
             nameOrQualified.name);
-        library.addProblem(message, type.charOffset,
-            nameOrQualified.endCharOffset - type.charOffset, type.fileUri);
-        builder.bind(builder.buildInvalidTypeDeclarationBuilder(
-            message.withLocation(type.fileUri, type.charOffset,
-                nameOrQualified.endCharOffset - type.charOffset)));
+        library.addProblem(
+            message,
+            namedTypeBuilder.charOffset!,
+            nameOrQualified.endCharOffset - namedTypeBuilder.charOffset!,
+            namedTypeBuilder.fileUri!);
+        namedTypeBuilder.bind(namedTypeBuilder
+            .buildInvalidTypeDeclarationBuilder(message.withLocation(
+                namedTypeBuilder.fileUri!,
+                namedTypeBuilder.charOffset!,
+                nameOrQualified.endCharOffset - namedTypeBuilder.charOffset!)));
       } else {
         scope ??= toScope(null).withTypeVariables(typeVariables);
-        type.resolveIn(scope, library);
+        namedTypeBuilder.resolveIn(scope, namedTypeBuilder.charOffset!,
+            namedTypeBuilder.fileUri!, library);
       }
     }
-    types.clear();
+    unresolvedNamedTypes.clear();
   }
 
   Scope toScope(Scope? parent) {
@@ -4899,7 +4970,7 @@
 }
 
 List<TypeVariableBuilder> _sortTypeVariablesTopologically(
-    List<TypeVariableBuilder> typeVariables) {
+    Iterable<TypeVariableBuilder> typeVariables) {
   Set<TypeVariableBuilder> unhandled = new Set<TypeVariableBuilder>.identity()
     ..addAll(typeVariables);
   List<TypeVariableBuilder> result = <TypeVariableBuilder>[];
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 9e34d6d..29c7861 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -34,6 +34,7 @@
 import '../../base/common.dart';
 import '../../base/instrumentation.dart' show Instrumentation;
 import '../../base/nnbd_mode.dart';
+import '../dill/dill_library_builder.dart';
 import '../builder/builder.dart';
 import '../builder/class_builder.dart';
 import '../builder/constructor_builder.dart';
@@ -141,8 +142,7 @@
 
   final SourceLoaderDataForTesting? dataForTesting;
 
-  @override
-  final Map<Uri, LibraryBuilder> builders = <Uri, LibraryBuilder>{};
+  final Map<Uri, LibraryBuilder> _builders = <Uri, LibraryBuilder>{};
 
   final Queue<LibraryBuilder> _unparsedLibraries = new Queue<LibraryBuilder>();
 
@@ -203,14 +203,255 @@
       : dataForTesting =
             retainDataForTesting ? new SourceLoaderDataForTesting() : null;
 
+  bool containsLibraryBuilder(Uri importUri) =>
+      _builders.containsKey(importUri);
+
+  @override
+  LibraryBuilder? lookupLibraryBuilder(Uri importUri) => _builders[importUri];
+
+  Iterable<LibraryBuilder> get libraryBuilders => _builders.values;
+
+  Iterable<Uri> get libraryImportUris => _builders.keys;
+
+  void registerLibraryBuilder(LibraryBuilder libraryBuilder, [Uri? uri]) {
+    uri ??= libraryBuilder.importUri;
+    if (uri.scheme == "dart" && uri.path == "core") {
+      _coreLibrary = libraryBuilder;
+    }
+    _builders[uri] = libraryBuilder;
+  }
+
+  LibraryBuilder? deregisterLibraryBuilder(Uri importUri) {
+    return _builders.remove(importUri);
+  }
+
+  void clearLibraryBuilders() {
+    _builders.clear();
+  }
+
   @override
   LibraryBuilder get coreLibrary => _coreLibrary!;
 
-  void set coreLibrary(LibraryBuilder value) {
-    _coreLibrary = value;
+  Ticker get ticker => target.ticker;
+
+  /// Creates a [SourceLibraryBuilder] corresponding to [uri], if one doesn't
+  /// exist already.
+  ///
+  /// [fileUri] must not be null and is a URI that can be passed to FileSystem
+  /// to locate the corresponding file.
+  ///
+  /// [origin] is non-null if the created library is a patch to [origin].
+  ///
+  /// [packageUri] is the base uri for the package which the library belongs to.
+  /// For instance 'package:foo'.
+  ///
+  /// This is used to associate libraries in for instance the 'bin' and 'test'
+  /// folders of a package source with the package uri of the 'lib' folder.
+  ///
+  /// If the [packageUri] is `null` the package association of this library is
+  /// based on its [importUri].
+  ///
+  /// For libraries with a 'package:' [importUri], the package path must match
+  /// the path in the [importUri]. For libraries with a 'dart:' [importUri] the
+  /// [packageUri] must be `null`.
+  ///
+  /// [packageLanguageVersion] is the language version defined by the package
+  /// which the library belongs to, or the current sdk version if the library
+  /// doesn't belong to a package.
+  SourceLibraryBuilder createLibraryBuilder(
+      Uri uri,
+      Uri fileUri,
+      Uri? packageUri,
+      LanguageVersion packageLanguageVersion,
+      SourceLibraryBuilder? origin,
+      Library? referencesFrom,
+      bool? referenceIsPartOwner) {
+    return new SourceLibraryBuilder(
+        uri, fileUri, packageUri, packageLanguageVersion, this, origin,
+        referencesFrom: referencesFrom,
+        referenceIsPartOwner: referenceIsPartOwner);
   }
 
-  Ticker get ticker => target.ticker;
+  SourceLibraryBuilder _createSourceLibraryBuilder(
+      Uri uri,
+      Uri? fileUri,
+      SourceLibraryBuilder? origin,
+      Library? referencesFrom,
+      bool? referenceIsPartOwner) {
+    if (fileUri != null &&
+        (fileUri.scheme == "dart" ||
+            fileUri.scheme == "package" ||
+            fileUri.scheme == "dart-ext")) {
+      fileUri = null;
+    }
+    package_config.Package? packageForLanguageVersion;
+    if (fileUri == null) {
+      switch (uri.scheme) {
+        case "package":
+        case "dart":
+          fileUri = target.translateUri(uri) ??
+              new Uri(
+                  scheme: untranslatableUriScheme,
+                  path: Uri.encodeComponent("$uri"));
+          if (uri.scheme == "package") {
+            packageForLanguageVersion = target.uriTranslator.getPackage(uri);
+          } else {
+            packageForLanguageVersion =
+                target.uriTranslator.packages.packageOf(fileUri);
+          }
+          break;
+
+        default:
+          fileUri = uri;
+          packageForLanguageVersion =
+              target.uriTranslator.packages.packageOf(fileUri);
+          break;
+      }
+    } else {
+      packageForLanguageVersion =
+          target.uriTranslator.packages.packageOf(fileUri);
+    }
+    LanguageVersion? packageLanguageVersion;
+    Uri? packageUri;
+    Message? packageLanguageVersionProblem;
+    if (packageForLanguageVersion != null) {
+      Uri importUri = origin?.importUri ?? uri;
+      if (importUri.scheme != 'dart' &&
+          importUri.scheme != 'package' &&
+          // ignore: unnecessary_null_comparison
+          packageForLanguageVersion.name != null) {
+        packageUri =
+            new Uri(scheme: 'package', path: packageForLanguageVersion.name);
+      }
+      if (packageForLanguageVersion.languageVersion != null) {
+        if (packageForLanguageVersion.languageVersion
+            is package_config.InvalidLanguageVersion) {
+          packageLanguageVersionProblem =
+              messageLanguageVersionInvalidInDotPackages;
+          packageLanguageVersion = new InvalidLanguageVersion(
+              fileUri, 0, noLength, target.currentSdkVersion, false);
+        } else {
+          Version version = new Version(
+              packageForLanguageVersion.languageVersion!.major,
+              packageForLanguageVersion.languageVersion!.minor);
+          if (version > target.currentSdkVersion) {
+            packageLanguageVersionProblem =
+                templateLanguageVersionTooHigh.withArguments(
+                    target.currentSdkVersion.major,
+                    target.currentSdkVersion.minor);
+            packageLanguageVersion = new InvalidLanguageVersion(
+                fileUri, 0, noLength, target.currentSdkVersion, false);
+          } else {
+            packageLanguageVersion = new ImplicitLanguageVersion(version);
+          }
+        }
+      }
+    }
+    packageLanguageVersion ??=
+        new ImplicitLanguageVersion(target.currentSdkVersion);
+
+    SourceLibraryBuilder libraryBuilder = createLibraryBuilder(
+        uri,
+        fileUri,
+        packageUri,
+        packageLanguageVersion,
+        origin,
+        referencesFrom,
+        referenceIsPartOwner);
+    if (packageLanguageVersionProblem != null) {
+      libraryBuilder.addPostponedProblem(
+          packageLanguageVersionProblem, 0, noLength, libraryBuilder.fileUri);
+    }
+
+    // Add any additional logic after this block. Setting the
+    // firstSourceUri and first library should be done as early as
+    // possible.
+    firstSourceUri ??= uri;
+    first ??= libraryBuilder;
+
+    _checkForDartCore(uri, libraryBuilder);
+
+    Uri libraryUri = origin?.importUri ?? uri;
+    if (target.backendTarget.mayDefineRestrictedType(libraryUri)) {
+      libraryBuilder.mayImplementRestrictedTypes = true;
+    }
+    if (uri.scheme == "dart") {
+      target.readPatchFiles(libraryBuilder);
+    }
+    _unparsedLibraries.addLast(libraryBuilder);
+
+    return libraryBuilder;
+  }
+
+  DillLibraryBuilder? _lookupDillLibraryBuilder(Uri uri) {
+    DillLibraryBuilder? libraryBuilder =
+        target.dillTarget.loader.lookupLibraryBuilder(uri);
+    if (libraryBuilder != null) {
+      _checkDillLibraryBuilderNnbdMode(libraryBuilder);
+      _checkForDartCore(uri, libraryBuilder);
+    }
+    return libraryBuilder;
+  }
+
+  void _checkDillLibraryBuilderNnbdMode(DillLibraryBuilder libraryBuilder) {
+    if (!libraryBuilder.isNonNullableByDefault &&
+        (nnbdMode == NnbdMode.Strong || nnbdMode == NnbdMode.Agnostic)) {
+      registerStrongOptOutLibrary(libraryBuilder);
+    } else {
+      NonNullableByDefaultCompiledMode libraryMode =
+          libraryBuilder.library.nonNullableByDefaultCompiledMode;
+      if (libraryMode == NonNullableByDefaultCompiledMode.Invalid) {
+        registerNnbdMismatchLibrary(
+            libraryBuilder, messageInvalidNnbdDillLibrary);
+      } else {
+        switch (nnbdMode) {
+          case NnbdMode.Weak:
+            if (libraryMode != NonNullableByDefaultCompiledMode.Agnostic &&
+                libraryMode != NonNullableByDefaultCompiledMode.Weak) {
+              registerNnbdMismatchLibrary(
+                  libraryBuilder, messageWeakWithStrongDillLibrary);
+            }
+            break;
+          case NnbdMode.Strong:
+            if (libraryMode != NonNullableByDefaultCompiledMode.Agnostic &&
+                libraryMode != NonNullableByDefaultCompiledMode.Strong) {
+              registerNnbdMismatchLibrary(
+                  libraryBuilder, messageStrongWithWeakDillLibrary);
+            }
+            break;
+          case NnbdMode.Agnostic:
+            if (libraryMode != NonNullableByDefaultCompiledMode.Agnostic) {
+              if (libraryMode == NonNullableByDefaultCompiledMode.Strong) {
+                registerNnbdMismatchLibrary(
+                    libraryBuilder, messageAgnosticWithStrongDillLibrary);
+              } else {
+                registerNnbdMismatchLibrary(
+                    libraryBuilder, messageAgnosticWithWeakDillLibrary);
+              }
+            }
+            break;
+        }
+      }
+    }
+  }
+
+  void _checkForDartCore(Uri uri, LibraryBuilder libraryBuilder) {
+    if (uri.scheme == "dart") {
+      if (uri.path == "core") {
+        _coreLibrary = libraryBuilder;
+      } else if (uri.path == "typed_data") {
+        typedDataLibrary = libraryBuilder;
+      }
+    }
+    // TODO(johnniwinther): If we save the created library in [_builders]
+    // here, i.e. before calling `target.loadExtraRequiredLibraries` below,
+    // the order of the libraries change, making `dart:core` come before the
+    // required arguments. Currently [DillLoader.appendLibrary] one works
+    // when this is not the case.
+    if (_coreLibrary == libraryBuilder) {
+      target.loadExtraRequiredLibraries(this);
+    }
+  }
 
   /// Look up a library builder by the [uri], or if such doesn't exist, create
   /// one. The canonical URI of the library is [uri], and its actual location is
@@ -229,135 +470,28 @@
       LibraryBuilder? origin,
       Library? referencesFrom,
       bool? referenceIsPartOwner}) {
-    LibraryBuilder builder = builders.putIfAbsent(uri, () {
-      if (fileUri != null &&
-          (fileUri!.scheme == "dart" ||
-              fileUri!.scheme == "package" ||
-              fileUri!.scheme == "dart-ext")) {
-        fileUri = null;
+    LibraryBuilder? libraryBuilder = _builders[uri];
+    if (libraryBuilder == null) {
+      if (target.dillTarget.isLoaded) {
+        libraryBuilder = _lookupDillLibraryBuilder(uri);
       }
-      package_config.Package? packageForLanguageVersion;
-      if (fileUri == null) {
-        switch (uri.scheme) {
-          case "package":
-          case "dart":
-            fileUri = target.translateUri(uri) ??
-                new Uri(
-                    scheme: untranslatableUriScheme,
-                    path: Uri.encodeComponent("$uri"));
-            if (uri.scheme == "package") {
-              packageForLanguageVersion = target.uriTranslator.getPackage(uri);
-            } else {
-              packageForLanguageVersion =
-                  target.uriTranslator.packages.packageOf(fileUri!);
-            }
-            break;
-
-          default:
-            fileUri = uri;
-            packageForLanguageVersion =
-                target.uriTranslator.packages.packageOf(fileUri!);
-            break;
-        }
-      } else {
-        packageForLanguageVersion =
-            target.uriTranslator.packages.packageOf(fileUri!);
-      }
-      LanguageVersion? packageLanguageVersion;
-      Uri? packageUri;
-      Message? packageLanguageVersionProblem;
-      if (packageForLanguageVersion != null) {
-        Uri importUri = origin?.importUri ?? uri;
-        if (importUri.scheme != 'dart' &&
-            importUri.scheme != 'package' &&
-            // ignore: unnecessary_null_comparison
-            packageForLanguageVersion.name != null) {
-          packageUri =
-              new Uri(scheme: 'package', path: packageForLanguageVersion.name);
-        }
-        if (packageForLanguageVersion.languageVersion != null) {
-          if (packageForLanguageVersion.languageVersion
-              is package_config.InvalidLanguageVersion) {
-            packageLanguageVersionProblem =
-                messageLanguageVersionInvalidInDotPackages;
-            packageLanguageVersion = new InvalidLanguageVersion(
-                fileUri!, 0, noLength, target.currentSdkVersion, false);
-          } else {
-            Version version = new Version(
-                packageForLanguageVersion.languageVersion!.major,
-                packageForLanguageVersion.languageVersion!.minor);
-            if (version > target.currentSdkVersion) {
-              packageLanguageVersionProblem =
-                  templateLanguageVersionTooHigh.withArguments(
-                      target.currentSdkVersion.major,
-                      target.currentSdkVersion.minor);
-              packageLanguageVersion = new InvalidLanguageVersion(
-                  fileUri!, 0, noLength, target.currentSdkVersion, false);
-            } else {
-              packageLanguageVersion = new ImplicitLanguageVersion(version);
-            }
-          }
-        }
-      }
-      packageLanguageVersion ??=
-          new ImplicitLanguageVersion(target.currentSdkVersion);
-
-      LibraryBuilder library = target.createLibraryBuilder(
-          uri,
-          fileUri!,
-          packageUri,
-          packageLanguageVersion,
-          origin as SourceLibraryBuilder?,
-          referencesFrom,
-          referenceIsPartOwner);
-      if (packageLanguageVersionProblem != null &&
-          library is SourceLibraryBuilder) {
-        library.addPostponedProblem(
-            packageLanguageVersionProblem, 0, noLength, library.fileUri);
+      if (libraryBuilder == null) {
+        libraryBuilder = _createSourceLibraryBuilder(
+            uri,
+            fileUri,
+            origin as SourceLibraryBuilder?,
+            referencesFrom,
+            referenceIsPartOwner);
       }
 
-      if (uri.scheme == "dart") {
-        if (uri.path == "core") {
-          _coreLibrary = library;
-        } else if (uri.path == "typed_data") {
-          typedDataLibrary = library;
-        }
-      }
-      if (library.loader != this) {
-        if (_coreLibrary == library) {
-          target.loadExtraRequiredLibraries(this);
-        }
-        // This library isn't owned by this loader, so no further processing
-        // should be attempted.
-        return library;
-      }
-
-      {
-        // Add any additional logic after this block. Setting the
-        // firstSourceUri and first library should be done as early as
-        // possible.
-        firstSourceUri ??= uri;
-        first ??= library;
-      }
-      if (_coreLibrary == library) {
-        target.loadExtraRequiredLibraries(this);
-      }
-      Uri libraryUri = origin?.importUri ?? uri;
-      if (target.backendTarget.mayDefineRestrictedType(libraryUri)) {
-        library.mayImplementRestrictedTypes = true;
-      }
-      if (uri.scheme == "dart") {
-        target.readPatchFiles(library as SourceLibraryBuilder);
-      }
-      _unparsedLibraries.addLast(library);
-      return library;
-    });
+      _builders[uri] = libraryBuilder;
+    }
     if (accessor == null) {
-      if (builder.loader == this && first != builder) {
+      if (libraryBuilder.loader == this && first != libraryBuilder) {
         unhandled("null", "accessor", charOffset, uri);
       }
     } else {
-      builder.recordAccess(charOffset, noLength, accessor.fileUri);
+      libraryBuilder.recordAccess(charOffset, noLength, accessor.fileUri);
       if (!accessor.isPatch &&
           !accessor.isPart &&
           !target.backendTarget
@@ -366,7 +500,7 @@
             noLength, accessor.fileUri);
       }
     }
-    return builder;
+    return libraryBuilder;
   }
 
   void _ensureCoreLibrary() {
@@ -382,7 +516,7 @@
 
   Future<Null> buildBodies() async {
     assert(_coreLibrary != null);
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         currentUriForCrashReporting = library.importUri;
         await buildBody(library);
@@ -395,13 +529,13 @@
   void logSummary(Template<SummaryTemplate> template) {
     ticker.log((Duration elapsed, Duration sinceStart) {
       int libraryCount = 0;
-      for (LibraryBuilder library in builders.values) {
+      for (LibraryBuilder library in libraryBuilders) {
         if (library.loader == this) libraryCount++;
       }
       double ms = elapsed.inMicroseconds / Duration.microsecondsPerMillisecond;
       Message message = template.withArguments(
           libraryCount, byteCount, ms, byteCount / ms, ms / libraryCount);
-      print("$sinceStart: ${message.message}");
+      print("$sinceStart: ${message.problemMessage}");
     });
   }
 
@@ -442,7 +576,7 @@
     severity ??= message.code.severity;
     if (severity == Severity.ignored) return null;
     String trace = """
-message: ${message.message}
+message: ${message.problemMessage}
 charOffset: $charOffset
 fileUri: $fileUri
 severity: $severity
@@ -503,6 +637,9 @@
 
   NnbdMode get nnbdMode => target.context.options.nnbdMode;
 
+  bool get enableUnscheduledExperiments =>
+      target.context.options.enableUnscheduledExperiments;
+
   CoreTypes get coreTypes {
     assert(_coreTypes != null, "CoreTypes has not been computed.");
     return _coreTypes!;
@@ -658,7 +795,8 @@
         return utf8.encode(defaultDartTypedDataSource);
 
       default:
-        return utf8.encode(message == null ? "" : "/* ${message.message} */");
+        return utf8
+            .encode(message == null ? "" : "/* ${message.problemMessage} */");
     }
   }
 
@@ -908,7 +1046,7 @@
   void resolveParts() {
     List<Uri> parts = <Uri>[];
     List<SourceLibraryBuilder> libraries = <SourceLibraryBuilder>[];
-    builders.forEach((Uri uri, LibraryBuilder library) {
+    _builders.forEach((Uri uri, LibraryBuilder library) {
       if (library.loader == this) {
         if (library.isPart) {
           parts.add(uri);
@@ -923,16 +1061,17 @@
     }
     for (Uri uri in parts) {
       if (usedParts.contains(uri)) {
-        builders.remove(uri);
+        _builders.remove(uri);
       } else {
-        SourceLibraryBuilder part = builders[uri] as SourceLibraryBuilder;
+        SourceLibraryBuilder part =
+            lookupLibraryBuilder(uri) as SourceLibraryBuilder;
         part.addProblem(messagePartOrphan, 0, 1, part.fileUri);
         part.validatePart(null, null);
       }
     }
     ticker.logMs("Resolved parts");
 
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         library.applyPatches();
       }
@@ -943,7 +1082,7 @@
   void computeLibraryScopes() {
     Set<LibraryBuilder> exporters = new Set<LibraryBuilder>();
     Set<LibraryBuilder> exportees = new Set<LibraryBuilder>();
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         SourceLibraryBuilder sourceLibrary = library as SourceLibraryBuilder;
         sourceLibrary.buildInitialScopes();
@@ -977,7 +1116,7 @@
         }
       }
     } while (wasChanged);
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         SourceLibraryBuilder sourceLibrary = library as SourceLibraryBuilder;
         sourceLibrary.addImportsToScope();
@@ -996,7 +1135,7 @@
 
   void debugPrintExports() {
     // TODO(sigmund): should be `covariant SourceLibraryBuilder`.
-    builders.forEach((Uri uri, dynamic l) {
+    _builders.forEach((Uri uri, dynamic l) {
       SourceLibraryBuilder library = l;
       Set<Builder> members = new Set<Builder>();
       Iterator<Builder> iterator = library.iterator;
@@ -1020,7 +1159,7 @@
 
   void resolveTypes() {
     int typeCount = 0;
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         SourceLibraryBuilder sourceLibrary = library as SourceLibraryBuilder;
         typeCount += sourceLibrary.resolveTypes();
@@ -1031,7 +1170,7 @@
 
   void finishDeferredLoadTearoffs() {
     int count = 0;
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         count += library.finishDeferredLoadTearoffs();
       }
@@ -1041,7 +1180,7 @@
 
   void finishNoSuchMethodForwarders() {
     int count = 0;
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         count += library.finishForwarders();
       }
@@ -1051,7 +1190,7 @@
 
   void resolveConstructors() {
     int count = 0;
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         count += library.resolveConstructors(null);
       }
@@ -1061,7 +1200,7 @@
 
   void installTypedefTearOffs() {
     if (target.backendTarget.isTypedefTearOffLoweringEnabled) {
-      for (LibraryBuilder library in builders.values) {
+      for (LibraryBuilder library in libraryBuilders) {
         if (library.loader == this && library is SourceLibraryBuilder) {
           library.installTypedefTearOffs();
         }
@@ -1071,7 +1210,7 @@
 
   void finishTypeVariables(ClassBuilder object, TypeBuilder dynamicType) {
     int count = 0;
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         count += library.finishTypeVariables(object, dynamicType);
       }
@@ -1081,7 +1220,7 @@
 
   void computeVariances() {
     int count = 0;
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         count += library.computeVariances();
       }
@@ -1092,7 +1231,7 @@
   void computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder nullType,
       TypeBuilder bottomType, ClassBuilder objectClass) {
     int count = 0;
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         count += library.computeDefaultTypes(
             dynamicType, nullType, bottomType, objectClass);
@@ -1103,7 +1242,7 @@
 
   void finishNativeMethods() {
     int count = 0;
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         count += library.finishNativeMethods();
       }
@@ -1113,7 +1252,7 @@
 
   void finishPatchMethods() {
     int count = 0;
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         count += library.finishPatchMethods();
       }
@@ -1152,7 +1291,7 @@
   List<SourceClassBuilder> handleHierarchyCycles(ClassBuilder objectClass) {
     // Compute the initial work list of all classes declared in this loader.
     List<SourceClassBuilder> workList = <SourceClassBuilder>[];
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         Iterator<Builder> members = library.iterator;
         while (members.moveNext()) {
@@ -1351,7 +1490,7 @@
 
   /// Builds the core AST structure needed for the outline of the component.
   void buildComponent() {
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         SourceLibraryBuilder sourceLibrary = library as SourceLibraryBuilder;
         Library target = sourceLibrary.build(coreLibrary);
@@ -1371,7 +1510,7 @@
   Component computeFullComponent() {
     Set<Library> libraries = new Set<Library>();
     List<Library> workList = <Library>[];
-    for (LibraryBuilder libraryBuilder in builders.values) {
+    for (LibraryBuilder libraryBuilder in libraryBuilders) {
       if (!libraryBuilder.isPatch &&
           (libraryBuilder.loader == this ||
               libraryBuilder.importUri.scheme == "dart" ||
@@ -1418,7 +1557,7 @@
   }
 
   void computeShowHideElements() {
-    for (LibraryBuilder libraryBuilder in builders.values) {
+    for (LibraryBuilder libraryBuilder in libraryBuilders) {
       if (libraryBuilder.loader == this &&
           libraryBuilder is SourceLibraryBuilder) {
         libraryBuilder.computeShowHideElements(_builderHierarchy!);
@@ -1466,7 +1605,7 @@
   }
 
   void checkTypes() {
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library is SourceLibraryBuilder) {
         if (library.loader == this) {
           library
@@ -1547,7 +1686,7 @@
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     List<DelayedActionPerformer> delayedActionPerformers =
         <DelayedActionPerformer>[];
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         (library as SourceLibraryBuilder).buildOutlineExpressions();
         Iterator<Builder> iterator = library.iterator;
@@ -1604,7 +1743,7 @@
     builderHierarchy.computeTypes();
 
     List<FieldBuilder> allImplicitlyTypedFields = <FieldBuilder>[];
-    for (LibraryBuilder library in builders.values) {
+    for (LibraryBuilder library in libraryBuilders) {
       if (library.loader == this) {
         List<FieldBuilder>? implicitlyTypedFields =
             library.takeImplicitlyTypedFields();
@@ -1700,7 +1839,7 @@
   void checkMainMethods() {
     DartType? listOfString;
 
-    for (LibraryBuilder libraryBuilder in builders.values) {
+    for (LibraryBuilder libraryBuilder in libraryBuilders) {
       if (libraryBuilder.loader == this &&
           libraryBuilder.isNonNullableByDefault) {
         Builder? mainBuilder =
@@ -1829,7 +1968,7 @@
     hierarchy = null;
     _builderHierarchy = null;
     _typeInferenceEngine = null;
-    builders.clear();
+    _builders.clear();
     libraries.clear();
     first = null;
     sourceBytes.clear();
@@ -1843,7 +1982,7 @@
   @override
   ClassBuilder computeClassBuilderFromTargetClass(Class cls) {
     Library kernelLibrary = cls.enclosingLibrary;
-    LibraryBuilder? library = builders[kernelLibrary.importUri];
+    LibraryBuilder? library = lookupLibraryBuilder(kernelLibrary.importUri);
     if (library == null) {
       return target.dillTarget.loader.computeClassBuilderFromTargetClass(cls);
     }
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index 70a6813..9585ec4 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -216,8 +216,7 @@
 
   @override
   List<DartType> buildTypeArguments(
-      LibraryBuilder library, List<TypeBuilder>? arguments,
-      {bool? nonInstanceContext}) {
+      LibraryBuilder library, List<TypeBuilder>? arguments) {
     if (arguments == null && typeVariables == null) {
       return <DartType>[];
     }
@@ -237,7 +236,7 @@
       return unhandled(
           templateTypeArgumentMismatch
               .withArguments(typeVariablesCount)
-              .message,
+              .problemMessage,
           "buildTypeArguments",
           -1,
           null);
@@ -320,9 +319,16 @@
           }
           Name targetName =
               new Name(constructorName, declaration.library.library);
+          Reference? tearOffReference;
+          if (library.referencesFromIndexed != null) {
+            tearOffReference = library.referencesFromIndexed!
+                .lookupGetterReference(typedefTearOffName(name, constructorName,
+                    library.referencesFromIndexed!.library));
+          }
+
           Procedure tearOff = tearOffs![targetName] =
               createTypedefTearOffProcedure(name, constructorName, library,
-                  target.fileUri, target.fileOffset);
+                  target.fileUri, target.fileOffset, tearOffReference);
           _tearOffDependencies![tearOff] = target;
 
           buildTypedefTearOffProcedure(tearOff, target, declaration.cls,
diff --git a/pkg/front_end/lib/src/fasta/source/value_kinds.dart b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
index 2c88740..9a81d93 100644
--- a/pkg/front_end/lib/src/fasta/source/value_kinds.dart
+++ b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
@@ -18,7 +18,6 @@
 import '../builder/metadata_builder.dart' as type;
 import '../builder/type_builder.dart' as type;
 import '../builder/type_variable_builder.dart' as type;
-import '../builder/unresolved_type.dart' as type;
 
 import '../identifiers.dart' as type;
 
@@ -108,15 +107,15 @@
   static const ValueKind TokenOrNull =
       const SingleValueKind<type.Token>(NullValue.Token);
   static const ValueKind TypeOrNull =
-      const SingleValueKind<type.UnresolvedType>(NullValue.UnresolvedType);
+      const SingleValueKind<type.TypeBuilder>(NullValue.TypeBuilder);
   static const ValueKind TypeArguments =
-      const SingleValueKind<List<type.UnresolvedType>>();
+      const SingleValueKind<List<type.TypeBuilder>>();
   static const ValueKind TypeArgumentsOrNull =
-      const SingleValueKind<List<type.UnresolvedType>>(NullValue.TypeArguments);
+      const SingleValueKind<List<type.TypeBuilder>>(NullValue.TypeArguments);
   static const ValueKind TypeBuilder =
       const SingleValueKind<type.TypeBuilder>();
   static const ValueKind TypeBuilderOrNull =
-      const SingleValueKind<type.TypeBuilder>(NullValue.UnresolvedType);
+      const SingleValueKind<type.TypeBuilder>(NullValue.TypeBuilder);
   static const ValueKind TypeBuilderListOrNull =
       const SingleValueKind<List<type.TypeBuilder>>(NullValue.TypeBuilderList);
   static const ValueKind TypeVariableListOrNull =
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index cf74dd7..93e1544 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -36,6 +36,7 @@
 import '../fasta_codes.dart';
 
 import '../kernel/class_hierarchy_builder.dart' show ClassMember;
+import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/kernel_helper.dart';
 import '../kernel/inference_visitor.dart';
 import '../kernel/internal_ast.dart';
@@ -144,7 +145,8 @@
       DartType returnType, AsyncMarker asyncMarker, Statement body);
 
   /// Performs type inference on the given constructor initializer.
-  void inferInitializer(InferenceHelper helper, Initializer initializer);
+  InitializerInferenceResult inferInitializer(
+      InferenceHelper helper, Initializer initializer);
 
   /// Performs type inference on the given metadata annotations.
   void inferMetadata(
@@ -272,8 +274,9 @@
     Arguments arguments;
     // ignore: unnecessary_null_comparison
     if (errorMessage != null) {
-      arguments = new Arguments(
-          [new StringLiteral(errorMessage.message)..fileOffset = fileOffset])
+      arguments = new Arguments([
+        new StringLiteral(errorMessage.problemMessage)..fileOffset = fileOffset
+      ])
         ..fileOffset = fileOffset;
     } else {
       arguments = new Arguments([])..fileOffset = fileOffset;
@@ -360,7 +363,6 @@
   }
 
   /// Ensures that the type of [member] has been computed.
-  // TODO(johnniwinther): Expand this to handle lowerings.
   void ensureMemberType(Member member) {
     if (member is Constructor) {
       inferConstructorParameterTypes(member);
@@ -409,19 +411,22 @@
   }
 
   @override
-  void inferInitializer(InferenceHelper helper, Initializer initializer) {
+  InitializerInferenceResult inferInitializer(
+      InferenceHelper helper, Initializer initializer) {
     this.helper = helper;
     // Use polymorphic dispatch on [KernelInitializer] to perform whatever
     // kind of type inference is correct for this kind of initializer.
     // TODO(paulberry): experiment to see if dynamic dispatch would be better,
     // so that the type hierarchy will be simpler (which may speed up "is"
     // checks).
+    InitializerInferenceResult inferenceResult;
     if (initializer is InitializerJudgment) {
-      initializer.acceptInference(new InferenceVisitor(this));
+      inferenceResult = initializer.acceptInference(new InferenceVisitor(this));
     } else {
-      initializer.accept(new InferenceVisitor(this));
+      inferenceResult = initializer.accept(new InferenceVisitor(this));
     }
     this.helper = null;
+    return inferenceResult;
   }
 
   bool isDoubleContext(DartType typeContext) {
@@ -586,7 +591,6 @@
             contextType,
             errorTemplate.withArguments(expressionType,
                 declaredContextType ?? contextType, isNonNullableByDefault));
-
         break;
       case AssignabilityKind.unassignableVoid:
         // Error: not assignable.  Perform error recovery.
@@ -2085,7 +2089,7 @@
   }
 
   InvocationInferenceResult inferInvocation(DartType typeContext, int offset,
-      FunctionType calleeType, Arguments arguments,
+      FunctionType calleeType, ArgumentsImpl arguments,
       {List<VariableDeclaration>? hoistedExpressions,
       bool isSpecialCasedBinaryOperator: false,
       bool isSpecialCasedTernaryOperator: false,
@@ -2143,7 +2147,7 @@
         typeParameters: calleeType.typeParameters
             .take(extensionTypeParameterCount)
             .toList());
-    Arguments extensionArguments = engine.forest.createArguments(
+    ArgumentsImpl extensionArguments = engine.forest.createArguments(
         arguments.fileOffset, [arguments.positional.first],
         types: getExplicitExtensionTypeArguments(arguments));
     _inferInvocation(const UnknownType(), offset, extensionFunctionType,
@@ -2171,7 +2175,7 @@
         typeParameters: targetTypeParameters);
     targetFunctionType = extensionSubstitution
         .substituteType(targetFunctionType) as FunctionType;
-    Arguments targetArguments = engine.forest.createArguments(
+    ArgumentsImpl targetArguments = engine.forest.createArguments(
         arguments.fileOffset, arguments.positional.skip(1).toList(),
         named: arguments.named, types: getExplicitTypeArguments(arguments));
     InvocationInferenceResult result = _inferInvocation(typeContext, offset,
@@ -2201,7 +2205,7 @@
       DartType typeContext,
       int offset,
       FunctionType calleeType,
-      Arguments arguments,
+      ArgumentsImpl arguments,
       List<VariableDeclaration>? hoistedExpressions,
       {bool isSpecialCasedBinaryOperator: false,
       bool isSpecialCasedTernaryOperator: false,
@@ -2215,6 +2219,7 @@
     // [receiverType] must be provided for special-cased operators.
     assert(!isSpecialCasedBinaryOperator && !isSpecialCasedTernaryOperator ||
         receiverType != null);
+
     List<TypeParameter> calleeTypeParameters = calleeType.typeParameters;
     if (calleeTypeParameters.isNotEmpty) {
       // It's possible that one of the callee type parameters might match a type
@@ -2230,11 +2235,14 @@
       calleeType = fresh.applyToFunctionType(calleeType);
       calleeTypeParameters = fresh.freshTypeParameters;
     }
+
     List<DartType>? explicitTypeArguments = getExplicitTypeArguments(arguments);
+
     bool inferenceNeeded = !skipTypeArgumentInference &&
         explicitTypeArguments == null &&
         calleeTypeParameters.isNotEmpty;
     bool typeChecksNeeded = !isTopLevel;
+
     List<DartType>? inferredTypes;
     Substitution? substitution;
     List<DartType>? formalTypes;
@@ -2243,6 +2251,15 @@
       formalTypes = [];
       actualTypes = [];
     }
+
+    List<VariableDeclaration>? localHoistedExpressions;
+    if (library.enableNamedArgumentsAnywhereInLibrary &&
+        arguments.argumentsOriginalOrder != null &&
+        hoistedExpressions == null &&
+        !isTopLevel) {
+      hoistedExpressions = localHoistedExpressions = <VariableDeclaration>[];
+    }
+
     if (inferenceNeeded) {
       // ignore: unnecessary_null_comparison
       if (isConst && typeContext != null) {
@@ -2281,60 +2298,166 @@
         staticTarget == typeSchemaEnvironment.coreTypes.identicalProcedure;
     // TODO(paulberry): if we are doing top level inference and type arguments
     // were omitted, report an error.
-    for (int position = 0; position < arguments.positional.length; position++) {
-      DartType formalType = getPositionalParameterType(calleeType, position);
-      DartType inferredFormalType = substitution != null
-          ? substitution.substituteType(formalType)
-          : formalType;
-      DartType inferredType;
-      if (isImplicitExtensionMember && position == 0) {
-        assert(
-            receiverType != null,
-            "No receiver type provided for implicit extension member "
-            "invocation.");
-        continue;
+    List<Object?> argumentsEvaluationOrder;
+    if (library.enableNamedArgumentsAnywhereInLibrary &&
+        arguments.argumentsOriginalOrder != null) {
+      if (staticTarget?.isExtensionMember ?? false) {
+        // Add the receiver.
+        argumentsEvaluationOrder = <Object?>[
+          arguments.positional[0],
+          ...arguments.argumentsOriginalOrder!
+        ];
       } else {
-        if (isSpecialCasedBinaryOperator) {
-          inferredFormalType =
-              typeSchemaEnvironment.getContextTypeOfSpecialCasedBinaryOperator(
-                  typeContext, receiverType!, inferredFormalType,
-                  isNonNullableByDefault: isNonNullableByDefault);
-        } else if (isSpecialCasedTernaryOperator) {
-          inferredFormalType =
-              typeSchemaEnvironment.getContextTypeOfSpecialCasedTernaryOperator(
-                  typeContext, receiverType!, inferredFormalType,
-                  isNonNullableByDefault: isNonNullableByDefault);
+        argumentsEvaluationOrder = arguments.argumentsOriginalOrder!;
+      }
+    } else {
+      argumentsEvaluationOrder = <Object?>[
+        ...arguments.positional,
+        ...arguments.named
+      ];
+    }
+    arguments.argumentsOriginalOrder = null;
+
+    // The following loop determines how many argument expressions should be
+    // hoisted to preserve the evaluation order. The computation is based on the
+    // following observation: the largest suffix of the argument vector, such
+    // that every positional argument in that suffix comes before any named
+    // argument, retains the evaluation order after the rest of the arguments
+    // are hoisted, and therefore doesn't need to be hoisted itself. The loop
+    // below finds the starting position of such suffix and stores it in the
+    // [hoistingEndIndex] variable. In case all positional arguments come
+    // before all named arguments, the suffix coincides with the entire argument
+    // vector, and none of the arguments is hoisted. That way the legacy
+    // behavior is preserved.
+    int hoistingEndIndex;
+    if (library.enableNamedArgumentsAnywhereInLibrary) {
+      hoistingEndIndex = argumentsEvaluationOrder.length - 1;
+      for (int i = argumentsEvaluationOrder.length - 2;
+          i >= 0 && hoistingEndIndex == i + 1;
+          i--) {
+        int previousWeight =
+            argumentsEvaluationOrder[i + 1] is NamedExpression ? 1 : 0;
+        int currentWeight =
+            argumentsEvaluationOrder[i] is NamedExpression ? 1 : 0;
+        if (currentWeight <= previousWeight) {
+          --hoistingEndIndex;
         }
+      }
+    } else {
+      hoistingEndIndex = 0;
+    }
+
+    int positionalIndex = 0;
+    int namedIndex = 0;
+    for (int evaluationOrderIndex = 0;
+        evaluationOrderIndex < argumentsEvaluationOrder.length;
+        evaluationOrderIndex++) {
+      Object? argument = argumentsEvaluationOrder[evaluationOrderIndex];
+      assert(
+          argument is Expression || argument is NamedExpression,
+          "Expected the argument to be either an Expression "
+          "or a NamedExpression, got '${argument.runtimeType}'.");
+      if (argument is Expression) {
+        int index = positionalIndex++;
+        DartType formalType = getPositionalParameterType(calleeType, index);
+        DartType inferredFormalType = substitution != null
+            ? substitution.substituteType(formalType)
+            : formalType;
+        DartType inferredType;
+        if (isImplicitExtensionMember && index == 0) {
+          assert(
+              receiverType != null,
+              "No receiver type provided for implicit extension member "
+              "invocation.");
+          continue;
+        } else {
+          if (isSpecialCasedBinaryOperator) {
+            inferredFormalType = typeSchemaEnvironment
+                .getContextTypeOfSpecialCasedBinaryOperator(
+                    typeContext, receiverType!, inferredFormalType,
+                    isNonNullableByDefault: isNonNullableByDefault);
+          } else if (isSpecialCasedTernaryOperator) {
+            inferredFormalType = typeSchemaEnvironment
+                .getContextTypeOfSpecialCasedTernaryOperator(
+                    typeContext, receiverType!, inferredFormalType,
+                    isNonNullableByDefault: isNonNullableByDefault);
+          }
+          ExpressionInferenceResult result = inferExpression(
+              arguments.positional[index],
+              isNonNullableByDefault
+                  ? inferredFormalType
+                  : legacyErasure(inferredFormalType),
+              inferenceNeeded ||
+                  isSpecialCasedBinaryOperator ||
+                  isSpecialCasedTernaryOperator ||
+                  typeChecksNeeded);
+          inferredType = identical(result.inferredType, noInferredType) ||
+                  isNonNullableByDefault
+              ? result.inferredType
+              : legacyErasure(result.inferredType);
+          if (localHoistedExpressions != null &&
+              evaluationOrderIndex >= hoistingEndIndex) {
+            hoistedExpressions = null;
+          }
+          Expression expression =
+              _hoist(result.expression, inferredType, hoistedExpressions);
+          if (isIdentical && arguments.positional.length == 2) {
+            if (index == 0) {
+              flowAnalysis.equalityOp_rightBegin(expression, inferredType);
+            } else {
+              flowAnalysis.equalityOp_end(
+                  arguments.parent as Expression, expression, inferredType);
+            }
+          }
+          arguments.positional[index] = expression..parent = arguments;
+        }
+        if (inferenceNeeded || typeChecksNeeded) {
+          formalTypes!.add(formalType);
+          actualTypes!.add(inferredType);
+        }
+      } else {
+        assert(argument is NamedExpression);
+        int index = namedIndex++;
+        NamedExpression namedArgument = arguments.named[index];
+        DartType formalType =
+            getNamedParameterType(calleeType, namedArgument.name);
+        DartType inferredFormalType = substitution != null
+            ? substitution.substituteType(formalType)
+            : formalType;
         ExpressionInferenceResult result = inferExpression(
-            arguments.positional[position],
+            namedArgument.value,
             isNonNullableByDefault
                 ? inferredFormalType
                 : legacyErasure(inferredFormalType),
             inferenceNeeded ||
                 isSpecialCasedBinaryOperator ||
-                isSpecialCasedTernaryOperator ||
                 typeChecksNeeded);
-        inferredType = identical(result.inferredType, noInferredType) ||
-                isNonNullableByDefault
-            ? result.inferredType
-            : legacyErasure(result.inferredType);
+        DartType inferredType =
+            identical(result.inferredType, noInferredType) ||
+                    isNonNullableByDefault
+                ? result.inferredType
+                : legacyErasure(result.inferredType);
+        if (localHoistedExpressions != null &&
+            evaluationOrderIndex >= hoistingEndIndex) {
+          hoistedExpressions = null;
+        }
         Expression expression =
             _hoist(result.expression, inferredType, hoistedExpressions);
-        if (isIdentical && arguments.positional.length == 2) {
-          if (position == 0) {
-            flowAnalysis.equalityOp_rightBegin(expression, inferredType);
-          } else {
-            flowAnalysis.equalityOp_end(
-                arguments.parent as Expression, expression, inferredType);
-          }
+        namedArgument.value = expression..parent = namedArgument;
+        if (inferenceNeeded || typeChecksNeeded) {
+          formalTypes!.add(formalType);
+          actualTypes!.add(inferredType);
         }
-        arguments.positional[position] = expression..parent = arguments;
-      }
-      if (inferenceNeeded || typeChecksNeeded) {
-        formalTypes!.add(formalType);
-        actualTypes!.add(inferredType);
       }
     }
+    assert(
+        positionalIndex == arguments.positional.length,
+        "Expected 'positionalIndex' to be ${arguments.positional.length}, "
+        "got ${positionalIndex}.");
+    assert(
+        namedIndex == arguments.named.length,
+        "Expected 'namedIndex' to be ${arguments.named.length}, "
+        "got ${namedIndex}.");
     if (isSpecialCasedBinaryOperator) {
       calleeType = replaceReturnType(
           calleeType,
@@ -2347,30 +2470,6 @@
           typeSchemaEnvironment.getTypeOfSpecialCasedTernaryOperator(
               receiverType!, actualTypes![0], actualTypes[1], library.library));
     }
-    for (NamedExpression namedArgument in arguments.named) {
-      DartType formalType =
-          getNamedParameterType(calleeType, namedArgument.name);
-      DartType inferredFormalType = substitution != null
-          ? substitution.substituteType(formalType)
-          : formalType;
-      ExpressionInferenceResult result = inferExpression(
-          namedArgument.value,
-          isNonNullableByDefault
-              ? inferredFormalType
-              : legacyErasure(inferredFormalType),
-          inferenceNeeded || isSpecialCasedBinaryOperator || typeChecksNeeded);
-      DartType inferredType = identical(result.inferredType, noInferredType) ||
-              isNonNullableByDefault
-          ? result.inferredType
-          : legacyErasure(result.inferredType);
-      Expression expression =
-          _hoist(result.expression, inferredType, hoistedExpressions);
-      namedArgument.value = expression..parent = namedArgument;
-      if (inferenceNeeded || typeChecksNeeded) {
-        formalTypes!.add(formalType);
-        actualTypes!.add(inferredType);
-      }
-    }
 
     // Check for and remove duplicated named arguments.
     List<NamedExpression> named = arguments.named;
@@ -2516,7 +2615,9 @@
       calleeType = legacyErasure(calleeType) as FunctionType;
     }
 
-    return new SuccessfulInferenceResult(inferredType, calleeType);
+    return new SuccessfulInferenceResult(inferredType, calleeType,
+        hoistedArguments: localHoistedExpressions,
+        inferredReceiverType: receiverType);
   }
 
   FunctionType inferLocalFunction(FunctionNode function, DartType? typeContext,
@@ -2767,7 +2868,7 @@
       Link<NullAwareGuard> nullAwareGuards,
       Expression receiver,
       Name name,
-      Arguments arguments,
+      ArgumentsImpl arguments,
       DartType typeContext,
       List<VariableDeclaration>? hoistedExpressions,
       {required bool isImplicitCall}) {
@@ -2792,7 +2893,7 @@
       Expression receiver,
       NeverType receiverType,
       Name name,
-      Arguments arguments,
+      ArgumentsImpl arguments,
       DartType typeContext,
       List<VariableDeclaration>? hoistedExpressions,
       {required bool isImplicitCall}) {
@@ -2820,7 +2921,7 @@
       DartType receiverType,
       ObjectAccessTarget target,
       Name name,
-      Arguments arguments,
+      ArgumentsImpl arguments,
       DartType typeContext,
       List<VariableDeclaration>? hoistedExpressions,
       {required bool isExpressionInvocation,
@@ -2854,7 +2955,7 @@
       DartType receiverType,
       ObjectAccessTarget target,
       Name name,
-      Arguments arguments,
+      ArgumentsImpl arguments,
       DartType typeContext,
       List<VariableDeclaration>? hoistedExpressions,
       {required bool isImplicitCall}) {
@@ -2905,8 +3006,8 @@
     } else {
       StaticInvocation staticInvocation = transformExtensionMethodInvocation(
           fileOffset, target, receiver, arguments);
-      InvocationInferenceResult result = inferInvocation(
-          typeContext, fileOffset, functionType, staticInvocation.arguments,
+      InvocationInferenceResult result = inferInvocation(typeContext,
+          fileOffset, functionType, staticInvocation.arguments as ArgumentsImpl,
           hoistedExpressions: hoistedExpressions,
           receiverType: receiverType,
           isImplicitExtensionMember: true,
@@ -2969,7 +3070,7 @@
       Expression receiver,
       DartType receiverType,
       ObjectAccessTarget target,
-      Arguments arguments,
+      ArgumentsImpl arguments,
       DartType typeContext,
       List<VariableDeclaration>? hoistedExpressions,
       {required bool isImplicitCall}) {
@@ -3122,8 +3223,8 @@
             method.enclosingClass!, method.function.returnType)) {
       contravariantCheck = true;
     }
-    InvocationInferenceResult result = inferInvocation(
-        typeContext, fileOffset, declaredFunctionType, arguments,
+    InvocationInferenceResult result = inferInvocation(typeContext, fileOffset,
+        declaredFunctionType, arguments as ArgumentsImpl,
         hoistedExpressions: hoistedExpressions,
         receiverType: receiverType,
         isImplicitCall: isImplicitCall,
@@ -3238,7 +3339,7 @@
       Expression receiver,
       DartType receiverType,
       ObjectAccessTarget target,
-      Arguments arguments,
+      ArgumentsImpl arguments,
       DartType typeContext,
       List<VariableDeclaration>? hoistedExpressions,
       {required bool isExpressionInvocation}) {
@@ -3445,7 +3546,7 @@
       Expression receiver,
       DartType receiverType,
       ObjectAccessTarget target,
-      Arguments arguments,
+      ArgumentsImpl arguments,
       DartType typeContext,
       List<VariableDeclaration>? hoistedExpressions,
       {required bool isExpressionInvocation}) {
@@ -3619,7 +3720,7 @@
       Expression receiver,
       DartType receiverType,
       Name name,
-      Arguments arguments,
+      ArgumentsImpl arguments,
       DartType typeContext,
       {required bool isExpressionInvocation,
       required bool isImplicitCall,
@@ -3842,7 +3943,7 @@
         : const ObjectAccessTarget.missing();
     int fileOffset = expression.fileOffset;
     Name methodName = expression.name;
-    Arguments arguments = expression.arguments;
+    ArgumentsImpl arguments = expression.arguments as ArgumentsImpl;
     DartType receiverType = thisType!;
     bool isSpecialCasedBinaryOperator =
         isSpecialCasedBinaryOperatorForReceiverType(target, receiverType);
@@ -3969,14 +4070,33 @@
       DartType tearOffType,
       Expression expression) {
     if (implicitInstantiation != null) {
+      List<DartType> typeArguments = implicitInstantiation.typeArguments;
       if (!isTopLevel) {
         checkBoundsInInstantiation(implicitInstantiation.functionType,
-            implicitInstantiation.typeArguments, expression.fileOffset,
+            typeArguments, expression.fileOffset,
             inferred: true);
       }
-      expression =
-          new Instantiation(expression, implicitInstantiation.typeArguments)
-            ..fileOffset = expression.fileOffset;
+      if (expression is TypedefTearOff) {
+        Substitution substitution =
+            Substitution.fromPairs(expression.typeParameters, typeArguments);
+        typeArguments =
+            expression.typeArguments.map(substitution.substituteType).toList();
+        expression = expression.expression;
+      } else {
+        LoweredTypedefTearOff? loweredTypedefTearOff =
+            LoweredTypedefTearOff.fromExpression(expression);
+        if (loweredTypedefTearOff != null) {
+          Substitution substitution = Substitution.fromPairs(
+              loweredTypedefTearOff.typedefTearOff.function.typeParameters,
+              typeArguments);
+          typeArguments = loweredTypedefTearOff.typeArguments
+              .map(substitution.substituteType)
+              .toList();
+          expression = loweredTypedefTearOff.targetTearOff;
+        }
+      }
+      expression = new Instantiation(expression, typeArguments)
+        ..fileOffset = expression.fileOffset;
       tearOffType = implicitInstantiation.instantiatedType;
     }
     return new ExpressionInferenceResult(tearOffType, expression);
@@ -4772,10 +4892,63 @@
   @override
   final FunctionType functionType;
 
-  SuccessfulInferenceResult(this.inferredType, this.functionType);
+  final List<VariableDeclaration>? hoistedArguments;
+
+  final DartType? inferredReceiverType;
+
+  SuccessfulInferenceResult(this.inferredType, this.functionType,
+      {this.hoistedArguments, this.inferredReceiverType});
 
   @override
-  Expression applyResult(Expression expression) => expression;
+  Expression applyResult(Expression expression) {
+    List<VariableDeclaration>? hoistedArguments = this.hoistedArguments;
+    if (hoistedArguments == null || hoistedArguments.isEmpty) {
+      return expression;
+    } else {
+      assert(expression is InvocationExpression);
+      if (expression is FactoryConstructorInvocation) {
+        return _insertHoistedExpressions(expression, hoistedArguments);
+      } else if (expression is TypeAliasedConstructorInvocation) {
+        return _insertHoistedExpressions(expression, hoistedArguments);
+      } else if (expression is TypeAliasedFactoryInvocation) {
+        return _insertHoistedExpressions(expression, hoistedArguments);
+      } else if (expression is ConstructorInvocation) {
+        return _insertHoistedExpressions(expression, hoistedArguments);
+      } else if (expression is DynamicInvocation) {
+        return _insertHoistedExpressions(expression, hoistedArguments);
+      } else if (expression is FunctionInvocation) {
+        return _insertHoistedExpressions(expression, hoistedArguments);
+      } else if (expression is InstanceGetterInvocation) {
+        // The hoisting of InstanceGetterInvocation is performed elsewhere.
+        return expression;
+      } else if (expression is InstanceInvocation) {
+        VariableDeclaration receiver = createVariable(
+            expression.receiver, inferredReceiverType ?? const DynamicType());
+        expression.receiver = createVariableGet(receiver)..parent = expression;
+        return createLet(
+            receiver, _insertHoistedExpressions(expression, hoistedArguments));
+      } else if (expression is LocalFunctionInvocation) {
+        return _insertHoistedExpressions(expression, hoistedArguments);
+      } else if (expression is StaticInvocation) {
+        return _insertHoistedExpressions(expression, hoistedArguments);
+      } else if (expression is SuperMethodInvocation) {
+        return _insertHoistedExpressions(expression, hoistedArguments);
+      } else {
+        throw new StateError(
+            "Unhandled invocation kind '${expression.runtimeType}'.");
+      }
+    }
+  }
+
+  static Expression _insertHoistedExpressions(
+      Expression expression, List<VariableDeclaration> hoistedExpressions) {
+    if (hoistedExpressions.isNotEmpty) {
+      for (int index = hoistedExpressions.length - 1; index >= 0; index--) {
+        expression = createLet(hoistedExpressions[index], expression);
+      }
+    }
+    return expression;
+  }
 
   @override
   bool get isInapplicable => false;
@@ -4811,6 +4984,78 @@
   }
 }
 
+abstract class InitializerInferenceResult {
+  /// Modifies list of initializers in-place to apply the inference result.
+  void applyResult(List<Initializer> initializers, TreeNode? parent);
+
+  factory InitializerInferenceResult.fromInvocationInferenceResult(
+      InvocationInferenceResult invocationInferenceResult) {
+    if (invocationInferenceResult is SuccessfulInferenceResult) {
+      return new SuccessfulInitializerInvocationInferenceResult
+          .fromSuccessfulInferenceResult(invocationInferenceResult);
+    } else {
+      return new WrapInProblemInitializerInferenceResult
+              .fromWrapInProblemInferenceResult(
+          invocationInferenceResult as WrapInProblemInferenceResult);
+    }
+  }
+}
+
+class SuccessfulInitializerInferenceResult
+    implements InitializerInferenceResult {
+  const SuccessfulInitializerInferenceResult();
+
+  @override
+  void applyResult(List<Initializer> initializers, TreeNode? parent) {}
+}
+
+class SuccessfulInitializerInvocationInferenceResult
+    implements InitializerInferenceResult {
+  final DartType inferredType;
+
+  final FunctionType functionType;
+
+  final List<VariableDeclaration>? hoistedArguments;
+
+  final DartType? inferredReceiverType;
+
+  SuccessfulInitializerInvocationInferenceResult(
+      {required this.inferredType,
+      required this.functionType,
+      required this.hoistedArguments,
+      required this.inferredReceiverType});
+
+  SuccessfulInitializerInvocationInferenceResult.fromSuccessfulInferenceResult(
+      SuccessfulInferenceResult successfulInferenceResult)
+      : this(
+            inferredType: successfulInferenceResult.inferredType,
+            functionType: successfulInferenceResult.functionType,
+            hoistedArguments: successfulInferenceResult.hoistedArguments,
+            inferredReceiverType:
+                successfulInferenceResult.inferredReceiverType);
+
+  @override
+  void applyResult(List<Initializer> initializers, TreeNode? parent) {
+    List<VariableDeclaration>? hoistedArguments = this.hoistedArguments;
+    if (hoistedArguments != null && hoistedArguments.isNotEmpty) {
+      for (VariableDeclaration hoistedArgument in hoistedArguments) {
+        initializers.add(new LocalInitializer(hoistedArgument)
+          ..parent = parent
+          ..fileOffset = hoistedArgument.fileOffset);
+      }
+    }
+  }
+}
+
+class WrapInProblemInitializerInferenceResult
+    implements InitializerInferenceResult {
+  WrapInProblemInitializerInferenceResult.fromWrapInProblemInferenceResult(
+      WrapInProblemInferenceResult wrapInProblemInferenceResult);
+
+  @override
+  void applyResult(List<Initializer> initializers, TreeNode? parent) {}
+}
+
 /// The result of inference of a property get expression.
 class PropertyGetInferenceResult {
   /// The main inference result.
diff --git a/pkg/front_end/lib/src/fasta/uri_translator.dart b/pkg/front_end/lib/src/fasta/uri_translator.dart
index c6777ee..cf624b4 100644
--- a/pkg/front_end/lib/src/fasta/uri_translator.dart
+++ b/pkg/front_end/lib/src/fasta/uri_translator.dart
@@ -6,7 +6,8 @@
 
 import 'package:package_config/package_config.dart';
 
-import '../base/libraries_specification.dart' show TargetLibrariesSpecification;
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart'
+    show TargetLibrariesSpecification;
 import 'compiler_context.dart' show CompilerContext;
 import 'fasta_codes.dart';
 
diff --git a/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart b/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart
index 14d5e17..94a1865 100644
--- a/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart
+++ b/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart
@@ -70,7 +70,7 @@
   void accept(DirectParserASTContent node) {
     if (node is DirectParserASTContentCompilationUnitEnd ||
         node is DirectParserASTContentTopLevelDeclarationEnd ||
-        node is DirectParserASTContentClassOrMixinBodyEnd ||
+        node is DirectParserASTContentClassOrMixinOrExtensionBodyEnd ||
         node is DirectParserASTContentMemberEnd) {
       visitChildren(node);
       return;
@@ -99,8 +99,8 @@
       visitMetadataStar(metadata);
       return;
     }
-    if (node is DirectParserASTContentFunctionTypeAliasEnd) {
-      DirectParserASTContentFunctionTypeAliasEnd typedefDecl = node;
+    if (node is DirectParserASTContentTypedefEnd) {
+      DirectParserASTContentTypedefEnd typedefDecl = node;
       visitTypedef(
           typedefDecl, typedefDecl.typedefKeyword, typedefDecl.endToken);
       return;
@@ -253,8 +253,8 @@
       Token endInclusive) {}
 
   /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitTypedef(DirectParserASTContentFunctionTypeAliasEnd node,
-      Token startInclusive, Token endInclusive) {}
+  void visitTypedef(DirectParserASTContentTypedefEnd node, Token startInclusive,
+      Token endInclusive) {}
 
   /// Note: Implementers can call visitChildren on this node.
   void visitMetadataStar(DirectParserASTContentMetadataStarEnd node) {
@@ -364,7 +364,8 @@
       return false;
     }
     if (children!.first
-        is! DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin) {
+        // ignore: lines_longer_than_80_chars
+        is! DirectParserASTContentClassOrMixinOrNamedMixinApplicationPreludeBegin) {
       return false;
     }
     if (children!.last is! DirectParserASTContentClassDeclarationEnd) {
@@ -447,16 +448,16 @@
         is! DirectParserASTContentUncategorizedTopLevelDeclarationBegin) {
       return false;
     }
-    if (children!.last is! DirectParserASTContentFunctionTypeAliasEnd) {
+    if (children!.last is! DirectParserASTContentTypedefEnd) {
       return false;
     }
 
     return true;
   }
 
-  DirectParserASTContentFunctionTypeAliasEnd asTypedef() {
+  DirectParserASTContentTypedefEnd asTypedef() {
     if (!isTypedef()) throw "Not typedef";
-    return children!.last as DirectParserASTContentFunctionTypeAliasEnd;
+    return children!.last as DirectParserASTContentTypedefEnd;
   }
 
   bool isScript() {
@@ -541,7 +542,8 @@
       return false;
     }
     if (children!.first
-        is! DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin) {
+        // ignore: lines_longer_than_80_chars
+        is! DirectParserASTContentClassOrMixinOrNamedMixinApplicationPreludeBegin) {
       return false;
     }
     if (children!.last is! DirectParserASTContentMixinDeclarationEnd) {
@@ -561,7 +563,8 @@
       return false;
     }
     if (children!.first
-        is! DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin) {
+        // ignore: lines_longer_than_80_chars
+        is! DirectParserASTContentClassOrMixinOrNamedMixinApplicationPreludeBegin) {
       return false;
     }
     if (children!.last is! DirectParserASTContentNamedMixinApplicationEnd) {
@@ -849,9 +852,12 @@
 
 extension MixinDeclarationExtension
     on DirectParserASTContentMixinDeclarationEnd {
-  DirectParserASTContentClassOrMixinBodyEnd getClassOrMixinBody() {
+  DirectParserASTContentClassOrMixinOrExtensionBodyEnd
+      getClassOrMixinOrExtensionBody() {
     for (DirectParserASTContent child in children!) {
-      if (child is DirectParserASTContentClassOrMixinBodyEnd) return child;
+      if (child is DirectParserASTContentClassOrMixinOrExtensionBodyEnd) {
+        return child;
+      }
     }
     throw "Not found.";
   }
@@ -859,9 +865,12 @@
 
 extension ClassDeclarationExtension
     on DirectParserASTContentClassDeclarationEnd {
-  DirectParserASTContentClassOrMixinBodyEnd getClassOrMixinBody() {
+  DirectParserASTContentClassOrMixinOrExtensionBodyEnd
+      getClassOrMixinOrExtensionBody() {
     for (DirectParserASTContent child in children!) {
-      if (child is DirectParserASTContentClassOrMixinBodyEnd) return child;
+      if (child is DirectParserASTContentClassOrMixinOrExtensionBodyEnd) {
+        return child;
+      }
     }
     throw "Not found.";
   }
@@ -893,7 +902,7 @@
 }
 
 extension ClassOrMixinBodyExtension
-    on DirectParserASTContentClassOrMixinBodyEnd {
+    on DirectParserASTContentClassOrMixinOrExtensionBodyEnd {
   List<DirectParserASTContentMemberEnd> getMembers() {
     List<DirectParserASTContentMemberEnd> members = [];
     for (DirectParserASTContent child in children!) {
@@ -1213,7 +1222,7 @@
           // Exact match.
         } else if (end == "TopLevelDeclaration" &&
             (begin == "ExtensionDeclarationPrelude" ||
-                begin == "ClassOrNamedMixinApplicationPrelude" ||
+                begin == "ClassOrMixinOrNamedMixinApplicationPrelude" ||
                 begin == "TopLevelMember" ||
                 begin == "UncategorizedTopLevelDeclaration")) {
           // endTopLevelDeclaration is started by one of
diff --git a/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart b/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
index 8c34151..4fedb0b 100644
--- a/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
@@ -155,9 +155,9 @@
   }
 
   @override
-  void beginClassOrMixinBody(DeclarationKind kind, Token token) {
-    DirectParserASTContentClassOrMixinBodyBegin data =
-        new DirectParserASTContentClassOrMixinBodyBegin(
+  void beginClassOrMixinOrExtensionBody(DeclarationKind kind, Token token) {
+    DirectParserASTContentClassOrMixinOrExtensionBodyBegin data =
+        new DirectParserASTContentClassOrMixinOrExtensionBodyBegin(
             DirectParserASTType.BEGIN,
             kind: kind,
             token: token);
@@ -165,10 +165,11 @@
   }
 
   @override
-  void endClassOrMixinBody(
+  void endClassOrMixinOrExtensionBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
-    DirectParserASTContentClassOrMixinBodyEnd data =
-        new DirectParserASTContentClassOrMixinBodyEnd(DirectParserASTType.END,
+    DirectParserASTContentClassOrMixinOrExtensionBodyEnd data =
+        new DirectParserASTContentClassOrMixinOrExtensionBodyEnd(
+            DirectParserASTType.END,
             kind: kind,
             memberCount: memberCount,
             beginToken: beginToken,
@@ -177,9 +178,9 @@
   }
 
   @override
-  void beginClassOrNamedMixinApplicationPrelude(Token token) {
-    DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin data =
-        new DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin(
+  void beginClassOrMixinOrNamedMixinApplicationPrelude(Token token) {
+    DirectParserASTContentClassOrMixinOrNamedMixinApplicationPreludeBegin data =
+        new DirectParserASTContentClassOrMixinOrNamedMixinApplicationPreludeBegin(
             DirectParserASTType.BEGIN,
             token: token);
     seen(data);
@@ -526,10 +527,11 @@
   }
 
   @override
-  void beginFactoryMethod(
-      Token lastConsumed, Token? externalToken, Token? constToken) {
+  void beginFactoryMethod(DeclarationKind declarationKind, Token lastConsumed,
+      Token? externalToken, Token? constToken) {
     DirectParserASTContentFactoryMethodBegin data =
         new DirectParserASTContentFactoryMethodBegin(DirectParserASTType.BEGIN,
+            declarationKind: declarationKind,
             lastConsumed: lastConsumed,
             externalToken: externalToken,
             constToken: constToken);
@@ -929,19 +931,17 @@
   }
 
   @override
-  void beginFunctionTypeAlias(Token token) {
-    DirectParserASTContentFunctionTypeAliasBegin data =
-        new DirectParserASTContentFunctionTypeAliasBegin(
-            DirectParserASTType.BEGIN,
+  void beginTypedef(Token token) {
+    DirectParserASTContentTypedefBegin data =
+        new DirectParserASTContentTypedefBegin(DirectParserASTType.BEGIN,
             token: token);
     seen(data);
   }
 
   @override
-  void endFunctionTypeAlias(
-      Token typedefKeyword, Token? equals, Token endToken) {
-    DirectParserASTContentFunctionTypeAliasEnd data =
-        new DirectParserASTContentFunctionTypeAliasEnd(DirectParserASTType.END,
+  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
+    DirectParserASTContentTypedefEnd data =
+        new DirectParserASTContentTypedefEnd(DirectParserASTType.END,
             typedefKeyword: typedefKeyword, equals: equals, endToken: endToken);
     seen(data);
   }
@@ -1172,11 +1172,12 @@
   }
 
   @override
-  void endImplicitCreationExpression(Token token) {
+  void endImplicitCreationExpression(Token token, Token openAngleBracket) {
     DirectParserASTContentImplicitCreationExpressionEnd data =
         new DirectParserASTContentImplicitCreationExpressionEnd(
             DirectParserASTType.END,
-            token: token);
+            token: token,
+            openAngleBracket: openAngleBracket);
     seen(data);
   }
 
@@ -1431,6 +1432,7 @@
 
   @override
   void beginMethod(
+      DeclarationKind declarationKind,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1439,6 +1441,7 @@
       Token name) {
     DirectParserASTContentMethodBegin data =
         new DirectParserASTContentMethodBegin(DirectParserASTType.BEGIN,
+            declarationKind: declarationKind,
             externalToken: externalToken,
             staticToken: staticToken,
             covariantToken: covariantToken,
@@ -1834,9 +1837,24 @@
   }
 
   @override
-  void beginFields(Token lastConsumed) {
+  void beginFields(
+      DeclarationKind declarationKind,
+      Token? abstractToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      Token lastConsumed) {
     DirectParserASTContentFieldsBegin data =
         new DirectParserASTContentFieldsBegin(DirectParserASTType.BEGIN,
+            declarationKind: declarationKind,
+            abstractToken: abstractToken,
+            externalToken: externalToken,
+            staticToken: staticToken,
+            covariantToken: covariantToken,
+            lateToken: lateToken,
+            varFinalOrConst: varFinalOrConst,
             lastConsumed: lastConsumed);
     seen(data);
   }
@@ -3080,14 +3098,16 @@
       };
 }
 
-class DirectParserASTContentClassOrMixinBodyBegin
+class DirectParserASTContentClassOrMixinOrExtensionBodyBegin
     extends DirectParserASTContent {
   final DeclarationKind kind;
   final Token token;
 
-  DirectParserASTContentClassOrMixinBodyBegin(DirectParserASTType type,
-      {required this.kind, required this.token})
-      : super("ClassOrMixinBody", type);
+  DirectParserASTContentClassOrMixinOrExtensionBodyBegin(
+      DirectParserASTType type,
+      {required this.kind,
+      required this.token})
+      : super("ClassOrMixinOrExtensionBody", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
@@ -3096,18 +3116,19 @@
       };
 }
 
-class DirectParserASTContentClassOrMixinBodyEnd extends DirectParserASTContent {
+class DirectParserASTContentClassOrMixinOrExtensionBodyEnd
+    extends DirectParserASTContent {
   final DeclarationKind kind;
   final int memberCount;
   final Token beginToken;
   final Token endToken;
 
-  DirectParserASTContentClassOrMixinBodyEnd(DirectParserASTType type,
+  DirectParserASTContentClassOrMixinOrExtensionBodyEnd(DirectParserASTType type,
       {required this.kind,
       required this.memberCount,
       required this.beginToken,
       required this.endToken})
-      : super("ClassOrMixinBody", type);
+      : super("ClassOrMixinOrExtensionBody", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
@@ -3118,14 +3139,14 @@
       };
 }
 
-class DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin
+class DirectParserASTContentClassOrMixinOrNamedMixinApplicationPreludeBegin
     extends DirectParserASTContent {
   final Token token;
 
-  DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin(
+  DirectParserASTContentClassOrMixinOrNamedMixinApplicationPreludeBegin(
       DirectParserASTType type,
       {required this.token})
-      : super("ClassOrNamedMixinApplicationPrelude", type);
+      : super("ClassOrMixinOrNamedMixinApplicationPrelude", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
@@ -3694,16 +3715,21 @@
 }
 
 class DirectParserASTContentFactoryMethodBegin extends DirectParserASTContent {
+  final DeclarationKind declarationKind;
   final Token lastConsumed;
   final Token? externalToken;
   final Token? constToken;
 
   DirectParserASTContentFactoryMethodBegin(DirectParserASTType type,
-      {required this.lastConsumed, this.externalToken, this.constToken})
+      {required this.declarationKind,
+      required this.lastConsumed,
+      this.externalToken,
+      this.constToken})
       : super("FactoryMethod", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
+        "declarationKind": declarationKind,
         "lastConsumed": lastConsumed,
         "externalToken": externalToken,
         "constToken": constToken,
@@ -4353,13 +4379,12 @@
       };
 }
 
-class DirectParserASTContentFunctionTypeAliasBegin
-    extends DirectParserASTContent {
+class DirectParserASTContentTypedefBegin extends DirectParserASTContent {
   final Token token;
 
-  DirectParserASTContentFunctionTypeAliasBegin(DirectParserASTType type,
+  DirectParserASTContentTypedefBegin(DirectParserASTType type,
       {required this.token})
-      : super("FunctionTypeAlias", type);
+      : super("Typedef", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
@@ -4367,15 +4392,14 @@
       };
 }
 
-class DirectParserASTContentFunctionTypeAliasEnd
-    extends DirectParserASTContent {
+class DirectParserASTContentTypedefEnd extends DirectParserASTContent {
   final Token typedefKeyword;
   final Token? equals;
   final Token endToken;
 
-  DirectParserASTContentFunctionTypeAliasEnd(DirectParserASTType type,
+  DirectParserASTContentTypedefEnd(DirectParserASTType type,
       {required this.typedefKeyword, this.equals, required this.endToken})
-      : super("FunctionTypeAlias", type);
+      : super("Typedef", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
@@ -4759,14 +4783,16 @@
 class DirectParserASTContentImplicitCreationExpressionEnd
     extends DirectParserASTContent {
   final Token token;
+  final Token openAngleBracket;
 
   DirectParserASTContentImplicitCreationExpressionEnd(DirectParserASTType type,
-      {required this.token})
+      {required this.token, required this.openAngleBracket})
       : super("ImplicitCreationExpression", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
+        "openAngleBracket": openAngleBracket,
       };
 }
 
@@ -5166,6 +5192,7 @@
 }
 
 class DirectParserASTContentMethodBegin extends DirectParserASTContent {
+  final DeclarationKind declarationKind;
   final Token? externalToken;
   final Token? staticToken;
   final Token? covariantToken;
@@ -5174,7 +5201,8 @@
   final Token name;
 
   DirectParserASTContentMethodBegin(DirectParserASTType type,
-      {this.externalToken,
+      {required this.declarationKind,
+      this.externalToken,
       this.staticToken,
       this.covariantToken,
       this.varFinalOrConst,
@@ -5184,6 +5212,7 @@
 
   @override
   Map<String, Object?> get deprecatedArguments => {
+        "declarationKind": declarationKind,
         "externalToken": externalToken,
         "staticToken": staticToken,
         "covariantToken": covariantToken,
@@ -5858,14 +5887,35 @@
 }
 
 class DirectParserASTContentFieldsBegin extends DirectParserASTContent {
+  final DeclarationKind declarationKind;
+  final Token? abstractToken;
+  final Token? externalToken;
+  final Token? staticToken;
+  final Token? covariantToken;
+  final Token? lateToken;
+  final Token? varFinalOrConst;
   final Token lastConsumed;
 
   DirectParserASTContentFieldsBegin(DirectParserASTType type,
-      {required this.lastConsumed})
+      {required this.declarationKind,
+      this.abstractToken,
+      this.externalToken,
+      this.staticToken,
+      this.covariantToken,
+      this.lateToken,
+      this.varFinalOrConst,
+      required this.lastConsumed})
       : super("Fields", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
+        "declarationKind": declarationKind,
+        "abstractToken": abstractToken,
+        "externalToken": externalToken,
+        "staticToken": staticToken,
+        "covariantToken": covariantToken,
+        "lateToken": lateToken,
+        "varFinalOrConst": varFinalOrConst,
         "lastConsumed": lastConsumed,
       };
 }
diff --git a/pkg/front_end/lib/src/fasta/util/textual_outline.dart b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
index 3392abe..b72d8b6 100644
--- a/pkg/front_end/lib/src/fasta/util/textual_outline.dart
+++ b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
@@ -753,8 +753,7 @@
   }
 
   @override
-  void endFunctionTypeAlias(
-      Token typedefKeyword, Token? equals, Token endToken) {
+  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
     elementStartToChunk[typedefKeyword] =
         new _FunctionTypeAliasChunk(typedefKeyword, endToken);
   }
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index 9ae38bb..4d54b4b 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -77,7 +77,7 @@
     List<Component> loadedComponents = <Component>[];
 
     Component? sdkSummary = await options.loadSdkSummary(null);
-    // By using the nameRoot of the the summary, we enable sharing the
+    // By using the nameRoot of the summary, we enable sharing the
     // sdkSummary between multiple invocations.
     CanonicalName nameRoot = sdkSummary?.root ?? new CanonicalName.root();
     if (sdkSummary != null) {
@@ -114,7 +114,7 @@
       // Create the requested component ("truncating" or not).
       //
       // Note: we don't pass the library argument to the constructor to
-      // preserve the the libraries parent pointer (it should continue to point
+      // preserve the libraries parent pointer (it should continue to point
       // to the component within KernelTarget).
       Component trimmedSummaryComponent =
           new Component(nameRoot: summaryComponent.root)
diff --git a/pkg/front_end/lib/src/testing/id_testing_utils.dart b/pkg/front_end/lib/src/testing/id_testing_utils.dart
index 9aad4b2..4c4f476 100644
--- a/pkg/front_end/lib/src/testing/id_testing_utils.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_utils.dart
@@ -124,7 +124,7 @@
     InternalCompilerResult compilerResult, Library library,
     {bool required: true}) {
   SourceLoader loader = compilerResult.kernelTargetForTesting!.loader;
-  LibraryBuilder? builder = loader.builders[library.importUri];
+  LibraryBuilder? builder = loader.lookupLibraryBuilder(library.importUri);
   if (builder == null && required) {
     throw new ArgumentError("DeclarationBuilder for $library not found.");
   }
@@ -137,7 +137,7 @@
   SourceLibraryBuilder builder =
       lookupLibraryBuilder(compilerResult, library, required: required)
           as SourceLibraryBuilder;
-  return builder.libraryDeclaration;
+  return builder.libraryTypeParameterScopeBuilderForTesting;
 }
 
 ClassBuilder? lookupClassBuilder(
@@ -734,7 +734,7 @@
   if (useCodes) {
     return errors.map((m) => m.code).join(',');
   } else {
-    return errors.map((m) => m.message).join(',');
+    return errors.map((m) => m.problemMessage).join(',');
   }
 }
 
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 9feaf38..b217478 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -347,7 +347,10 @@
 FfiFieldNull/analyzerCode: Fail
 FfiLeafCallMustNotReturnHandle/analyzerCode: Fail
 FfiLeafCallMustNotTakeHandle/analyzerCode: Fail
-FfiNativeAnnotationMustAnnotateStatic/analyzerCode: Fail
+FfiNativeMustBeExternal/analyzerCode: Fail
+FfiNativeOnlyNativeFieldWrapperClassCanBePointer/analyzerCode: Fail
+FfiNativeUnexpectedNumberOfParameters/analyzerCode: Fail
+FfiNativeUnexpectedNumberOfParametersWithReceiver/analyzerCode: Fail
 FfiNotStatic/analyzerCode: Fail
 FfiPackedAnnotation/analyzerCode: Fail
 FfiPackedAnnotationAlignment/analyzerCode: Fail
@@ -419,7 +422,6 @@
 ImplementsNever/example: Fail # Feature not yet enabled by default.
 ImplementsVoid/analyzerCode: Fail # Feature not yet in analyzer.
 ImplementsVoid/example: Fail # Feature not yet enabled by default.
-ImplicitCallOfNonMethod/example: Fail
 ImplicitMixinOverride/analyzerCode: Fail
 ImplicitMixinOverride/example: Fail
 ImplicitReturnNull/analyzerCode: Fail
@@ -523,6 +525,10 @@
 JsInteropExternalMemberNotJSAnnotated/example: Fail # Web compiler specific
 JsInteropIndexNotSupported/analyzerCode: Fail # Web compiler specific
 JsInteropIndexNotSupported/example: Fail # Web compiler specific
+JsInteropStaticInteropWithInstanceMembers/analyzerCode: Fail # Web compiler specific
+JsInteropStaticInteropWithInstanceMembers/example: Fail # Web compiler specific
+JsInteropStaticInteropWithNonStaticSupertype/analyzerCode: Fail # Web compiler specific
+JsInteropStaticInteropWithNonStaticSupertype/example: Fail # Web compiler specific
 JsInteropJSClassExtendsDartClass/analyzerCode: Fail # Web compiler specific
 JsInteropJSClassExtendsDartClass/example: Fail # Web compiler specific
 JsInteropNamedParameters/analyzerCode: Fail # Web compiler specific
@@ -604,6 +610,7 @@
 NeverValueError/example: Fail
 NeverValueWarning/analyzerCode: Fail
 NeverValueWarning/example: Fail
+NewAsSelector/analyzerCode: Fail
 NoFormals/example: Fail
 NoSuchNamedParameter/example: Fail
 NoUnnamedConstructorInObject/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index d3859ab..0ef4650 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -50,6 +50,12 @@
 # which will be used when generating code in Analyzer for translating
 # fasta error codes to Analyzer error codes.
 #
+# Errors with an `index` can also optionally contain user-facing documentation
+# for the problem (documentation), which will be extracted to
+# `pkg/analyzer/tool/diagnostics/diagnostics.md`, as well as internal
+# documentation (comment), which will be included in the code generated for the
+# analyzer.
+#
 # In some cases a message is internal to the frontend, and no meaningful
 # analyzer code can be provided. In such cases set `frontendInternal: true`.
 #
@@ -595,9 +601,10 @@
     - "class C { static f; }"
 
 FunctionTypedParameterVar:
+  index: 119
   problemMessage: "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type."
   correctionMessage: "Try replacing the keyword with a return type."
-  analyzerCode: FUNCTION_TYPED_PARAMETER_VAR
+  analyzerCode: ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR
   script:
     - "void f(const x()) {}"
     - "void f(final x()) {}"
@@ -829,6 +836,9 @@
   problemMessage: "The modifier '#lexeme' was already specified."
   correctionMessage: "Try removing all but one occurrence of the modifier."
   analyzerCode: ParserErrorCode.DUPLICATED_MODIFIER
+  comment: |-
+    Parameters:
+    0: the modifier that was duplicated
   script:
     - "class C { const const m; }"
     - "class C { external external f(); }"
@@ -972,6 +982,35 @@
   correctionMessage: "Try removing '#lexeme'."
   analyzerCode: ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION
   hasPublishedDocs: true
+  comment: No parameters.
+  documentation: |-
+    #### Description
+
+    The analyzer produces this diagnostic when a member declared inside an
+    extension uses the keyword `covariant` in the declaration of a parameter.
+    Extensions aren't classes and don't have subclasses, so the keyword serves
+    no purpose.
+
+    #### Example
+
+    The following code produces this diagnostic because `i` is marked as being
+    covariant:
+
+    ```dart
+    extension E on String {
+      void a([!covariant!] int i) {}
+    }
+    ```
+
+    #### Common fixes
+
+    Remove the `covariant` keyword:
+
+    ```dart
+    extension E on String {
+      void a(int i) {}
+    }
+    ```
   script:
     - "extension on String { foo(covariant String child) {} }"
 
@@ -1119,6 +1158,9 @@
   problemMessage: "The label '#name' was already used in this switch statement."
   correctionMessage: "Try choosing a different name for this label."
   analyzerCode: ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT
+  comment: |-
+    Parameters:
+    0: the label that was duplicated
   statement:
     - "switch (0) {l1: case 0: break; l1: case 1: break;}"
 
@@ -1685,10 +1727,6 @@
   problemMessage: "Type '#name' not found."
   analyzerCode: UNDEFINED_CLASS
 
-NonInstanceTypeVariableUse:
-  problemMessage: "Can only use type variables in instance methods."
-  analyzerCode: TYPE_PARAMETER_REFERENCED_BY_STATIC
-
 NameNotFound:
   problemMessage: "Undefined name '#name'."
   analyzerCode: UNDEFINED_NAME
@@ -2191,6 +2229,27 @@
   problemMessage: "Extensions can't declare abstract members."
   correctionMessage: "Try providing an implementation for the member."
   analyzerCode: ParserErrorCode.EXTENSION_DECLARES_ABSTRACT_MEMBER
+  comment: No parameters.
+  documentation: |-
+    #### Description
+
+    The analyzer produces this diagnostic when an abstract declaration is
+    declared in an extension. Extensions can declare only concrete members.
+
+    #### Example
+
+    The following code produces this diagnostic because the method `a` doesn't
+    have a body:
+
+    ```dart
+    extension E on String {
+      int [!a!]();
+    }
+    ```
+
+    #### Common fixes
+
+    Either provide an implementation for the member or remove it.
   hasPublishedDocs: true
 
 ExtensionDeclaresConstructor:
@@ -2198,6 +2257,29 @@
   problemMessage: "Extensions can't declare constructors."
   correctionMessage: "Try removing the constructor declaration."
   analyzerCode: ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR
+  comment: No parameters.
+  documentation: |-
+    #### Description
+
+    The analyzer produces this diagnostic when a constructor declaration is
+    found in an extension. It isn't valid to define a constructor because
+    extensions aren't classes, and it isn't possible to create an instance of
+    an extension.
+
+    #### Example
+
+    The following code produces this diagnostic because there is a constructor
+    declaration in `E`:
+
+    ```dart
+    extension E on String {
+      [!E!]() : super();
+    }
+    ```
+
+    #### Common fixes
+
+    Remove the constructor or replace it with a static method.
   hasPublishedDocs: true
 
 ExtensionDeclaresInstanceField:
@@ -2205,6 +2287,30 @@
   problemMessage: "Extensions can't declare instance fields"
   correctionMessage: "Try removing the field declaration or making it a static field"
   analyzerCode: ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD
+  comment: No parameters.
+  documentation: |-
+    #### Description
+
+    The analyzer produces this diagnostic when an instance field declaration is
+    found in an extension. It isn't valid to define an instance field because
+    extensions can only add behavior, not state.
+
+    #### Example
+
+    The following code produces this diagnostic because `s` is an instance
+    field:
+
+    ```dart
+    %language=2.9
+    extension E on String {
+      String [!s!];
+    }
+    ```
+
+    #### Common fixes
+
+    Remove the field, make it a static field, or convert it to be a getter,
+    setter, or method.
   hasPublishedDocs: true
 
 ConflictsWithConstructor:
@@ -2637,9 +2743,13 @@
   problemMessage: "An operator can't have optional parameters."
 
 OperatorWithTypeParameters:
+  index: 120
   problemMessage: "Types parameters aren't allowed when defining an operator."
   correctionMessage: "Try removing the type parameters."
-  analyzerCode: TYPE_PARAMETER_ON_OPERATOR
+  analyzerCode: ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR
+  comment: |-
+    7.1.1 Operators: Type parameters are not syntactically supported on an
+    operator.
   script:
     - "class C { operator []<T>(T t) => null; }"
 
@@ -3019,6 +3129,9 @@
   index: 39
   problemMessage: "The string '#lexeme' isn't a user-definable operator."
   analyzerCode: ParserErrorCode.INVALID_OPERATOR
+  comment: |-
+    Parameters:
+    0: the operator that is invalid
   script:
     - "class C { void operator %=(x) {} }"
 
@@ -3809,6 +3922,17 @@
   problemMessage: "Cannot invoke an instance of '#type' because it declares 'call' to be something other than a method."
   correctionMessage: "Try changing 'call' to a method or explicitly invoke 'call'."
   analyzerCode: IMPLICIT_CALL_OF_NON_METHOD
+  script: |
+    class Class { void Function() get call => () {}; }
+    method(Class c) => c();
+
+ImplicitSuperCallOfNonMethod:
+  problemMessage: "Cannot invoke `super` because it declares 'call' to be something other than a method."
+  correctionMessage: "Try changing 'call' to a method or explicitly invoke 'call'."
+  analyzerCode: IMPLICIT_CALL_OF_NON_METHOD
+  script: |
+    class Super { void Function() get call => () {}; }
+    class Class extends Super { void method() => super(); }
 
 ExpectedOneExpression:
   problemMessage: "Expected one expression, but found additional input."
@@ -4559,9 +4683,24 @@
   problemMessage: "FFI leaf call must not have Handle return type."
   external: test/ffi_test.dart
 
-FfiNativeAnnotationMustAnnotateStatic:
+FfiNativeUnexpectedNumberOfParametersWithReceiver:
   # Used by dart:ffi
-  problemMessage: "FfiNative annotations can only be used on static functions."
+  problemMessage: "Unexpected number of FfiNative annotation parameters. Expected #count but has #count2. FfiNative instance method annotation must have receiver as first argument."
+  external: test/ffi_test.dart
+
+FfiNativeUnexpectedNumberOfParameters:
+  # Used by dart:ffi
+  problemMessage: "Unexpected number of FfiNative annotation parameters. Expected #count but has #count2."
+  external: test/ffi_test.dart
+
+FfiNativeOnlyNativeFieldWrapperClassCanBePointer:
+  # Used by dart:ffi
+  problemMessage: "Only classes extending NativeFieldWrapperClass1 can be passed as Pointer."
+  external: test/ffi_test.dart
+
+FfiNativeMustBeExternal:
+  # Used by dart:ffi
+  problemMessage: "FfiNative functions must be marked external."
   external: test/ffi_test.dart
 
 SpreadTypeMismatch:
@@ -4942,6 +5081,14 @@
   problemMessage: "JS interop classes do not support [] and []= operator methods."
   correctionMessage: "Try replacing with a normal method."
 
+JsInteropStaticInteropWithInstanceMembers:
+  problemMessage: "JS interop class '#name' with `@staticInterop` annotation cannot declare instance members."
+  correctionMessage: "Try moving the instance member to a static extension."
+
+JsInteropStaticInteropWithNonStaticSupertype:
+  problemMessage: "JS interop class '#name' has an `@staticInterop` annotation, but has supertype '#name2', which is non-static."
+  correctionMessage: "Try marking the supertype as a static interop class using `@staticInterop`."
+
 JsInteropJSClassExtendsDartClass:
   problemMessage: "JS interop class '#name' cannot extend Dart class '#name2'."
   correctionMessage: "Try removing the JS interop annotation or adding it to the parent class."
@@ -4951,8 +5098,8 @@
   correctionMessage: "Try replacing them with normal or optional parameters."
 
 JsInteropNativeClassInAnnotation:
-  problemMessage: "JS interop class '#name' conflicts with natively supported class '#name2' in '#string3'."
-  correctionMessage: "Try making the @JS class into an @anonymous class or use js_util on the JS object."
+  problemMessage: "Non-static JS interop class '#name' conflicts with natively supported class '#name2' in '#string3'."
+  correctionMessage: "Try replacing it with a static JS interop class using `@staticInterop` with extension methods, or use js_util to interact with the native object of type '#name2'."
 
 JsInteropNonExternalConstructor:
   problemMessage: "JS interop classes do not support non-external constructors."
@@ -5247,6 +5394,14 @@
     f() {}
     main() => f<int>;
 
+InstantiationNullableGenericFunctionType:
+  problemMessage: "The static type of the explicit instantiation operand must be a non-null generic function type but is '#type'."
+  correctionMessage: "Try changing the operand or remove the type arguments."
+  analyzerCode: DISALLOWED_TYPE_INSTANTIATION_EXPRESSION
+  experiments: constructor-tearoffs
+  script: |
+    test(void Function<T>()? f) => f<int>;
+
 InstantiationTooFewArguments:
   problemMessage: "Too few type arguments: #count required, #count2 given."
   correctionMessage: "Try adding the missing type arguments."
@@ -5285,3 +5440,9 @@
   experiments: constructor-tearoffs
   script:
     - "class C<X> { C.foo(); } bar() { C.foo<int>; }"
+
+NewAsSelector:
+  problemMessage: "'new' can only be used as a constructor reference."
+  experiments: constructor-tearoffs
+  script: |
+    method(dynamic d) => d.new;
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
index 75b5105..fbbb63a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
@@ -1,17 +1,5 @@
 Problems reported:
 
-parser/error_recovery/bracket_mismatch_01:25:11: Place positional arguments before named arguments.
-          D(),
-          ^
-
-parser/error_recovery/bracket_mismatch_01:26:11: Place positional arguments before named arguments.
-          D(),
-          ^
-
-parser/error_recovery/bracket_mismatch_01:27:9: Place positional arguments before named arguments.
-        ]),
-        ^
-
 parser/error_recovery/bracket_mismatch_01:27:9: Expected an identifier, but got ']'.
         ]),
         ^
@@ -23,7 +11,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -32,11 +20,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -59,7 +47,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
             handleIdentifier(C, typeReference)
             handleNoTypeArguments(m)
             handleType(C, null)
@@ -118,12 +106,12 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, C, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(D, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, D)
@@ -132,11 +120,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, D)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
             handleNoType({)
             handleIdentifier(D, methodDeclaration)
             handleNoTypeVariables(()
@@ -159,7 +147,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
             handleIdentifier(D, typeReference)
             handleNoTypeArguments(m)
             handleType(D, null)
@@ -186,19 +174,16 @@
                     endArguments(0, (, ))
                     handleSend(D, ,)
                     handleNamedArgument(:)
-                    handleRecoverableError(PositionalAfterNamedArgument, D, D)
                     handleIdentifier(D, expression)
                     handleNoTypeArguments(()
                     beginArguments(()
                     endArguments(0, (, ))
                     handleSend(D, ,)
-                    handleRecoverableError(PositionalAfterNamedArgument, D, D)
                     handleIdentifier(D, expression)
                     handleNoTypeArguments(()
                     beginArguments(()
                     endArguments(0, (, ))
                     handleSend(D, ,)
-                    handleRecoverableError(PositionalAfterNamedArgument, ], ])
                     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ']'., Try inserting an identifier before ']'., {lexeme: ]}], ], ])
                     handleIdentifier(, expression)
                     handleNoTypeArguments(])
@@ -225,7 +210,7 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, D, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
index 0b1eeb0..594b6db 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, C)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, C)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -77,7 +77,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, m, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, m)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
                 listener: handleIdentifier(C, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(C, null)
@@ -251,7 +251,7 @@
                 listener: endClassMethod(null, C, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -261,7 +261,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(D, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -277,7 +277,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(D, DeclarationKind.Class, D)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, D)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, D)
               parseMetadataStar({)
@@ -286,7 +286,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(null, null, null, null, null, D)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -329,7 +329,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, m, DeclarationKind.Class, D, false)
-                listener: beginMethod(null, null, null, null, null, m)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
                 listener: handleIdentifier(D, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(D, null)
@@ -414,8 +414,6 @@
                                                                                         listener: endArguments(0, (, ))
                                                                                   listener: handleSend(D, ,)
                                                                       listener: handleNamedArgument(:)
-                                                                      reportRecoverableError(D, PositionalAfterNamedArgument)
-                                                                        listener: handleRecoverableError(PositionalAfterNamedArgument, D, D)
                                                                       parseExpression(,)
                                                                         parsePrecedenceExpression(,, 1, true)
                                                                           parseUnaryExpression(,, true)
@@ -433,8 +431,6 @@
                                                                                         listener: beginArguments(()
                                                                                         listener: endArguments(0, (, ))
                                                                                   listener: handleSend(D, ,)
-                                                                      reportRecoverableError(D, PositionalAfterNamedArgument)
-                                                                        listener: handleRecoverableError(PositionalAfterNamedArgument, D, D)
                                                                       parseExpression(,)
                                                                         parsePrecedenceExpression(,, 1, true)
                                                                           parseUnaryExpression(,, true)
@@ -452,8 +448,6 @@
                                                                                         listener: beginArguments(()
                                                                                         listener: endArguments(0, (, ))
                                                                                   listener: handleSend(D, ,)
-                                                                      reportRecoverableError(], PositionalAfterNamedArgument)
-                                                                        listener: handleRecoverableError(PositionalAfterNamedArgument, ], ])
                                                                       parseExpression(,)
                                                                         parsePrecedenceExpression(,, 1, true)
                                                                           parseUnaryExpression(,, true)
@@ -520,7 +514,7 @@
                 listener: endClassMethod(null, D, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
index caa817a..5ee9cdb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
@@ -123,7 +123,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -132,11 +132,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -154,7 +154,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -181,7 +181,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -206,7 +206,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(=>)
@@ -221,7 +221,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables({)
@@ -239,7 +239,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -258,7 +258,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -280,7 +280,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(:)
@@ -306,7 +306,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -337,7 +337,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(=>)
@@ -354,7 +354,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables({)
@@ -374,7 +374,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -393,7 +393,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -415,7 +415,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(:)
@@ -441,7 +441,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -472,7 +472,7 @@
         beginMetadataStar(external)
         endMetadataStar(0)
         beginMember()
-          beginMethod(external, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, external, null, null, null, null, Foo)
             handleNoType(external)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -496,7 +496,7 @@
         beginMetadataStar(external)
         endMetadataStar(0)
         beginMember()
-          beginMethod(external, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, external, null, null, null, null, Foo)
             handleNoType(external)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -527,7 +527,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(})
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Foo)
             handleType(int, null)
@@ -539,7 +539,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(A)
             handleType(int, null)
@@ -552,7 +552,7 @@
             handleNoFieldInitializer(;)
           endClassFields(null, null, null, null, null, null, 3, int, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 19, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 19, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
index a652954..7e46b8b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, foo)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -72,7 +72,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -135,7 +135,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -193,7 +193,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -230,7 +230,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -274,7 +274,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -321,7 +321,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -375,7 +375,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -443,7 +443,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -522,7 +522,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -565,7 +565,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -615,7 +615,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -662,7 +662,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -716,7 +716,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -784,7 +784,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -864,7 +864,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, external, null, null, null, null, external, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(external, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, external, null, null, null, null, Foo)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -921,7 +921,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(;, null, external, null, null, null, null, external, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(external, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, external, null, null, null, null, Foo)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -999,7 +999,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(}, null, null, null, null, null, null, }, Instance of 'SimpleType', Foo, DeclarationKind.Class, Foo, false)
-                listener: beginFields(})
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Foo)
                 listener: handleType(int, null)
@@ -1018,7 +1018,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', A, DeclarationKind.Class, Foo, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(A)
                 listener: handleType(int, null)
@@ -1039,7 +1039,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 3, int, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 19, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 19, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
index cae9938..06805796 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
@@ -31,7 +31,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -40,11 +40,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -63,7 +63,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -91,7 +91,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -115,7 +115,7 @@
             handleRecoverableError(GetterConstructor, get, get)
           endClassConstructor(get, get, (, :, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
index 4180073..c1bf8ebf 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, get)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', get, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -72,7 +72,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -136,7 +136,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -192,7 +192,7 @@
                 listener: endClassConstructor(get, get, (, :, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
index df016c6..7629bd3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
@@ -27,7 +27,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -36,11 +36,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -59,7 +59,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -87,7 +87,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -110,7 +110,7 @@
             handleRecoverableError(ConstructorWithReturnType, void, void)
           endClassConstructor(null, void, (, :, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
index 69f5eb9..1502968 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, void)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -72,7 +72,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -136,7 +136,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -190,7 +190,7 @@
                 listener: endClassConstructor(null, void, (, :, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
index 4fdb547..26bb64b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
@@ -27,7 +27,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -36,11 +36,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -59,7 +59,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -87,7 +87,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -110,7 +110,7 @@
             handleRecoverableError(SetterConstructor, set, set)
           endClassConstructor(set, set, (, :, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
index 2950a4b..ca57772 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, set)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', set, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -72,7 +72,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -136,7 +136,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -190,7 +190,7 @@
                 listener: endClassConstructor(set, set, (, :, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
index 0a3de66..daaa1b0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
@@ -27,7 +27,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -36,11 +36,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -57,7 +57,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -83,7 +83,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -101,7 +101,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -125,7 +125,7 @@
             handleRecoverableError(GetterConstructor, get, get)
           endClassConstructor(get, get, (, :, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
index 2b05409..75d8a2f0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, get)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -68,7 +68,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -128,7 +128,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -165,7 +165,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, get, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -221,7 +221,7 @@
                 listener: endClassConstructor(get, get, (, :, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
index 003aeba..750f16f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -29,7 +29,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -53,7 +53,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -70,7 +70,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -93,7 +93,7 @@
             endBlockFunctionBody(0, {, })
           endClassConstructor(null, Foo, (, :, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
index 9a4c31d..9286fc8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Foo)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -66,7 +66,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -123,7 +123,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -159,7 +159,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -213,7 +213,7 @@
                 listener: endClassConstructor(null, Foo, (, :, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
index 4a792a7..5e8a7be 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
@@ -75,7 +75,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -84,11 +84,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -104,7 +104,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleNoType(})
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -129,7 +129,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -151,7 +151,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleNoType(.)
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -176,7 +176,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -192,7 +192,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleNoType(})
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -217,7 +217,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -239,7 +239,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleNoType(.)
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -261,7 +261,7 @@
             handleRecoverableError(ConstructorWithWrongName, /, /)
           endClassConstructor(null, operator, (, :, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 10, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 10, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
index 3c1d1d2..968b712 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Foo)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -74,7 +74,7 @@
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
                   parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(null, null, null, null, null, operator)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                     listener: handleNoType(})
                     parseOperatorName(})
                       listener: handleOperatorName(operator, /)
@@ -129,7 +129,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -180,7 +180,7 @@
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
                   parseMethod(., null, null, null, null, null, null, ., Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(null, null, null, null, null, operator)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                     listener: handleNoType(.)
                     parseOperatorName(.)
                       listener: handleOperatorName(operator, /)
@@ -235,7 +235,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -275,7 +275,7 @@
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
                   parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(null, null, null, null, null, operator)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                     listener: handleNoType(})
                     parseOperatorName(})
                       listener: handleOperatorName(operator, /)
@@ -330,7 +330,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -381,7 +381,7 @@
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
                   parseMethod(., null, null, null, null, null, null, ., Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(null, null, null, null, null, operator)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                     listener: handleNoType(.)
                     parseOperatorName(.)
                       listener: handleOperatorName(operator, /)
@@ -429,7 +429,7 @@
                     listener: endClassConstructor(null, operator, (, :, })
                   listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 10, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 10, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
index 3bcea14..9e97581 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
@@ -19,7 +19,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -28,11 +28,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -48,7 +48,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -73,7 +73,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -91,7 +91,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -115,7 +115,7 @@
             handleRecoverableError(ConstructorWithReturnType, void, void)
           endClassConstructor(null, void, (, :, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
index eff668e..37469fb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, void)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -66,7 +66,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -124,7 +124,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -161,7 +161,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -217,7 +217,7 @@
                 listener: endClassConstructor(null, void, (, :, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
index 3219c73..927d34c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
@@ -19,7 +19,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -28,11 +28,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -48,7 +48,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -73,7 +73,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -91,7 +91,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -115,7 +115,7 @@
             handleRecoverableError(SetterConstructor, set, set)
           endClassConstructor(set, set, (, :, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
index b32f3d4..716dcfc 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, set)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -66,7 +66,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -124,7 +124,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -161,7 +161,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, set, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -217,7 +217,7 @@
                 listener: endClassConstructor(set, set, (, :, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.expect b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.expect
index ec1dd0c..faffbc1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.expect
@@ -32,11 +32,11 @@
       endTypeArguments(1, <, >)
       handleType(List, null)
       handleExtensionShowHide(null, 0, null, 0)
-      beginClassOrMixinBody(DeclarationKind.Extension, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, a)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, a)
             handleIdentifier(bool, typeReference)
             handleNoTypeArguments(a)
             handleType(bool, null)
@@ -71,7 +71,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, b)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, get, b)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -87,7 +87,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, c)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, set, c)
             handleNoType(;)
             handleIdentifier(c, methodDeclaration)
             handleNoTypeVariables(()
@@ -108,7 +108,7 @@
             endBlockFunctionBody(0, {, })
           endExtensionMethod(set, set, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Extension, 3, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 3, {, })
     endExtensionDeclaration(extension, null, on, null, null, })
   endTopLevelDeclaration(void)
   beginMetadataStar(void)
diff --git a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
index 0244778..c4a5cfd 100644
--- a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
@@ -33,7 +33,7 @@
         listener: handleType(List, null)
         listener: handleExtensionShowHide(null, 0, null, 0)
         parseClassOrMixinOrExtensionBody(>, DeclarationKind.Extension, E)
-          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
           notEofOrValue(}, bool)
           parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Extension, E)
             parseMetadataStar({)
@@ -41,7 +41,7 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, a, DeclarationKind.Extension, E, false)
-              listener: beginMethod(null, null, null, null, null, a)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, a)
               listener: handleIdentifier(bool, typeReference)
               listener: handleNoTypeArguments(a)
               listener: handleType(bool, null)
@@ -98,7 +98,7 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, b, DeclarationKind.Extension, E, false)
-              listener: beginMethod(null, null, null, null, get, b)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, get, b)
               listener: handleIdentifier(int, typeReference)
               listener: handleNoTypeArguments(get)
               listener: handleType(int, null)
@@ -135,7 +135,7 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', set, c, DeclarationKind.Extension, E, false)
-              listener: beginMethod(null, null, null, null, set, c)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, set, c)
               listener: handleNoType(;)
               ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                 listener: handleIdentifier(c, methodDeclaration)
@@ -172,7 +172,7 @@
               listener: endExtensionMethod(set, set, (, null, })
             listener: endMember()
           notEofOrValue(}, })
-          listener: endClassOrMixinBody(DeclarationKind.Extension, 3, {, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 3, {, })
         listener: endExtensionDeclaration(extension, null, on, null, null, })
   listener: endTopLevelDeclaration(void)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
index 0136c1d..daa2562 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
@@ -23,7 +23,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -32,11 +32,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(C, typeReference)
             beginTypeArguments(<)
               handleRecoverableError(Message[ExpectedType, Expected a type, but got '}'., null, {lexeme: }}], }, })
@@ -51,7 +51,7 @@
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
           endClassFields(null, null, null, null, null, null, 1, C, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(main)
   beginMetadataStar(main)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
index 2733df1..7fce480 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, C)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, C)
                 parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, C, false)
-                  listener: beginFields({)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(C, typeReference)
                   listener: beginTypeArguments(<)
@@ -61,7 +61,7 @@
                   listener: endClassFields(null, null, null, null, null, null, 1, C, ;)
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(main)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
index cf35cb4..40cd176 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
@@ -23,7 +23,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -32,13 +32,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, B)
@@ -47,13 +47,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
     beginClassDeclaration(class, null, Foo)
@@ -68,11 +68,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -84,12 +84,12 @@
             endBlockFunctionBody(0, {, })
           endClassConstructor(null, Foo, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Bar, classOrMixinDeclaration)
     handleNoTypeVariables(extend)
     beginClassDeclaration(class, null, Bar)
@@ -110,11 +110,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleRecoverClassHeader()
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Bar)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Bar)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Bar)
             handleNoType({)
             handleIdentifier(Bar, methodDeclaration)
             handleNoTypeVariables(()
@@ -126,12 +126,12 @@
             endBlockFunctionBody(0, {, })
           endClassConstructor(null, Bar, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Baz, classOrMixinDeclaration)
     handleNoTypeVariables(on)
     beginClassDeclaration(class, null, Baz)
@@ -152,11 +152,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleRecoverClassHeader()
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Baz)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Baz)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Baz)
             handleNoType({)
             handleIdentifier(Baz, methodDeclaration)
             handleNoTypeVariables(()
@@ -168,7 +168,7 @@
             endBlockFunctionBody(0, {, })
           endClassConstructor(null, Baz, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(5, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
index 6686db3..e4749d3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,9 +25,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -37,7 +37,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -53,9 +53,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(B, DeclarationKind.Class, B)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -65,7 +65,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
@@ -89,7 +89,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(B, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Foo)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -98,7 +98,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -123,7 +123,7 @@
                 listener: endClassConstructor(null, Foo, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -133,7 +133,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Bar, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extend)
@@ -173,7 +173,7 @@
             listener: handleRecoverClassHeader()
           ensureBlock(B, null, class declaration)
           parseClassOrMixinOrExtensionBody(B, DeclarationKind.Class, Bar)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Bar)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Bar)
               parseMetadataStar({)
@@ -182,7 +182,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Bar, DeclarationKind.Class, Bar, false)
-                listener: beginMethod(null, null, null, null, null, Bar)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Bar)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Bar, methodDeclaration)
@@ -207,7 +207,7 @@
                 listener: endClassConstructor(null, Bar, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -217,7 +217,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Baz, classOrMixinDeclaration)
         listener: handleNoTypeVariables(on)
@@ -257,7 +257,7 @@
             listener: handleRecoverClassHeader()
           ensureBlock(B, null, class declaration)
           parseClassOrMixinOrExtensionBody(B, DeclarationKind.Class, Baz)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Baz)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Baz)
               parseMetadataStar({)
@@ -266,7 +266,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Baz, DeclarationKind.Class, Baz, false)
-                listener: beginMethod(null, null, null, null, null, Baz)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Baz)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Baz, methodDeclaration)
@@ -291,7 +291,7 @@
                 listener: endClassConstructor(null, Baz, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
index 23e29a3..43b85dd 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(const)
   endMetadataStar(0)
   beginTopLevelMember(const)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, const, )
       handleNoType(const)
       handleIdentifier(annotation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -22,7 +22,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Annotation, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Annotation)
@@ -31,11 +31,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(message)
             handleType(String, null)
@@ -46,7 +46,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, const, null, Annotation)
+          beginMethod(DeclarationKind.Class, null, null, null, const, null, Annotation)
             handleNoType(const)
             handleIdentifier(Annotation, methodDeclaration)
             handleNoTypeVariables(()
@@ -64,12 +64,12 @@
             handleEmptyFunctionBody(;)
           endClassConstructor(null, const, (, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     beginTypeVariables(<)
       beginMetadataStar(E)
@@ -86,13 +86,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -101,11 +101,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(m)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
             handleNoType({)
             handleIdentifier(m, methodDeclaration)
             handleNoTypeVariables(()
@@ -131,7 +131,7 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(null, m, (, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
index f79f784..392f65b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(const)
       parseFields(, null, null, null, null, null, const, const, Instance of 'NoType', annotation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, const, )
         listener: handleNoType(const)
         ensureIdentifierPotentiallyRecovered(const, topLevelVariableDeclaration, false)
           listener: handleIdentifier(annotation, topLevelVariableDeclaration)
@@ -31,7 +31,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Annotation, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -47,7 +47,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Annotation, DeclarationKind.Class, Annotation)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Annotation)
               parseMetadataStar({)
@@ -55,7 +55,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleType', message, DeclarationKind.Class, Annotation, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(message)
                 listener: handleType(String, null)
@@ -72,7 +72,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, const, const, Instance of 'NoType', null, Annotation, DeclarationKind.Class, Annotation, false)
-                listener: beginMethod(null, null, null, const, null, Annotation)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, const, null, Annotation)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(Annotation, methodDeclaration)
@@ -105,7 +105,7 @@
                 listener: endClassConstructor(null, const, (, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -115,7 +115,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: beginTypeVariables(<)
@@ -139,9 +139,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(>, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -151,7 +151,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -167,7 +167,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, m)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -176,7 +176,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, m, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, m)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(m, methodDeclaration)
@@ -230,7 +230,7 @@
                 listener: endClassMethod(null, m, (, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(const)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.expect
index b3607e5..810e998 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.expect
@@ -36,7 +36,7 @@
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(a, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(foo)
@@ -56,12 +56,12 @@
           endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(b, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(Function)
@@ -79,12 +79,12 @@
           endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(c, typedefDeclaration)
       handleNoTypeVariables(=)
       handleRecoverableError(Message[ExpectedButGot, Expected 'Function' before this., null, {string: Function}], (, ()
@@ -105,12 +105,12 @@
           endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(d, typedefDeclaration)
       handleNoTypeVariables(=)
       handleRecoverableError(Message[ExpectedButGot, Expected 'Function' before this., null, {string: Function}], (, ()
@@ -129,12 +129,12 @@
           endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(e, typedefDeclaration)
       handleNoTypeVariables(=)
       handleRecoverableError(Message[ExpectedButGot, Expected 'Function' before this., null, {string: Function}], (, ()
@@ -159,12 +159,12 @@
           endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(f, typedefDeclaration)
       handleNoTypeVariables(=)
       handleRecoverableError(Message[ExpectedButGot, Expected 'Function' before this., null, {string: Function}], <, <)
@@ -191,12 +191,12 @@
           endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(g, typedefDeclaration)
       handleNoTypeVariables(=)
       handleRecoverableError(Message[ExpectedButGot, Expected 'Function' before this., null, {string: Function}], (, ()
@@ -233,12 +233,12 @@
           endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(h, typedefDeclaration)
       handleNoTypeVariables(=)
       handleRecoverableError(Message[ExpectedButGot, Expected 'Function' before this., null, {string: Function}], <, <)
@@ -289,12 +289,12 @@
           endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(i, typedefDeclaration)
       handleNoTypeVariables(=)
       handleRecoverableError(MissingTypedefParameters, >, >)
@@ -337,23 +337,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(j, typedefDeclaration)
       handleNoTypeVariables(=)
       handleIdentifier(foo, typeReference)
       handleNoTypeArguments(;)
       handleType(foo, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(k, typedefDeclaration)
       handleNoTypeVariables(=)
       handleIdentifier(List, typeReference)
@@ -363,6 +363,6 @@
         handleType(int, null)
       endTypeArguments(1, <, >)
       handleType(List, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration()
 endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
index 703ab59..317743c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(a, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -38,7 +38,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -48,7 +48,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(b, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -73,7 +73,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -83,7 +83,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(c, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -114,7 +114,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -124,7 +124,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(d, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -152,7 +152,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -162,7 +162,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(e, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -197,7 +197,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -207,7 +207,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(f, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -243,7 +243,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -253,7 +253,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(g, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -300,7 +300,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -310,7 +310,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(h, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -380,7 +380,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -390,7 +390,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(i, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -452,7 +452,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -462,7 +462,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(j, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -470,7 +470,7 @@
         listener: handleNoTypeArguments(;)
         listener: handleType(foo, null)
         ensureSemicolon(foo)
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -480,7 +480,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(k, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -492,7 +492,7 @@
         listener: endTypeArguments(1, <, >)
         listener: handleType(List, null)
         ensureSemicolon(>)
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(typedef)
   listener: endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
index 9eb58d9..464bf21 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
@@ -63,7 +63,7 @@
 beginCompilationUnit(abstract)
   beginMetadataStar(abstract)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(abstract)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(abstract, abstract, Key)
@@ -72,11 +72,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(abstract, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, a)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -109,7 +109,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, b)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -141,7 +141,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, c)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -177,7 +177,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, d)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -212,7 +212,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, e)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -251,7 +251,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, f)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -289,7 +289,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -331,7 +331,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, h)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -372,7 +372,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, i)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i)
             handleType(int, null)
@@ -417,7 +417,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, j)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(j)
             handleType(int, null)
@@ -461,7 +461,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, k)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(k)
             handleType(int, null)
@@ -509,7 +509,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, l)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(l)
             handleType(int, null)
@@ -556,7 +556,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(m)
             handleType(int, null)
@@ -620,7 +620,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, n)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(n)
             handleType(int, null)
@@ -683,7 +683,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, o)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(o)
             handleType(int, null)
@@ -734,7 +734,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, p)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(p)
             handleType(int, null)
@@ -784,7 +784,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, q)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(q)
             handleType(int, null)
@@ -838,7 +838,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, r)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(r)
             handleType(int, null)
@@ -891,7 +891,7 @@
         beginMetadataStar(s)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, s)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
             handleNoType(})
             handleIdentifier(s, methodDeclaration)
             handleNoTypeVariables(()
@@ -978,7 +978,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1069,7 +1069,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1157,7 +1157,7 @@
         beginMetadataStar(not_currently_working)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, not_currently_working)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
             handleNoType(})
             handleIdentifier(not_currently_working, methodDeclaration)
             handleNoTypeVariables(()
@@ -1215,7 +1215,7 @@
             endBlockFunctionBody(3, {, })
           endClassMethod(null, not_currently_working, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 22, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
     endClassDeclaration(abstract, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
index 0bf333d..95350ea 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
       parseClassOrNamedMixinApplication(abstract, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(abstract)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -26,7 +26,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(abstract, class, null)
           parseClassOrMixinOrExtensionBody(Key, DeclarationKind.Class, Key)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Key)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, a, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, a)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -121,7 +121,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, b, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, b)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -194,7 +194,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, c, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, c)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -288,7 +288,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, d, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, d)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -368,7 +368,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, e, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, e)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -474,7 +474,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, f, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, f)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -561,7 +561,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, g, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, g)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -674,7 +674,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, h, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, h)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -768,7 +768,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, i, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, i)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i)
                 listener: handleType(int, null)
@@ -865,7 +865,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, j, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, j)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(j)
                 listener: handleType(int, null)
@@ -950,7 +950,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, k, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, k)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(k)
                 listener: handleType(int, null)
@@ -1054,7 +1054,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, l, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, l)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(int, null)
@@ -1146,7 +1146,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, m, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, m)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(int, null)
@@ -1285,7 +1285,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, n, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, n)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(n)
                 listener: handleType(int, null)
@@ -1412,7 +1412,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, o, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, o)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(o)
                 listener: handleType(int, null)
@@ -1528,7 +1528,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, p, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, p)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(p)
                 listener: handleType(int, null)
@@ -1627,7 +1627,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, q, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, q)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(q)
                 listener: handleType(int, null)
@@ -1750,7 +1750,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, r, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, r)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(int, null)
@@ -1857,7 +1857,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, s, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, s)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(s, methodDeclaration)
@@ -2095,7 +2095,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, Key)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2340,7 +2340,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, Key)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2549,7 +2549,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, not_currently_working, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, not_currently_working)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(not_currently_working, methodDeclaration)
@@ -2678,7 +2678,7 @@
                 listener: endClassMethod(null, not_currently_working, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 22, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
           listener: endClassDeclaration(abstract, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(abstract)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
index e907a22..0859270 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
@@ -63,7 +63,7 @@
 beginCompilationUnit(abstract)
   beginMetadataStar(abstract)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(abstract)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(abstract, abstract, Key)
@@ -72,11 +72,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(abstract, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, a)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -109,7 +109,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, b)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -141,7 +141,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, c)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -177,7 +177,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, d)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -212,7 +212,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, e)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -251,7 +251,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, f)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -289,7 +289,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -331,7 +331,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, h)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -372,7 +372,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, i)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i)
             handleType(int, null)
@@ -417,7 +417,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, j)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(j)
             handleType(int, null)
@@ -461,7 +461,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, k)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(k)
             handleType(int, null)
@@ -509,7 +509,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, l)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(l)
             handleType(int, null)
@@ -556,7 +556,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(m)
             handleType(int, null)
@@ -620,7 +620,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, n)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(n)
             handleType(int, null)
@@ -683,7 +683,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, o)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(o)
             handleType(int, null)
@@ -734,7 +734,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, p)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(p)
             handleType(int, null)
@@ -784,7 +784,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, q)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(q)
             handleType(int, null)
@@ -838,7 +838,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, r)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(r)
             handleType(int, null)
@@ -891,7 +891,7 @@
         beginMetadataStar(s)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, s)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
             handleNoType(})
             handleIdentifier(s, methodDeclaration)
             handleNoTypeVariables(()
@@ -978,7 +978,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1069,7 +1069,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1157,7 +1157,7 @@
         beginMetadataStar(not_currently_working)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, not_currently_working)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
             handleNoType(})
             handleIdentifier(not_currently_working, methodDeclaration)
             handleNoTypeVariables(()
@@ -1215,7 +1215,7 @@
             endBlockFunctionBody(3, {, })
           endClassMethod(null, not_currently_working, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 22, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
     endClassDeclaration(abstract, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
index e6dd152..3f6b15d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
       parseClassOrNamedMixinApplication(abstract, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(abstract)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -26,7 +26,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(abstract, class, null)
           parseClassOrMixinOrExtensionBody(Key, DeclarationKind.Class, Key)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Key)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, a, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, a)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -121,7 +121,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, b, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, b)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -194,7 +194,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, c, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, c)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -288,7 +288,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, d, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, d)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -368,7 +368,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, e, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, e)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -475,7 +475,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, f, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, f)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -562,7 +562,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, g, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, g)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -676,7 +676,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, h, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, h)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -770,7 +770,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, i, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, i)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i)
                 listener: handleType(int, null)
@@ -867,7 +867,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, j, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, j)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(j)
                 listener: handleType(int, null)
@@ -952,7 +952,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, k, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, k)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(k)
                 listener: handleType(int, null)
@@ -1056,7 +1056,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, l, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, l)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(int, null)
@@ -1148,7 +1148,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, m, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, m)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(int, null)
@@ -1287,7 +1287,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, n, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, n)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(n)
                 listener: handleType(int, null)
@@ -1414,7 +1414,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, o, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, o)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(o)
                 listener: handleType(int, null)
@@ -1531,7 +1531,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, p, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, p)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(p)
                 listener: handleType(int, null)
@@ -1630,7 +1630,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, q, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, q)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(q)
                 listener: handleType(int, null)
@@ -1754,7 +1754,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, r, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, r)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(int, null)
@@ -1861,7 +1861,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, s, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, s)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(s, methodDeclaration)
@@ -2099,7 +2099,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, Key)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2344,7 +2344,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, Key)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2553,7 +2553,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, not_currently_working, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, not_currently_working)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(not_currently_working, methodDeclaration)
@@ -2682,7 +2682,7 @@
                 listener: endClassMethod(null, not_currently_working, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 22, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
           listener: endClassDeclaration(abstract, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(abstract)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
index 9080b89..fae98c4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
@@ -63,7 +63,7 @@
 beginCompilationUnit(abstract)
   beginMetadataStar(abstract)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(abstract)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(abstract, abstract, Key)
@@ -72,11 +72,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(abstract, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, a)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -109,7 +109,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, b)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -141,7 +141,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, c)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -177,7 +177,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, d)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -212,7 +212,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, e)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -251,7 +251,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, f)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -289,7 +289,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -331,7 +331,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, h)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -372,7 +372,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, i)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i)
             handleType(int, null)
@@ -417,7 +417,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, j)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(j)
             handleType(int, null)
@@ -461,7 +461,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, k)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(k)
             handleType(int, null)
@@ -509,7 +509,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, l)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(l)
             handleType(int, null)
@@ -556,7 +556,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(m)
             handleType(int, null)
@@ -620,7 +620,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, n)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(n)
             handleType(int, null)
@@ -683,7 +683,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, o)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(o)
             handleType(int, null)
@@ -734,7 +734,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, p)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(p)
             handleType(int, null)
@@ -784,7 +784,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, q)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(q)
             handleType(int, null)
@@ -838,7 +838,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, r)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(r)
             handleType(int, null)
@@ -891,7 +891,7 @@
         beginMetadataStar(s)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, s)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
             handleNoType(})
             handleIdentifier(s, methodDeclaration)
             handleNoTypeVariables(()
@@ -978,7 +978,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1069,7 +1069,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1157,7 +1157,7 @@
         beginMetadataStar(not_currently_working)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, not_currently_working)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
             handleNoType(})
             handleIdentifier(not_currently_working, methodDeclaration)
             handleNoTypeVariables(()
@@ -1215,7 +1215,7 @@
             endBlockFunctionBody(3, {, })
           endClassMethod(null, not_currently_working, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 22, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
     endClassDeclaration(abstract, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
index af1484e..5923c78 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
       parseClassOrNamedMixinApplication(abstract, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(abstract)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -26,7 +26,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(abstract, class, null)
           parseClassOrMixinOrExtensionBody(Key, DeclarationKind.Class, Key)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Key)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, a, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, a)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -121,7 +121,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, b, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, b)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -194,7 +194,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, c, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, c)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -288,7 +288,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, d, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, d)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -368,7 +368,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, e, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, e)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -475,7 +475,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, f, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, f)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -562,7 +562,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, g, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, g)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -676,7 +676,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, h, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, get, h)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -770,7 +770,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, i, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, i)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i)
                 listener: handleType(int, null)
@@ -867,7 +867,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, j, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, j)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(j)
                 listener: handleType(int, null)
@@ -952,7 +952,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, k, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, k)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(k)
                 listener: handleType(int, null)
@@ -1056,7 +1056,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, l, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, l)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(int, null)
@@ -1148,7 +1148,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, m, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, m)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(int, null)
@@ -1287,7 +1287,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, n, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, n)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(n)
                 listener: handleType(int, null)
@@ -1414,7 +1414,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, o, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, o)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(o)
                 listener: handleType(int, null)
@@ -1531,7 +1531,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, p, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, p)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(p)
                 listener: handleType(int, null)
@@ -1630,7 +1630,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, q, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, q)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(q)
                 listener: handleType(int, null)
@@ -1754,7 +1754,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, r, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, r)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(int, null)
@@ -1861,7 +1861,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, s, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, s)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(s, methodDeclaration)
@@ -2099,7 +2099,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, Key)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2344,7 +2344,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, Key)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2553,7 +2553,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, not_currently_working, DeclarationKind.Class, Key, false)
-                listener: beginMethod(null, null, null, null, null, not_currently_working)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(not_currently_working, methodDeclaration)
@@ -2682,7 +2682,7 @@
                 listener: endClassMethod(null, not_currently_working, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 22, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
           listener: endClassDeclaration(abstract, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(abstract)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
index 2ae2a55..550de5d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
@@ -11,7 +11,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -20,12 +20,12 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(co)
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, <, <)
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(co, typeReference)
             handleNoTypeArguments(operator)
             handleType(co, null)
@@ -40,7 +40,7 @@
             endBlockFunctionBody(0, {, })
           endClassMethod(null, co, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
index 6a32cbd..20a6ec6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, co)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -37,7 +37,7 @@
                   listener: handleRecoverableError(MissingOperatorKeyword, <, <)
                 rewriter()
                 parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, A, false)
-                  listener: beginMethod(null, null, null, null, null, operator)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                   listener: handleIdentifier(co, typeReference)
                   listener: handleNoTypeArguments(operator)
                   listener: handleType(co, null)
@@ -66,7 +66,7 @@
                   listener: endClassMethod(null, co, (, null, })
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
index 36cbb74..2c563eb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
@@ -7,7 +7,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -16,11 +16,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(co)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(co, typeReference)
             handleNoTypeArguments(operator)
             handleType(co, null)
@@ -35,7 +35,7 @@
             endBlockFunctionBody(0, {, })
           endClassMethod(null, co, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
index cecf6e2..0029b54 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, co)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, A, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(co, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(co, null)
@@ -62,7 +62,7 @@
                 listener: endClassMethod(null, co, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect
index 46f6afb..692595f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect
@@ -18,7 +18,7 @@
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(Glib)
@@ -36,6 +36,6 @@
       handleNoTypeArguments()
       handleType(, null)
       handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
index b2f18b7..8064bef 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -37,7 +37,7 @@
           reportRecoverableError(=, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
             listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
           rewriter()
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(typedef)
   listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
index 5bd3f47..16300c9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
@@ -65,7 +65,7 @@
   beginMetadataStar(b)
   endMetadataStar(0)
   beginTopLevelMember(b)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(b, typeReference)
       beginTypeArguments(<)
         handleIdentifier(c, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
index 7754b5d..a0bb58f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
@@ -77,7 +77,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(b)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', $, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         ensureIdentifier(;, typeReference)
           listener: handleIdentifier(b, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
index dd50f65..71be906 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
@@ -19,7 +19,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -28,11 +28,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -48,7 +48,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleNoType(})
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -69,7 +69,7 @@
             handleRecoverableError(ConstructorWithWrongName, /, /)
           endClassConstructor(null, operator, (, :, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
index e8df55f..f465d58 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, C)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, C)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -74,7 +74,7 @@
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
                   parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, C, false)
-                    listener: beginMethod(null, null, null, null, null, operator)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                     listener: handleNoType(})
                     parseOperatorName(})
                       listener: handleOperatorName(operator, /)
@@ -120,7 +120,7 @@
                     listener: endClassConstructor(null, operator, (, :, ;)
                   listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
index e4aa63a..fed361e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
@@ -7,7 +7,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     beginTypeVariables(<)
       beginMetadataStar(T)
@@ -24,13 +24,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(mixin)
   beginMetadataStar(mixin)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(mixin)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
     handleIdentifier(M, classOrMixinDeclaration)
     beginTypeVariables(<)
       beginMetadataStar(T)
@@ -45,13 +45,13 @@
       handleMixinOn(null, 0)
       handleClassOrMixinImplements(null, 0)
       handleMixinHeader(mixin)
-      beginClassOrMixinBody(DeclarationKind.Mixin, {)
-      endClassOrMixinBody(DeclarationKind.Mixin, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 0, {, })
     endMixinDeclaration(mixin, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(DND1, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
     beginClassDeclaration(class, null, DND1)
@@ -82,8 +82,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleRecoverClassHeader()
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
index 9ea2f50..6017b1c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: beginTypeVariables(<)
@@ -33,9 +33,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(>, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(mixin)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -45,7 +45,7 @@
     parseTopLevelKeywordDeclaration(}, mixin, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, mixin)
       parseMixin(mixin)
-        listener: beginClassOrNamedMixinApplicationPrelude(mixin)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
         ensureIdentifier(mixin, classOrMixinDeclaration)
           listener: handleIdentifier(M, classOrMixinDeclaration)
         listener: beginTypeVariables(<)
@@ -65,9 +65,9 @@
             listener: handleClassOrMixinImplements(null, 0)
           listener: handleMixinHeader(mixin)
         parseClassOrMixinOrExtensionBody(>, DeclarationKind.Mixin, M)
-          listener: beginClassOrMixinBody(DeclarationKind.Mixin, {)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
           notEofOrValue(}, })
-          listener: endClassOrMixinBody(DeclarationKind.Mixin, 0, {, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 0, {, })
         listener: endMixinDeclaration(mixin, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -77,7 +77,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(DND1, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
@@ -136,9 +136,9 @@
             listener: handleRecoverClassHeader()
           ensureBlock(>, null, class declaration)
           parseClassOrMixinOrExtensionBody(>, DeclarationKind.Class, DND1)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect
index 1a1a560..3a61651 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect
@@ -26,7 +26,7 @@
   beginTopLevelMember(Stream)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect
index 02666ab..c9a97e6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect
@@ -14,7 +14,7 @@
           listener: // WARNING: Reporting at eof for .
         rewriter()
       parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect
index 8fca493..48888ea 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect
@@ -20,7 +20,7 @@
   beginTopLevelMember(Stream)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect
index 898699b..f8c3b8a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect
@@ -14,7 +14,7 @@
           listener: // WARNING: Reporting at eof for .
         rewriter()
       parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect
index 77d9505..3225ca5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect
@@ -22,7 +22,7 @@
   beginTopLevelMember(Stream)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect
index 09c91a7..5885b58 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect
@@ -14,7 +14,7 @@
           listener: // WARNING: Reporting at eof for .
         rewriter()
       parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.expect
index c639885..39d125c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(Stream)
   endMetadataStar(0)
   beginTopLevelMember(Stream)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.intertwined.expect
index 8d42e4b..f4ac12c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Stream)
       parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', y, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.expect
index afecf7c..c0c945b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(hello)
   endMetadataStar(0)
   beginTopLevelMember(hello)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleRecoverableError(MissingConstFinalVarOrType, hello, hello)
       handleNoType()
       handleIdentifier(hello, topLevelVariableDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.intertwined.expect
index ed05b5e..ddc263d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.intertwined.expect
@@ -10,7 +10,7 @@
       listener: beginTopLevelMember(hello)
       isReservedKeyword()
       parseFields(, null, null, null, null, null, null, , Instance of 'NoType', hello, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         reportRecoverableError(hello, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, hello, hello)
         listener: handleNoType()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.expect
index bc06b28..bbe91f5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(const)
   endMetadataStar(0)
   beginTopLevelMember(const)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, const, )
       handleNoType(const)
       handleIdentifier(foo, topLevelVariableDeclaration)
       handleRecoverableError(Message[ConstFieldWithoutInitializer, The const variable 'foo' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: foo}], foo, foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.intertwined.expect
index c70f970..5b2699c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(const)
       parseFields(, null, null, null, null, null, const, const, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, const, )
         listener: handleNoType(const)
         ensureIdentifierPotentiallyRecovered(const, topLevelVariableDeclaration, false)
           listener: handleIdentifier(foo, topLevelVariableDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.expect
index 38e3d3b..8038a68 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(A, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(=)
@@ -26,6 +26,6 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
index b25871b..1fc743a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(A, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -36,7 +36,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(typedef)
   listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.expect
index 06f3c99..9de7c23 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(A, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(int)
@@ -19,6 +19,6 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
index e0ba1a2..2c656d6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(A, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -31,7 +31,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(typedef)
   listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.expect
index bc0db5a..cae49f8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(A, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(>=)
@@ -26,6 +26,6 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
index da37ef6..2845e0b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(A, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -36,7 +36,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(typedef)
   listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
index 702b63b..90f0494 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
@@ -19,7 +19,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, F)
@@ -28,11 +28,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -65,7 +65,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -97,7 +97,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -119,7 +119,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -154,7 +154,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -178,7 +178,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -215,7 +215,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -241,7 +241,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -277,7 +277,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -299,7 +299,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
index fb1a4d4..a1f507a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, F)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -84,7 +84,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -129,7 +129,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -168,7 +168,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -222,7 +222,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -265,7 +265,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -331,7 +331,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -385,7 +385,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -445,7 +445,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -487,7 +487,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
index a6a2fda..f85d2a9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
@@ -19,7 +19,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, F)
@@ -28,11 +28,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -67,7 +67,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -101,7 +101,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -125,7 +125,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -164,7 +164,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -192,7 +192,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -231,7 +231,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -259,7 +259,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -297,7 +297,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -321,7 +321,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
index dcf5d7e..3fdbced 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, F)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -83,7 +83,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -131,7 +131,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -169,7 +169,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -225,7 +225,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -270,7 +270,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -335,7 +335,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -388,7 +388,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -451,7 +451,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -496,7 +496,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
index f5c21fa..dbfa889 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
@@ -15,7 +15,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, F)
@@ -24,11 +24,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -55,7 +55,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -81,7 +81,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -100,7 +100,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -129,7 +129,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -150,7 +150,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -178,7 +178,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -200,7 +200,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -227,7 +227,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -243,7 +243,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
index afe7290..fe10043 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, F)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -80,7 +80,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -121,7 +121,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -159,7 +159,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -206,7 +206,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -245,7 +245,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -295,7 +295,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -338,7 +338,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -382,7 +382,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -411,7 +411,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
index 50b89e2..ee30059 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
@@ -19,7 +19,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, F)
@@ -28,11 +28,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -61,7 +61,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -89,7 +89,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -110,7 +110,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -143,7 +143,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -168,7 +168,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -198,7 +198,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -220,7 +220,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -249,7 +249,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -267,7 +267,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
index cce2e11..2a9f996 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, F)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -79,7 +79,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -123,7 +123,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -160,7 +160,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -209,7 +209,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -250,7 +250,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -299,7 +299,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -339,7 +339,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -386,7 +386,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -418,7 +418,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
index afbfdbd..53c04d2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
@@ -31,7 +31,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, F)
@@ -40,11 +40,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -71,7 +71,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -98,7 +98,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -117,7 +117,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -150,7 +150,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -175,7 +175,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -203,7 +203,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -223,7 +223,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -251,7 +251,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -268,7 +268,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
index a698701..0133f20 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, F)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -79,7 +79,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -125,7 +125,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -162,7 +162,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -212,7 +212,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -254,7 +254,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -303,7 +303,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -343,7 +343,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -392,7 +392,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -426,7 +426,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
index 2010b9a..173eeae 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
@@ -31,7 +31,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, F)
@@ -40,11 +40,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -77,7 +77,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -110,7 +110,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -132,7 +132,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -171,7 +171,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -199,7 +199,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -236,7 +236,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -262,7 +262,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -299,7 +299,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -322,7 +322,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
index 61610fe1..0b1733b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, F)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -83,7 +83,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -133,7 +133,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -171,7 +171,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -228,7 +228,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -274,7 +274,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -339,7 +339,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -392,7 +392,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -457,7 +457,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -504,7 +504,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
index e1d57ca..7a1bda5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
@@ -19,7 +19,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, F)
@@ -28,11 +28,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -59,7 +59,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -85,7 +85,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -104,7 +104,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -133,7 +133,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -154,7 +154,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -182,7 +182,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -202,7 +202,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -229,7 +229,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -245,7 +245,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
index 1d5f628..6419253 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, F)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -77,7 +77,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -115,7 +115,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -150,7 +150,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -197,7 +197,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -236,7 +236,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -286,7 +286,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -327,7 +327,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -371,7 +371,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -400,7 +400,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
index 4fa9c10..be8115b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
@@ -19,7 +19,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, F)
@@ -28,11 +28,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -61,7 +61,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -89,7 +89,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -110,7 +110,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -143,7 +143,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -168,7 +168,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -198,7 +198,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -220,7 +220,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -249,7 +249,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -267,7 +267,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
index bce083f..fe81a69 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, F)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -76,7 +76,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -117,7 +117,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -151,7 +151,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -200,7 +200,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -241,7 +241,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -290,7 +290,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -330,7 +330,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -377,7 +377,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -409,7 +409,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
index 8259775..47c67e8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
@@ -31,7 +31,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, F)
@@ -40,11 +40,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -71,7 +71,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -98,7 +98,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -117,7 +117,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -150,7 +150,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -175,7 +175,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -203,7 +203,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -223,7 +223,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -251,7 +251,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -268,7 +268,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
index ae71f89..02cf05c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, F)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -76,7 +76,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -119,7 +119,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -153,7 +153,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -203,7 +203,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -245,7 +245,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -294,7 +294,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -334,7 +334,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -383,7 +383,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -417,7 +417,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 9, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
index a9b75e9..3879cab 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
@@ -11,7 +11,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     beginTypeVariables(<)
       beginMetadataStar(T)
@@ -28,11 +28,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -74,7 +74,7 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, foo, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
   handleErrorToken(UnmatchedToken(())
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
index ae57b93..a9e5ff3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(UnmatchedToken((), class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(UnmatchedToken((), class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: beginTypeVariables(<)
@@ -33,7 +33,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(>, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, foo)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -42,7 +42,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -147,7 +147,7 @@
                 listener: endClassMethod(null, foo, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(UnmatchedToken(())
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
index c371313..5c15762 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
@@ -223,7 +223,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
     handleIdentifier(abstract, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -233,13 +233,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
     handleIdentifier(as, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -249,13 +249,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
     handleIdentifier(assert, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -265,13 +265,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(async, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, async)
@@ -280,13 +280,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(await, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, await)
@@ -295,13 +295,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
     handleIdentifier(break, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -311,13 +311,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
     handleIdentifier(case, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -327,13 +327,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
     handleIdentifier(catch, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -343,13 +343,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
     handleIdentifier(class, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -359,13 +359,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
     handleIdentifier(const, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -375,13 +375,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
     handleIdentifier(continue, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -391,13 +391,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
     handleIdentifier(covariant, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -407,13 +407,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
     handleIdentifier(default, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -423,13 +423,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
     handleIdentifier(deferred, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -439,13 +439,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
     handleIdentifier(do, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -455,13 +455,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
     handleIdentifier(dynamic, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -471,13 +471,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
     handleIdentifier(else, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -487,13 +487,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
     handleIdentifier(enum, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -503,13 +503,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
     handleIdentifier(export, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -519,13 +519,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
     handleIdentifier(extends, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -535,13 +535,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
     handleIdentifier(extension, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -551,13 +551,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
     handleIdentifier(external, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -567,13 +567,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
     handleIdentifier(factory, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -583,13 +583,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
     handleIdentifier(false, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -599,13 +599,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
     handleIdentifier(final, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -615,13 +615,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
     handleIdentifier(finally, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -631,13 +631,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
     handleIdentifier(for, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -647,13 +647,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Function, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Function)
@@ -662,13 +662,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
     handleIdentifier(get, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -678,13 +678,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(hide, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, hide)
@@ -693,13 +693,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
     handleIdentifier(if, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -709,13 +709,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
     handleIdentifier(implements, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -725,13 +725,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
     handleIdentifier(import, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -741,13 +741,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
     handleIdentifier(in, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -757,13 +757,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(inout, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, inout)
@@ -772,13 +772,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
     handleIdentifier(interface, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -788,13 +788,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
     handleIdentifier(is, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -804,13 +804,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -820,13 +820,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
     handleIdentifier(library, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -836,13 +836,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
     handleIdentifier(mixin, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -852,13 +852,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(native, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, native)
@@ -867,13 +867,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
     handleIdentifier(new, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -883,13 +883,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
     handleIdentifier(null, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -899,13 +899,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(of, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, of)
@@ -914,13 +914,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(on, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, on)
@@ -929,13 +929,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -945,13 +945,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(out, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, out)
@@ -960,13 +960,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
     handleIdentifier(part, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -976,13 +976,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(patch, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, patch)
@@ -991,13 +991,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1007,13 +1007,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
     handleIdentifier(rethrow, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1023,13 +1023,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
     handleIdentifier(return, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1039,13 +1039,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
     handleIdentifier(set, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1055,13 +1055,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(show, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, show)
@@ -1070,13 +1070,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(source, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, source)
@@ -1085,13 +1085,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
     handleIdentifier(static, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1101,13 +1101,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
     handleIdentifier(super, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1117,13 +1117,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
     handleIdentifier(switch, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1133,13 +1133,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(sync, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, sync)
@@ -1148,13 +1148,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
     handleIdentifier(this, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1164,13 +1164,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
     handleIdentifier(throw, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1180,13 +1180,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
     handleIdentifier(true, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1196,13 +1196,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
     handleIdentifier(try, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1212,13 +1212,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
     handleIdentifier(typedef, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1228,13 +1228,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
     handleIdentifier(var, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1244,13 +1244,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
     handleIdentifier(void, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1260,13 +1260,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
     handleIdentifier(while, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1276,13 +1276,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
     handleIdentifier(with, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -1292,13 +1292,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(yield, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, yield)
@@ -1307,8 +1307,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
index 350e22e..395b3c1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
@@ -27,9 +27,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(abstract, DeclarationKind.Class, abstract)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -39,7 +39,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
@@ -57,9 +57,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(as, DeclarationKind.Class, as)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -69,7 +69,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
@@ -87,9 +87,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(assert, DeclarationKind.Class, assert)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -99,7 +99,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(async, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -115,9 +115,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(async, DeclarationKind.Class, async)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -127,7 +127,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(await, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -143,9 +143,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(await, DeclarationKind.Class, await)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -155,7 +155,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
@@ -173,9 +173,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(break, DeclarationKind.Class, break)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -185,7 +185,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
@@ -203,9 +203,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(case, DeclarationKind.Class, case)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -215,7 +215,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
@@ -233,9 +233,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(catch, DeclarationKind.Class, catch)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -245,7 +245,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
@@ -263,9 +263,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(class, DeclarationKind.Class, class)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -275,7 +275,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
@@ -293,9 +293,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(const, DeclarationKind.Class, const)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -305,7 +305,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
@@ -323,9 +323,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(continue, DeclarationKind.Class, continue)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -335,7 +335,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
@@ -353,9 +353,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(covariant, DeclarationKind.Class, covariant)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -365,7 +365,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
@@ -383,9 +383,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(default, DeclarationKind.Class, default)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -395,7 +395,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
@@ -413,9 +413,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(deferred, DeclarationKind.Class, deferred)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -425,7 +425,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
@@ -443,9 +443,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(do, DeclarationKind.Class, do)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -455,7 +455,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
@@ -473,9 +473,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(dynamic, DeclarationKind.Class, dynamic)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -485,7 +485,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
@@ -503,9 +503,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(else, DeclarationKind.Class, else)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -515,7 +515,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
@@ -533,9 +533,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(enum, DeclarationKind.Class, enum)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -545,7 +545,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
@@ -563,9 +563,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(export, DeclarationKind.Class, export)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -575,7 +575,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
@@ -593,9 +593,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(extends, DeclarationKind.Class, extends)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -605,7 +605,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
@@ -623,9 +623,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(extension, DeclarationKind.Class, extension)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -635,7 +635,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
@@ -653,9 +653,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(external, DeclarationKind.Class, external)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -665,7 +665,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
@@ -683,9 +683,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(factory, DeclarationKind.Class, factory)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -695,7 +695,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
@@ -713,9 +713,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(false, DeclarationKind.Class, false)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -725,7 +725,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
@@ -743,9 +743,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(final, DeclarationKind.Class, final)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -755,7 +755,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
@@ -773,9 +773,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(finally, DeclarationKind.Class, finally)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -785,7 +785,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
@@ -803,9 +803,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(for, DeclarationKind.Class, for)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -815,7 +815,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Function, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -831,9 +831,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Function, DeclarationKind.Class, Function)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -843,7 +843,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
@@ -861,9 +861,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(get, DeclarationKind.Class, get)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -873,7 +873,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(hide, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -889,9 +889,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(hide, DeclarationKind.Class, hide)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -901,7 +901,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
@@ -919,9 +919,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(if, DeclarationKind.Class, if)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -931,7 +931,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
@@ -949,9 +949,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(implements, DeclarationKind.Class, implements)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -961,7 +961,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
@@ -979,9 +979,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(import, DeclarationKind.Class, import)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -991,7 +991,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
@@ -1009,9 +1009,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(in, DeclarationKind.Class, in)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1021,7 +1021,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(inout, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1037,9 +1037,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(inout, DeclarationKind.Class, inout)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1049,7 +1049,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
@@ -1067,9 +1067,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(interface, DeclarationKind.Class, interface)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1079,7 +1079,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
@@ -1097,9 +1097,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(is, DeclarationKind.Class, is)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1109,7 +1109,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
@@ -1127,9 +1127,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(late, DeclarationKind.Class, late)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1139,7 +1139,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
@@ -1157,9 +1157,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(library, DeclarationKind.Class, library)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1169,7 +1169,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
@@ -1187,9 +1187,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(mixin, DeclarationKind.Class, mixin)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1199,7 +1199,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(native, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1215,9 +1215,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(native, DeclarationKind.Class, native)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1227,7 +1227,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
@@ -1245,9 +1245,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(new, DeclarationKind.Class, new)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1257,7 +1257,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
@@ -1275,9 +1275,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(null, DeclarationKind.Class, null)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1287,7 +1287,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(of, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1303,9 +1303,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(of, DeclarationKind.Class, of)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1315,7 +1315,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(on, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1331,9 +1331,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(on, DeclarationKind.Class, on)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1343,7 +1343,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
@@ -1361,9 +1361,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(operator, DeclarationKind.Class, operator)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1373,7 +1373,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(out, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1389,9 +1389,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(out, DeclarationKind.Class, out)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1401,7 +1401,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
@@ -1419,9 +1419,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(part, DeclarationKind.Class, part)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1431,7 +1431,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(patch, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1447,9 +1447,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(patch, DeclarationKind.Class, patch)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1459,7 +1459,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
@@ -1477,9 +1477,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(required, DeclarationKind.Class, required)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1489,7 +1489,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
@@ -1507,9 +1507,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(rethrow, DeclarationKind.Class, rethrow)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1519,7 +1519,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
@@ -1537,9 +1537,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(return, DeclarationKind.Class, return)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1549,7 +1549,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
@@ -1567,9 +1567,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(set, DeclarationKind.Class, set)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1579,7 +1579,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(show, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1595,9 +1595,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(show, DeclarationKind.Class, show)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1607,7 +1607,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(source, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1623,9 +1623,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(source, DeclarationKind.Class, source)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1635,7 +1635,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
@@ -1653,9 +1653,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(static, DeclarationKind.Class, static)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1665,7 +1665,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
@@ -1683,9 +1683,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(super, DeclarationKind.Class, super)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1695,7 +1695,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
@@ -1713,9 +1713,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(switch, DeclarationKind.Class, switch)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1725,7 +1725,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(sync, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1741,9 +1741,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(sync, DeclarationKind.Class, sync)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1753,7 +1753,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
@@ -1771,9 +1771,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(this, DeclarationKind.Class, this)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1783,7 +1783,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
@@ -1801,9 +1801,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(throw, DeclarationKind.Class, throw)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1813,7 +1813,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
@@ -1831,9 +1831,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(true, DeclarationKind.Class, true)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1843,7 +1843,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
@@ -1861,9 +1861,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(try, DeclarationKind.Class, try)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1873,7 +1873,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
@@ -1891,9 +1891,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(typedef, DeclarationKind.Class, typedef)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1903,7 +1903,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
@@ -1921,9 +1921,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(var, DeclarationKind.Class, var)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1933,7 +1933,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
@@ -1951,9 +1951,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(void, DeclarationKind.Class, void)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1963,7 +1963,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
@@ -1981,9 +1981,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(while, DeclarationKind.Class, while)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -1993,7 +1993,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
@@ -2011,9 +2011,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(with, DeclarationKind.Class, with)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -2023,7 +2023,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(yield, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -2039,9 +2039,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(yield, DeclarationKind.Class, yield)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
index caa8b1a..ddf5505 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
@@ -223,7 +223,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
     handleIdentifier(abstract, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -241,7 +241,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
     handleIdentifier(as, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -259,7 +259,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
     handleIdentifier(assert, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -277,7 +277,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(async, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, async)
@@ -294,7 +294,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(await, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, await)
@@ -311,7 +311,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
     handleIdentifier(break, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -329,7 +329,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
     handleIdentifier(case, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -347,7 +347,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
     handleIdentifier(catch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -365,7 +365,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
     handleIdentifier(class, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -383,7 +383,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
     handleIdentifier(const, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -401,7 +401,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
     handleIdentifier(continue, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -419,7 +419,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
     handleIdentifier(covariant, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -437,7 +437,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
     handleIdentifier(default, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -455,7 +455,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
     handleIdentifier(deferred, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -473,7 +473,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
     handleIdentifier(do, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -491,7 +491,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
     handleIdentifier(dynamic, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -509,7 +509,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
     handleIdentifier(else, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -527,7 +527,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
     handleIdentifier(enum, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -545,7 +545,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
     handleIdentifier(export, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -563,7 +563,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
     handleIdentifier(extends, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -581,7 +581,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
     handleIdentifier(extension, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -599,7 +599,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
     handleIdentifier(external, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -617,7 +617,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
     handleIdentifier(factory, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -635,7 +635,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
     handleIdentifier(false, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -653,7 +653,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
     handleIdentifier(final, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -671,7 +671,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
     handleIdentifier(finally, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -689,7 +689,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
     handleIdentifier(for, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -707,7 +707,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Function, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, Function)
@@ -724,7 +724,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
     handleIdentifier(get, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -742,7 +742,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(hide, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, hide)
@@ -759,7 +759,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
     handleIdentifier(if, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -777,7 +777,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
     handleIdentifier(implements, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -795,7 +795,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
     handleIdentifier(import, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -813,7 +813,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
     handleIdentifier(in, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -831,7 +831,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(inout, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, inout)
@@ -848,7 +848,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
     handleIdentifier(interface, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -866,7 +866,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
     handleIdentifier(is, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -884,7 +884,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -902,7 +902,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
     handleIdentifier(library, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -920,7 +920,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
     handleIdentifier(mixin, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -938,7 +938,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(native, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, native)
@@ -955,7 +955,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
     handleIdentifier(new, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -973,7 +973,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
     handleIdentifier(null, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -991,7 +991,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(of, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, of)
@@ -1008,7 +1008,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(on, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, on)
@@ -1025,7 +1025,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1043,7 +1043,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(out, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, out)
@@ -1060,7 +1060,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
     handleIdentifier(part, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1078,7 +1078,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(patch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, patch)
@@ -1095,7 +1095,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1113,7 +1113,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
     handleIdentifier(rethrow, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1131,7 +1131,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
     handleIdentifier(return, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1149,7 +1149,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
     handleIdentifier(set, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1167,7 +1167,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(show, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, show)
@@ -1184,7 +1184,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(source, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, source)
@@ -1201,7 +1201,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
     handleIdentifier(static, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1219,7 +1219,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
     handleIdentifier(super, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1237,7 +1237,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
     handleIdentifier(switch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1255,7 +1255,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(sync, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, sync)
@@ -1272,7 +1272,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
     handleIdentifier(this, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1290,7 +1290,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
     handleIdentifier(throw, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1308,7 +1308,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
     handleIdentifier(true, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1326,7 +1326,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
     handleIdentifier(try, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1344,7 +1344,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
     handleIdentifier(typedef, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1362,7 +1362,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
     handleIdentifier(var, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1380,7 +1380,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
     handleIdentifier(void, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1398,7 +1398,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
     handleIdentifier(while, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1416,7 +1416,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
     handleIdentifier(with, classOrMixinDeclaration)
     handleNoTypeVariables(=)
@@ -1434,7 +1434,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(yield, classOrMixinDeclaration)
     handleNoTypeVariables(=)
     beginNamedMixinApplication(class, null, yield)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
index d0f33a6..5e0bb61 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
@@ -38,7 +38,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
@@ -67,7 +67,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
@@ -96,7 +96,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(async, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -123,7 +123,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(await, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -150,7 +150,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
@@ -179,7 +179,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
@@ -208,7 +208,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
@@ -237,7 +237,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
@@ -266,7 +266,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
@@ -295,7 +295,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
@@ -324,7 +324,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
@@ -353,7 +353,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
@@ -382,7 +382,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
@@ -411,7 +411,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
@@ -440,7 +440,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
@@ -469,7 +469,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
@@ -498,7 +498,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
@@ -527,7 +527,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
@@ -556,7 +556,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
@@ -585,7 +585,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
@@ -614,7 +614,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
@@ -643,7 +643,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
@@ -672,7 +672,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
@@ -701,7 +701,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
@@ -730,7 +730,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
@@ -759,7 +759,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
@@ -788,7 +788,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Function, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -815,7 +815,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
@@ -844,7 +844,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(hide, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -871,7 +871,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
@@ -900,7 +900,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
@@ -929,7 +929,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
@@ -958,7 +958,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
@@ -987,7 +987,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(inout, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1014,7 +1014,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
@@ -1043,7 +1043,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
@@ -1072,7 +1072,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
@@ -1101,7 +1101,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
@@ -1130,7 +1130,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
@@ -1159,7 +1159,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(native, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1186,7 +1186,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
@@ -1215,7 +1215,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
@@ -1244,7 +1244,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(of, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1271,7 +1271,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(on, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1298,7 +1298,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
@@ -1327,7 +1327,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(out, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1354,7 +1354,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
@@ -1383,7 +1383,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(patch, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1410,7 +1410,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
@@ -1439,7 +1439,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
@@ -1468,7 +1468,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
@@ -1497,7 +1497,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
@@ -1526,7 +1526,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(show, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1553,7 +1553,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(source, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1580,7 +1580,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
@@ -1609,7 +1609,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
@@ -1638,7 +1638,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
@@ -1667,7 +1667,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(sync, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1694,7 +1694,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
@@ -1723,7 +1723,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
@@ -1752,7 +1752,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
@@ -1781,7 +1781,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
@@ -1810,7 +1810,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
@@ -1839,7 +1839,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
@@ -1868,7 +1868,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
@@ -1897,7 +1897,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
@@ -1926,7 +1926,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
@@ -1955,7 +1955,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(yield, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
index 86afa58..de863a7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
@@ -15,7 +15,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
     handleIdentifier(, classOrMixinDeclaration)
@@ -33,8 +33,8 @@
       handleRecoverClassHeader()
       handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], , )
       // WARNING: Reporting at eof for .
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
index 766bdc3..6dbf406 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           insertSyntheticIdentifier(class, classOrMixinDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], messageOnToken: null)
             reportRecoverableError(, Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }])
@@ -51,9 +51,9 @@
               rewriter()
               rewriter()
           parseClassOrMixinOrExtensionBody(, DeclarationKind.Class, )
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
index 7467b87..2735118 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
@@ -27,7 +27,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -36,11 +36,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -59,12 +59,12 @@
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           endClassFields(null, null, null, null, null, null, 1, Stream, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, B)
@@ -73,11 +73,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(List)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleRecoverableError(Message[ExpectedType, Expected a type, but got '>'., null, {lexeme: >}], >, >)
@@ -92,7 +92,7 @@
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           endClassFields(null, null, null, null, null, null, 1, List, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
index 1354d2a..fec64a0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
                 parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
-                  listener: beginFields({)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -66,7 +66,7 @@
                   listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -76,7 +76,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -92,7 +92,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(B, DeclarationKind.Class, B)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, List)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, B)
               parseMetadataStar({)
@@ -101,7 +101,7 @@
               listener: beginMember()
               recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, B)
                 parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, B, false)
-                  listener: beginFields({)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(List, typeReference)
                   listener: beginTypeArguments(<)
@@ -128,7 +128,7 @@
                   listener: endClassFields(null, null, null, null, null, null, 1, List, ;)
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
index 553647a..5f9ce60 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
@@ -7,7 +7,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -16,11 +16,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, x)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, x)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -43,7 +43,7 @@
             endBlockFunctionBody(0, {, })
           endClassMethod(null, Stream, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
index 4d94337..e9142c6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, x, DeclarationKind.Class, A, false)
-                listener: beginMethod(null, null, null, null, null, x)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, x)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
@@ -73,7 +73,7 @@
                 listener: endClassMethod(null, Stream, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
index cea3731..bdef6b4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, x)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, x)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -36,7 +36,7 @@
             endBlockFunctionBody(0, {, })
           endClassMethod(null, Stream, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
index c7c22cb..9b6493f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, x, DeclarationKind.Class, A, false)
-                listener: beginMethod(null, null, null, null, null, x)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, x)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
@@ -69,7 +69,7 @@
                 listener: endClassMethod(null, Stream, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
index df6d7fe..6e7b413 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
@@ -15,7 +15,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -24,11 +24,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -51,7 +51,7 @@
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           endClassFields(null, null, null, null, null, null, 1, Stream, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
index c837519..aa7d85c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
                 parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
-                  listener: beginFields({)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -71,7 +71,7 @@
                   listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
index 1a032d2..1e76544 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
@@ -15,7 +15,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -24,11 +24,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -55,7 +55,7 @@
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           endClassFields(null, null, null, null, null, null, 1, Stream, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
index 0f85986..9e3219e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
                 parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
-                  listener: beginFields({)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -76,7 +76,7 @@
                   listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
index 1b7755f..385f68c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
@@ -79,7 +79,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -88,11 +88,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -119,12 +119,12 @@
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           endClassFields(null, null, null, null, null, null, 1, Stream, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, B)
@@ -133,11 +133,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -164,7 +164,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -191,12 +191,12 @@
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           endClassFields(null, null, null, null, null, null, 1, Stream, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -205,11 +205,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -236,7 +236,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Stream)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Stream)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -280,14 +280,14 @@
         beginMetadataStar(baz)
         endMetadataStar(0)
         beginMember()
-          beginFields(})
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
             handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
             handleNoType(})
             handleIdentifier(baz, fieldDeclaration)
             handleNoFieldInitializer(;)
           endClassFields(null, null, null, null, null, null, 1, baz, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(Stream)
   beginMetadataStar(Stream)
@@ -336,7 +336,7 @@
   beginMetadataStar(baz)
   endMetadataStar(0)
   beginTopLevelMember(baz)
-    beginFields(})
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, })
       handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
       handleNoType(})
       handleIdentifier(baz, topLevelVariableDeclaration)
@@ -348,7 +348,7 @@
   beginTopLevelMember(Stream)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
index a5f5174..de9f8f5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
                 parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
-                  listener: beginFields({)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -76,7 +76,7 @@
                   listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -86,7 +86,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -102,7 +102,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(B, DeclarationKind.Class, B)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, B)
               parseMetadataStar({)
@@ -110,7 +110,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', foo, DeclarationKind.Class, B, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
@@ -148,7 +148,7 @@
               listener: beginMember()
               recoverFromInvalidMember(>, ;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, B)
                 parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, B, false)
-                  listener: beginFields(;)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                   ensureIdentifier(;, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -190,7 +190,7 @@
                   listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -200,7 +200,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -216,7 +216,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -224,7 +224,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', foo, DeclarationKind.Class, C, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
@@ -261,7 +261,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', null, Stream, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, Stream)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Stream)
                 ensureIdentifier(;, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
@@ -345,7 +345,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields(}, null, null, null, null, null, null, }, Instance of 'NoType', baz, DeclarationKind.Class, C, false)
-                listener: beginFields(})
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
                 reportRecoverableError(baz, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
                 listener: handleNoType(})
@@ -356,7 +356,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, baz, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(Stream)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -446,7 +446,7 @@
       listener: beginTopLevelMember(baz)
       isReservedKeyword(;)
       parseFields(}, null, null, null, null, null, null, }, Instance of 'NoType', baz, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(})
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, })
         reportRecoverableError(baz, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
         listener: handleNoType(})
@@ -468,7 +468,7 @@
           listener: // WARNING: Reporting at eof for .
         rewriter()
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         ensureIdentifier(;, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
index 0c00214..eccab19 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
@@ -7,7 +7,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -16,11 +16,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, stream)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, stream)
             handleNoType({)
             handleIdentifier(stream, methodDeclaration)
             beginTypeVariables(<)
@@ -58,7 +58,7 @@
         beginMetadataStar(stream2)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, stream2)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, stream2)
             handleNoType(})
             handleIdentifier(stream2, methodDeclaration)
             beginTypeVariables(<)
@@ -97,7 +97,7 @@
         beginMetadataStar(stream3)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, stream3)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, stream3)
             handleNoType(})
             handleIdentifier(stream3, methodDeclaration)
             beginTypeVariables(<)
@@ -126,7 +126,7 @@
             endBlockFunctionBody(0, {, })
           endClassMethod(null, stream3, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
index 01b18e1..d9371ae 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, stream)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               isReservedKeyword(<)
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, stream, DeclarationKind.Class, A, false)
-                listener: beginMethod(null, null, null, null, null, stream)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, stream)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(stream, methodDeclaration)
@@ -94,7 +94,7 @@
               listener: beginMember()
               isReservedKeyword(<)
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, stream2, DeclarationKind.Class, A, false)
-                listener: beginMethod(null, null, null, null, null, stream2)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, stream2)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(stream2, methodDeclaration)
@@ -158,7 +158,7 @@
               listener: beginMember()
               isReservedKeyword(<)
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, stream3, DeclarationKind.Class, A, false)
-                listener: beginMethod(null, null, null, null, null, stream3)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, stream3)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(stream3, methodDeclaration)
@@ -203,7 +203,7 @@
                 listener: endClassMethod(null, stream3, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
index 07ee768..40b2bb9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
@@ -135,7 +135,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, WrapperClass)
@@ -144,11 +144,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(abstract)
             handleType(int, null)
@@ -161,7 +161,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(as)
             handleType(int, null)
@@ -174,7 +174,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(assert)
             handleType(int, null)
@@ -188,7 +188,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(async)
             handleType(int, null)
@@ -201,7 +201,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(await)
             handleType(int, null)
@@ -214,7 +214,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(break)
             handleType(int, null)
@@ -228,7 +228,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(case)
             handleType(int, null)
@@ -242,7 +242,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(catch)
             handleType(int, null)
@@ -256,7 +256,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(class)
             handleType(int, null)
@@ -270,7 +270,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(const)
             handleType(int, null)
@@ -284,7 +284,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(continue)
             handleType(int, null)
@@ -298,7 +298,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(covariant)
             handleType(int, null)
@@ -311,7 +311,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(default)
             handleType(int, null)
@@ -325,7 +325,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(deferred)
             handleType(int, null)
@@ -338,7 +338,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(do)
             handleType(int, null)
@@ -352,7 +352,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(dynamic)
             handleType(int, null)
@@ -365,7 +365,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(else)
             handleType(int, null)
@@ -379,7 +379,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(enum)
             handleType(int, null)
@@ -393,7 +393,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(export)
             handleType(int, null)
@@ -406,7 +406,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(extends)
             handleType(int, null)
@@ -420,7 +420,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(extension)
             handleType(int, null)
@@ -433,7 +433,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(external)
             handleType(int, null)
@@ -446,7 +446,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(factory)
             handleType(int, null)
@@ -459,7 +459,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(false)
             handleType(int, null)
@@ -473,7 +473,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(final)
             handleType(int, null)
@@ -487,7 +487,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(finally)
             handleType(int, null)
@@ -501,7 +501,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(for)
             handleType(int, null)
@@ -515,7 +515,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Function)
             handleType(int, null)
@@ -528,7 +528,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -541,7 +541,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(hide)
             handleType(int, null)
@@ -554,7 +554,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(if)
             handleType(int, null)
@@ -568,7 +568,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(implements)
             handleType(int, null)
@@ -581,7 +581,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(import)
             handleType(int, null)
@@ -594,7 +594,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(in)
             handleType(int, null)
@@ -608,7 +608,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(inout)
             handleType(int, null)
@@ -621,7 +621,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(interface)
             handleType(int, null)
@@ -634,7 +634,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(is)
             handleType(int, null)
@@ -648,7 +648,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(late)
             handleType(int, null)
@@ -661,7 +661,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(library)
             handleType(int, null)
@@ -674,7 +674,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(mixin)
             handleType(int, null)
@@ -687,7 +687,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(native)
             handleType(int, null)
@@ -700,7 +700,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(new)
             handleType(int, null)
@@ -714,7 +714,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(null)
             handleType(int, null)
@@ -728,7 +728,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(of)
             handleType(int, null)
@@ -741,7 +741,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(on)
             handleType(int, null)
@@ -754,7 +754,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -767,7 +767,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(out)
             handleType(int, null)
@@ -780,7 +780,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(part)
             handleType(int, null)
@@ -793,7 +793,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(patch)
             handleType(int, null)
@@ -806,7 +806,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(required)
             handleType(int, null)
@@ -819,7 +819,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(rethrow)
             handleType(int, null)
@@ -833,7 +833,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(return)
             handleType(int, null)
@@ -847,7 +847,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(set)
             handleType(int, null)
@@ -860,7 +860,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(show)
             handleType(int, null)
@@ -873,7 +873,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(source)
             handleType(int, null)
@@ -886,7 +886,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(static)
             handleType(int, null)
@@ -899,7 +899,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(super)
             handleType(int, null)
@@ -913,7 +913,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(switch)
             handleType(int, null)
@@ -927,7 +927,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(sync)
             handleType(int, null)
@@ -940,7 +940,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(this)
             handleType(int, null)
@@ -954,7 +954,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(throw)
             handleType(int, null)
@@ -968,7 +968,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(true)
             handleType(int, null)
@@ -982,7 +982,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(try)
             handleType(int, null)
@@ -996,7 +996,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(typedef)
             handleType(int, null)
@@ -1009,7 +1009,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(var)
             handleType(int, null)
@@ -1023,7 +1023,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(void)
             handleType(int, null)
@@ -1037,7 +1037,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(while)
             handleType(int, null)
@@ -1051,7 +1051,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(with)
             handleType(int, null)
@@ -1065,7 +1065,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(yield)
             handleType(int, null)
@@ -1075,7 +1075,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, null, 1, int, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 69, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 69, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
index 6b24bf7..ccc4f23 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(WrapperClass, DeclarationKind.Class, WrapperClass)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, WrapperClass)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', abstract, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
@@ -57,7 +57,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
@@ -83,7 +83,7 @@
               isReservedKeyword(assert)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(assert)
                 listener: handleType(int, null)
@@ -109,7 +109,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(async)
                 listener: handleType(int, null)
@@ -133,7 +133,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(await)
                 listener: handleType(int, null)
@@ -159,7 +159,7 @@
               isReservedKeyword(break)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(break)
                 listener: handleType(int, null)
@@ -187,7 +187,7 @@
               isReservedKeyword(case)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(case)
                 listener: handleType(int, null)
@@ -215,7 +215,7 @@
               isReservedKeyword(catch)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(catch)
                 listener: handleType(int, null)
@@ -243,7 +243,7 @@
               isReservedKeyword(class)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(class)
                 listener: handleType(int, null)
@@ -271,7 +271,7 @@
               isReservedKeyword(const)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(const)
                 listener: handleType(int, null)
@@ -299,7 +299,7 @@
               isReservedKeyword(continue)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(continue)
                 listener: handleType(int, null)
@@ -325,7 +325,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
@@ -351,7 +351,7 @@
               isReservedKeyword(default)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(default)
                 listener: handleType(int, null)
@@ -377,7 +377,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
@@ -403,7 +403,7 @@
               isReservedKeyword(do)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(do)
                 listener: handleType(int, null)
@@ -429,7 +429,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
@@ -455,7 +455,7 @@
               isReservedKeyword(else)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(else)
                 listener: handleType(int, null)
@@ -483,7 +483,7 @@
               isReservedKeyword(enum)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(enum)
                 listener: handleType(int, null)
@@ -509,7 +509,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
@@ -535,7 +535,7 @@
               isReservedKeyword(extends)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extends)
                 listener: handleType(int, null)
@@ -561,7 +561,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extension)
                 listener: handleType(int, null)
@@ -585,7 +585,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
@@ -609,7 +609,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
@@ -635,7 +635,7 @@
               isReservedKeyword(false)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(false)
                 listener: handleType(int, null)
@@ -663,7 +663,7 @@
               isReservedKeyword(final)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(final)
                 listener: handleType(int, null)
@@ -691,7 +691,7 @@
               isReservedKeyword(finally)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(finally)
                 listener: handleType(int, null)
@@ -719,7 +719,7 @@
               isReservedKeyword(for)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(for)
                 listener: handleType(int, null)
@@ -745,7 +745,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
@@ -770,7 +770,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -794,7 +794,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(hide)
                 listener: handleType(int, null)
@@ -820,7 +820,7 @@
               isReservedKeyword(if)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(if)
                 listener: handleType(int, null)
@@ -846,7 +846,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
@@ -870,7 +870,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
@@ -896,7 +896,7 @@
               isReservedKeyword(in)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(in)
                 listener: handleType(int, null)
@@ -922,7 +922,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(inout)
                 listener: handleType(int, null)
@@ -946,7 +946,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
@@ -972,7 +972,7 @@
               isReservedKeyword(is)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(is)
                 listener: handleType(int, null)
@@ -998,7 +998,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
@@ -1022,7 +1022,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
@@ -1046,7 +1046,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
@@ -1070,7 +1070,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(native)
                 listener: handleType(int, null)
@@ -1096,7 +1096,7 @@
               isReservedKeyword(new)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(new)
                 listener: handleType(int, null)
@@ -1124,7 +1124,7 @@
               isReservedKeyword(null)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(null)
                 listener: handleType(int, null)
@@ -1150,7 +1150,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(of)
                 listener: handleType(int, null)
@@ -1174,7 +1174,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(on)
                 listener: handleType(int, null)
@@ -1199,7 +1199,7 @@
               listener: beginMember()
               isUnaryMinus(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -1223,7 +1223,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(out)
                 listener: handleType(int, null)
@@ -1247,7 +1247,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
@@ -1271,7 +1271,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(patch)
                 listener: handleType(int, null)
@@ -1295,7 +1295,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
@@ -1321,7 +1321,7 @@
               isReservedKeyword(rethrow)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(rethrow)
                 listener: handleType(int, null)
@@ -1349,7 +1349,7 @@
               isReservedKeyword(return)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(return)
                 listener: handleType(int, null)
@@ -1376,7 +1376,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
@@ -1400,7 +1400,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(show)
                 listener: handleType(int, null)
@@ -1424,7 +1424,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(source)
                 listener: handleType(int, null)
@@ -1448,7 +1448,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
@@ -1474,7 +1474,7 @@
               isReservedKeyword(super)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(super)
                 listener: handleType(int, null)
@@ -1502,7 +1502,7 @@
               isReservedKeyword(switch)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(switch)
                 listener: handleType(int, null)
@@ -1528,7 +1528,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(sync)
                 listener: handleType(int, null)
@@ -1553,7 +1553,7 @@
               listener: beginMember()
               recoverFromInvalidMember(int, ;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
                 parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
-                  listener: beginFields(;)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                   listener: handleIdentifier(int, typeReference)
                   listener: handleNoTypeArguments(this)
                   listener: handleType(int, null)
@@ -1581,7 +1581,7 @@
               isReservedKeyword(throw)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(throw)
                 listener: handleType(int, null)
@@ -1609,7 +1609,7 @@
               isReservedKeyword(true)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(true)
                 listener: handleType(int, null)
@@ -1637,7 +1637,7 @@
               isReservedKeyword(try)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(try)
                 listener: handleType(int, null)
@@ -1663,7 +1663,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
@@ -1689,7 +1689,7 @@
               isReservedKeyword(var)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(var)
                 listener: handleType(int, null)
@@ -1717,7 +1717,7 @@
               isReservedKeyword(void)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(void)
                 listener: handleType(int, null)
@@ -1745,7 +1745,7 @@
               isReservedKeyword(while)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(while)
                 listener: handleType(int, null)
@@ -1773,7 +1773,7 @@
               isReservedKeyword(with)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -1799,7 +1799,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(yield)
                 listener: handleType(int, null)
@@ -1817,7 +1817,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 69, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 69, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
index 502bede..d7a04ad 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
@@ -475,7 +475,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, WrapperClass)
@@ -484,11 +484,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, abstract)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, abstract)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(abstract)
             handleType(int, null)
@@ -546,7 +546,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, as)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, as)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(as)
             handleType(int, null)
@@ -604,7 +604,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, assert)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, assert)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(assert)
             handleType(int, null)
@@ -661,7 +661,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, async)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, async)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(async)
             handleType(int, null)
@@ -719,7 +719,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, await)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, await)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(await)
             handleType(int, null)
@@ -777,7 +777,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, break)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, break)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(break)
             handleType(int, null)
@@ -842,7 +842,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, case)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, case)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(case)
             handleType(int, null)
@@ -902,7 +902,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, catch)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, catch)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(catch)
             handleType(int, null)
@@ -962,7 +962,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, class)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, class)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(class)
             handleType(int, null)
@@ -1022,7 +1022,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, const)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, const)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(const)
             handleType(int, null)
@@ -1086,7 +1086,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, continue)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, continue)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(continue)
             handleType(int, null)
@@ -1151,7 +1151,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, covariant)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, covariant)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(covariant)
             handleType(int, null)
@@ -1209,7 +1209,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, default)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, default)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(default)
             handleType(int, null)
@@ -1269,7 +1269,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, deferred)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, deferred)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(deferred)
             handleType(int, null)
@@ -1327,7 +1327,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, do)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, do)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(do)
             handleType(int, null)
@@ -1402,7 +1402,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, dynamic)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, dynamic)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(dynamic)
             handleType(int, null)
@@ -1460,7 +1460,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, else)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, else)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(else)
             handleType(int, null)
@@ -1530,7 +1530,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, enum)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, enum)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(enum)
             handleType(int, null)
@@ -1590,7 +1590,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, export)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, export)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(export)
             handleType(int, null)
@@ -1648,7 +1648,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, extends)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, extends)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(extends)
             handleType(int, null)
@@ -1708,7 +1708,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, extension)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, extension)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(extension)
             handleType(int, null)
@@ -1766,7 +1766,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, external)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, external)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(external)
             handleType(int, null)
@@ -1824,7 +1824,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, factory)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, factory)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(factory)
             handleType(int, null)
@@ -1882,7 +1882,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, false)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, false)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(false)
             handleType(int, null)
@@ -1941,7 +1941,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, final)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, final)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(final)
             handleType(int, null)
@@ -2028,7 +2028,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, finally)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, finally)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(finally)
             handleType(int, null)
@@ -2088,7 +2088,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, for)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, for)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(for)
             handleType(int, null)
@@ -2168,7 +2168,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Function)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Function)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Function)
             handleType(int, null)
@@ -2226,7 +2226,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, get)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -2284,7 +2284,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, hide)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, hide)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(hide)
             handleType(int, null)
@@ -2342,7 +2342,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, if)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, if)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(if)
             handleType(int, null)
@@ -2413,7 +2413,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, implements)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, implements)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(implements)
             handleType(int, null)
@@ -2471,7 +2471,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, import)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, import)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(import)
             handleType(int, null)
@@ -2529,7 +2529,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, in)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, in)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(in)
             handleType(int, null)
@@ -2589,7 +2589,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, inout)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, inout)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(inout)
             handleType(int, null)
@@ -2647,7 +2647,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, interface)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, interface)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(interface)
             handleType(int, null)
@@ -2705,7 +2705,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, is)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, is)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(is)
             handleType(int, null)
@@ -2774,7 +2774,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, late)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(late)
             handleType(int, null)
@@ -2832,7 +2832,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, library)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, library)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(library)
             handleType(int, null)
@@ -2890,7 +2890,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, mixin)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, mixin)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(mixin)
             handleType(int, null)
@@ -2948,7 +2948,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, native)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, native)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(native)
             handleType(int, null)
@@ -3006,7 +3006,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, new)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, new)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(new)
             handleType(int, null)
@@ -3070,7 +3070,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, null)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(null)
             handleType(int, null)
@@ -3129,7 +3129,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, of)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, of)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(of)
             handleType(int, null)
@@ -3187,7 +3187,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, on)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, on)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(on)
             handleType(int, null)
@@ -3245,7 +3245,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -3303,7 +3303,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, out)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, out)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(out)
             handleType(int, null)
@@ -3361,7 +3361,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, part)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, part)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(part)
             handleType(int, null)
@@ -3419,7 +3419,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, patch)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, patch)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(patch)
             handleType(int, null)
@@ -3477,7 +3477,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, required)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(required)
             handleType(int, null)
@@ -3535,7 +3535,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, rethrow)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, rethrow)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(rethrow)
             handleType(int, null)
@@ -3595,7 +3595,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, return)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, return)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(return)
             handleType(int, null)
@@ -3651,7 +3651,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, set)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(set)
             handleType(int, null)
@@ -3709,7 +3709,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, show)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, show)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(show)
             handleType(int, null)
@@ -3767,7 +3767,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, source)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, source)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(source)
             handleType(int, null)
@@ -3825,7 +3825,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, static)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, static)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(static)
             handleType(int, null)
@@ -3883,7 +3883,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, super)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, super)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(super)
             handleType(int, null)
@@ -3942,7 +3942,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, switch)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, switch)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(switch)
             handleType(int, null)
@@ -4014,7 +4014,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, sync)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, sync)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(sync)
             handleType(int, null)
@@ -4072,7 +4072,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(})
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(this)
             handleType(int, null)
@@ -4085,7 +4085,7 @@
         beginMetadataStar(()
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, ()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, ()
             handleNoType(;)
             handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
             handleIdentifier(, methodDeclaration)
@@ -4142,7 +4142,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, throw)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, throw)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(throw)
             handleType(int, null)
@@ -4198,7 +4198,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, true)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, true)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(true)
             handleType(int, null)
@@ -4257,7 +4257,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, try)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, try)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(try)
             handleType(int, null)
@@ -4325,7 +4325,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, typedef)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, typedef)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(typedef)
             handleType(int, null)
@@ -4383,7 +4383,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, var)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, var)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(var)
             handleType(int, null)
@@ -4470,7 +4470,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, void)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, void)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(void)
             handleType(int, null)
@@ -4557,7 +4557,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, while)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, while)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(while)
             handleType(int, null)
@@ -4628,7 +4628,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, with)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, with)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(with)
             handleType(int, null)
@@ -4688,7 +4688,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, yield)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, yield)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(yield)
             handleType(int, null)
@@ -4743,7 +4743,7 @@
             endBlockFunctionBody(2, {, })
           endClassMethod(null, int, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 70, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
index 499b444..8276661 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(WrapperClass, DeclarationKind.Class, WrapperClass)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, WrapperClass)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, abstract, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, abstract)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, abstract)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
@@ -177,7 +177,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, as, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, as)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, as)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
@@ -323,7 +323,7 @@
               isReservedKeyword(assert)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, assert, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, assert)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, assert)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(assert)
                 listener: handleType(int, null)
@@ -460,7 +460,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, async, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, async)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, async)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(async)
                 listener: handleType(int, null)
@@ -604,7 +604,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, await, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, await)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, await)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(await)
                 listener: handleType(int, null)
@@ -753,7 +753,7 @@
               isReservedKeyword(break)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, break, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, break)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, break)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(break)
                 listener: handleType(int, null)
@@ -932,7 +932,7 @@
               isReservedKeyword(case)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, case, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, case)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, case)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(case)
                 listener: handleType(int, null)
@@ -1079,7 +1079,7 @@
               isReservedKeyword(catch)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, catch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, catch)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, catch)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(catch)
                 listener: handleType(int, null)
@@ -1226,7 +1226,7 @@
               isReservedKeyword(class)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, class, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, class)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(class)
                 listener: handleType(int, null)
@@ -1373,7 +1373,7 @@
               isReservedKeyword(const)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, const, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, const)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, const)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(const)
                 listener: handleType(int, null)
@@ -1525,7 +1525,7 @@
               isReservedKeyword(continue)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, continue, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, continue)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, continue)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(continue)
                 listener: handleType(int, null)
@@ -1702,7 +1702,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, covariant, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, covariant)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, covariant)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
@@ -1848,7 +1848,7 @@
               isReservedKeyword(default)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, default, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, default)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, default)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(default)
                 listener: handleType(int, null)
@@ -1993,7 +1993,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, deferred, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, deferred)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, deferred)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
@@ -2139,7 +2139,7 @@
               isReservedKeyword(do)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, do, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, do)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, do)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(do)
                 listener: handleType(int, null)
@@ -2340,7 +2340,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, dynamic, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, dynamic)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, dynamic)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
@@ -2486,7 +2486,7 @@
               isReservedKeyword(else)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, else, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, else)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, else)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(else)
                 listener: handleType(int, null)
@@ -2683,7 +2683,7 @@
               isReservedKeyword(enum)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, enum, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, enum)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, enum)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(enum)
                 listener: handleType(int, null)
@@ -2828,7 +2828,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, export, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, export)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, export)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
@@ -2974,7 +2974,7 @@
               isReservedKeyword(extends)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, extends, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, extends)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, extends)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extends)
                 listener: handleType(int, null)
@@ -3119,7 +3119,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, extension, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, extension)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, extension)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extension)
                 listener: handleType(int, null)
@@ -3263,7 +3263,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, external, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, external)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, external)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
@@ -3407,7 +3407,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, factory, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, factory)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, factory)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
@@ -3553,7 +3553,7 @@
               isReservedKeyword(false)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, false, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, false)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(false)
                 listener: handleType(int, null)
@@ -3695,7 +3695,7 @@
               isReservedKeyword(final)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, final, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, final)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, final)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(final)
                 listener: handleType(int, null)
@@ -3934,7 +3934,7 @@
               isReservedKeyword(finally)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, finally, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, finally)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, finally)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(finally)
                 listener: handleType(int, null)
@@ -4081,7 +4081,7 @@
               isReservedKeyword(for)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, for, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, for)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, for)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(for)
                 listener: handleType(int, null)
@@ -4293,7 +4293,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, Function, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, Function)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Function)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
@@ -4438,7 +4438,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, get, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, get)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -4582,7 +4582,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, hide, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, hide)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, hide)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(hide)
                 listener: handleType(int, null)
@@ -4728,7 +4728,7 @@
               isReservedKeyword(if)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, if, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, if)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, if)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(if)
                 listener: handleType(int, null)
@@ -4911,7 +4911,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, implements, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, implements)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, implements)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
@@ -5055,7 +5055,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, import, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, import)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, import)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
@@ -5201,7 +5201,7 @@
               isReservedKeyword(in)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, in, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, in)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, in)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(in)
                 listener: handleType(int, null)
@@ -5346,7 +5346,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, inout, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, inout)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, inout)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(inout)
                 listener: handleType(int, null)
@@ -5490,7 +5490,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, interface, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, interface)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, interface)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
@@ -5636,7 +5636,7 @@
               isReservedKeyword(is)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, is, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, is)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, is)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(is)
                 listener: handleType(int, null)
@@ -5813,7 +5813,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, late, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, late)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
@@ -5957,7 +5957,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, library, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, library)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, library)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
@@ -6101,7 +6101,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, mixin, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, mixin)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, mixin)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
@@ -6245,7 +6245,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, native, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, native)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, native)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(native)
                 listener: handleType(int, null)
@@ -6391,7 +6391,7 @@
               isReservedKeyword(new)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, new, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, new)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, new)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(new)
                 listener: handleType(int, null)
@@ -6544,7 +6544,7 @@
               isReservedKeyword(null)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, null, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, null)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(null)
                 listener: handleType(int, null)
@@ -6684,7 +6684,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, of, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, of)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, of)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(of)
                 listener: handleType(int, null)
@@ -6828,7 +6828,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, on, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, on)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, on)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(on)
                 listener: handleType(int, null)
@@ -6974,7 +6974,7 @@
               isUnaryMinus(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, WrapperClass, false)
                 isUnaryMinus(()
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -7118,7 +7118,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, out, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, out)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, out)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(out)
                 listener: handleType(int, null)
@@ -7262,7 +7262,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, part, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, part)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, part)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
@@ -7406,7 +7406,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, patch, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, patch)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, patch)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(patch)
                 listener: handleType(int, null)
@@ -7550,7 +7550,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, required, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, required)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
@@ -7696,7 +7696,7 @@
               isReservedKeyword(rethrow)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, rethrow, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, rethrow)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, rethrow)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(rethrow)
                 listener: handleType(int, null)
@@ -7843,7 +7843,7 @@
               isReservedKeyword(return)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, return, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, return)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, return)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(return)
                 listener: handleType(int, null)
@@ -7985,7 +7985,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, set, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, set)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
@@ -8129,7 +8129,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, show, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, show)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, show)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(show)
                 listener: handleType(int, null)
@@ -8273,7 +8273,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, source, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, source)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, source)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(source)
                 listener: handleType(int, null)
@@ -8417,7 +8417,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, static, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, static)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, static)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
@@ -8563,7 +8563,7 @@
               isReservedKeyword(super)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, super, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, super)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, super)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(super)
                 listener: handleType(int, null)
@@ -8704,7 +8704,7 @@
               isReservedKeyword(switch)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, switch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, switch)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, switch)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(switch)
                 listener: handleType(int, null)
@@ -8896,7 +8896,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, sync, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, sync)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, sync)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(sync)
                 listener: handleType(int, null)
@@ -9041,7 +9041,7 @@
               listener: beginMember()
               recoverFromInvalidMember(int, }, null, null, null, null, null, null, }, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
                 parseFields(}, null, null, null, null, null, null, }, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
-                  listener: beginFields(})
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
                   listener: handleIdentifier(int, typeReference)
                   listener: handleNoTypeArguments(this)
                   listener: handleType(int, null)
@@ -9065,7 +9065,7 @@
               listener: beginMember()
               recoverFromInvalidMember(;, ;, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, WrapperClass)
                 parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, (, DeclarationKind.Class, WrapperClass, false)
-                  listener: beginMethod(null, null, null, null, null, ()
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, ()
                   listener: handleNoType(;)
                   ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                     insertSyntheticIdentifier(;, methodDeclaration, message: null, messageOnToken: null)
@@ -9206,7 +9206,7 @@
               isReservedKeyword(throw)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, throw, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, throw)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, throw)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(throw)
                 listener: handleType(int, null)
@@ -9348,7 +9348,7 @@
               isReservedKeyword(true)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, true, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, true)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(true)
                 listener: handleType(int, null)
@@ -9490,7 +9490,7 @@
               isReservedKeyword(try)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, try, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, try)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, try)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(try)
                 listener: handleType(int, null)
@@ -9673,7 +9673,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, typedef, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, typedef)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, typedef)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
@@ -9819,7 +9819,7 @@
               isReservedKeyword(var)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, var, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, var)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, var)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(var)
                 listener: handleType(int, null)
@@ -10058,7 +10058,7 @@
               isReservedKeyword(void)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, void, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, void)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, void)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(void)
                 listener: handleType(int, null)
@@ -10298,7 +10298,7 @@
               isReservedKeyword(while)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, while, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, while)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, while)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(while)
                 listener: handleType(int, null)
@@ -10483,7 +10483,7 @@
               isReservedKeyword(with)
               indicatesMethodOrField(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, with, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(null, null, null, null, null, with)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, with)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -10628,7 +10628,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, yield, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, yield)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, yield)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(yield)
                 listener: handleType(int, null)
@@ -10766,7 +10766,7 @@
                 listener: endClassMethod(null, int, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 70, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
index ef7191f..05ab92b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
@@ -32,7 +32,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -41,8 +41,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
   handleErrorToken(UnmatchedToken(())
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
index 044cefa..69db077 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
@@ -52,7 +52,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -68,9 +68,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(UnmatchedToken(())
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
index acdbaf9..8221f5c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
@@ -136,7 +136,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(abstract)
       handleType(int, null)
@@ -149,7 +149,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(as)
       handleType(int, null)
@@ -162,7 +162,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(assert)
       handleType(int, null)
@@ -176,7 +176,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(async)
       handleType(int, null)
@@ -189,7 +189,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(await)
       handleType(int, null)
@@ -202,7 +202,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(break)
       handleType(int, null)
@@ -216,7 +216,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(case)
       handleType(int, null)
@@ -230,7 +230,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(catch)
       handleType(int, null)
@@ -244,7 +244,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(class)
       handleType(int, null)
@@ -258,7 +258,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(const)
       handleType(int, null)
@@ -272,7 +272,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(continue)
       handleType(int, null)
@@ -286,7 +286,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(covariant)
       handleType(int, null)
@@ -299,7 +299,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(default)
       handleType(int, null)
@@ -313,7 +313,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(deferred)
       handleType(int, null)
@@ -326,7 +326,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(do)
       handleType(int, null)
@@ -340,7 +340,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(dynamic)
       handleType(int, null)
@@ -353,7 +353,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(else)
       handleType(int, null)
@@ -367,7 +367,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(enum)
       handleType(int, null)
@@ -381,7 +381,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(export)
       handleType(int, null)
@@ -394,7 +394,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(extends)
       handleType(int, null)
@@ -408,7 +408,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(extension)
       handleType(int, null)
@@ -421,7 +421,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(external)
       handleType(int, null)
@@ -434,7 +434,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(factory)
       handleType(int, null)
@@ -447,7 +447,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(false)
       handleType(int, null)
@@ -461,7 +461,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(final)
       handleType(int, null)
@@ -475,7 +475,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(finally)
       handleType(int, null)
@@ -489,7 +489,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(for)
       handleType(int, null)
@@ -503,7 +503,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(Function)
       handleType(int, null)
@@ -516,7 +516,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(get)
       handleType(int, null)
@@ -529,7 +529,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(hide)
       handleType(int, null)
@@ -542,7 +542,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(if)
       handleType(int, null)
@@ -556,7 +556,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(implements)
       handleType(int, null)
@@ -569,7 +569,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(import)
       handleType(int, null)
@@ -582,7 +582,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(in)
       handleType(int, null)
@@ -596,7 +596,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(inout)
       handleType(int, null)
@@ -609,7 +609,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(interface)
       handleType(int, null)
@@ -622,7 +622,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(is)
       handleType(int, null)
@@ -636,7 +636,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(late)
       handleType(int, null)
@@ -649,7 +649,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(library)
       handleType(int, null)
@@ -662,7 +662,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(mixin)
       handleType(int, null)
@@ -675,7 +675,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(native)
       handleType(int, null)
@@ -688,7 +688,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(new)
       handleType(int, null)
@@ -702,7 +702,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(null)
       handleType(int, null)
@@ -716,7 +716,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(of)
       handleType(int, null)
@@ -729,7 +729,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(on)
       handleType(int, null)
@@ -742,7 +742,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(operator)
       handleType(int, null)
@@ -755,7 +755,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(out)
       handleType(int, null)
@@ -768,7 +768,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(part)
       handleType(int, null)
@@ -781,7 +781,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(patch)
       handleType(int, null)
@@ -794,7 +794,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(required)
       handleType(int, null)
@@ -807,7 +807,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(rethrow)
       handleType(int, null)
@@ -821,7 +821,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(return)
       handleType(int, null)
@@ -835,7 +835,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(set)
       handleType(int, null)
@@ -848,7 +848,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(show)
       handleType(int, null)
@@ -861,7 +861,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(source)
       handleType(int, null)
@@ -874,7 +874,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(static)
       handleType(int, null)
@@ -887,7 +887,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(super)
       handleType(int, null)
@@ -901,7 +901,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(switch)
       handleType(int, null)
@@ -915,7 +915,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(sync)
       handleType(int, null)
@@ -928,7 +928,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(this)
       handleType(int, null)
@@ -942,7 +942,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(throw)
       handleType(int, null)
@@ -956,7 +956,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(true)
       handleType(int, null)
@@ -970,7 +970,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(try)
       handleType(int, null)
@@ -984,7 +984,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(typedef)
       handleType(int, null)
@@ -997,7 +997,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(var)
       handleType(int, null)
@@ -1011,7 +1011,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(void)
       handleType(int, null)
@@ -1025,7 +1025,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(while)
       handleType(int, null)
@@ -1039,7 +1039,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(with)
       handleType(int, null)
@@ -1053,7 +1053,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(yield)
       handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
index 3177f42..b2228b8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
       parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', abstract, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(abstract)
         listener: handleType(int, null)
@@ -33,7 +33,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(as)
         listener: handleType(int, null)
@@ -59,7 +59,7 @@
       isReservedKeyword(assert)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(assert)
         listener: handleType(int, null)
@@ -85,7 +85,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(async)
         listener: handleType(int, null)
@@ -109,7 +109,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(await)
         listener: handleType(int, null)
@@ -135,7 +135,7 @@
       isReservedKeyword(break)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(break)
         listener: handleType(int, null)
@@ -163,7 +163,7 @@
       isReservedKeyword(case)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(case)
         listener: handleType(int, null)
@@ -191,7 +191,7 @@
       isReservedKeyword(catch)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(catch)
         listener: handleType(int, null)
@@ -219,7 +219,7 @@
       isReservedKeyword(class)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(class)
         listener: handleType(int, null)
@@ -247,7 +247,7 @@
       isReservedKeyword(const)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(const)
         listener: handleType(int, null)
@@ -275,7 +275,7 @@
       isReservedKeyword(continue)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(continue)
         listener: handleType(int, null)
@@ -301,7 +301,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(covariant)
         listener: handleType(int, null)
@@ -327,7 +327,7 @@
       isReservedKeyword(default)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(default)
         listener: handleType(int, null)
@@ -353,7 +353,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(deferred)
         listener: handleType(int, null)
@@ -379,7 +379,7 @@
       isReservedKeyword(do)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(do)
         listener: handleType(int, null)
@@ -405,7 +405,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(dynamic)
         listener: handleType(int, null)
@@ -431,7 +431,7 @@
       isReservedKeyword(else)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(else)
         listener: handleType(int, null)
@@ -459,7 +459,7 @@
       isReservedKeyword(enum)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(enum)
         listener: handleType(int, null)
@@ -485,7 +485,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(export)
         listener: handleType(int, null)
@@ -511,7 +511,7 @@
       isReservedKeyword(extends)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(extends)
         listener: handleType(int, null)
@@ -537,7 +537,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(extension)
         listener: handleType(int, null)
@@ -561,7 +561,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(external)
         listener: handleType(int, null)
@@ -585,7 +585,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(factory)
         listener: handleType(int, null)
@@ -611,7 +611,7 @@
       isReservedKeyword(false)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(false)
         listener: handleType(int, null)
@@ -639,7 +639,7 @@
       isReservedKeyword(final)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(final)
         listener: handleType(int, null)
@@ -667,7 +667,7 @@
       isReservedKeyword(finally)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(finally)
         listener: handleType(int, null)
@@ -695,7 +695,7 @@
       isReservedKeyword(for)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(for)
         listener: handleType(int, null)
@@ -721,7 +721,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(Function)
         listener: handleType(int, null)
@@ -745,7 +745,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(int, null)
@@ -769,7 +769,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(hide)
         listener: handleType(int, null)
@@ -795,7 +795,7 @@
       isReservedKeyword(if)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(if)
         listener: handleType(int, null)
@@ -821,7 +821,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(implements)
         listener: handleType(int, null)
@@ -845,7 +845,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(import)
         listener: handleType(int, null)
@@ -871,7 +871,7 @@
       isReservedKeyword(in)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(in)
         listener: handleType(int, null)
@@ -897,7 +897,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(inout)
         listener: handleType(int, null)
@@ -921,7 +921,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(interface)
         listener: handleType(int, null)
@@ -947,7 +947,7 @@
       isReservedKeyword(is)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(is)
         listener: handleType(int, null)
@@ -973,7 +973,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(late)
         listener: handleType(int, null)
@@ -997,7 +997,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(library)
         listener: handleType(int, null)
@@ -1021,7 +1021,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(mixin)
         listener: handleType(int, null)
@@ -1045,7 +1045,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(native)
         listener: handleType(int, null)
@@ -1071,7 +1071,7 @@
       isReservedKeyword(new)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(new)
         listener: handleType(int, null)
@@ -1099,7 +1099,7 @@
       isReservedKeyword(null)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(null)
         listener: handleType(int, null)
@@ -1125,7 +1125,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(of)
         listener: handleType(int, null)
@@ -1149,7 +1149,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(on)
         listener: handleType(int, null)
@@ -1173,7 +1173,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(operator)
         listener: handleType(int, null)
@@ -1197,7 +1197,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(out)
         listener: handleType(int, null)
@@ -1221,7 +1221,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(part)
         listener: handleType(int, null)
@@ -1245,7 +1245,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(patch)
         listener: handleType(int, null)
@@ -1269,7 +1269,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(required)
         listener: handleType(int, null)
@@ -1295,7 +1295,7 @@
       isReservedKeyword(rethrow)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(rethrow)
         listener: handleType(int, null)
@@ -1323,7 +1323,7 @@
       isReservedKeyword(return)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(return)
         listener: handleType(int, null)
@@ -1349,7 +1349,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(set)
         listener: handleType(int, null)
@@ -1373,7 +1373,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(show)
         listener: handleType(int, null)
@@ -1397,7 +1397,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(source)
         listener: handleType(int, null)
@@ -1421,7 +1421,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(static)
         listener: handleType(int, null)
@@ -1447,7 +1447,7 @@
       isReservedKeyword(super)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(super)
         listener: handleType(int, null)
@@ -1475,7 +1475,7 @@
       isReservedKeyword(switch)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(switch)
         listener: handleType(int, null)
@@ -1501,7 +1501,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(sync)
         listener: handleType(int, null)
@@ -1525,7 +1525,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(this)
         listener: handleType(int, null)
@@ -1553,7 +1553,7 @@
       isReservedKeyword(throw)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(throw)
         listener: handleType(int, null)
@@ -1581,7 +1581,7 @@
       isReservedKeyword(true)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(true)
         listener: handleType(int, null)
@@ -1609,7 +1609,7 @@
       isReservedKeyword(try)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(try)
         listener: handleType(int, null)
@@ -1635,7 +1635,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(typedef)
         listener: handleType(int, null)
@@ -1661,7 +1661,7 @@
       isReservedKeyword(var)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(var)
         listener: handleType(int, null)
@@ -1689,7 +1689,7 @@
       isReservedKeyword(void)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(void)
         listener: handleType(int, null)
@@ -1717,7 +1717,7 @@
       isReservedKeyword(while)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(while)
         listener: handleType(int, null)
@@ -1745,7 +1745,7 @@
       isReservedKeyword(with)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(with)
         listener: handleType(int, null)
@@ -1771,7 +1771,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(yield)
         listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
index d218353..1f1f6e6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
@@ -468,19 +468,19 @@
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'abstract' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: abstract}], abstract, abstract)
       handleIdentifier(abstract, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'abstract' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: abstract}], abstract, abstract)
       handleIdentifier(abstract, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -490,24 +490,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'as' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: as}], as, as)
       handleIdentifier(as, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'as' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: as}], as, as)
       handleIdentifier(as, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -517,24 +517,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
       handleIdentifier(assert, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
       handleIdentifier(assert, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -544,23 +544,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(async, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(async, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -569,23 +569,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(await, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(await, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -594,24 +594,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
       handleIdentifier(break, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
       handleIdentifier(break, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -621,24 +621,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
       handleIdentifier(case, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
       handleIdentifier(case, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -648,24 +648,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
       handleIdentifier(catch, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
       handleIdentifier(catch, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -675,24 +675,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
       handleIdentifier(class, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
       handleIdentifier(class, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -702,24 +702,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
       handleIdentifier(const, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
       handleIdentifier(const, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -729,24 +729,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
       handleIdentifier(continue, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
       handleIdentifier(continue, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -756,24 +756,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'covariant' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: covariant}], covariant, covariant)
       handleIdentifier(covariant, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'covariant' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: covariant}], covariant, covariant)
       handleIdentifier(covariant, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -783,24 +783,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
       handleIdentifier(default, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
       handleIdentifier(default, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -810,24 +810,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'deferred' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: deferred}], deferred, deferred)
       handleIdentifier(deferred, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'deferred' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: deferred}], deferred, deferred)
       handleIdentifier(deferred, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -837,24 +837,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
       handleIdentifier(do, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
       handleIdentifier(do, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -864,24 +864,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'dynamic' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: dynamic}], dynamic, dynamic)
       handleIdentifier(dynamic, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'dynamic' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: dynamic}], dynamic, dynamic)
       handleIdentifier(dynamic, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -891,24 +891,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
       handleIdentifier(else, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
       handleIdentifier(else, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -918,24 +918,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
       handleIdentifier(enum, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
       handleIdentifier(enum, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -945,24 +945,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'export' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: export}], export, export)
       handleIdentifier(export, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'export' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: export}], export, export)
       handleIdentifier(export, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -972,24 +972,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
       handleIdentifier(extends, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
       handleIdentifier(extends, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -999,24 +999,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extension' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extension}], extension, extension)
       handleIdentifier(extension, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extension' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extension}], extension, extension)
       handleIdentifier(extension, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1026,24 +1026,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'external' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: external}], external, external)
       handleIdentifier(external, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'external' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: external}], external, external)
       handleIdentifier(external, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1053,24 +1053,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'factory' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: factory}], factory, factory)
       handleIdentifier(factory, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'factory' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: factory}], factory, factory)
       handleIdentifier(factory, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1080,24 +1080,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
       handleIdentifier(false, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
       handleIdentifier(false, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1107,24 +1107,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
       handleIdentifier(final, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
       handleIdentifier(final, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1134,24 +1134,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
       handleIdentifier(finally, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
       handleIdentifier(finally, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1161,24 +1161,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
       handleIdentifier(for, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
       handleIdentifier(for, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1188,24 +1188,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'Function' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: Function}], Function, Function)
       handleIdentifier(Function, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'Function' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: Function}], Function, Function)
       handleIdentifier(Function, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1215,24 +1215,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'get' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: get}], get, get)
       handleIdentifier(get, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'get' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: get}], get, get)
       handleIdentifier(get, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1242,23 +1242,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(hide, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(hide, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -1267,24 +1267,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
       handleIdentifier(if, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
       handleIdentifier(if, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1294,24 +1294,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'implements' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: implements}], implements, implements)
       handleIdentifier(implements, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'implements' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: implements}], implements, implements)
       handleIdentifier(implements, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1321,24 +1321,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'import' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: import}], import, import)
       handleIdentifier(import, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'import' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: import}], import, import)
       handleIdentifier(import, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1348,24 +1348,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
       handleIdentifier(in, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
       handleIdentifier(in, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1375,23 +1375,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(inout, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(inout, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -1400,24 +1400,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'interface' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: interface}], interface, interface)
       handleIdentifier(interface, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'interface' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: interface}], interface, interface)
       handleIdentifier(interface, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1427,24 +1427,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
       handleIdentifier(is, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
       handleIdentifier(is, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1454,24 +1454,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'late' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: late}], late, late)
       handleIdentifier(late, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'late' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: late}], late, late)
       handleIdentifier(late, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1481,24 +1481,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'library' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: library}], library, library)
       handleIdentifier(library, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'library' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: library}], library, library)
       handleIdentifier(library, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1508,24 +1508,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'mixin' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: mixin}], mixin, mixin)
       handleIdentifier(mixin, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'mixin' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: mixin}], mixin, mixin)
       handleIdentifier(mixin, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1535,23 +1535,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(native, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(native, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -1560,24 +1560,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
       handleIdentifier(new, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
       handleIdentifier(new, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1587,24 +1587,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
       handleIdentifier(null, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
       handleIdentifier(null, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1614,23 +1614,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(of, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(of, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -1639,23 +1639,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(on, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(on, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -1664,24 +1664,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'operator' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: operator}], operator, operator)
       handleIdentifier(operator, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'operator' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: operator}], operator, operator)
       handleIdentifier(operator, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1691,23 +1691,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(out, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(out, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -1716,24 +1716,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'part' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: part}], part, part)
       handleIdentifier(part, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'part' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: part}], part, part)
       handleIdentifier(part, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1743,23 +1743,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(patch, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(patch, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -1768,24 +1768,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'required' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: required}], required, required)
       handleIdentifier(required, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'required' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: required}], required, required)
       handleIdentifier(required, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1795,24 +1795,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
       handleIdentifier(rethrow, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
       handleIdentifier(rethrow, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1822,24 +1822,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
       handleIdentifier(return, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
       handleIdentifier(return, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1849,24 +1849,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'set' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: set}], set, set)
       handleIdentifier(set, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'set' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: set}], set, set)
       handleIdentifier(set, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1876,23 +1876,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(show, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(show, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -1901,23 +1901,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(source, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(source, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -1926,24 +1926,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'static' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: static}], static, static)
       handleIdentifier(static, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'static' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: static}], static, static)
       handleIdentifier(static, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1953,24 +1953,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
       handleIdentifier(super, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
       handleIdentifier(super, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -1980,24 +1980,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
       handleIdentifier(switch, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
       handleIdentifier(switch, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -2007,23 +2007,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(sync, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(sync, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -2032,24 +2032,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
       handleIdentifier(this, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
       handleIdentifier(this, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -2059,24 +2059,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
       handleIdentifier(throw, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
       handleIdentifier(throw, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -2086,24 +2086,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
       handleIdentifier(true, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
       handleIdentifier(true, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -2113,24 +2113,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
       handleIdentifier(try, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
       handleIdentifier(try, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -2140,24 +2140,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'typedef' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: typedef}], typedef, typedef)
       handleIdentifier(typedef, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'typedef' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: typedef}], typedef, typedef)
       handleIdentifier(typedef, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -2167,24 +2167,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
       handleIdentifier(var, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
       handleIdentifier(var, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -2194,24 +2194,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
       handleIdentifier(void, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., Try inserting an identifier before '='., {lexeme: =}], =, =)
       handleIdentifier(, typedefDeclaration)
@@ -2220,7 +2220,7 @@
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
       handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(=)
   beginMetadataStar(=)
   endMetadataStar(0)
@@ -2245,19 +2245,19 @@
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
       handleIdentifier(while, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
       handleIdentifier(while, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -2267,24 +2267,24 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
       handleIdentifier(with, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
       handleIdentifier(with, typedefDeclaration)
       handleNoTypeVariables(=)
@@ -2294,23 +2294,23 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleVoidKeyword(void)
       handleIdentifier(yield, typedefDeclaration)
       handleNoTypeVariables(()
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-    endFunctionTypeAlias(typedef, null, ;)
+    endTypedef(typedef, null, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(yield, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -2319,6 +2319,6 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration()
 endCompilationUnit(140, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
index 45f76b0..77d7a90 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
@@ -22,7 +22,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -32,7 +32,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'abstract' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: abstract}], abstract, abstract)
@@ -47,7 +47,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -57,7 +57,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
@@ -69,7 +69,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -79,7 +79,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'as' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: as}], as, as)
@@ -94,7 +94,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -104,7 +104,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
@@ -116,7 +116,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -126,7 +126,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
@@ -141,7 +141,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -151,7 +151,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(async, typedefDeclaration)
@@ -161,7 +161,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -171,7 +171,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(async, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -184,7 +184,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -194,7 +194,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(await, typedefDeclaration)
@@ -204,7 +204,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -214,7 +214,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(await, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -227,7 +227,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -237,7 +237,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
@@ -249,7 +249,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -259,7 +259,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
@@ -274,7 +274,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -284,7 +284,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
@@ -296,7 +296,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -306,7 +306,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
@@ -321,7 +321,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -331,7 +331,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
@@ -343,7 +343,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -353,7 +353,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
@@ -368,7 +368,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -378,7 +378,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
@@ -390,7 +390,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -400,7 +400,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
@@ -415,7 +415,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -425,7 +425,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
@@ -437,7 +437,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -447,7 +447,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
@@ -462,7 +462,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -472,7 +472,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
@@ -484,7 +484,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -494,7 +494,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
@@ -509,7 +509,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -519,7 +519,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
@@ -531,7 +531,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -541,7 +541,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'covariant' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: covariant}], covariant, covariant)
@@ -556,7 +556,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -566,7 +566,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
@@ -578,7 +578,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -588,7 +588,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
@@ -603,7 +603,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -613,7 +613,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
@@ -625,7 +625,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -635,7 +635,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'deferred' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: deferred}], deferred, deferred)
@@ -650,7 +650,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -660,7 +660,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
@@ -672,7 +672,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -682,7 +682,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
@@ -697,7 +697,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -707,7 +707,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
@@ -719,7 +719,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -729,7 +729,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'dynamic' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: dynamic}], dynamic, dynamic)
@@ -744,7 +744,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -754,7 +754,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
@@ -766,7 +766,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -776,7 +776,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
@@ -791,7 +791,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -801,7 +801,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
@@ -813,7 +813,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -823,7 +823,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
@@ -838,7 +838,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -848,7 +848,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
@@ -860,7 +860,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -870,7 +870,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'export' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: export}], export, export)
@@ -885,7 +885,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -895,7 +895,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
@@ -907,7 +907,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -917,7 +917,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
@@ -932,7 +932,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -942,7 +942,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
@@ -954,7 +954,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -964,7 +964,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extension' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extension}], extension, extension)
@@ -979,7 +979,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -989,7 +989,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
@@ -1001,7 +1001,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1011,7 +1011,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'external' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: external}], external, external)
@@ -1026,7 +1026,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1036,7 +1036,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
@@ -1048,7 +1048,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1058,7 +1058,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'factory' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: factory}], factory, factory)
@@ -1073,7 +1073,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1083,7 +1083,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
@@ -1095,7 +1095,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1105,7 +1105,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
@@ -1120,7 +1120,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1130,7 +1130,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
@@ -1142,7 +1142,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1152,7 +1152,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
@@ -1167,7 +1167,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1177,7 +1177,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
@@ -1189,7 +1189,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1199,7 +1199,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
@@ -1214,7 +1214,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1224,7 +1224,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
@@ -1236,7 +1236,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1246,7 +1246,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
@@ -1261,7 +1261,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1271,7 +1271,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(Function, Instance of 'Template<(Token) => Message>')
@@ -1283,7 +1283,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1293,7 +1293,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(Function, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'Function' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: Function}], Function, Function)
@@ -1308,7 +1308,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1318,7 +1318,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
@@ -1330,7 +1330,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1340,7 +1340,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'get' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: get}], get, get)
@@ -1355,7 +1355,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1365,7 +1365,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(hide, typedefDeclaration)
@@ -1375,7 +1375,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1385,7 +1385,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(hide, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1398,7 +1398,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1408,7 +1408,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
@@ -1420,7 +1420,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1430,7 +1430,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
@@ -1445,7 +1445,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1455,7 +1455,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
@@ -1467,7 +1467,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1477,7 +1477,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'implements' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: implements}], implements, implements)
@@ -1492,7 +1492,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1502,7 +1502,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
@@ -1514,7 +1514,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1524,7 +1524,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'import' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: import}], import, import)
@@ -1539,7 +1539,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1549,7 +1549,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
@@ -1561,7 +1561,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1571,7 +1571,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
@@ -1586,7 +1586,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1596,7 +1596,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(inout, typedefDeclaration)
@@ -1606,7 +1606,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1616,7 +1616,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(inout, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1629,7 +1629,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1639,7 +1639,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
@@ -1651,7 +1651,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1661,7 +1661,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'interface' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: interface}], interface, interface)
@@ -1676,7 +1676,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1686,7 +1686,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
@@ -1698,7 +1698,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1708,7 +1708,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
@@ -1723,7 +1723,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1733,7 +1733,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
@@ -1745,7 +1745,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1755,7 +1755,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'late' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: late}], late, late)
@@ -1770,7 +1770,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1780,7 +1780,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
@@ -1792,7 +1792,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1802,7 +1802,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'library' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: library}], library, library)
@@ -1817,7 +1817,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1827,7 +1827,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
@@ -1839,7 +1839,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1849,7 +1849,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'mixin' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: mixin}], mixin, mixin)
@@ -1864,7 +1864,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1874,7 +1874,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(native, typedefDeclaration)
@@ -1884,7 +1884,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1894,7 +1894,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(native, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1907,7 +1907,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1917,7 +1917,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
@@ -1929,7 +1929,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1939,7 +1939,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
@@ -1954,7 +1954,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1964,7 +1964,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
@@ -1976,7 +1976,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1986,7 +1986,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
@@ -2001,7 +2001,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2011,7 +2011,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(of, typedefDeclaration)
@@ -2021,7 +2021,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2031,7 +2031,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(of, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -2044,7 +2044,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2054,7 +2054,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(on, typedefDeclaration)
@@ -2064,7 +2064,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2074,7 +2074,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(on, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -2087,7 +2087,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2097,7 +2097,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
@@ -2109,7 +2109,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2119,7 +2119,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'operator' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: operator}], operator, operator)
@@ -2134,7 +2134,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2144,7 +2144,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(out, typedefDeclaration)
@@ -2154,7 +2154,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2164,7 +2164,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(out, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -2177,7 +2177,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2187,7 +2187,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
@@ -2199,7 +2199,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2209,7 +2209,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'part' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: part}], part, part)
@@ -2224,7 +2224,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2234,7 +2234,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(patch, typedefDeclaration)
@@ -2244,7 +2244,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2254,7 +2254,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(patch, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -2267,7 +2267,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2277,7 +2277,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
@@ -2289,7 +2289,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2299,7 +2299,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'required' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: required}], required, required)
@@ -2314,7 +2314,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2324,7 +2324,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
@@ -2336,7 +2336,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2346,7 +2346,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
@@ -2361,7 +2361,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2371,7 +2371,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
@@ -2383,7 +2383,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2393,7 +2393,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
@@ -2408,7 +2408,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2418,7 +2418,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
@@ -2430,7 +2430,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2440,7 +2440,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'set' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: set}], set, set)
@@ -2455,7 +2455,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2465,7 +2465,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(show, typedefDeclaration)
@@ -2475,7 +2475,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2485,7 +2485,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(show, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -2498,7 +2498,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2508,7 +2508,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(source, typedefDeclaration)
@@ -2518,7 +2518,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2528,7 +2528,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(source, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -2541,7 +2541,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2551,7 +2551,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
@@ -2563,7 +2563,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2573,7 +2573,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'static' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: static}], static, static)
@@ -2588,7 +2588,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2598,7 +2598,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
@@ -2610,7 +2610,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2620,7 +2620,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
@@ -2635,7 +2635,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2645,7 +2645,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
@@ -2657,7 +2657,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2667,7 +2667,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
@@ -2682,7 +2682,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2692,7 +2692,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(sync, typedefDeclaration)
@@ -2702,7 +2702,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2712,7 +2712,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(sync, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -2725,7 +2725,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2735,7 +2735,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
@@ -2747,7 +2747,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2757,7 +2757,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
@@ -2772,7 +2772,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2782,7 +2782,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
@@ -2794,7 +2794,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2804,7 +2804,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
@@ -2819,7 +2819,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2829,7 +2829,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
@@ -2841,7 +2841,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2851,7 +2851,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
@@ -2866,7 +2866,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2876,7 +2876,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
@@ -2888,7 +2888,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2898,7 +2898,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
@@ -2913,7 +2913,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2923,7 +2923,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
@@ -2935,7 +2935,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2945,7 +2945,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'typedef' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: typedef}], typedef, typedef)
@@ -2960,7 +2960,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2970,7 +2970,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
@@ -2982,7 +2982,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -2992,7 +2992,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
@@ -3007,7 +3007,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -3017,7 +3017,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
@@ -3029,7 +3029,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -3039,7 +3039,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, false)
           insertSyntheticIdentifier(void, typedefDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got '='., Try inserting an identifier before '='., {lexeme: =}], messageOnToken: null)
@@ -3060,7 +3060,7 @@
           reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
             listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
           rewriter()
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(=)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -3107,7 +3107,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
@@ -3119,7 +3119,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -3129,7 +3129,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
@@ -3144,7 +3144,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -3154,7 +3154,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
@@ -3166,7 +3166,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -3176,7 +3176,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
@@ -3191,7 +3191,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -3201,7 +3201,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, typedefDeclaration, true)
           listener: handleIdentifier(yield, typedefDeclaration)
@@ -3211,7 +3211,7 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, null, ;)
+        listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -3221,7 +3221,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(yield, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -3234,7 +3234,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(typedef)
   listener: endCompilationUnit(140, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
index 486a686..b1c728f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
@@ -27,7 +27,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -36,11 +36,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, with)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, with)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(with)
             handleType(int, null)
@@ -58,7 +58,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(with)
             handleType(int, null)
@@ -72,7 +72,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, with)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, with)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -89,7 +89,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, with)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, with)
             handleVoidKeyword(void)
             handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
             handleIdentifier(with, methodDeclaration)
@@ -111,7 +111,7 @@
             endBlockFunctionBody(0, {, })
           endClassMethod(set, void, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(int)
   beginMetadataStar(int)
@@ -134,7 +134,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(with)
       handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
index 2b0370c..f836250 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -35,7 +35,7 @@
               isReservedKeyword(with)
               indicatesMethodOrField(()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, with, DeclarationKind.Class, C, true)
-                listener: beginMethod(null, null, null, null, null, with)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, with)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -79,7 +79,7 @@
               isReservedKeyword(with)
               indicatesMethodOrField(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, C, true)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -107,7 +107,7 @@
               isReservedKeyword(with)
               indicatesMethodOrField(=>)
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, with, DeclarationKind.Class, C, true)
-                listener: beginMethod(null, null, null, null, get, with)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, with)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -148,7 +148,7 @@
               isReservedKeyword(with)
               indicatesMethodOrField(()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', set, with, DeclarationKind.Class, C, true)
-                listener: beginMethod(null, null, null, null, set, with)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, with)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, true)
                   reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
@@ -187,7 +187,7 @@
                 listener: endClassMethod(set, void, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(int)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -239,7 +239,7 @@
       isReservedKeyword(with)
       indicatesMethodOrField(=)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(with)
         listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
index 305c185..db4e1b4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, With)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, With)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(With)
             handleType(int, null)
@@ -31,7 +31,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(With)
             handleType(int, null)
@@ -44,7 +44,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, With)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, With)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -60,7 +60,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, With)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, With)
             handleVoidKeyword(void)
             handleIdentifier(With, methodDeclaration)
             handleNoTypeVariables(()
@@ -81,7 +81,7 @@
             endBlockFunctionBody(0, {, })
           endClassMethod(set, void, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(int)
   beginMetadataStar(int)
@@ -103,7 +103,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(With)
       handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
index d3b26af..e702d5a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, With, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, With)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, With)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(With)
                 listener: handleType(int, null)
@@ -73,7 +73,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', With, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(With)
                 listener: handleType(int, null)
@@ -97,7 +97,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, With, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, get, With)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, With)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -134,7 +134,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', set, With, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, set, With)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, With)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(With, methodDeclaration)
@@ -171,7 +171,7 @@
                 listener: endClassMethod(set, void, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 4, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(int)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -217,7 +217,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', With, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(With)
         listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
index 83a76f8..b16f9b0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
@@ -23,7 +23,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, B)
@@ -32,14 +32,14 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(foo)
   beginMetadataStar(foo)
   endMetadataStar(0)
   beginTopLevelMember(foo)
-    beginFields(})
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, })
       handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
       handleNoType(})
       handleIdentifier(foo, topLevelVariableDeclaration)
@@ -49,7 +49,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(M1, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, M1)
@@ -58,11 +58,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
             handleNoType({)
             handleIdentifier(foo, fieldDeclaration)
@@ -76,7 +76,7 @@
           handleRecoverableError(ClassInClass, class, class)
           handleInvalidMember(class)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
index 1696c43..56c4e3a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,9 +25,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(B, DeclarationKind.Class, B)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(foo)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -39,7 +39,7 @@
       isReservedKeyword(class)
       indicatesMethodOrField(M1)
       parseFields(}, null, null, null, null, null, null, }, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(})
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, })
         reportRecoverableError(foo, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
         listener: handleNoType(})
@@ -60,7 +60,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(M1, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -76,7 +76,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(M1, DeclarationKind.Class, M1)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, foo)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, M1)
               parseMetadataStar({)
@@ -86,7 +86,7 @@
               isReservedKeyword(class)
               indicatesMethodOrField(M2)
               parseFields({, null, null, null, null, null, null, {, Instance of 'NoType', foo, DeclarationKind.Class, M1, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 reportRecoverableError(foo, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
                 listener: handleNoType({)
@@ -113,7 +113,7 @@
                   listener: handleInvalidMember(class)
                   listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect
index 4e6493f..3f3e286 100644
--- a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect
Binary files differ
diff --git a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect
index 00a2c8c..c6b78bca 100644
--- a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect
@@ -29,7 +29,7 @@
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(C)
       parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(/)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, /)
         listener: handleIdentifier(C, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(C, null)
@@ -50,7 +50,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(p)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(p, typeReference)
         listener: handleNoTypeArguments(y)
         listener: handleType(p, null)
@@ -71,7 +71,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(r, null)
@@ -92,7 +92,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(g)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(g, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(g, null)
@@ -205,7 +205,7 @@
     parseTopLevelMemberImpl(,)
       listener: beginTopLevelMember(t)
       parseFields(,, null, null, null, null, null, null, ,, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(,)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ,)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
@@ -226,7 +226,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', D, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(D)
         listener: handleType(e, null)
@@ -247,7 +247,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(a, null)
@@ -268,7 +268,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', p, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(p)
         listener: handleType(t, null)
@@ -289,7 +289,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(r, null)
@@ -310,7 +310,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(j)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(j, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(j, null)
@@ -331,7 +331,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(c)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(c, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(c, null)
@@ -352,7 +352,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(u)
         listener: handleType(a, null)
@@ -373,7 +373,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
@@ -394,7 +394,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(o, null)
@@ -415,7 +415,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'PrefixedType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, prefixedTypeReference)
         listener: handleIdentifier(P, typeReferenceContinuation)
         listener: handleQualified(.)
@@ -438,7 +438,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(e, null)
@@ -459,7 +459,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(s, null)
@@ -480,7 +480,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(s, null)
@@ -501,7 +501,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(e, null)
@@ -522,7 +522,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(h)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(h, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(h, null)
@@ -543,7 +543,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(A)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', U, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(A, typeReference)
         listener: handleNoTypeArguments(U)
         listener: handleType(A, null)
@@ -564,7 +564,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(T)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', H, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(T, typeReference)
         listener: handleNoTypeArguments(H)
         listener: handleType(T, null)
@@ -585,7 +585,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(O)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', R, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(O, typeReference)
         listener: handleNoTypeArguments(R)
         listener: handleType(O, null)
@@ -606,7 +606,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(S)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', f, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(S, typeReference)
         listener: handleNoTypeArguments(f)
         listener: handleType(S, null)
@@ -627,7 +627,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(i, null)
@@ -649,7 +649,7 @@
       listener: beginTopLevelMember(e)
       isReservedKeyword(/)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         reportRecoverableError(e, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, e, e)
         listener: handleNoType(;)
@@ -690,7 +690,7 @@
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(f)
       parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(/)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, /)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(f, null)
@@ -711,7 +711,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(r, null)
@@ -732,7 +732,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(e, null)
@@ -753,7 +753,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(a, null)
@@ -820,7 +820,7 @@
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(A)
       parseFields(., null, null, null, null, null, null, ., Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(.)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
         listener: handleIdentifier(A, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(A, null)
@@ -841,7 +841,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(l)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(l, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(l, null)
@@ -862,7 +862,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', g, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(g)
         listener: handleType(i, null)
@@ -883,7 +883,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(h)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(h, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(h, null)
@@ -904,7 +904,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(s, null)
@@ -925,7 +925,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(e, null)
@@ -946,7 +946,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(e, null)
@@ -967,7 +967,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(v)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(v, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(v, null)
@@ -988,7 +988,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(d)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'PrefixedType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(d, prefixedTypeReference)
         listener: handleIdentifier(U, typeReferenceContinuation)
         listener: handleQualified(.)
@@ -1011,7 +1011,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(e, null)
@@ -1032,7 +1032,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(f)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(f, null)
@@ -1053,7 +1053,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(h)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(h, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(h, null)
@@ -1074,7 +1074,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(s, null)
@@ -1095,7 +1095,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(u)
         listener: handleType(o, null)
@@ -1116,7 +1116,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(c)
         listener: handleType(r, null)
@@ -1137,7 +1137,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(c)
         listener: handleType(e, null)
@@ -1158,7 +1158,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(o, null)
@@ -1179,7 +1179,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(e, null)
@@ -1200,7 +1200,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', g, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(g)
         listener: handleType(s, null)
@@ -1221,7 +1221,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', v, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(v)
         listener: handleType(o, null)
@@ -1242,7 +1242,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(e, null)
@@ -1263,7 +1263,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(n)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(n, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(n, null)
@@ -1284,7 +1284,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(d)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', b, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(d, typeReference)
         listener: handleNoTypeArguments(b)
         listener: handleType(d, null)
@@ -1305,7 +1305,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(y)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(y, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(y, null)
@@ -1346,7 +1346,7 @@
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(B)
       parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', S, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(/)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, /)
         listener: handleIdentifier(B, typeReference)
         listener: handleNoTypeArguments(S)
         listener: handleType(B, null)
@@ -1368,7 +1368,7 @@
       listener: beginTopLevelMember(D)
       isReservedKeyword(-)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', D, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         reportRecoverableError(D, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, D, D)
         listener: handleNoType(;)
@@ -1399,7 +1399,7 @@
     parseTopLevelMemberImpl(-)
       listener: beginTopLevelMember(s)
       parseFields(-, null, null, null, null, null, null, -, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(-)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, -)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(s, null)
@@ -1420,7 +1420,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(y)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(y, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(y, null)
@@ -1441,7 +1441,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(e, null)
@@ -1462,7 +1462,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(c)
         listener: handleType(i, null)
@@ -1483,7 +1483,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', n, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(n)
         listener: handleType(e, null)
@@ -1504,7 +1504,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(s, null)
@@ -1525,7 +1525,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
@@ -1546,7 +1546,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(a, null)
@@ -1567,7 +1567,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(c)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(c, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(c, null)
@@ -1588,7 +1588,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(n)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', b, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(n, typeReference)
         listener: handleNoTypeArguments(b)
         listener: handleType(n, null)
@@ -1609,7 +1609,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', f, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(f)
         listener: handleType(e, null)
@@ -1630,7 +1630,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(u)
         listener: handleType(o, null)
@@ -1651,7 +1651,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(n)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(n, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(n, null)
@@ -1672,7 +1672,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', n, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(n)
         listener: handleType(i, null)
@@ -1693,7 +1693,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
@@ -1714,7 +1714,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', L, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(L)
         listener: handleType(e, null)
@@ -1735,7 +1735,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(I)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', C, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(I, typeReference)
         listener: handleNoTypeArguments(C)
         listener: handleType(I, null)
@@ -1756,7 +1756,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(E)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', N, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(E, typeReference)
         listener: handleNoTypeArguments(N)
         listener: handleType(E, null)
@@ -1823,7 +1823,7 @@
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(m)
       parseFields(., null, null, null, null, null, null, ., Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(.)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
         listener: handleIdentifier(m, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(m, null)
@@ -1844,7 +1844,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(f)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(f, null)
@@ -1931,7 +1931,7 @@
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(T)
       parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(/)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, /)
         listener: handleIdentifier(T, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(T, null)
@@ -1952,7 +1952,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(i, null)
@@ -1973,7 +1973,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(f)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(f, null)
@@ -1994,7 +1994,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(l)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(l, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(l, null)
@@ -2015,7 +2015,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(i, null)
@@ -2036,7 +2036,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(s, null)
@@ -2057,7 +2057,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(v)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(v, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(v, null)
@@ -2078,7 +2078,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(d)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(d, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(d, null)
@@ -2099,7 +2099,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', U, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(U)
         listener: handleType(s, null)
@@ -2120,7 +2120,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(T)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', F, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(T, typeReference)
         listener: handleNoTypeArguments(F)
         listener: handleType(T, null)
@@ -2217,7 +2217,7 @@
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(m)
       parseFields(., null, null, null, null, null, null, ., Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(.)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
         listener: handleIdentifier(m, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(m, null)
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
index 96b6956..f259fc6 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -10,8 +10,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(extension)
   beginMetadataStar(extension)
@@ -23,11 +23,11 @@
       handleNoTypeArguments({)
       handleType(A, null)
       handleExtensionShowHide(null, 0, null, 0)
-      beginClassOrMixinBody(DeclarationKind.Extension, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
         beginMetadataStar(method)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, method)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, method)
             handleNoType({)
             handleIdentifier(method, methodDeclaration)
             handleNoTypeVariables(()
@@ -39,7 +39,7 @@
             endBlockFunctionBody(0, {, })
           endExtensionMethod(null, method, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, null, on, null, null, })
   endTopLevelDeclaration(test)
   beginMetadataStar(test)
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
index c5f52cb..b13d6fc 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,9 +25,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(extension)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -45,7 +45,7 @@
         listener: handleType(A, null)
         listener: handleExtensionShowHide(null, 0, null, 0)
         parseClassOrMixinOrExtensionBody(A, DeclarationKind.Extension, type)
-          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
           notEofOrValue(}, method)
           parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Extension, type)
             parseMetadataStar({)
@@ -54,7 +54,7 @@
             listener: beginMember()
             isReservedKeyword(()
             parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, method, DeclarationKind.Extension, type, false)
-              listener: beginMethod(null, null, null, null, null, method)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, method)
               listener: handleNoType({)
               ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                 listener: handleIdentifier(method, methodDeclaration)
@@ -79,7 +79,7 @@
               listener: endExtensionMethod(null, method, (, null, })
             listener: endMember()
           notEofOrValue(}, })
-          listener: endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
         listener: endExtensionDeclaration(extension, null, on, null, null, })
   listener: endTopLevelDeclaration(test)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
diff --git a/pkg/front_end/parser_testcases/extension_type.dart.expect b/pkg/front_end/parser_testcases/extension_type.dart.expect
index 1efa3c2..34b0e66 100644
--- a/pkg/front_end/parser_testcases/extension_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_type.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -10,8 +10,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(extension)
   beginMetadataStar(extension)
@@ -23,8 +23,8 @@
       handleNoTypeArguments({)
       handleType(A, null)
       handleExtensionShowHide(null, 0, null, 0)
-      beginClassOrMixinBody(DeclarationKind.Extension, {)
-      endClassOrMixinBody(DeclarationKind.Extension, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 0, {, })
     endExtensionDeclaration(extension, type, on, null, null, })
   endTopLevelDeclaration()
 endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
index 2272376..eb48c9c 100644
--- a/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,9 +25,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(extension)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -45,9 +45,9 @@
         listener: handleType(A, null)
         listener: handleExtensionShowHide(null, 0, null, 0)
         parseClassOrMixinOrExtensionBody(A, DeclarationKind.Extension, E)
-          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
           notEofOrValue(}, })
-          listener: endClassOrMixinBody(DeclarationKind.Extension, 0, {, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 0, {, })
         listener: endExtensionDeclaration(extension, type, on, null, null, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
index f6e44b8..8f6d478 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
@@ -7,7 +7,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -16,13 +16,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
     beginClassDeclaration(class, null, C)
@@ -33,8 +33,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(extension)
   beginMetadataStar(extension)
@@ -46,11 +46,11 @@
       handleNoTypeArguments({)
       handleType(C, null)
       handleExtensionShowHide(null, 0, null, 0)
-      beginClassOrMixinBody(DeclarationKind.Extension, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
         beginMetadataStar(addChild)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, addChild)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, addChild)
             handleNoType({)
             handleIdentifier(addChild, methodDeclaration)
             handleNoTypeVariables(()
@@ -72,7 +72,7 @@
             endBlockFunctionBody(0, {, })
           endExtensionMethod(null, addChild, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, null, on, null, null, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
index f04b161..af843af 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,9 +25,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -37,7 +37,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
@@ -56,9 +56,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(extension)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -76,7 +76,7 @@
         listener: handleType(C, null)
         listener: handleExtensionShowHide(null, 0, null, 0)
         parseClassOrMixinOrExtensionBody(C, DeclarationKind.Extension, null)
-          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
           notEofOrValue(}, addChild)
           parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Extension, null)
             parseMetadataStar({)
@@ -85,7 +85,7 @@
             listener: beginMember()
             isReservedKeyword(()
             parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
-              listener: beginMethod(null, null, null, null, null, addChild)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, addChild)
               listener: handleNoType({)
               ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                 listener: handleIdentifier(addChild, methodDeclaration)
@@ -124,7 +124,7 @@
               listener: endExtensionMethod(null, addChild, (, null, })
             listener: endMember()
           notEofOrValue(}, })
-          listener: endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
         listener: endExtensionDeclaration(extension, null, on, null, null, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
index 23440f4..e551ab3 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -10,13 +10,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
     beginClassDeclaration(class, null, C)
@@ -27,8 +27,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(extension)
   beginMetadataStar(extension)
@@ -40,11 +40,11 @@
       handleNoTypeArguments({)
       handleType(C, null)
       handleExtensionShowHide(null, 0, null, 0)
-      beginClassOrMixinBody(DeclarationKind.Extension, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
         beginMetadataStar(addChild)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, addChild)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, addChild)
             handleNoType({)
             handleIdentifier(addChild, methodDeclaration)
             handleNoTypeVariables(()
@@ -65,7 +65,7 @@
             endBlockFunctionBody(0, {, })
           endExtensionMethod(null, addChild, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, null, on, null, null, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
index 8735e12..fbe25b2 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,9 +25,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -37,7 +37,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
@@ -56,9 +56,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(extension)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -76,7 +76,7 @@
         listener: handleType(C, null)
         listener: handleExtensionShowHide(null, 0, null, 0)
         parseClassOrMixinOrExtensionBody(C, DeclarationKind.Extension, null)
-          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
           notEofOrValue(}, addChild)
           parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Extension, null)
             parseMetadataStar({)
@@ -85,7 +85,7 @@
             listener: beginMember()
             isReservedKeyword(()
             parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
-              listener: beginMethod(null, null, null, null, null, addChild)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, addChild)
               listener: handleNoType({)
               ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                 listener: handleIdentifier(addChild, methodDeclaration)
@@ -122,7 +122,7 @@
               listener: endExtensionMethod(null, addChild, (, null, })
             listener: endMember()
           notEofOrValue(}, })
-          listener: endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
         listener: endExtensionDeclaration(extension, null, on, null, null, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.expect b/pkg/front_end/parser_testcases/extensions/static.dart.expect
index 5147f20..10fc0d8 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -10,13 +10,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
     beginClassDeclaration(class, null, C)
@@ -27,8 +27,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(extension)
   beginMetadataStar(extension)
@@ -40,11 +40,11 @@
       handleNoTypeArguments({)
       handleType(C, null)
       handleExtensionShowHide(null, 0, null, 0)
-      beginClassOrMixinBody(DeclarationKind.Extension, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, static, null, null, null, addChild)
+          beginMethod(DeclarationKind.Extension, null, static, null, null, null, addChild)
             handleNoType(static)
             handleIdentifier(addChild, methodDeclaration)
             handleNoTypeVariables(()
@@ -65,7 +65,7 @@
             endBlockFunctionBody(0, {, })
           endExtensionMethod(null, static, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, null, on, null, null, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
index 560c41b..815a5a1 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,9 +25,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -37,7 +37,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
@@ -56,9 +56,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(extension)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -76,7 +76,7 @@
         listener: handleType(C, null)
         listener: handleExtensionShowHide(null, 0, null, 0)
         parseClassOrMixinOrExtensionBody(C, DeclarationKind.Extension, null)
-          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
           notEofOrValue(}, static)
           parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Extension, null)
             parseMetadataStar({)
@@ -85,7 +85,7 @@
             listener: beginMember()
             isReservedKeyword(()
             parseMethod({, null, null, static, null, null, null, static, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
-              listener: beginMethod(null, static, null, null, null, addChild)
+              listener: beginMethod(DeclarationKind.Extension, null, static, null, null, null, addChild)
               listener: handleNoType(static)
               ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
                 listener: handleIdentifier(addChild, methodDeclaration)
@@ -121,7 +121,7 @@
               listener: endExtensionMethod(null, static, (, null, })
             listener: endMember()
           notEofOrValue(}, })
-          listener: endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
         listener: endExtensionDeclaration(extension, null, on, null, null, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
index b4a4c33..b0745de 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
@@ -7,7 +7,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -16,13 +16,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
     beginClassDeclaration(class, null, C)
@@ -33,8 +33,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(extension)
   beginMetadataStar(extension)
@@ -46,11 +46,11 @@
       handleNoTypeArguments({)
       handleType(C, null)
       handleExtensionShowHide(null, 0, null, 0)
-      beginClassOrMixinBody(DeclarationKind.Extension, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, static, null, null, null, addChild)
+          beginMethod(DeclarationKind.Extension, null, static, null, null, null, addChild)
             handleNoType(static)
             handleIdentifier(addChild, methodDeclaration)
             handleNoTypeVariables(()
@@ -72,7 +72,7 @@
             endBlockFunctionBody(0, {, })
           endExtensionMethod(null, static, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, null, on, null, null, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
index 3e0aba8..a0f640c 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,9 +25,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -37,7 +37,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
@@ -56,9 +56,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(extension)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -76,7 +76,7 @@
         listener: handleType(C, null)
         listener: handleExtensionShowHide(null, 0, null, 0)
         parseClassOrMixinOrExtensionBody(C, DeclarationKind.Extension, null)
-          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
           notEofOrValue(}, static)
           parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Extension, null)
             parseMetadataStar({)
@@ -85,7 +85,7 @@
             listener: beginMember()
             isReservedKeyword(()
             parseMethod({, null, null, static, null, null, null, static, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
-              listener: beginMethod(null, static, null, null, null, addChild)
+              listener: beginMethod(DeclarationKind.Extension, null, static, null, null, null, addChild)
               listener: handleNoType(static)
               ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
                 listener: handleIdentifier(addChild, methodDeclaration)
@@ -123,7 +123,7 @@
               listener: endExtensionMethod(null, static, (, null, })
             listener: endMember()
           notEofOrValue(}, })
-          listener: endClassOrMixinBody(DeclarationKind.Extension, 1, {, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
         listener: endExtensionDeclaration(extension, null, on, null, null, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect
index f96c13a..ad7134a 100644
--- a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect
@@ -57,7 +57,7 @@
   beginMetadataStar(y)
   endMetadataStar(0)
   beginTopLevelMember(y)
-    beginFields(.)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
       handleRecoverableError(MissingConstFinalVarOrType, y, y)
       handleNoType(.)
       handleIdentifier(y, topLevelVariableDeclaration)
@@ -90,7 +90,7 @@
   beginMetadataStar(z)
   endMetadataStar(0)
   beginTopLevelMember(z)
-    beginFields(.)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
       handleRecoverableError(MissingConstFinalVarOrType, z, z)
       handleNoType(.)
       handleIdentifier(z, topLevelVariableDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect
index b75dd9a..029957f 100644
--- a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect
@@ -55,7 +55,7 @@
       listener: beginTopLevelMember(y)
       isReservedKeyword(=)
       parseFields(., null, null, null, null, null, null, ., Instance of 'NoType', y, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(.)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
         reportRecoverableError(y, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, y, y)
         listener: handleNoType(.)
@@ -125,7 +125,7 @@
       listener: beginTopLevelMember(z)
       isReservedKeyword(=)
       parseFields(., null, null, null, null, null, null, ., Instance of 'NoType', z, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(.)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
         reportRecoverableError(z, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, z, z)
         listener: handleNoType(.)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
index 6dc22ff..eb5a5c5 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, WrapperClass)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(abstract)
             handleType(int, null)
@@ -27,7 +27,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(as)
             handleType(int, null)
@@ -40,7 +40,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(covariant)
             handleType(int, null)
@@ -53,7 +53,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(deferred)
             handleType(int, null)
@@ -66,7 +66,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(dynamic)
             handleType(int, null)
@@ -79,7 +79,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(export)
             handleType(int, null)
@@ -92,7 +92,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(external)
             handleType(int, null)
@@ -105,7 +105,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(factory)
             handleType(int, null)
@@ -118,7 +118,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Function)
             handleType(int, null)
@@ -131,7 +131,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -144,7 +144,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(implements)
             handleType(int, null)
@@ -157,7 +157,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(import)
             handleType(int, null)
@@ -170,7 +170,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(interface)
             handleType(int, null)
@@ -183,7 +183,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(library)
             handleType(int, null)
@@ -196,7 +196,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -209,7 +209,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(mixin)
             handleType(int, null)
@@ -222,7 +222,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(part)
             handleType(int, null)
@@ -235,7 +235,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(set)
             handleType(int, null)
@@ -248,7 +248,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(static)
             handleType(int, null)
@@ -261,7 +261,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(typedef)
             handleType(int, null)
@@ -271,7 +271,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, null, 1, int, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 20, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 20, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
index de178ad..1b1c156 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(WrapperClass, DeclarationKind.Class, WrapperClass)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, WrapperClass)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', abstract, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
@@ -57,7 +57,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
@@ -81,7 +81,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
@@ -105,7 +105,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
@@ -129,7 +129,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
@@ -153,7 +153,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
@@ -177,7 +177,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
@@ -201,7 +201,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
@@ -225,7 +225,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
@@ -250,7 +250,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -274,7 +274,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
@@ -298,7 +298,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
@@ -322,7 +322,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
@@ -346,7 +346,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
@@ -371,7 +371,7 @@
               listener: beginMember()
               isUnaryMinus(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -395,7 +395,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
@@ -419,7 +419,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
@@ -444,7 +444,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
@@ -468,7 +468,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
@@ -492,7 +492,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
@@ -510,7 +510,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 20, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 20, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
index 64f045a..d1604a9 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, WrapperClass)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, abstract)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, abstract)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(abstract)
             handleType(int, null)
@@ -69,7 +69,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, as)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, as)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(as)
             handleType(int, null)
@@ -124,7 +124,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, covariant)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, covariant)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(covariant)
             handleType(int, null)
@@ -179,7 +179,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, deferred)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, deferred)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(deferred)
             handleType(int, null)
@@ -234,7 +234,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, dynamic)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, dynamic)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(dynamic)
             handleType(int, null)
@@ -289,7 +289,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, export)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, export)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(export)
             handleType(int, null)
@@ -344,7 +344,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, external)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, external)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(external)
             handleType(int, null)
@@ -399,7 +399,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, factory)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, factory)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(factory)
             handleType(int, null)
@@ -454,7 +454,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Function)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Function)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Function)
             handleType(int, null)
@@ -509,7 +509,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, get)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -564,7 +564,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, implements)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, implements)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(implements)
             handleType(int, null)
@@ -619,7 +619,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, import)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, import)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(import)
             handleType(int, null)
@@ -674,7 +674,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, interface)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, interface)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(interface)
             handleType(int, null)
@@ -729,7 +729,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, library)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, library)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(library)
             handleType(int, null)
@@ -784,7 +784,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -839,7 +839,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, mixin)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, mixin)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(mixin)
             handleType(int, null)
@@ -894,7 +894,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, part)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, part)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(part)
             handleType(int, null)
@@ -949,7 +949,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, set)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(set)
             handleType(int, null)
@@ -1004,7 +1004,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, static)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, static)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(static)
             handleType(int, null)
@@ -1059,7 +1059,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, typedef)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, typedef)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(typedef)
             handleType(int, null)
@@ -1111,7 +1111,7 @@
             endBlockFunctionBody(2, {, })
           endClassMethod(null, int, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 20, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 20, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
index af42a23..04a06f3 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(WrapperClass, DeclarationKind.Class, WrapperClass)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, WrapperClass)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, abstract, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, abstract)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, abstract)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
@@ -170,7 +170,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, as, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, as)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, as)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
@@ -307,7 +307,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, covariant, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, covariant)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, covariant)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
@@ -444,7 +444,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, deferred, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, deferred)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, deferred)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
@@ -581,7 +581,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, dynamic, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, dynamic)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, dynamic)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
@@ -718,7 +718,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, export, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, export)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, export)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
@@ -855,7 +855,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, external, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, external)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, external)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
@@ -992,7 +992,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, factory, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, factory)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, factory)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
@@ -1129,7 +1129,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, Function, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, Function)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Function)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
@@ -1267,7 +1267,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, get, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, get)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -1404,7 +1404,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, implements, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, implements)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, implements)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
@@ -1541,7 +1541,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, import, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, import)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, import)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
@@ -1678,7 +1678,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, interface, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, interface)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, interface)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
@@ -1815,7 +1815,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, library, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, library)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, library)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
@@ -1954,7 +1954,7 @@
               isUnaryMinus(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, WrapperClass, false)
                 isUnaryMinus(()
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -2091,7 +2091,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, mixin, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, mixin)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, mixin)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
@@ -2228,7 +2228,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, part, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, part)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, part)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
@@ -2366,7 +2366,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, set, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, set)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
@@ -2503,7 +2503,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, static, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, static)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, static)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
@@ -2640,7 +2640,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, typedef, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(null, null, null, null, null, typedef)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, typedef)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
@@ -2771,7 +2771,7 @@
                 listener: endClassMethod(null, int, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 20, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 20, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect
index ede19ca..85e6adb 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(abstract)
       handleType(int, null)
@@ -15,7 +15,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(as)
       handleType(int, null)
@@ -28,7 +28,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(covariant)
       handleType(int, null)
@@ -41,7 +41,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(deferred)
       handleType(int, null)
@@ -54,7 +54,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(dynamic)
       handleType(int, null)
@@ -67,7 +67,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(export)
       handleType(int, null)
@@ -80,7 +80,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(external)
       handleType(int, null)
@@ -93,7 +93,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(factory)
       handleType(int, null)
@@ -106,7 +106,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(Function)
       handleType(int, null)
@@ -119,7 +119,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(get)
       handleType(int, null)
@@ -132,7 +132,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(implements)
       handleType(int, null)
@@ -145,7 +145,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(import)
       handleType(int, null)
@@ -158,7 +158,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(interface)
       handleType(int, null)
@@ -171,7 +171,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(library)
       handleType(int, null)
@@ -184,7 +184,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(operator)
       handleType(int, null)
@@ -197,7 +197,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(mixin)
       handleType(int, null)
@@ -210,7 +210,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(part)
       handleType(int, null)
@@ -223,7 +223,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(set)
       handleType(int, null)
@@ -236,7 +236,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(static)
       handleType(int, null)
@@ -249,7 +249,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(typedef)
       handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect
index 21b408a..8ecab82 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
       parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', abstract, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(abstract)
         listener: handleType(int, null)
@@ -33,7 +33,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(as)
         listener: handleType(int, null)
@@ -57,7 +57,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(covariant)
         listener: handleType(int, null)
@@ -81,7 +81,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(deferred)
         listener: handleType(int, null)
@@ -105,7 +105,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(dynamic)
         listener: handleType(int, null)
@@ -129,7 +129,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(export)
         listener: handleType(int, null)
@@ -153,7 +153,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(external)
         listener: handleType(int, null)
@@ -177,7 +177,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(factory)
         listener: handleType(int, null)
@@ -201,7 +201,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(Function)
         listener: handleType(int, null)
@@ -225,7 +225,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(int, null)
@@ -249,7 +249,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(implements)
         listener: handleType(int, null)
@@ -273,7 +273,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(import)
         listener: handleType(int, null)
@@ -297,7 +297,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(interface)
         listener: handleType(int, null)
@@ -321,7 +321,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(library)
         listener: handleType(int, null)
@@ -345,7 +345,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(operator)
         listener: handleType(int, null)
@@ -369,7 +369,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(mixin)
         listener: handleType(int, null)
@@ -393,7 +393,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(part)
         listener: handleType(int, null)
@@ -417,7 +417,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(set)
         listener: handleType(int, null)
@@ -441,7 +441,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(static)
         listener: handleType(int, null)
@@ -465,7 +465,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(typedef)
         listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
index eb3e565..8b8e356 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
@@ -84,7 +84,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
       handleNoType(var)
       handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -109,7 +109,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_closeBracket, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -134,7 +134,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_closeParen, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -162,7 +162,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_colon, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -189,7 +189,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_comma, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -215,7 +215,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_equals, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -241,7 +241,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_not_equals, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -267,7 +267,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_openParen, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -289,11 +289,11 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_period_methodInvocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
-        beginImplicitCreationExpression(=)
+        beginImplicitCreationExpression(f)
           handleIdentifier(f, constructorReference)
           beginConstructorReference(f)
             beginTypeArguments(<)
@@ -308,14 +308,14 @@
           endConstructorReference(f, ., (, ConstructorReferenceContext.Implicit)
           beginArguments(()
           endArguments(0, (, ))
-        endImplicitCreationExpression(=)
+        endImplicitCreationExpression(f, <)
       endFieldInitializer(=, ;)
     endTopLevelFields(null, null, null, null, var, 1, var, ;)
   endTopLevelDeclaration(var)
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_period_methodInvocation_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -348,7 +348,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_period_propertyAccess, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -376,7 +376,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_semicolon, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -399,7 +399,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_ampersand, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -441,7 +441,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_as, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -476,7 +476,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_asterisk, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -518,7 +518,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_bang_openBracket, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -556,7 +556,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_bang_paren, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -593,7 +593,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_bar, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -635,7 +635,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_caret, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -677,7 +677,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_is, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -719,7 +719,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_lessThan, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -749,7 +749,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_minus, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -785,7 +785,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_openBracket, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -822,7 +822,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_openBracket_error, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -866,7 +866,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_openBracket_unambiguous, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -907,7 +907,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_percent, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -949,7 +949,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_period_period, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -993,7 +993,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_plus, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1035,7 +1035,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1076,7 +1076,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_period_methodInvocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1118,7 +1118,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_period_methodInvocation_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1164,7 +1164,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_period_period, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1206,7 +1206,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_period_propertyAccess, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1247,7 +1247,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_question, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1289,7 +1289,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_slash, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1331,7 +1331,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_tilde_slash, topLevelVariableDeclaration)
       beginFieldInitializer(=)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
index ffafde7..11e6ef5 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(var)
       parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBrace, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
@@ -54,7 +54,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBracket, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_closeBracket, topLevelVariableDeclaration)
@@ -99,7 +99,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeParen, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_closeParen, topLevelVariableDeclaration)
@@ -154,7 +154,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_colon, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_colon, topLevelVariableDeclaration)
@@ -206,7 +206,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_comma, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_comma, topLevelVariableDeclaration)
@@ -257,7 +257,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_equals, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_equals, topLevelVariableDeclaration)
@@ -302,7 +302,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_not_equals, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_not_equals, topLevelVariableDeclaration)
@@ -347,7 +347,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_openParen, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_openParen, topLevelVariableDeclaration)
@@ -387,7 +387,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_methodInvocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_period_methodInvocation, topLevelVariableDeclaration)
@@ -396,8 +396,8 @@
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
               parseUnaryExpression(=, true)
-                parseImplicitCreationExpression(=, Instance of 'ComplexTypeParamOrArgInfo')
-                  listener: beginImplicitCreationExpression(=)
+                parseImplicitCreationExpression(=, <, Instance of 'ComplexTypeParamOrArgInfo')
+                  listener: beginImplicitCreationExpression(f)
                   parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'ComplexTypeParamOrArgInfo')
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(f, constructorReference)
@@ -418,7 +418,7 @@
                     parseArgumentsRest(()
                       listener: beginArguments(()
                       listener: endArguments(0, (, ))
-                  listener: endImplicitCreationExpression(=)
+                  listener: endImplicitCreationExpression(f, <)
           listener: endFieldInitializer(=, ;)
         listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
   listener: endTopLevelDeclaration(var)
@@ -429,7 +429,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_methodInvocation_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_period_methodInvocation_generic, topLevelVariableDeclaration)
@@ -486,7 +486,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_propertyAccess, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_period_propertyAccess, topLevelVariableDeclaration)
@@ -535,7 +535,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_semicolon, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_semicolon, topLevelVariableDeclaration)
@@ -573,7 +573,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_ampersand, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_ampersand, topLevelVariableDeclaration)
@@ -676,7 +676,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_as, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_as, topLevelVariableDeclaration)
@@ -765,7 +765,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_asterisk, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_asterisk, topLevelVariableDeclaration)
@@ -868,7 +868,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_bang_openBracket, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_bang_openBracket, topLevelVariableDeclaration)
@@ -965,7 +965,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_bang_paren, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_bang_paren, topLevelVariableDeclaration)
@@ -1065,7 +1065,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_bar, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_bar, topLevelVariableDeclaration)
@@ -1168,7 +1168,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_caret, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_caret, topLevelVariableDeclaration)
@@ -1271,7 +1271,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_is, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_is, topLevelVariableDeclaration)
@@ -1370,7 +1370,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_lessThan, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_lessThan, topLevelVariableDeclaration)
@@ -1434,7 +1434,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_minus, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_minus, topLevelVariableDeclaration)
@@ -1524,7 +1524,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_openBracket, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_openBracket, topLevelVariableDeclaration)
@@ -1618,7 +1618,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_openBracket_error, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_openBracket_error, topLevelVariableDeclaration)
@@ -1728,7 +1728,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_openBracket_unambiguous, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_openBracket_unambiguous, topLevelVariableDeclaration)
@@ -1835,7 +1835,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_percent, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_percent, topLevelVariableDeclaration)
@@ -1938,7 +1938,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_period_period, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_period_period, topLevelVariableDeclaration)
@@ -2043,7 +2043,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_plus, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_plus, topLevelVariableDeclaration)
@@ -2148,7 +2148,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question, topLevelVariableDeclaration)
@@ -2254,7 +2254,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_methodInvocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_period_methodInvocation, topLevelVariableDeclaration)
@@ -2358,7 +2358,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_methodInvocation_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_period_methodInvocation_generic, topLevelVariableDeclaration)
@@ -2466,7 +2466,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_period, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_period_period, topLevelVariableDeclaration)
@@ -2576,7 +2576,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_propertyAccess, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_period_propertyAccess, topLevelVariableDeclaration)
@@ -2676,7 +2676,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_question, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_question, topLevelVariableDeclaration)
@@ -2779,7 +2779,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_slash, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_slash, topLevelVariableDeclaration)
@@ -2882,7 +2882,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_tilde_slash, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_tilde_slash, topLevelVariableDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.expect b/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.expect
index c3fdd54..63ed9e6 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
       handleNoType(var)
       handleIdentifier(simpleIdentifier, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -25,7 +25,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(method, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -54,7 +54,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(prefixedIdentifier, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -82,7 +82,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(three_identifiers, topLevelVariableDeclaration)
       beginFieldInitializer(=)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.intertwined.expect
index 93e6d37..7e231fe 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(var)
       parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', simpleIdentifier, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(simpleIdentifier, topLevelVariableDeclaration)
@@ -47,7 +47,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', method, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(method, topLevelVariableDeclaration)
@@ -100,7 +100,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', prefixedIdentifier, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(prefixedIdentifier, topLevelVariableDeclaration)
@@ -149,7 +149,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', three_identifiers, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(three_identifiers, topLevelVariableDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect
index 7378081..3b9714d 100644
--- a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect
+++ b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(E1, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(T)
@@ -19,12 +19,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(E2, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(T)
@@ -43,12 +43,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(E3, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(T)
@@ -71,12 +71,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(E4, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(T)
@@ -103,12 +103,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(E5, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(T)
@@ -135,12 +135,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(E6, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(T)
@@ -167,12 +167,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F1, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -189,12 +189,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F2, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -213,12 +213,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F3, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -241,12 +241,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F4, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -273,12 +273,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F5, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -305,12 +305,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F6, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -337,12 +337,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(G1, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(X)
@@ -369,12 +369,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(G2, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(X)
@@ -403,12 +403,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(G3, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(X)
@@ -449,12 +449,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(G4, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(X)
@@ -499,12 +499,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(G5, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(X)
@@ -541,12 +541,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(G6, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(X)
@@ -583,12 +583,12 @@
         beginFormalParameters((, MemberKind.GeneralizedFunctionType)
         endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(H1, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -617,12 +617,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(H2, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -653,12 +653,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(H3, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -693,12 +693,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(H4, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -737,12 +737,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(H5, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -781,12 +781,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(H6, typedefDeclaration)
       handleNoTypeVariables(=)
       beginFunctionType(void)
@@ -825,12 +825,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(void)
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -852,7 +852,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -876,7 +876,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -904,7 +904,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -936,7 +936,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -968,7 +968,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
diff --git a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
index 916c8ba..1f25d5e 100644
--- a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E1, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -31,7 +31,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -41,7 +41,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E2, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -66,7 +66,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -76,7 +76,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E3, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -107,7 +107,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -117,7 +117,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E4, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -152,7 +152,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -162,7 +162,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E5, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -197,7 +197,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -207,7 +207,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(E6, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -242,7 +242,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -252,7 +252,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F1, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -273,7 +273,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -283,7 +283,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F2, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -308,7 +308,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -318,7 +318,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F3, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -349,7 +349,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -359,7 +359,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F4, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -394,7 +394,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -404,7 +404,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F5, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -439,7 +439,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -449,7 +449,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F6, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -484,7 +484,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -494,7 +494,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G1, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -527,7 +527,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -537,7 +537,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G2, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -574,7 +574,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -584,7 +584,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G3, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -637,7 +637,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -647,7 +647,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G4, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -704,7 +704,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -714,7 +714,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G5, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -761,7 +761,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -771,7 +771,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(G6, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -818,7 +818,7 @@
             listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -828,7 +828,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H1, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -865,7 +865,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -875,7 +875,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H2, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -916,7 +916,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -926,7 +926,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H3, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -973,7 +973,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -983,7 +983,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H4, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1034,7 +1034,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1044,7 +1044,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H5, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1095,7 +1095,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1105,7 +1105,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(H6, typedefDeclaration)
         listener: handleNoTypeVariables(=)
@@ -1156,7 +1156,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(void)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1165,7 +1165,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f1, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         listener: beginMetadataStar(T)
@@ -1195,7 +1195,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f2, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1229,7 +1229,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f3, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1269,7 +1269,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f4, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1313,7 +1313,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f5, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1357,7 +1357,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f6, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
diff --git a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
index 5d40379..494fec3 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
@@ -43,7 +43,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(ConfigurationService, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, ConfigurationService)
@@ -52,11 +52,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Configuration)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(Configuration, typeReference)
             handleNoTypeArguments(_configuration)
             handleType(Configuration, null)
@@ -67,7 +67,7 @@
         beginMetadataStar(ConfigurationService)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, ConfigurationService)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, ConfigurationService)
             handleNoType(;)
             handleIdentifier(ConfigurationService, methodDeclaration)
             handleNoTypeVariables(()
@@ -114,7 +114,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, set, configuration)
+          beginMethod(DeclarationKind.Class, null, null, null, null, set, configuration)
             handleVoidKeyword(void)
             handleIdentifier(configuration, methodDeclaration)
             handleNoTypeVariables(()
@@ -164,7 +164,7 @@
         beginMetadataStar(Configuration)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, configuration)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, configuration)
             handleIdentifier(Configuration, typeReference)
             handleNoTypeArguments(get)
             handleType(Configuration, null)
@@ -219,7 +219,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, method)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, method)
             handleVoidKeyword(void)
             handleIdentifier(method, methodDeclaration)
             handleNoTypeVariables(()
@@ -245,7 +245,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -267,12 +267,12 @@
             handleRecoverableError(ConstructorWithWrongName, Foo, Foo)
           endClassConstructor(null, Foo, (, :, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Configuration, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Configuration)
@@ -281,11 +281,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Configuration)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
             handleIdentifier(Configuration, typeReference)
             handleNoTypeArguments(get)
             handleType(Configuration, null)
@@ -298,7 +298,7 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(get, Configuration, =>, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
index 2b1efbc..cbffc96 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(ConfigurationService, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(ConfigurationService, DeclarationKind.Class, ConfigurationService)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Configuration)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, ConfigurationService)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', _configuration, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(Configuration, typeReference)
                 listener: handleNoTypeArguments(_configuration)
                 listener: handleType(Configuration, null)
@@ -51,7 +51,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, ConfigurationService, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(null, null, null, null, null, ConfigurationService)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, ConfigurationService)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(ConfigurationService, methodDeclaration)
@@ -152,7 +152,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', set, configuration, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(null, null, null, null, set, configuration)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, configuration)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(configuration, methodDeclaration)
@@ -259,7 +259,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, configuration, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(null, null, null, null, get, configuration)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, configuration)
                 listener: handleIdentifier(Configuration, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(Configuration, null)
@@ -391,7 +391,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, method, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(null, null, null, null, null, method)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, method)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(method, methodDeclaration)
@@ -452,7 +452,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -504,7 +504,7 @@
                 listener: endClassConstructor(null, Foo, (, :, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -514,7 +514,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Configuration, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -530,7 +530,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Configuration, DeclarationKind.Class, Configuration)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Configuration)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Configuration)
               parseMetadataStar({)
@@ -538,7 +538,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, foo, DeclarationKind.Class, Configuration, false)
-                listener: beginMethod(null, null, null, null, get, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
                 listener: handleIdentifier(Configuration, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(Configuration, null)
@@ -569,7 +569,7 @@
                 listener: endClassMethod(get, Configuration, =>, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
index 1effedc..dda69fa 100644
--- a/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
@@ -13,7 +13,7 @@
     endMetadata(@, null, typedef)
   endMetadataStar(1)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -82,7 +82,7 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(void)
   beginMetadataStar(void)
   endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
index 63f2c9a..412b5a6 100644
--- a/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
@@ -32,7 +32,7 @@
       parseTopLevelKeywordModifiers(), typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -145,7 +145,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(void)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.expect b/pkg/front_end/parser_testcases/general/metadata.dart.expect
index d342b49..eddf5e6 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.expect
@@ -104,7 +104,7 @@
       endArguments(1, (, ))
     endMetadata(@, ., class)
   endMetadataStar(10)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, X)
@@ -113,14 +113,14 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -171,12 +171,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -233,12 +233,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -298,12 +298,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -363,12 +363,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -434,12 +434,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -508,12 +508,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -585,12 +585,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -665,12 +665,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -748,12 +748,12 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(typedef)
   beginMetadataStar(typedef)
   endMetadataStar(0)
   beginUncategorizedTopLevelDeclaration(typedef)
-    beginFunctionTypeAlias(typedef)
+    beginTypedef(typedef)
       handleIdentifier(F, typedefDeclaration)
       beginTypeVariables(<)
         beginMetadataStar(@)
@@ -834,7 +834,7 @@
           endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
-    endFunctionTypeAlias(typedef, =, ;)
+    endTypedef(typedef, =, ;)
   endTopLevelDeclaration(@)
   beginMetadataStar(@)
     beginMetadata(@)
@@ -936,7 +936,7 @@
       endArguments(1, (, ))
     endMetadata(@, ., class)
   endMetadataStar(9)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Y)
@@ -945,8 +945,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(12, )
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
index 9a0530c..905a217 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
@@ -231,7 +231,7 @@
     parseTopLevelKeywordDeclaration(), class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(), class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -247,9 +247,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(X, DeclarationKind.Class, X)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -260,7 +260,7 @@
       parseTopLevelKeywordModifiers(}, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -337,7 +337,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -347,7 +347,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -436,7 +436,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -446,7 +446,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -541,7 +541,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -551,7 +551,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -658,7 +658,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -668,7 +668,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -790,7 +790,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -800,7 +800,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -928,7 +928,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -938,7 +938,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -1057,7 +1057,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1067,7 +1067,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -1195,7 +1195,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1205,7 +1205,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -1336,7 +1336,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(typedef)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1346,7 +1346,7 @@
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
-        listener: beginFunctionTypeAlias(typedef)
+        listener: beginTypedef(typedef)
         ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
           listener: handleIdentifier(F, typedefDeclaration)
         listener: beginTypeVariables(<)
@@ -1486,7 +1486,7 @@
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
-        listener: endFunctionTypeAlias(typedef, =, ;)
+        listener: endTypedef(typedef, =, ;)
   listener: endTopLevelDeclaration(@)
   parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
     parseMetadataStar(;)
@@ -1716,7 +1716,7 @@
     parseTopLevelKeywordDeclaration(), class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(), class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -1732,9 +1732,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Y, DeclarationKind.Class, Y)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(@)
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart b/pkg/front_end/parser_testcases/general/new_as_identifier.dart
index 32a868f..30b926d 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart
@@ -7,6 +7,7 @@
 //
 // Unless otherwise noted, these tests cases should not result in a parse error.
 
+/// See [C.new].
 class C {
   C.new();
 
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
index f914b42..97bcac4 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
@@ -1,49 +1,49 @@
 Problems reported:
 
-parser/general/new_as_identifier:15:44: Expected an identifier, but got 'new'.
+parser/general/new_as_identifier:16:44: Expected an identifier, but got 'new'.
   C.constructor_field_initializer() : this.new = null;
                                            ^^^
 
-parser/general/new_as_identifier:15:39: Expected an assignment after the field name.
+parser/general/new_as_identifier:16:39: Expected an assignment after the field name.
   C.constructor_field_initializer() : this.new = null;
                                       ^^^^
 
-parser/general/new_as_identifier:15:44: Expected a function body, but got 'new'.
+parser/general/new_as_identifier:16:44: Expected a function body, but got 'new'.
   C.constructor_field_initializer() : this.new = null;
                                            ^^^
 
-parser/general/new_as_identifier:15:44: Expected a class member, but got 'new'.
+parser/general/new_as_identifier:16:44: Expected a class member, but got 'new'.
   C.constructor_field_initializer() : this.new = null;
                                            ^^^
 
-parser/general/new_as_identifier:15:48: Operator declarations must be preceded by the keyword 'operator'.
+parser/general/new_as_identifier:16:48: Operator declarations must be preceded by the keyword 'operator'.
   C.constructor_field_initializer() : this.new = null;
                                                ^
 
-parser/general/new_as_identifier:15:48: The string '=' isn't a user-definable operator.
+parser/general/new_as_identifier:16:48: The string '=' isn't a user-definable operator.
   C.constructor_field_initializer() : this.new = null;
                                                ^
 
-parser/general/new_as_identifier:15:48: A method declaration needs an explicit list of parameters.
+parser/general/new_as_identifier:16:48: A method declaration needs an explicit list of parameters.
   C.constructor_field_initializer() : this.new = null;
                                                ^
 
-parser/general/new_as_identifier:15:50: Expected a function body, but got 'null'.
+parser/general/new_as_identifier:16:50: Expected a function body, but got 'null'.
   C.constructor_field_initializer() : this.new = null;
                                                  ^^^^
 
-parser/general/new_as_identifier:15:50: Expected a class member, but got 'null'.
+parser/general/new_as_identifier:16:50: Expected a class member, but got 'null'.
   C.constructor_field_initializer() : this.new = null;
                                                  ^^^^
 
-parser/general/new_as_identifier:15:54: Expected a class member, but got ';'.
+parser/general/new_as_identifier:16:54: Expected a class member, but got ';'.
   C.constructor_field_initializer() : this.new = null;
                                                      ^
 
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -52,11 +52,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNewAsIdentifier(new)
@@ -73,7 +73,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleIdentifier(constructor_field_initializer, methodDeclarationContinuation)
@@ -113,7 +113,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, =, =)
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleNoType(new)
             handleRecoverableError(Message[InvalidOperator, The string '=' isn't a user-definable operator., null, {lexeme: =}], =, =)
             handleInvalidOperatorName(operator, =)
@@ -139,12 +139,12 @@
           handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
           handleInvalidMember(;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(D, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, D)
@@ -153,11 +153,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod({, null, null)
+          beginFactoryMethod(DeclarationKind.Class, {, null, null)
             handleIdentifier(D, methodDeclaration)
             handleNewAsIdentifier(new)
             handleIdentifier(new, methodDeclarationContinuation)
@@ -177,7 +177,7 @@
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(;, null, null)
+          beginFactoryMethod(DeclarationKind.Class, ;, null, null)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(factory_redirection, methodDeclarationContinuation)
             handleQualified(.)
@@ -200,7 +200,7 @@
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(;, null, null)
+          beginFactoryMethod(DeclarationKind.Class, ;, null, null)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(factory_redirection_generic, methodDeclarationContinuation)
             handleQualified(.)
@@ -225,7 +225,7 @@
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(;, null, null)
+          beginFactoryMethod(DeclarationKind.Class, ;, null, null)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(factory_redirection_prefixed, methodDeclarationContinuation)
             handleQualified(.)
@@ -248,7 +248,7 @@
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(;, null, null)
+          beginFactoryMethod(DeclarationKind.Class, ;, null, null)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(factory_redirection_prefixed_generic, methodDeclarationContinuation)
             handleQualified(.)
@@ -275,7 +275,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, D)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
             handleNoType(;)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(super_invocation, methodDeclarationContinuation)
@@ -302,7 +302,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, D)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
             handleNoType(;)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(this_redirection, methodDeclarationContinuation)
@@ -326,13 +326,13 @@
             handleEmptyFunctionBody(;)
           endClassConstructor(null, D, (, :, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 7, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 7, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(var)
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(})
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, })
       handleNoType(var)
       handleIdentifier(constructor_invocation_const, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -354,7 +354,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_const_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -378,7 +378,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_const_prefixed, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -400,7 +400,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_const_prefixed_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -426,7 +426,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_explicit, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -448,7 +448,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_explicit_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -472,7 +472,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_explicit_prefixed, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -494,7 +494,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_explicit_prefixed_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -520,7 +520,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_implicit, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -541,11 +541,11 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_implicit_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
-        beginImplicitCreationExpression(=)
+        beginImplicitCreationExpression(C)
           handleIdentifier(C, constructorReference)
           beginConstructorReference(C)
             beginTypeArguments(<)
@@ -558,14 +558,14 @@
           endConstructorReference(C, ., (, ConstructorReferenceContext.Implicit)
           beginArguments(()
           endArguments(0, (, ))
-        endImplicitCreationExpression(=)
+        endImplicitCreationExpression(C, <)
       endFieldInitializer(=, ;)
     endTopLevelFields(null, null, null, null, var, 1, var, ;)
   endTopLevelDeclaration(var)
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_implicit_prefixed, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -591,11 +591,11 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_implicit_prefixed_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
-        beginImplicitCreationExpression(=)
+        beginImplicitCreationExpression(prefix)
           handleIdentifier(prefix, constructorReference)
           beginConstructorReference(prefix)
             handleIdentifier(C, constructorReferenceContinuation)
@@ -610,14 +610,14 @@
           endConstructorReference(prefix, ., (, ConstructorReferenceContext.Implicit)
           beginArguments(()
           endArguments(0, (, ))
-        endImplicitCreationExpression(=)
+        endImplicitCreationExpression(prefix, <)
       endFieldInitializer(=, ;)
     endTopLevelFields(null, null, null, null, var, 1, var, ;)
   endTopLevelDeclaration(var)
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -637,7 +637,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -663,7 +663,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_generic_method_invocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -695,7 +695,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_method_invocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -721,7 +721,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_prefixed, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -746,7 +746,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_prefixed_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -777,7 +777,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_prefixed_generic_method_invocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -814,7 +814,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_prefixed_method_invocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
index d88fc9d..7af61b0 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, C)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, C)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -70,7 +70,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, C)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -170,7 +170,7 @@
                     listener: handleRecoverableError(MissingOperatorKeyword, =, =)
                   rewriter()
                   parseMethod(new, null, null, null, null, null, null, new, Instance of 'NoType', null, operator, DeclarationKind.Class, C, false)
-                    listener: beginMethod(null, null, null, null, null, operator)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                     listener: handleNoType(new)
                     parseOperatorName(new)
                       isUnaryMinus(=)
@@ -226,7 +226,7 @@
                 listener: handleInvalidMember(;)
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -236,7 +236,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(D, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -252,7 +252,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(D, DeclarationKind.Class, D)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, factory)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, D)
               parseMetadataStar({)
@@ -260,7 +260,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFactoryMethod({, DeclarationKind.Class, {, null, null, null)
-                listener: beginFactoryMethod({, null, null)
+                listener: beginFactoryMethod(DeclarationKind.Class, {, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -311,7 +311,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null)
-                listener: beginFactoryMethod(;, null, null)
+                listener: beginFactoryMethod(DeclarationKind.Class, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -356,7 +356,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null)
-                listener: beginFactoryMethod(;, null, null)
+                listener: beginFactoryMethod(DeclarationKind.Class, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -402,7 +402,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null)
-                listener: beginFactoryMethod(;, null, null)
+                listener: beginFactoryMethod(DeclarationKind.Class, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -448,7 +448,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null)
-                listener: beginFactoryMethod(;, null, null)
+                listener: beginFactoryMethod(DeclarationKind.Class, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -499,7 +499,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(null, null, null, null, null, D)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -562,7 +562,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(null, null, null, null, null, D)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -617,7 +617,7 @@
                 listener: endClassConstructor(null, D, (, :, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 7, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 7, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(var)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -627,7 +627,7 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(var)
       parseFields(}, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(})
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, })
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_const, topLevelVariableDeclaration)
@@ -668,7 +668,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_const_generic, topLevelVariableDeclaration)
@@ -710,7 +710,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const_prefixed, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_const_prefixed, topLevelVariableDeclaration)
@@ -752,7 +752,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const_prefixed_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_const_prefixed_generic, topLevelVariableDeclaration)
@@ -798,7 +798,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_explicit, topLevelVariableDeclaration)
@@ -840,7 +840,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_explicit_generic, topLevelVariableDeclaration)
@@ -883,7 +883,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit_prefixed, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_explicit_prefixed, topLevelVariableDeclaration)
@@ -926,7 +926,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit_prefixed_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_explicit_prefixed_generic, topLevelVariableDeclaration)
@@ -973,7 +973,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_implicit, topLevelVariableDeclaration)
@@ -1019,7 +1019,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_implicit_generic, topLevelVariableDeclaration)
@@ -1028,8 +1028,8 @@
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
               parseUnaryExpression(=, true)
-                parseImplicitCreationExpression(=, Instance of 'SimpleTypeArgument1')
-                  listener: beginImplicitCreationExpression(=)
+                parseImplicitCreationExpression(=, <, Instance of 'SimpleTypeArgument1')
+                  listener: beginImplicitCreationExpression(C)
                   parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'SimpleTypeArgument1')
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(C, constructorReference)
@@ -1049,7 +1049,7 @@
                     parseArgumentsRest(()
                       listener: beginArguments(()
                       listener: endArguments(0, (, ))
-                  listener: endImplicitCreationExpression(=)
+                  listener: endImplicitCreationExpression(C, <)
           listener: endFieldInitializer(=, ;)
         listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
   listener: endTopLevelDeclaration(var)
@@ -1060,7 +1060,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit_prefixed, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_implicit_prefixed, topLevelVariableDeclaration)
@@ -1117,7 +1117,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit_prefixed_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_implicit_prefixed_generic, topLevelVariableDeclaration)
@@ -1126,8 +1126,8 @@
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
               parseUnaryExpression(=, true)
-                parseImplicitCreationExpression(=, Instance of 'SimpleTypeArgument1')
-                  listener: beginImplicitCreationExpression(=)
+                parseImplicitCreationExpression(=, <, Instance of 'SimpleTypeArgument1')
+                  listener: beginImplicitCreationExpression(prefix)
                   parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'SimpleTypeArgument1')
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(prefix, constructorReference)
@@ -1151,7 +1151,7 @@
                     parseArgumentsRest(()
                       listener: beginArguments(()
                       listener: endArguments(0, (, ))
-                  listener: endImplicitCreationExpression(=)
+                  listener: endImplicitCreationExpression(prefix, <)
           listener: endFieldInitializer(=, ;)
         listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
   listener: endTopLevelDeclaration(var)
@@ -1162,7 +1162,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff, topLevelVariableDeclaration)
@@ -1204,7 +1204,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_generic, topLevelVariableDeclaration)
@@ -1252,7 +1252,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_generic_method_invocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_generic_method_invocation, topLevelVariableDeclaration)
@@ -1315,7 +1315,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_method_invocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_method_invocation, topLevelVariableDeclaration)
@@ -1372,7 +1372,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_prefixed, topLevelVariableDeclaration)
@@ -1425,7 +1425,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_prefixed_generic, topLevelVariableDeclaration)
@@ -1484,7 +1484,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed_generic_method_invocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_prefixed_generic_method_invocation, topLevelVariableDeclaration)
@@ -1558,7 +1558,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
       parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed_method_invocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_prefixed_method_invocation, topLevelVariableDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
index 88fbc2c..ff9df52 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(bool, typeReference)
             handleNoTypeArguments(operator)
             handleType(bool, null)
@@ -43,7 +43,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -72,7 +72,7 @@
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(bool, typeReference)
             handleNoTypeArguments(operator)
             handleType(bool, null)
@@ -101,7 +101,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -130,7 +130,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -156,7 +156,7 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, int, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 5, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
index d90a492..1fe4197 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, bool)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(bool, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(bool, null)
@@ -91,7 +91,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -149,7 +149,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(bool, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(bool, null)
@@ -207,7 +207,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -265,7 +265,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -317,7 +317,7 @@
                 listener: endClassMethod(null, int, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 5, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
index 3c769e2..90dae7d 100644
--- a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
@@ -7,7 +7,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables({)
@@ -17,11 +17,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(operator)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleNoType({)
             handleOperatorName(operator, ^)
             handleNoTypeVariables(()
@@ -42,7 +42,7 @@
             endBlockFunctionBody(0, {, })
           endClassConstructor(null, operator, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
index 2b3c832..48dee75 100644
--- a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
@@ -27,7 +27,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(operator, DeclarationKind.Class, operator)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, operator)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, operator)
               parseMetadataStar({)
@@ -35,7 +35,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, operator, DeclarationKind.Class, operator, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleNoType({)
                 parseOperatorName({)
                   listener: handleOperatorName(operator, ^)
@@ -71,7 +71,7 @@
                 listener: endClassConstructor(null, operator, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
index 2baf5d9..b9eb4f6 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
@@ -55,7 +55,7 @@
 beginCompilationUnit(abstract)
   beginMetadataStar(abstract)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(abstract)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(abstract, abstract, C)
@@ -64,12 +64,12 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(abstract, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(final)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i1)
             handleType(int, null)
@@ -81,7 +81,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, ;)
             handleNoType(abstract)
             handleIdentifier(i2, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -91,7 +91,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}], abstract, abstract)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, abstract, null, null, covariant, null, null, ;)
             handleIdentifier(num, typeReference)
             handleNoTypeArguments(i3)
             handleType(num, null)
@@ -103,7 +103,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}], abstract, abstract)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, abstract, null, null, covariant, null, var, ;)
             handleNoType(var)
             handleIdentifier(i4, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -113,7 +113,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, ;)
             handleNoType(abstract)
             handleIdentifier(i5, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -123,7 +123,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'var'., Try re-ordering the modifiers., {string: abstract, string2: var}], abstract, abstract)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, null, var, ;)
             handleNoType(abstract)
             handleIdentifier(i6, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -132,7 +132,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(C, typeReference)
             handleNoTypeArguments(abstract)
             handleType(C, null)
@@ -144,14 +144,14 @@
         beginMetadataStar(i7)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, i7, i7)
             handleNoType(;)
             handleIdentifier(i7, fieldDeclaration)
             handleNoFieldInitializer(;)
           endClassFields(null, null, null, null, null, null, 1, i7, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 8, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
     endClassDeclaration(abstract, })
   endTopLevelDeclaration(var)
   beginMetadataStar(var)
@@ -159,7 +159,7 @@
   beginTopLevelMember(var)
     handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'var'., Try re-ordering the modifiers., {string: abstract, string2: var}], abstract, abstract)
     handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'abstract' here., Try removing 'abstract'., {lexeme: abstract}], abstract, abstract)
-    beginFields(})
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, })
       handleNoType(abstract)
       handleIdentifier(foo, topLevelVariableDeclaration)
       handleNoFieldInitializer(;)
@@ -167,7 +167,7 @@
   endTopLevelDeclaration(abstract)
   beginMetadataStar(abstract)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(abstract)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Bar, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(abstract, abstract, Bar)
@@ -176,20 +176,20 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(abstract, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(covariant)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'required' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: required, string2: covariant}], required, required)
         handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'required' here., Try removing 'required'., {lexeme: required}], required, required)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, covariant, null, null, {)
             handleRecoverableError(MissingConstFinalVarOrType, x, x)
             handleNoType(required)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
           endClassFields(null, null, null, covariant, null, null, 1, covariant, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(abstract, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
index 153ca2c..93bf99d 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
@@ -10,7 +10,7 @@
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
       parseClassOrNamedMixinApplication(abstract, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(abstract)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -26,7 +26,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(abstract, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -36,7 +36,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
               listener: beginMember()
               parseFields({, abstract, null, null, null, null, final, abstract, Instance of 'SimpleType', i1, DeclarationKind.Class, C, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i1)
                 listener: handleType(int, null)
@@ -55,7 +55,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
               listener: beginMember()
               parseFields(;, abstract, null, null, null, null, final, abstract, Instance of 'NoType', i2, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, ;)
                 listener: handleNoType(abstract)
                 ensureIdentifierPotentiallyRecovered(abstract, fieldDeclaration, false)
                   listener: handleIdentifier(i2, fieldDeclaration)
@@ -72,7 +72,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}], abstract, abstract)
               listener: beginMember()
               parseFields(;, abstract, null, null, covariant, null, null, abstract, Instance of 'SimpleType', i3, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, covariant, null, null, ;)
                 listener: handleIdentifier(num, typeReference)
                 listener: handleNoTypeArguments(i3)
                 listener: handleType(num, null)
@@ -91,7 +91,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}], abstract, abstract)
               listener: beginMember()
               parseFields(;, abstract, null, null, covariant, null, var, var, Instance of 'NoType', i4, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, covariant, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(i4, fieldDeclaration)
@@ -108,7 +108,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
               listener: beginMember()
               parseFields(;, abstract, null, null, null, null, final, abstract, Instance of 'NoType', i5, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, ;)
                 listener: handleNoType(abstract)
                 ensureIdentifierPotentiallyRecovered(abstract, fieldDeclaration, false)
                   listener: handleIdentifier(i5, fieldDeclaration)
@@ -125,7 +125,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'var'., Try re-ordering the modifiers., {string: abstract, string2: var}], abstract, abstract)
               listener: beginMember()
               parseFields(;, abstract, null, null, null, null, var, abstract, Instance of 'NoType', i6, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, var, ;)
                 listener: handleNoType(abstract)
                 ensureIdentifierPotentiallyRecovered(abstract, fieldDeclaration, false)
                   listener: handleIdentifier(i6, fieldDeclaration)
@@ -140,7 +140,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', abstract, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(C, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(C, null)
@@ -162,7 +162,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', i7, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 reportRecoverableError(i7, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, i7, i7)
                 listener: handleNoType(;)
@@ -173,7 +173,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, i7, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 8, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
           listener: endClassDeclaration(abstract, })
   listener: endTopLevelDeclaration(var)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -187,7 +187,7 @@
       reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
         listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'abstract' here., Try removing 'abstract'., {lexeme: abstract}], abstract, abstract)
       parseFields(}, null, null, null, null, null, var, abstract, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(})
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, })
         listener: handleNoType(abstract)
         ensureIdentifierPotentiallyRecovered(abstract, topLevelVariableDeclaration, false)
           listener: handleIdentifier(foo, topLevelVariableDeclaration)
@@ -203,7 +203,7 @@
       parseClassDeclarationModifiers(;, class)
         parseTopLevelKeywordModifiers(abstract, class)
       parseClassOrNamedMixinApplication(abstract, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(abstract)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Bar, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -219,7 +219,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(abstract, class, null)
           parseClassOrMixinOrExtensionBody(Bar, DeclarationKind.Class, Bar)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Bar)
               parseMetadataStar({)
@@ -232,7 +232,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields({, null, null, null, covariant, null, null, required, Instance of 'NoType', x, DeclarationKind.Class, Bar, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, null, null, {)
                 reportRecoverableError(x, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x, x)
                 listener: handleNoType(required)
@@ -243,7 +243,7 @@
                 listener: endClassFields(null, null, null, covariant, null, null, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(abstract, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(abstract)
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
index b26632d..140bdbf 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
@@ -41,7 +41,7 @@
   endMetadataStar(0)
   beginTopLevelMember(final)
     handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, external, null, null, null, final, )
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(i1)
       handleType(int, null)
@@ -53,7 +53,7 @@
   endMetadataStar(0)
   beginTopLevelMember(var)
     handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'var'., Try re-ordering the modifiers., {string: external, string2: var}], external, external)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, external, null, null, null, var, ;)
       handleNoType(external)
       handleIdentifier(i2, topLevelVariableDeclaration)
       handleNoFieldInitializer(;)
@@ -61,7 +61,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -70,12 +70,12 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(covariant)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: external, string2: covariant}], external, external)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, external, null, covariant, null, null, {)
             handleIdentifier(num, typeReference)
             handleNoTypeArguments(i3)
             handleType(num, null)
@@ -87,7 +87,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, external, null, null, null, final, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i4)
             handleType(int, null)
@@ -99,7 +99,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, external, null, null, null, final, ;)
             handleNoType(external)
             handleIdentifier(i5, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -109,7 +109,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
             handleNoType(final)
             handleIdentifier(i6, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -119,7 +119,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
             handleNoType(external)
             handleIdentifier(i7, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -130,13 +130,13 @@
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'static' should be before the modifier 'final'., Try re-ordering the modifiers., {string: static, string2: final}], static, static)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
             handleNoType(external)
             handleIdentifier(i8, fieldDeclaration)
             handleNoFieldInitializer(;)
           endClassFields(null, external, static, null, null, final, 1, final, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
index ec0650f..6c9e4f0 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
@@ -11,7 +11,7 @@
       reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}])
         listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
       parseFields(, null, external, null, null, null, final, external, Instance of 'SimpleType', i1, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, external, null, null, null, final, )
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(i1)
         listener: handleType(int, null)
@@ -30,7 +30,7 @@
       reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'var'., Try re-ordering the modifiers., {string: external, string2: var}])
         listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'var'., Try re-ordering the modifiers., {string: external, string2: var}], external, external)
       parseFields(;, null, external, null, null, null, var, external, Instance of 'NoType', i2, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, external, null, null, null, var, ;)
         listener: handleNoType(external)
         ensureIdentifierPotentiallyRecovered(external, topLevelVariableDeclaration, false)
           listener: handleIdentifier(i2, topLevelVariableDeclaration)
@@ -45,7 +45,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -61,7 +61,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -71,7 +71,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: external, string2: covariant}], external, external)
               listener: beginMember()
               parseFields({, null, external, null, covariant, null, null, external, Instance of 'SimpleType', i3, DeclarationKind.Class, C, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, external, null, covariant, null, null, {)
                 listener: handleIdentifier(num, typeReference)
                 listener: handleNoTypeArguments(i3)
                 listener: handleType(num, null)
@@ -90,7 +90,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
               listener: beginMember()
               parseFields(;, null, external, null, null, null, final, external, Instance of 'SimpleType', i4, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, external, null, null, null, final, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i4)
                 listener: handleType(int, null)
@@ -109,7 +109,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
               listener: beginMember()
               parseFields(;, null, external, null, null, null, final, external, Instance of 'NoType', i5, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, external, null, null, null, final, ;)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, fieldDeclaration, false)
                   listener: handleIdentifier(i5, fieldDeclaration)
@@ -126,7 +126,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
               listener: beginMember()
               parseFields(;, null, external, static, null, null, final, final, Instance of 'NoType', i6, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
                 listener: handleNoType(final)
                 ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
                   listener: handleIdentifier(i6, fieldDeclaration)
@@ -143,7 +143,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
               listener: beginMember()
               parseFields(;, null, external, static, null, null, final, external, Instance of 'NoType', i7, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, fieldDeclaration, false)
                   listener: handleIdentifier(i7, fieldDeclaration)
@@ -162,7 +162,7 @@
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
               listener: beginMember()
               parseFields(;, null, external, static, null, null, final, external, Instance of 'NoType', i8, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, fieldDeclaration, false)
                   listener: handleIdentifier(i8, fieldDeclaration)
@@ -171,7 +171,7 @@
                 listener: endClassFields(null, external, static, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(final)
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
index 5ec7a5e..946637f 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
@@ -48,7 +48,7 @@
   beginMetadataStar(late)
   endMetadataStar(0)
   beginTopLevelMember(late)
-    beginFields(})
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, })
       handleRecoverableError(MissingConstFinalVarOrType, y, y)
       handleNoType(late)
       handleIdentifier(y, topLevelVariableDeclaration)
@@ -57,7 +57,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -66,11 +66,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, late, null, {)
             handleRecoverableError(MissingConstFinalVarOrType, z, z)
             handleNoType(late)
             handleIdentifier(z, fieldDeclaration)
@@ -80,7 +80,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -105,7 +105,7 @@
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, static, null, null, null, bar)
+          beginMethod(DeclarationKind.Class, null, static, null, null, null, bar)
             handleVoidKeyword(void)
             handleIdentifier(bar, methodDeclaration)
             handleNoTypeVariables(()
@@ -127,7 +127,7 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, static, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
index 13b0274..2f526a0 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
@@ -59,7 +59,7 @@
       listener: beginTopLevelMember(late)
       isReservedKeyword(;)
       parseFields(}, null, null, null, null, late, null, late, Instance of 'NoType', y, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(})
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, })
         reportRecoverableError(y, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, y, y)
         listener: handleNoType(late)
@@ -76,7 +76,7 @@
     parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -92,7 +92,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -101,7 +101,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields({, null, null, null, null, late, null, late, Instance of 'NoType', z, DeclarationKind.Class, Foo, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, {)
                 reportRecoverableError(z, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, z, z)
                 listener: handleNoType(late)
@@ -118,7 +118,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -171,7 +171,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, static, null, null, null, static, Instance of 'VoidType', null, bar, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, static, null, null, null, bar)
+                listener: beginMethod(DeclarationKind.Class, null, static, null, null, null, bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(bar, methodDeclaration)
@@ -217,7 +217,7 @@
                 listener: endClassMethod(null, static, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(void)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
index 325d346..42d16be 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(operator)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleNoType({)
             handleOperatorName(operator, [])
             handleNoTypeVariables(()
@@ -38,7 +38,7 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(null, operator, (, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(main)
   beginMetadataStar(main)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
index 37429ab..8c6aed4 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, operator)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, operator, DeclarationKind.Class, A, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleNoType({)
                 parseOperatorName({)
                   listener: handleOperatorName(operator, [])
@@ -83,7 +83,7 @@
                 listener: endClassMethod(null, operator, (, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(main)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
index b461804c..2f4c2f7 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, A)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(operator)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleNoType({)
             handleOperatorName(operator, [])
             handleNoTypeVariables(()
@@ -38,7 +38,7 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(null, operator, (, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(main)
   beginMetadataStar(main)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
index 093880f..e6caa09 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, operator)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, operator, DeclarationKind.Class, A, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleNoType({)
                 parseOperatorName({)
                   listener: handleOperatorName(operator, [])
@@ -83,7 +83,7 @@
                 listener: endClassMethod(null, operator, (, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(main)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
index 0e1c227..1328dc8 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
@@ -27,7 +27,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, X)
@@ -36,11 +36,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, late, null, {)
             handleRecoverableError(MissingConstFinalVarOrType, x1, x1)
             handleNoType(late)
             handleIdentifier(x1, fieldDeclaration)
@@ -50,7 +50,7 @@
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, static, null, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x2, x2)
             handleNoType(late)
             handleIdentifier(x2, fieldDeclaration)
@@ -60,7 +60,7 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, covariant, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x3, x3)
             handleNoType(late)
             handleIdentifier(x3, fieldDeclaration)
@@ -70,7 +70,7 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x4, x4)
             handleNoType(late)
             handleIdentifier(x4, fieldDeclaration)
@@ -82,7 +82,7 @@
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, static, null, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x5, x5)
             handleNoType(late)
             handleIdentifier(x5, fieldDeclaration)
@@ -94,7 +94,7 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, covariant, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x6, x6)
             handleNoType(late)
             handleIdentifier(x6, fieldDeclaration)
@@ -103,7 +103,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
index 4dd48dd..26b7bad 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(X, DeclarationKind.Class, X)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, X)
               parseMetadataStar({)
@@ -34,7 +34,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields({, null, null, null, null, late, null, late, Instance of 'NoType', x1, DeclarationKind.Class, X, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, {)
                 reportRecoverableError(x1, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x1, x1)
                 listener: handleNoType(late)
@@ -52,7 +52,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields(;, null, null, static, null, late, null, late, Instance of 'NoType', x2, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, static, null, late, null, ;)
                 reportRecoverableError(x2, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x2, x2)
                 listener: handleNoType(late)
@@ -70,7 +70,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields(;, null, null, null, covariant, late, null, late, Instance of 'NoType', x3, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, late, null, ;)
                 reportRecoverableError(x3, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x3, x3)
                 listener: handleNoType(late)
@@ -88,7 +88,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, null, late, null, late, Instance of 'NoType', x4, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, ;)
                 reportRecoverableError(x4, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x4, x4)
                 listener: handleNoType(late)
@@ -113,7 +113,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, static, null, late, null, late, Instance of 'NoType', x5, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, static, null, late, null, ;)
                 reportRecoverableError(x5, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x5, x5)
                 listener: handleNoType(late)
@@ -138,7 +138,7 @@
               listener: beginMember()
               isReservedKeyword(=)
               parseFields(;, null, null, null, covariant, late, null, late, Instance of 'NoType', x6, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, late, null, ;)
                 reportRecoverableError(x6, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x6, x6)
                 listener: handleNoType(late)
@@ -156,7 +156,7 @@
                 listener: endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
index 2cb3c26..7ebeff9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, X)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(var)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, var, {)
             handleNoType(var)
             handleIdentifier(x1, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -23,7 +23,7 @@
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, static, null, null, var, ;)
             handleNoType(var)
             handleIdentifier(x2, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -32,7 +32,7 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, covariant, null, var, ;)
             handleNoType(var)
             handleIdentifier(x3, fieldDeclaration)
             handleNoFieldInitializer(;)
@@ -41,7 +41,7 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, var, ;)
             handleNoType(var)
             handleIdentifier(x4, fieldDeclaration)
             beginFieldInitializer(=)
@@ -52,7 +52,7 @@
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, static, null, null, var, ;)
             handleNoType(var)
             handleIdentifier(x5, fieldDeclaration)
             beginFieldInitializer(=)
@@ -63,7 +63,7 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, covariant, null, var, ;)
             handleNoType(var)
             handleIdentifier(x6, fieldDeclaration)
             beginFieldInitializer(=)
@@ -71,7 +71,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
index db54e68..1d8ef6f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(X, DeclarationKind.Class, X)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, var)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, X)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, var, var, Instance of 'NoType', x1, DeclarationKind.Class, X, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, var, {)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x1, fieldDeclaration)
@@ -48,7 +48,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, static, null, null, var, var, Instance of 'NoType', x2, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, static, null, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x2, fieldDeclaration)
@@ -63,7 +63,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, covariant, null, var, var, Instance of 'NoType', x3, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x3, fieldDeclaration)
@@ -78,7 +78,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', x4, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x4, fieldDeclaration)
@@ -100,7 +100,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, static, null, null, var, var, Instance of 'NoType', x5, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, static, null, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x5, fieldDeclaration)
@@ -122,7 +122,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, covariant, null, var, var, Instance of 'NoType', x6, DeclarationKind.Class, X, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x6, fieldDeclaration)
@@ -138,7 +138,7 @@
                 listener: endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 6, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
index 5e881e6..890579d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, covariant, late, final, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(x)
             handleType(int, null)
@@ -22,7 +22,7 @@
             handleNoFieldInitializer(;)
           endClassFields(null, null, null, covariant, late, final, 1, covariant, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
index 1680edc..a42a169 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, covariant, late, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, late, final, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(x)
                 listener: handleType(int, null)
@@ -44,7 +44,7 @@
                 listener: endClassFields(null, null, null, covariant, late, final, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
index b28c309..8125755 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
@@ -7,7 +7,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -16,11 +16,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, covariant, late, final, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(x)
             handleType(int, null)
@@ -31,7 +31,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, late, final, 1, covariant, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
index 6b1e244..777b6f6 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, covariant, late, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, late, final, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(x)
                 listener: handleType(int, null)
@@ -53,7 +53,7 @@
                 listener: endClassFields(null, null, null, null, late, final, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
index a3cfa19..0c383ad 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
@@ -7,7 +7,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -16,11 +16,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, covariant, null, final, {)
             handleRecoverableError(FinalAndCovariant, covariant, covariant)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(x)
@@ -31,7 +31,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, final, 1, covariant, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
index 5664402..40f8c8c5 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, covariant, null, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, null, final, {)
                 reportRecoverableError(covariant, FinalAndCovariant)
                   listener: handleRecoverableError(FinalAndCovariant, covariant, covariant)
                 listener: handleIdentifier(int, typeReference)
@@ -53,7 +53,7 @@
                 listener: endClassFields(null, null, null, null, null, final, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
index 0624ab1..8bd1608 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(?)
             handleType(String, ?)
@@ -25,7 +25,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(y)
             handleType(int, null)
@@ -36,7 +36,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -85,7 +85,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(a, methodDeclarationContinuation)
@@ -149,7 +149,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(b, methodDeclarationContinuation)
@@ -213,7 +213,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(c, methodDeclarationContinuation)
@@ -277,7 +277,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(d, methodDeclarationContinuation)
@@ -338,7 +338,7 @@
             handleEmptyFunctionBody(;)
           endClassConstructor(null, Foo, (, :, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 7, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 7, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
index 4bd0d59..377a621 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, String)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(String, ?)
@@ -50,7 +50,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(y)
                 listener: handleType(int, null)
@@ -68,7 +68,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -174,7 +174,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -319,7 +319,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -464,7 +464,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -609,7 +609,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -747,7 +747,7 @@
                 listener: endClassConstructor(null, Foo, (, :, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 7, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 7, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
index 89bb893..a6d80f5 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(?)
             handleType(String, ?)
@@ -25,7 +25,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(y)
             handleType(int, null)
@@ -36,7 +36,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -82,7 +82,7 @@
             handleEmptyFunctionBody(;)
           endClassConstructor(null, Foo, (, :, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
index 6678394c..7bae571 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, String)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(String, ?)
@@ -50,7 +50,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(y)
                 listener: handleType(int, null)
@@ -68,7 +68,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -167,7 +167,7 @@
                 listener: endClassConstructor(null, Foo, (, :, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 3, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
index 1efd65e..4b60813 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(?)
             handleType(String, ?)
@@ -25,7 +25,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(y)
             handleType(int, null)
@@ -36,7 +36,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -96,7 +96,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -153,7 +153,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, bar)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, bar)
             handleVoidKeyword(void)
             handleIdentifier(bar, methodDeclaration)
             handleNoTypeVariables(()
@@ -207,7 +207,7 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, void, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 5, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
index bfe4f7d..bcb265d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, String)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(String, ?)
@@ -50,7 +50,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(y)
                 listener: handleType(int, null)
@@ -68,7 +68,7 @@
               listener: beginMember()
               isReservedKeyword(()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, Foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -204,7 +204,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -345,7 +345,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, bar, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, bar)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(bar, methodDeclaration)
@@ -480,7 +480,7 @@
                 listener: endClassMethod(null, void, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 5, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
index 8553682..4bb704e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(bool)
   endMetadataStar(0)
   beginTopLevelMember(bool)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleIdentifier(bool, typeReference)
       handleNoTypeArguments(x)
       handleType(bool, null)
@@ -13,7 +13,7 @@
   beginMetadataStar(bool)
   endMetadataStar(0)
   beginTopLevelMember(bool)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(bool, typeReference)
       handleNoTypeArguments(x)
       handleType(bool, null)
@@ -69,7 +69,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -78,11 +78,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleIdentifier(c0, methodDeclarationContinuation)
@@ -106,7 +106,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleIdentifier(c1, methodDeclarationContinuation)
@@ -128,7 +128,7 @@
             handleEmptyFunctionBody(;)
           endClassConstructor(null, C, (, :, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(main)
   beginMetadataStar(main)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
index 86b9cdb..1b2b88b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(bool)
       parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', x, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         listener: handleIdentifier(bool, typeReference)
         listener: handleNoTypeArguments(x)
         listener: handleType(bool, null)
@@ -26,7 +26,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(bool)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', x, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(bool, typeReference)
         listener: handleNoTypeArguments(x)
         listener: handleType(bool, null)
@@ -189,7 +189,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -205,7 +205,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, C)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -214,7 +214,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, C)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -267,7 +267,7 @@
               listener: beginMember()
               isReservedKeyword(.)
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(null, null, null, null, null, C)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -314,7 +314,7 @@
                 listener: endClassConstructor(null, C, (, :, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(main)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
index 5447d9d..1cc1518 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
@@ -305,7 +305,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Order, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Order)
@@ -314,11 +314,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(List)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(List, typeReference)
             handleNoTypeArguments(?)
             handleType(List, ?)
@@ -329,7 +329,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(?)
             handleType(int, ?)
@@ -337,7 +337,7 @@
             handleNoFieldInitializer(;)
           endClassFields(null, null, null, null, null, null, 1, int, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(5, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
index 7069d7b..a2e28bd 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
@@ -637,7 +637,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Order, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -653,7 +653,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Order, DeclarationKind.Class, Order)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, List)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Order)
               parseMetadataStar({)
@@ -661,7 +661,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Order, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(List, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(List, ?)
@@ -678,7 +678,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleNullableType', y, DeclarationKind.Class, Order, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(int, ?)
@@ -689,7 +689,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(Order)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
index a765a2f..a305eb1 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
@@ -26,7 +26,7 @@
   beginTopLevelMember(Future)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleIdentifier(Future, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect
index 43fbe7a..adc5a86 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect
@@ -14,7 +14,7 @@
           listener: // WARNING: Reporting at eof for .
         rewriter()
       parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Future, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
index 1295e65..1bf1597 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
@@ -120,7 +120,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, X)
@@ -129,11 +129,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, late)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
             handleNoType({)
             handleIdentifier(late, methodDeclaration)
             handleNoTypeVariables(()
@@ -153,12 +153,12 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, late, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Y)
@@ -167,11 +167,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(late)
             handleType(int, null)
@@ -181,7 +181,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, null, 1, int, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
index e5b3775..23a7bb2 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
@@ -328,7 +328,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -344,7 +344,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(X, DeclarationKind.Class, X)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, X)
               parseMetadataStar({)
@@ -352,7 +352,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, late, DeclarationKind.Class, X, false)
-                listener: beginMethod(null, null, null, null, null, late)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(late, methodDeclaration)
@@ -410,7 +410,7 @@
                 listener: endClassMethod(null, late, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -420,7 +420,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -436,7 +436,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Y, DeclarationKind.Class, Y)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Y)
               parseMetadataStar({)
@@ -444,7 +444,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', late, DeclarationKind.Class, Y, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
@@ -462,7 +462,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(main)
diff --git a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
index e8b4997..52d88f1 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
@@ -138,7 +138,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, X)
@@ -147,11 +147,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, late)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
             handleNoType({)
             handleIdentifier(late, methodDeclaration)
             handleNoTypeVariables(()
@@ -171,12 +171,12 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, late, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Y)
@@ -185,11 +185,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(late)
             handleType(int, null)
@@ -199,7 +199,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, null, 1, int, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
index ef86be8..cbd34da 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
@@ -377,7 +377,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -393,7 +393,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(X, DeclarationKind.Class, X)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, X)
               parseMetadataStar({)
@@ -401,7 +401,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, late, DeclarationKind.Class, X, false)
-                listener: beginMethod(null, null, null, null, null, late)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(late, methodDeclaration)
@@ -459,7 +459,7 @@
                 listener: endClassMethod(null, late, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -469,7 +469,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -485,7 +485,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Y, DeclarationKind.Class, Y)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Y)
               parseMetadataStar({)
@@ -493,7 +493,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', late, DeclarationKind.Class, Y, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
@@ -511,7 +511,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(main)
diff --git a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
index dda2592..4854f02 100644
--- a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Class1, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Class1)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -43,7 +43,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleVoidKeyword(void)
             handleOperatorName(operator, []=)
             handleNoTypeVariables(()
@@ -73,7 +73,7 @@
             endBlockFunctionBody(0, {, })
           endClassMethod(null, void, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(main)
   beginMetadataStar(main)
diff --git a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
index 54a5797..bd48abf 100644
--- a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class1, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Class1, DeclarationKind.Class, Class1)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Class1)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Class1, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -91,7 +91,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', null, operator, DeclarationKind.Class, Class1, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleVoidKeyword(void)
                 parseOperatorName(void)
                   listener: handleOperatorName(operator, []=)
@@ -139,7 +139,7 @@
                 listener: endClassMethod(null, void, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(main)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
diff --git a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
index 4e2dc09..f4825f1 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
@@ -120,7 +120,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, X)
@@ -129,11 +129,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(required)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, required)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
             handleNoType({)
             handleIdentifier(required, methodDeclaration)
             handleNoTypeVariables(()
@@ -153,12 +153,12 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, required, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Y)
@@ -167,11 +167,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(required)
             handleType(int, null)
@@ -181,7 +181,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, null, 1, int, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
index b40afe0..ef231a3 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
@@ -328,7 +328,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -344,7 +344,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(X, DeclarationKind.Class, X)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, required)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, X)
               parseMetadataStar({)
@@ -352,7 +352,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, required, DeclarationKind.Class, X, false)
-                listener: beginMethod(null, null, null, null, null, required)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(required, methodDeclaration)
@@ -410,7 +410,7 @@
                 listener: endClassMethod(null, required, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -420,7 +420,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -436,7 +436,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Y, DeclarationKind.Class, Y)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Y)
               parseMetadataStar({)
@@ -444,7 +444,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', required, DeclarationKind.Class, Y, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
@@ -462,7 +462,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(main)
diff --git a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
index 407ba51..8d19c73 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
@@ -131,7 +131,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, X)
@@ -140,11 +140,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(required)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, required)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
             handleNoType({)
             handleIdentifier(required, methodDeclaration)
             handleNoTypeVariables(()
@@ -164,12 +164,12 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, required, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Y)
@@ -178,11 +178,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(required)
             handleType(int, null)
@@ -192,7 +192,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, null, 1, int, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
index 5bab2cc..42f35f4 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
@@ -344,7 +344,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -360,7 +360,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(X, DeclarationKind.Class, X)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, required)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, X)
               parseMetadataStar({)
@@ -368,7 +368,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, required, DeclarationKind.Class, X, false)
-                listener: beginMethod(null, null, null, null, null, required)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(required, methodDeclaration)
@@ -426,7 +426,7 @@
                 listener: endClassMethod(null, required, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -436,7 +436,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -452,7 +452,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Y, DeclarationKind.Class, Y)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Y)
               parseMetadataStar({)
@@ -460,7 +460,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', required, DeclarationKind.Class, Y, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
@@ -478,7 +478,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(main)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
index cc92f37..8bdfa8b 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
@@ -23,7 +23,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -32,12 +32,12 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(Message[ExperimentNotEnabled, This requires the 'triple-shift' language feature to be enabled., Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'., {string: triple-shift, string2: 2.14}], >>, >)
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(Foo, typeReference)
             handleNoTypeArguments(operator)
             handleType(Foo, null)
@@ -58,7 +58,7 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(null, Foo, (, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(main)
   beginMetadataStar(main)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
index c29f941..af61377 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Foo)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -36,7 +36,7 @@
                 reportRecoverableErrorWithEnd(>>, >, Message[ExperimentNotEnabled, This requires the 'triple-shift' language feature to be enabled., Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'., {string: triple-shift, string2: 2.14}])
                   listener: handleRecoverableError(Message[ExperimentNotEnabled, This requires the 'triple-shift' language feature to be enabled., Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'., {string: triple-shift, string2: 2.14}], >>, >)
                 rewriter()
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(Foo, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(Foo, null)
@@ -79,7 +79,7 @@
                 listener: endClassMethod(null, Foo, (, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(main)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
index cd35af3..3e1635e 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
             handleIdentifier(Foo, typeReference)
             handleNoTypeArguments(operator)
             handleType(Foo, null)
@@ -35,7 +35,7 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(null, Foo, (, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(main)
   beginMetadataStar(main)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
index 675e626..e429730 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Foo)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                 listener: handleIdentifier(Foo, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(Foo, null)
@@ -76,7 +76,7 @@
                 listener: endClassMethod(null, Foo, (, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(main)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
index 3a34750..67bd589 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
@@ -8,11 +8,11 @@
       handleNoTypeArguments({)
       handleType(Symbol, null)
       handleExtensionShowHide(null, 0, null, 0)
-      beginClassOrMixinBody(DeclarationKind.Extension, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, operator)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(operator)
             handleType(String, null)
@@ -37,7 +37,7 @@
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, call)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, call)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(call)
             handleType(String, null)
@@ -59,7 +59,7 @@
             handleExpressionFunctionBody(=>, ;)
           endExtensionMethod(null, String, (, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Extension, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 2, {, })
     endExtensionDeclaration(extension, null, on, null, null, })
   endTopLevelDeclaration(void)
   beginMetadataStar(void)
@@ -91,7 +91,7 @@
   endTopLevelDeclaration(abstract)
   beginMetadataStar(abstract)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(abstract)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
     beginClassDeclaration(abstract, abstract, Foo)
@@ -114,8 +114,8 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(abstract, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(abstract, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
index 3e7a724..81d4778 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
@@ -17,7 +17,7 @@
         listener: handleType(Symbol, null)
         listener: handleExtensionShowHide(null, 0, null, 0)
         parseClassOrMixinOrExtensionBody(Symbol, DeclarationKind.Extension, null)
-          listener: beginClassOrMixinBody(DeclarationKind.Extension, {)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
           notEofOrValue(}, String)
           parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Extension, null)
             parseMetadataStar({)
@@ -25,7 +25,7 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Extension, null, false)
-              listener: beginMethod(null, null, null, null, null, operator)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, operator)
               listener: handleIdentifier(String, typeReference)
               listener: handleNoTypeArguments(operator)
               listener: handleType(String, null)
@@ -76,7 +76,7 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, call, DeclarationKind.Extension, null, false)
-              listener: beginMethod(null, null, null, null, null, call)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, call)
               listener: handleIdentifier(String, typeReference)
               listener: handleNoTypeArguments(call)
               listener: handleType(String, null)
@@ -122,7 +122,7 @@
               listener: endExtensionMethod(null, String, (, null, ;)
             listener: endMember()
           notEofOrValue(}, })
-          listener: endClassOrMixinBody(DeclarationKind.Extension, 2, {, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 2, {, })
         listener: endExtensionDeclaration(extension, null, on, null, null, })
   listener: endTopLevelDeclaration(void)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -210,7 +210,7 @@
       parseClassDeclarationModifiers(}, class)
         parseTopLevelKeywordModifiers(abstract, class)
       parseClassOrNamedMixinApplication(abstract, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(abstract)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
@@ -243,9 +243,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(abstract, class, null)
           parseClassOrMixinOrExtensionBody(>, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(abstract, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(extension)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect
index 5a22804..138a4ba 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
       handleNoType(var)
       handleIdentifier(a, topLevelVariableDeclaration)
       handleNoFieldInitializer(,)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect
index 06fa097..1044c77 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(var)
       parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(a, topLevelVariableDeclaration)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
index e1e42f2..ccf89b4 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, late)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -27,12 +27,12 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(get, int, =>, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, required)
@@ -41,11 +41,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -58,12 +58,12 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(get, int, =>, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -72,11 +72,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(late, typeReference)
             handleNoTypeArguments(l)
             handleType(late, null)
@@ -93,7 +93,7 @@
         beginMetadataStar(required)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(required, typeReference)
             handleNoTypeArguments(r)
             handleType(required, null)
@@ -107,7 +107,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, null, 1, required, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
index 9d357bc..8a856d0 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(late, DeclarationKind.Class, late)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, late)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, late, false)
-                listener: beginMethod(null, null, null, null, get, g)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -64,7 +64,7 @@
                 listener: endClassMethod(get, int, =>, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -74,7 +74,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -90,7 +90,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(required, DeclarationKind.Class, required)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, required)
               parseMetadataStar({)
@@ -98,7 +98,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, required, false)
-                listener: beginMethod(null, null, null, null, get, g)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -129,7 +129,7 @@
                 listener: endClassMethod(get, int, =>, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -139,7 +139,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -155,7 +155,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -163,7 +163,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', l, DeclarationKind.Class, C, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(late, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(late, null)
@@ -198,7 +198,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(required, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(required, null)
@@ -227,7 +227,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, required, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
index fd1c433..f7cda4b 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Xlate, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Xlate)
@@ -10,11 +10,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -27,12 +27,12 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(get, int, =>, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Xrequired, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Xrequired)
@@ -41,11 +41,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -58,12 +58,12 @@
             handleExpressionFunctionBody(=>, ;)
           endClassMethod(get, int, =>, null, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, C)
@@ -72,11 +72,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(Xlate)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(Xlate, typeReference)
             handleNoTypeArguments(l)
             handleType(Xlate, null)
@@ -93,7 +93,7 @@
         beginMetadataStar(Xrequired)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(Xrequired, typeReference)
             handleNoTypeArguments(r)
             handleType(Xrequired, null)
@@ -107,7 +107,7 @@
             endFieldInitializer(=, ;)
           endClassFields(null, null, null, null, null, null, 1, Xrequired, ;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
index 94ff34e..20506bd 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Xlate, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -25,7 +25,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Xlate, DeclarationKind.Class, Xlate)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Xlate)
               parseMetadataStar({)
@@ -33,7 +33,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, Xlate, false)
-                listener: beginMethod(null, null, null, null, get, g)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -64,7 +64,7 @@
                 listener: endClassMethod(get, int, =>, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -74,7 +74,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Xrequired, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -90,7 +90,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Xrequired, DeclarationKind.Class, Xrequired)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Xrequired)
               parseMetadataStar({)
@@ -98,7 +98,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, Xrequired, false)
-                listener: beginMethod(null, null, null, null, get, g)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -129,7 +129,7 @@
                 listener: endClassMethod(get, int, =>, null, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -139,7 +139,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -155,7 +155,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, Xlate)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, C)
               parseMetadataStar({)
@@ -163,7 +163,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', l, DeclarationKind.Class, C, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(Xlate, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(Xlate, null)
@@ -198,7 +198,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.Class, C, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(Xrequired, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(Xrequired, null)
@@ -227,7 +227,7 @@
                 listener: endClassFields(null, null, null, null, null, null, 1, Xrequired, ;)
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 2, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
index bc75d92..42d27b1 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
@@ -1,7 +1,7 @@
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     beginTypeVariables(<)
       beginMetadataStar(T)
@@ -18,13 +18,13 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables(implements)
     beginClassDeclaration(class, null, B)
@@ -40,8 +40,8 @@
       handleType(A, null)
       handleClassOrMixinImplements(implements, 1)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
-      endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
index 9baf74c..5d322f3 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: beginTypeVariables(<)
@@ -33,9 +33,9 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(>, DeclarationKind.Class, A)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(class)
   parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
@@ -45,7 +45,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables(implements)
@@ -69,9 +69,9 @@
               listener: handleClassOrMixinImplements(implements, 1)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(>, DeclarationKind.Class, B)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
index 405a6f7..37497b6 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
@@ -64,7 +64,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields()
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(x1)
       handleType(int, null)
@@ -76,7 +76,7 @@
   endMetadataStar(0)
   beginTopLevelMember(late)
     handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
-    beginFields(late)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(x2)
       handleType(int, null)
@@ -88,7 +88,7 @@
   endMetadataStar(0)
   beginTopLevelMember(late)
     handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
-    beginFields(late)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
       handleIdentifier(List, typeReference)
       beginTypeArguments(<)
         handleIdentifier(int, typeReference)
@@ -104,7 +104,7 @@
   endMetadataStar(0)
   beginTopLevelMember(late)
     handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
-    beginFields(late)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, final, late)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(x4)
       handleType(int, null)
@@ -115,7 +115,7 @@
   beginMetadataStar(late)
   endMetadataStar(0)
   beginTopLevelMember(late)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleIdentifier(late, typeReference)
       handleNoTypeArguments(x5)
       handleType(late, null)
@@ -132,7 +132,7 @@
   beginMetadataStar(late)
   endMetadataStar(0)
   beginTopLevelMember(late)
-    beginFields(;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
       handleRecoverableError(MissingConstFinalVarOrType, late, late)
       handleNoType(;)
       handleIdentifier(late, topLevelVariableDeclaration)
@@ -243,7 +243,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -252,11 +252,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields({)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(z1)
             handleType(int, null)
@@ -268,7 +268,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
         beginMember()
-          beginFields(late)
+          beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(z2)
             handleType(int, null)
@@ -280,7 +280,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
         beginMember()
-          beginFields(late)
+          beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(int, typeReference)
@@ -296,7 +296,7 @@
         endMetadataStar(0)
         handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
         beginMember()
-          beginFields(late)
+          beginFields(DeclarationKind.Class, null, null, null, null, late, final, late)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(z4)
             handleType(int, null)
@@ -307,7 +307,7 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleIdentifier(late, typeReference)
             handleNoTypeArguments(z5)
             handleType(late, null)
@@ -324,7 +324,7 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields(;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, late, late)
             handleNoType(;)
             handleIdentifier(late, fieldDeclaration)
@@ -337,7 +337,7 @@
           handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
           handleInvalidMember(;)
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 8, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(10, )
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
index cab97bd..8d5501d9 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
@@ -9,7 +9,7 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
       parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', x1, DeclarationKind.TopLevel, null, false)
-        listener: beginFields()
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(x1)
         listener: handleType(int, null)
@@ -29,7 +29,7 @@
       reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
         listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
       parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleType', x2, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(late)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(x2)
         listener: handleType(int, null)
@@ -49,7 +49,7 @@
       reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
         listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
       parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleTypeWith1Argument', x3, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(late)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
         listener: handleIdentifier(List, typeReference)
         listener: beginTypeArguments(<)
         listener: handleIdentifier(int, typeReference)
@@ -73,7 +73,7 @@
       reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
         listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
       parseFields(late, null, null, null, null, late, final, final, Instance of 'SimpleType', x4, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(late)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, late, final, late)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(x4)
         listener: handleType(int, null)
@@ -90,7 +90,7 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(late)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', x5, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(late, typeReference)
         listener: handleNoTypeArguments(x5)
         listener: handleType(late, null)
@@ -118,7 +118,7 @@
       listener: beginTopLevelMember(late)
       isReservedKeyword(;)
       parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', late, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(;)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         reportRecoverableError(late, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, late, late)
         listener: handleNoType(;)
@@ -338,7 +338,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -354,7 +354,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -362,7 +362,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', z1, DeclarationKind.Class, Foo, false)
-                listener: beginFields({)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(z1)
                 listener: handleType(int, null)
@@ -382,7 +382,7 @@
                 listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
               listener: beginMember()
               parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleType', z2, DeclarationKind.Class, Foo, false)
-                listener: beginFields(late)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(z2)
                 listener: handleType(int, null)
@@ -402,7 +402,7 @@
                 listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
               listener: beginMember()
               parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleTypeWith1Argument', x3, DeclarationKind.Class, Foo, false)
-                listener: beginFields(late)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(int, typeReference)
@@ -426,7 +426,7 @@
                 listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
               listener: beginMember()
               parseFields(late, null, null, null, null, late, final, final, Instance of 'SimpleType', z4, DeclarationKind.Class, Foo, false)
-                listener: beginFields(late)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, final, late)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(z4)
                 listener: handleType(int, null)
@@ -443,7 +443,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', z5, DeclarationKind.Class, Foo, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(late, typeReference)
                 listener: handleNoTypeArguments(z5)
                 listener: handleType(late, null)
@@ -472,7 +472,7 @@
               listener: beginMember()
               isReservedKeyword(;)
               parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', late, DeclarationKind.Class, Foo, false)
-                listener: beginFields(;)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
                 reportRecoverableError(late, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, late, late)
                 listener: handleNoType(;)
@@ -494,7 +494,7 @@
                 listener: handleInvalidMember(;)
                 listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 8, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(int)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
index 645cb48..6e58879 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
@@ -122,7 +122,7 @@
   endTopLevelDeclaration(class)
   beginMetadataStar(class)
   endMetadataStar(0)
-  beginClassOrNamedMixinApplicationPrelude(class)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
     beginClassDeclaration(class, null, Foo)
@@ -131,11 +131,11 @@
       handleClassNoWithClause()
       handleClassOrMixinImplements(null, 0)
       handleClassHeader(class, class, null)
-      beginClassOrMixinBody(DeclarationKind.Class, {)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(null, null, null, null, null, foo4)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo4)
             handleVoidKeyword(void)
             handleIdentifier(foo4, methodDeclaration)
             handleNoTypeVariables(()
@@ -169,7 +169,7 @@
             endBlockFunctionBody(1, {, })
           endClassMethod(null, void, (, null, })
         endMember()
-      endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
index 20f8cf3..476dd57 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
@@ -256,7 +256,7 @@
     parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
       parseClassOrNamedMixinApplication(null, class)
-        listener: beginClassOrNamedMixinApplicationPrelude(class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
@@ -272,7 +272,7 @@
               listener: handleClassOrMixinImplements(null, 0)
             listener: handleClassHeader(class, class, null)
           parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
-            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
             notEofOrValue(}, void)
             parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
               parseMetadataStar({)
@@ -280,7 +280,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               parseMethod({, null, null, null, null, null, null, {, Instance of 'VoidType', null, foo4, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(null, null, null, null, null, foo4)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo4)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo4, methodDeclaration)
@@ -361,7 +361,7 @@
                 listener: endClassMethod(null, void, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(void)
diff --git a/pkg/front_end/pubspec.yaml b/pkg/front_end/pubspec.yaml
index 9e67ea3..4fff6ab 100644
--- a/pkg/front_end/pubspec.yaml
+++ b/pkg/front_end/pubspec.yaml
@@ -9,37 +9,43 @@
   sdk: '>=2.13.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared:
-    path: ../_fe_analyzer_shared
+  _fe_analyzer_shared: any
   kernel:
     path: ../kernel
-  package_config:
-    path: ../../third_party/pkg_tested/package_config
+  package_config: any
 
 dev_dependencies:
-  analyzer:
-    path: ../analyzer
-  args: '>=0.13.0 <2.0.0'
+  analyzer: any
+  args: ^2.0.0
   async_helper:
     path: ../async_helper
   build_integration:
     path: ../build_integration
   compiler:
     path: ../compiler
-  dart_style: '^1.0.7'
+  dart_style: ^2.0.0
   dev_compiler:
     path: ../dev_compiler
   expect:
     path: ../expect
-  json_rpc_2: ^2.0.9
-  path: '^1.3.9'
+  json_rpc_2: ^3.0.0
+  path: ^1.3.9
   test: ^1.3.4
   testing:
     path: ../testing
-  test_reflective_loader: ^0.1.0
+  test_reflective_loader: ^0.2.0
   vm:
     path: ../vm
+  vm_service: any
+  web_socket_channel: ^2.0.0
+  yaml: any
+
+dependency_overrides:
+  analyzer:
+    path: ../analyzer
+  _fe_analyzer_shared:
+    path: ../_fe_analyzer_shared
+  package_config:
+    path: ../../third_party/pkg_tested/package_config
   vm_service:
     path: ../vm_service
-  web_socket_channel: ^1.0.4
-  yaml: any
diff --git a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
index d77e84e..dfd6efa 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
@@ -1309,7 +1309,7 @@
         shouldCompile = true;
         what = "enum";
       } else if (child.isTypedef()) {
-        DirectParserASTContentFunctionTypeAliasEnd decl = child.asTypedef();
+        DirectParserASTContentTypedefEnd decl = child.asTypedef();
         helper.replacements.add(new _Replacement(
             decl.typedefKeyword.offset - 1, decl.endToken.offset + 1));
         shouldCompile = true;
@@ -1371,8 +1371,8 @@
           if (child.isClass()) {
             // Also try to remove all content of the class.
             DirectParserASTContentClassDeclarationEnd decl = child.asClass();
-            DirectParserASTContentClassOrMixinBodyEnd body =
-                decl.getClassOrMixinBody();
+            DirectParserASTContentClassOrMixinOrExtensionBodyEnd body =
+                decl.getClassOrMixinOrExtensionBody();
             if (body.beginToken.offset + 2 < body.endToken.offset) {
               helper.replacements.add(new _Replacement(
                   body.beginToken.offset, body.endToken.offset));
@@ -1500,8 +1500,8 @@
             // Also try to remove all content of the mixin.
             DirectParserASTContentMixinDeclarationEnd decl =
                 child.asMixinDeclaration();
-            DirectParserASTContentClassOrMixinBodyEnd body =
-                decl.getClassOrMixinBody();
+            DirectParserASTContentClassOrMixinOrExtensionBodyEnd body =
+                decl.getClassOrMixinOrExtensionBody();
             if (body.beginToken.offset + 2 < body.endToken.offset) {
               helper.replacements.add(new _Replacement(
                   body.beginToken.offset, body.endToken.offset));
@@ -1767,7 +1767,8 @@
 
   bool _knownByCompiler(Uri uri) {
     LibraryBuilder? libraryBuilder = _latestCrashingIncrementalCompiler!
-        .userCode!.loader.builders[_getImportUri(uri)];
+        .userCode!.loader
+        .lookupLibraryBuilder(_getImportUri(uri));
     if (libraryBuilder != null) {
       return true;
     }
@@ -1785,13 +1786,14 @@
   bool _isUriNnbd(Uri uri, {bool crashOnFail: true}) {
     Uri asImportUri = _getImportUri(uri);
     LibraryBuilder? libraryBuilder = _latestCrashingIncrementalCompiler!
-        .userCode!.loader.builders[asImportUri];
+        .userCode!.loader
+        .lookupLibraryBuilder(asImportUri);
     if (libraryBuilder != null) {
       return libraryBuilder.isNonNullableByDefault;
     }
     print("Couldn't lookup $uri");
     for (LibraryBuilder libraryBuilder in _latestCrashingIncrementalCompiler!
-        .userCode!.loader.builders.values) {
+        .userCode!.loader.libraryBuilders) {
       if (libraryBuilder.importUri == uri) {
         print("Found $uri as ${libraryBuilder.importUri} (!= ${asImportUri})");
         return libraryBuilder.isNonNullableByDefault;
diff --git a/pkg/front_end/test/explicit_creation_git_test.dart b/pkg/front_end/test/explicit_creation_git_test.dart
index 287b605..5028925 100644
--- a/pkg/front_end/test/explicit_creation_git_test.dart
+++ b/pkg/front_end/test/explicit_creation_git_test.dart
@@ -16,8 +16,8 @@
 import 'package:front_end/src/fasta/builder/declaration_builder.dart';
 import 'package:front_end/src/fasta/builder/field_builder.dart';
 import 'package:front_end/src/fasta/builder/modifier_builder.dart';
+import 'package:front_end/src/fasta/builder/type_builder.dart';
 import 'package:front_end/src/fasta/builder/type_declaration_builder.dart';
-import 'package:front_end/src/fasta/builder/unresolved_type.dart';
 import 'package:front_end/src/fasta/compiler_context.dart';
 import 'package:front_end/src/fasta/constant_context.dart';
 import 'package:front_end/src/fasta/dill/dill_target.dart';
@@ -235,7 +235,7 @@
       Token nameLastToken,
       Arguments arguments,
       String name,
-      List<UnresolvedType> typeArguments,
+      List<TypeBuilder> typeArguments,
       int charOffset,
       Constness constness,
       {bool isTypeArgumentsInForest = false,
diff --git a/pkg/front_end/test/extensions/extensions_test.dart b/pkg/front_end/test/extensions/extensions_test.dart
index 2666476..5765b21 100644
--- a/pkg/front_end/test/extensions/extensions_test.dart
+++ b/pkg/front_end/test/extensions/extensions_test.dart
@@ -89,11 +89,11 @@
       Id id, List<FormattedMessage> errors) {
     Features features = new Features();
     for (FormattedMessage error in errors) {
-      if (error.message.contains(',')) {
+      if (error.problemMessage.contains(',')) {
         // TODO(johnniwinther): Support escaping of , in Features.
         features.addElement(Tags.errors, error.code);
       } else {
-        features.addElement(Tags.errors, error.message);
+        features.addElement(Tags.errors, error.problemMessage);
       }
     }
     return features;
diff --git a/pkg/front_end/test/fasta/messages_suite.dart b/pkg/front_end/test/fasta/messages_suite.dart
index 152fa07..99579c9 100644
--- a/pkg/front_end/test/fasta/messages_suite.dart
+++ b/pkg/front_end/test/fasta/messages_suite.dart
@@ -386,6 +386,19 @@
             }
             break;
 
+          case "documentation":
+            if (value is! String) {
+              throw new ArgumentError(
+                  'documentation should be a string: $value.');
+            }
+            break;
+
+          case "comment":
+            if (value is! String) {
+              throw new ArgumentError('comment should be a string: $value.');
+            }
+            break;
+
           default:
             unknownKeys.add(key);
         }
diff --git a/pkg/front_end/test/fasta/parser/testing.json b/pkg/front_end/test/fasta/parser/testing.json
index b3ae4c8..8265d1e 100644
--- a/pkg/front_end/test/fasta/parser/testing.json
+++ b/pkg/front_end/test/fasta/parser/testing.json
@@ -2,7 +2,7 @@
 "":"Copyright (c) 2016, 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.md file.",
-  "packages": "../../../../../.packages",
+  "packages": "../../../../../.dart_tool/package_config.json",
   "suites": [
     {
       "name": "parser",
diff --git a/pkg/front_end/test/fasta/scanner/testing.json b/pkg/front_end/test/fasta/scanner/testing.json
index be732cb..711f0cf 100644
--- a/pkg/front_end/test/fasta/scanner/testing.json
+++ b/pkg/front_end/test/fasta/scanner/testing.json
@@ -2,7 +2,7 @@
 "":"Copyright (c) 2016, 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.md file.",
-  "packages": "../../../../../.packages",
+  "packages": "../../../../../.dart_tool/package_config.json",
   "suites": [
     {
       "name": "scanner",
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 387f68f..0c88143 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -14,6 +14,8 @@
     show LanguageVersionToken, Token;
 
 import 'package:_fe_analyzer_shared/src/util/colors.dart' as colors;
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart'
+    show LibraryInfo;
 import 'package:_fe_analyzer_shared/src/util/options.dart';
 import 'package:compiler/src/kernel/dart2js_target.dart';
 import 'package:dev_compiler/src/kernel/target.dart';
@@ -41,9 +43,6 @@
 import 'package:front_end/src/api_prototype/standard_file_system.dart'
     show StandardFileSystem;
 
-import 'package:front_end/src/base/libraries_specification.dart'
-    show LibraryInfo;
-
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
 
@@ -73,6 +72,8 @@
 import 'package:front_end/src/fasta/kernel/kernel_target.dart'
     show KernelTarget;
 
+import 'package:front_end/src/fasta/kernel/utils.dart' show ByteSink;
+
 import 'package:front_end/src/fasta/messages.dart' show LocatedMessage;
 
 import 'package:front_end/src/fasta/ticker.dart' show Ticker;
@@ -108,6 +109,8 @@
         Visitor,
         VisitorVoidMixin;
 
+import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
+
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 
 import 'package:kernel/core_types.dart' show CoreTypes;
@@ -227,6 +230,7 @@
 
 const List<Option> folderOptionsSpecification = [
   Options.enableExperiment,
+  Options.enableUnscheduledExperiments,
   Options.forceLateLoweringSentinel,
   overwriteCurrentSdkVersion,
   Options.forceLateLowering,
@@ -261,6 +265,7 @@
 /// test folders.
 class FolderOptions {
   final Map<ExperimentalFlag, bool> _explicitExperimentalFlags;
+  final bool? enableUnscheduledExperiments;
   final int? forceLateLowerings;
   final bool? forceLateLoweringSentinel;
   final bool? forceStaticFieldLowering;
@@ -273,7 +278,8 @@
   final String? overwriteCurrentSdkVersion;
 
   FolderOptions(this._explicitExperimentalFlags,
-      {this.forceLateLowerings,
+      {this.enableUnscheduledExperiments,
+      this.forceLateLowerings,
       this.forceLateLoweringSentinel,
       this.forceStaticFieldLowering,
       this.forceNoExplicitGetterCalls,
@@ -441,6 +447,7 @@
   FolderOptions _computeFolderOptions(Directory directory) {
     FolderOptions? folderOptions = _folderOptions[directory.uri];
     if (folderOptions == null) {
+      bool? enableUnscheduledExperiments;
       int? forceLateLowering;
       bool? forceLateLoweringSentinel;
       bool? forceStaticFieldLowering;
@@ -452,6 +459,7 @@
       String target = "vm";
       if (directory.uri == baseUri) {
         folderOptions = new FolderOptions({},
+            enableUnscheduledExperiments: enableUnscheduledExperiments,
             forceLateLowerings: forceLateLowering,
             forceLateLoweringSentinel: forceLateLoweringSentinel,
             forceStaticFieldLowering: forceStaticFieldLowering,
@@ -473,6 +481,8 @@
               Options.enableExperiment.read(parsedOptions) ?? <String>[];
           String overwriteCurrentSdkVersionArgument =
               overwriteCurrentSdkVersion.read(parsedOptions);
+          enableUnscheduledExperiments =
+              Options.enableUnscheduledExperiments.read(parsedOptions);
           forceLateLoweringSentinel =
               Options.forceLateLoweringSentinel.read(parsedOptions);
           forceLateLowering = Options.forceLateLowering.read(parsedOptions);
@@ -499,6 +509,7 @@
                   onError: (String message) => throw new ArgumentError(message),
                   onWarning: (String message) =>
                       throw new ArgumentError(message)),
+              enableUnscheduledExperiments: enableUnscheduledExperiments,
               forceLateLowerings: forceLateLowering,
               forceLateLoweringSentinel: forceLateLoweringSentinel,
               forceStaticFieldLowering: forceStaticFieldLowering,
@@ -541,6 +552,8 @@
         }
         ..sdkRoot = sdk
         ..packagesFileUri = uriConfiguration.packageConfigUri ?? packages
+        ..enableUnscheduledExperiments =
+            folderOptions.enableUnscheduledExperiments ?? false
         ..environmentDefines = folderOptions.defines
         ..explicitExperimentalFlags = folderOptions
             .computeExplicitExperimentalFlags(explicitExperimentalFlags)
@@ -1094,6 +1107,8 @@
       ..onDiagnostic = (DiagnosticMessage message) {
         errors.add(message.plainTextFormatted);
       }
+      ..enableUnscheduledExperiments =
+          folderOptions.enableUnscheduledExperiments ?? false
       ..environmentDefines = folderOptions.defines
       ..explicitExperimentalFlags = experimentalFlags
       ..nnbdMode = nnbdMode
@@ -1102,6 +1117,7 @@
       ..experimentEnabledVersionForTesting = experimentEnabledVersion
       ..experimentReleasedVersionForTesting = experimentReleasedVersion
       ..skipPlatformVerification = true
+      ..omitPlatform = true
       ..target = createTarget(folderOptions, context);
     if (folderOptions.overwriteCurrentSdkVersion != null) {
       compilerOptions.currentSdkVersion =
@@ -1192,6 +1208,10 @@
         new IncrementalCompiler.fromComponent(
             new CompilerContext(compilationSetup.options), platform);
     final Component component = await incrementalCompiler.computeDelta();
+    if (!canSerialize(component)) {
+      return new Result<ComponentResult>(result, semiFuzzFailure,
+          "Couldn't serialize initial component for fuzzing");
+    }
 
     final Set<Uri> userLibraries =
         createUserLibrariesImportUriSet(component, uriTranslator);
@@ -1219,6 +1239,10 @@
       incrementalCompiler.invalidate(importUri);
       final Component newComponent =
           await incrementalCompiler.computeDelta(fullComponent: true);
+      if (!canSerialize(newComponent)) {
+        return new Result<ComponentResult>(
+            result, semiFuzzFailure, "Couldn't serialize fuzzed component");
+      }
 
       final Set<Uri> newUserLibraries =
           createUserLibrariesImportUriSet(newComponent, uriTranslator);
@@ -1273,6 +1297,17 @@
     return null;
   }
 
+  bool canSerialize(Component component) {
+    ByteSink byteSink = new ByteSink();
+    try {
+      new BinaryPrinter(byteSink).writeComponentFile(component);
+      return true;
+    } catch (e, st) {
+      print("Can't serialize, got '$e' from $st");
+      return false;
+    }
+  }
+
   /// Perform a number of compilations where each user-file is in turn sorted
   /// in both ascending and descending order (i.e. the procedures and classes
   /// etc are sorted).
@@ -1294,7 +1329,11 @@
     IncrementalCompiler incrementalCompiler =
         new IncrementalCompiler.fromComponent(
             new CompilerContext(compilationSetup.options), platform);
-    await incrementalCompiler.computeDelta();
+    Component initialComponent = await incrementalCompiler.computeDelta();
+    if (!canSerialize(initialComponent)) {
+      return new Result<ComponentResult>(result, semiFuzzFailure,
+          "Couldn't serialize initial component for fuzzing");
+    }
 
     final bool expectErrors = compilationSetup.errors.isNotEmpty;
     List<Iterable<String>> originalErrors =
@@ -1304,7 +1343,7 @@
     // Create lookup-table from file uri to whatever.
     Map<Uri, LibraryBuilder> builders = {};
     for (LibraryBuilder builder
-        in incrementalCompiler.userCode!.loader.builders.values) {
+        in incrementalCompiler.userCode!.loader.libraryBuilders) {
       if (builder.importUri.scheme == "dart" && !builder.isSynthetic) continue;
       builders[builder.fileUri] = builder;
       for (LibraryPart part in builder.library.parts) {
@@ -1353,7 +1392,11 @@
         incrementalCompiler = new IncrementalCompiler.fromComponent(
             new CompilerContext(compilationSetup.options), platform);
         try {
-          await incrementalCompiler.computeDelta();
+          Component component = await incrementalCompiler.computeDelta();
+          if (!canSerialize(component)) {
+            return new Result<ComponentResult>(
+                result, semiFuzzFailure, "Couldn't serialize fuzzed component");
+          }
         } catch (e, st) {
           return new Result<ComponentResult>(
               result,
@@ -1626,8 +1669,8 @@
   }
 
   @override
-  void visitTypedef(DirectParserASTContentFunctionTypeAliasEnd node,
-      Token startInclusive, Token endInclusive) {
+  void visitTypedef(DirectParserASTContentTypedefEnd node, Token startInclusive,
+      Token endInclusive) {
     handleData(FuzzSorterState.sortableRest, startInclusive, endInclusive);
   }
 }
diff --git a/pkg/front_end/test/fasta/tool_git_test.dart b/pkg/front_end/test/fasta/tool_git_test.dart
index fde2e4e..3755f18 100644
--- a/pkg/front_end/test/fasta/tool_git_test.dart
+++ b/pkg/front_end/test/fasta/tool_git_test.dart
@@ -54,7 +54,7 @@
   }
   Set<String> testedSubtools = new Set<String>.from(subtools)
       .difference(new Set<String>.from(unsafeTools));
-  String usage = messageFastaUsageShort.message;
+  String usage = messageFastaUsageShort.problemMessage;
   Map expectations = {
     "abcompile": {
       "exitCode": 1,
diff --git a/pkg/front_end/test/fasta/uri_translator_test.dart b/pkg/front_end/test/fasta/uri_translator_test.dart
index d186bea..37e3564 100644
--- a/pkg/front_end/test/fasta/uri_translator_test.dart
+++ b/pkg/front_end/test/fasta/uri_translator_test.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.9
 
-import 'package:front_end/src/base/libraries_specification.dart';
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart';
 import 'package:front_end/src/fasta/uri_translator.dart';
 import 'package:package_config/package_config.dart';
 import 'package:test/test.dart';
diff --git a/pkg/front_end/test/fasta/util/direct_parser_ast_test.dart b/pkg/front_end/test/fasta/util/direct_parser_ast_test.dart
index a393a6d..4e4a34d 100644
--- a/pkg/front_end/test/fasta/util/direct_parser_ast_test.dart
+++ b/pkg/front_end/test/fasta/util/direct_parser_ast_test.dart
@@ -43,10 +43,12 @@
         splitIntoChunks(ast, data);
         for (DirectParserASTContent child in ast.children) {
           if (child.isClass()) {
-            splitIntoChunks(child.asClass().getClassOrMixinBody(), data);
+            splitIntoChunks(
+                child.asClass().getClassOrMixinOrExtensionBody(), data);
           } else if (child.isMixinDeclaration()) {
             splitIntoChunks(
-                child.asMixinDeclaration().getClassOrMixinBody(), data);
+                child.asMixinDeclaration().getClassOrMixinOrExtensionBody(),
+                data);
           }
         }
       } catch (e, st) {
@@ -165,7 +167,7 @@
       cls.getClassWithClause();
   expect(null, withClauseDecl);
   List<DirectParserASTContentMemberEnd> members =
-      cls.getClassOrMixinBody().getMembers();
+      cls.getClassOrMixinOrExtensionBody().getMembers();
   expect(5, members.length);
   expect(members[0].isClassConstructor(), true);
   expect(members[1].isClassFactoryMethod(), true);
@@ -173,7 +175,8 @@
   expect(members[3].isClassMethod(), true);
   expect(members[4].isClassFields(), true);
 
-  List<String> chunks = splitIntoChunks(cls.getClassOrMixinBody(), data);
+  List<String> chunks =
+      splitIntoChunks(cls.getClassOrMixinOrExtensionBody(), data);
   expect(5, chunks.length);
   expect("""Foo() {
     // Constructor
@@ -208,7 +211,7 @@
 
   // TODO: Move (something like) this into the check-all-files-thing.
   for (DirectParserASTContentMemberEnd member
-      in cls.getClassOrMixinBody().getMembers()) {
+      in cls.getClassOrMixinOrExtensionBody().getMembers()) {
     if (member.isClassConstructor()) continue;
     if (member.isClassFactoryMethod()) continue;
     if (member.isClassFields()) continue;
@@ -225,7 +228,7 @@
   expect(null, implementsDecl.implementsKeyword?.lexeme);
   withClauseDecl = cls.getClassWithClause();
   expect("with", withClauseDecl.withKeyword.lexeme);
-  members = cls.getClassOrMixinBody().getMembers();
+  members = cls.getClassOrMixinOrExtensionBody().getMembers();
   expect(0, members.length);
 }
 
@@ -247,14 +250,15 @@
   expect("B", decl.getIdentifier().token.lexeme);
 
   List<DirectParserASTContentMemberEnd> members =
-      mxn.getClassOrMixinBody().getMembers();
+      mxn.getClassOrMixinOrExtensionBody().getMembers();
   expect(4, members.length);
   expect(members[0].isMixinFields(), true);
   expect(members[1].isMixinMethod(), true);
   expect(members[2].isMixinFactoryMethod(), true);
   expect(members[3].isMixinConstructor(), true);
 
-  List<String> chunks = splitIntoChunks(mxn.getClassOrMixinBody(), data);
+  List<String> chunks =
+      splitIntoChunks(mxn.getClassOrMixinOrExtensionBody(), data);
   expect(4, chunks.length);
   expect("static int staticField = 0;", chunks[0]);
   expect("""void foo() {
@@ -366,7 +370,7 @@
           namedMixinDecl.endToken.offset + namedMixinDecl.endToken.length)
     ];
   } else if (item.isTypedef()) {
-    DirectParserASTContentFunctionTypeAliasEnd typedefDecl = item.asTypedef();
+    DirectParserASTContentTypedefEnd typedefDecl = item.asTypedef();
     return [
       getCutContent(data, typedefDecl.typedefKeyword.offset,
           typedefDecl.endToken.offset + typedefDecl.endToken.length)
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index 30745c3..2ce5c81 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -1941,7 +1941,7 @@
         .computeDelta(entryPoints: entryPoints, fullComponent: fullComponent);
 
     // We should at least have the SDK builders available. Slight smoke test.
-    if (!dillLoadedData!.loader.builders.keys
+    if (!dillLoadedData!.loader.libraryImportUris
         .map((uri) => uri.toString())
         .contains("dart:core")) {
       throw "Loaders builder should contain the sdk, "
diff --git a/pkg/front_end/test/kernel_generator_test.dart b/pkg/front_end/test/kernel_generator_test.dart
index cf8ce12..275df00 100644
--- a/pkg/front_end/test/kernel_generator_test.dart
+++ b/pkg/front_end/test/kernel_generator_test.dart
@@ -20,9 +20,10 @@
         test;
 
 import 'package:front_end/src/api_prototype/front_end.dart'
-    show CompilerOptions;
+    show CompilerOptions, DiagnosticMessage;
 
-import 'package:front_end/src/fasta/fasta_codes.dart' show messageMissingMain;
+import 'package:front_end/src/fasta/fasta_codes.dart'
+    show FormattedMessage, messageMissingMain;
 
 import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
 
@@ -84,10 +85,11 @@
     });
 
     test('compiler requires a main method', () async {
-      var errors = [];
+      var errors = <DiagnosticMessage>[];
       var options = new CompilerOptions()..onDiagnostic = errors.add;
       await compileScript('a() => print("hi");', options: options);
-      expect(errors.first.message, messageMissingMain.message);
+      expect((errors.first as FormattedMessage).problemMessage,
+          messageMissingMain.problemMessage);
     });
 
     test('generated program contains source-info', () async {
diff --git a/pkg/front_end/test/lint_suite.dart b/pkg/front_end/test/lint_suite.dart
index af61e9a..130a452 100644
--- a/pkg/front_end/test/lint_suite.dart
+++ b/pkg/front_end/test/lint_suite.dart
@@ -169,7 +169,8 @@
       description.cache.firstToken = scanner.tokenize();
       description.cache.lineStarts = scanner.lineStarts;
 
-      Uri dotPackages = description.uri.resolve(".packages");
+      Uri dotPackages =
+          description.uri.resolve(".dart_tool/package_config.json");
       while (true) {
         if (new File.fromUri(dotPackages).existsSync()) {
           break;
@@ -178,7 +179,8 @@
         if (dotPackages.pathSegments.length < Uri.base.pathSegments.length) {
           break;
         }
-        dotPackages = dotPackages.resolve("../.packages");
+        dotPackages =
+            dotPackages.resolve("../../.dart_tool/package_config.json");
       }
 
       File dotPackagesFile = new File.fromUri(dotPackages);
diff --git a/pkg/front_end/test/messages_json_test.dart b/pkg/front_end/test/messages_json_test.dart
index dff07bd..8df7698 100644
--- a/pkg/front_end/test/messages_json_test.dart
+++ b/pkg/front_end/test/messages_json_test.dart
@@ -23,7 +23,7 @@
   for (int i = 0; i < Severity.values.length; i++) {
     Severity severity = Severity.values[i];
     Code code = new Code("MyCodeName");
-    Message message = new Message(code, message: '');
+    Message message = new Message(code, problemMessage: '');
     LocatedMessage locatedMessage1 =
         new LocatedMessage(Uri.parse("what:ever/fun_1.dart"), 117, 2, message);
     FormattedMessage formattedMessage2 = new FormattedMessage(
diff --git a/pkg/front_end/test/parser_suite.dart b/pkg/front_end/test/parser_suite.dart
index cdb9645..cb24755 100644
--- a/pkg/front_end/test/parser_suite.dart
+++ b/pkg/front_end/test/parser_suite.dart
@@ -526,9 +526,9 @@
           location,
           length,
           shortName,
-          message.message));
+          message.problemMessage));
     } else {
-      errors.add(message.message);
+      errors.add(message.problemMessage);
     }
 
     super.handleRecoverableError(message, startToken, endToken);
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index 4d45463..f82cd95 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -172,19 +172,19 @@
   }
 
   @override
-  void beginClassOrMixinBody(DeclarationKind kind, Token token) {
+  void beginClassOrMixinOrExtensionBody(DeclarationKind kind, Token token) {
     seen(token);
-    doPrint('beginClassOrMixinBody(' '$kind, ' '$token)');
+    doPrint('beginClassOrMixinOrExtensionBody(' '$kind, ' '$token)');
     indent++;
   }
 
   @override
-  void endClassOrMixinBody(
+  void endClassOrMixinOrExtensionBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
     seen(endToken);
-    doPrint('endClassOrMixinBody('
+    doPrint('endClassOrMixinOrExtensionBody('
         '$kind, '
         '$memberCount, '
         '$beginToken, '
@@ -192,9 +192,9 @@
   }
 
   @override
-  void beginClassOrNamedMixinApplicationPrelude(Token token) {
+  void beginClassOrMixinOrNamedMixinApplicationPrelude(Token token) {
     seen(token);
-    doPrint('beginClassOrNamedMixinApplicationPrelude(' '$token)');
+    doPrint('beginClassOrMixinOrNamedMixinApplicationPrelude(' '$token)');
     indent++;
   }
 
@@ -485,12 +485,13 @@
   }
 
   @override
-  void beginFactoryMethod(
-      Token lastConsumed, Token? externalToken, Token? constToken) {
+  void beginFactoryMethod(DeclarationKind declarationKind, Token lastConsumed,
+      Token? externalToken, Token? constToken) {
     seen(lastConsumed);
     seen(externalToken);
     seen(constToken);
     doPrint('beginFactoryMethod('
+        '$declarationKind, '
         '$lastConsumed, '
         '$externalToken, '
         '$constToken)');
@@ -879,21 +880,19 @@
   }
 
   @override
-  void beginFunctionTypeAlias(Token token) {
+  void beginTypedef(Token token) {
     seen(token);
-    doPrint('beginFunctionTypeAlias(' '$token)');
+    doPrint('beginTypedef(' '$token)');
     indent++;
   }
 
   @override
-  void endFunctionTypeAlias(
-      Token typedefKeyword, Token? equals, Token endToken) {
+  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
     indent--;
     seen(typedefKeyword);
     seen(equals);
     seen(endToken);
-    doPrint(
-        'endFunctionTypeAlias(' '$typedefKeyword, ' '$equals, ' '$endToken)');
+    doPrint('endTypedef(' '$typedefKeyword, ' '$equals, ' '$endToken)');
   }
 
   @override
@@ -1087,10 +1086,11 @@
   }
 
   @override
-  void endImplicitCreationExpression(Token token) {
+  void endImplicitCreationExpression(Token token, Token openAngleBracket) {
     indent--;
     seen(token);
-    doPrint('endImplicitCreationExpression(' '$token)');
+    seen(openAngleBracket);
+    doPrint('endImplicitCreationExpression(' '$token, ' '$openAngleBracket)');
   }
 
   @override
@@ -1288,6 +1288,7 @@
 
   @override
   void beginMethod(
+      DeclarationKind declarationKind,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1301,6 +1302,7 @@
     seen(getOrSet);
     seen(name);
     doPrint('beginMethod('
+        '$declarationKind, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -1668,9 +1670,31 @@
   }
 
   @override
-  void beginFields(Token lastConsumed) {
+  void beginFields(
+      DeclarationKind declarationKind,
+      Token? abstractToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      Token lastConsumed) {
+    seen(abstractToken);
+    seen(externalToken);
+    seen(staticToken);
+    seen(covariantToken);
+    seen(lateToken);
+    seen(varFinalOrConst);
     seen(lastConsumed);
-    doPrint('beginFields(' '$lastConsumed)');
+    doPrint('beginFields('
+        '$declarationKind, '
+        '$abstractToken, '
+        '$externalToken, '
+        '$staticToken, '
+        '$covariantToken, '
+        '$lateToken, '
+        '$varFinalOrConst, '
+        '$lastConsumed)');
     indent++;
   }
 
diff --git a/pkg/front_end/test/parser_test_listener_creator.dart b/pkg/front_end/test/parser_test_listener_creator.dart
index 508e479..c2c6df4 100644
--- a/pkg/front_end/test/parser_test_listener_creator.dart
+++ b/pkg/front_end/test/parser_test_listener_creator.dart
@@ -138,8 +138,14 @@
   }
 
   @override
-  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
-      Token varFinalOrConst, Token getOrSet, Token name) {
+  void beginMethod(
+      DeclarationKind declarationKind,
+      Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token varFinalOrConst,
+      Token getOrSet,
+      Token name) {
     currentMethodName = name.lexeme;
   }
 
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index 3ea2b0c..a6ba2ca 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -1651,10 +1651,14 @@
 
   @override
   Token parseImplicitCreationExpression(
-      Token token, TypeParamOrArgInfo typeArg) {
-    doPrint('parseImplicitCreationExpression(' '$token, ' '$typeArg)');
+      Token token, Token openAngleBracket, TypeParamOrArgInfo typeArg) {
+    doPrint('parseImplicitCreationExpression('
+        '$token, '
+        '$openAngleBracket, '
+        '$typeArg)');
     indent++;
-    var result = super.parseImplicitCreationExpression(token, typeArg);
+    var result =
+        super.parseImplicitCreationExpression(token, openAngleBracket, typeArg);
     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 ccc24c3..136e903 100644
--- a/pkg/front_end/test/parser_test_parser_creator.dart
+++ b/pkg/front_end/test/parser_test_parser_creator.dart
@@ -123,8 +123,14 @@
   }
 
   @override
-  void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
-      Token varFinalOrConst, Token getOrSet, Token name) {
+  void beginMethod(
+      DeclarationKind declarationKind,
+      Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token varFinalOrConst,
+      Token getOrSet,
+      Token name) {
     currentMethodName = name.lexeme;
   }
 
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 69249ea..5746a68 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -317,6 +317,7 @@
 deps
 dereferenced
 dereferencing
+deregister
 descent
 deserializer
 deserializers
@@ -395,6 +396,7 @@
 enforces
 enforcing
 engineered
+enhanced
 enters
 enumerates
 env
@@ -1075,6 +1077,7 @@
 risk
 rn
 rnystrom
+robust
 role
 room
 rooted
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index dd9f732..cad9efd 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -488,6 +488,7 @@
 closures
 clue
 code
+coincides
 coinductively
 collapses
 collect
@@ -1397,6 +1398,7 @@
 historically
 hoist
 hoisted
+hoisting
 hold
 holder
 holding
@@ -2413,6 +2415,7 @@
 reasons
 reassign
 rebase
+recalculates
 receive
 receiver
 recent
@@ -2574,6 +2577,7 @@
 resynthesize
 retain
 retained
+retains
 rethrow
 rethrowing
 retired
@@ -3218,6 +3222,7 @@
 unresolved
 unsafe
 unsatisfied
+unscheduled
 unserializable
 unsigned
 unsized
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 5d363a0..ffc3264 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -37,6 +37,7 @@
 guides
 h
 https
+interact
 interop
 intervening
 js_util
@@ -48,6 +49,7 @@
 name.stack
 nameokempty
 native('native
+nativefieldwrapperclass
 natively
 nativetype
 nnbd
@@ -65,6 +67,7 @@
 sdksummary
 solutions
 stacktrace
+staticinterop
 stringokempty
 struct<#name
 structs
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 82edba1..e6c4cf0 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -459,6 +459,7 @@
 futu
 futures
 fuzz
+fuzzed
 fuzzing
 fx
 g1a
@@ -903,6 +904,7 @@
 suite
 summarization
 summarized
+sup
 supermixin
 supplement
 suspension
diff --git a/pkg/front_end/test/src/base/processed_options_test.dart b/pkg/front_end/test/src/base/processed_options_test.dart
index b771f32..00c3a75 100644
--- a/pkg/front_end/test/src/base/processed_options_test.dart
+++ b/pkg/front_end/test/src/base/processed_options_test.dart
@@ -323,7 +323,7 @@
   }
 
   Future<void> test_getUriTranslator_noPackages() async {
-    var errors = [];
+    var errors = <DiagnosticMessage>[];
     // .packages file should be ignored.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///.packages'))
@@ -335,7 +335,7 @@
     var processed = new ProcessedOptions(options: raw);
     var uriTranslator = await processed.getUriTranslator();
     expect(uriTranslator.packages.packages, isEmpty);
-    expect(errors.single.message,
+    expect((errors.single as FormattedMessage).problemMessage,
         startsWith(_stringPrefixOf(templateCantReadFile)));
   }
 
@@ -343,13 +343,14 @@
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
         .writeAsStringSync('main(){}\n');
-    var errors = [];
+    var errors = <DiagnosticMessage>[];
     var raw = new CompilerOptions()
       ..fileSystem = fileSystem
       ..onDiagnostic = errors.add;
     var options = new ProcessedOptions(options: raw);
     var result = await options.validateOptions();
-    expect(errors.single.message, messageMissingInput.message);
+    expect((errors.single as FormattedMessage).problemMessage,
+        messageMissingInput.problemMessage);
     expect(result, isFalse);
   }
 
@@ -397,7 +398,7 @@
         .entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
         .writeAsStringSync('main(){}\n');
     var sdkRoot = Uri.parse('org-dartlang-test:///sdk/root');
-    var errors = [];
+    var errors = <DiagnosticMessage>[];
     var raw = new CompilerOptions()
       ..sdkRoot = sdkRoot
       ..fileSystem = fileSystem
@@ -405,7 +406,7 @@
     var options =
         new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     expect(await options.validateOptions(), isFalse);
-    expect(errors.first.message,
+    expect((errors.first as FormattedMessage).problemMessage,
         startsWith(_stringPrefixOf(templateSdkRootNotFound)));
   }
 
@@ -433,7 +434,7 @@
         .entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
         .writeAsStringSync('main(){}\n');
     var sdkSummary = Uri.parse('org-dartlang-test:///sdk/root/outline.dill');
-    var errors = [];
+    var errors = <DiagnosticMessage>[];
     var raw = new CompilerOptions()
       ..sdkSummary = sdkSummary
       ..fileSystem = fileSystem
@@ -441,7 +442,7 @@
     var options =
         new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     expect(await options.validateOptions(), isFalse);
-    expect(errors.single.message,
+    expect((errors.single as FormattedMessage).problemMessage,
         startsWith(_stringPrefixOf(templateSdkSummaryNotFound)));
   }
 
@@ -474,7 +475,7 @@
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
         .writeAsStringSync('main(){}\n');
-    var errors = [];
+    var errors = <DiagnosticMessage>[];
     var raw = new CompilerOptions()
       ..sdkSummary = sdkSummary
       ..fileSystem = fileSystem
@@ -482,14 +483,14 @@
     var options =
         new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
     expect(await options.validateOptions(), isFalse);
-    expect(errors.single.message,
+    expect((errors.single as FormattedMessage).problemMessage,
         startsWith(_stringPrefixOf(templateSdkSummaryNotFound)));
   }
 
   /// Returns the longest prefix of the text in a message template that doesn't
   /// mention a template argument.
   String _stringPrefixOf(Template template) {
-    var messageTemplate = template.messageTemplate;
+    var messageTemplate = template.problemMessageTemplate;
     var index = messageTemplate.indexOf('#');
     var prefix = messageTemplate.substring(0, index - 1);
 
diff --git a/pkg/front_end/test/static_types/analysis_helper.dart b/pkg/front_end/test/static_types/analysis_helper.dart
index cdfdfcc..2e57c0e 100644
--- a/pkg/front_end/test/static_types/analysis_helper.dart
+++ b/pkg/front_end/test/static_types/analysis_helper.dart
@@ -210,7 +210,7 @@
             // add ' (allowed)' to an existing message!
             LocatedMessage locatedMessage = message.locatedMessage;
             String newMessageText =
-                '${locatedMessage.messageObject.message} (allowed)';
+                '${locatedMessage.messageObject.problemMessage} (allowed)';
             message = locatedMessage.withFormatting(
                 format(
                     new LocatedMessage(
@@ -218,8 +218,9 @@
                         locatedMessage.charOffset,
                         locatedMessage.length,
                         new Message(locatedMessage.messageObject.code,
-                            message: newMessageText,
-                            tip: locatedMessage.messageObject.tip,
+                            problemMessage: newMessageText,
+                            correctionMessage:
+                                locatedMessage.messageObject.correctionMessage,
                             arguments: locatedMessage.messageObject.arguments)),
                     Severity.warning,
                     location:
diff --git a/pkg/front_end/test/static_types/cfe_allowed.json b/pkg/front_end/test/static_types/cfe_allowed.json
index cd3125e..adc8898 100644
--- a/pkg/front_end/test/static_types/cfe_allowed.json
+++ b/pkg/front_end/test/static_types/cfe_allowed.json
@@ -1,5 +1,5 @@
 {
-  "pkg/front_end/lib/src/base/libraries_specification.dart": {
+  "pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart": {
     "Dynamic invocation of 'toList'.": 1,
     "Dynamic invocation of 'map'.": 1,
     "Dynamic invocation of '[]='.": 1
@@ -24,4 +24,4 @@
   "pkg/_fe_analyzer_shared/lib/src/scanner/string_canonicalizer.dart": {
     "Dynamic invocation of '[]'.": 2
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/front_end/test/test_generator_test.dart b/pkg/front_end/test/test_generator_test.dart
index 23c8f54..2f009ea 100644
--- a/pkg/front_end/test/test_generator_test.dart
+++ b/pkg/front_end/test/test_generator_test.dart
@@ -66,7 +66,6 @@
 const Set<Code> ignoredCodes = {
   codeInvalidAssignmentError,
   codeTypeVariableInStaticContext,
-  codeNonInstanceTypeVariableUse,
   codeExtensionDeclaresInstanceField,
   codeExtraneousModifier,
 };
diff --git a/pkg/front_end/test/unit_test_suites_impl.dart b/pkg/front_end/test/unit_test_suites_impl.dart
index 3376bd2..997a51f 100644
--- a/pkg/front_end/test/unit_test_suites_impl.dart
+++ b/pkg/front_end/test/unit_test_suites_impl.dart
@@ -608,14 +608,26 @@
           });
           await exitPort.first;
           errorPort.close();
-          bool gotError = !await errorPort.isEmpty;
+          List<dynamic> allErrors = await errorPort.toList();
+          bool gotError = allErrors.isNotEmpty;
           if (gotError) {
+            print("Suite $naming encountered ${allErrors.length} error(s).");
+            print("Errors:");
+            for (int i = 0; i < allErrors.length; i++) {
+              print("-----------");
+              print("Error #$i:");
+              print(allErrors[i]);
+            }
+            print("-----------");
             timedOutOrCrash = true;
           }
           timer.cancel();
+          int seconds = stopwatch.elapsedMilliseconds ~/ 1000;
           if (!timedOutOrCrash) {
-            int seconds = stopwatch.elapsedMilliseconds ~/ 1000;
             print("Suite $naming finished (took ${seconds} seconds)");
+          } else {
+            print("Suite $naming finished badly (see above) "
+                "(took ${seconds} seconds)");
           }
           return timedOutOrCrash;
         } finally {
@@ -626,7 +638,7 @@
     }
   }
   // Wait for isolates to terminate and clean up.
-  Iterable<bool> timeouts = await Future.wait(futures);
+  Iterable<bool> timeoutsOrCrashes = await Future.wait(futures);
   resultsPort.close();
   logsPort.close();
   // Write results.json and logs.json.
@@ -638,9 +650,9 @@
       " ${logsJsonUri.toFilePath()}");
   print("Entire run took ${totalRuntime.elapsed}.");
   // Return with exit code 1 if at least one suite timed out.
-  bool timeout = timeouts.any((timeout) => timeout);
-  if (timeout) {
-    exitCode = 1;
+  bool timedOutOrCrashed = timeoutsOrCrashes.any((timeout) => timeout);
+  if (timedOutOrCrashed) {
+    throw "Crashed or timed out. Check stdout for more details.";
   } else {
     // The testing framework (package:testing) sets the exitCode to `1` if any
     // test failed, so we reset it here to indicate that the test runner was
diff --git a/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart
new file mode 100644
index 0000000..c8b971c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart
@@ -0,0 +1,103 @@
+// Copyright (c) 2021, 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:async';
+
+method<T extends Class, S extends int>(Class c, int i, T t, S s) {
+  c<int>; // ok
+  i<int>; // ok
+  t<int>; // ok
+  s<int>; // ok
+}
+
+test<T extends Class?, S extends int>(
+    Class? c1,
+    GetterCall c2,
+    int? i,
+    T t1,
+    T? t2,
+    S? s,
+    void Function<T>()? f1,
+    Never n,
+    dynamic d,
+    String a,
+    double b,
+    bool c,
+    FutureOr<Class> f2,
+    Function f3) {
+  c1<int>; // error
+  c2<int>; // error
+  i<int>; // error
+  t1<int>; // error
+  t2<int>; // error
+  s<int>; // error
+  f1<int>; // error
+  n<int>; // error
+  d<int>; // error
+  a<int>; // error
+  b<int>; // error
+  c<int>; // error
+  f2<int>; // error
+  f3<int>; // error
+}
+
+Class c1 = Class();
+Class? c2;
+GetterCall c3 = GetterCall();
+int i1 = 0;
+int? i2 = null;
+void Function<T>()? f1 = null;
+Never n = throw '';
+dynamic d = null;
+String a = '';
+double b = 0.5;
+bool c = true;
+FutureOr<Class> f2 = Class();
+Function f3 = () {};
+
+var topLevel1 = c1<int>; // ok
+var topLevel2 = i1<int>; // ok
+var topLevel3 = c2<int>; // error
+var topLevel4 = c3<int>; // error
+var topLevel5 = i2<int>; // error
+var topLevel6 = f1<int>; // error
+var topLevel7 = n<int>; // error
+var topLevel8 = d<int>; // error
+var topLevel9 = a<int>; // error
+var topLevel10 = b<int>; // error
+var topLevel11 = c<int>; // error
+var topLevel12 = f2<int>; // error
+var topLevel13 = f3<int>; // error
+
+class Class {
+  call<T>() {}
+}
+
+class GetterCall {
+  void Function<T>() get call => <T>() {};
+}
+
+extension Extension on int {
+  call<T>() {}
+}
+
+extension ExtensionGetter on double {
+  void Function<T>() get call => <T>() {};
+}
+
+extension ExtensionSetter on bool {
+  set call(void Function<T>() value) {}
+}
+
+extension Ambiguous1 on String {
+  call<T>() {}
+}
+
+extension Ambiguous2 on String {
+  call<T>() {}
+}
+
+main() {
+  method(Class(), 0, Class(), 0);
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.strong.expect
new file mode 100644
index 0000000..bb11cff
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.strong.expect
@@ -0,0 +1,319 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+//   i<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//   t1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+// Try changing the operand or remove the type arguments.
+//   t2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+// Try changing the operand or remove the type arguments.
+//   s<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+//   f1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+//   n<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   d<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   a<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+//   b<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+//   c<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   f2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+//   f3<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel3 = c2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel4 = c3<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel5 = i2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel6 = f1<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+// var topLevel7 = n<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+// var topLevel8 = d<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+// var topLevel9 = a<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+// var topLevel10 = b<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+// var topLevel11 = c<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel12 = f2<int>; // error
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+// var topLevel13 = f3<int>; // error
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic {}
+}
+class GetterCall extends core::Object {
+  synthetic constructor •() → self::GetterCall
+    : super core::Object::•()
+    ;
+  get call() → <T extends core::Object? = dynamic>() → void
+    return <T extends core::Object? = dynamic>() → void {};
+}
+extension Extension on core::int {
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+}
+extension ExtensionGetter on core::double {
+  get call = self::ExtensionGetter|get#call;
+}
+extension ExtensionSetter on core::bool {
+  set call = self::ExtensionSetter|set#call;
+}
+extension Ambiguous1 on core::String {
+  method call = self::Ambiguous1|call;
+  tearoff call = self::Ambiguous1|get#call;
+}
+extension Ambiguous2 on core::String {
+  method call = self::Ambiguous2|call;
+  tearoff call = self::Ambiguous2|get#call;
+}
+static field self::Class c1 = new self::Class::•();
+static field self::Class? c2;
+static field self::GetterCall c3 = new self::GetterCall::•();
+static field core::int i1 = 0;
+static field core::int? i2 = null;
+static field <T extends core::Object? = dynamic>() →? void f1 = null;
+static field Never n = throw "";
+static field dynamic d = null;
+static field core::String a = "";
+static field core::double b = 0.5;
+static field core::bool c = true;
+static field FutureOr<self::Class>f2 = new self::Class::•();
+static field core::Function f3 = () → Null {};
+static field () → dynamic topLevel1 = self::c1.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+static field () → dynamic topLevel2 = self::Extension|get#call(self::i1)<core::int>;
+static field invalid-type topLevel3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel3 = c2<int>; // error
+                  ^";
+static field invalid-type topLevel4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel4 = c3<int>; // error
+                  ^";
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+var topLevel5 = i2<int>; // error
+                  ^";
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+var topLevel6 = f1<int>; // error
+                  ^";
+static field invalid-type topLevel7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+var topLevel7 = n<int>; // error
+                 ^";
+static field invalid-type topLevel8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+var topLevel8 = d<int>; // error
+                 ^";
+static field invalid-type topLevel9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+var topLevel9 = a<int>; // error
+                 ^";
+static field invalid-type topLevel10 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+var topLevel10 = b<int>; // error
+                  ^";
+static field invalid-type topLevel11 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+var topLevel11 = c<int>; // error
+                  ^";
+static field invalid-type topLevel12 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel12 = f2<int>; // error
+                   ^";
+static field invalid-type topLevel13 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+var topLevel13 = f3<int>; // error
+                   ^";
+static method method<T extends self::Class, S extends core::int>(self::Class c, core::int i, self::method::T t, self::method::S s) → dynamic {
+  c.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(i)<core::int>;
+  t.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(s)<core::int>;
+}
+static method test<T extends self::Class?, S extends core::int>(self::Class? c1, self::GetterCall c2, core::int? i, self::test::T% t1, self::test::T? t2, self::test::S? s, <T extends core::Object? = dynamic>() →? void f1, Never n, dynamic d, core::String a, core::double b, core::bool c, FutureOr<self::Class>f2, core::Function f3) → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+  i<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+  t1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+Try changing the operand or remove the type arguments.
+  t2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+Try changing the operand or remove the type arguments.
+  s<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+  f1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+  n<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  d<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  a<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+  b<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+  c<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  f2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+  f3<int>; // error
+    ^";
+}
+static method Extension|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method Extension|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Extension|call<T%>(#this);
+static method ExtensionGetter|get#call(lowered final core::double #this) → <T extends core::Object? = dynamic>() → void
+  return <T extends core::Object? = dynamic>() → void {};
+static method ExtensionSetter|set#call(lowered final core::bool #this, <T extends core::Object? = dynamic>() → void value) → void {}
+static method Ambiguous1|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous1|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous1|call<T%>(#this);
+static method Ambiguous2|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous2|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous2|call<T%>(#this);
+static method main() → dynamic {
+  self::method<self::Class, core::int>(new self::Class::•(), 0, new self::Class::•(), 0);
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.strong.transformed.expect
new file mode 100644
index 0000000..bb11cff
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.strong.transformed.expect
@@ -0,0 +1,319 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+//   i<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//   t1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+// Try changing the operand or remove the type arguments.
+//   t2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+// Try changing the operand or remove the type arguments.
+//   s<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+//   f1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+//   n<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   d<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   a<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+//   b<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+//   c<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   f2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+//   f3<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel3 = c2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel4 = c3<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel5 = i2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel6 = f1<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+// var topLevel7 = n<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+// var topLevel8 = d<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+// var topLevel9 = a<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+// var topLevel10 = b<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+// var topLevel11 = c<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel12 = f2<int>; // error
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+// var topLevel13 = f3<int>; // error
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic {}
+}
+class GetterCall extends core::Object {
+  synthetic constructor •() → self::GetterCall
+    : super core::Object::•()
+    ;
+  get call() → <T extends core::Object? = dynamic>() → void
+    return <T extends core::Object? = dynamic>() → void {};
+}
+extension Extension on core::int {
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+}
+extension ExtensionGetter on core::double {
+  get call = self::ExtensionGetter|get#call;
+}
+extension ExtensionSetter on core::bool {
+  set call = self::ExtensionSetter|set#call;
+}
+extension Ambiguous1 on core::String {
+  method call = self::Ambiguous1|call;
+  tearoff call = self::Ambiguous1|get#call;
+}
+extension Ambiguous2 on core::String {
+  method call = self::Ambiguous2|call;
+  tearoff call = self::Ambiguous2|get#call;
+}
+static field self::Class c1 = new self::Class::•();
+static field self::Class? c2;
+static field self::GetterCall c3 = new self::GetterCall::•();
+static field core::int i1 = 0;
+static field core::int? i2 = null;
+static field <T extends core::Object? = dynamic>() →? void f1 = null;
+static field Never n = throw "";
+static field dynamic d = null;
+static field core::String a = "";
+static field core::double b = 0.5;
+static field core::bool c = true;
+static field FutureOr<self::Class>f2 = new self::Class::•();
+static field core::Function f3 = () → Null {};
+static field () → dynamic topLevel1 = self::c1.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+static field () → dynamic topLevel2 = self::Extension|get#call(self::i1)<core::int>;
+static field invalid-type topLevel3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel3 = c2<int>; // error
+                  ^";
+static field invalid-type topLevel4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel4 = c3<int>; // error
+                  ^";
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+var topLevel5 = i2<int>; // error
+                  ^";
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+var topLevel6 = f1<int>; // error
+                  ^";
+static field invalid-type topLevel7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+var topLevel7 = n<int>; // error
+                 ^";
+static field invalid-type topLevel8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+var topLevel8 = d<int>; // error
+                 ^";
+static field invalid-type topLevel9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+var topLevel9 = a<int>; // error
+                 ^";
+static field invalid-type topLevel10 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+var topLevel10 = b<int>; // error
+                  ^";
+static field invalid-type topLevel11 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+var topLevel11 = c<int>; // error
+                  ^";
+static field invalid-type topLevel12 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel12 = f2<int>; // error
+                   ^";
+static field invalid-type topLevel13 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+var topLevel13 = f3<int>; // error
+                   ^";
+static method method<T extends self::Class, S extends core::int>(self::Class c, core::int i, self::method::T t, self::method::S s) → dynamic {
+  c.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(i)<core::int>;
+  t.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(s)<core::int>;
+}
+static method test<T extends self::Class?, S extends core::int>(self::Class? c1, self::GetterCall c2, core::int? i, self::test::T% t1, self::test::T? t2, self::test::S? s, <T extends core::Object? = dynamic>() →? void f1, Never n, dynamic d, core::String a, core::double b, core::bool c, FutureOr<self::Class>f2, core::Function f3) → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+  i<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+  t1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+Try changing the operand or remove the type arguments.
+  t2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+Try changing the operand or remove the type arguments.
+  s<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+  f1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+  n<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  d<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  a<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+  b<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+  c<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  f2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+  f3<int>; // error
+    ^";
+}
+static method Extension|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method Extension|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Extension|call<T%>(#this);
+static method ExtensionGetter|get#call(lowered final core::double #this) → <T extends core::Object? = dynamic>() → void
+  return <T extends core::Object? = dynamic>() → void {};
+static method ExtensionSetter|set#call(lowered final core::bool #this, <T extends core::Object? = dynamic>() → void value) → void {}
+static method Ambiguous1|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous1|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous1|call<T%>(#this);
+static method Ambiguous2|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous2|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous2|call<T%>(#this);
+static method main() → dynamic {
+  self::method<self::Class, core::int>(new self::Class::•(), 0, new self::Class::•(), 0);
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.textual_outline.expect
new file mode 100644
index 0000000..1828544
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.textual_outline.expect
@@ -0,0 +1,74 @@
+import 'dart:async';
+
+method<T extends Class, S extends int>(Class c, int i, T t, S s) {}
+test<T extends Class?, S extends int>(
+    Class? c1,
+    GetterCall c2,
+    int? i,
+    T t1,
+    T? t2,
+    S? s,
+    void Function<T>()? f1,
+    Never n,
+    dynamic d,
+    String a,
+    double b,
+    bool c,
+    FutureOr<Class> f2,
+    Function f3) {}
+Class c1 = Class();
+Class? c2;
+GetterCall c3 = GetterCall();
+int i1 = 0;
+int? i2 = null;
+void Function<T>()? f1 = null;
+Never n = throw '';
+dynamic d = null;
+String a = '';
+double b = 0.5;
+bool c = true;
+FutureOr<Class> f2 = Class();
+Function f3 = () {};
+var topLevel1 = c1<int>;
+var topLevel2 = i1<int>;
+var topLevel3 = c2<int>;
+var topLevel4 = c3<int>;
+var topLevel5 = i2<int>;
+var topLevel6 = f1<int>;
+var topLevel7 = n<int>;
+var topLevel8 = d<int>;
+var topLevel9 = a<int>;
+var topLevel10 = b<int>;
+var topLevel11 = c<int>;
+var topLevel12 = f2<int>;
+var topLevel13 = f3<int>;
+
+class Class {
+  call<T>() {}
+}
+
+class GetterCall {
+  void Function<T>() get call => <T>() {};
+}
+
+extension Extension on int {
+  call<T>() {}
+}
+
+extension ExtensionGetter on double {
+  void Function<T>() get call => <T>() {};
+}
+
+extension ExtensionSetter on bool {
+  set call(void Function<T>() value) {}
+}
+
+extension Ambiguous1 on String {
+  call<T>() {}
+}
+
+extension Ambiguous2 on String {
+  call<T>() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3b6ec7e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.textual_outline_modelled.expect
@@ -0,0 +1,75 @@
+import 'dart:async';
+
+Class? c2;
+Class c1 = Class();
+Function f3 = () {};
+FutureOr<Class> f2 = Class();
+GetterCall c3 = GetterCall();
+Never n = throw '';
+String a = '';
+bool c = true;
+
+class Class {
+  call<T>() {}
+}
+
+class GetterCall {
+  void Function<T>() get call => <T>() {};
+}
+
+double b = 0.5;
+dynamic d = null;
+
+extension Ambiguous1 on String {
+  call<T>() {}
+}
+
+extension Ambiguous2 on String {
+  call<T>() {}
+}
+
+extension Extension on int {
+  call<T>() {}
+}
+
+extension ExtensionGetter on double {
+  void Function<T>() get call => <T>() {};
+}
+
+extension ExtensionSetter on bool {
+  set call(void Function<T>() value) {}
+}
+
+int? i2 = null;
+int i1 = 0;
+main() {}
+method<T extends Class, S extends int>(Class c, int i, T t, S s) {}
+test<T extends Class?, S extends int>(
+    Class? c1,
+    GetterCall c2,
+    int? i,
+    T t1,
+    T? t2,
+    S? s,
+    void Function<T>()? f1,
+    Never n,
+    dynamic d,
+    String a,
+    double b,
+    bool c,
+    FutureOr<Class> f2,
+    Function f3) {}
+var topLevel1 = c1<int>;
+var topLevel10 = b<int>;
+var topLevel11 = c<int>;
+var topLevel12 = f2<int>;
+var topLevel13 = f3<int>;
+var topLevel2 = i1<int>;
+var topLevel3 = c2<int>;
+var topLevel4 = c3<int>;
+var topLevel5 = i2<int>;
+var topLevel6 = f1<int>;
+var topLevel7 = n<int>;
+var topLevel8 = d<int>;
+var topLevel9 = a<int>;
+void Function<T>()? f1 = null;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.expect
new file mode 100644
index 0000000..bb11cff
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.expect
@@ -0,0 +1,319 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+//   i<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//   t1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+// Try changing the operand or remove the type arguments.
+//   t2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+// Try changing the operand or remove the type arguments.
+//   s<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+//   f1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+//   n<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   d<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   a<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+//   b<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+//   c<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   f2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+//   f3<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel3 = c2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel4 = c3<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel5 = i2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel6 = f1<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+// var topLevel7 = n<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+// var topLevel8 = d<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+// var topLevel9 = a<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+// var topLevel10 = b<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+// var topLevel11 = c<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel12 = f2<int>; // error
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+// var topLevel13 = f3<int>; // error
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic {}
+}
+class GetterCall extends core::Object {
+  synthetic constructor •() → self::GetterCall
+    : super core::Object::•()
+    ;
+  get call() → <T extends core::Object? = dynamic>() → void
+    return <T extends core::Object? = dynamic>() → void {};
+}
+extension Extension on core::int {
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+}
+extension ExtensionGetter on core::double {
+  get call = self::ExtensionGetter|get#call;
+}
+extension ExtensionSetter on core::bool {
+  set call = self::ExtensionSetter|set#call;
+}
+extension Ambiguous1 on core::String {
+  method call = self::Ambiguous1|call;
+  tearoff call = self::Ambiguous1|get#call;
+}
+extension Ambiguous2 on core::String {
+  method call = self::Ambiguous2|call;
+  tearoff call = self::Ambiguous2|get#call;
+}
+static field self::Class c1 = new self::Class::•();
+static field self::Class? c2;
+static field self::GetterCall c3 = new self::GetterCall::•();
+static field core::int i1 = 0;
+static field core::int? i2 = null;
+static field <T extends core::Object? = dynamic>() →? void f1 = null;
+static field Never n = throw "";
+static field dynamic d = null;
+static field core::String a = "";
+static field core::double b = 0.5;
+static field core::bool c = true;
+static field FutureOr<self::Class>f2 = new self::Class::•();
+static field core::Function f3 = () → Null {};
+static field () → dynamic topLevel1 = self::c1.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+static field () → dynamic topLevel2 = self::Extension|get#call(self::i1)<core::int>;
+static field invalid-type topLevel3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel3 = c2<int>; // error
+                  ^";
+static field invalid-type topLevel4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel4 = c3<int>; // error
+                  ^";
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+var topLevel5 = i2<int>; // error
+                  ^";
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+var topLevel6 = f1<int>; // error
+                  ^";
+static field invalid-type topLevel7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+var topLevel7 = n<int>; // error
+                 ^";
+static field invalid-type topLevel8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+var topLevel8 = d<int>; // error
+                 ^";
+static field invalid-type topLevel9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+var topLevel9 = a<int>; // error
+                 ^";
+static field invalid-type topLevel10 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+var topLevel10 = b<int>; // error
+                  ^";
+static field invalid-type topLevel11 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+var topLevel11 = c<int>; // error
+                  ^";
+static field invalid-type topLevel12 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel12 = f2<int>; // error
+                   ^";
+static field invalid-type topLevel13 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+var topLevel13 = f3<int>; // error
+                   ^";
+static method method<T extends self::Class, S extends core::int>(self::Class c, core::int i, self::method::T t, self::method::S s) → dynamic {
+  c.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(i)<core::int>;
+  t.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(s)<core::int>;
+}
+static method test<T extends self::Class?, S extends core::int>(self::Class? c1, self::GetterCall c2, core::int? i, self::test::T% t1, self::test::T? t2, self::test::S? s, <T extends core::Object? = dynamic>() →? void f1, Never n, dynamic d, core::String a, core::double b, core::bool c, FutureOr<self::Class>f2, core::Function f3) → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+  i<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+  t1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+Try changing the operand or remove the type arguments.
+  t2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+Try changing the operand or remove the type arguments.
+  s<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+  f1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+  n<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  d<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  a<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+  b<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+  c<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  f2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+  f3<int>; // error
+    ^";
+}
+static method Extension|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method Extension|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Extension|call<T%>(#this);
+static method ExtensionGetter|get#call(lowered final core::double #this) → <T extends core::Object? = dynamic>() → void
+  return <T extends core::Object? = dynamic>() → void {};
+static method ExtensionSetter|set#call(lowered final core::bool #this, <T extends core::Object? = dynamic>() → void value) → void {}
+static method Ambiguous1|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous1|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous1|call<T%>(#this);
+static method Ambiguous2|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous2|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous2|call<T%>(#this);
+static method main() → dynamic {
+  self::method<self::Class, core::int>(new self::Class::•(), 0, new self::Class::•(), 0);
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.outline.expect
new file mode 100644
index 0000000..8f35528
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.outline.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic
+    ;
+}
+class GetterCall extends core::Object {
+  synthetic constructor •() → self::GetterCall
+    ;
+  get call() → <T extends core::Object? = dynamic>() → void
+    ;
+}
+extension Extension on core::int {
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+}
+extension ExtensionGetter on core::double {
+  get call = self::ExtensionGetter|get#call;
+}
+extension ExtensionSetter on core::bool {
+  set call = self::ExtensionSetter|set#call;
+}
+extension Ambiguous1 on core::String {
+  method call = self::Ambiguous1|call;
+  tearoff call = self::Ambiguous1|get#call;
+}
+extension Ambiguous2 on core::String {
+  method call = self::Ambiguous2|call;
+  tearoff call = self::Ambiguous2|get#call;
+}
+static field self::Class c1;
+static field self::Class? c2;
+static field self::GetterCall c3;
+static field core::int i1;
+static field core::int? i2;
+static field <T extends core::Object? = dynamic>() →? void f1;
+static field Never n;
+static field dynamic d;
+static field core::String a;
+static field core::double b;
+static field core::bool c;
+static field FutureOr<self::Class>f2;
+static field core::Function f3;
+static field () → dynamic topLevel1;
+static field () → dynamic topLevel2;
+static field invalid-type topLevel3;
+static field invalid-type topLevel4;
+static field invalid-type topLevel5;
+static field invalid-type topLevel6;
+static field invalid-type topLevel7;
+static field invalid-type topLevel8;
+static field invalid-type topLevel9;
+static field invalid-type topLevel10;
+static field invalid-type topLevel11;
+static field invalid-type topLevel12;
+static field invalid-type topLevel13;
+static method method<T extends self::Class, S extends core::int>(self::Class c, core::int i, self::method::T t, self::method::S s) → dynamic
+  ;
+static method test<T extends self::Class?, S extends core::int>(self::Class? c1, self::GetterCall c2, core::int? i, self::test::T% t1, self::test::T? t2, self::test::S? s, <T extends core::Object? = dynamic>() →? void f1, Never n, dynamic d, core::String a, core::double b, core::bool c, FutureOr<self::Class>f2, core::Function f3) → dynamic
+  ;
+static method Extension|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic
+  ;
+static method Extension|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Extension|call<T%>(#this);
+static method ExtensionGetter|get#call(lowered final core::double #this) → <T extends core::Object? = dynamic>() → void
+  ;
+static method ExtensionSetter|set#call(lowered final core::bool #this, <T extends core::Object? = dynamic>() → void value) → void
+  ;
+static method Ambiguous1|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic
+  ;
+static method Ambiguous1|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous1|call<T%>(#this);
+static method Ambiguous2|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic
+  ;
+static method Ambiguous2|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous2|call<T%>(#this);
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.transformed.expect
new file mode 100644
index 0000000..bb11cff
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.transformed.expect
@@ -0,0 +1,319 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+//   i<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//   t1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+// Try changing the operand or remove the type arguments.
+//   t2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+// Try changing the operand or remove the type arguments.
+//   s<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+//   f1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+//   n<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   d<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   a<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+//   b<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+//   c<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   f2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+//   f3<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel3 = c2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel4 = c3<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel5 = i2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel6 = f1<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+// var topLevel7 = n<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+// var topLevel8 = d<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+// var topLevel9 = a<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+// var topLevel10 = b<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+// var topLevel11 = c<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel12 = f2<int>; // error
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+// var topLevel13 = f3<int>; // error
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic {}
+}
+class GetterCall extends core::Object {
+  synthetic constructor •() → self::GetterCall
+    : super core::Object::•()
+    ;
+  get call() → <T extends core::Object? = dynamic>() → void
+    return <T extends core::Object? = dynamic>() → void {};
+}
+extension Extension on core::int {
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+}
+extension ExtensionGetter on core::double {
+  get call = self::ExtensionGetter|get#call;
+}
+extension ExtensionSetter on core::bool {
+  set call = self::ExtensionSetter|set#call;
+}
+extension Ambiguous1 on core::String {
+  method call = self::Ambiguous1|call;
+  tearoff call = self::Ambiguous1|get#call;
+}
+extension Ambiguous2 on core::String {
+  method call = self::Ambiguous2|call;
+  tearoff call = self::Ambiguous2|get#call;
+}
+static field self::Class c1 = new self::Class::•();
+static field self::Class? c2;
+static field self::GetterCall c3 = new self::GetterCall::•();
+static field core::int i1 = 0;
+static field core::int? i2 = null;
+static field <T extends core::Object? = dynamic>() →? void f1 = null;
+static field Never n = throw "";
+static field dynamic d = null;
+static field core::String a = "";
+static field core::double b = 0.5;
+static field core::bool c = true;
+static field FutureOr<self::Class>f2 = new self::Class::•();
+static field core::Function f3 = () → Null {};
+static field () → dynamic topLevel1 = self::c1.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+static field () → dynamic topLevel2 = self::Extension|get#call(self::i1)<core::int>;
+static field invalid-type topLevel3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel3 = c2<int>; // error
+                  ^";
+static field invalid-type topLevel4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel4 = c3<int>; // error
+                  ^";
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+var topLevel5 = i2<int>; // error
+                  ^";
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+var topLevel6 = f1<int>; // error
+                  ^";
+static field invalid-type topLevel7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+var topLevel7 = n<int>; // error
+                 ^";
+static field invalid-type topLevel8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+var topLevel8 = d<int>; // error
+                 ^";
+static field invalid-type topLevel9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+var topLevel9 = a<int>; // error
+                 ^";
+static field invalid-type topLevel10 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+var topLevel10 = b<int>; // error
+                  ^";
+static field invalid-type topLevel11 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+var topLevel11 = c<int>; // error
+                  ^";
+static field invalid-type topLevel12 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel12 = f2<int>; // error
+                   ^";
+static field invalid-type topLevel13 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+var topLevel13 = f3<int>; // error
+                   ^";
+static method method<T extends self::Class, S extends core::int>(self::Class c, core::int i, self::method::T t, self::method::S s) → dynamic {
+  c.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(i)<core::int>;
+  t.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(s)<core::int>;
+}
+static method test<T extends self::Class?, S extends core::int>(self::Class? c1, self::GetterCall c2, core::int? i, self::test::T% t1, self::test::T? t2, self::test::S? s, <T extends core::Object? = dynamic>() →? void f1, Never n, dynamic d, core::String a, core::double b, core::bool c, FutureOr<self::Class>f2, core::Function f3) → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+  i<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+  t1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+Try changing the operand or remove the type arguments.
+  t2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+Try changing the operand or remove the type arguments.
+  s<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+  f1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+  n<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  d<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  a<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+  b<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+  c<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  f2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+  f3<int>; // error
+    ^";
+}
+static method Extension|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method Extension|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Extension|call<T%>(#this);
+static method ExtensionGetter|get#call(lowered final core::double #this) → <T extends core::Object? = dynamic>() → void
+  return <T extends core::Object? = dynamic>() → void {};
+static method ExtensionSetter|set#call(lowered final core::bool #this, <T extends core::Object? = dynamic>() → void value) → void {}
+static method Ambiguous1|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous1|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous1|call<T%>(#this);
+static method Ambiguous2|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous2|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous2|call<T%>(#this);
+static method main() → dynamic {
+  self::method<self::Class, core::int>(new self::Class::•(), 0, new self::Class::•(), 0);
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect
index 107b186..ace8876 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect
@@ -5,7 +5,7 @@
 typedef B<T extends core::Object? = dynamic> = self::A<T%>;
 typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -14,54 +14,55 @@
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
     return new self::A::•<self::A::redirect::T%>();
 }
-static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-static const field () → self::A<core::int> b = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-static const field () → self::A<core::int> d = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-static const field () → self::A<core::int> f = #C6;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-static const field () → self::A<core::int> h = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-static const field () → self::A<core::int> j = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-static const field () → self::A<core::int> l = #C6;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-static const field () → self::A<core::int> n = #C2;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-static const field () → self::A<core::int> p = #C4;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-static const field () → self::A<core::int> r = #C6;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+static const field () → self::A<core::int> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+static const field () → self::A<core::int> d = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+static const field () → self::A<core::int> f = #C7;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+static const field () → self::A<core::int> h = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+static const field () → self::A<core::int> j = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+static const field () → self::A<core::int> l = #C7;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+static const field () → self::A<core::int> n = #C3;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+static const field () → self::A<core::int> p = #C5;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+static const field () → self::A<core::int> r = #C7;
 static method test() → dynamic {
-  <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-  () → self::A<core::int> b = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-  () → self::A<core::int> d = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-  () → self::A<core::int> f = #C6;
-  <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-  () → self::A<core::int> h = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-  () → self::A<core::int> j = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-  () → self::A<core::int> l = #C6;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-  () → self::A<core::int> n = #C2;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-  () → self::A<core::int> p = #C4;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-  () → self::A<core::int> r = #C6;
+  <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+  () → self::A<core::int> b = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+  () → self::A<core::int> d = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+  () → self::A<core::int> f = #C7;
+  <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+  () → self::A<core::int> h = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+  () → self::A<core::int> j = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+  () → self::A<core::int> l = #C7;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+  () → self::A<core::int> n = #C3;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+  () → self::A<core::int> p = #C5;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+  () → self::A<core::int> r = #C7;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int>
-  #C3 = static-tearoff self::A::fact
-  #C4 = instantiation self::A::fact <core::int>
-  #C5 = redirecting-factory-tearoff self::A::redirect
-  #C6 = instantiation self::A::redirect <core::int>
-  #C7 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C1<core::int>)
-  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C3<core::int>)
-  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C5<core::int>)
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = constructor-tearoff self::A::•
+  #C3 = instantiation #C2 <core::int>
+  #C4 = constructor-tearoff self::A::fact
+  #C5 = instantiation #C4 <core::int>
+  #C6 = redirecting-factory-tearoff self::A::redirect
+  #C7 = instantiation #C6 <core::int>
+  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C2<core::int>)
+  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C4<core::int>)
+  #C10 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C6<core::int>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect
index 107b186..ace8876 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 typedef B<T extends core::Object? = dynamic> = self::A<T%>;
 typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -14,54 +14,55 @@
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
     return new self::A::•<self::A::redirect::T%>();
 }
-static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-static const field () → self::A<core::int> b = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-static const field () → self::A<core::int> d = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-static const field () → self::A<core::int> f = #C6;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-static const field () → self::A<core::int> h = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-static const field () → self::A<core::int> j = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-static const field () → self::A<core::int> l = #C6;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-static const field () → self::A<core::int> n = #C2;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-static const field () → self::A<core::int> p = #C4;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-static const field () → self::A<core::int> r = #C6;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+static const field () → self::A<core::int> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+static const field () → self::A<core::int> d = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+static const field () → self::A<core::int> f = #C7;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+static const field () → self::A<core::int> h = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+static const field () → self::A<core::int> j = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+static const field () → self::A<core::int> l = #C7;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+static const field () → self::A<core::int> n = #C3;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+static const field () → self::A<core::int> p = #C5;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+static const field () → self::A<core::int> r = #C7;
 static method test() → dynamic {
-  <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-  () → self::A<core::int> b = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-  () → self::A<core::int> d = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-  () → self::A<core::int> f = #C6;
-  <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-  () → self::A<core::int> h = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-  () → self::A<core::int> j = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-  () → self::A<core::int> l = #C6;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-  () → self::A<core::int> n = #C2;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-  () → self::A<core::int> p = #C4;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-  () → self::A<core::int> r = #C6;
+  <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+  () → self::A<core::int> b = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+  () → self::A<core::int> d = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+  () → self::A<core::int> f = #C7;
+  <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+  () → self::A<core::int> h = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+  () → self::A<core::int> j = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+  () → self::A<core::int> l = #C7;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+  () → self::A<core::int> n = #C3;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+  () → self::A<core::int> p = #C5;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+  () → self::A<core::int> r = #C7;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int>
-  #C3 = static-tearoff self::A::fact
-  #C4 = instantiation self::A::fact <core::int>
-  #C5 = redirecting-factory-tearoff self::A::redirect
-  #C6 = instantiation self::A::redirect <core::int>
-  #C7 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C1<core::int>)
-  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C3<core::int>)
-  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C5<core::int>)
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = constructor-tearoff self::A::•
+  #C3 = instantiation #C2 <core::int>
+  #C4 = constructor-tearoff self::A::fact
+  #C5 = instantiation #C4 <core::int>
+  #C6 = redirecting-factory-tearoff self::A::redirect
+  #C7 = instantiation #C6 <core::int>
+  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C2<core::int>)
+  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C4<core::int>)
+  #C10 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C6<core::int>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect
index fad0d55..fc95e6e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect
@@ -5,7 +5,7 @@
 typedef B<T extends core::Object? = dynamic> = self::A<T%>;
 typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -14,54 +14,55 @@
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
     return new self::A::•<self::A::redirect::T%>();
 }
-static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-static const field () → self::A<core::int> b = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-static const field () → self::A<core::int> d = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-static const field () → self::A<core::int> f = #C6;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-static const field () → self::A<core::int> h = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-static const field () → self::A<core::int> j = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-static const field () → self::A<core::int> l = #C6;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-static const field () → self::A<core::int> n = #C2;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-static const field () → self::A<core::int> p = #C4;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-static const field () → self::A<core::int> r = #C6;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+static const field () → self::A<core::int> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+static const field () → self::A<core::int> d = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+static const field () → self::A<core::int> f = #C7;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+static const field () → self::A<core::int> h = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+static const field () → self::A<core::int> j = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+static const field () → self::A<core::int> l = #C7;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+static const field () → self::A<core::int> n = #C3;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+static const field () → self::A<core::int> p = #C5;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+static const field () → self::A<core::int> r = #C7;
 static method test() → dynamic {
-  <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-  () → self::A<core::int> b = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-  () → self::A<core::int> d = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-  () → self::A<core::int> f = #C6;
-  <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-  () → self::A<core::int> h = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-  () → self::A<core::int> j = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-  () → self::A<core::int> l = #C6;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-  () → self::A<core::int> n = #C2;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-  () → self::A<core::int> p = #C4;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-  () → self::A<core::int> r = #C6;
+  <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+  () → self::A<core::int> b = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+  () → self::A<core::int> d = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+  () → self::A<core::int> f = #C7;
+  <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+  () → self::A<core::int> h = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+  () → self::A<core::int> j = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+  () → self::A<core::int> l = #C7;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+  () → self::A<core::int> n = #C3;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+  () → self::A<core::int> p = #C5;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+  () → self::A<core::int> r = #C7;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int*>
-  #C3 = static-tearoff self::A::fact
-  #C4 = instantiation self::A::fact <core::int*>
-  #C5 = redirecting-factory-tearoff self::A::redirect
-  #C6 = instantiation self::A::redirect <core::int*>
-  #C7 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C1<core::int>)
-  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C3<core::int>)
-  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C5<core::int>)
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = constructor-tearoff self::A::•
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = constructor-tearoff self::A::fact
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = redirecting-factory-tearoff self::A::redirect
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C2<core::int>)
+  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C4<core::int>)
+  #C10 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C6<core::int>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect
index 2e30650..a68155b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect
@@ -38,15 +38,16 @@
 
 
 Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:5:7 -> ConstructorTearOffConstant(A.redirect)
 Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:14:11 -> ConstructorTearOffConstant(A.)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:15:11 -> InstantiationConstant(A.<int*>)
-Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:16:11 -> StaticTearOffConstant(A.fact)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:16:11 -> ConstructorTearOffConstant(A.fact)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:17:11 -> InstantiationConstant(A.fact<int*>)
 Evaluated: RedirectingFactoryTearOff @ org-dartlang-testcase:///const_tear_off.dart:18:11 -> RedirectingFactoryTearOffConstant(A.redirect)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:19:11 -> InstantiationConstant(A.redirect<int*>)
 Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:20:11 -> ConstructorTearOffConstant(A.)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:21:11 -> InstantiationConstant(A.<int*>)
-Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:22:11 -> StaticTearOffConstant(A.fact)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:22:11 -> ConstructorTearOffConstant(A.fact)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:23:11 -> InstantiationConstant(A.fact<int*>)
 Evaluated: RedirectingFactoryTearOff @ org-dartlang-testcase:///const_tear_off.dart:24:11 -> RedirectingFactoryTearOffConstant(A.redirect)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:25:11 -> InstantiationConstant(A.redirect<int*>)
@@ -56,4 +57,4 @@
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:29:11 -> InstantiationConstant(A.fact<int*>)
 Evaluated: TypedefTearOff @ org-dartlang-testcase:///const_tear_off.dart:30:11 -> TypedefTearOffConstant(<T>A.redirect<int>)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:31:11 -> InstantiationConstant(A.redirect<int*>)
-Extra constant evaluation: evaluated: 21, effectively constant: 18
+Extra constant evaluation: evaluated: 21, effectively constant: 19
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect
index fad0d55..fc95e6e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 typedef B<T extends core::Object? = dynamic> = self::A<T%>;
 typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -14,54 +14,55 @@
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
     return new self::A::•<self::A::redirect::T%>();
 }
-static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-static const field () → self::A<core::int> b = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-static const field () → self::A<core::int> d = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-static const field () → self::A<core::int> f = #C6;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-static const field () → self::A<core::int> h = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-static const field () → self::A<core::int> j = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-static const field () → self::A<core::int> l = #C6;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-static const field () → self::A<core::int> n = #C2;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-static const field () → self::A<core::int> p = #C4;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-static const field () → self::A<core::int> r = #C6;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+static const field () → self::A<core::int> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+static const field () → self::A<core::int> d = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+static const field () → self::A<core::int> f = #C7;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+static const field () → self::A<core::int> h = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+static const field () → self::A<core::int> j = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+static const field () → self::A<core::int> l = #C7;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+static const field () → self::A<core::int> n = #C3;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+static const field () → self::A<core::int> p = #C5;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+static const field () → self::A<core::int> r = #C7;
 static method test() → dynamic {
-  <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-  () → self::A<core::int> b = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-  () → self::A<core::int> d = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-  () → self::A<core::int> f = #C6;
-  <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-  () → self::A<core::int> h = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-  () → self::A<core::int> j = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-  () → self::A<core::int> l = #C6;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-  () → self::A<core::int> n = #C2;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-  () → self::A<core::int> p = #C4;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-  () → self::A<core::int> r = #C6;
+  <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+  () → self::A<core::int> b = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+  () → self::A<core::int> d = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+  () → self::A<core::int> f = #C7;
+  <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+  () → self::A<core::int> h = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+  () → self::A<core::int> j = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+  () → self::A<core::int> l = #C7;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+  () → self::A<core::int> n = #C3;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+  () → self::A<core::int> p = #C5;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+  () → self::A<core::int> r = #C7;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int*>
-  #C3 = static-tearoff self::A::fact
-  #C4 = instantiation self::A::fact <core::int*>
-  #C5 = redirecting-factory-tearoff self::A::redirect
-  #C6 = instantiation self::A::redirect <core::int*>
-  #C7 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C1<core::int>)
-  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C3<core::int>)
-  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C5<core::int>)
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = constructor-tearoff self::A::•
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = constructor-tearoff self::A::fact
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = redirecting-factory-tearoff self::A::redirect
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C2<core::int>)
+  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C4<core::int>)
+  #C10 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C6<core::int>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.expect
index eb48965..a949112 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.expect
@@ -317,5 +317,5 @@
   #C2 = TypeLiteralConstant(self::Class<dynamic>)
   #C3 = TypeLiteralConstant(core::int)
   #C4 = constructor-tearoff self::Class::named
-  #C5 = instantiation self::Class::named <core::int>
+  #C5 = instantiation #C4 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.transformed.expect
index de6a5ab..1f927ba 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.transformed.expect
@@ -317,5 +317,5 @@
   #C2 = TypeLiteralConstant(self::Class<dynamic>)
   #C3 = TypeLiteralConstant(core::int)
   #C4 = constructor-tearoff self::Class::named
-  #C5 = instantiation self::Class::named <core::int>
+  #C5 = instantiation #C4 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.expect
index 117593c..25718f4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.expect
@@ -317,5 +317,5 @@
   #C2 = TypeLiteralConstant(self::Class<dynamic>*)
   #C3 = TypeLiteralConstant(core::int*)
   #C4 = constructor-tearoff self::Class::named
-  #C5 = instantiation self::Class::named <core::int*>
+  #C5 = instantiation #C4 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.transformed.expect
index 0f1d41c..682fc04 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.transformed.expect
@@ -317,5 +317,5 @@
   #C2 = TypeLiteralConstant(self::Class<dynamic>*)
   #C3 = TypeLiteralConstant(core::int*)
   #C4 = constructor-tearoff self::Class::named
-  #C5 = instantiation self::Class::named <core::int*>
+  #C5 = instantiation #C4 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect
index 03be5de..ab94d94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect
@@ -93,11 +93,11 @@
 
 constants  {
   #C1 = static-tearoff self::C::stat
-  #C2 = instantiation self::C::stat <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::M::mstat
-  #C4 = instantiation self::M::mstat <core::int>
+  #C4 = instantiation #C3 <core::int>
   #C5 = static-tearoff self::Ext|estat
-  #C6 = instantiation self::Ext|estat <core::int>
+  #C6 = instantiation #C5 <core::int>
   #C7 = TypeLiteralConstant(core::List<core::int>)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int>>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect
index 5b832f3..55e49d3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect
@@ -101,11 +101,11 @@
 
 constants  {
   #C1 = static-tearoff self::C::stat
-  #C2 = instantiation self::C::stat <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::M::mstat
-  #C4 = instantiation self::M::mstat <core::int>
+  #C4 = instantiation #C3 <core::int>
   #C5 = static-tearoff self::Ext|estat
-  #C6 = instantiation self::Ext|estat <core::int>
+  #C6 = instantiation #C5 <core::int>
   #C7 = TypeLiteralConstant(core::List<core::int>)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int>>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect
index f9f2d98..63427ae 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect
@@ -93,11 +93,11 @@
 
 constants  {
   #C1 = static-tearoff self::C::stat
-  #C2 = instantiation self::C::stat <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::M::mstat
-  #C4 = instantiation self::M::mstat <core::int*>
+  #C4 = instantiation #C3 <core::int*>
   #C5 = static-tearoff self::Ext|estat
-  #C6 = instantiation self::Ext|estat <core::int*>
+  #C6 = instantiation #C5 <core::int*>
   #C7 = TypeLiteralConstant(core::List<core::int*>*)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int*>*>*)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect
index c8aedc8..7ee3322 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect
@@ -101,11 +101,11 @@
 
 constants  {
   #C1 = static-tearoff self::C::stat
-  #C2 = instantiation self::C::stat <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::M::mstat
-  #C4 = instantiation self::M::mstat <core::int*>
+  #C4 = instantiation #C3 <core::int*>
   #C5 = static-tearoff self::Ext|estat
-  #C6 = instantiation self::Ext|estat <core::int*>
+  #C6 = instantiation #C5 <core::int*>
   #C7 = TypeLiteralConstant(core::List<core::int*>*)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int*>*>*)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.expect
index 630fe40..1622d94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.expect
@@ -106,7 +106,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::boundedMethod
-  #C4 = instantiation self::boundedMethod <core::String>
+  #C4 = instantiation #C3 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.transformed.expect
index 630fe40..1622d94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.transformed.expect
@@ -106,7 +106,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::boundedMethod
-  #C4 = instantiation self::boundedMethod <core::String>
+  #C4 = instantiation #C3 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.expect
index 2e9d2db..8ed55ac 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.expect
@@ -106,7 +106,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::boundedMethod
-  #C4 = instantiation self::boundedMethod <core::String*>
+  #C4 = instantiation #C3 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.transformed.expect
index 2e9d2db..8ed55ac 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.transformed.expect
@@ -106,7 +106,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::boundedMethod
-  #C4 = instantiation self::boundedMethod <core::String*>
+  #C4 = instantiation #C3 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect
index 8954e19..13d3f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect
@@ -91,7 +91,7 @@
     ;
 }
 class E4 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::E4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::E4
     : super core::Object::•()
     ;
@@ -99,3 +99,7 @@
     return new self::E4::_();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::E4::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect
index 8954e19..13d3f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect
@@ -91,7 +91,7 @@
     ;
 }
 class E4 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::E4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::E4
     : super core::Object::•()
     ;
@@ -99,3 +99,7 @@
     return new self::E4::_();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::E4::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect
index 8954e19..13d3f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect
@@ -91,7 +91,7 @@
     ;
 }
 class E4 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::E4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::E4
     : super core::Object::•()
     ;
@@ -99,3 +99,7 @@
     return new self::E4::_();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::E4::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect
index d7f841c..969f9d2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect
@@ -90,3 +90,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///explicit_new_as_unnamed.dart:41:7 -> ConstructorTearOffConstant(E4.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect
index 8954e19..13d3f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect
@@ -91,7 +91,7 @@
     ;
 }
 class E4 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::E4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::E4
     : super core::Object::•()
     ;
@@ -99,3 +99,7 @@
     return new self::E4::_();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::E4::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.expect
index cd74ac1..eb866ee 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.expect
@@ -132,9 +132,9 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int>
-  #C5 = instantiation self::A::foo1 <core::int>
-  #C6 = instantiation self::A::foo2 <core::int>
-  #C7 = static-tearoff self::A::bar1
-  #C8 = instantiation self::A::bar1 <core::int>
+  #C4 = instantiation #C3 <core::int>
+  #C5 = instantiation #C1 <core::int>
+  #C6 = instantiation #C2 <core::int>
+  #C7 = constructor-tearoff self::A::bar1
+  #C8 = instantiation #C7 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.transformed.expect
index cd74ac1..eb866ee 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.transformed.expect
@@ -132,9 +132,9 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int>
-  #C5 = instantiation self::A::foo1 <core::int>
-  #C6 = instantiation self::A::foo2 <core::int>
-  #C7 = static-tearoff self::A::bar1
-  #C8 = instantiation self::A::bar1 <core::int>
+  #C4 = instantiation #C3 <core::int>
+  #C5 = instantiation #C1 <core::int>
+  #C6 = instantiation #C2 <core::int>
+  #C7 = constructor-tearoff self::A::bar1
+  #C8 = instantiation #C7 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.expect
index 40ac9f8..d91a515 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.expect
@@ -132,9 +132,9 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int*>
-  #C5 = instantiation self::A::foo1 <core::int*>
-  #C6 = instantiation self::A::foo2 <core::int*>
-  #C7 = static-tearoff self::A::bar1
-  #C8 = instantiation self::A::bar1 <core::int*>
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = instantiation #C1 <core::int*>
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = constructor-tearoff self::A::bar1
+  #C8 = instantiation #C7 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.transformed.expect
index 40ac9f8..d91a515 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.transformed.expect
@@ -132,9 +132,9 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int*>
-  #C5 = instantiation self::A::foo1 <core::int*>
-  #C6 = instantiation self::A::foo2 <core::int*>
-  #C7 = static-tearoff self::A::bar1
-  #C8 = instantiation self::A::bar1 <core::int*>
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = instantiation #C1 <core::int*>
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = constructor-tearoff self::A::bar1
+  #C8 = instantiation #C7 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.expect
index 8aa8628..3b2be98 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.expect
@@ -94,9 +94,9 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int>
-  #C5 = static-tearoff self::A::bar
-  #C6 = instantiation self::A::bar <core::int>
+  #C4 = instantiation #C3 <core::int>
+  #C5 = constructor-tearoff self::A::bar
+  #C6 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.transformed.expect
index 8aa8628..3b2be98 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.transformed.expect
@@ -94,9 +94,9 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int>
-  #C5 = static-tearoff self::A::bar
-  #C6 = instantiation self::A::bar <core::int>
+  #C4 = instantiation #C3 <core::int>
+  #C5 = constructor-tearoff self::A::bar
+  #C6 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.expect
index c49c929..a5cdb82 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.expect
@@ -94,9 +94,9 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int*>
-  #C5 = static-tearoff self::A::bar
-  #C6 = instantiation self::A::bar <core::int*>
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = constructor-tearoff self::A::bar
+  #C6 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.transformed.expect
index c49c929..a5cdb82 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.transformed.expect
@@ -94,9 +94,9 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int*>
-  #C5 = static-tearoff self::A::bar
-  #C6 = instantiation self::A::bar <core::int*>
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = constructor-tearoff self::A::bar
+  #C6 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.expect
index 5edad1d..9d3de3b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.expect
@@ -47,6 +47,6 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
-  #C3 = instantiation self::id <core::String>
+  #C2 = instantiation #C1 <core::int>
+  #C3 = instantiation #C1 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.transformed.expect
index f2e9fea..6058516 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.transformed.expect
@@ -47,8 +47,8 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
-  #C3 = instantiation self::id <core::String>
+  #C2 = instantiation #C1 <core::int>
+  #C3 = instantiation #C1 <core::String>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.expect
index 7061d34..5abed3e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.expect
@@ -47,6 +47,6 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
-  #C3 = instantiation self::id <core::String*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
index 8923c73..f62d68a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
@@ -47,8 +47,8 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
-  #C3 = instantiation self::id <core::String*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.expect
index ce055a4..8fa4479 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.expect
@@ -52,5 +52,5 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int>
+  #C2 = instantiation #C1 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.transformed.expect
index 0f0953f..ca0ea1f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.transformed.expect
@@ -52,7 +52,7 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int>
+  #C2 = instantiation #C1 <core::int>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.expect
index 1121885..5827e2a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.expect
@@ -52,5 +52,5 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.outline.expect
index ab09476..8f1f43b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.outline.expect
@@ -12,13 +12,13 @@
 static final field core::bool inSoundMode;
 static const field () → self::A<core::int> f1a = self::A::•<core::int>;
 static const field () → self::A<core::int> f1b = self::A::•<core::int>;
-static const field () → self::A<core::int> f1c = (<X extends core::num>.(self::A::•<X>))<core::int>;
+static const field () → self::A<core::int> f1c = self::A::•<core::int>;
 static const field () → self::A<core::int> g1a = self::A::•<core::int>;
 static const field () → self::A<core::int> g1b = self::A::•<core::int>;
-static const field () → self::A<core::int> g1c = (<unrelated Y extends core::Object? = dynamic>.(self::A::•<core::int>))<dynamic>;
+static const field () → self::A<core::int> g1c = self::A::•<core::int>;
 static const field () → self::A<core::int> h1a = self::A::•<core::int>;
 static const field () → self::A<core::int> h1b = self::A::•<core::int>;
-static const field () → self::A<core::int> h1c = (<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>.(self::A::•<X%>))<core::int, dynamic>;
+static const field () → self::A<core::int> h1c = self::A::•<core::int>;
 static method main() → dynamic
   ;
 static method test<T extends core::num>() → dynamic
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.transformed.expect
index 74079d8..e64d4e2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.transformed.expect
@@ -52,7 +52,7 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.expect
index 547e506..0d61208 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.expect
@@ -59,15 +59,15 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::num>
-  #C3 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::num>
+  #C3 = instantiation #C1 <core::int>
   #C4 = constructor-tearoff self::A::•
-  #C5 = instantiation self::A::• <core::num>
-  #C6 = instantiation self::A::• <core::int>
-  #C7 = instantiation self::A::foo <core::String>
-  #C8 = instantiation self::A::• <core::String>
-  #C9 = static-tearoff self::A::bar
-  #C10 = instantiation self::A::bar <core::num>
-  #C11 = instantiation self::A::bar <core::int>
-  #C12 = instantiation self::A::bar <core::String>
+  #C5 = instantiation #C4 <core::num>
+  #C6 = instantiation #C4 <core::int>
+  #C7 = instantiation #C1 <core::String>
+  #C8 = instantiation #C4 <core::String>
+  #C9 = constructor-tearoff self::A::bar
+  #C10 = instantiation #C9 <core::num>
+  #C11 = instantiation #C9 <core::int>
+  #C12 = instantiation #C9 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.transformed.expect
index 547e506..0d61208 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.transformed.expect
@@ -59,15 +59,15 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::num>
-  #C3 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::num>
+  #C3 = instantiation #C1 <core::int>
   #C4 = constructor-tearoff self::A::•
-  #C5 = instantiation self::A::• <core::num>
-  #C6 = instantiation self::A::• <core::int>
-  #C7 = instantiation self::A::foo <core::String>
-  #C8 = instantiation self::A::• <core::String>
-  #C9 = static-tearoff self::A::bar
-  #C10 = instantiation self::A::bar <core::num>
-  #C11 = instantiation self::A::bar <core::int>
-  #C12 = instantiation self::A::bar <core::String>
+  #C5 = instantiation #C4 <core::num>
+  #C6 = instantiation #C4 <core::int>
+  #C7 = instantiation #C1 <core::String>
+  #C8 = instantiation #C4 <core::String>
+  #C9 = constructor-tearoff self::A::bar
+  #C10 = instantiation #C9 <core::num>
+  #C11 = instantiation #C9 <core::int>
+  #C12 = instantiation #C9 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.expect
index 8f0ed57..ba34a7a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.expect
@@ -59,15 +59,15 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::num*>
-  #C3 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::num*>
+  #C3 = instantiation #C1 <core::int*>
   #C4 = constructor-tearoff self::A::•
-  #C5 = instantiation self::A::• <core::num*>
-  #C6 = instantiation self::A::• <core::int*>
-  #C7 = instantiation self::A::foo <core::String*>
-  #C8 = instantiation self::A::• <core::String*>
-  #C9 = static-tearoff self::A::bar
-  #C10 = instantiation self::A::bar <core::num*>
-  #C11 = instantiation self::A::bar <core::int*>
-  #C12 = instantiation self::A::bar <core::String*>
+  #C5 = instantiation #C4 <core::num*>
+  #C6 = instantiation #C4 <core::int*>
+  #C7 = instantiation #C1 <core::String*>
+  #C8 = instantiation #C4 <core::String*>
+  #C9 = constructor-tearoff self::A::bar
+  #C10 = instantiation #C9 <core::num*>
+  #C11 = instantiation #C9 <core::int*>
+  #C12 = instantiation #C9 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.transformed.expect
index 8f0ed57..ba34a7a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.transformed.expect
@@ -59,15 +59,15 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::num*>
-  #C3 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::num*>
+  #C3 = instantiation #C1 <core::int*>
   #C4 = constructor-tearoff self::A::•
-  #C5 = instantiation self::A::• <core::num*>
-  #C6 = instantiation self::A::• <core::int*>
-  #C7 = instantiation self::A::foo <core::String*>
-  #C8 = instantiation self::A::• <core::String*>
-  #C9 = static-tearoff self::A::bar
-  #C10 = instantiation self::A::bar <core::num*>
-  #C11 = instantiation self::A::bar <core::int*>
-  #C12 = instantiation self::A::bar <core::String*>
+  #C5 = instantiation #C4 <core::num*>
+  #C6 = instantiation #C4 <core::int*>
+  #C7 = instantiation #C1 <core::String*>
+  #C8 = instantiation #C4 <core::String*>
+  #C9 = constructor-tearoff self::A::bar
+  #C10 = instantiation #C9 <core::num*>
+  #C11 = instantiation #C9 <core::int*>
+  #C12 = instantiation #C9 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart
index efe748f..4232eea 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart
@@ -21,7 +21,7 @@
 }
 
 test() {
-  A.named<int>.toString();
+  A.named<int>.toString(); // error
 }
 
 void main() {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
index 980e111..a62bd0c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
@@ -1,4 +1,12 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.named<int>.toString(); // error
+//          ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -27,30 +35,33 @@
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
-  #C3.{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.named<int>.toString(); // error
+         ^";
 }
 static method main() → void {
   self::A<dynamic> a = new self::A::•<dynamic>();
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::int>, <core::Object?>[2]);
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::String>, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C5, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C8, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C9, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C5, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>["three"]);
-  #C2.{core::Object::toString}(){() → core::String};
-  #C3.{core::Object::toString}(){() → core::String};
+  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C4, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C4, <core::Object?>["three"]);
+  #C8.{core::Object::toString}(){() → core::String};
+  #C9.{core::Object::toString}(){() → core::String};
 }
 
 constants  {
   #C1 = <core::Symbol, dynamic>{)
-  #C2 = constructor-tearoff self::A::named
-  #C3 = instantiation self::A::named <core::int>
-  #C4 = static-tearoff self::A::n
-  #C5 = instantiation self::A::n <core::int>
-  #C6 = instantiation self::A::n <core::String>
-  #C7 = static-tearoff self::m
-  #C8 = instantiation self::m <core::int>
-  #C9 = instantiation self::m <core::String>
+  #C2 = static-tearoff self::A::n
+  #C3 = instantiation #C2 <core::int>
+  #C4 = instantiation #C2 <core::String>
+  #C5 = static-tearoff self::m
+  #C6 = instantiation #C5 <core::int>
+  #C7 = instantiation #C5 <core::String>
+  #C8 = constructor-tearoff self::A::named
+  #C9 = instantiation #C8 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
index ae6ee29..7124a3a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
@@ -1,4 +1,12 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.named<int>.toString(); // error
+//          ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -27,30 +35,33 @@
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
-  #C3.{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.named<int>.toString(); // error
+         ^";
 }
 static method main() → void {
   self::A<dynamic> a = new self::A::•<dynamic>();
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::int>, core::_GrowableList::_literal1<core::Object?>(2));
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::String>, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C5, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C8, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C9, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C5, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>("three"));
-  #C2.{core::Object::toString}(){() → core::String};
-  #C3.{core::Object::toString}(){() → core::String};
+  self::FunctionApplier|applyAndPrint(#C3, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C4, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C7, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C3, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C4, core::_GrowableList::_literal1<core::Object?>("three"));
+  #C8.{core::Object::toString}(){() → core::String};
+  #C9.{core::Object::toString}(){() → core::String};
 }
 
 constants  {
   #C1 = <core::Symbol, dynamic>{)
-  #C2 = constructor-tearoff self::A::named
-  #C3 = instantiation self::A::named <core::int>
-  #C4 = static-tearoff self::A::n
-  #C5 = instantiation self::A::n <core::int>
-  #C6 = instantiation self::A::n <core::String>
-  #C7 = static-tearoff self::m
-  #C8 = instantiation self::m <core::int>
-  #C9 = instantiation self::m <core::String>
+  #C2 = static-tearoff self::A::n
+  #C3 = instantiation #C2 <core::int>
+  #C4 = instantiation #C2 <core::String>
+  #C5 = static-tearoff self::m
+  #C6 = instantiation #C5 <core::int>
+  #C7 = instantiation #C5 <core::String>
+  #C8 = constructor-tearoff self::A::named
+  #C9 = instantiation #C8 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
index 4ad97c0..6add537 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
@@ -1,4 +1,12 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.named<int>.toString(); // error
+//          ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -27,30 +35,33 @@
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
-  #C3.{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.named<int>.toString(); // error
+         ^";
 }
 static method main() → void {
   self::A<dynamic> a = new self::A::•<dynamic>();
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::int>, <core::Object?>[2]);
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::String>, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C5, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C8, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C9, <core::Object?>["three"]);
-  self::FunctionApplier|applyAndPrint(#C5, <core::Object?>[2]);
-  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>["three"]);
-  #C2.{core::Object::toString}(){() → core::String};
-  #C3.{core::Object::toString}(){() → core::String};
+  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C4, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C4, <core::Object?>["three"]);
+  #C8.{core::Object::toString}(){() → core::String};
+  #C9.{core::Object::toString}(){() → core::String};
 }
 
 constants  {
   #C1 = <core::Symbol*, dynamic>{)
-  #C2 = constructor-tearoff self::A::named
-  #C3 = instantiation self::A::named <core::int*>
-  #C4 = static-tearoff self::A::n
-  #C5 = instantiation self::A::n <core::int*>
-  #C6 = instantiation self::A::n <core::String*>
-  #C7 = static-tearoff self::m
-  #C8 = instantiation self::m <core::int*>
-  #C9 = instantiation self::m <core::String*>
+  #C2 = static-tearoff self::A::n
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = instantiation #C2 <core::String*>
+  #C5 = static-tearoff self::m
+  #C6 = instantiation #C5 <core::int*>
+  #C7 = instantiation #C5 <core::String*>
+  #C8 = constructor-tearoff self::A::named
+  #C9 = instantiation #C8 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
index 516e952..328de14 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
@@ -1,4 +1,12 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.named<int>.toString(); // error
+//          ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -27,30 +35,33 @@
 static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
   return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
 static method test() → dynamic {
-  #C3.{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.named<int>.toString(); // error
+         ^";
 }
 static method main() → void {
   self::A<dynamic> a = new self::A::•<dynamic>();
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::int>, core::_GrowableList::_literal1<core::Object?>(2));
   self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::String>, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C5, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C8, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C9, core::_GrowableList::_literal1<core::Object?>("three"));
-  self::FunctionApplier|applyAndPrint(#C5, core::_GrowableList::_literal1<core::Object?>(2));
-  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>("three"));
-  #C2.{core::Object::toString}(){() → core::String};
-  #C3.{core::Object::toString}(){() → core::String};
+  self::FunctionApplier|applyAndPrint(#C3, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C4, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C6, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C7, core::_GrowableList::_literal1<core::Object?>("three"));
+  self::FunctionApplier|applyAndPrint(#C3, core::_GrowableList::_literal1<core::Object?>(2));
+  self::FunctionApplier|applyAndPrint(#C4, core::_GrowableList::_literal1<core::Object?>("three"));
+  #C8.{core::Object::toString}(){() → core::String};
+  #C9.{core::Object::toString}(){() → core::String};
 }
 
 constants  {
   #C1 = <core::Symbol*, dynamic>{)
-  #C2 = constructor-tearoff self::A::named
-  #C3 = instantiation self::A::named <core::int*>
-  #C4 = static-tearoff self::A::n
-  #C5 = instantiation self::A::n <core::int*>
-  #C6 = instantiation self::A::n <core::String*>
-  #C7 = static-tearoff self::m
-  #C8 = instantiation self::m <core::int*>
-  #C9 = instantiation self::m <core::String*>
+  #C2 = static-tearoff self::A::n
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = instantiation #C2 <core::String*>
+  #C5 = static-tearoff self::m
+  #C6 = instantiation #C5 <core::int*>
+  #C7 = instantiation #C5 <core::String*>
+  #C8 = constructor-tearoff self::A::named
+  #C9 = instantiation #C8 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect
index 1d51613..db96e49 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect
@@ -20,5 +20,5 @@
 constants  {
   #C1 = null
   #C2 = static-tearoff self::a
-  #C3 = instantiation self::a <core::int, core::String>
+  #C3 = instantiation #C2 <core::int, core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.transformed.expect
index 1d51613..db96e49 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.transformed.expect
@@ -20,5 +20,5 @@
 constants  {
   #C1 = null
   #C2 = static-tearoff self::a
-  #C3 = instantiation self::a <core::int, core::String>
+  #C3 = instantiation #C2 <core::int, core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.expect
index b1a240e..b032165 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.expect
@@ -20,5 +20,5 @@
 constants  {
   #C1 = null
   #C2 = static-tearoff self::a
-  #C3 = instantiation self::a <core::int*, core::String*>
+  #C3 = instantiation #C2 <core::int*, core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.transformed.expect
index b1a240e..b032165 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.transformed.expect
@@ -20,5 +20,5 @@
 constants  {
   #C1 = null
   #C2 = static-tearoff self::a
-  #C3 = instantiation self::a <core::int*, core::String*>
+  #C3 = instantiation #C2 <core::int*, core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect
index 837ac1a..b2c2a5b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::baz]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::A<self::A::X%>
     : super core::Object::•() {}
   static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
@@ -35,7 +35,6 @@
     return self::A::bar<self::A::baz::X%>();
 }
 static method test() → dynamic {
-  #C1;
   #C2;
   #C3;
   #C4;
@@ -43,6 +42,7 @@
   #C6;
   #C7;
   #C8;
+  #C9;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
 Try removing the type arguments or placing them after the class name.
   List.filled<int>; // Error.
@@ -63,12 +63,13 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff core::List::filled
-  #C2 = constructor-tearoff self::A::foo
-  #C3 = static-tearoff self::A::bar
-  #C4 = redirecting-factory-tearoff self::A::baz
-  #C5 = instantiation core::List::filled <core::int>
-  #C6 = instantiation self::A::foo <core::int>
-  #C7 = instantiation self::A::bar <core::int>
-  #C8 = instantiation self::A::baz <core::int>
+  #C1 = constructor-tearoff self::A::baz
+  #C2 = constructor-tearoff core::List::filled
+  #C3 = constructor-tearoff self::A::foo
+  #C4 = constructor-tearoff self::A::bar
+  #C5 = redirecting-factory-tearoff self::A::baz
+  #C6 = instantiation #C2 <core::int>
+  #C7 = instantiation #C3 <core::int>
+  #C8 = instantiation #C4 <core::int>
+  #C9 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.transformed.expect
index 837ac1a..b2c2a5b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.transformed.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::baz]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::A<self::A::X%>
     : super core::Object::•() {}
   static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
@@ -35,7 +35,6 @@
     return self::A::bar<self::A::baz::X%>();
 }
 static method test() → dynamic {
-  #C1;
   #C2;
   #C3;
   #C4;
@@ -43,6 +42,7 @@
   #C6;
   #C7;
   #C8;
+  #C9;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
 Try removing the type arguments or placing them after the class name.
   List.filled<int>; // Error.
@@ -63,12 +63,13 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff core::List::filled
-  #C2 = constructor-tearoff self::A::foo
-  #C3 = static-tearoff self::A::bar
-  #C4 = redirecting-factory-tearoff self::A::baz
-  #C5 = instantiation core::List::filled <core::int>
-  #C6 = instantiation self::A::foo <core::int>
-  #C7 = instantiation self::A::bar <core::int>
-  #C8 = instantiation self::A::baz <core::int>
+  #C1 = constructor-tearoff self::A::baz
+  #C2 = constructor-tearoff core::List::filled
+  #C3 = constructor-tearoff self::A::foo
+  #C4 = constructor-tearoff self::A::bar
+  #C5 = redirecting-factory-tearoff self::A::baz
+  #C6 = instantiation #C2 <core::int>
+  #C7 = instantiation #C3 <core::int>
+  #C8 = instantiation #C4 <core::int>
+  #C9 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect
index 1d39c74..9459fcb 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::baz]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::A<self::A::X%>
     : super core::Object::•() {}
   static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
@@ -35,7 +35,6 @@
     return self::A::bar<self::A::baz::X%>();
 }
 static method test() → dynamic {
-  #C1;
   #C2;
   #C3;
   #C4;
@@ -43,6 +42,7 @@
   #C6;
   #C7;
   #C8;
+  #C9;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
 Try removing the type arguments or placing them after the class name.
   List.filled<int>; // Error.
@@ -63,12 +63,13 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff core::List::filled
-  #C2 = constructor-tearoff self::A::foo
-  #C3 = static-tearoff self::A::bar
-  #C4 = redirecting-factory-tearoff self::A::baz
-  #C5 = instantiation core::List::filled <core::int*>
-  #C6 = instantiation self::A::foo <core::int*>
-  #C7 = instantiation self::A::bar <core::int*>
-  #C8 = instantiation self::A::baz <core::int*>
+  #C1 = constructor-tearoff self::A::baz
+  #C2 = constructor-tearoff core::List::filled
+  #C3 = constructor-tearoff self::A::foo
+  #C4 = constructor-tearoff self::A::bar
+  #C5 = redirecting-factory-tearoff self::A::baz
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = instantiation #C3 <core::int*>
+  #C8 = instantiation #C4 <core::int*>
+  #C9 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.outline.expect
index e724719..9042de9e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.outline.expect
@@ -15,3 +15,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue46890.dart:5:7 -> ConstructorTearOffConstant(A.baz)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.transformed.expect
index 1d39c74..9459fcb 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::baz]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::A<self::A::X%>
     : super core::Object::•() {}
   static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
@@ -35,7 +35,6 @@
     return self::A::bar<self::A::baz::X%>();
 }
 static method test() → dynamic {
-  #C1;
   #C2;
   #C3;
   #C4;
@@ -43,6 +42,7 @@
   #C6;
   #C7;
   #C8;
+  #C9;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
 Try removing the type arguments or placing them after the class name.
   List.filled<int>; // Error.
@@ -63,12 +63,13 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff core::List::filled
-  #C2 = constructor-tearoff self::A::foo
-  #C3 = static-tearoff self::A::bar
-  #C4 = redirecting-factory-tearoff self::A::baz
-  #C5 = instantiation core::List::filled <core::int*>
-  #C6 = instantiation self::A::foo <core::int*>
-  #C7 = instantiation self::A::bar <core::int*>
-  #C8 = instantiation self::A::baz <core::int*>
+  #C1 = constructor-tearoff self::A::baz
+  #C2 = constructor-tearoff core::List::filled
+  #C3 = constructor-tearoff self::A::foo
+  #C4 = constructor-tearoff self::A::bar
+  #C5 = redirecting-factory-tearoff self::A::baz
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = instantiation #C3 <core::int*>
+  #C8 = instantiation #C4 <core::int*>
+  #C9 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.expect
index fe92bd1..1d24b72 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.expect
@@ -7,6 +7,18 @@
 //   int new = 42;
 //       ^^^
 //
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:10:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new is int;
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:12:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new;
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:13:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new();
+//       ^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.transformed.expect
index fe92bd1..1d24b72 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.strong.transformed.expect
@@ -7,6 +7,18 @@
 //   int new = 42;
 //       ^^^
 //
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:10:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new is int;
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:12:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new;
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:13:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new();
+//       ^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.expect
index fe92bd1..1d24b72 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.expect
@@ -7,6 +7,18 @@
 //   int new = 42;
 //       ^^^
 //
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:10:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new is int;
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:12:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new;
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:13:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new();
+//       ^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.transformed.expect
index fe92bd1..1d24b72 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.transformed.expect
@@ -7,6 +7,18 @@
 //   int new = 42;
 //       ^^^
 //
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:10:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new is int;
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:12:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new;
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:13:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new();
+//       ^^^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.expect
index a23b6b4..6057dae 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.expect
@@ -19,7 +19,7 @@
 constants  {
   #C1 = static-tearoff self::id
   #C2 = static-tearoff self::other
-  #C3 = instantiation self::id <core::int>
+  #C3 = instantiation #C1 <core::int>
   #C4 = self::A {x:#C3}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.transformed.expect
index a23b6b4..6057dae 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
 constants  {
   #C1 = static-tearoff self::id
   #C2 = static-tearoff self::other
-  #C3 = instantiation self::id <core::int>
+  #C3 = instantiation #C1 <core::int>
   #C4 = self::A {x:#C3}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.expect
index 55aaf0f..9af80b0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.expect
@@ -19,7 +19,7 @@
 constants  {
   #C1 = static-tearoff self::id
   #C2 = static-tearoff self::other
-  #C3 = instantiation self::id <core::int*>
+  #C3 = instantiation #C1 <core::int*>
   #C4 = self::A {x:#C3}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.transformed.expect
index 55aaf0f..9af80b0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 constants  {
   #C1 = static-tearoff self::id
   #C2 = static-tearoff self::other
-  #C3 = instantiation self::id <core::int*>
+  #C3 = instantiation #C1 <core::int*>
   #C4 = self::A {x:#C3}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.expect
index 41ae260..03e2e51 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.expect
@@ -18,9 +18,9 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::other
-  #C4 = instantiation self::other <core::int>
+  #C4 = instantiation #C3 <core::int>
   #C5 = self::A {x:#C2}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.transformed.expect
index 41ae260..03e2e51 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.transformed.expect
@@ -18,9 +18,9 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::other
-  #C4 = instantiation self::other <core::int>
+  #C4 = instantiation #C3 <core::int>
   #C5 = self::A {x:#C2}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.expect
index 535ad97..a593732 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.expect
@@ -18,9 +18,9 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::other
-  #C4 = instantiation self::other <core::int*>
+  #C4 = instantiation #C3 <core::int*>
   #C5 = self::A {x:#C2}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.transformed.expect
index 535ad97..a593732 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.transformed.expect
@@ -18,9 +18,9 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::other
-  #C4 = instantiation self::other <core::int*>
+  #C4 = instantiation #C3 <core::int*>
   #C5 = self::A {x:#C2}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.expect
index f4cf0df..0c4cff4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.expect
@@ -32,7 +32,7 @@
   #C2 = 1
   #C3 = <core::int>[#C2]
   #C4 = self::A<core::int> {x:#C3}
-  #C5 = instantiation self::m <core::String>
+  #C5 = instantiation #C1 <core::String>
   #C6 = self::B<core::String> {f:#C5}
   #C7 = self::C<core::String> {f:#C5}
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.transformed.expect
index f4cf0df..0c4cff4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.transformed.expect
@@ -32,7 +32,7 @@
   #C2 = 1
   #C3 = <core::int>[#C2]
   #C4 = self::A<core::int> {x:#C3}
-  #C5 = instantiation self::m <core::String>
+  #C5 = instantiation #C1 <core::String>
   #C6 = self::B<core::String> {f:#C5}
   #C7 = self::C<core::String> {f:#C5}
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.expect
index 78d6475..691f3a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.expect
@@ -32,7 +32,7 @@
   #C2 = 1
   #C3 = <core::int*>[#C2]
   #C4 = self::A<core::int*> {x:#C3}
-  #C5 = instantiation self::m <core::String*>
+  #C5 = instantiation #C1 <core::String*>
   #C6 = self::B<core::String*> {f:#C5}
   #C7 = self::C<core::String*> {f:#C5}
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.transformed.expect
index 78d6475..691f3a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
   #C2 = 1
   #C3 = <core::int*>[#C2]
   #C4 = self::A<core::int*> {x:#C3}
-  #C5 = instantiation self::m <core::String*>
+  #C5 = instantiation #C1 <core::String*>
   #C6 = self::B<core::String*> {f:#C5}
   #C7 = self::C<core::String*> {f:#C5}
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart
new file mode 100644
index 0000000..91be77e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2021, 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.
+
+typedef MyList<T extends num> = List<T>;
+
+main() {}
+
+test() {
+  const c1 = MyList<num>.filled;
+  const c2 = MyList<num>.filled;
+  const c3 = (MyList.filled)<num>;
+
+  const c4 = identical(c1, c2);
+  const c5 = identical(c1, c3);
+
+  expect(true, c4);
+  expect(false, c5);
+
+  expect(true, identical(c1, c2));
+  expect(false, identical(c1, c3));
+
+  var v1 = MyList<num>.filled;
+  var v2 = MyList<num>.filled;
+  var v3 = (MyList.filled)<num>;
+
+  var v4 = identical(v1, v2);
+  var v5 = identical(v1, v3);
+
+  expect(true, v4);
+  expect(false, v5);
+
+  expect(true, identical(v1, v2));
+  expect(false, identical(v1, v3));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.expect
new file mode 100644
index 0000000..313acc1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num>
+  #C5 = typedef-tearoff <T extends core::num>.(#C3<T>)
+  #C6 = instantiation #C5 <core::num>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.transformed.expect
new file mode 100644
index 0000000..b1acc2d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.transformed.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num>
+  #C5 = typedef-tearoff <T extends core::num>.(#C3<T>)
+  #C6 = instantiation #C5 <core::num>
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:20:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:21:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 32, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline.expect
new file mode 100644
index 0000000..3730164
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+typedef MyList<T extends num> = List<T>;
+main() {}
+test() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..10f9adf
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+expect(expected, actual) {}
+main() {}
+test() {}
+typedef MyList<T extends num> = List<T>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.expect
new file mode 100644
index 0000000..ff4b5b0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = typedef-tearoff <T extends core::num>.(#C3<T>)
+  #C6 = instantiation #C5 <core::num*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.outline.expect
new file mode 100644
index 0000000..88959f9
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.outline.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic
+  ;
+static method test() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.transformed.expect
new file mode 100644
index 0000000..285da40f
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.transformed.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = typedef-tearoff <T extends core::num>.(#C3<T>)
+  #C6 = instantiation #C5 <core::num*>
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:20:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:21:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 32, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
index c0c195f..df41444 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
@@ -24,7 +24,7 @@
     return new self::Class::•(constants: constants);
 }
 abstract class Const extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory impl() → self::Const
     return new self::_ConstImpl::•<dynamic>();
   static method _#impl#tearOff() → self::Const
@@ -45,6 +45,7 @@
   #C1 = self::_ConstImpl<dynamic> {}
   #C2 = self::_ConstImpl<core::String> {}
   #C3 = <self::Const>[#C1, #C1, #C2]
+  #C4 = constructor-tearoff self::Const::impl
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
index c0c195f..df41444 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
     return new self::Class::•(constants: constants);
 }
 abstract class Const extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory impl() → self::Const
     return new self::_ConstImpl::•<dynamic>();
   static method _#impl#tearOff() → self::Const
@@ -45,6 +45,7 @@
   #C1 = self::_ConstImpl<dynamic> {}
   #C2 = self::_ConstImpl<core::String> {}
   #C3 = <self::Const>[#C1, #C1, #C2]
+  #C4 = constructor-tearoff self::Const::impl
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
index 94ca00a..38c6a94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
@@ -24,7 +24,7 @@
     return new self::Class::•(constants: constants);
 }
 abstract class Const extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory impl() → self::Const
     return new self::_ConstImpl::•<dynamic>();
   static method _#impl#tearOff() → self::Const
@@ -45,6 +45,7 @@
   #C1 = self::_ConstImpl<dynamic> {}
   #C2 = self::_ConstImpl<core::String*> {}
   #C3 = <self::Const*>[#C1, #C1, #C2]
+  #C4 = constructor-tearoff self::Const::impl
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
index f2eca4d..7fffaa8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
@@ -29,3 +29,8 @@
   ;
 static method _#ImplAlias#new#tearOff<T extends core::num>() → self::_ConstImpl<self::_#ImplAlias#new#tearOff::T>
   return new self::_ConstImpl::•<self::_#ImplAlias#new#tearOff::T>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_redirect.dart:21:16 -> ConstructorTearOffConstant(Const.impl)
+Extra constant evaluation: evaluated: 8, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
index 94ca00a..38c6a94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
     return new self::Class::•(constants: constants);
 }
 abstract class Const extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory impl() → self::Const
     return new self::_ConstImpl::•<dynamic>();
   static method _#impl#tearOff() → self::Const
@@ -45,6 +45,7 @@
   #C1 = self::_ConstImpl<dynamic> {}
   #C2 = self::_ConstImpl<core::String*> {}
   #C3 = <self::Const*>[#C1, #C1, #C2]
+  #C4 = constructor-tearoff self::Const::impl
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
index 287832b..992d24b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
@@ -187,7 +187,7 @@
     return new mai::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   constructor named() → mai::Class2
     : super core::Object::•()
     ;
@@ -207,7 +207,7 @@
     return new mai::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10]/*isLegacy*/;
   constructor _() → mai::Class4<mai::Class4::T%>
     : super core::Object::•()
     ;
@@ -243,4 +243,6 @@
   #C6 = static-tearoff mai::Class4::_#redirect#tearOff
   #C7 = static-tearoff mai::Class5::_#new#tearOff
   #C8 = false
+  #C9 = constructor-tearoff mai::Class2::redirect
+  #C10 = constructor-tearoff mai::Class4::redirect
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
index bcf1164..4920c00 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
@@ -187,7 +187,7 @@
     return new mai::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   constructor named() → mai::Class2
     : super core::Object::•()
     ;
@@ -207,7 +207,7 @@
     return new mai::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10]/*isLegacy*/;
   constructor _() → mai::Class4<mai::Class4::T%>
     : super core::Object::•()
     ;
@@ -243,4 +243,6 @@
   #C6 = static-tearoff mai::Class4::_#redirect#tearOff
   #C7 = static-tearoff mai::Class5::_#new#tearOff
   #C8 = false
+  #C9 = constructor-tearoff mai::Class2::redirect
+  #C10 = constructor-tearoff mai::Class4::redirect
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
index 287832b..992d24b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
@@ -187,7 +187,7 @@
     return new mai::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   constructor named() → mai::Class2
     : super core::Object::•()
     ;
@@ -207,7 +207,7 @@
     return new mai::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10]/*isLegacy*/;
   constructor _() → mai::Class4<mai::Class4::T%>
     : super core::Object::•()
     ;
@@ -243,4 +243,6 @@
   #C6 = static-tearoff mai::Class4::_#redirect#tearOff
   #C7 = static-tearoff mai::Class5::_#new#tearOff
   #C8 = false
+  #C9 = constructor-tearoff mai::Class2::redirect
+  #C10 = constructor-tearoff mai::Class4::redirect
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
index f714802..e737b01 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
@@ -23,7 +23,7 @@
     return new self2::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self2::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor named() → self2::Class2
     ;
   static method _#named#tearOff() → self2::Class2
@@ -41,7 +41,7 @@
     return new self2::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self2::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self2::Class4<self2::Class4::T%>
     ;
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::_#_#tearOff::T%>
@@ -65,3 +65,8 @@
   static method _#new#tearOff<T extends core::num>() → self2::Class5<self2::Class5::_#new#tearOff::T>
     return self2::Class5::•<self2::Class5::_#new#tearOff::T>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self2::Class2::redirect
+  #C2 = constructor-tearoff self2::Class4::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
index bcf1164..4920c00 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
@@ -187,7 +187,7 @@
     return new mai::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   constructor named() → mai::Class2
     : super core::Object::•()
     ;
@@ -207,7 +207,7 @@
     return new mai::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10]/*isLegacy*/;
   constructor _() → mai::Class4<mai::Class4::T%>
     : super core::Object::•()
     ;
@@ -243,4 +243,6 @@
   #C6 = static-tearoff mai::Class4::_#redirect#tearOff
   #C7 = static-tearoff mai::Class5::_#new#tearOff
   #C8 = false
+  #C9 = constructor-tearoff mai::Class2::redirect
+  #C10 = constructor-tearoff mai::Class4::redirect
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect
index 31fe515..81c7cd2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect
@@ -35,7 +35,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1<self::Class1::T%>
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
 class Class2<T extends core::num> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self::Class2<self::Class2::T>
     : super core::Object::•()
     ;
@@ -59,7 +59,7 @@
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
 class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
     : super core::Object::•()
     ;
@@ -71,7 +71,7 @@
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
 class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   constructor _() → self::Class4<self::Class4::T>
     : super core::Object::•()
     ;
@@ -83,7 +83,7 @@
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
 class Class4int extends self::Class4<self::Class4int> {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4int::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   constructor _() → self::Class4int
     : super self::Class4::_()
     ;
@@ -101,7 +101,7 @@
   self::testBounded();
 }
 static method testGeneric() → dynamic {
-  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C6;
   self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
@@ -122,14 +122,14 @@
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
-  dynamic f1c = #C1;
+  dynamic f1c = #C6;
   dynamic c1d = f1c{dynamic}.call();
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
   self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
 }
 static method testBounded() → dynamic {
-  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  <T extends core::num>() → self::Class2<T> f2a = #C7;
   self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -142,7 +142,7 @@
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
-  dynamic f2b = #C2;
+  dynamic f2b = #C7;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -151,7 +151,7 @@
   self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
   self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
   self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
-  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C8;
   self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
   self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -161,7 +161,7 @@
   () → Null {
     f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
   };
-  dynamic f3b = #C3;
+  dynamic f3b = #C8;
   dynamic c3c = f3b{dynamic}.call();
   self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -169,11 +169,11 @@
   self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
   self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
   self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
-  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C9;
   () → Null {
     self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
   };
-  dynamic f4b = #C4;
+  dynamic f4b = #C9;
   self::throws(() → dynamic => f4b{dynamic}.call());
   dynamic c4b = f4b{dynamic}.call<self::Class4int>();
   self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
@@ -182,7 +182,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -197,9 +197,14 @@
 }
 
 constants  {
-  #C1 = static-tearoff self::Class1::_#new#tearOff
-  #C2 = static-tearoff self::Class2::_#new#tearOff
-  #C3 = static-tearoff self::Class3::_#new#tearOff
-  #C4 = static-tearoff self::Class4::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = constructor-tearoff self::Class4int::•
+  #C6 = static-tearoff self::Class1::_#new#tearOff
+  #C7 = static-tearoff self::Class2::_#new#tearOff
+  #C8 = static-tearoff self::Class3::_#new#tearOff
+  #C9 = static-tearoff self::Class4::_#new#tearOff
+  #C10 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect
index 2b61e14..2a37cef 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect
@@ -35,7 +35,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1<self::Class1::T%>
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
 class Class2<T extends core::num> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self::Class2<self::Class2::T>
     : super core::Object::•()
     ;
@@ -59,7 +59,7 @@
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
 class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
     : super core::Object::•()
     ;
@@ -71,7 +71,7 @@
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
 class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   constructor _() → self::Class4<self::Class4::T>
     : super core::Object::•()
     ;
@@ -83,7 +83,7 @@
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
 class Class4int extends self::Class4<self::Class4int> {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4int::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   constructor _() → self::Class4int
     : super self::Class4::_()
     ;
@@ -101,7 +101,7 @@
   self::testBounded();
 }
 static method testGeneric() → dynamic {
-  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C6;
   self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
@@ -122,14 +122,14 @@
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
-  dynamic f1c = #C1;
+  dynamic f1c = #C6;
   dynamic c1d = f1c{dynamic}.call();
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
   self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
 }
 static method testBounded() → dynamic {
-  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  <T extends core::num>() → self::Class2<T> f2a = #C7;
   self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -142,7 +142,7 @@
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
-  dynamic f2b = #C2;
+  dynamic f2b = #C7;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -151,7 +151,7 @@
   self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
   self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
   self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
-  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C8;
   self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
   self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -161,7 +161,7 @@
   () → Null {
     f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
   };
-  dynamic f3b = #C3;
+  dynamic f3b = #C8;
   dynamic c3c = f3b{dynamic}.call();
   self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -169,11 +169,11 @@
   self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
   self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
   self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
-  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C9;
   () → Null {
     self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
   };
-  dynamic f4b = #C4;
+  dynamic f4b = #C9;
   self::throws(() → dynamic => f4b{dynamic}.call());
   dynamic c4b = f4b{dynamic}.call<self::Class4int>();
   self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
@@ -182,7 +182,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -197,9 +197,14 @@
 }
 
 constants  {
-  #C1 = static-tearoff self::Class1::_#new#tearOff
-  #C2 = static-tearoff self::Class2::_#new#tearOff
-  #C3 = static-tearoff self::Class3::_#new#tearOff
-  #C4 = static-tearoff self::Class4::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = constructor-tearoff self::Class4int::•
+  #C6 = static-tearoff self::Class1::_#new#tearOff
+  #C7 = static-tearoff self::Class2::_#new#tearOff
+  #C8 = static-tearoff self::Class3::_#new#tearOff
+  #C9 = static-tearoff self::Class4::_#new#tearOff
+  #C10 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect
index 31fe515..81c7cd2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect
@@ -35,7 +35,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1<self::Class1::T%>
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
 class Class2<T extends core::num> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self::Class2<self::Class2::T>
     : super core::Object::•()
     ;
@@ -59,7 +59,7 @@
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
 class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
     : super core::Object::•()
     ;
@@ -71,7 +71,7 @@
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
 class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   constructor _() → self::Class4<self::Class4::T>
     : super core::Object::•()
     ;
@@ -83,7 +83,7 @@
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
 class Class4int extends self::Class4<self::Class4int> {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4int::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   constructor _() → self::Class4int
     : super self::Class4::_()
     ;
@@ -101,7 +101,7 @@
   self::testBounded();
 }
 static method testGeneric() → dynamic {
-  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C6;
   self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
@@ -122,14 +122,14 @@
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
-  dynamic f1c = #C1;
+  dynamic f1c = #C6;
   dynamic c1d = f1c{dynamic}.call();
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
   self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
 }
 static method testBounded() → dynamic {
-  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  <T extends core::num>() → self::Class2<T> f2a = #C7;
   self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -142,7 +142,7 @@
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
-  dynamic f2b = #C2;
+  dynamic f2b = #C7;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -151,7 +151,7 @@
   self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
   self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
   self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
-  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C8;
   self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
   self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -161,7 +161,7 @@
   () → Null {
     f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
   };
-  dynamic f3b = #C3;
+  dynamic f3b = #C8;
   dynamic c3c = f3b{dynamic}.call();
   self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -169,11 +169,11 @@
   self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
   self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
   self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
-  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C9;
   () → Null {
     self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
   };
-  dynamic f4b = #C4;
+  dynamic f4b = #C9;
   self::throws(() → dynamic => f4b{dynamic}.call());
   dynamic c4b = f4b{dynamic}.call<self::Class4int>();
   self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
@@ -182,7 +182,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -197,9 +197,14 @@
 }
 
 constants  {
-  #C1 = static-tearoff self::Class1::_#new#tearOff
-  #C2 = static-tearoff self::Class2::_#new#tearOff
-  #C3 = static-tearoff self::Class3::_#new#tearOff
-  #C4 = static-tearoff self::Class4::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = constructor-tearoff self::Class4int::•
+  #C6 = static-tearoff self::Class1::_#new#tearOff
+  #C7 = static-tearoff self::Class2::_#new#tearOff
+  #C8 = static-tearoff self::Class3::_#new#tearOff
+  #C9 = static-tearoff self::Class4::_#new#tearOff
+  #C10 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
index f1a60c8..eaa086d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
@@ -68,3 +68,12 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:13:7 -> ConstructorTearOffConstant(Class1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:45:7 -> ConstructorTearOffConstant(Class2.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:50:7 -> ConstructorTearOffConstant(Class3.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:55:7 -> ConstructorTearOffConstant(Class4.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:60:7 -> ConstructorTearOffConstant(Class4int.)
+Extra constant evaluation: evaluated: 25, effectively constant: 5
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect
index 2b61e14..2a37cef 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1<self::Class1::T%>
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
 class Class2<T extends core::num> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self::Class2<self::Class2::T>
     : super core::Object::•()
     ;
@@ -59,7 +59,7 @@
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
 class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
     : super core::Object::•()
     ;
@@ -71,7 +71,7 @@
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
 class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   constructor _() → self::Class4<self::Class4::T>
     : super core::Object::•()
     ;
@@ -83,7 +83,7 @@
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
 class Class4int extends self::Class4<self::Class4int> {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4int::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   constructor _() → self::Class4int
     : super self::Class4::_()
     ;
@@ -101,7 +101,7 @@
   self::testBounded();
 }
 static method testGeneric() → dynamic {
-  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C6;
   self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
@@ -122,14 +122,14 @@
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
-  dynamic f1c = #C1;
+  dynamic f1c = #C6;
   dynamic c1d = f1c{dynamic}.call();
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
   self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
 }
 static method testBounded() → dynamic {
-  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  <T extends core::num>() → self::Class2<T> f2a = #C7;
   self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -142,7 +142,7 @@
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
-  dynamic f2b = #C2;
+  dynamic f2b = #C7;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -151,7 +151,7 @@
   self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
   self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
   self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
-  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C8;
   self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
   self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -161,7 +161,7 @@
   () → Null {
     f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
   };
-  dynamic f3b = #C3;
+  dynamic f3b = #C8;
   dynamic c3c = f3b{dynamic}.call();
   self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -169,11 +169,11 @@
   self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
   self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
   self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
-  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C9;
   () → Null {
     self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
   };
-  dynamic f4b = #C4;
+  dynamic f4b = #C9;
   self::throws(() → dynamic => f4b{dynamic}.call());
   dynamic c4b = f4b{dynamic}.call<self::Class4int>();
   self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
@@ -182,7 +182,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -197,9 +197,14 @@
 }
 
 constants  {
-  #C1 = static-tearoff self::Class1::_#new#tearOff
-  #C2 = static-tearoff self::Class2::_#new#tearOff
-  #C3 = static-tearoff self::Class3::_#new#tearOff
-  #C4 = static-tearoff self::Class4::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = constructor-tearoff self::Class4int::•
+  #C6 = static-tearoff self::Class1::_#new#tearOff
+  #C7 = static-tearoff self::Class2::_#new#tearOff
+  #C8 = static-tearoff self::Class3::_#new#tearOff
+  #C9 = static-tearoff self::Class4::_#new#tearOff
+  #C10 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect
index abfa7c0..66ac229 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect
@@ -6,7 +6,7 @@
 typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
 typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -22,51 +22,51 @@
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
-static const field () → self::A<core::int> f1a = #C2;
-static const field () → self::A<core::int> f1b = #C2;
-static const field () → self::A<core::int> f1c = #C2;
-static const field () → self::A<core::int> f1d = #C4;
-static const field () → self::A<core::int> f1e = #C4;
-static const field () → self::A<core::int> f1f = #C4;
-static const field () → self::A<core::int> f1g = #C6;
-static const field () → self::A<core::int> f1h = #C6;
-static const field () → self::A<core::int> f1i = #C6;
-static const field () → self::A<core::int> g1a = #C2;
-static const field () → self::A<core::int> g1b = #C2;
-static const field () → self::A<core::int> g1c = #C2;
-static const field () → self::A<core::int> h1a = #C2;
-static const field () → self::A<core::int> h1b = #C2;
-static const field () → self::A<core::int> h1c = #C2;
+static const field () → self::A<core::int> f1a = #C3;
+static const field () → self::A<core::int> f1b = #C3;
+static const field () → self::A<core::int> f1c = #C3;
+static const field () → self::A<core::int> f1d = #C5;
+static const field () → self::A<core::int> f1e = #C5;
+static const field () → self::A<core::int> f1f = #C5;
+static const field () → self::A<core::int> f1g = #C7;
+static const field () → self::A<core::int> f1h = #C7;
+static const field () → self::A<core::int> f1i = #C7;
+static const field () → self::A<core::int> g1a = #C3;
+static const field () → self::A<core::int> g1b = #C3;
+static const field () → self::A<core::int> g1c = #C3;
+static const field () → self::A<core::int> h1a = #C3;
+static const field () → self::A<core::int> h1b = #C3;
+static const field () → self::A<core::int> h1c = #C3;
 static method main() → dynamic {
   self::test<core::int>();
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C4, #C4);
-  core::identical(#C4, #C4);
-  core::identical(#C6, #C6);
-  core::identical(#C6, #C6);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C5, #C5);
+  core::identical(#C5, #C5);
+  core::identical(#C7, #C7);
+  core::identical(#C7, #C7);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
 }
 static method test<T extends core::num>() → dynamic {
-  () → self::A<self::test::T> f2a = #C1<self::test::T>;
-  () → self::A<self::test::T> f2b = #C1<self::test::T>;
-  () → self::A<self::test::T> f2c = #C1<self::test::T>;
-  () → self::A<self::test::T> f2d = #C3<self::test::T>;
-  () → self::A<self::test::T> f2e = #C3<self::test::T>;
-  () → self::A<self::test::T> f2f = #C3<self::test::T>;
-  () → self::A<self::test::T> f2g = #C5<self::test::T>;
-  () → self::A<self::test::T> f2h = #C5<self::test::T>;
-  () → self::A<self::test::T> f2i = #C5<self::test::T>;
-  () → self::A<core::int> g2a = #C2;
-  () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C2;
-  () → self::A<self::test::T> h2a = #C1<self::test::T>;
-  () → self::A<self::test::T> h2b = #C1<self::test::T>;
-  () → self::A<self::test::T> h2c = #C1<self::test::T>;
-  self::expect(#C2, g2a);
+  () → self::A<self::test::T> f2a = #C2<self::test::T>;
+  () → self::A<self::test::T> f2b = #C2<self::test::T>;
+  () → self::A<self::test::T> f2c = #C2<self::test::T>;
+  () → self::A<self::test::T> f2d = #C4<self::test::T>;
+  () → self::A<self::test::T> f2e = #C4<self::test::T>;
+  () → self::A<self::test::T> f2f = #C4<self::test::T>;
+  () → self::A<self::test::T> f2g = #C6<self::test::T>;
+  () → self::A<self::test::T> f2h = #C6<self::test::T>;
+  () → self::A<self::test::T> f2i = #C6<self::test::T>;
+  () → self::A<core::int> g2a = #C3;
+  () → self::A<core::int> g2b = #C3;
+  () → self::A<core::int> g2c = #C3;
+  () → self::A<self::test::T> h2a = #C2<self::test::T>;
+  () → self::A<self::test::T> h2b = #C2<self::test::T>;
+  () → self::A<self::test::T> h2c = #C2<self::test::T>;
+  self::expect(#C3, g2a);
   self::expect(g2a, g2b);
   if(self::inSoundMode) {
     self::expect(g2a, g2c);
@@ -96,10 +96,11 @@
   return self::A::_#redirect#tearOff<self::_#H#redirect#tearOff::X%>();
 
 constants  {
-  #C1 = static-tearoff self::A::_#new#tearOff
-  #C2 = instantiation self::A::_#new#tearOff <core::int>
-  #C3 = static-tearoff self::A::_#fact#tearOff
-  #C4 = instantiation self::A::_#fact#tearOff <core::int>
-  #C5 = static-tearoff self::A::_#redirect#tearOff
-  #C6 = instantiation self::A::_#redirect#tearOff <core::int>
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = static-tearoff self::A::_#new#tearOff
+  #C3 = instantiation #C2 <core::int>
+  #C4 = static-tearoff self::A::_#fact#tearOff
+  #C5 = instantiation #C4 <core::int>
+  #C6 = static-tearoff self::A::_#redirect#tearOff
+  #C7 = instantiation #C6 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect
index e5c1801..6d90c84 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
 typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
 typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -22,51 +22,51 @@
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
-static const field () → self::A<core::int> f1a = #C2;
-static const field () → self::A<core::int> f1b = #C2;
-static const field () → self::A<core::int> f1c = #C2;
-static const field () → self::A<core::int> f1d = #C4;
-static const field () → self::A<core::int> f1e = #C4;
-static const field () → self::A<core::int> f1f = #C4;
-static const field () → self::A<core::int> f1g = #C6;
-static const field () → self::A<core::int> f1h = #C6;
-static const field () → self::A<core::int> f1i = #C6;
-static const field () → self::A<core::int> g1a = #C2;
-static const field () → self::A<core::int> g1b = #C2;
-static const field () → self::A<core::int> g1c = #C2;
-static const field () → self::A<core::int> h1a = #C2;
-static const field () → self::A<core::int> h1b = #C2;
-static const field () → self::A<core::int> h1c = #C2;
+static const field () → self::A<core::int> f1a = #C3;
+static const field () → self::A<core::int> f1b = #C3;
+static const field () → self::A<core::int> f1c = #C3;
+static const field () → self::A<core::int> f1d = #C5;
+static const field () → self::A<core::int> f1e = #C5;
+static const field () → self::A<core::int> f1f = #C5;
+static const field () → self::A<core::int> f1g = #C7;
+static const field () → self::A<core::int> f1h = #C7;
+static const field () → self::A<core::int> f1i = #C7;
+static const field () → self::A<core::int> g1a = #C3;
+static const field () → self::A<core::int> g1b = #C3;
+static const field () → self::A<core::int> g1c = #C3;
+static const field () → self::A<core::int> h1a = #C3;
+static const field () → self::A<core::int> h1b = #C3;
+static const field () → self::A<core::int> h1c = #C3;
 static method main() → dynamic {
   self::test<core::int>();
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C4, #C4);
-  core::identical(#C4, #C4);
-  core::identical(#C6, #C6);
-  core::identical(#C6, #C6);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C5, #C5);
+  core::identical(#C5, #C5);
+  core::identical(#C7, #C7);
+  core::identical(#C7, #C7);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
 }
 static method test<T extends core::num>() → dynamic {
-  () → self::A<self::test::T> f2a = #C1<self::test::T>;
-  () → self::A<self::test::T> f2b = #C1<self::test::T>;
-  () → self::A<self::test::T> f2c = #C1<self::test::T>;
-  () → self::A<self::test::T> f2d = #C3<self::test::T>;
-  () → self::A<self::test::T> f2e = #C3<self::test::T>;
-  () → self::A<self::test::T> f2f = #C3<self::test::T>;
-  () → self::A<self::test::T> f2g = #C5<self::test::T>;
-  () → self::A<self::test::T> f2h = #C5<self::test::T>;
-  () → self::A<self::test::T> f2i = #C5<self::test::T>;
-  () → self::A<core::int> g2a = #C2;
-  () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C2;
-  () → self::A<self::test::T> h2a = #C1<self::test::T>;
-  () → self::A<self::test::T> h2b = #C1<self::test::T>;
-  () → self::A<self::test::T> h2c = #C1<self::test::T>;
-  self::expect(#C2, g2a);
+  () → self::A<self::test::T> f2a = #C2<self::test::T>;
+  () → self::A<self::test::T> f2b = #C2<self::test::T>;
+  () → self::A<self::test::T> f2c = #C2<self::test::T>;
+  () → self::A<self::test::T> f2d = #C4<self::test::T>;
+  () → self::A<self::test::T> f2e = #C4<self::test::T>;
+  () → self::A<self::test::T> f2f = #C4<self::test::T>;
+  () → self::A<self::test::T> f2g = #C6<self::test::T>;
+  () → self::A<self::test::T> f2h = #C6<self::test::T>;
+  () → self::A<self::test::T> f2i = #C6<self::test::T>;
+  () → self::A<core::int> g2a = #C3;
+  () → self::A<core::int> g2b = #C3;
+  () → self::A<core::int> g2c = #C3;
+  () → self::A<self::test::T> h2a = #C2<self::test::T>;
+  () → self::A<self::test::T> h2b = #C2<self::test::T>;
+  () → self::A<self::test::T> h2c = #C2<self::test::T>;
+  self::expect(#C3, g2a);
   self::expect(g2a, g2b);
   if(self::inSoundMode) {
     self::expect(g2a, g2c);
@@ -96,12 +96,13 @@
   return self::A::_#redirect#tearOff<self::_#H#redirect#tearOff::X%>();
 
 constants  {
-  #C1 = static-tearoff self::A::_#new#tearOff
-  #C2 = instantiation self::A::_#new#tearOff <core::int>
-  #C3 = static-tearoff self::A::_#fact#tearOff
-  #C4 = instantiation self::A::_#fact#tearOff <core::int>
-  #C5 = static-tearoff self::A::_#redirect#tearOff
-  #C6 = instantiation self::A::_#redirect#tearOff <core::int>
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = static-tearoff self::A::_#new#tearOff
+  #C3 = instantiation #C2 <core::int>
+  #C4 = static-tearoff self::A::_#fact#tearOff
+  #C5 = instantiation #C4 <core::int>
+  #C6 = static-tearoff self::A::_#redirect#tearOff
+  #C7 = instantiation #C6 <core::int>
 }
 
 Extra constant evaluation status:
@@ -115,4 +116,4 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:48:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:50:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:51:3 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 59, effectively constant: 10
+Extra constant evaluation: evaluated: 58, effectively constant: 10
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect
index 942bbe6..6075c15 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect
@@ -6,7 +6,7 @@
 typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
 typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -22,51 +22,51 @@
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
-static const field () → self::A<core::int> f1a = #C2;
-static const field () → self::A<core::int> f1b = #C2;
-static const field () → self::A<core::int> f1c = #C2;
-static const field () → self::A<core::int> f1d = #C4;
-static const field () → self::A<core::int> f1e = #C4;
-static const field () → self::A<core::int> f1f = #C4;
-static const field () → self::A<core::int> f1g = #C6;
-static const field () → self::A<core::int> f1h = #C6;
-static const field () → self::A<core::int> f1i = #C6;
-static const field () → self::A<core::int> g1a = #C2;
-static const field () → self::A<core::int> g1b = #C2;
-static const field () → self::A<core::int> g1c = #C2;
-static const field () → self::A<core::int> h1a = #C2;
-static const field () → self::A<core::int> h1b = #C2;
-static const field () → self::A<core::int> h1c = #C2;
+static const field () → self::A<core::int> f1a = #C3;
+static const field () → self::A<core::int> f1b = #C3;
+static const field () → self::A<core::int> f1c = #C3;
+static const field () → self::A<core::int> f1d = #C5;
+static const field () → self::A<core::int> f1e = #C5;
+static const field () → self::A<core::int> f1f = #C5;
+static const field () → self::A<core::int> f1g = #C7;
+static const field () → self::A<core::int> f1h = #C7;
+static const field () → self::A<core::int> f1i = #C7;
+static const field () → self::A<core::int> g1a = #C3;
+static const field () → self::A<core::int> g1b = #C3;
+static const field () → self::A<core::int> g1c = #C3;
+static const field () → self::A<core::int> h1a = #C3;
+static const field () → self::A<core::int> h1b = #C3;
+static const field () → self::A<core::int> h1c = #C3;
 static method main() → dynamic {
   self::test<core::int>();
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C4, #C4);
-  core::identical(#C4, #C4);
-  core::identical(#C6, #C6);
-  core::identical(#C6, #C6);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C5, #C5);
+  core::identical(#C5, #C5);
+  core::identical(#C7, #C7);
+  core::identical(#C7, #C7);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
 }
 static method test<T extends core::num>() → dynamic {
-  () → self::A<self::test::T> f2a = #C1<self::test::T>;
-  () → self::A<self::test::T> f2b = #C1<self::test::T>;
-  () → self::A<self::test::T> f2c = #C1<self::test::T>;
-  () → self::A<self::test::T> f2d = #C3<self::test::T>;
-  () → self::A<self::test::T> f2e = #C3<self::test::T>;
-  () → self::A<self::test::T> f2f = #C3<self::test::T>;
-  () → self::A<self::test::T> f2g = #C5<self::test::T>;
-  () → self::A<self::test::T> f2h = #C5<self::test::T>;
-  () → self::A<self::test::T> f2i = #C5<self::test::T>;
-  () → self::A<core::int> g2a = #C2;
-  () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C2;
-  () → self::A<self::test::T> h2a = #C1<self::test::T>;
-  () → self::A<self::test::T> h2b = #C1<self::test::T>;
-  () → self::A<self::test::T> h2c = #C1<self::test::T>;
-  self::expect(#C2, g2a);
+  () → self::A<self::test::T> f2a = #C2<self::test::T>;
+  () → self::A<self::test::T> f2b = #C2<self::test::T>;
+  () → self::A<self::test::T> f2c = #C2<self::test::T>;
+  () → self::A<self::test::T> f2d = #C4<self::test::T>;
+  () → self::A<self::test::T> f2e = #C4<self::test::T>;
+  () → self::A<self::test::T> f2f = #C4<self::test::T>;
+  () → self::A<self::test::T> f2g = #C6<self::test::T>;
+  () → self::A<self::test::T> f2h = #C6<self::test::T>;
+  () → self::A<self::test::T> f2i = #C6<self::test::T>;
+  () → self::A<core::int> g2a = #C3;
+  () → self::A<core::int> g2b = #C3;
+  () → self::A<core::int> g2c = #C3;
+  () → self::A<self::test::T> h2a = #C2<self::test::T>;
+  () → self::A<self::test::T> h2b = #C2<self::test::T>;
+  () → self::A<self::test::T> h2c = #C2<self::test::T>;
+  self::expect(#C3, g2a);
   self::expect(g2a, g2b);
   if(self::inSoundMode) {
     self::expect(g2a, g2c);
@@ -96,10 +96,11 @@
   return self::A::_#redirect#tearOff<self::_#H#redirect#tearOff::X%>();
 
 constants  {
-  #C1 = static-tearoff self::A::_#new#tearOff
-  #C2 = instantiation self::A::_#new#tearOff <core::int*>
-  #C3 = static-tearoff self::A::_#fact#tearOff
-  #C4 = instantiation self::A::_#fact#tearOff <core::int*>
-  #C5 = static-tearoff self::A::_#redirect#tearOff
-  #C6 = instantiation self::A::_#redirect#tearOff <core::int*>
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = static-tearoff self::A::_#new#tearOff
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = static-tearoff self::A::_#fact#tearOff
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = static-tearoff self::A::_#redirect#tearOff
+  #C7 = instantiation #C6 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect
index feba408..1d3da75 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect
@@ -23,19 +23,19 @@
 static final field core::bool inSoundMode;
 static const field () → self::A<core::int> f1a = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> f1b = self::A::_#new#tearOff<core::int>;
-static const field () → self::A<core::int> f1c = self::_#F#new#tearOff<core::int>;
+static const field () → self::A<core::int> f1c = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> f1d = self::A::_#fact#tearOff<core::int>;
 static const field () → self::A<core::int> f1e = self::A::_#fact#tearOff<core::int>;
-static const field () → self::A<core::int> f1f = self::_#F#fact#tearOff<core::int>;
+static const field () → self::A<core::int> f1f = self::A::_#fact#tearOff<core::int>;
 static const field () → self::A<core::int> f1g = self::A::_#redirect#tearOff<core::int>;
 static const field () → self::A<core::int> f1h = self::A::_#redirect#tearOff<core::int>;
-static const field () → self::A<core::int> f1i = self::_#F#redirect#tearOff<core::int>;
+static const field () → self::A<core::int> f1i = self::A::_#redirect#tearOff<core::int>;
 static const field () → self::A<core::int> g1a = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> g1b = self::A::_#new#tearOff<core::int>;
-static const field () → self::A<core::int> g1c = self::_#G#new#tearOff<dynamic>;
+static const field () → self::A<core::int> g1c = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> h1a = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> h1b = self::A::_#new#tearOff<core::int>;
-static const field () → self::A<core::int> h1c = self::_#H#new#tearOff<core::int, dynamic>;
+static const field () → self::A<core::int> h1c = self::A::_#new#tearOff<core::int>;
 static method main() → dynamic
   ;
 static method test<T extends core::num>() → dynamic
@@ -63,19 +63,20 @@
 
 
 Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///inferred_non_proper_rename.dart:7:7 -> ConstructorTearOffConstant(A.redirect)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:17:13 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:18:13 -> InstantiationConstant(A._#new#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:19:31 -> InstantiationConstant(A._#new#tearOff<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:19:25 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:20:13 -> InstantiationConstant(A._#fact#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:21:13 -> InstantiationConstant(A._#fact#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:22:31 -> InstantiationConstant(A._#fact#tearOff<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:22:25 -> InstantiationConstant(A._#fact#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:23:13 -> InstantiationConstant(A._#redirect#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:24:13 -> InstantiationConstant(A._#redirect#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:25:31 -> InstantiationConstant(A._#redirect#tearOff<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:25:25 -> InstantiationConstant(A._#redirect#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:27:13 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:28:13 -> InstantiationConstant(A._#new#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:29:31 -> InstantiationConstant(A._#new#tearOff<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:29:25 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:31:13 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:32:13 -> InstantiationConstant(A._#new#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:33:31 -> InstantiationConstant(A._#new#tearOff<int*>)
-Extra constant evaluation: evaluated: 30, effectively constant: 15
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:33:25 -> InstantiationConstant(A._#new#tearOff<int*>)
+Extra constant evaluation: evaluated: 30, effectively constant: 16
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect
index 3d86e63..f1ac2a0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
 typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -22,51 +22,51 @@
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
-static const field () → self::A<core::int> f1a = #C2;
-static const field () → self::A<core::int> f1b = #C2;
-static const field () → self::A<core::int> f1c = #C2;
-static const field () → self::A<core::int> f1d = #C4;
-static const field () → self::A<core::int> f1e = #C4;
-static const field () → self::A<core::int> f1f = #C4;
-static const field () → self::A<core::int> f1g = #C6;
-static const field () → self::A<core::int> f1h = #C6;
-static const field () → self::A<core::int> f1i = #C6;
-static const field () → self::A<core::int> g1a = #C2;
-static const field () → self::A<core::int> g1b = #C2;
-static const field () → self::A<core::int> g1c = #C2;
-static const field () → self::A<core::int> h1a = #C2;
-static const field () → self::A<core::int> h1b = #C2;
-static const field () → self::A<core::int> h1c = #C2;
+static const field () → self::A<core::int> f1a = #C3;
+static const field () → self::A<core::int> f1b = #C3;
+static const field () → self::A<core::int> f1c = #C3;
+static const field () → self::A<core::int> f1d = #C5;
+static const field () → self::A<core::int> f1e = #C5;
+static const field () → self::A<core::int> f1f = #C5;
+static const field () → self::A<core::int> f1g = #C7;
+static const field () → self::A<core::int> f1h = #C7;
+static const field () → self::A<core::int> f1i = #C7;
+static const field () → self::A<core::int> g1a = #C3;
+static const field () → self::A<core::int> g1b = #C3;
+static const field () → self::A<core::int> g1c = #C3;
+static const field () → self::A<core::int> h1a = #C3;
+static const field () → self::A<core::int> h1b = #C3;
+static const field () → self::A<core::int> h1c = #C3;
 static method main() → dynamic {
   self::test<core::int>();
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C4, #C4);
-  core::identical(#C4, #C4);
-  core::identical(#C6, #C6);
-  core::identical(#C6, #C6);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C5, #C5);
+  core::identical(#C5, #C5);
+  core::identical(#C7, #C7);
+  core::identical(#C7, #C7);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
 }
 static method test<T extends core::num>() → dynamic {
-  () → self::A<self::test::T> f2a = #C1<self::test::T>;
-  () → self::A<self::test::T> f2b = #C1<self::test::T>;
-  () → self::A<self::test::T> f2c = #C1<self::test::T>;
-  () → self::A<self::test::T> f2d = #C3<self::test::T>;
-  () → self::A<self::test::T> f2e = #C3<self::test::T>;
-  () → self::A<self::test::T> f2f = #C3<self::test::T>;
-  () → self::A<self::test::T> f2g = #C5<self::test::T>;
-  () → self::A<self::test::T> f2h = #C5<self::test::T>;
-  () → self::A<self::test::T> f2i = #C5<self::test::T>;
-  () → self::A<core::int> g2a = #C2;
-  () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C2;
-  () → self::A<self::test::T> h2a = #C1<self::test::T>;
-  () → self::A<self::test::T> h2b = #C1<self::test::T>;
-  () → self::A<self::test::T> h2c = #C1<self::test::T>;
-  self::expect(#C2, g2a);
+  () → self::A<self::test::T> f2a = #C2<self::test::T>;
+  () → self::A<self::test::T> f2b = #C2<self::test::T>;
+  () → self::A<self::test::T> f2c = #C2<self::test::T>;
+  () → self::A<self::test::T> f2d = #C4<self::test::T>;
+  () → self::A<self::test::T> f2e = #C4<self::test::T>;
+  () → self::A<self::test::T> f2f = #C4<self::test::T>;
+  () → self::A<self::test::T> f2g = #C6<self::test::T>;
+  () → self::A<self::test::T> f2h = #C6<self::test::T>;
+  () → self::A<self::test::T> f2i = #C6<self::test::T>;
+  () → self::A<core::int> g2a = #C3;
+  () → self::A<core::int> g2b = #C3;
+  () → self::A<core::int> g2c = #C3;
+  () → self::A<self::test::T> h2a = #C2<self::test::T>;
+  () → self::A<self::test::T> h2b = #C2<self::test::T>;
+  () → self::A<self::test::T> h2c = #C2<self::test::T>;
+  self::expect(#C3, g2a);
   self::expect(g2a, g2b);
   if(self::inSoundMode) {
     self::expect(g2a, g2c);
@@ -96,12 +96,13 @@
   return self::A::_#redirect#tearOff<self::_#H#redirect#tearOff::X%>();
 
 constants  {
-  #C1 = static-tearoff self::A::_#new#tearOff
-  #C2 = instantiation self::A::_#new#tearOff <core::int*>
-  #C3 = static-tearoff self::A::_#fact#tearOff
-  #C4 = instantiation self::A::_#fact#tearOff <core::int*>
-  #C5 = static-tearoff self::A::_#redirect#tearOff
-  #C6 = instantiation self::A::_#redirect#tearOff <core::int*>
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = static-tearoff self::A::_#new#tearOff
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = static-tearoff self::A::_#fact#tearOff
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = static-tearoff self::A::_#redirect#tearOff
+  #C7 = instantiation #C6 <core::int*>
 }
 
 Extra constant evaluation status:
@@ -115,4 +116,4 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:48:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:50:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:51:3 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 59, effectively constant: 10
+Extra constant evaluation: evaluated: 58, effectively constant: 10
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect
index 254bc55..ddcf3b9 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect
@@ -56,7 +56,7 @@
   #C4 = static-tearoff self::_#G#new#tearOff
   #C5 = static-tearoff self::A::_#named#tearOff
   #C6 = static-tearoff self::B::_#named#tearOff
-  #C7 = instantiation self::B::_#named#tearOff <core::int>
+  #C7 = instantiation #C6 <core::int>
   #C8 = static-tearoff self::_#F#named#tearOff
-  #C9 = instantiation self::B::_#named#tearOff <dynamic>
+  #C9 = instantiation #C6 <dynamic>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect
index 254bc55..ddcf3b9 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect
@@ -56,7 +56,7 @@
   #C4 = static-tearoff self::_#G#new#tearOff
   #C5 = static-tearoff self::A::_#named#tearOff
   #C6 = static-tearoff self::B::_#named#tearOff
-  #C7 = instantiation self::B::_#named#tearOff <core::int>
+  #C7 = instantiation #C6 <core::int>
   #C8 = static-tearoff self::_#F#named#tearOff
-  #C9 = instantiation self::B::_#named#tearOff <dynamic>
+  #C9 = instantiation #C6 <dynamic>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect
index b80b9d5..3414686 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect
@@ -56,7 +56,7 @@
   #C4 = static-tearoff self::_#G#new#tearOff
   #C5 = static-tearoff self::A::_#named#tearOff
   #C6 = static-tearoff self::B::_#named#tearOff
-  #C7 = instantiation self::B::_#named#tearOff <core::int*>
+  #C7 = instantiation #C6 <core::int*>
   #C8 = static-tearoff self::_#F#named#tearOff
-  #C9 = instantiation self::B::_#named#tearOff <dynamic>
+  #C9 = instantiation #C6 <dynamic>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect
index b80b9d5..3414686 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect
@@ -56,7 +56,7 @@
   #C4 = static-tearoff self::_#G#new#tearOff
   #C5 = static-tearoff self::A::_#named#tearOff
   #C6 = static-tearoff self::B::_#named#tearOff
-  #C7 = instantiation self::B::_#named#tearOff <core::int*>
+  #C7 = instantiation #C6 <core::int*>
   #C8 = static-tearoff self::_#F#named#tearOff
-  #C9 = instantiation self::B::_#named#tearOff <dynamic>
+  #C9 = instantiation #C6 <dynamic>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart
new file mode 100644
index 0000000..17b9e38
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2021, 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.
+
+typedef MyList<T extends num> = List<T>;
+
+main() {
+  const c1 = MyList<num>.filled;
+  const c2 = MyList<num>.filled;
+  const c3 = (MyList.filled)<num>;
+
+  const c4 = identical(c1, c2);
+  const c5 = identical(c1, c3);
+
+  expect(true, c4);
+  expect(false, c5);
+
+  expect(true, identical(c1, c2));
+  expect(false, identical(c1, c3));
+
+  var v1 = MyList<num>.filled;
+  var v2 = MyList<num>.filled;
+  var v3 = (MyList.filled)<num>;
+
+  var v4 = identical(v1, v2);
+  var v5 = identical(v1, v3);
+
+  expect(true, v4);
+  expect(false, v5);
+
+  expect(true, identical(v1, v2));
+  expect(false, identical(v1, v3));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.expect
new file mode 100644
index 0000000..672dbca
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num>
+  #C7 = null
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.transformed.expect
new file mode 100644
index 0000000..36b8a3e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.transformed.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::_List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num>
+  #C7 = null
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:18:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:19:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 52, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline.expect
new file mode 100644
index 0000000..f4c644d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+typedef MyList<T extends num> = List<T>;
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f083298
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+expect(expected, actual) {}
+main() {}
+typedef MyList<T extends num> = List<T>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.expect
new file mode 100644
index 0000000..2a6bd0b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect
new file mode 100644
index 0000000..b89a67b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.transformed.expect
new file mode 100644
index 0000000..9e2f5a1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.transformed.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::_List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:18:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:19:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 52, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.expect
index 1970258..309b5f6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.expect
@@ -47,7 +47,7 @@
 
 typedef B<T extends core::num> = self::A<T>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -110,3 +110,7 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.transformed.expect
index 1970258..309b5f6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.transformed.expect
@@ -47,7 +47,7 @@
 
 typedef B<T extends core::num> = self::A<T>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -110,3 +110,7 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.expect
index 1970258..309b5f6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.expect
@@ -47,7 +47,7 @@
 
 typedef B<T extends core::num> = self::A<T>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -110,3 +110,7 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.outline.expect
index ae23513..cfe8fea 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.outline.expect
@@ -34,3 +34,8 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///misplaced_type_arguments.dart:5:7 -> ConstructorTearOffConstant(A.redirect)
+Extra constant evaluation: evaluated: 11, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.transformed.expect
index 1970258..309b5f6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.transformed.expect
@@ -47,7 +47,7 @@
 
 typedef B<T extends core::num> = self::A<T>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -110,3 +110,7 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect
index cd54bc8..f19d273 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect
@@ -15,7 +15,7 @@
 
 class Class extends core::Object {
   static field () → self::Class field = () → self::Class => new self::Class::_();
-  static final field dynamic _redirecting# = <dynamic>[self::Class::a, self::Class::b]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor _() → self::Class
     : super core::Object::•()
     ;
@@ -35,3 +35,8 @@
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::a
+  #C2 = constructor-tearoff self::Class::b
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect
index cd54bc8..f19d273 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
 
 class Class extends core::Object {
   static field () → self::Class field = () → self::Class => new self::Class::_();
-  static final field dynamic _redirecting# = <dynamic>[self::Class::a, self::Class::b]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor _() → self::Class
     : super core::Object::•()
     ;
@@ -35,3 +35,8 @@
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::a
+  #C2 = constructor-tearoff self::Class::b
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect
index cd54bc8..f19d273 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect
@@ -15,7 +15,7 @@
 
 class Class extends core::Object {
   static field () → self::Class field = () → self::Class => new self::Class::_();
-  static final field dynamic _redirecting# = <dynamic>[self::Class::a, self::Class::b]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor _() → self::Class
     : super core::Object::•()
     ;
@@ -35,3 +35,8 @@
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::a
+  #C2 = constructor-tearoff self::Class::b
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect
index 173ec34..bc12784 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect
@@ -35,3 +35,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///missing_redirecting_target.dart:5:7 -> ConstructorTearOffConstant(Class.a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///missing_redirecting_target.dart:5:7 -> ConstructorTearOffConstant(Class.b)
+Extra constant evaluation: evaluated: 4, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect
index cd54bc8..f19d273 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
 
 class Class extends core::Object {
   static field () → self::Class field = () → self::Class => new self::Class::_();
-  static final field dynamic _redirecting# = <dynamic>[self::Class::a, self::Class::b]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor _() → self::Class
     : super core::Object::•()
     ;
@@ -35,3 +35,8 @@
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::a
+  #C2 = constructor-tearoff self::Class::b
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart
new file mode 100644
index 0000000..9aad96b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2021, 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.
+
+abstract class Interface {
+  int get field;
+}
+
+class Class<T> implements Interface {
+  var field;
+
+  Class([this.field = 0]);
+  Class.named(this.field);
+  Class.redirectingGenerative(int field) : this(field);
+  factory Class.fact(int field) => new Class(field);
+  factory Class.redirectingFactory(int field) = Class;
+}
+
+mixin Mixin<S> {}
+
+class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+
+abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+
+test() {
+  NamedMixinApplication.fact;
+  NamedMixinApplication.redirectingFactory;
+
+  AbstractNamedMixinApplication.new;
+  AbstractNamedMixinApplication.named;
+  AbstractNamedMixinApplication.redirectingGenerative;
+  AbstractNamedMixinApplication.fact;
+  AbstractNamedMixinApplication.redirectingFactory;
+}
+
+var f1 = NamedMixinApplication.new;
+var f2 = NamedMixinApplication.named;
+var f3 = NamedMixinApplication.redirectingGenerative;
+
+main() {
+  var f1 = NamedMixinApplication.new;
+  var f2 = NamedMixinApplication.named;
+  var f3 = NamedMixinApplication.redirectingGenerative;
+
+  NamedMixinApplication<int, String>.new;
+  NamedMixinApplication<int, String>.named;
+  NamedMixinApplication<int, String>.redirectingGenerative;
+
+  NamedMixinApplication<int, String> Function([int]) n1 = f1<int, String>;
+  NamedMixinApplication<int, String> Function(int) n2 = f2<int, String>;
+  NamedMixinApplication<int, String> Function(int) n3 = f3<int, String>;
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
new file mode 100644
index 0000000..4acef90
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
@@ -0,0 +1,146 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C2]) → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
+    return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
+    return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+    return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
+    return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
+    return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = static-tearoff self::NamedMixinApplication::_#new#tearOff
+  #C4 = static-tearoff self::NamedMixinApplication::_#named#tearOff
+  #C5 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
+  #C6 = instantiation #C3 <core::int, core::String>
+  #C7 = instantiation #C4 <core::int, core::String>
+  #C8 = instantiation #C5 <core::int, core::String>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
new file mode 100644
index 0000000..e793729
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
@@ -0,0 +1,146 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C2]) → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
+    return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
+    return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+    return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
+    return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
+    return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = static-tearoff self::NamedMixinApplication::_#new#tearOff
+  #C4 = static-tearoff self::NamedMixinApplication::_#named#tearOff
+  #C5 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
+  #C6 = instantiation #C3 <core::int, core::String>
+  #C7 = instantiation #C4 <core::int, core::String>
+  #C8 = instantiation #C5 <core::int, core::String>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.textual_outline.expect
new file mode 100644
index 0000000..e762d95
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.textual_outline.expect
@@ -0,0 +1,21 @@
+abstract class Interface {
+  int get field;
+}
+
+class Class<T> implements Interface {
+  var field;
+  Class([this.field = 0]);
+  Class.named(this.field);
+  Class.redirectingGenerative(int field) : this(field);
+  factory Class.fact(int field) => new Class(field);
+  factory Class.redirectingFactory(int field) = Class;
+}
+
+mixin Mixin<S> {}
+class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+test() {}
+var f1 = NamedMixinApplication.new;
+var f2 = NamedMixinApplication.named;
+var f3 = NamedMixinApplication.redirectingGenerative;
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e4743e7
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.textual_outline_modelled.expect
@@ -0,0 +1,22 @@
+abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+
+abstract class Interface {
+  int get field;
+}
+
+class Class<T> implements Interface {
+  Class([this.field = 0]);
+  Class.named(this.field);
+  Class.redirectingGenerative(int field) : this(field);
+  factory Class.fact(int field) => new Class(field);
+  factory Class.redirectingFactory(int field) = Class;
+  var field;
+}
+
+class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+main() {}
+mixin Mixin<S> {}
+test() {}
+var f1 = NamedMixinApplication.new;
+var f2 = NamedMixinApplication.named;
+var f3 = NamedMixinApplication.redirectingGenerative;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
new file mode 100644
index 0000000..841838c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
@@ -0,0 +1,146 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C2]) → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
+    return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
+    return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+    return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
+    return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
+    return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = static-tearoff self::NamedMixinApplication::_#new#tearOff
+  #C4 = static-tearoff self::NamedMixinApplication::_#named#tearOff
+  #C5 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect
new file mode 100644
index 0000000..6aab2c5
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect
@@ -0,0 +1,75 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
+  constructor •([core::int field]) → self::Class<self::Class::T%>
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field]) → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
+    return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
+    return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    ;
+  static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
+  synthetic constructor •([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+    return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
+    return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
+    return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
+  synthetic constructor •([core::int field]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///named_mixin_application.dart:9:7 -> ConstructorTearOffConstant(Class.redirectingFactory)
+Extra constant evaluation: evaluated: 26, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
new file mode 100644
index 0000000..742d873
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
@@ -0,0 +1,146 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C2]) → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
+    return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
+    return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+    return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
+    return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
+    return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = static-tearoff self::NamedMixinApplication::_#new#tearOff
+  #C4 = static-tearoff self::NamedMixinApplication::_#named#tearOff
+  #C5 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.expect
index b6e38f4..9d31f32 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.expect
@@ -89,20 +89,20 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::B::_#new#tearOff
-  #C3 = instantiation self::B::_#new#tearOff <dynamic>
-  #C4 = instantiation self::B::_#new#tearOff <core::int>
+  #C3 = instantiation #C2 <dynamic>
+  #C4 = instantiation #C2 <core::int>
   #C5 = static-tearoff self::_#G3#new#tearOff
   #C6 = static-tearoff self::C::_#new#tearOff
-  #C7 = instantiation self::C::_#new#tearOff <dynamic, dynamic>
-  #C8 = instantiation self::C::_#new#tearOff <core::int, core::String>
+  #C7 = instantiation #C6 <dynamic, dynamic>
+  #C8 = instantiation #C6 <core::int, core::String>
   #C9 = static-tearoff self::_#H2#new#tearOff
-  #C10 = instantiation self::C::_#new#tearOff <core::int, core::int>
+  #C10 = instantiation #C6 <core::int, core::int>
   #C11 = static-tearoff self::_#H4#new#tearOff
-  #C12 = instantiation self::C::_#new#tearOff <core::String, core::int>
+  #C12 = instantiation #C6 <core::String, core::int>
   #C13 = static-tearoff self::_#H5#new#tearOff
   #C14 = static-tearoff self::_#H6#new#tearOff
   #C15 = static-tearoff self::D::_#new#tearOff
-  #C16 = instantiation self::D::_#new#tearOff <core::num>
-  #C17 = instantiation self::D::_#new#tearOff <core::int>
+  #C16 = instantiation #C15 <core::num>
+  #C17 = instantiation #C15 <core::int>
   #C18 = static-tearoff self::_#I3#new#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.transformed.expect
index b6e38f4..9d31f32 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.transformed.expect
@@ -89,20 +89,20 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::B::_#new#tearOff
-  #C3 = instantiation self::B::_#new#tearOff <dynamic>
-  #C4 = instantiation self::B::_#new#tearOff <core::int>
+  #C3 = instantiation #C2 <dynamic>
+  #C4 = instantiation #C2 <core::int>
   #C5 = static-tearoff self::_#G3#new#tearOff
   #C6 = static-tearoff self::C::_#new#tearOff
-  #C7 = instantiation self::C::_#new#tearOff <dynamic, dynamic>
-  #C8 = instantiation self::C::_#new#tearOff <core::int, core::String>
+  #C7 = instantiation #C6 <dynamic, dynamic>
+  #C8 = instantiation #C6 <core::int, core::String>
   #C9 = static-tearoff self::_#H2#new#tearOff
-  #C10 = instantiation self::C::_#new#tearOff <core::int, core::int>
+  #C10 = instantiation #C6 <core::int, core::int>
   #C11 = static-tearoff self::_#H4#new#tearOff
-  #C12 = instantiation self::C::_#new#tearOff <core::String, core::int>
+  #C12 = instantiation #C6 <core::String, core::int>
   #C13 = static-tearoff self::_#H5#new#tearOff
   #C14 = static-tearoff self::_#H6#new#tearOff
   #C15 = static-tearoff self::D::_#new#tearOff
-  #C16 = instantiation self::D::_#new#tearOff <core::num>
-  #C17 = instantiation self::D::_#new#tearOff <core::int>
+  #C16 = instantiation #C15 <core::num>
+  #C17 = instantiation #C15 <core::int>
   #C18 = static-tearoff self::_#I3#new#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.expect
index 2d72357..b2e567f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.expect
@@ -89,20 +89,20 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::B::_#new#tearOff
-  #C3 = instantiation self::B::_#new#tearOff <dynamic>
-  #C4 = instantiation self::B::_#new#tearOff <core::int*>
+  #C3 = instantiation #C2 <dynamic>
+  #C4 = instantiation #C2 <core::int*>
   #C5 = static-tearoff self::_#G3#new#tearOff
   #C6 = static-tearoff self::C::_#new#tearOff
-  #C7 = instantiation self::C::_#new#tearOff <dynamic, dynamic>
-  #C8 = instantiation self::C::_#new#tearOff <core::int*, core::String*>
+  #C7 = instantiation #C6 <dynamic, dynamic>
+  #C8 = instantiation #C6 <core::int*, core::String*>
   #C9 = static-tearoff self::_#H2#new#tearOff
-  #C10 = instantiation self::C::_#new#tearOff <core::int*, core::int*>
+  #C10 = instantiation #C6 <core::int*, core::int*>
   #C11 = static-tearoff self::_#H4#new#tearOff
-  #C12 = instantiation self::C::_#new#tearOff <core::String*, core::int*>
+  #C12 = instantiation #C6 <core::String*, core::int*>
   #C13 = static-tearoff self::_#H5#new#tearOff
   #C14 = static-tearoff self::_#H6#new#tearOff
   #C15 = static-tearoff self::D::_#new#tearOff
-  #C16 = instantiation self::D::_#new#tearOff <core::num*>
-  #C17 = instantiation self::D::_#new#tearOff <core::int*>
+  #C16 = instantiation #C15 <core::num*>
+  #C17 = instantiation #C15 <core::int*>
   #C18 = static-tearoff self::_#I3#new#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.transformed.expect
index 2d72357..b2e567f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.transformed.expect
@@ -89,20 +89,20 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::B::_#new#tearOff
-  #C3 = instantiation self::B::_#new#tearOff <dynamic>
-  #C4 = instantiation self::B::_#new#tearOff <core::int*>
+  #C3 = instantiation #C2 <dynamic>
+  #C4 = instantiation #C2 <core::int*>
   #C5 = static-tearoff self::_#G3#new#tearOff
   #C6 = static-tearoff self::C::_#new#tearOff
-  #C7 = instantiation self::C::_#new#tearOff <dynamic, dynamic>
-  #C8 = instantiation self::C::_#new#tearOff <core::int*, core::String*>
+  #C7 = instantiation #C6 <dynamic, dynamic>
+  #C8 = instantiation #C6 <core::int*, core::String*>
   #C9 = static-tearoff self::_#H2#new#tearOff
-  #C10 = instantiation self::C::_#new#tearOff <core::int*, core::int*>
+  #C10 = instantiation #C6 <core::int*, core::int*>
   #C11 = static-tearoff self::_#H4#new#tearOff
-  #C12 = instantiation self::C::_#new#tearOff <core::String*, core::int*>
+  #C12 = instantiation #C6 <core::String*, core::int*>
   #C13 = static-tearoff self::_#H5#new#tearOff
   #C14 = static-tearoff self::_#H6#new#tearOff
   #C15 = static-tearoff self::D::_#new#tearOff
-  #C16 = instantiation self::D::_#new#tearOff <core::num*>
-  #C17 = instantiation self::D::_#new#tearOff <core::int*>
+  #C16 = instantiation #C15 <core::num*>
+  #C17 = instantiation #C15 <core::int*>
   #C18 = static-tearoff self::_#I3#new#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect
index c74b167..214d583 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -75,7 +75,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -88,44 +88,44 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -136,7 +136,7 @@
     return new self::Class7a::•();
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
@@ -154,7 +154,7 @@
     return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
@@ -171,23 +171,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C11;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C12;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C12;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C13;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -199,12 +199,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C13;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C14;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -215,9 +215,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C14;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C15;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -233,10 +233,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C15;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -264,16 +264,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C16;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C17;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -281,7 +281,7 @@
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
   self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C10;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
   self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -294,7 +294,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C11}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -309,15 +309,24 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = static-tearoff self::Class1::_#new#tearOff
-  #C3 = static-tearoff self::Class2::_#named#tearOff
-  #C4 = static-tearoff self::Class3::_#new#tearOff
-  #C5 = static-tearoff self::Class4::_#new#tearOff
-  #C6 = static-tearoff self::Class5::_#new#tearOff
-  #C7 = static-tearoff self::Class6::_#new#tearOff
-  #C8 = static-tearoff self::Class7b::_#new#tearOff
-  #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = static-tearoff self::Class8b::_#fact#tearOff
-  #C11 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = constructor-tearoff self::Class8b::fact
+  #C11 = static-tearoff self::Class1::_#new#tearOff
+  #C12 = static-tearoff self::Class2::_#named#tearOff
+  #C13 = static-tearoff self::Class3::_#new#tearOff
+  #C14 = static-tearoff self::Class4::_#new#tearOff
+  #C15 = static-tearoff self::Class5::_#new#tearOff
+  #C16 = static-tearoff self::Class6::_#new#tearOff
+  #C17 = static-tearoff self::Class7b::_#new#tearOff
+  #C18 = static-tearoff self::Class8b::_#new#tearOff
+  #C19 = static-tearoff self::Class8b::_#fact#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect
index 46d6ccc..dcb045d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -75,7 +75,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -88,44 +88,44 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -136,7 +136,7 @@
     return new self::Class7a::•();
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
@@ -154,7 +154,7 @@
     return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
@@ -171,23 +171,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C11;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C12;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C12;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C13;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -199,12 +199,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C13;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C14;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -215,9 +215,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C14;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C15;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -233,10 +233,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C15;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -264,16 +264,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C16;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C17;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -281,7 +281,7 @@
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
   self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C10;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
   self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -294,7 +294,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C11}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -309,15 +309,24 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = static-tearoff self::Class1::_#new#tearOff
-  #C3 = static-tearoff self::Class2::_#named#tearOff
-  #C4 = static-tearoff self::Class3::_#new#tearOff
-  #C5 = static-tearoff self::Class4::_#new#tearOff
-  #C6 = static-tearoff self::Class5::_#new#tearOff
-  #C7 = static-tearoff self::Class6::_#new#tearOff
-  #C8 = static-tearoff self::Class7b::_#new#tearOff
-  #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = static-tearoff self::Class8b::_#fact#tearOff
-  #C11 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = constructor-tearoff self::Class8b::fact
+  #C11 = static-tearoff self::Class1::_#new#tearOff
+  #C12 = static-tearoff self::Class2::_#named#tearOff
+  #C13 = static-tearoff self::Class3::_#new#tearOff
+  #C14 = static-tearoff self::Class4::_#new#tearOff
+  #C15 = static-tearoff self::Class5::_#new#tearOff
+  #C16 = static-tearoff self::Class6::_#new#tearOff
+  #C17 = static-tearoff self::Class7b::_#new#tearOff
+  #C18 = static-tearoff self::Class8b::_#new#tearOff
+  #C19 = static-tearoff self::Class8b::_#fact#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect
index c74b167..214d583 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -75,7 +75,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -88,44 +88,44 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -136,7 +136,7 @@
     return new self::Class7a::•();
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
@@ -154,7 +154,7 @@
     return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
@@ -171,23 +171,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C11;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C12;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C12;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C13;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -199,12 +199,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C13;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C14;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -215,9 +215,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C14;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C15;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -233,10 +233,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C15;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -264,16 +264,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C16;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C17;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -281,7 +281,7 @@
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
   self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C10;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
   self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -294,7 +294,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C11}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -309,15 +309,24 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = static-tearoff self::Class1::_#new#tearOff
-  #C3 = static-tearoff self::Class2::_#named#tearOff
-  #C4 = static-tearoff self::Class3::_#new#tearOff
-  #C5 = static-tearoff self::Class4::_#new#tearOff
-  #C6 = static-tearoff self::Class5::_#new#tearOff
-  #C7 = static-tearoff self::Class6::_#new#tearOff
-  #C8 = static-tearoff self::Class7b::_#new#tearOff
-  #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = static-tearoff self::Class8b::_#fact#tearOff
-  #C11 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = constructor-tearoff self::Class8b::fact
+  #C11 = static-tearoff self::Class1::_#new#tearOff
+  #C12 = static-tearoff self::Class2::_#named#tearOff
+  #C13 = static-tearoff self::Class3::_#new#tearOff
+  #C14 = static-tearoff self::Class4::_#new#tearOff
+  #C15 = static-tearoff self::Class5::_#new#tearOff
+  #C16 = static-tearoff self::Class6::_#new#tearOff
+  #C17 = static-tearoff self::Class7b::_#new#tearOff
+  #C18 = static-tearoff self::Class8b::_#new#tearOff
+  #C19 = static-tearoff self::Class8b::_#fact#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
index a5fb580..c867d2c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -124,3 +124,16 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:13:7 -> ConstructorTearOffConstant(Class1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:18:7 -> ConstructorTearOffConstant(Class2.named)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:46:7 -> ConstructorTearOffConstant(Class3.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:53:7 -> ConstructorTearOffConstant(Class4.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:60:7 -> ConstructorTearOffConstant(Class5.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:68:7 -> ConstructorTearOffConstant(Class6.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:82:7 -> ConstructorTearOffConstant(Class7b.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:91:7 -> ConstructorTearOffConstant(Class8b.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:91:7 -> ConstructorTearOffConstant(Class8b.fact)
+Extra constant evaluation: evaluated: 66, effectively constant: 9
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect
index 46d6ccc..dcb045d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -75,7 +75,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -88,44 +88,44 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -136,7 +136,7 @@
     return new self::Class7a::•();
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
@@ -154,7 +154,7 @@
     return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
@@ -171,23 +171,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C11;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C12;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C12;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C13;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -199,12 +199,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C13;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C14;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -215,9 +215,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C14;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C15;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -233,10 +233,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C15;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -264,16 +264,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C16;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C17;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -281,7 +281,7 @@
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
   self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C10;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
   self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -294,7 +294,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C11}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -309,15 +309,24 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = static-tearoff self::Class1::_#new#tearOff
-  #C3 = static-tearoff self::Class2::_#named#tearOff
-  #C4 = static-tearoff self::Class3::_#new#tearOff
-  #C5 = static-tearoff self::Class4::_#new#tearOff
-  #C6 = static-tearoff self::Class5::_#new#tearOff
-  #C7 = static-tearoff self::Class6::_#new#tearOff
-  #C8 = static-tearoff self::Class7b::_#new#tearOff
-  #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = static-tearoff self::Class8b::_#fact#tearOff
-  #C11 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = constructor-tearoff self::Class8b::fact
+  #C11 = static-tearoff self::Class1::_#new#tearOff
+  #C12 = static-tearoff self::Class2::_#named#tearOff
+  #C13 = static-tearoff self::Class3::_#new#tearOff
+  #C14 = static-tearoff self::Class4::_#new#tearOff
+  #C15 = static-tearoff self::Class5::_#new#tearOff
+  #C16 = static-tearoff self::Class6::_#new#tearOff
+  #C17 = static-tearoff self::Class7b::_#new#tearOff
+  #C18 = static-tearoff self::Class8b::_#new#tearOff
+  #C19 = static-tearoff self::Class8b::_#fact#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
index c7984a5..8c398fe 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
@@ -17,28 +17,28 @@
 
 class Class1 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
-  constructor _([core::int field = #C1]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _([core::int field = #C2]) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int field = #C1]) → self::Class1
+  static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C2]) → self::Class1
+  static factory •([core::int field = #C3]) → self::Class1
     return new self::Class1::_(field);
-  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+  static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
-  constructor _({core::int field = #C1}) → self::Class2
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff({core::int field = #C1}) → self::Class2
+  static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C2}) → self::Class2
+  static factory •({core::int field = #C3}) → self::Class2
     return new self::Class2::_(field: field);
-  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+  static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C3;
+  ([core::int]) → self::Class1 f1a = #C5;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C3;
+  dynamic f1b = #C5;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C4;
+  ({field: core::int}) → self::Class2 f2a = #C6;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C4;
+  dynamic f2b = #C6;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -101,9 +101,11 @@
 }
 
 constants  {
-  #C1 = 42
-  #C2 = null
-  #C3 = static-tearoff self::Class1::_#new#tearOff
-  #C4 = static-tearoff self::Class2::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = 42
+  #C3 = null
+  #C4 = constructor-tearoff self::Class2::•
+  #C5 = static-tearoff self::Class1::_#new#tearOff
+  #C6 = static-tearoff self::Class2::_#new#tearOff
+  #C7 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
index 9f46561..cc59901 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
@@ -17,28 +17,28 @@
 
 class Class1 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
-  constructor _([core::int field = #C1]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _([core::int field = #C2]) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int field = #C1]) → self::Class1
+  static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C2]) → self::Class1
+  static factory •([core::int field = #C3]) → self::Class1
     return new self::Class1::_(field);
-  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+  static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
-  constructor _({core::int field = #C1}) → self::Class2
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff({core::int field = #C1}) → self::Class2
+  static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C2}) → self::Class2
+  static factory •({core::int field = #C3}) → self::Class2
     return new self::Class2::_(field: field);
-  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+  static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C3;
+  ([core::int]) → self::Class1 f1a = #C5;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C3;
+  dynamic f1b = #C5;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C4;
+  ({field: core::int}) → self::Class2 f2a = #C6;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C4;
+  dynamic f2b = #C6;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -101,9 +101,11 @@
 }
 
 constants  {
-  #C1 = 42
-  #C2 = null
-  #C3 = static-tearoff self::Class1::_#new#tearOff
-  #C4 = static-tearoff self::Class2::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = 42
+  #C3 = null
+  #C4 = constructor-tearoff self::Class2::•
+  #C5 = static-tearoff self::Class1::_#new#tearOff
+  #C6 = static-tearoff self::Class2::_#new#tearOff
+  #C7 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
index c7984a5..8c398fe 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
@@ -17,28 +17,28 @@
 
 class Class1 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
-  constructor _([core::int field = #C1]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _([core::int field = #C2]) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int field = #C1]) → self::Class1
+  static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C2]) → self::Class1
+  static factory •([core::int field = #C3]) → self::Class1
     return new self::Class1::_(field);
-  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+  static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
-  constructor _({core::int field = #C1}) → self::Class2
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff({core::int field = #C1}) → self::Class2
+  static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C2}) → self::Class2
+  static factory •({core::int field = #C3}) → self::Class2
     return new self::Class2::_(field: field);
-  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+  static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C3;
+  ([core::int]) → self::Class1 f1a = #C5;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C3;
+  dynamic f1b = #C5;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C4;
+  ({field: core::int}) → self::Class2 f2a = #C6;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C4;
+  dynamic f2b = #C6;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -101,9 +101,11 @@
 }
 
 constants  {
-  #C1 = 42
-  #C2 = null
-  #C3 = static-tearoff self::Class1::_#new#tearOff
-  #C4 = static-tearoff self::Class2::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = 42
+  #C3 = null
+  #C4 = constructor-tearoff self::Class2::•
+  #C5 = static-tearoff self::Class1::_#new#tearOff
+  #C6 = static-tearoff self::Class2::_#new#tearOff
+  #C7 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
index 1cd9ef2..20f744e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
@@ -35,3 +35,9 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values.dart:12:7 -> ConstructorTearOffConstant(Class1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values.dart:19:7 -> ConstructorTearOffConstant(Class2.)
+Extra constant evaluation: evaluated: 16, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
index 9f46561..cc59901 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
@@ -17,28 +17,28 @@
 
 class Class1 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
-  constructor _([core::int field = #C1]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _([core::int field = #C2]) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int field = #C1]) → self::Class1
+  static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C2]) → self::Class1
+  static factory •([core::int field = #C3]) → self::Class1
     return new self::Class1::_(field);
-  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+  static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
-  constructor _({core::int field = #C1}) → self::Class2
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff({core::int field = #C1}) → self::Class2
+  static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C2}) → self::Class2
+  static factory •({core::int field = #C3}) → self::Class2
     return new self::Class2::_(field: field);
-  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+  static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C3;
+  ([core::int]) → self::Class1 f1a = #C5;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C3;
+  dynamic f1b = #C5;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C4;
+  ({field: core::int}) → self::Class2 f2a = #C6;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C4;
+  dynamic f2b = #C6;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -101,9 +101,11 @@
 }
 
 constants  {
-  #C1 = 42
-  #C2 = null
-  #C3 = static-tearoff self::Class1::_#new#tearOff
-  #C4 = static-tearoff self::Class2::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = 42
+  #C3 = null
+  #C4 = constructor-tearoff self::Class2::•
+  #C5 = static-tearoff self::Class1::_#new#tearOff
+  #C6 = static-tearoff self::Class2::_#new#tearOff
+  #C7 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
index c019108..aa8c2df 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
@@ -43,44 +43,44 @@
 class Class1 extends core::Object {
   final field core::int field1;
   final field core::int field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirectPositionalSame, self::Class1::redirectPositionalFewer1, self::Class1::redirectPositionalFewer2, self::Class1::redirectNamedSame, self::Class1::redirectNamedReorder, self::Class1::redirectNamedFewer1, self::Class1::redirectNamedFewer2, self::Class1::redirectNamedFewer3]/*isLegacy*/;
-  constructor positional([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8]/*isLegacy*/;
+  constructor positional([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  constructor named({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  constructor named({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
     return new self::Class1::positional(field1);
-  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
+  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
     return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
-  static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2);
-  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
     return new self::Class1::named();
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C4;
+  ([core::int, core::int]) → self::Class1 f1a = #C12;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C5;
+  ([core::int]) → self::Class1 f1b = #C13;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C6;
+  () → self::Class1 f1c = #C14;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C7;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C8;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C9;
+  ({field1: core::int}) → self::Class1 f2c = #C17;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C10;
+  ({field2: core::int}) → self::Class1 f2d = #C18;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C11;
+  () → self::Class1 f2e = #C19;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C12}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -221,16 +221,24 @@
 }
 
 constants  {
-  #C1 = 1
-  #C2 = 2
-  #C3 = null
-  #C4 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C5 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C6 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C7 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C8 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C9 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C10 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C11 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C12 = false
+  #C1 = constructor-tearoff self::Class1::redirectPositionalSame
+  #C2 = constructor-tearoff self::Class1::redirectPositionalFewer1
+  #C3 = constructor-tearoff self::Class1::redirectPositionalFewer2
+  #C4 = constructor-tearoff self::Class1::redirectNamedSame
+  #C5 = constructor-tearoff self::Class1::redirectNamedReorder
+  #C6 = constructor-tearoff self::Class1::redirectNamedFewer1
+  #C7 = constructor-tearoff self::Class1::redirectNamedFewer2
+  #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
+  #C9 = 1
+  #C10 = 2
+  #C11 = null
+  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
index ffa443b..aa4af4d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
@@ -43,44 +43,44 @@
 class Class1 extends core::Object {
   final field core::int field1;
   final field core::int field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirectPositionalSame, self::Class1::redirectPositionalFewer1, self::Class1::redirectPositionalFewer2, self::Class1::redirectNamedSame, self::Class1::redirectNamedReorder, self::Class1::redirectNamedFewer1, self::Class1::redirectNamedFewer2, self::Class1::redirectNamedFewer3]/*isLegacy*/;
-  constructor positional([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8]/*isLegacy*/;
+  constructor positional([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  constructor named({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  constructor named({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
     return new self::Class1::positional(field1);
-  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
+  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
     return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
-  static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2);
-  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
     return new self::Class1::named();
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C4;
+  ([core::int, core::int]) → self::Class1 f1a = #C12;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C5;
+  ([core::int]) → self::Class1 f1b = #C13;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C6;
+  () → self::Class1 f1c = #C14;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C7;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C8;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C9;
+  ({field1: core::int}) → self::Class1 f2c = #C17;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C10;
+  ({field2: core::int}) → self::Class1 f2d = #C18;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C11;
+  () → self::Class1 f2e = #C19;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C12}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -221,16 +221,24 @@
 }
 
 constants  {
-  #C1 = 1
-  #C2 = 2
-  #C3 = null
-  #C4 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C5 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C6 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C7 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C8 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C9 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C10 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C11 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C12 = false
+  #C1 = constructor-tearoff self::Class1::redirectPositionalSame
+  #C2 = constructor-tearoff self::Class1::redirectPositionalFewer1
+  #C3 = constructor-tearoff self::Class1::redirectPositionalFewer2
+  #C4 = constructor-tearoff self::Class1::redirectNamedSame
+  #C5 = constructor-tearoff self::Class1::redirectNamedReorder
+  #C6 = constructor-tearoff self::Class1::redirectNamedFewer1
+  #C7 = constructor-tearoff self::Class1::redirectNamedFewer2
+  #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
+  #C9 = 1
+  #C10 = 2
+  #C11 = null
+  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
index c019108..aa8c2df 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
@@ -43,44 +43,44 @@
 class Class1 extends core::Object {
   final field core::int field1;
   final field core::int field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirectPositionalSame, self::Class1::redirectPositionalFewer1, self::Class1::redirectPositionalFewer2, self::Class1::redirectNamedSame, self::Class1::redirectNamedReorder, self::Class1::redirectNamedFewer1, self::Class1::redirectNamedFewer2, self::Class1::redirectNamedFewer3]/*isLegacy*/;
-  constructor positional([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8]/*isLegacy*/;
+  constructor positional([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  constructor named({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  constructor named({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
     return new self::Class1::positional(field1);
-  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
+  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
     return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
-  static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2);
-  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
     return new self::Class1::named();
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C4;
+  ([core::int, core::int]) → self::Class1 f1a = #C12;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C5;
+  ([core::int]) → self::Class1 f1b = #C13;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C6;
+  () → self::Class1 f1c = #C14;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C7;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C8;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C9;
+  ({field1: core::int}) → self::Class1 f2c = #C17;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C10;
+  ({field2: core::int}) → self::Class1 f2d = #C18;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C11;
+  () → self::Class1 f2e = #C19;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C12}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -221,16 +221,24 @@
 }
 
 constants  {
-  #C1 = 1
-  #C2 = 2
-  #C3 = null
-  #C4 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C5 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C6 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C7 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C8 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C9 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C10 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C11 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C12 = false
+  #C1 = constructor-tearoff self::Class1::redirectPositionalSame
+  #C2 = constructor-tearoff self::Class1::redirectPositionalFewer1
+  #C3 = constructor-tearoff self::Class1::redirectPositionalFewer2
+  #C4 = constructor-tearoff self::Class1::redirectNamedSame
+  #C5 = constructor-tearoff self::Class1::redirectNamedReorder
+  #C6 = constructor-tearoff self::Class1::redirectNamedFewer1
+  #C7 = constructor-tearoff self::Class1::redirectNamedFewer2
+  #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
+  #C9 = 1
+  #C10 = 2
+  #C11 = null
+  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
index c33110b..7cf24c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
@@ -56,3 +56,15 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectPositionalSame)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectPositionalFewer1)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectPositionalFewer2)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedSame)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedReorder)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedFewer1)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedFewer2)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedFewer3)
+Extra constant evaluation: evaluated: 49, effectively constant: 8
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
index ffa443b..aa4af4d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
@@ -43,44 +43,44 @@
 class Class1 extends core::Object {
   final field core::int field1;
   final field core::int field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirectPositionalSame, self::Class1::redirectPositionalFewer1, self::Class1::redirectPositionalFewer2, self::Class1::redirectNamedSame, self::Class1::redirectNamedReorder, self::Class1::redirectNamedFewer1, self::Class1::redirectNamedFewer2, self::Class1::redirectNamedFewer3]/*isLegacy*/;
-  constructor positional([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8]/*isLegacy*/;
+  constructor positional([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  constructor named({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  constructor named({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
     return new self::Class1::positional(field1);
-  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
+  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
     return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
-  static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2);
-  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
     return new self::Class1::named();
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C4;
+  ([core::int, core::int]) → self::Class1 f1a = #C12;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C5;
+  ([core::int]) → self::Class1 f1b = #C13;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C6;
+  () → self::Class1 f1c = #C14;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C7;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C8;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C9;
+  ({field1: core::int}) → self::Class1 f2c = #C17;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C10;
+  ({field2: core::int}) → self::Class1 f2d = #C18;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C11;
+  () → self::Class1 f2e = #C19;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C12}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -221,16 +221,24 @@
 }
 
 constants  {
-  #C1 = 1
-  #C2 = 2
-  #C3 = null
-  #C4 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C5 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C6 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C7 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C8 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C9 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C10 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C11 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C12 = false
+  #C1 = constructor-tearoff self::Class1::redirectPositionalSame
+  #C2 = constructor-tearoff self::Class1::redirectPositionalFewer1
+  #C3 = constructor-tearoff self::Class1::redirectPositionalFewer2
+  #C4 = constructor-tearoff self::Class1::redirectNamedSame
+  #C5 = constructor-tearoff self::Class1::redirectNamedReorder
+  #C6 = constructor-tearoff self::Class1::redirectNamedFewer1
+  #C7 = constructor-tearoff self::Class1::redirectNamedFewer2
+  #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
+  #C9 = 1
+  #C10 = 2
+  #C11 = null
+  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect
index 3f74e4e..01b742d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect
@@ -7,20 +7,20 @@
 part typedef_from_part.dart;
 typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
 class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
-  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
-  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
     return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
-  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
     return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
@@ -28,10 +28,10 @@
     return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
-  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
-  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
-  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C4;
+  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C5;
+  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C6;
+  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C7;
   aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
   aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
   aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
@@ -56,10 +56,10 @@
   aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
-  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
-  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
-  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
-  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C8;
+  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C9;
+  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C10;
+  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C11;
   bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
   bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
   bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
@@ -87,9 +87,9 @@
 }
 static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
   return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
-static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C2, core::int c = #C3]) → self::Class<self::_#B#named#tearOff::S%, core::int>
   return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
-static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C2, core::int c = #C3}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
   return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
 static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
   return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
@@ -104,22 +104,23 @@
 typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
   return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C2, core::int c = #C3]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
   return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C2, core::int c = #C3}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
 
 constants  {
-  #C1 = null
-  #C2 = 42
-  #C3 = static-tearoff self2::_#A#new#tearOff
-  #C4 = static-tearoff self2::_#A#named#tearOff
-  #C5 = static-tearoff self2::_#A#fact#tearOff
-  #C6 = static-tearoff self2::_#A#redirect#tearOff
-  #C7 = static-tearoff self::_#B#new#tearOff
-  #C8 = static-tearoff self::_#B#named#tearOff
-  #C9 = static-tearoff self::_#B#fact#tearOff
-  #C10 = static-tearoff self::_#B#redirect#tearOff
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = null
+  #C3 = 42
+  #C4 = static-tearoff self2::_#A#new#tearOff
+  #C5 = static-tearoff self2::_#A#named#tearOff
+  #C6 = static-tearoff self2::_#A#fact#tearOff
+  #C7 = static-tearoff self2::_#A#redirect#tearOff
+  #C8 = static-tearoff self::_#B#new#tearOff
+  #C9 = static-tearoff self::_#B#named#tearOff
+  #C10 = static-tearoff self::_#B#fact#tearOff
+  #C11 = static-tearoff self::_#B#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect
index 3f74e4e..01b742d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect
@@ -7,20 +7,20 @@
 part typedef_from_part.dart;
 typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
 class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
-  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
-  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
     return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
-  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
     return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
@@ -28,10 +28,10 @@
     return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
-  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
-  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
-  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C4;
+  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C5;
+  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C6;
+  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C7;
   aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
   aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
   aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
@@ -56,10 +56,10 @@
   aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
-  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
-  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
-  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
-  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C8;
+  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C9;
+  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C10;
+  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C11;
   bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
   bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
   bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
@@ -87,9 +87,9 @@
 }
 static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
   return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
-static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C2, core::int c = #C3]) → self::Class<self::_#B#named#tearOff::S%, core::int>
   return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
-static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C2, core::int c = #C3}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
   return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
 static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
   return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
@@ -104,22 +104,23 @@
 typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
   return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C2, core::int c = #C3]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
   return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C2, core::int c = #C3}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
 
 constants  {
-  #C1 = null
-  #C2 = 42
-  #C3 = static-tearoff self2::_#A#new#tearOff
-  #C4 = static-tearoff self2::_#A#named#tearOff
-  #C5 = static-tearoff self2::_#A#fact#tearOff
-  #C6 = static-tearoff self2::_#A#redirect#tearOff
-  #C7 = static-tearoff self::_#B#new#tearOff
-  #C8 = static-tearoff self::_#B#named#tearOff
-  #C9 = static-tearoff self::_#B#fact#tearOff
-  #C10 = static-tearoff self::_#B#redirect#tearOff
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = null
+  #C3 = 42
+  #C4 = static-tearoff self2::_#A#new#tearOff
+  #C5 = static-tearoff self2::_#A#named#tearOff
+  #C6 = static-tearoff self2::_#A#fact#tearOff
+  #C7 = static-tearoff self2::_#A#redirect#tearOff
+  #C8 = static-tearoff self::_#B#new#tearOff
+  #C9 = static-tearoff self::_#B#named#tearOff
+  #C10 = static-tearoff self::_#B#fact#tearOff
+  #C11 = static-tearoff self::_#B#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect
index 3f74e4e..01b742d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect
@@ -7,20 +7,20 @@
 part typedef_from_part.dart;
 typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
 class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
-  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
-  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
     return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
-  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
     return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
@@ -28,10 +28,10 @@
     return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
-  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
-  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
-  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C4;
+  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C5;
+  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C6;
+  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C7;
   aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
   aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
   aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
@@ -56,10 +56,10 @@
   aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
-  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
-  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
-  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
-  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C8;
+  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C9;
+  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C10;
+  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C11;
   bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
   bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
   bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
@@ -87,9 +87,9 @@
 }
 static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
   return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
-static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C2, core::int c = #C3]) → self::Class<self::_#B#named#tearOff::S%, core::int>
   return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
-static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C2, core::int c = #C3}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
   return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
 static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
   return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
@@ -104,22 +104,23 @@
 typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
   return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C2, core::int c = #C3]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
   return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C2, core::int c = #C3}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
 
 constants  {
-  #C1 = null
-  #C2 = 42
-  #C3 = static-tearoff self2::_#A#new#tearOff
-  #C4 = static-tearoff self2::_#A#named#tearOff
-  #C5 = static-tearoff self2::_#A#fact#tearOff
-  #C6 = static-tearoff self2::_#A#redirect#tearOff
-  #C7 = static-tearoff self::_#B#new#tearOff
-  #C8 = static-tearoff self::_#B#named#tearOff
-  #C9 = static-tearoff self::_#B#fact#tearOff
-  #C10 = static-tearoff self::_#B#redirect#tearOff
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = null
+  #C3 = 42
+  #C4 = static-tearoff self2::_#A#new#tearOff
+  #C5 = static-tearoff self2::_#A#named#tearOff
+  #C6 = static-tearoff self2::_#A#fact#tearOff
+  #C7 = static-tearoff self2::_#A#redirect#tearOff
+  #C8 = static-tearoff self::_#B#new#tearOff
+  #C9 = static-tearoff self::_#B#named#tearOff
+  #C10 = static-tearoff self::_#B#fact#tearOff
+  #C11 = static-tearoff self::_#B#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
index d0d9059..9f1b30a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
@@ -52,3 +52,8 @@
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///typedef_from.dart:75:7 -> ConstructorTearOffConstant(Class.redirect)
+Extra constant evaluation: evaluated: 43, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect
index 3f74e4e..01b742d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect
@@ -7,20 +7,20 @@
 part typedef_from_part.dart;
 typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
 class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
-  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
-  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
     return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
-  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
     return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
@@ -28,10 +28,10 @@
     return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
-  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
-  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
-  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C4;
+  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C5;
+  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C6;
+  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C7;
   aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
   aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
   aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
@@ -56,10 +56,10 @@
   aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
-  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
-  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
-  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
-  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C8;
+  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C9;
+  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C10;
+  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C11;
   bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
   bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
   bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
@@ -87,9 +87,9 @@
 }
 static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
   return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
-static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C2, core::int c = #C3]) → self::Class<self::_#B#named#tearOff::S%, core::int>
   return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
-static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C2, core::int c = #C3}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
   return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
 static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
   return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
@@ -104,22 +104,23 @@
 typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
   return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C2, core::int c = #C3]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
   return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C2, core::int c = #C3}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
 
 constants  {
-  #C1 = null
-  #C2 = 42
-  #C3 = static-tearoff self2::_#A#new#tearOff
-  #C4 = static-tearoff self2::_#A#named#tearOff
-  #C5 = static-tearoff self2::_#A#fact#tearOff
-  #C6 = static-tearoff self2::_#A#redirect#tearOff
-  #C7 = static-tearoff self::_#B#new#tearOff
-  #C8 = static-tearoff self::_#B#named#tearOff
-  #C9 = static-tearoff self::_#B#fact#tearOff
-  #C10 = static-tearoff self::_#B#redirect#tearOff
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = null
+  #C3 = 42
+  #C4 = static-tearoff self2::_#A#new#tearOff
+  #C5 = static-tearoff self2::_#A#named#tearOff
+  #C6 = static-tearoff self2::_#A#fact#tearOff
+  #C7 = static-tearoff self2::_#A#redirect#tearOff
+  #C8 = static-tearoff self::_#B#new#tearOff
+  #C9 = static-tearoff self::_#B#named#tearOff
+  #C10 = static-tearoff self::_#B#fact#tearOff
+  #C11 = static-tearoff self::_#B#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
index 90eb13b..402ad31 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field dynamic F_named_lib = #C6;
 static field dynamic F_fact_lib = #C7;
 static field dynamic F_redirect_lib = #C8;
-static field dynamic G_new_lib = #C11;
-static field dynamic G_named_lib = #C12;
-static field dynamic G_fact_lib = #C13;
-static field dynamic G_redirect_lib = #C14;
+static field dynamic G_new_lib = #C12;
+static field dynamic G_named_lib = #C13;
+static field dynamic G_fact_lib = #C14;
+static field dynamic G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#F#new#tearOff::Y%>
   return new mai::A::•<mai::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<mai::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff mai::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff mai::_#G#new#tearOff
-  #C12 = static-tearoff mai::_#G#named#tearOff
-  #C13 = static-tearoff mai::_#G#fact#tearOff
-  #C14 = static-tearoff mai::_#G#redirect#tearOff
+  #C11 = constructor-tearoff mai::A::redirect
+  #C12 = static-tearoff mai::_#G#new#tearOff
+  #C13 = static-tearoff mai::_#G#named#tearOff
+  #C14 = static-tearoff mai::_#G#fact#tearOff
+  #C15 = static-tearoff mai::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
index 90eb13b..402ad31 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field dynamic F_named_lib = #C6;
 static field dynamic F_fact_lib = #C7;
 static field dynamic F_redirect_lib = #C8;
-static field dynamic G_new_lib = #C11;
-static field dynamic G_named_lib = #C12;
-static field dynamic G_fact_lib = #C13;
-static field dynamic G_redirect_lib = #C14;
+static field dynamic G_new_lib = #C12;
+static field dynamic G_named_lib = #C13;
+static field dynamic G_fact_lib = #C14;
+static field dynamic G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#F#new#tearOff::Y%>
   return new mai::A::•<mai::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<mai::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff mai::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff mai::_#G#new#tearOff
-  #C12 = static-tearoff mai::_#G#named#tearOff
-  #C13 = static-tearoff mai::_#G#fact#tearOff
-  #C14 = static-tearoff mai::_#G#redirect#tearOff
+  #C11 = constructor-tearoff mai::A::redirect
+  #C12 = static-tearoff mai::_#G#new#tearOff
+  #C13 = static-tearoff mai::_#G#named#tearOff
+  #C14 = static-tearoff mai::_#G#fact#tearOff
+  #C15 = static-tearoff mai::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
index 90eb13b..402ad31 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field dynamic F_named_lib = #C6;
 static field dynamic F_fact_lib = #C7;
 static field dynamic F_redirect_lib = #C8;
-static field dynamic G_new_lib = #C11;
-static field dynamic G_named_lib = #C12;
-static field dynamic G_fact_lib = #C13;
-static field dynamic G_redirect_lib = #C14;
+static field dynamic G_new_lib = #C12;
+static field dynamic G_named_lib = #C13;
+static field dynamic G_fact_lib = #C14;
+static field dynamic G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#F#new#tearOff::Y%>
   return new mai::A::•<mai::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<mai::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff mai::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff mai::_#G#new#tearOff
-  #C12 = static-tearoff mai::_#G#named#tearOff
-  #C13 = static-tearoff mai::_#G#fact#tearOff
-  #C14 = static-tearoff mai::_#G#redirect#tearOff
+  #C11 = constructor-tearoff mai::A::redirect
+  #C12 = static-tearoff mai::_#G#new#tearOff
+  #C13 = static-tearoff mai::_#G#named#tearOff
+  #C14 = static-tearoff mai::_#G#fact#tearOff
+  #C15 = static-tearoff mai::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
index 0e4f276..6e66217 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
@@ -34,7 +34,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     ;
   constructor named(mai::A::T% a, [core::int? b]) → mai::A<mai::A::T%>
@@ -76,3 +76,7 @@
   return mai::A::fact<mai::_#G#fact#tearOff::Y%>(a, b: b, c: c);
 static method _#G#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#G#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<mai::_#G#redirect#tearOff::Y%>();
+
+constants  {
+  #C1 = constructor-tearoff mai::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
index 90eb13b..402ad31 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field dynamic F_named_lib = #C6;
 static field dynamic F_fact_lib = #C7;
 static field dynamic F_redirect_lib = #C8;
-static field dynamic G_new_lib = #C11;
-static field dynamic G_named_lib = #C12;
-static field dynamic G_fact_lib = #C13;
-static field dynamic G_redirect_lib = #C14;
+static field dynamic G_new_lib = #C12;
+static field dynamic G_named_lib = #C13;
+static field dynamic G_fact_lib = #C14;
+static field dynamic G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#F#new#tearOff::Y%>
   return new mai::A::•<mai::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<mai::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff mai::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff mai::_#G#new#tearOff
-  #C12 = static-tearoff mai::_#G#named#tearOff
-  #C13 = static-tearoff mai::_#G#fact#tearOff
-  #C14 = static-tearoff mai::_#G#redirect#tearOff
+  #C11 = constructor-tearoff mai::A::redirect
+  #C12 = static-tearoff mai::_#G#new#tearOff
+  #C13 = static-tearoff mai::_#G#named#tearOff
+  #C14 = static-tearoff mai::_#G#fact#tearOff
+  #C15 = static-tearoff mai::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
index 81462df..6da94c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named_lib = #C6;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact_lib = #C7;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect_lib = #C8;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C11;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C12;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C13;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C12;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C13;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#new#tearOff::Y%>
   return new typ::A::•<typ::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff typ::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff typ::_#G#new#tearOff
-  #C12 = static-tearoff typ::_#G#named#tearOff
-  #C13 = static-tearoff typ::_#G#fact#tearOff
-  #C14 = static-tearoff typ::_#G#redirect#tearOff
+  #C11 = constructor-tearoff typ::A::redirect
+  #C12 = static-tearoff typ::_#G#new#tearOff
+  #C13 = static-tearoff typ::_#G#named#tearOff
+  #C14 = static-tearoff typ::_#G#fact#tearOff
+  #C15 = static-tearoff typ::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
index 81462df..6da94c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named_lib = #C6;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact_lib = #C7;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect_lib = #C8;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C11;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C12;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C13;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C12;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C13;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#new#tearOff::Y%>
   return new typ::A::•<typ::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff typ::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff typ::_#G#new#tearOff
-  #C12 = static-tearoff typ::_#G#named#tearOff
-  #C13 = static-tearoff typ::_#G#fact#tearOff
-  #C14 = static-tearoff typ::_#G#redirect#tearOff
+  #C11 = constructor-tearoff typ::A::redirect
+  #C12 = static-tearoff typ::_#G#new#tearOff
+  #C13 = static-tearoff typ::_#G#named#tearOff
+  #C14 = static-tearoff typ::_#G#fact#tearOff
+  #C15 = static-tearoff typ::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
index 81462df..6da94c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named_lib = #C6;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact_lib = #C7;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect_lib = #C8;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C11;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C12;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C13;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C12;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C13;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#new#tearOff::Y%>
   return new typ::A::•<typ::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff typ::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff typ::_#G#new#tearOff
-  #C12 = static-tearoff typ::_#G#named#tearOff
-  #C13 = static-tearoff typ::_#G#fact#tearOff
-  #C14 = static-tearoff typ::_#G#redirect#tearOff
+  #C11 = constructor-tearoff typ::A::redirect
+  #C12 = static-tearoff typ::_#G#new#tearOff
+  #C13 = static-tearoff typ::_#G#named#tearOff
+  #C14 = static-tearoff typ::_#G#fact#tearOff
+  #C15 = static-tearoff typ::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
index b6ebfa4..2fdb0b1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
@@ -76,3 +76,8 @@
   return typ::A::fact<typ::_#G#fact#tearOff::Y%>(a, b: b, c: c);
 static method _#G#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#G#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<typ::_#G#redirect#tearOff::Y%>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///typedef_identical_lib.dart:5:7 -> ConstructorTearOffConstant(A.redirect)
+Extra constant evaluation: evaluated: 39, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
index 81462df..6da94c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named_lib = #C6;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact_lib = #C7;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect_lib = #C8;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C11;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C12;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C13;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C12;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C13;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#new#tearOff::Y%>
   return new typ::A::•<typ::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff typ::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff typ::_#G#new#tearOff
-  #C12 = static-tearoff typ::_#G#named#tearOff
-  #C13 = static-tearoff typ::_#G#fact#tearOff
-  #C14 = static-tearoff typ::_#G#redirect#tearOff
+  #C11 = constructor-tearoff typ::A::redirect
+  #C12 = static-tearoff typ::_#G#new#tearOff
+  #C13 = static-tearoff typ::_#G#named#tearOff
+  #C14 = static-tearoff typ::_#G#fact#tearOff
+  #C15 = static-tearoff typ::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.expect
index 2e24a01..109a904 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.expect
@@ -319,11 +319,11 @@
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::_#DA2#new#tearOff
   #C3 = static-tearoff self::B::_#new#tearOff
-  #C4 = instantiation self::B::_#new#tearOff <core::String>
+  #C4 = instantiation #C3 <core::String>
   #C5 = static-tearoff self::B::_#foo#tearOff
-  #C6 = instantiation self::B::_#foo#tearOff <core::String>
+  #C6 = instantiation #C5 <core::String>
   #C7 = static-tearoff self::B::_#bar#tearOff
-  #C8 = instantiation self::B::_#bar#tearOff <core::String>
+  #C8 = instantiation #C7 <core::String>
   #C9 = static-tearoff self::_#DB2#new#tearOff
   #C10 = static-tearoff self::_#DB3#new#tearOff
   #C11 = false
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.transformed.expect
index 64496be..71410d3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.transformed.expect
@@ -319,11 +319,11 @@
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::_#DA2#new#tearOff
   #C3 = static-tearoff self::B::_#new#tearOff
-  #C4 = instantiation self::B::_#new#tearOff <core::String>
+  #C4 = instantiation #C3 <core::String>
   #C5 = static-tearoff self::B::_#foo#tearOff
-  #C6 = instantiation self::B::_#foo#tearOff <core::String>
+  #C6 = instantiation #C5 <core::String>
   #C7 = static-tearoff self::B::_#bar#tearOff
-  #C8 = instantiation self::B::_#bar#tearOff <core::String>
+  #C8 = instantiation #C7 <core::String>
   #C9 = static-tearoff self::_#DB2#new#tearOff
   #C10 = static-tearoff self::_#DB3#new#tearOff
   #C11 = false
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.expect
index b0722a9..9e50e01 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.expect
@@ -319,11 +319,11 @@
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::_#DA2#new#tearOff
   #C3 = static-tearoff self::B::_#new#tearOff
-  #C4 = instantiation self::B::_#new#tearOff <core::String*>
+  #C4 = instantiation #C3 <core::String*>
   #C5 = static-tearoff self::B::_#foo#tearOff
-  #C6 = instantiation self::B::_#foo#tearOff <core::String*>
+  #C6 = instantiation #C5 <core::String*>
   #C7 = static-tearoff self::B::_#bar#tearOff
-  #C8 = instantiation self::B::_#bar#tearOff <core::String*>
+  #C8 = instantiation #C7 <core::String*>
   #C9 = static-tearoff self::_#DB2#new#tearOff
   #C10 = static-tearoff self::_#DB3#new#tearOff
   #C11 = false
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.transformed.expect
index 3242407..f1fcdc5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.transformed.expect
@@ -319,11 +319,11 @@
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::_#DA2#new#tearOff
   #C3 = static-tearoff self::B::_#new#tearOff
-  #C4 = instantiation self::B::_#new#tearOff <core::String*>
+  #C4 = instantiation #C3 <core::String*>
   #C5 = static-tearoff self::B::_#foo#tearOff
-  #C6 = instantiation self::B::_#foo#tearOff <core::String*>
+  #C6 = instantiation #C5 <core::String*>
   #C7 = static-tearoff self::B::_#bar#tearOff
-  #C8 = instantiation self::B::_#bar#tearOff <core::String*>
+  #C8 = instantiation #C7 <core::String*>
   #C9 = static-tearoff self::_#DB2#new#tearOff
   #C10 = static-tearoff self::_#DB3#new#tearOff
   #C11 = false
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart
new file mode 100644
index 0000000..9aad96b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2021, 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.
+
+abstract class Interface {
+  int get field;
+}
+
+class Class<T> implements Interface {
+  var field;
+
+  Class([this.field = 0]);
+  Class.named(this.field);
+  Class.redirectingGenerative(int field) : this(field);
+  factory Class.fact(int field) => new Class(field);
+  factory Class.redirectingFactory(int field) = Class;
+}
+
+mixin Mixin<S> {}
+
+class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+
+abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+
+test() {
+  NamedMixinApplication.fact;
+  NamedMixinApplication.redirectingFactory;
+
+  AbstractNamedMixinApplication.new;
+  AbstractNamedMixinApplication.named;
+  AbstractNamedMixinApplication.redirectingGenerative;
+  AbstractNamedMixinApplication.fact;
+  AbstractNamedMixinApplication.redirectingFactory;
+}
+
+var f1 = NamedMixinApplication.new;
+var f2 = NamedMixinApplication.named;
+var f3 = NamedMixinApplication.redirectingGenerative;
+
+main() {
+  var f1 = NamedMixinApplication.new;
+  var f2 = NamedMixinApplication.named;
+  var f3 = NamedMixinApplication.redirectingGenerative;
+
+  NamedMixinApplication<int, String>.new;
+  NamedMixinApplication<int, String>.named;
+  NamedMixinApplication<int, String>.redirectingGenerative;
+
+  NamedMixinApplication<int, String> Function([int]) n1 = f1<int, String>;
+  NamedMixinApplication<int, String> Function(int) n2 = f2<int, String>;
+  NamedMixinApplication<int, String> Function(int) n3 = f3<int, String>;
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
new file mode 100644
index 0000000..713b894
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
@@ -0,0 +1,130 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = constructor-tearoff self::NamedMixinApplication::•
+  #C4 = constructor-tearoff self::NamedMixinApplication::named
+  #C5 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
+  #C6 = instantiation #C3 <core::int, core::String>
+  #C7 = instantiation #C4 <core::int, core::String>
+  #C8 = instantiation #C5 <core::int, core::String>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
new file mode 100644
index 0000000..e1f62d1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
@@ -0,0 +1,130 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = constructor-tearoff self::NamedMixinApplication::•
+  #C4 = constructor-tearoff self::NamedMixinApplication::named
+  #C5 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
+  #C6 = instantiation #C3 <core::int, core::String>
+  #C7 = instantiation #C4 <core::int, core::String>
+  #C8 = instantiation #C5 <core::int, core::String>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.textual_outline.expect
new file mode 100644
index 0000000..e762d95
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.textual_outline.expect
@@ -0,0 +1,21 @@
+abstract class Interface {
+  int get field;
+}
+
+class Class<T> implements Interface {
+  var field;
+  Class([this.field = 0]);
+  Class.named(this.field);
+  Class.redirectingGenerative(int field) : this(field);
+  factory Class.fact(int field) => new Class(field);
+  factory Class.redirectingFactory(int field) = Class;
+}
+
+mixin Mixin<S> {}
+class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+test() {}
+var f1 = NamedMixinApplication.new;
+var f2 = NamedMixinApplication.named;
+var f3 = NamedMixinApplication.redirectingGenerative;
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e4743e7
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.textual_outline_modelled.expect
@@ -0,0 +1,22 @@
+abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+
+abstract class Interface {
+  int get field;
+}
+
+class Class<T> implements Interface {
+  Class([this.field = 0]);
+  Class.named(this.field);
+  Class.redirectingGenerative(int field) : this(field);
+  factory Class.fact(int field) => new Class(field);
+  factory Class.redirectingFactory(int field) = Class;
+  var field;
+}
+
+class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
+main() {}
+mixin Mixin<S> {}
+test() {}
+var f1 = NamedMixinApplication.new;
+var f2 = NamedMixinApplication.named;
+var f3 = NamedMixinApplication.redirectingGenerative;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
new file mode 100644
index 0000000..911cbda
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
@@ -0,0 +1,130 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = constructor-tearoff self::NamedMixinApplication::•
+  #C4 = constructor-tearoff self::NamedMixinApplication::named
+  #C5 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.outline.expect
new file mode 100644
index 0000000..99e5f30
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.outline.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
+  constructor •([core::int field]) → self::Class<self::Class::T%>
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    ;
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    ;
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
+  synthetic constructor •([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
+  synthetic constructor •([core::int field]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///named_mixin_application.dart:9:7 -> ConstructorTearOffConstant(Class.redirectingFactory)
+Extra constant evaluation: evaluated: 10, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
new file mode 100644
index 0000000..ec985b8
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
@@ -0,0 +1,130 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = constructor-tearoff self::NamedMixinApplication::•
+  #C4 = constructor-tearoff self::NamedMixinApplication::named
+  #C5 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart
new file mode 100644
index 0000000..acbe41e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2021, 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 'new_as_selector.dart' as prefix1;
+import 'new_as_selector.dart' deferred as prefix2 hide E;
+
+int new = 87; // error
+
+C c = C();
+
+class Super {}
+
+class C extends Super {
+  int new = 42; // error
+
+  C() : super.new(); // ok
+  C.named() : this.new(); // ok
+
+  method()  {
+    this.new; // error
+    this.new(); // error
+    this.new<int>(); // error
+    this.new = 87; // error
+  }
+}
+
+extension E on int {
+  external int new; // error
+
+  call<T>() {}
+}
+
+method(dynamic d) => d.new; // error
+
+test() {
+  new C().new; // error
+  new C().new(); // error
+  new C().new = 87; // error
+  C c = C();
+  c.new; // error
+  c.new = 87; // error
+  dynamic foo;
+  foo.new; // error
+  foo.new(); // error
+  foo.new<int>(); // error
+  foo?.new; // error
+  foo?.new(); // error
+  foo?.new<int>(); // error
+  foo..new; // error
+  foo..new(); // error
+  foo..new<int>(); // error
+  (foo).new; // error
+  (foo).new(); // error
+  (foo).new<int>(); // error
+  prefix1.new; // error
+  prefix1.new(); // error
+  prefix1.new<int>(); // error
+  prefix2.c.new; // error
+  prefix2.c.new(); // error
+  prefix2.c.new<int>(); // error
+  E(0).new; // error
+  E(0).new(); // error
+  E(0).new<int>(); // error
+  unresolved.new; // error
+  unresolved.new(); // error
+  unresolved.new<int>(); // error
+}
+
+main() {
+  C.new; // ok
+  C.new(); // ok
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.strong.expect
new file mode 100644
index 0000000..75ac16e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.strong.expect
@@ -0,0 +1,261 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:8:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:15:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:29:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:21:10: Error: 'new' can only be used as a constructor reference.
+//     this.new; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:22:10: Error: 'new' can only be used as a constructor reference.
+//     this.new(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:23:10: Error: 'new' can only be used as a constructor reference.
+//     this.new<int>(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:24:10: Error: 'new' can only be used as a constructor reference.
+//     this.new = 87; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:34:24: Error: 'new' can only be used as a constructor reference.
+// method(dynamic d) => d.new; // error
+//                        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:37:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:38:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:39:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new = 87; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:41:5: Error: 'new' can only be used as a constructor reference.
+//   c.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:42:5: Error: 'new' can only be used as a constructor reference.
+//   c.new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:44:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:45:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:46:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new<int>(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:47:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:48:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:49:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:50:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:51:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:52:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:53:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new; // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:54:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:55:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new<int>(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:56:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:57:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:58:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new<int>(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:59:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new; // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:60:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:61:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new<int>(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:62:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:63:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:64:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+//   unresolved.new; // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new; // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+//   unresolved.new(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+//   unresolved.new<int>(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new<int>(); // error
+//              ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class C extends self::Super {
+  field core::int new = 42;
+  constructor •() → self::C
+    : super self::Super::•()
+    ;
+  constructor named() → self::C
+    : this self::C::•()
+    ;
+  method method() → dynamic {
+    this.{self::C::new}{core::int};
+    self::E|call<dynamic>(this.{self::C::new}{core::int});
+    self::E|call<core::int>(this.{self::C::new}{core::int});
+    this.{self::C::new} = 87;
+  }
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new = 87;
+static field self::C c = new self::C::•();
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  return d{dynamic}.new;
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int};
+  self::E|call<dynamic>(new self::C::•().{self::C::new}{core::int});
+  new self::C::•().{self::C::new} = 87;
+  self::C c = new self::C::•();
+  c.{self::C::new}{core::int};
+  c.{self::C::new} = 87;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  let final dynamic #t1 = foo in #t1 == null ?{dynamic} null : #t1{dynamic}.new;
+  let final dynamic #t2 = foo in #t2 == null ?{dynamic} null : #t2{dynamic}.new();
+  let final dynamic #t3 = foo in #t3 == null ?{dynamic} null : #t3{dynamic}.new<core::int>();
+  let final dynamic #t4 = foo in block {
+    #t4{dynamic}.new;
+  } =>#t4;
+  let final dynamic #t5 = foo in block {
+    #t5{dynamic}.new();
+  } =>#t5;
+  let final dynamic #t6 = foo in block {
+    #t6{dynamic}.new<core::int>();
+  } =>#t6;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  self::new;
+  self::E|call<dynamic>(self::new);
+  self::E|call<core::int>(self::new);
+  let final dynamic #t7 = CheckLibraryIsLoaded(prefix2) in self::c.{self::C::new}{core::int};
+  let final dynamic #t8 = CheckLibraryIsLoaded(prefix2) in self::E|call<dynamic>(self::c.{self::C::new}{core::int});
+  let final dynamic #t9 = CheckLibraryIsLoaded(prefix2) in self::E|call<core::int>(self::c.{self::C::new}{core::int});
+  self::E|get#new(0);
+  self::E|call<dynamic>(self::E|get#new(0));
+  self::E|call<core::int>(self::E|get#new(0));
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+  unresolved.new; // error
+  ^^^^^^^^^^"{<invalid>}.new;
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+  unresolved.new(); // error
+  ^^^^^^^^^^"{dynamic}.new();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+  unresolved.new<int>(); // error
+  ^^^^^^^^^^"{dynamic}.new<core::int>();
+}
+static method main() → dynamic {
+  #C1;
+  new self::C::•();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.strong.transformed.expect
new file mode 100644
index 0000000..16d0ea0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.strong.transformed.expect
@@ -0,0 +1,261 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:8:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:15:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:29:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:21:10: Error: 'new' can only be used as a constructor reference.
+//     this.new; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:22:10: Error: 'new' can only be used as a constructor reference.
+//     this.new(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:23:10: Error: 'new' can only be used as a constructor reference.
+//     this.new<int>(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:24:10: Error: 'new' can only be used as a constructor reference.
+//     this.new = 87; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:34:24: Error: 'new' can only be used as a constructor reference.
+// method(dynamic d) => d.new; // error
+//                        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:37:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:38:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:39:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new = 87; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:41:5: Error: 'new' can only be used as a constructor reference.
+//   c.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:42:5: Error: 'new' can only be used as a constructor reference.
+//   c.new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:44:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:45:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:46:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new<int>(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:47:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:48:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:49:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:50:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:51:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:52:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:53:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new; // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:54:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:55:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new<int>(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:56:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:57:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:58:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new<int>(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:59:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new; // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:60:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:61:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new<int>(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:62:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:63:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:64:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+//   unresolved.new; // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new; // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+//   unresolved.new(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+//   unresolved.new<int>(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new<int>(); // error
+//              ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class C extends self::Super {
+  field core::int new = 42;
+  constructor •() → self::C
+    : super self::Super::•()
+    ;
+  constructor named() → self::C
+    : this self::C::•()
+    ;
+  method method() → dynamic {
+    this.{self::C::new}{core::int};
+    self::E|call<dynamic>(this.{self::C::new}{core::int});
+    self::E|call<core::int>(this.{self::C::new}{core::int});
+    this.{self::C::new} = 87;
+  }
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new = 87;
+static field self::C c = new self::C::•();
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  return d{dynamic}.new;
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int};
+  self::E|call<dynamic>(new self::C::•().{self::C::new}{core::int});
+  new self::C::•().{self::C::new} = 87;
+  self::C c = new self::C::•();
+  c.{self::C::new}{core::int};
+  c.{self::C::new} = 87;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  let final dynamic #t1 = foo in #t1 == null ?{dynamic} null : #t1{dynamic}.new;
+  let final dynamic #t2 = foo in #t2 == null ?{dynamic} null : #t2{dynamic}.new();
+  let final dynamic #t3 = foo in #t3 == null ?{dynamic} null : #t3{dynamic}.new<core::int>();
+  let final dynamic #t4 = foo in block {
+    #t4{dynamic}.new;
+  } =>#t4;
+  let final dynamic #t5 = foo in block {
+    #t5{dynamic}.new();
+  } =>#t5;
+  let final dynamic #t6 = foo in block {
+    #t6{dynamic}.new<core::int>();
+  } =>#t6;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  self::new;
+  self::E|call<dynamic>(self::new);
+  self::E|call<core::int>(self::new);
+  let final core::Object* #t7 = CheckLibraryIsLoaded(prefix2) in self::c.{self::C::new}{core::int};
+  let final core::Object* #t8 = CheckLibraryIsLoaded(prefix2) in self::E|call<dynamic>(self::c.{self::C::new}{core::int});
+  let final core::Object* #t9 = CheckLibraryIsLoaded(prefix2) in self::E|call<core::int>(self::c.{self::C::new}{core::int});
+  self::E|get#new(0);
+  self::E|call<dynamic>(self::E|get#new(0));
+  self::E|call<core::int>(self::E|get#new(0));
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+  unresolved.new; // error
+  ^^^^^^^^^^"{<invalid>}.new;
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+  unresolved.new(); // error
+  ^^^^^^^^^^"{dynamic}.new();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+  unresolved.new<int>(); // error
+  ^^^^^^^^^^"{dynamic}.new<core::int>();
+}
+static method main() → dynamic {
+  #C1;
+  new self::C::•();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.textual_outline.expect
new file mode 100644
index 0000000..6902541
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+import 'new_as_selector.dart' as prefix1;
+import 'new_as_selector.dart' deferred as prefix2 hide E;
+int new = 87;
+C c = C();
+class Super {}
+class C extends Super {
+  int new = 42;
+  C() : super.new();
+  C.named() : this.new();
+  method() {}
+}
+extension E on int {
+  external int new;
+  call<T>() {}
+}
+method(dynamic d) => d.new;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.expect
new file mode 100644
index 0000000..75ac16e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.expect
@@ -0,0 +1,261 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:8:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:15:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:29:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:21:10: Error: 'new' can only be used as a constructor reference.
+//     this.new; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:22:10: Error: 'new' can only be used as a constructor reference.
+//     this.new(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:23:10: Error: 'new' can only be used as a constructor reference.
+//     this.new<int>(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:24:10: Error: 'new' can only be used as a constructor reference.
+//     this.new = 87; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:34:24: Error: 'new' can only be used as a constructor reference.
+// method(dynamic d) => d.new; // error
+//                        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:37:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:38:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:39:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new = 87; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:41:5: Error: 'new' can only be used as a constructor reference.
+//   c.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:42:5: Error: 'new' can only be used as a constructor reference.
+//   c.new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:44:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:45:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:46:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new<int>(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:47:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:48:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:49:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:50:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:51:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:52:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:53:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new; // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:54:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:55:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new<int>(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:56:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:57:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:58:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new<int>(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:59:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new; // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:60:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:61:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new<int>(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:62:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:63:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:64:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+//   unresolved.new; // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new; // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+//   unresolved.new(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+//   unresolved.new<int>(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new<int>(); // error
+//              ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class C extends self::Super {
+  field core::int new = 42;
+  constructor •() → self::C
+    : super self::Super::•()
+    ;
+  constructor named() → self::C
+    : this self::C::•()
+    ;
+  method method() → dynamic {
+    this.{self::C::new}{core::int};
+    self::E|call<dynamic>(this.{self::C::new}{core::int});
+    self::E|call<core::int>(this.{self::C::new}{core::int});
+    this.{self::C::new} = 87;
+  }
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new = 87;
+static field self::C c = new self::C::•();
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  return d{dynamic}.new;
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int};
+  self::E|call<dynamic>(new self::C::•().{self::C::new}{core::int});
+  new self::C::•().{self::C::new} = 87;
+  self::C c = new self::C::•();
+  c.{self::C::new}{core::int};
+  c.{self::C::new} = 87;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  let final dynamic #t1 = foo in #t1 == null ?{dynamic} null : #t1{dynamic}.new;
+  let final dynamic #t2 = foo in #t2 == null ?{dynamic} null : #t2{dynamic}.new();
+  let final dynamic #t3 = foo in #t3 == null ?{dynamic} null : #t3{dynamic}.new<core::int>();
+  let final dynamic #t4 = foo in block {
+    #t4{dynamic}.new;
+  } =>#t4;
+  let final dynamic #t5 = foo in block {
+    #t5{dynamic}.new();
+  } =>#t5;
+  let final dynamic #t6 = foo in block {
+    #t6{dynamic}.new<core::int>();
+  } =>#t6;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  self::new;
+  self::E|call<dynamic>(self::new);
+  self::E|call<core::int>(self::new);
+  let final dynamic #t7 = CheckLibraryIsLoaded(prefix2) in self::c.{self::C::new}{core::int};
+  let final dynamic #t8 = CheckLibraryIsLoaded(prefix2) in self::E|call<dynamic>(self::c.{self::C::new}{core::int});
+  let final dynamic #t9 = CheckLibraryIsLoaded(prefix2) in self::E|call<core::int>(self::c.{self::C::new}{core::int});
+  self::E|get#new(0);
+  self::E|call<dynamic>(self::E|get#new(0));
+  self::E|call<core::int>(self::E|get#new(0));
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+  unresolved.new; // error
+  ^^^^^^^^^^"{<invalid>}.new;
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+  unresolved.new(); // error
+  ^^^^^^^^^^"{dynamic}.new();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+  unresolved.new<int>(); // error
+  ^^^^^^^^^^"{dynamic}.new<core::int>();
+}
+static method main() → dynamic {
+  #C1;
+  new self::C::•();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.outline.expect
new file mode 100644
index 0000000..661e8d1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.outline.expect
@@ -0,0 +1,58 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:8:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:15:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:29:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    ;
+}
+class C extends self::Super {
+  field core::int new;
+  constructor •() → self::C
+    ;
+  constructor named() → self::C
+    ;
+  method method() → dynamic
+    ;
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new;
+static field self::C c;
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic
+  ;
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.transformed.expect
new file mode 100644
index 0000000..16d0ea0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.transformed.expect
@@ -0,0 +1,261 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:8:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:15:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:29:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:21:10: Error: 'new' can only be used as a constructor reference.
+//     this.new; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:22:10: Error: 'new' can only be used as a constructor reference.
+//     this.new(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:23:10: Error: 'new' can only be used as a constructor reference.
+//     this.new<int>(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:24:10: Error: 'new' can only be used as a constructor reference.
+//     this.new = 87; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:34:24: Error: 'new' can only be used as a constructor reference.
+// method(dynamic d) => d.new; // error
+//                        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:37:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:38:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:39:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new = 87; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:41:5: Error: 'new' can only be used as a constructor reference.
+//   c.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:42:5: Error: 'new' can only be used as a constructor reference.
+//   c.new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:44:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:45:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:46:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new<int>(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:47:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:48:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:49:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:50:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:51:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:52:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:53:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new; // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:54:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:55:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new<int>(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:56:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:57:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:58:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new<int>(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:59:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new; // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:60:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:61:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new<int>(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:62:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:63:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:64:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+//   unresolved.new; // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new; // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+//   unresolved.new(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+//   unresolved.new<int>(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new<int>(); // error
+//              ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class C extends self::Super {
+  field core::int new = 42;
+  constructor •() → self::C
+    : super self::Super::•()
+    ;
+  constructor named() → self::C
+    : this self::C::•()
+    ;
+  method method() → dynamic {
+    this.{self::C::new}{core::int};
+    self::E|call<dynamic>(this.{self::C::new}{core::int});
+    self::E|call<core::int>(this.{self::C::new}{core::int});
+    this.{self::C::new} = 87;
+  }
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new = 87;
+static field self::C c = new self::C::•();
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  return d{dynamic}.new;
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int};
+  self::E|call<dynamic>(new self::C::•().{self::C::new}{core::int});
+  new self::C::•().{self::C::new} = 87;
+  self::C c = new self::C::•();
+  c.{self::C::new}{core::int};
+  c.{self::C::new} = 87;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  let final dynamic #t1 = foo in #t1 == null ?{dynamic} null : #t1{dynamic}.new;
+  let final dynamic #t2 = foo in #t2 == null ?{dynamic} null : #t2{dynamic}.new();
+  let final dynamic #t3 = foo in #t3 == null ?{dynamic} null : #t3{dynamic}.new<core::int>();
+  let final dynamic #t4 = foo in block {
+    #t4{dynamic}.new;
+  } =>#t4;
+  let final dynamic #t5 = foo in block {
+    #t5{dynamic}.new();
+  } =>#t5;
+  let final dynamic #t6 = foo in block {
+    #t6{dynamic}.new<core::int>();
+  } =>#t6;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  self::new;
+  self::E|call<dynamic>(self::new);
+  self::E|call<core::int>(self::new);
+  let final core::Object* #t7 = CheckLibraryIsLoaded(prefix2) in self::c.{self::C::new}{core::int};
+  let final core::Object* #t8 = CheckLibraryIsLoaded(prefix2) in self::E|call<dynamic>(self::c.{self::C::new}{core::int});
+  let final core::Object* #t9 = CheckLibraryIsLoaded(prefix2) in self::E|call<core::int>(self::c.{self::C::new}{core::int});
+  self::E|get#new(0);
+  self::E|call<dynamic>(self::E|get#new(0));
+  self::E|call<core::int>(self::E|get#new(0));
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+  unresolved.new; // error
+  ^^^^^^^^^^"{<invalid>}.new;
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+  unresolved.new(); // error
+  ^^^^^^^^^^"{dynamic}.new();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+  unresolved.new<int>(); // error
+  ^^^^^^^^^^"{dynamic}.new<core::int>();
+}
+static method main() → dynamic {
+  #C1;
+  new self::C::•();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.expect
index 952cefe..9f6be91 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.expect
@@ -57,5 +57,5 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = static-tearoff self::A::bar1
+  #C4 = constructor-tearoff self::A::bar1
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.transformed.expect
index 952cefe..9f6be91 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.transformed.expect
@@ -57,5 +57,5 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = static-tearoff self::A::bar1
+  #C4 = constructor-tearoff self::A::bar1
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.expect
index 952cefe..9f6be91 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.expect
@@ -57,5 +57,5 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = static-tearoff self::A::bar1
+  #C4 = constructor-tearoff self::A::bar1
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.transformed.expect
index 952cefe..9f6be91 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.transformed.expect
@@ -57,5 +57,5 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = static-tearoff self::A::bar1
+  #C4 = constructor-tearoff self::A::bar1
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.expect
index 5d000f0..22aef61 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.expect
@@ -60,5 +60,5 @@
 constants  {
   #C1 = constructor-tearoff self::A::foo
   #C2 = constructor-tearoff self::A::•
-  #C3 = static-tearoff self::A::bar
+  #C3 = constructor-tearoff self::A::bar
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.transformed.expect
index 5d000f0..22aef61 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.transformed.expect
@@ -60,5 +60,5 @@
 constants  {
   #C1 = constructor-tearoff self::A::foo
   #C2 = constructor-tearoff self::A::•
-  #C3 = static-tearoff self::A::bar
+  #C3 = constructor-tearoff self::A::bar
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.expect
index 5d000f0..22aef61 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.expect
@@ -60,5 +60,5 @@
 constants  {
   #C1 = constructor-tearoff self::A::foo
   #C2 = constructor-tearoff self::A::•
-  #C3 = static-tearoff self::A::bar
+  #C3 = constructor-tearoff self::A::bar
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.transformed.expect
index 5d000f0..22aef61 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.transformed.expect
@@ -60,5 +60,5 @@
 constants  {
   #C1 = constructor-tearoff self::A::foo
   #C2 = constructor-tearoff self::A::•
-  #C3 = static-tearoff self::A::bar
+  #C3 = constructor-tearoff self::A::bar
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect
index ce55163..e0b61a8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect
@@ -59,8 +59,8 @@
 constants  {
   #C1 = static-tearoff self::UnresolvedClass
   #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
-  #C3 = instantiation self::UnresolvedClass <core::int>
-  #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int>
+  #C3 = instantiation #C1 <core::int>
+  #C4 = instantiation #C2 <core::int>
   #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
-  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int>
+  #C6 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect
index ce55163..e0b61a8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect
@@ -59,8 +59,8 @@
 constants  {
   #C1 = static-tearoff self::UnresolvedClass
   #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
-  #C3 = instantiation self::UnresolvedClass <core::int>
-  #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int>
+  #C3 = instantiation #C1 <core::int>
+  #C4 = instantiation #C2 <core::int>
   #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
-  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int>
+  #C6 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect
index 07ba725..b3fb9eb 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect
@@ -59,8 +59,8 @@
 constants  {
   #C1 = static-tearoff self::UnresolvedClass
   #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
-  #C3 = instantiation self::UnresolvedClass <core::int*>
-  #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int*>
+  #C3 = instantiation #C1 <core::int*>
+  #C4 = instantiation #C2 <core::int*>
   #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
-  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int*>
+  #C6 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect
index 07ba725..b3fb9eb 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect
@@ -59,8 +59,8 @@
 constants  {
   #C1 = static-tearoff self::UnresolvedClass
   #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
-  #C3 = instantiation self::UnresolvedClass <core::int*>
-  #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int*>
+  #C3 = instantiation #C1 <core::int*>
+  #C4 = instantiation #C2 <core::int*>
   #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
-  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int*>
+  #C6 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
index 0ed236c..4e40f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,9 +27,9 @@
     ;
 }
 static method test() → dynamic {
-  () → self::A f1 = #C1;
-  () → self::A f2 = #C2;
-  () → self::A f3 = #C3;
+  () → self::A f1 = #C4;
+  () → self::A f2 = #C5;
+  () → self::A f3 = #C6;
   self::A x1 = f1(){() → self::A};
   self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
   self::A x3;
@@ -39,7 +39,10 @@
   return self::test();
 
 constants  {
-  #C1 = redirecting-factory-tearoff self::A::redirectingFactory
-  #C2 = redirecting-factory-tearoff self::A::redirectingFactoryChild
-  #C3 = redirecting-factory-tearoff self::A::redirectingTwice
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = constructor-tearoff self::A::redirectingTwice
+  #C4 = redirecting-factory-tearoff self::A::redirectingFactory
+  #C5 = redirecting-factory-tearoff self::A::redirectingFactoryChild
+  #C6 = redirecting-factory-tearoff self::A::redirectingTwice
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
index 0ed236c..4e40f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,9 +27,9 @@
     ;
 }
 static method test() → dynamic {
-  () → self::A f1 = #C1;
-  () → self::A f2 = #C2;
-  () → self::A f3 = #C3;
+  () → self::A f1 = #C4;
+  () → self::A f2 = #C5;
+  () → self::A f3 = #C6;
   self::A x1 = f1(){() → self::A};
   self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
   self::A x3;
@@ -39,7 +39,10 @@
   return self::test();
 
 constants  {
-  #C1 = redirecting-factory-tearoff self::A::redirectingFactory
-  #C2 = redirecting-factory-tearoff self::A::redirectingFactoryChild
-  #C3 = redirecting-factory-tearoff self::A::redirectingTwice
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = constructor-tearoff self::A::redirectingTwice
+  #C4 = redirecting-factory-tearoff self::A::redirectingFactory
+  #C5 = redirecting-factory-tearoff self::A::redirectingFactoryChild
+  #C6 = redirecting-factory-tearoff self::A::redirectingTwice
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
index 0ed236c..4e40f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,9 +27,9 @@
     ;
 }
 static method test() → dynamic {
-  () → self::A f1 = #C1;
-  () → self::A f2 = #C2;
-  () → self::A f3 = #C3;
+  () → self::A f1 = #C4;
+  () → self::A f2 = #C5;
+  () → self::A f3 = #C6;
   self::A x1 = f1(){() → self::A};
   self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
   self::A x3;
@@ -39,7 +39,10 @@
   return self::test();
 
 constants  {
-  #C1 = redirecting-factory-tearoff self::A::redirectingFactory
-  #C2 = redirecting-factory-tearoff self::A::redirectingFactoryChild
-  #C3 = redirecting-factory-tearoff self::A::redirectingTwice
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = constructor-tearoff self::A::redirectingTwice
+  #C4 = redirecting-factory-tearoff self::A::redirectingFactory
+  #C5 = redirecting-factory-tearoff self::A::redirectingFactoryChild
+  #C6 = redirecting-factory-tearoff self::A::redirectingTwice
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
index 0b5088f..91c4c77 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
@@ -21,3 +21,10 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_constructors.dart:5:7 -> ConstructorTearOffConstant(A.redirectingFactory)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_constructors.dart:5:7 -> ConstructorTearOffConstant(A.redirectingFactoryChild)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_constructors.dart:5:7 -> ConstructorTearOffConstant(A.redirectingTwice)
+Extra constant evaluation: evaluated: 7, effectively constant: 3
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
index 0ed236c..4e40f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,9 +27,9 @@
     ;
 }
 static method test() → dynamic {
-  () → self::A f1 = #C1;
-  () → self::A f2 = #C2;
-  () → self::A f3 = #C3;
+  () → self::A f1 = #C4;
+  () → self::A f2 = #C5;
+  () → self::A f3 = #C6;
   self::A x1 = f1(){() → self::A};
   self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
   self::A x3;
@@ -39,7 +39,10 @@
   return self::test();
 
 constants  {
-  #C1 = redirecting-factory-tearoff self::A::redirectingFactory
-  #C2 = redirecting-factory-tearoff self::A::redirectingFactoryChild
-  #C3 = redirecting-factory-tearoff self::A::redirectingTwice
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = constructor-tearoff self::A::redirectingTwice
+  #C4 = redirecting-factory-tearoff self::A::redirectingFactory
+  #C5 = redirecting-factory-tearoff self::A::redirectingFactoryChild
+  #C6 = redirecting-factory-tearoff self::A::redirectingTwice
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect
index 1ff3758..05e5e9d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -54,7 +54,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -65,7 +65,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -74,32 +74,32 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -108,7 +108,7 @@
     ;
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
 }
@@ -118,7 +118,7 @@
     ;
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
 }
@@ -129,23 +129,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C10;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C10;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C11;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C11;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C12;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -157,12 +157,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C12;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C13;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -173,9 +173,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C13;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C14;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -191,10 +191,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C14;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C15;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -222,16 +222,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C15;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C16;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C17;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -244,7 +244,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C18}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -259,14 +259,22 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = redirecting-factory-tearoff self::Class1::•
-  #C3 = redirecting-factory-tearoff self::Class2::named
-  #C4 = redirecting-factory-tearoff self::Class3::•
-  #C5 = redirecting-factory-tearoff self::Class4::•
-  #C6 = redirecting-factory-tearoff self::Class5::•
-  #C7 = redirecting-factory-tearoff self::Class6::•
-  #C8 = redirecting-factory-tearoff self::Class7b::•
-  #C9 = redirecting-factory-tearoff self::Class8b::•
-  #C10 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = redirecting-factory-tearoff self::Class1::•
+  #C11 = redirecting-factory-tearoff self::Class2::named
+  #C12 = redirecting-factory-tearoff self::Class3::•
+  #C13 = redirecting-factory-tearoff self::Class4::•
+  #C14 = redirecting-factory-tearoff self::Class5::•
+  #C15 = redirecting-factory-tearoff self::Class6::•
+  #C16 = redirecting-factory-tearoff self::Class7b::•
+  #C17 = redirecting-factory-tearoff self::Class8b::•
+  #C18 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect
index 83c7798..c321ab5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -54,7 +54,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -65,7 +65,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -74,32 +74,32 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -108,7 +108,7 @@
     ;
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
 }
@@ -118,7 +118,7 @@
     ;
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
 }
@@ -129,23 +129,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C10;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C10;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C11;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C11;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C12;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -157,12 +157,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C12;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C13;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -173,9 +173,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C13;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C14;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -191,10 +191,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C14;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C15;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -222,16 +222,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C15;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C16;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C17;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -244,7 +244,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C18}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -259,14 +259,22 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = redirecting-factory-tearoff self::Class1::•
-  #C3 = redirecting-factory-tearoff self::Class2::named
-  #C4 = redirecting-factory-tearoff self::Class3::•
-  #C5 = redirecting-factory-tearoff self::Class4::•
-  #C6 = redirecting-factory-tearoff self::Class5::•
-  #C7 = redirecting-factory-tearoff self::Class6::•
-  #C8 = redirecting-factory-tearoff self::Class7b::•
-  #C9 = redirecting-factory-tearoff self::Class8b::•
-  #C10 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = redirecting-factory-tearoff self::Class1::•
+  #C11 = redirecting-factory-tearoff self::Class2::named
+  #C12 = redirecting-factory-tearoff self::Class3::•
+  #C13 = redirecting-factory-tearoff self::Class4::•
+  #C14 = redirecting-factory-tearoff self::Class5::•
+  #C15 = redirecting-factory-tearoff self::Class6::•
+  #C16 = redirecting-factory-tearoff self::Class7b::•
+  #C17 = redirecting-factory-tearoff self::Class8b::•
+  #C18 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect
index 1ff3758..05e5e9d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -54,7 +54,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -65,7 +65,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -74,32 +74,32 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -108,7 +108,7 @@
     ;
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
 }
@@ -118,7 +118,7 @@
     ;
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
 }
@@ -129,23 +129,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C10;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C10;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C11;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C11;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C12;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -157,12 +157,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C12;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C13;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -173,9 +173,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C13;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C14;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -191,10 +191,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C14;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C15;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -222,16 +222,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C15;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C16;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C17;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -244,7 +244,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C18}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -259,14 +259,22 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = redirecting-factory-tearoff self::Class1::•
-  #C3 = redirecting-factory-tearoff self::Class2::named
-  #C4 = redirecting-factory-tearoff self::Class3::•
-  #C5 = redirecting-factory-tearoff self::Class4::•
-  #C6 = redirecting-factory-tearoff self::Class5::•
-  #C7 = redirecting-factory-tearoff self::Class6::•
-  #C8 = redirecting-factory-tearoff self::Class7b::•
-  #C9 = redirecting-factory-tearoff self::Class8b::•
-  #C10 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = redirecting-factory-tearoff self::Class1::•
+  #C11 = redirecting-factory-tearoff self::Class2::named
+  #C12 = redirecting-factory-tearoff self::Class3::•
+  #C13 = redirecting-factory-tearoff self::Class4::•
+  #C14 = redirecting-factory-tearoff self::Class5::•
+  #C15 = redirecting-factory-tearoff self::Class6::•
+  #C16 = redirecting-factory-tearoff self::Class7b::•
+  #C17 = redirecting-factory-tearoff self::Class8b::•
+  #C18 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
index 3714e57..7d012c0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -82,3 +82,15 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:13:7 -> ConstructorTearOffConstant(Class1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:18:7 -> ConstructorTearOffConstant(Class2.named)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:46:7 -> ConstructorTearOffConstant(Class3.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:53:7 -> ConstructorTearOffConstant(Class4.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:60:7 -> ConstructorTearOffConstant(Class5.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:68:7 -> ConstructorTearOffConstant(Class6.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:82:7 -> ConstructorTearOffConstant(Class7b.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:90:7 -> ConstructorTearOffConstant(Class8b.)
+Extra constant evaluation: evaluated: 31, effectively constant: 8
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect
index 83c7798..c321ab5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -54,7 +54,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -65,7 +65,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -74,32 +74,32 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -108,7 +108,7 @@
     ;
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
 }
@@ -118,7 +118,7 @@
     ;
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
 }
@@ -129,23 +129,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C10;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C10;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C11;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C11;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C12;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -157,12 +157,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C12;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C13;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -173,9 +173,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C13;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C14;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -191,10 +191,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C14;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C15;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -222,16 +222,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C15;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C16;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C17;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -244,7 +244,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C18}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -259,14 +259,22 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = redirecting-factory-tearoff self::Class1::•
-  #C3 = redirecting-factory-tearoff self::Class2::named
-  #C4 = redirecting-factory-tearoff self::Class3::•
-  #C5 = redirecting-factory-tearoff self::Class4::•
-  #C6 = redirecting-factory-tearoff self::Class5::•
-  #C7 = redirecting-factory-tearoff self::Class6::•
-  #C8 = redirecting-factory-tearoff self::Class7b::•
-  #C9 = redirecting-factory-tearoff self::Class8b::•
-  #C10 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = redirecting-factory-tearoff self::Class1::•
+  #C11 = redirecting-factory-tearoff self::Class2::named
+  #C12 = redirecting-factory-tearoff self::Class3::•
+  #C13 = redirecting-factory-tearoff self::Class4::•
+  #C14 = redirecting-factory-tearoff self::Class5::•
+  #C15 = redirecting-factory-tearoff self::Class6::•
+  #C16 = redirecting-factory-tearoff self::Class7b::•
+  #C17 = redirecting-factory-tearoff self::Class8b::•
+  #C18 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect
index ba3e087..a3ee0a4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect
@@ -83,5 +83,5 @@
 
 constants  {
   #C1 = static-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect
index ba3e087..a3ee0a4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect
@@ -83,5 +83,5 @@
 
 constants  {
   #C1 = static-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect
index 59bdc1d..6f79e9e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect
@@ -83,5 +83,5 @@
 
 constants  {
   #C1 = static-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect
index 59bdc1d..6f79e9e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect
@@ -83,5 +83,5 @@
 
 constants  {
   #C1 = static-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.expect
index 6c0edc7..fb71a2b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.expect
@@ -125,17 +125,17 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <>
+  #C2 = instantiation #C1 <>
   #C3 = constructor-tearoff self::B::•
-  #C4 = instantiation self::B::• <core::String>
+  #C4 = instantiation #C3 <core::String>
   #C5 = constructor-tearoff self::B::foo
-  #C6 = instantiation self::B::foo <core::String>
-  #C7 = static-tearoff self::B::bar
-  #C8 = instantiation self::B::bar <core::String>
-  #C9 = instantiation self::B::• <core::num>
-  #C10 = instantiation self::B::foo <core::num>
-  #C11 = instantiation self::B::bar <core::num>
+  #C6 = instantiation #C5 <core::String>
+  #C7 = constructor-tearoff self::B::bar
+  #C8 = instantiation #C7 <core::String>
+  #C9 = instantiation #C3 <core::num>
+  #C10 = instantiation #C5 <core::num>
+  #C11 = instantiation #C7 <core::num>
   #C12 = typedef-tearoff <X extends core::num>.(#C3<X>)
   #C13 = typedef-tearoff <X extends core::num, unrelated Y extends core::String>.(#C3<X>)
-  #C14 = instantiation self::B::• <Never>
+  #C14 = instantiation #C3 <Never>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.transformed.expect
index 9c2c674..d5b1440 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.transformed.expect
@@ -125,17 +125,17 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <>
+  #C2 = instantiation #C1 <>
   #C3 = constructor-tearoff self::B::•
-  #C4 = instantiation self::B::• <core::String>
+  #C4 = instantiation #C3 <core::String>
   #C5 = constructor-tearoff self::B::foo
-  #C6 = instantiation self::B::foo <core::String>
-  #C7 = static-tearoff self::B::bar
-  #C8 = instantiation self::B::bar <core::String>
-  #C9 = instantiation self::B::• <core::num>
-  #C10 = instantiation self::B::foo <core::num>
-  #C11 = instantiation self::B::bar <core::num>
+  #C6 = instantiation #C5 <core::String>
+  #C7 = constructor-tearoff self::B::bar
+  #C8 = instantiation #C7 <core::String>
+  #C9 = instantiation #C3 <core::num>
+  #C10 = instantiation #C5 <core::num>
+  #C11 = instantiation #C7 <core::num>
   #C12 = typedef-tearoff <X extends core::num>.(#C3<X>)
   #C13 = typedef-tearoff <X extends core::num, unrelated Y extends core::String>.(#C3<X>)
-  #C14 = instantiation self::B::• <Never>
+  #C14 = instantiation #C3 <Never>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.expect
index 8de913d..f075526 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.expect
@@ -125,17 +125,17 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <>
+  #C2 = instantiation #C1 <>
   #C3 = constructor-tearoff self::B::•
-  #C4 = instantiation self::B::• <core::String*>
+  #C4 = instantiation #C3 <core::String*>
   #C5 = constructor-tearoff self::B::foo
-  #C6 = instantiation self::B::foo <core::String*>
-  #C7 = static-tearoff self::B::bar
-  #C8 = instantiation self::B::bar <core::String*>
-  #C9 = instantiation self::B::• <core::num*>
-  #C10 = instantiation self::B::foo <core::num*>
-  #C11 = instantiation self::B::bar <core::num*>
+  #C6 = instantiation #C5 <core::String*>
+  #C7 = constructor-tearoff self::B::bar
+  #C8 = instantiation #C7 <core::String*>
+  #C9 = instantiation #C3 <core::num*>
+  #C10 = instantiation #C5 <core::num*>
+  #C11 = instantiation #C7 <core::num*>
   #C12 = typedef-tearoff <X extends core::num>.(#C3<X>)
   #C13 = typedef-tearoff <X extends core::num, unrelated Y extends core::String>.(#C3<X>)
-  #C14 = instantiation self::B::• <Never*>
+  #C14 = instantiation #C3 <Never*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.transformed.expect
index 82dceb0..e9462e1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.transformed.expect
@@ -125,17 +125,17 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <>
+  #C2 = instantiation #C1 <>
   #C3 = constructor-tearoff self::B::•
-  #C4 = instantiation self::B::• <core::String*>
+  #C4 = instantiation #C3 <core::String*>
   #C5 = constructor-tearoff self::B::foo
-  #C6 = instantiation self::B::foo <core::String*>
-  #C7 = static-tearoff self::B::bar
-  #C8 = instantiation self::B::bar <core::String*>
-  #C9 = instantiation self::B::• <core::num*>
-  #C10 = instantiation self::B::foo <core::num*>
-  #C11 = instantiation self::B::bar <core::num*>
+  #C6 = instantiation #C5 <core::String*>
+  #C7 = constructor-tearoff self::B::bar
+  #C8 = instantiation #C7 <core::String*>
+  #C9 = instantiation #C3 <core::num*>
+  #C10 = instantiation #C5 <core::num*>
+  #C11 = instantiation #C7 <core::num*>
   #C12 = typedef-tearoff <X extends core::num>.(#C3<X>)
   #C13 = typedef-tearoff <X extends core::num, unrelated Y extends core::String>.(#C3<X>)
-  #C14 = instantiation self::B::• <Never*>
+  #C14 = instantiation #C3 <Never*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
index 87df92f..34009a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -33,20 +33,20 @@
 }
 static method test() → dynamic {
   new self::D::•(1);
-  #C2;
+  #C4;
   new self::C::•(1);
-  () → self::A f1 = #C3;
-  () → self::B f2 = #C4;
-  (core::int) → self::C f3 = #C5;
-  (core::int) → self::D f4 = #C6;
+  () → self::A f1 = #C5;
+  () → self::B f2 = #C6;
+  (core::int) → self::C f3 = #C7;
+  (core::int) → self::D f4 = #C8;
   f1(){() → self::A};
   f2(){() → self::B};
   f3(1){(core::int) → self::C};
   f4(1){(core::int) → self::D};
-  () → self::A g1 = #C3;
-  () → self::B g2 = #C4;
-  (core::int) → self::C g3 = #C5;
-  (core::int) → self::D g4 = #C6;
+  () → self::A g1 = #C5;
+  () → self::B g2 = #C6;
+  (core::int) → self::C g3 = #C7;
+  (core::int) → self::D g4 = #C8;
   g1(){() → self::A};
   g2(){() → self::B};
   g3(1){(core::int) → self::C};
@@ -55,12 +55,14 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 1
-  #C2 = self::C {x:#C1}
-  #C3 = constructor-tearoff self::A::•
-  #C4 = constructor-tearoff self::B::•
-  #C5 = constructor-tearoff self::C::•
-  #C6 = constructor-tearoff self::D::•
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = 1
+  #C4 = self::C {x:#C3}
+  #C5 = constructor-tearoff self::A::•
+  #C6 = constructor-tearoff self::B::•
+  #C7 = constructor-tearoff self::C::•
+  #C8 = constructor-tearoff self::D::•
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
index 87df92f..34009a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -33,20 +33,20 @@
 }
 static method test() → dynamic {
   new self::D::•(1);
-  #C2;
+  #C4;
   new self::C::•(1);
-  () → self::A f1 = #C3;
-  () → self::B f2 = #C4;
-  (core::int) → self::C f3 = #C5;
-  (core::int) → self::D f4 = #C6;
+  () → self::A f1 = #C5;
+  () → self::B f2 = #C6;
+  (core::int) → self::C f3 = #C7;
+  (core::int) → self::D f4 = #C8;
   f1(){() → self::A};
   f2(){() → self::B};
   f3(1){(core::int) → self::C};
   f4(1){(core::int) → self::D};
-  () → self::A g1 = #C3;
-  () → self::B g2 = #C4;
-  (core::int) → self::C g3 = #C5;
-  (core::int) → self::D g4 = #C6;
+  () → self::A g1 = #C5;
+  () → self::B g2 = #C6;
+  (core::int) → self::C g3 = #C7;
+  (core::int) → self::D g4 = #C8;
   g1(){() → self::A};
   g2(){() → self::B};
   g3(1){(core::int) → self::C};
@@ -55,12 +55,14 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 1
-  #C2 = self::C {x:#C1}
-  #C3 = constructor-tearoff self::A::•
-  #C4 = constructor-tearoff self::B::•
-  #C5 = constructor-tearoff self::C::•
-  #C6 = constructor-tearoff self::D::•
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = 1
+  #C4 = self::C {x:#C3}
+  #C5 = constructor-tearoff self::A::•
+  #C6 = constructor-tearoff self::B::•
+  #C7 = constructor-tearoff self::C::•
+  #C8 = constructor-tearoff self::D::•
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
index 87df92f..34009a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -33,20 +33,20 @@
 }
 static method test() → dynamic {
   new self::D::•(1);
-  #C2;
+  #C4;
   new self::C::•(1);
-  () → self::A f1 = #C3;
-  () → self::B f2 = #C4;
-  (core::int) → self::C f3 = #C5;
-  (core::int) → self::D f4 = #C6;
+  () → self::A f1 = #C5;
+  () → self::B f2 = #C6;
+  (core::int) → self::C f3 = #C7;
+  (core::int) → self::D f4 = #C8;
   f1(){() → self::A};
   f2(){() → self::B};
   f3(1){(core::int) → self::C};
   f4(1){(core::int) → self::D};
-  () → self::A g1 = #C3;
-  () → self::B g2 = #C4;
-  (core::int) → self::C g3 = #C5;
-  (core::int) → self::D g4 = #C6;
+  () → self::A g1 = #C5;
+  () → self::B g2 = #C6;
+  (core::int) → self::C g3 = #C7;
+  (core::int) → self::D g4 = #C8;
   g1(){() → self::A};
   g2(){() → self::B};
   g3(1){(core::int) → self::C};
@@ -55,12 +55,14 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 1
-  #C2 = self::C {x:#C1}
-  #C3 = constructor-tearoff self::A::•
-  #C4 = constructor-tearoff self::B::•
-  #C5 = constructor-tearoff self::C::•
-  #C6 = constructor-tearoff self::D::•
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = 1
+  #C4 = self::C {x:#C3}
+  #C5 = constructor-tearoff self::A::•
+  #C6 = constructor-tearoff self::B::•
+  #C7 = constructor-tearoff self::C::•
+  #C8 = constructor-tearoff self::D::•
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
index 0041523..c11e3fa 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
@@ -31,3 +31,9 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///unnamed_constructor.dart:5:7 -> ConstructorTearOffConstant(A.redirectingFactory)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///unnamed_constructor.dart:5:7 -> ConstructorTearOffConstant(A.redirectingFactoryChild)
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
index 87df92f..34009a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -33,20 +33,20 @@
 }
 static method test() → dynamic {
   new self::D::•(1);
-  #C2;
+  #C4;
   new self::C::•(1);
-  () → self::A f1 = #C3;
-  () → self::B f2 = #C4;
-  (core::int) → self::C f3 = #C5;
-  (core::int) → self::D f4 = #C6;
+  () → self::A f1 = #C5;
+  () → self::B f2 = #C6;
+  (core::int) → self::C f3 = #C7;
+  (core::int) → self::D f4 = #C8;
   f1(){() → self::A};
   f2(){() → self::B};
   f3(1){(core::int) → self::C};
   f4(1){(core::int) → self::D};
-  () → self::A g1 = #C3;
-  () → self::B g2 = #C4;
-  (core::int) → self::C g3 = #C5;
-  (core::int) → self::D g4 = #C6;
+  () → self::A g1 = #C5;
+  () → self::B g2 = #C6;
+  (core::int) → self::C g3 = #C7;
+  (core::int) → self::D g4 = #C8;
   g1(){() → self::A};
   g2(){() → self::B};
   g3(1){(core::int) → self::C};
@@ -55,12 +55,14 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 1
-  #C2 = self::C {x:#C1}
-  #C3 = constructor-tearoff self::A::•
-  #C4 = constructor-tearoff self::B::•
-  #C5 = constructor-tearoff self::C::•
-  #C6 = constructor-tearoff self::D::•
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = 1
+  #C4 = self::C {x:#C3}
+  #C5 = constructor-tearoff self::A::•
+  #C6 = constructor-tearoff self::B::•
+  #C7 = constructor-tearoff self::C::•
+  #C8 = constructor-tearoff self::D::•
 }
 
 
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart
new file mode 100644
index 0000000..bd46eb8
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, 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 'test_lib.dart';
+
+main() {
+  test();
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.strong.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.strong.expect
new file mode 100644
index 0000000..b59abe4
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.strong.expect
@@ -0,0 +1,121 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_out_lib.dart: Error: A library can't opt out of null safety by default, when using sound null safety.
+//
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//   int j = sub.mixinMethod(null);
+//                           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   int j = sub.mixinMethod(null);
+//               ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   sub.mixinField2 = sub.mixinField1;
+//                         ^
+//
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+import "opt_in_lib.dart" as opt2;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  int j = sub.mixinMethod(null);
+              ^" in sub.{opt2::Mixin::mixinMethod}(invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+  int j = sub.mixinMethod(null);
+                          ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt2::Mixin::mixinField2} = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  sub.mixinField2 = sub.mixinField1;
+                        ^" in sub.{opt2::Mixin::mixinField1}{core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+  static method _#new#tearOff() → opt2::Class
+    return new opt2::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_out_lib.dart:5:1: Error: A library can't opt out of null safety by default, when using sound null safety.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+  static method _#new#tearOff() → opt::SubClass*
+    return new opt::SubClass::•();
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..b59abe4
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.strong.transformed.expect
@@ -0,0 +1,121 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_out_lib.dart: Error: A library can't opt out of null safety by default, when using sound null safety.
+//
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//   int j = sub.mixinMethod(null);
+//                           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   int j = sub.mixinMethod(null);
+//               ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   sub.mixinField2 = sub.mixinField1;
+//                         ^
+//
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+import "opt_in_lib.dart" as opt2;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  int j = sub.mixinMethod(null);
+              ^" in sub.{opt2::Mixin::mixinMethod}(invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+  int j = sub.mixinMethod(null);
+                          ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt2::Mixin::mixinField2} = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  sub.mixinField2 = sub.mixinField1;
+                        ^" in sub.{opt2::Mixin::mixinField1}{core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+  static method _#new#tearOff() → opt2::Class
+    return new opt2::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_out_lib.dart:5:1: Error: A library can't opt out of null safety by default, when using sound null safety.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+  static method _#new#tearOff() → opt::SubClass*
+    return new opt::SubClass::•();
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.textual_outline.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.textual_outline.expect
new file mode 100644
index 0000000..6f433ef
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+import 'test_lib.dart';
+
+main() {}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6f433ef
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+import 'test_lib.dart';
+
+main() {}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.expect
new file mode 100644
index 0000000..768396e
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.expect
@@ -0,0 +1,109 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//   int j = sub.mixinMethod(null);
+//                           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   int j = sub.mixinMethod(null);
+//               ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   sub.mixinField2 = sub.mixinField1;
+//                         ^
+//
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+import "opt_in_lib.dart" as opt2;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  int j = sub.mixinMethod(null);
+              ^" in sub.{opt2::Mixin::mixinMethod}(invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+  int j = sub.mixinMethod(null);
+                          ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt2::Mixin::mixinField2} = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  sub.mixinField2 = sub.mixinField1;
+                        ^" in sub.{opt2::Mixin::mixinField1}{core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+  static method _#new#tearOff() → opt2::Class
+    return new opt2::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+  static method _#new#tearOff() → opt::SubClass*
+    return new opt::SubClass::•();
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.outline.expect
new file mode 100644
index 0000000..86e5bd6
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.outline.expect
@@ -0,0 +1,75 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self3;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1;
+  field core::int classField2;
+  synthetic constructor •() → self3::Class
+    ;
+  method classMethod(core::int i) → core::int?
+    ;
+  static method _#new#tearOff() → self3::Class
+    return new self3::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1;
+  field core::int mixinField2;
+  method mixinMethod(core::int i) → core::int?
+    ;
+}
+
+library;
+import self as self4;
+import "opt_in_lib.dart" as self3;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = self3::Class with self3::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self4::_SubClass&Class&Mixin*
+    : super self3::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{self3::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{self3::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{self3::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{self3::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> self3::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> self3::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> self3::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> self3::Class::classField2
+  mixin-super-stub method mixinMethod(core::int* i) → core::int*
+    return super.{self3::Mixin::mixinMethod}(i);
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> self3::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends self4::_SubClass&Class&Mixin {
+  synthetic constructor •() → self4::SubClass*
+    ;
+  static method _#new#tearOff() → self4::SubClass*
+    return new self4::SubClass::•();
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..768396e
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.transformed.expect
@@ -0,0 +1,109 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//   int j = sub.mixinMethod(null);
+//                           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   int j = sub.mixinMethod(null);
+//               ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   sub.mixinField2 = sub.mixinField1;
+//                         ^
+//
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+import "opt_in_lib.dart" as opt2;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  int j = sub.mixinMethod(null);
+              ^" in sub.{opt2::Mixin::mixinMethod}(invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+  int j = sub.mixinMethod(null);
+                          ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt2::Mixin::mixinField2} = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  sub.mixinField2 = sub.mixinField1;
+                        ^" in sub.{opt2::Mixin::mixinField1}{core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+  static method _#new#tearOff() → opt2::Class
+    return new opt2::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+  static method _#new#tearOff() → opt::SubClass*
+    return new opt::SubClass::•();
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart
new file mode 100644
index 0000000..bd46eb8
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, 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 'test_lib.dart';
+
+main() {
+  test();
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.strong.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.strong.expect
new file mode 100644
index 0000000..6c83f5a
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.strong.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = sub.{opt::_SubClass&Class&Mixin::mixinMethod}(null){(core::int*) →* core::int*};
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int*};
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_out_lib.dart:5:1: Error: A library can't opt out of null safety by default, when using sound null safety.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  mixin-super-stub method mixinMethod(core::int* i) → core::int*
+    return super.{opt2::Mixin::mixinMethod}(i);
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+  static method _#new#tearOff() → opt::SubClass*
+    return new opt::SubClass::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+  static method _#new#tearOff() → opt2::Class
+    return new opt2::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.strong.transformed.expect
new file mode 100644
index 0000000..2c29078
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.strong.transformed.expect
@@ -0,0 +1,94 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = sub.{opt::_SubClass&Class&Mixin::mixinMethod}(null){(core::int*) →* core::int*};
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int*};
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_out_lib.dart:5:1: Error: A library can't opt out of null safety by default, when using sound null safety.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+  static method _#new#tearOff() → opt::SubClass*
+    return new opt::SubClass::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+  static method _#new#tearOff() → opt2::Class
+    return new opt2::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.textual_outline.expect
new file mode 100644
index 0000000..6f433ef
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+import 'test_lib.dart';
+
+main() {}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6f433ef
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+import 'test_lib.dart';
+
+main() {}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.expect
new file mode 100644
index 0000000..4f8699d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.expect
@@ -0,0 +1,86 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = sub.{opt::_SubClass&Class&Mixin::mixinMethod}(null){(core::int*) →* core::int*};
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int*};
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  mixin-super-stub method mixinMethod(core::int* i) → core::int*
+    return super.{opt2::Mixin::mixinMethod}(i);
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+  static method _#new#tearOff() → opt::SubClass*
+    return new opt::SubClass::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+  static method _#new#tearOff() → opt2::Class
+    return new opt2::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.outline.expect
new file mode 100644
index 0000000..2f9c18a
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.outline.expect
@@ -0,0 +1,75 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic
+  ;
+
+library;
+import self as self3;
+import "opt_in_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt::Class with opt::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self3::_SubClass&Class&Mixin*
+    : super opt::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt::Class::classField2
+  mixin-super-stub method mixinMethod(core::int* i) → core::int*
+    return super.{opt::Mixin::mixinMethod}(i);
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends self3::_SubClass&Class&Mixin {
+  synthetic constructor •() → self3::SubClass*
+    ;
+  static method _#new#tearOff() → self3::SubClass*
+    return new self3::SubClass::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1;
+  field core::int classField2;
+  synthetic constructor •() → opt::Class
+    ;
+  method classMethod(core::int i) → core::int?
+    ;
+  static method _#new#tearOff() → opt::Class
+    return new opt::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1;
+  field core::int mixinField2;
+  method mixinMethod(core::int i) → core::int?
+    ;
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.transformed.expect
new file mode 100644
index 0000000..60ca4c9
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.transformed.expect
@@ -0,0 +1,87 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = sub.{opt::_SubClass&Class&Mixin::mixinMethod}(null){(core::int*) →* core::int*};
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int*};
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+  static method _#new#tearOff() → opt::SubClass*
+    return new opt::SubClass::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+  static method _#new#tearOff() → opt2::Class
+    return new opt2::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_in_lib.dart b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_in_lib.dart
new file mode 100644
index 0000000..30ed0aa
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_in_lib.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2021, 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.
+
+class Class {
+  int? classField1;
+  int classField2 = 0;
+  int? classMethod(int i) {}
+}
+
+mixin Mixin {
+  int? mixinField1;
+  int mixinField2 = 0;
+  int? mixinMethod(int i) {
+    super.toString();
+  }
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_out_lib.dart b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_out_lib.dart
new file mode 100644
index 0000000..e1f91ac
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/opt_out_lib.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, 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.
+
+// @dart=2.9
+
+import 'opt_in_lib.dart';
+
+class SubClass extends Class with Mixin {}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/test.options b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/test.options
new file mode 100644
index 0000000..c0f5433
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/test.options
@@ -0,0 +1,2 @@
+opt_in_lib.dart
+opt_out_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart
new file mode 100644
index 0000000..1c2249c
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, 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 'opt_out_lib.dart';
+
+test() {
+  SubClass sub = new SubClass();
+  int i = sub.classMethod(null);
+  int j = sub.mixinMethod(null);
+  sub.classField2 = sub.classField1;
+  sub.mixinField2 = sub.mixinField1;
+}
diff --git a/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.expect b/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.expect
index fb9bcc0..177dd51 100644
--- a/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.expect
+++ b/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.expect
@@ -19,6 +19,6 @@
 
 constants  {
   #C1 = static-tearoff self::C::_#new#tearOff
-  #C2 = instantiation self::C::_#new#tearOff <core::int>
-  #C3 = instantiation self::C::_#new#tearOff <core::String>
+  #C2 = instantiation #C1 <core::int>
+  #C3 = instantiation #C1 <core::String>
 }
diff --git a/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.transformed.expect
index bae63cb..acaab65 100644
--- a/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.transformed.expect
@@ -19,8 +19,8 @@
 
 constants  {
   #C1 = static-tearoff self::C::_#new#tearOff
-  #C2 = instantiation self::C::_#new#tearOff <core::int>
-  #C3 = instantiation self::C::_#new#tearOff <core::String>
+  #C2 = instantiation #C1 <core::int>
+  #C3 = instantiation #C1 <core::String>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.expect b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.expect
index 04f3df1..39841ce 100644
--- a/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.expect
+++ b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.expect
@@ -19,6 +19,6 @@
 
 constants  {
   #C1 = static-tearoff self::C::_#new#tearOff
-  #C2 = instantiation self::C::_#new#tearOff <core::int*>
-  #C3 = instantiation self::C::_#new#tearOff <core::String*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
 }
diff --git a/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.transformed.expect
index 0f3b2dc..3e71f95 100644
--- a/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.transformed.expect
@@ -19,8 +19,8 @@
 
 constants  {
   #C1 = static-tearoff self::C::_#new#tearOff
-  #C2 = instantiation self::C::_#new#tearOff <core::int*>
-  #C3 = instantiation self::C::_#new#tearOff <core::String*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/dartdevc/issue47313.dart b/pkg/front_end/testcases/dartdevc/issue47313.dart
new file mode 100644
index 0000000..e2eaf1e
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47313.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, 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.
+
+class A<X> {}
+
+mixin M {}
+
+class C<X> = A<X> with M;
+
+main() {
+  C.new;
+}
diff --git a/pkg/front_end/testcases/dartdevc/issue47313.dart.strong.expect b/pkg/front_end/testcases/dartdevc/issue47313.dart.strong.expect
new file mode 100644
index 0000000..26cc49c
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47313.dart.strong.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
+    return new self::A::•<self::A::_#new#tearOff::X%>();
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
+  synthetic constructor •() → self::C<self::C::X%>
+    : super self::A::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
+    return new self::C::•<self::C::_#new#tearOff::X%>();
+}
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = static-tearoff self::C::_#new#tearOff
+}
diff --git a/pkg/front_end/testcases/dartdevc/issue47313.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/issue47313.dart.strong.transformed.expect
new file mode 100644
index 0000000..26cc49c
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47313.dart.strong.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
+    return new self::A::•<self::A::_#new#tearOff::X%>();
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
+  synthetic constructor •() → self::C<self::C::X%>
+    : super self::A::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
+    return new self::C::•<self::C::_#new#tearOff::X%>();
+}
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = static-tearoff self::C::_#new#tearOff
+}
diff --git a/pkg/front_end/testcases/dartdevc/issue47313.dart.textual_outline.expect b/pkg/front_end/testcases/dartdevc/issue47313.dart.textual_outline.expect
new file mode 100644
index 0000000..844e733
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47313.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+class A<X> {}
+
+mixin M {}
+class C<X> = A<X> with M;
+main() {}
diff --git a/pkg/front_end/testcases/dartdevc/issue47313.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dartdevc/issue47313.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..acd5db2
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47313.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+class A<X> {}
+
+class C<X> = A<X> with M;
+main() {}
+mixin M {}
diff --git a/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.expect b/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.expect
new file mode 100644
index 0000000..26cc49c
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
+    return new self::A::•<self::A::_#new#tearOff::X%>();
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
+  synthetic constructor •() → self::C<self::C::X%>
+    : super self::A::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
+    return new self::C::•<self::C::_#new#tearOff::X%>();
+}
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = static-tearoff self::C::_#new#tearOff
+}
diff --git a/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.outline.expect
new file mode 100644
index 0000000..f206219
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
+    return new self::A::•<self::A::_#new#tearOff::X%>();
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
+  synthetic constructor •() → self::C<self::C::X%>
+    : super self::A::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
+    return new self::C::•<self::C::_#new#tearOff::X%>();
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.transformed.expect
new file mode 100644
index 0000000..26cc49c
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
+    return new self::A::•<self::A::_#new#tearOff::X%>();
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
+  synthetic constructor •() → self::C<self::C::X%>
+    : super self::A::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
+    return new self::C::•<self::C::_#new#tearOff::X%>();
+}
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = static-tearoff self::C::_#new#tearOff
+}
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart
new file mode 100644
index 0000000..42f48cf
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, 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.
+
+extension type A<T> on Class<T> {}
+
+class Class<T> {
+  static A<T>? method1(A<T> arg) {
+    A<T>? local;
+  }
+  static A<A<T>>? method2(A<A<T>> arg) {
+    A<A<T>>? local;
+  }
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.strong.expect b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.strong.expect
new file mode 100644
index 0000000..7f95ca4
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.strong.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//                          ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:12: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//                               ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:9:7: Error: Type variables can't be used in static members.
+//     A<T>? local;
+//       ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:12:9: Error: Type variables can't be used in static members.
+//     A<A<T>>? local;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static method method1(self::A<invalid-type> arg) → self::A<invalid-type>? {
+    self::A<invalid-type>? local;
+  }
+  static method method2(self::A<self::A<invalid-type>> arg) → self::A<self::A<invalid-type>>? {
+    self::A<self::A<invalid-type>>? local;
+  }
+}
+extension type A<T extends core::Object? = dynamic> on self::Class<T%> {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.textual_outline.expect
new file mode 100644
index 0000000..06ad37b
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+extension type A<T> on Class<T> {}
+class Class<T> {
+  static A<T>? method1(A<T> arg) {}
+  static A<A<T>>? method2(A<A<T>> arg) {}
+}
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.expect b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.expect
new file mode 100644
index 0000000..7f95ca4
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//                          ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:12: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//                               ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:9:7: Error: Type variables can't be used in static members.
+//     A<T>? local;
+//       ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:12:9: Error: Type variables can't be used in static members.
+//     A<A<T>>? local;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static method method1(self::A<invalid-type> arg) → self::A<invalid-type>? {
+    self::A<invalid-type>? local;
+  }
+  static method method2(self::A<self::A<invalid-type>> arg) → self::A<self::A<invalid-type>>? {
+    self::A<self::A<invalid-type>>? local;
+  }
+}
+extension type A<T extends core::Object? = dynamic> on self::Class<T%> {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.outline.expect
new file mode 100644
index 0000000..9dda330
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.outline.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//                          ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:12: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//                               ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    ;
+  static method method1(self::A<invalid-type> arg) → self::A<invalid-type>?
+    ;
+  static method method2(self::A<self::A<invalid-type>> arg) → self::A<self::A<invalid-type>>?
+    ;
+}
+extension type A<T extends core::Object? = dynamic> on self::Class<T%> {
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/annotations.dart b/pkg/front_end/testcases/extensions/annotations.dart
index 8e69899..5144d09 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart
+++ b/pkg/front_end/testcases/extensions/annotations.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 class Class {
   @pragma('dart2js:noInline')
   instanceMethod() {}
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/annotations.dart.weak.outline.expect
index 8a6129e..1ab642c 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.weak.outline.expect
@@ -43,9 +43,9 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:6:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:14:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:17:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:21:2 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:8:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:11:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:16:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:19:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:23:2 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
 Extra constant evaluation: evaluated: 8, effectively constant: 5
diff --git a/pkg/front_end/testcases/extensions/annotations_scope.dart b/pkg/front_end/testcases/extensions/annotations_scope.dart
new file mode 100644
index 0000000..55db07d
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/annotations_scope.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, 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.
+
+// Test that extension member annotations can access other extension static
+// members from the same extension by simple name.
+
+extension E on int {
+  @constField
+  static const int constField = 1;
+
+  @constField2
+  static const int constField1 = 2;
+
+  @constField1
+  static const int constField2 = 3;
+
+  @constField
+  static void staticMethod() {}
+
+  @constField
+  void instanceMethod() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/annotations_scope.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/annotations_scope.dart.textual_outline.expect
new file mode 100644
index 0000000..1fe592b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/annotations_scope.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+extension E on int {
+  @constField
+  static const int constField = 1;
+  @constField2
+  static const int constField1 = 2;
+  @constField1
+  static const int constField2 = 3;
+  @constField
+  static void staticMethod() {}
+  @constField
+  void instanceMethod() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/annotations_scope.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/annotations_scope.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1fe592b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/annotations_scope.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+extension E on int {
+  @constField
+  static const int constField = 1;
+  @constField2
+  static const int constField1 = 2;
+  @constField1
+  static const int constField2 = 3;
+  @constField
+  static void staticMethod() {}
+  @constField
+  void instanceMethod() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.expect b/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.expect
new file mode 100644
index 0000000..1fc63c7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E on core::int {
+  static field constField = self::E|constField;
+  static field constField1 = self::E|constField1;
+  static field constField2 = self::E|constField2;
+  static method staticMethod = self::E|staticMethod;
+  method instanceMethod = self::E|instanceMethod;
+  tearoff instanceMethod = self::E|get#instanceMethod;
+}
+@#C1
+static const field core::int E|constField = #C1;
+@#C2
+static const field core::int E|constField1 = #C3;
+@#C3
+static const field core::int E|constField2 = #C2;
+@#C1
+static method E|staticMethod() → void {}
+@#C1
+static method E|instanceMethod(lowered final core::int #this) → void {}
+static method E|get#instanceMethod(lowered final core::int #this) → () → void
+  return () → void => self::E|instanceMethod(#this);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 3
+  #C3 = 2
+}
diff --git a/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.outline.expect
new file mode 100644
index 0000000..bb7bdbd
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.outline.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E on core::int {
+  static field constField = self::E|constField;
+  static field constField1 = self::E|constField1;
+  static field constField2 = self::E|constField2;
+  static method staticMethod = self::E|staticMethod;
+  method instanceMethod = self::E|instanceMethod;
+  tearoff instanceMethod = self::E|get#instanceMethod;
+}
+@self::E|constField
+static const field core::int E|constField = 1;
+@self::E|constField2
+static const field core::int E|constField1 = 2;
+@self::E|constField1
+static const field core::int E|constField2 = 3;
+@self::E|constField
+static method E|staticMethod() → void
+  ;
+@self::E|constField
+static method E|instanceMethod(lowered final core::int #this) → void
+  ;
+static method E|get#instanceMethod(lowered final core::int #this) → () → void
+  return () → void => self::E|instanceMethod(#this);
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: StaticGet @ org-dartlang-testcase:///annotations_scope.dart:18:4 -> IntConstant(1)
+Evaluated: StaticGet @ org-dartlang-testcase:///annotations_scope.dart:21:4 -> IntConstant(1)
+Evaluated: StaticGet @ org-dartlang-testcase:///annotations_scope.dart:9:4 -> IntConstant(1)
+Evaluated: StaticGet @ org-dartlang-testcase:///annotations_scope.dart:12:4 -> IntConstant(3)
+Evaluated: StaticGet @ org-dartlang-testcase:///annotations_scope.dart:15:4 -> IntConstant(2)
+Extra constant evaluation: evaluated: 8, effectively constant: 5
diff --git a/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.transformed.expect
new file mode 100644
index 0000000..1fc63c7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.transformed.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E on core::int {
+  static field constField = self::E|constField;
+  static field constField1 = self::E|constField1;
+  static field constField2 = self::E|constField2;
+  static method staticMethod = self::E|staticMethod;
+  method instanceMethod = self::E|instanceMethod;
+  tearoff instanceMethod = self::E|get#instanceMethod;
+}
+@#C1
+static const field core::int E|constField = #C1;
+@#C2
+static const field core::int E|constField1 = #C3;
+@#C3
+static const field core::int E|constField2 = #C2;
+@#C1
+static method E|staticMethod() → void {}
+@#C1
+static method E|instanceMethod(lowered final core::int #this) → void {}
+static method E|get#instanceMethod(lowered final core::int #this) → () → void
+  return () → void => self::E|instanceMethod(#this);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 3
+  #C3 = 2
+}
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart
index ef9d43c..2d4605b 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart
@@ -1,15 +1,16 @@
 // Copyright (c) 2020, 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.
-// @dart=2.9
+
 extension E<U> on String {
   U field1 = null;
-  int field2 = () { U x = null; return null; }();
-  List<U> field3 = null;
-  U Function(U) field4 = null;
-  List<U> Function(List<U>) field5 = null;
-  int field6 = <E>() { E x = null; return null; }<String>();
-  int field7 = <E>() { E x = null; return null; }<U>();
+  int? field2 = () { U x = null; return null; }();
+  List<U>? field3 = null;
+  U Function(U)? field4 = null;
+  List<U> Function(List<U>)? field5 = null;
+  int? field6 = <E>() { E? x = null; return null; }<String>();
+  int? field7 = <E>() { E? x = null; return null; }<U>();
+  Type field8 = U;
 }
 
 main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.textual_outline.expect
index d1f6d15..ded570a 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.textual_outline.expect
@@ -1,11 +1,11 @@
-// @dart = 2.9
 extension E<U> on String {
   U field1 = null;
-  int field2 = () { U x = null; return null; }();
-  List<U> field3 = null;
-  U Function(U) field4 = null;
-  List<U> Function(List<U>) field5 = null;
-  int field6 = <E>() { E x = null; return null; }<String>();
-  int field7 = <E>() { E x = null; return null; }<U>();
+  int? field2 = () { U x = null; return null; }();
+  List<U>? field3 = null;
+  U Function(U)? field4 = null;
+  List<U> Function(List<U>)? field5 = null;
+  int? field6 = <E>() { E? x = null; return null; }<String>();
+  int? field7 = <E>() { E? x = null; return null; }<U>();
+  Type field8 = U;
 }
 main() {}
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect
index 3578f8e..1539e4a 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,72 +7,45 @@
 //   U field1 = null;
 //     ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:7:7: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:7:8: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   int field2 = () { U x = null; return null; }();
-//       ^^^^^^
+//   int? field2 = () { U x = null; return null; }();
+//        ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:11: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:12: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   List<U> field3 = null;
-//           ^^^^^^
+//   List<U>? field3 = null;
+//            ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:17: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:18: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   U Function(U) field4 = null;
-//                 ^^^^^^
+//   U Function(U)? field4 = null;
+//                  ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:29: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:30: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   List<U> Function(List<U>) field5 = null;
-//                             ^^^^^^
+//   List<U> Function(List<U>)? field5 = null;
+//                              ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:11:7: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:11:8: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   int field6 = <E>() { E x = null; return null; }<String>();
-//       ^^^^^^
+//   int? field6 = <E>() { E? x = null; return null; }<String>();
+//        ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:12:7: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:12:8: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   int field7 = <E>() { E x = null; return null; }<U>();
-//       ^^^^^^
+//   int? field7 = <E>() { E? x = null; return null; }<U>();
+//        ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:6:3: Error: Type variables can't be used in static members.
-//   U field1 = null;
-//   ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:8: Error: Type variables can't be used in static members.
-//   List<U> field3 = null;
-//        ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:3: Error: Type variables can't be used in static members.
-//   U Function(U) field4 = null;
-//   ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:14: Error: Type variables can't be used in static members.
-//   U Function(U) field4 = null;
-//              ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:8: Error: Type variables can't be used in static members.
-//   List<U> Function(List<U>) field5 = null;
-//        ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:25: Error: Type variables can't be used in static members.
-//   List<U> Function(List<U>) field5 = null;
-//                         ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:7:21: Error: Type variables can't be used in static members.
-//   int field2 = () { U x = null; return null; }();
-//                     ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:12:51: Error: Type variables can't be used in static members.
-//   int field7 = <E>() { E x = null; return null; }<U>();
-//                                                   ^
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:13:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   Type field8 = U;
+//        ^^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-extension E<U extends core::Object* = dynamic> on core::String* {
+extension E<U extends core::Object? = dynamic> on core::String {
   field field1 = self::E|field1;
   field field2 = self::E|field2;
   field field3 = self::E|field3;
@@ -80,21 +53,27 @@
   field field5 = self::E|field5;
   field field6 = self::E|field6;
   field field7 = self::E|field7;
+  field field8 = self::E|field8;
 }
 static field invalid-type E|field1 = null;
-static field core::int* E|field2 = (() → Null {
+static field core::int? E|field2 = (() → Null {
   invalid-type x = null;
   return null;
-})(){() →* Null};
-static field core::List<invalid-type>* E|field3 = null;
-static field (invalid-type) →* invalid-type E|field4 = null;
-static field (core::List<invalid-type>*) →* core::List<invalid-type>* E|field5 = null;
-static field core::int* E|field6 = (<E extends core::Object* = dynamic>() → Null {
-  E* x = null;
+})(){() → Null};
+static field core::List<invalid-type>? E|field3 = null;
+static field (invalid-type) →? invalid-type E|field4 = null;
+static field (core::List<invalid-type>) →? core::List<invalid-type> E|field5 = null;
+static field core::int? E|field6 = (<E extends core::Object? = dynamic>() → Null {
+  E? x = null;
   return null;
-})<core::String*>(){() →* Null};
-static field core::int* E|field7 = (<E extends core::Object* = dynamic>() → Null {
-  E* x = null;
+})<core::String>(){() → Null};
+static field core::int? E|field7 = (<E extends core::Object? = dynamic>() → Null {
+  E? x = null;
   return null;
-})<invalid-type>(){() →* Null};
+})<invalid-type>(){() → Null};
+static field core::Type E|field8 = #C1;
 static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(invalid-type)
+}
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.outline.expect
index a1e7455..3ff507f 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,64 +7,45 @@
 //   U field1 = null;
 //     ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:7:7: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:7:8: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   int field2 = () { U x = null; return null; }();
-//       ^^^^^^
+//   int? field2 = () { U x = null; return null; }();
+//        ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:11: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:12: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   List<U> field3 = null;
-//           ^^^^^^
+//   List<U>? field3 = null;
+//            ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:17: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:18: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   U Function(U) field4 = null;
-//                 ^^^^^^
+//   U Function(U)? field4 = null;
+//                  ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:29: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:30: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   List<U> Function(List<U>) field5 = null;
-//                             ^^^^^^
+//   List<U> Function(List<U>)? field5 = null;
+//                              ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:11:7: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:11:8: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   int field6 = <E>() { E x = null; return null; }<String>();
-//       ^^^^^^
+//   int? field6 = <E>() { E? x = null; return null; }<String>();
+//        ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:12:7: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:12:8: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   int field7 = <E>() { E x = null; return null; }<U>();
-//       ^^^^^^
+//   int? field7 = <E>() { E? x = null; return null; }<U>();
+//        ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:6:3: Error: Type variables can't be used in static members.
-//   U field1 = null;
-//   ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:8: Error: Type variables can't be used in static members.
-//   List<U> field3 = null;
-//        ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:3: Error: Type variables can't be used in static members.
-//   U Function(U) field4 = null;
-//   ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:14: Error: Type variables can't be used in static members.
-//   U Function(U) field4 = null;
-//              ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:8: Error: Type variables can't be used in static members.
-//   List<U> Function(List<U>) field5 = null;
-//        ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:25: Error: Type variables can't be used in static members.
-//   List<U> Function(List<U>) field5 = null;
-//                         ^
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:13:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   Type field8 = U;
+//        ^^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-extension E<U extends core::Object* = dynamic> on core::String* {
+extension E<U extends core::Object? = dynamic> on core::String {
   field field1 = self::E|field1;
   field field2 = self::E|field2;
   field field3 = self::E|field3;
@@ -72,13 +53,15 @@
   field field5 = self::E|field5;
   field field6 = self::E|field6;
   field field7 = self::E|field7;
+  field field8 = self::E|field8;
 }
 static field invalid-type E|field1;
-static field core::int* E|field2;
-static field core::List<invalid-type>* E|field3;
-static field (invalid-type) →* invalid-type E|field4;
-static field (core::List<invalid-type>*) →* core::List<invalid-type>* E|field5;
-static field core::int* E|field6;
-static field core::int* E|field7;
+static field core::int? E|field2;
+static field core::List<invalid-type>? E|field3;
+static field (invalid-type) →? invalid-type E|field4;
+static field (core::List<invalid-type>) →? core::List<invalid-type> E|field5;
+static field core::int? E|field6;
+static field core::int? E|field7;
+static field core::Type E|field8;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect
index 3578f8e..1539e4a 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,72 +7,45 @@
 //   U field1 = null;
 //     ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:7:7: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:7:8: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   int field2 = () { U x = null; return null; }();
-//       ^^^^^^
+//   int? field2 = () { U x = null; return null; }();
+//        ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:11: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:12: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   List<U> field3 = null;
-//           ^^^^^^
+//   List<U>? field3 = null;
+//            ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:17: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:18: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   U Function(U) field4 = null;
-//                 ^^^^^^
+//   U Function(U)? field4 = null;
+//                  ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:29: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:30: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   List<U> Function(List<U>) field5 = null;
-//                             ^^^^^^
+//   List<U> Function(List<U>)? field5 = null;
+//                              ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:11:7: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:11:8: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   int field6 = <E>() { E x = null; return null; }<String>();
-//       ^^^^^^
+//   int? field6 = <E>() { E? x = null; return null; }<String>();
+//        ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:12:7: Error: Extensions can't declare instance fields
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:12:8: Error: Extensions can't declare instance fields
 // Try removing the field declaration or making it a static field
-//   int field7 = <E>() { E x = null; return null; }<U>();
-//       ^^^^^^
+//   int? field7 = <E>() { E? x = null; return null; }<U>();
+//        ^^^^^^
 //
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:6:3: Error: Type variables can't be used in static members.
-//   U field1 = null;
-//   ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:8: Error: Type variables can't be used in static members.
-//   List<U> field3 = null;
-//        ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:3: Error: Type variables can't be used in static members.
-//   U Function(U) field4 = null;
-//   ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:14: Error: Type variables can't be used in static members.
-//   U Function(U) field4 = null;
-//              ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:8: Error: Type variables can't be used in static members.
-//   List<U> Function(List<U>) field5 = null;
-//        ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:25: Error: Type variables can't be used in static members.
-//   List<U> Function(List<U>) field5 = null;
-//                         ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:7:21: Error: Type variables can't be used in static members.
-//   int field2 = () { U x = null; return null; }();
-//                     ^
-//
-// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:12:51: Error: Type variables can't be used in static members.
-//   int field7 = <E>() { E x = null; return null; }<U>();
-//                                                   ^
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:13:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   Type field8 = U;
+//        ^^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-extension E<U extends core::Object* = dynamic> on core::String* {
+extension E<U extends core::Object? = dynamic> on core::String {
   field field1 = self::E|field1;
   field field2 = self::E|field2;
   field field3 = self::E|field3;
@@ -80,21 +53,27 @@
   field field5 = self::E|field5;
   field field6 = self::E|field6;
   field field7 = self::E|field7;
+  field field8 = self::E|field8;
 }
 static field invalid-type E|field1 = null;
-static field core::int* E|field2 = (() → Null {
+static field core::int? E|field2 = (() → Null {
   invalid-type x = null;
   return null;
-})(){() →* Null};
-static field core::List<invalid-type>* E|field3 = null;
-static field (invalid-type) →* invalid-type E|field4 = null;
-static field (core::List<invalid-type>*) →* core::List<invalid-type>* E|field5 = null;
-static field core::int* E|field6 = (<E extends core::Object* = dynamic>() → Null {
-  E* x = null;
+})(){() → Null};
+static field core::List<invalid-type>? E|field3 = null;
+static field (invalid-type) →? invalid-type E|field4 = null;
+static field (core::List<invalid-type>) →? core::List<invalid-type> E|field5 = null;
+static field core::int? E|field6 = (<E extends core::Object? = dynamic>() → Null {
+  E? x = null;
   return null;
-})<core::String*>(){() →* Null};
-static field core::int* E|field7 = (<E extends core::Object* = dynamic>() → Null {
-  E* x = null;
+})<core::String>(){() → Null};
+static field core::int? E|field7 = (<E extends core::Object? = dynamic>() → Null {
+  E? x = null;
   return null;
-})<invalid-type>(){() →* Null};
+})<invalid-type>(){() → Null};
+static field core::Type E|field8 = #C1;
 static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(invalid-type)
+}
diff --git a/pkg/front_end/testcases/extensions/issue47345.dart b/pkg/front_end/testcases/extensions/issue47345.dart
new file mode 100644
index 0000000..4d8722c
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue47345.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2021, 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.
+
+void main() {}
+
+class Foo {}
+
+extension on Foo {
+  static const bar = 1;
+  static const doubleBar = bar * 2;
+}
diff --git a/pkg/front_end/testcases/extensions/issue47345.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue47345.dart.textual_outline.expect
new file mode 100644
index 0000000..ef181e1
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue47345.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+void main() {}
+
+class Foo {}
+
+extension on Foo {
+  static const bar = 1;
+  static const doubleBar = bar * 2;
+}
diff --git a/pkg/front_end/testcases/extensions/issue47345.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue47345.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0ddff5f
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue47345.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+class Foo {}
+
+extension on Foo {
+  static const bar = 1;
+  static const doubleBar = bar * 2;
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/extensions/issue47345.dart.weak.expect b/pkg/front_end/testcases/extensions/issue47345.dart.weak.expect
new file mode 100644
index 0000000..38d9756
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue47345.dart.weak.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+extension _extension#0 on self::Foo {
+  static field bar = self::_extension#0|bar;
+  static field doubleBar = self::_extension#0|doubleBar;
+}
+static const field core::int _extension#0|bar = #C1;
+static const field core::int _extension#0|doubleBar = #C2;
+static method main() → void {}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+}
diff --git a/pkg/front_end/testcases/extensions/issue47345.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue47345.dart.weak.outline.expect
new file mode 100644
index 0000000..38ae11a
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue47345.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    ;
+}
+extension _extension#0 on self::Foo {
+  static field bar = self::_extension#0|bar;
+  static field doubleBar = self::_extension#0|doubleBar;
+}
+static const field core::int _extension#0|bar = 1;
+static const field core::int _extension#0|doubleBar = self::_extension#0|bar.{core::num::*}(2){(core::num) → core::int};
+static method main() → void
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue47345.dart:11:32 -> IntConstant(2)
+Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/extensions/issue47345.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue47345.dart.weak.transformed.expect
new file mode 100644
index 0000000..38d9756
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue47345.dart.weak.transformed.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+extension _extension#0 on self::Foo {
+  static field bar = self::_extension#0|bar;
+  static field doubleBar = self::_extension#0|doubleBar;
+}
+static const field core::int _extension#0|bar = #C1;
+static const field core::int _extension#0|doubleBar = #C2;
+static method main() → void {}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+}
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart b/pkg/front_end/testcases/extensions/language_issue1182.dart
index 2849485..d64e302 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, 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.
+
 // @dart=2.9
+
 extension Test<T> on T {
   T Function(T) get test => (a) => this;
 }
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect
index 6b86f49..d952a83 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/language_issue1182.dart:11:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
+// pkg/front_end/testcases/extensions/language_issue1182.dart:13:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
 //     S Function(S) f = x.test;
 //                         ^
 //
@@ -14,7 +14,7 @@
     : super core::Object::•()
     ;
   method test1(covariant-by-class self::Foo::S* x) → void {
-    (self::Foo::S*) →* self::Foo::S* f = invalid-expression "pkg/front_end/testcases/extensions/language_issue1182.dart:11:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
+    (self::Foo::S*) →* self::Foo::S* f = invalid-expression "pkg/front_end/testcases/extensions/language_issue1182.dart:13:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
     S Function(S) f = x.test;
                         ^" in self::Test|get#test<core::num*>(x) as{TypeError} Never;
   }
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.transformed.expect
index 6b86f49..d952a83 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/language_issue1182.dart:11:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
+// pkg/front_end/testcases/extensions/language_issue1182.dart:13:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
 //     S Function(S) f = x.test;
 //                         ^
 //
@@ -14,7 +14,7 @@
     : super core::Object::•()
     ;
   method test1(covariant-by-class self::Foo::S* x) → void {
-    (self::Foo::S*) →* self::Foo::S* f = invalid-expression "pkg/front_end/testcases/extensions/language_issue1182.dart:11:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
+    (self::Foo::S*) →* self::Foo::S* f = invalid-expression "pkg/front_end/testcases/extensions/language_issue1182.dart:13:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
     S Function(S) f = x.test;
                         ^" in self::Test|get#test<core::num*>(x) as{TypeError} Never;
   }
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
index 36647b1..d76d693 100644
--- a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
@@ -25,7 +25,7 @@
     ;
 }
 abstract class B extends core::Object implements self::A {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::B
     return invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
  - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
@@ -42,3 +42,7 @@
                 ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
index ff08754..8f5d709 100644
--- a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
@@ -32,3 +32,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///abstract_instantiation.dart:7:16 -> ConstructorTearOffConstant(B.)
+Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
index 36647b1..d76d693 100644
--- a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
     ;
 }
 abstract class B extends core::Object implements self::A {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::B
     return invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
  - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
@@ -42,3 +42,7 @@
                 ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect
index e7b3e08..35d93a3 100644
--- a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect
@@ -651,11 +651,11 @@
   #C24 = static-tearoff self3::id
   #C25 = constructor-tearoff self3::Class::•
   #C26 = <self3::Class<invalid-type>*>[]
-  #C27 = instantiation self3::Class::• <core::int*>
+  #C27 = instantiation #C25 <core::int*>
   #C28 = TypeLiteralConstant(self3::Class<invalid-type>*)
-  #C29 = instantiation self3::id <invalid-type>
-  #C30 = instantiation self3::Class::• <invalid-type>
-  #C31 = instantiation self3::id <self3::Class<invalid-type>*>
+  #C29 = instantiation #C24 <invalid-type>
+  #C30 = instantiation #C25 <invalid-type>
+  #C31 = instantiation #C24 <self3::Class<invalid-type>*>
   #C32 = <core::Type*>[#C28]
   #C33 = <(invalid-type) →* invalid-type>[#C29]
   #C34 = <self3::Class<invalid-type>*>[#C8]
diff --git a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect
index e7b3e08..35d93a3 100644
--- a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect
@@ -651,11 +651,11 @@
   #C24 = static-tearoff self3::id
   #C25 = constructor-tearoff self3::Class::•
   #C26 = <self3::Class<invalid-type>*>[]
-  #C27 = instantiation self3::Class::• <core::int*>
+  #C27 = instantiation #C25 <core::int*>
   #C28 = TypeLiteralConstant(self3::Class<invalid-type>*)
-  #C29 = instantiation self3::id <invalid-type>
-  #C30 = instantiation self3::Class::• <invalid-type>
-  #C31 = instantiation self3::id <self3::Class<invalid-type>*>
+  #C29 = instantiation #C24 <invalid-type>
+  #C30 = instantiation #C25 <invalid-type>
+  #C31 = instantiation #C24 <self3::Class<invalid-type>*>
   #C32 = <core::Type*>[#C28]
   #C33 = <(invalid-type) →* invalid-type>[#C29]
   #C34 = <self3::Class<invalid-type>*>[#C8]
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.expect
index 62853b9..9fa5cbe 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.expect
@@ -630,7 +630,7 @@
   #C19 = self::ClassWithTypeArguments<core::int*, core::int*, core::int*> {}
   #C20 = self::ClassWithTypeArguments<dynamic, dynamic, dynamic> {}
   #C21 = static-tearoff self::id1
-  #C22 = instantiation self::id1 <core::int*>
+  #C22 = instantiation #C21 <core::int*>
 }
 
 
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
index 9d9530c..37e4135 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
@@ -630,7 +630,7 @@
   #C19 = self::ClassWithTypeArguments<core::int*, core::int*, core::int*> {}
   #C20 = self::ClassWithTypeArguments<dynamic, dynamic, dynamic> {}
   #C21 = static-tearoff self::id1
-  #C22 = instantiation self::id1 <core::int*>
+  #C22 = instantiation #C21 <core::int*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.expect
index 942009a..d4686ed 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.expect
@@ -104,7 +104,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object*)
   #C2 = static-tearoff var::id1
-  #C3 = instantiation var::id1 <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = var::Class<core::int*> {field:#C4}
   #C6 = 42
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect
index 6a48cb7..43ae6e3 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect
@@ -104,7 +104,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object*)
   #C2 = static-tearoff var::id1
-  #C3 = instantiation var::id1 <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = var::Class<core::int*> {field:#C4}
   #C6 = 42
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart b/pkg/front_end/testcases/general/enum_names_from_core.dart
new file mode 100644
index 0000000..9500f1c
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2021, 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.
+
+class int {}
+
+class Object {}
+
+class String {}
+
+class _Enum {}
+
+class List {}
+
+enum E {
+  int,
+  Object,
+  String,
+  _Enum,
+  List,
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect
new file mode 100644
index 0000000..ba503dc
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+class int {}
+
+class Object {}
+
+class String {}
+
+class _Enum {}
+
+class List {}
+
+enum E {
+  int,
+  Object,
+  String,
+  _Enum,
+  List,
+}
+main() {}
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..361bcb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+class List {}
+
+class Object {}
+
+class String {}
+
+class _Enum {}
+
+class int {}
+
+enum E {
+  int,
+  Object,
+  String,
+  _Enum,
+  List,
+}
+main() {}
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
new file mode 100644
index 0000000..f367499
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class int extends core::Object {
+  synthetic constructor •() → self::int
+    : super core::Object::•()
+    ;
+}
+class Object extends core::Object {
+  synthetic constructor •() → self::Object
+    : super core::Object::•()
+    ;
+}
+class String extends core::Object {
+  synthetic constructor •() → self::String
+    : super core::Object::•()
+    ;
+}
+class _Enum extends core::Object {
+  synthetic constructor •() → self::_Enum
+    : super core::Object::•()
+    ;
+}
+class List extends core::Object {
+  synthetic constructor •() → self::List
+    : super core::Object::•()
+    ;
+}
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C16;
+  static const field self::E int = #C3;
+  static const field self::E Object = #C6;
+  static const field self::E String = #C9;
+  static const field self::E _Enum = #C12;
+  static const field self::E List = #C15;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "int"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "Object"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "String"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = 3
+  #C11 = "_Enum"
+  #C12 = self::E {index:#C10, _name:#C11}
+  #C13 = 4
+  #C14 = "List"
+  #C15 = self::E {index:#C13, _name:#C14}
+  #C16 = <self::E*>[#C3, #C6, #C9, #C12, #C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_names_from_core.dart:
+- E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.outline.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.outline.expect
new file mode 100644
index 0000000..7b3853c
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.outline.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class int extends core::Object {
+  synthetic constructor •() → self::int
+    ;
+}
+class Object extends core::Object {
+  synthetic constructor •() → self::Object
+    ;
+}
+class String extends core::Object {
+  synthetic constructor •() → self::String
+    ;
+}
+class _Enum extends core::Object {
+  synthetic constructor •() → self::_Enum
+    ;
+}
+class List extends core::Object {
+  synthetic constructor •() → self::List
+    ;
+}
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = const <self::E>[self::E::int, self::E::Object, self::E::String, self::E::_Enum, self::E::List];
+  static const field self::E int = const self::E::•(0, "int");
+  static const field self::E Object = const self::E::•(1, "Object");
+  static const field self::E String = const self::E::•(2, "String");
+  static const field self::E _Enum = const self::E::•(3, "_Enum");
+  static const field self::E List = const self::E::•(4, "List");
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_names_from_core.dart:15:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "int"}, const E{_Enum.index: 1, _Enum._name: "Object"}, const E{_Enum.index: 2, _Enum._name: "String"}, const E{_Enum.index: 3, _Enum._name: "_Enum"}, const E{_Enum.index: 4, _Enum._name: "List"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_names_from_core.dart:16:3 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "int"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_names_from_core.dart:17:3 -> InstanceConstant(const E{_Enum.index: 1, _Enum._name: "Object"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_names_from_core.dart:18:3 -> InstanceConstant(const E{_Enum.index: 2, _Enum._name: "String"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_names_from_core.dart:19:3 -> InstanceConstant(const E{_Enum.index: 3, _Enum._name: "_Enum"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_names_from_core.dart:20:3 -> InstanceConstant(const E{_Enum.index: 4, _Enum._name: "List"})
+Extra constant evaluation: evaluated: 11, effectively constant: 6
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
new file mode 100644
index 0000000..f367499
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class int extends core::Object {
+  synthetic constructor •() → self::int
+    : super core::Object::•()
+    ;
+}
+class Object extends core::Object {
+  synthetic constructor •() → self::Object
+    : super core::Object::•()
+    ;
+}
+class String extends core::Object {
+  synthetic constructor •() → self::String
+    : super core::Object::•()
+    ;
+}
+class _Enum extends core::Object {
+  synthetic constructor •() → self::_Enum
+    : super core::Object::•()
+    ;
+}
+class List extends core::Object {
+  synthetic constructor •() → self::List
+    : super core::Object::•()
+    ;
+}
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C16;
+  static const field self::E int = #C3;
+  static const field self::E Object = #C6;
+  static const field self::E String = #C9;
+  static const field self::E _Enum = #C12;
+  static const field self::E List = #C15;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "int"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "Object"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "String"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = 3
+  #C11 = "_Enum"
+  #C12 = self::E {index:#C10, _name:#C11}
+  #C13 = 4
+  #C14 = "List"
+  #C15 = self::E {index:#C13, _name:#C14}
+  #C16 = <self::E*>[#C3, #C6, #C9, #C12, #C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_names_from_core.dart:
+- E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
index d0e5d30..0cdd47c 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
@@ -26,23 +26,24 @@
 @#C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
-  static final field dynamic _redirecting# = <dynamic>[test::Class::redirect]/*isLegacy*/;
-  const constructor _internal({core::bool defaultValue = #C2}) → test::Class
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor _internal({core::bool defaultValue = #C3}) → test::Class
     : test::Class::defaultValue = defaultValue, super core::Object::•()
     ;
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C4}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
   #C1 = _in::_Patch {}
-  #C2 = false
-  #C3 = true
+  #C2 = constructor-tearoff test::Class::redirect
+  #C3 = false
+  #C4 = true
 }
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
index 8534e61..639b7a5 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
@@ -35,4 +35,5 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:27 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:22:17 -> InstanceConstant(const _Patch{})
-Extra constant evaluation: evaluated: 9, effectively constant: 4
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///origin_lib.dart:5:7 -> ConstructorTearOffConstant(Class.redirect)
+Extra constant evaluation: evaluated: 9, effectively constant: 5
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
index d0e5d30..0cdd47c 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
@@ -26,23 +26,24 @@
 @#C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
-  static final field dynamic _redirecting# = <dynamic>[test::Class::redirect]/*isLegacy*/;
-  const constructor _internal({core::bool defaultValue = #C2}) → test::Class
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor _internal({core::bool defaultValue = #C3}) → test::Class
     : test::Class::defaultValue = defaultValue, super core::Object::•()
     ;
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C4}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
   #C1 = _in::_Patch {}
-  #C2 = false
-  #C3 = true
+  #C2 = constructor-tearoff test::Class::redirect
+  #C3 = false
+  #C4 = true
 }
diff --git a/pkg/front_end/testcases/general/forwarding_semi_stub.dart b/pkg/front_end/testcases/general/forwarding_semi_stub.dart
new file mode 100644
index 0000000..9eb6cea
--- /dev/null
+++ b/pkg/front_end/testcases/general/forwarding_semi_stub.dart
@@ -0,0 +1,70 @@
+// Copyright (c) 2021, 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.
+
+class Super<T> {
+  void method1(int a) {}
+  void method2({int? a}) {}
+  void method3(int a) {}
+  void method4(num a) {}
+  void method5({int? a}) {}
+  void method6({num? a}) {}
+  void method7(List<T> a) {}
+  void method8({List<T>? a}) {}
+  void method9(List<T> a) {}
+  void method10(Iterable<T> a) {}
+  void method11({List<T>? a}) {}
+  void method12({Iterable<T>? a}) {}
+
+  void set setter1(int a) {}
+  void set setter2(num a) {}
+  void set setter3(List<T> a) {}
+  void set setter4(Iterable<T> a) {}
+}
+
+class Interface<T> {
+  void method1(covariant num a) {}
+  void method2({covariant num? a}) {}
+  void method7(covariant Iterable<T> a) {}
+  void method8({covariant Iterable<T>? a}) {}
+
+  void set setter1(covariant num a) {}
+  void set setter3(covariant Iterable<T> a) {}
+}
+
+abstract class Class<T> extends Super<T> implements Interface<T> {
+  void method3(covariant num a);
+  void method4(covariant int a);
+  void method5({covariant num? a});
+  void method6({covariant int? a});
+
+  void method9(covariant Iterable<T> a);
+  void method10(covariant List<T> a);
+  void method11({covariant Iterable<T>? a});
+  void method12({covariant List<T>? a});
+
+  void set setter2(covariant int a);
+  void set setter4(covariant List<T> a);
+}
+
+class Subclass<T> extends Class<T> {
+  void method1(num a) {}
+  void method2({num? a}) {}
+  void method3(num a) {}
+  void method4(num a) {}
+  void method5({num? a}) {}
+  void method6({num? a}) {}
+  void method7(Iterable<T> a) {}
+  void method8({Iterable<T>? a}) {}
+  void method9(Iterable<T> a) {}
+  void method10(Iterable<T> a) {}
+  void method11({Iterable<T>? a}) {}
+  void method12({Iterable<T>? a}) {}
+
+  void set setter1(num a) {}
+  void set setter2(num a) {}
+  void set setter3(Iterable<T> a) {}
+  void set setter4(Iterable<T> a) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.textual_outline.expect b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.textual_outline.expect
new file mode 100644
index 0000000..4734da5
--- /dev/null
+++ b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.textual_outline.expect
@@ -0,0 +1,61 @@
+class Super<T> {
+  void method1(int a) {}
+  void method2({int? a}) {}
+  void method3(int a) {}
+  void method4(num a) {}
+  void method5({int? a}) {}
+  void method6({num? a}) {}
+  void method7(List<T> a) {}
+  void method8({List<T>? a}) {}
+  void method9(List<T> a) {}
+  void method10(Iterable<T> a) {}
+  void method11({List<T>? a}) {}
+  void method12({Iterable<T>? a}) {}
+  void set setter1(int a) {}
+  void set setter2(num a) {}
+  void set setter3(List<T> a) {}
+  void set setter4(Iterable<T> a) {}
+}
+
+class Interface<T> {
+  void method1(covariant num a) {}
+  void method2({covariant num? a}) {}
+  void method7(covariant Iterable<T> a) {}
+  void method8({covariant Iterable<T>? a}) {}
+  void set setter1(covariant num a) {}
+  void set setter3(covariant Iterable<T> a) {}
+}
+
+abstract class Class<T> extends Super<T> implements Interface<T> {
+  void method3(covariant num a);
+  void method4(covariant int a);
+  void method5({covariant num? a});
+  void method6({covariant int? a});
+  void method9(covariant Iterable<T> a);
+  void method10(covariant List<T> a);
+  void method11({covariant Iterable<T>? a});
+  void method12({covariant List<T>? a});
+  void set setter2(covariant int a);
+  void set setter4(covariant List<T> a);
+}
+
+class Subclass<T> extends Class<T> {
+  void method1(num a) {}
+  void method2({num? a}) {}
+  void method3(num a) {}
+  void method4(num a) {}
+  void method5({num? a}) {}
+  void method6({num? a}) {}
+  void method7(Iterable<T> a) {}
+  void method8({Iterable<T>? a}) {}
+  void method9(Iterable<T> a) {}
+  void method10(Iterable<T> a) {}
+  void method11({Iterable<T>? a}) {}
+  void method12({Iterable<T>? a}) {}
+  void set setter1(num a) {}
+  void set setter2(num a) {}
+  void set setter3(Iterable<T> a) {}
+  void set setter4(Iterable<T> a) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b5e8274c
--- /dev/null
+++ b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.textual_outline_modelled.expect
@@ -0,0 +1,61 @@
+abstract class Class<T> extends Super<T> implements Interface<T> {
+  void method10(covariant List<T> a);
+  void method11({covariant Iterable<T>? a});
+  void method12({covariant List<T>? a});
+  void method3(covariant num a);
+  void method4(covariant int a);
+  void method5({covariant num? a});
+  void method6({covariant int? a});
+  void method9(covariant Iterable<T> a);
+  void set setter2(covariant int a);
+  void set setter4(covariant List<T> a);
+}
+
+class Interface<T> {
+  void method1(covariant num a) {}
+  void method2({covariant num? a}) {}
+  void method7(covariant Iterable<T> a) {}
+  void method8({covariant Iterable<T>? a}) {}
+  void set setter1(covariant num a) {}
+  void set setter3(covariant Iterable<T> a) {}
+}
+
+class Subclass<T> extends Class<T> {
+  void method1(num a) {}
+  void method10(Iterable<T> a) {}
+  void method11({Iterable<T>? a}) {}
+  void method12({Iterable<T>? a}) {}
+  void method2({num? a}) {}
+  void method3(num a) {}
+  void method4(num a) {}
+  void method5({num? a}) {}
+  void method6({num? a}) {}
+  void method7(Iterable<T> a) {}
+  void method8({Iterable<T>? a}) {}
+  void method9(Iterable<T> a) {}
+  void set setter1(num a) {}
+  void set setter2(num a) {}
+  void set setter3(Iterable<T> a) {}
+  void set setter4(Iterable<T> a) {}
+}
+
+class Super<T> {
+  void method1(int a) {}
+  void method10(Iterable<T> a) {}
+  void method11({List<T>? a}) {}
+  void method12({Iterable<T>? a}) {}
+  void method2({int? a}) {}
+  void method3(int a) {}
+  void method4(num a) {}
+  void method5({int? a}) {}
+  void method6({num? a}) {}
+  void method7(List<T> a) {}
+  void method8({List<T>? a}) {}
+  void method9(List<T> a) {}
+  void set setter1(int a) {}
+  void set setter2(num a) {}
+  void set setter3(List<T> a) {}
+  void set setter4(Iterable<T> a) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.expect b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.expect
new file mode 100644
index 0000000..f1523c5
--- /dev/null
+++ b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    : super core::Object::•()
+    ;
+  method method1(core::int a) → void {}
+  method method2({core::int? a = #C1}) → void {}
+  method method3(core::int a) → void {}
+  method method4(core::num a) → void {}
+  method method5({core::int? a = #C1}) → void {}
+  method method6({core::num? a = #C1}) → void {}
+  method method7(covariant-by-class core::List<self::Super::T%> a) → void {}
+  method method8({covariant-by-class core::List<self::Super::T%>? a = #C1}) → void {}
+  method method9(covariant-by-class core::List<self::Super::T%> a) → void {}
+  method method10(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+  method method11({covariant-by-class core::List<self::Super::T%>? a = #C1}) → void {}
+  method method12({covariant-by-class core::Iterable<self::Super::T%>? a = #C1}) → void {}
+  set setter1(core::int a) → void {}
+  set setter2(core::num a) → void {}
+  set setter3(covariant-by-class core::List<self::Super::T%> a) → void {}
+  set setter4(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+}
+class Interface<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface<self::Interface::T%>
+    : super core::Object::•()
+    ;
+  method method1(covariant-by-declaration core::num a) → void {}
+  method method2({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void {}
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%>? a = #C1}) → void {}
+  set setter1(covariant-by-declaration core::num a) → void {}
+  set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void {}
+}
+abstract class Class<T extends core::Object? = dynamic> extends self::Super<self::Class::T%> implements self::Interface<self::Class::T%> {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::num) → void */ method3(covariant-by-declaration core::int a) → void
+    return super.{self::Super::method3}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method4(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method4}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::num?}) → void */ method5({covariant-by-declaration core::int? a = #C1}) → void
+    return super.{self::Super::method5}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::int?}) → void */ method6({covariant-by-declaration core::num? a = #C1}) → void
+    return super.{self::Super::method6}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::Iterable<self::Class::T%>) → void */ method9(covariant-by-declaration covariant-by-class core::List<self::Class::T%> a) → void
+    return super.{self::Super::method9}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>) → void */ method10(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method10}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::Iterable<self::Class::T%>?}) → void */ method11({covariant-by-declaration covariant-by-class core::List<self::Class::T%>? a = #C1}) → void
+    return super.{self::Super::method11}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::List<self::Class::T%>?}) → void */ method12({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a = #C1}) → void
+    return super.{self::Super::method12}(a: a);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter2(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter2} = a;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::List<self::Class::T%>) → void */ setter4(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter4} = a;
+  forwarding-stub method method1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method1}(a as core::int);
+  forwarding-stub method method2({covariant-by-declaration core::num? a = #C1}) → void
+    return super.{self::Super::method2}(a: a as core::int?);
+  forwarding-stub method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method7}(a as core::List<self::Class::T%>);
+  forwarding-stub method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a = #C1}) → void
+    return super.{self::Super::method8}(a: a as core::List<self::Class::T%>?);
+  forwarding-stub set setter1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter1} = a as core::int;
+  forwarding-stub set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter3} = a as core::List<self::Class::T%>;
+}
+class Subclass<T extends core::Object? = dynamic> extends self::Class<self::Subclass::T%> {
+  synthetic constructor •() → self::Subclass<self::Subclass::T%>
+    : super self::Class::•()
+    ;
+  method method1(covariant-by-declaration core::num a) → void {}
+  method method2({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method3(covariant-by-declaration core::num a) → void {}
+  method method4(covariant-by-declaration core::num a) → void {}
+  method method5({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method6({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = #C1}) → void {}
+  method method9(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  method method10(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  method method11({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = #C1}) → void {}
+  method method12({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = #C1}) → void {}
+  set setter1(covariant-by-declaration core::num a) → void {}
+  set setter2(covariant-by-declaration core::num a) → void {}
+  set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  set setter4(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect
new file mode 100644
index 0000000..413db05
--- /dev/null
+++ b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect
@@ -0,0 +1,130 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    ;
+  method method1(core::int a) → void
+    ;
+  method method2({core::int? a}) → void
+    ;
+  method method3(core::int a) → void
+    ;
+  method method4(core::num a) → void
+    ;
+  method method5({core::int? a}) → void
+    ;
+  method method6({core::num? a}) → void
+    ;
+  method method7(covariant-by-class core::List<self::Super::T%> a) → void
+    ;
+  method method8({covariant-by-class core::List<self::Super::T%>? a}) → void
+    ;
+  method method9(covariant-by-class core::List<self::Super::T%> a) → void
+    ;
+  method method10(covariant-by-class core::Iterable<self::Super::T%> a) → void
+    ;
+  method method11({covariant-by-class core::List<self::Super::T%>? a}) → void
+    ;
+  method method12({covariant-by-class core::Iterable<self::Super::T%>? a}) → void
+    ;
+  set setter1(core::int a) → void
+    ;
+  set setter2(core::num a) → void
+    ;
+  set setter3(covariant-by-class core::List<self::Super::T%> a) → void
+    ;
+  set setter4(covariant-by-class core::Iterable<self::Super::T%> a) → void
+    ;
+}
+class Interface<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface<self::Interface::T%>
+    ;
+  method method1(covariant-by-declaration core::num a) → void
+    ;
+  method method2({covariant-by-declaration core::num? a}) → void
+    ;
+  method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void
+    ;
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%>? a}) → void
+    ;
+  set setter1(covariant-by-declaration core::num a) → void
+    ;
+  set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void
+    ;
+}
+abstract class Class<T extends core::Object? = dynamic> extends self::Super<self::Class::T%> implements self::Interface<self::Class::T%> {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::num) → void */ method3(covariant-by-declaration core::int a) → void
+    return super.{self::Super::method3}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method4(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method4}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::num?}) → void */ method5({covariant-by-declaration core::int? a}) → void
+    return super.{self::Super::method5}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::int?}) → void */ method6({covariant-by-declaration core::num? a}) → void
+    return super.{self::Super::method6}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::Iterable<self::Class::T%>) → void */ method9(covariant-by-declaration covariant-by-class core::List<self::Class::T%> a) → void
+    return super.{self::Super::method9}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>) → void */ method10(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method10}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::Iterable<self::Class::T%>?}) → void */ method11({covariant-by-declaration covariant-by-class core::List<self::Class::T%>? a}) → void
+    return super.{self::Super::method11}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::List<self::Class::T%>?}) → void */ method12({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a}) → void
+    return super.{self::Super::method12}(a: a);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter2(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter2} = a;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::List<self::Class::T%>) → void */ setter4(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter4} = a;
+  forwarding-stub method method1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method1}(a as core::int);
+  forwarding-stub method method2({covariant-by-declaration core::num? a}) → void
+    return super.{self::Super::method2}(a: a as core::int?);
+  forwarding-stub method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method7}(a as core::List<self::Class::T%>);
+  forwarding-stub method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a}) → void
+    return super.{self::Super::method8}(a: a as core::List<self::Class::T%>?);
+  forwarding-stub set setter1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter1} = a as core::int;
+  forwarding-stub set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter3} = a as core::List<self::Class::T%>;
+}
+class Subclass<T extends core::Object? = dynamic> extends self::Class<self::Subclass::T%> {
+  synthetic constructor •() → self::Subclass<self::Subclass::T%>
+    ;
+  method method1(covariant-by-declaration core::num a) → void
+    ;
+  method method2({covariant-by-declaration core::num? a}) → void
+    ;
+  method method3(covariant-by-declaration core::num a) → void
+    ;
+  method method4(covariant-by-declaration core::num a) → void
+    ;
+  method method5({covariant-by-declaration core::num? a}) → void
+    ;
+  method method6({covariant-by-declaration core::num? a}) → void
+    ;
+  method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
+    ;
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a}) → void
+    ;
+  method method9(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
+    ;
+  method method10(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
+    ;
+  method method11({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a}) → void
+    ;
+  method method12({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a}) → void
+    ;
+  set setter1(covariant-by-declaration core::num a) → void
+    ;
+  set setter2(covariant-by-declaration core::num a) → void
+    ;
+  set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
+    ;
+  set setter4(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.transformed.expect b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.transformed.expect
new file mode 100644
index 0000000..f1523c5
--- /dev/null
+++ b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.transformed.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    : super core::Object::•()
+    ;
+  method method1(core::int a) → void {}
+  method method2({core::int? a = #C1}) → void {}
+  method method3(core::int a) → void {}
+  method method4(core::num a) → void {}
+  method method5({core::int? a = #C1}) → void {}
+  method method6({core::num? a = #C1}) → void {}
+  method method7(covariant-by-class core::List<self::Super::T%> a) → void {}
+  method method8({covariant-by-class core::List<self::Super::T%>? a = #C1}) → void {}
+  method method9(covariant-by-class core::List<self::Super::T%> a) → void {}
+  method method10(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+  method method11({covariant-by-class core::List<self::Super::T%>? a = #C1}) → void {}
+  method method12({covariant-by-class core::Iterable<self::Super::T%>? a = #C1}) → void {}
+  set setter1(core::int a) → void {}
+  set setter2(core::num a) → void {}
+  set setter3(covariant-by-class core::List<self::Super::T%> a) → void {}
+  set setter4(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+}
+class Interface<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface<self::Interface::T%>
+    : super core::Object::•()
+    ;
+  method method1(covariant-by-declaration core::num a) → void {}
+  method method2({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void {}
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%>? a = #C1}) → void {}
+  set setter1(covariant-by-declaration core::num a) → void {}
+  set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void {}
+}
+abstract class Class<T extends core::Object? = dynamic> extends self::Super<self::Class::T%> implements self::Interface<self::Class::T%> {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::num) → void */ method3(covariant-by-declaration core::int a) → void
+    return super.{self::Super::method3}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method4(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method4}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::num?}) → void */ method5({covariant-by-declaration core::int? a = #C1}) → void
+    return super.{self::Super::method5}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::int?}) → void */ method6({covariant-by-declaration core::num? a = #C1}) → void
+    return super.{self::Super::method6}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::Iterable<self::Class::T%>) → void */ method9(covariant-by-declaration covariant-by-class core::List<self::Class::T%> a) → void
+    return super.{self::Super::method9}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>) → void */ method10(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method10}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::Iterable<self::Class::T%>?}) → void */ method11({covariant-by-declaration covariant-by-class core::List<self::Class::T%>? a = #C1}) → void
+    return super.{self::Super::method11}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::List<self::Class::T%>?}) → void */ method12({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a = #C1}) → void
+    return super.{self::Super::method12}(a: a);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter2(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter2} = a;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::List<self::Class::T%>) → void */ setter4(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter4} = a;
+  forwarding-stub method method1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method1}(a as core::int);
+  forwarding-stub method method2({covariant-by-declaration core::num? a = #C1}) → void
+    return super.{self::Super::method2}(a: a as core::int?);
+  forwarding-stub method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method7}(a as core::List<self::Class::T%>);
+  forwarding-stub method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a = #C1}) → void
+    return super.{self::Super::method8}(a: a as core::List<self::Class::T%>?);
+  forwarding-stub set setter1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter1} = a as core::int;
+  forwarding-stub set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter3} = a as core::List<self::Class::T%>;
+}
+class Subclass<T extends core::Object? = dynamic> extends self::Class<self::Subclass::T%> {
+  synthetic constructor •() → self::Subclass<self::Subclass::T%>
+    : super self::Class::•()
+    ;
+  method method1(covariant-by-declaration core::num a) → void {}
+  method method2({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method3(covariant-by-declaration core::num a) → void {}
+  method method4(covariant-by-declaration core::num a) → void {}
+  method method5({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method6({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = #C1}) → void {}
+  method method9(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  method method10(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  method method11({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = #C1}) → void {}
+  method method12({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = #C1}) → void {}
+  set setter1(covariant-by-declaration core::num a) → void {}
+  set setter2(covariant-by-declaration core::num a) → void {}
+  set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  set setter4(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart
index 3f83073..c3dcc28 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 //------------------------------------------------------------------------------
 
 class A {
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect
index 04d5bc5..6b4bf1c 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect
@@ -73,7 +73,7 @@
   synthetic constructor •() → self::E*
     : super self::D::•()
     ;
-  forwarding-stub forwarding-semi-stub operator +(covariant-by-declaration core::int* e) → dynamic
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int*) →* dynamic */ +(covariant-by-declaration dynamic e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect
index b2f74cc..15ab476 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect
@@ -68,7 +68,7 @@
 class E extends self::D {
   synthetic constructor •() → self::E*
     ;
-  forwarding-stub forwarding-semi-stub operator +(covariant-by-declaration core::int* e) → dynamic
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int*) →* dynamic */ +(covariant-by-declaration dynamic e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect
index 04d5bc5..6b4bf1c 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect
@@ -73,7 +73,7 @@
   synthetic constructor •() → self::E*
     : super self::D::•()
     ;
-  forwarding-stub forwarding-semi-stub operator +(covariant-by-declaration core::int* e) → dynamic
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int*) →* dynamic */ +(covariant-by-declaration dynamic e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect
index 1f6296f..d1b803d 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect
@@ -23,5 +23,5 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
index 6aa6e81..c29de20 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/general/implement_semi_stub.dart b/pkg/front_end/testcases/general/implement_semi_stub.dart
new file mode 100644
index 0000000..9ce9099
--- /dev/null
+++ b/pkg/front_end/testcases/general/implement_semi_stub.dart
@@ -0,0 +1,85 @@
+// Copyright (c) 2021, 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.
+
+class Super<T> {
+  void method1(num a) {}
+  void method2(int b) {}
+  void method3(num a, int b) {}
+  void method4({required num a}) {}
+  void method5({required int b}) {}
+  //void method6({required num a, required int b}) {}
+  void method7(Iterable<T> a) {}
+  void method8(List<T> b) {}
+  void method9(Iterable<T> a, List<T> b) {}
+  void method10({required Iterable<T> a}) {}
+  void method11({required List<T> b}) {}
+  //void method12({required Iterable<T> a, required List<T> b}) {}
+
+  void set setter1(num a) {}
+  //void set setter2(int a) {}
+  void set setter3(Iterable<T> a) {}
+  //void set setter4(List<T> a) {}
+}
+
+abstract class Interface<T> {
+  void method2(covariant num b) {}
+  void method3(num a, covariant num b) {}
+  void method5({required int b}) {}
+  //void method6({required num a, required covariant num b}) {}
+  void method8(covariant Iterable<T> b) {}
+  void method9(Iterable<T> a, covariant Iterable<T> b) {}
+  void method11({required List<T> b}) {}
+  //void method12({required Iterable<T> a, required covariant Iterable<T> b}) {}
+  //void set setter2(covariant num a) {}
+  //void set setter4(covariant Iterable<T> a) {}
+}
+
+class Class<T> extends Super<T> implements Interface<T> {
+  void method1(covariant int a);
+  void method2(num b);
+  void method3(covariant int a, num b);
+  void method7(covariant List<T> a);
+  void method8(Iterable<T> b);
+  void method9(covariant List<T> a, Iterable<T> b);
+  void set setter1(covariant int a);
+  //void set setter2(num a);
+  void set setter3(covariant List<T> a);
+  //void set setter4(Iterable<T> a);
+}
+
+class Class1<T> implements Class<T> {
+  void method1(double a) {} // error
+  void method2(double b) {} // error
+  void method3(double a, double b) {} // error
+  void method4({required double a}) {} // error
+  void method5({required double b}) {} // error
+  //void method6({required double a, required double b}) {} // error
+  void method7(Set<T> a) {} // error
+  void method8(Set<T> b) {} // error
+  void method9(Set<T> a, Set<T> b) {} // error
+  void method10({required Set<T> a}) {} // error
+  void method11({required Set<T> b}) {} // error
+  //void method12({required Set<T> a, required Set<T> b}) {} // error
+  void set setter1(double a) {} // error
+  //void set setter2(double a) {} // error
+  void set setter3(Set<T> a) {} // error
+  //void set setter4(Set<T> a) {} // error
+}
+
+abstract class Interface2<T> {
+  void method1(int a);
+  void method2(int b);
+  void method3(int a, int b);
+  void method7(List<T> a);
+  void method8(List<T> b);
+  void method9(List<T> a, List<T> b);
+  void set setter1(int a);
+  //void set setter2(int a);
+  void set setter3(List<T> a);
+  //void set setter4(List<T> a);
+}
+
+abstract class Class2<T> implements Class<T>, Interface2<T> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/implement_semi_stub.dart.textual_outline.expect b/pkg/front_end/testcases/general/implement_semi_stub.dart.textual_outline.expect
new file mode 100644
index 0000000..526b06a
--- /dev/null
+++ b/pkg/front_end/testcases/general/implement_semi_stub.dart.textual_outline.expect
@@ -0,0 +1,64 @@
+class Super<T> {
+  void method1(num a) {}
+  void method2(int b) {}
+  void method3(num a, int b) {}
+  void method4({required num a}) {}
+  void method5({required int b}) {}
+  void method7(Iterable<T> a) {}
+  void method8(List<T> b) {}
+  void method9(Iterable<T> a, List<T> b) {}
+  void method10({required Iterable<T> a}) {}
+  void method11({required List<T> b}) {}
+  void set setter1(num a) {}
+  void set setter3(Iterable<T> a) {}
+}
+
+abstract class Interface<T> {
+  void method2(covariant num b) {}
+  void method3(num a, covariant num b) {}
+  void method5({required int b}) {}
+  void method8(covariant Iterable<T> b) {}
+  void method9(Iterable<T> a, covariant Iterable<T> b) {}
+  void method11({required List<T> b}) {}
+}
+
+class Class<T> extends Super<T> implements Interface<T> {
+  void method1(covariant int a);
+  void method2(num b);
+  void method3(covariant int a, num b);
+  void method7(covariant List<T> a);
+  void method8(Iterable<T> b);
+  void method9(covariant List<T> a, Iterable<T> b);
+  void set setter1(covariant int a);
+  void set setter3(covariant List<T> a);
+}
+
+class Class1<T> implements Class<T> {
+  void method1(double a) {}
+  void method2(double b) {}
+  void method3(double a, double b) {}
+  void method4({required double a}) {}
+  void method5({required double b}) {}
+  void method7(Set<T> a) {}
+  void method8(Set<T> b) {}
+  void method9(Set<T> a, Set<T> b) {}
+  void method10({required Set<T> a}) {}
+  void method11({required Set<T> b}) {}
+  void set setter1(double a) {}
+  void set setter3(Set<T> a) {}
+}
+
+abstract class Interface2<T> {
+  void method1(int a);
+  void method2(int b);
+  void method3(int a, int b);
+  void method7(List<T> a);
+  void method8(List<T> b);
+  void method9(List<T> a, List<T> b);
+  void set setter1(int a);
+  void set setter3(List<T> a);
+}
+
+abstract class Class2<T> implements Class<T>, Interface2<T> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/implement_semi_stub.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implement_semi_stub.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c019748
--- /dev/null
+++ b/pkg/front_end/testcases/general/implement_semi_stub.dart.textual_outline_modelled.expect
@@ -0,0 +1,64 @@
+abstract class Class2<T> implements Class<T>, Interface2<T> {}
+
+abstract class Interface<T> {
+  void method11({required List<T> b}) {}
+  void method2(covariant num b) {}
+  void method3(num a, covariant num b) {}
+  void method5({required int b}) {}
+  void method8(covariant Iterable<T> b) {}
+  void method9(Iterable<T> a, covariant Iterable<T> b) {}
+}
+
+abstract class Interface2<T> {
+  void method1(int a);
+  void method2(int b);
+  void method3(int a, int b);
+  void method7(List<T> a);
+  void method8(List<T> b);
+  void method9(List<T> a, List<T> b);
+  void set setter1(int a);
+  void set setter3(List<T> a);
+}
+
+class Class<T> extends Super<T> implements Interface<T> {
+  void method1(covariant int a);
+  void method2(num b);
+  void method3(covariant int a, num b);
+  void method7(covariant List<T> a);
+  void method8(Iterable<T> b);
+  void method9(covariant List<T> a, Iterable<T> b);
+  void set setter1(covariant int a);
+  void set setter3(covariant List<T> a);
+}
+
+class Class1<T> implements Class<T> {
+  void method1(double a) {}
+  void method10({required Set<T> a}) {}
+  void method11({required Set<T> b}) {}
+  void method2(double b) {}
+  void method3(double a, double b) {}
+  void method4({required double a}) {}
+  void method5({required double b}) {}
+  void method7(Set<T> a) {}
+  void method8(Set<T> b) {}
+  void method9(Set<T> a, Set<T> b) {}
+  void set setter1(double a) {}
+  void set setter3(Set<T> a) {}
+}
+
+class Super<T> {
+  void method1(num a) {}
+  void method10({required Iterable<T> a}) {}
+  void method11({required List<T> b}) {}
+  void method2(int b) {}
+  void method3(num a, int b) {}
+  void method4({required num a}) {}
+  void method5({required int b}) {}
+  void method7(Iterable<T> a) {}
+  void method8(List<T> b) {}
+  void method9(Iterable<T> a, List<T> b) {}
+  void set setter1(num a) {}
+  void set setter3(Iterable<T> a) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.expect b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.expect
new file mode 100644
index 0000000..e8b7608
--- /dev/null
+++ b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.expect
@@ -0,0 +1,222 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:52:23: Error: The parameter 'a' of the method 'Class1.method1' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Class.method1'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method1(double a) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:39:8: Context: This is the overridden method ('method1').
+//   void method1(covariant int a);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:53:23: Error: The parameter 'b' of the method 'Class1.method2' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Super.method2'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method2(double b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:7:8: Context: This is the overridden method ('method2').
+//   void method2(int b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:54:23: Error: The parameter 'a' of the method 'Class1.method3' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Class.method3'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method3(double a, double b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:41:8: Context: This is the overridden method ('method3').
+//   void method3(covariant int a, num b);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:54:33: Error: The parameter 'b' of the method 'Class1.method3' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Super.method3'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method3(double a, double b) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:8:8: Context: This is the overridden method ('method3').
+//   void method3(num a, int b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:55:33: Error: The parameter 'a' of the method 'Class1.method4' has type 'double', which does not match the corresponding type, 'num', in the overridden method, 'Super.method4'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void method4({required double a}) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:9:8: Context: This is the overridden method ('method4').
+//   void method4({required num a}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:56:33: Error: The parameter 'b' of the method 'Class1.method5' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Super.method5'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method5({required double b}) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:10:8: Context: This is the overridden method ('method5').
+//   void method5({required int b}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:58:23: Error: The parameter 'a' of the method 'Class1.method7' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Class.method7'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method7(Set<T> a) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:42:8: Context: This is the overridden method ('method7').
+//   void method7(covariant List<T> a);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:59:23: Error: The parameter 'b' of the method 'Class1.method8' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Super.method8'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method8(Set<T> b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:13:8: Context: This is the overridden method ('method8').
+//   void method8(List<T> b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:60:23: Error: The parameter 'a' of the method 'Class1.method9' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Class.method9'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method9(Set<T> a, Set<T> b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:44:8: Context: This is the overridden method ('method9').
+//   void method9(covariant List<T> a, Iterable<T> b);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:60:33: Error: The parameter 'b' of the method 'Class1.method9' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Super.method9'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method9(Set<T> a, Set<T> b) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:14:8: Context: This is the overridden method ('method9').
+//   void method9(Iterable<T> a, List<T> b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:61:34: Error: The parameter 'a' of the method 'Class1.method10' has type 'Set<T>', which does not match the corresponding type, 'Iterable<T>', in the overridden method, 'Super.method10'.
+//  - 'Set' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+// Change to a supertype of 'Iterable<T>', or, for a covariant parameter, a subtype.
+//   void method10({required Set<T> a}) {} // error
+//                                  ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:15:8: Context: This is the overridden method ('method10').
+//   void method10({required Iterable<T> a}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:62:34: Error: The parameter 'b' of the method 'Class1.method11' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Super.method11'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method11({required Set<T> b}) {} // error
+//                                  ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:16:8: Context: This is the overridden method ('method11').
+//   void method11({required List<T> b}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:64:27: Error: The parameter 'a' of the method 'Class1.setter1' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Class.setter1'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void set setter1(double a) {} // error
+//                           ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:45:12: Context: This is the overridden method ('setter1').
+//   void set setter1(covariant int a);
+//            ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:66:27: Error: The parameter 'a' of the method 'Class1.setter3' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Class.setter3'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void set setter3(Set<T> a) {} // error
+//                           ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:47:12: Context: This is the overridden method ('setter3').
+//   void set setter3(covariant List<T> a);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    : super core::Object::•()
+    ;
+  method method1(core::num a) → void {}
+  method method2(core::int b) → void {}
+  method method3(core::num a, core::int b) → void {}
+  method method4({required core::num a = #C1}) → void {}
+  method method5({required core::int b = #C1}) → void {}
+  method method7(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+  method method8(covariant-by-class core::List<self::Super::T%> b) → void {}
+  method method9(covariant-by-class core::Iterable<self::Super::T%> a, covariant-by-class core::List<self::Super::T%> b) → void {}
+  method method10({required covariant-by-class core::Iterable<self::Super::T%> a = #C1}) → void {}
+  method method11({required covariant-by-class core::List<self::Super::T%> b = #C1}) → void {}
+  set setter1(core::num a) → void {}
+  set setter3(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+}
+abstract class Interface<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface<self::Interface::T%>
+    : super core::Object::•()
+    ;
+  method method2(covariant-by-declaration core::num b) → void {}
+  method method3(core::num a, covariant-by-declaration core::num b) → void {}
+  method method5({required core::int b = #C1}) → void {}
+  method method8(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void {}
+  method method9(covariant-by-class core::Iterable<self::Interface::T%> a, covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void {}
+  method method11({required covariant-by-class core::List<self::Interface::T%> b = #C1}) → void {}
+}
+class Class<T extends core::Object? = dynamic> extends self::Super<self::Class::T%> implements self::Interface<self::Class::T%> {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method1}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::num) → void */ method2(covariant-by-declaration core::int b) → void
+    return super.{self::Super::method2}(b);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int, core::num) → void */ method3(covariant-by-declaration core::num a, covariant-by-declaration core::int b) → void
+    return super.{self::Super::method3}(a, b);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>) → void */ method7(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method7}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::Iterable<self::Class::T%>) → void */ method8(covariant-by-declaration covariant-by-class core::List<self::Class::T%> b) → void
+    return super.{self::Super::method8}(b);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>, core::Iterable<self::Class::T%>) → void */ method9(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a, covariant-by-declaration covariant-by-class core::List<self::Class::T%> b) → void
+    return super.{self::Super::method9}(a, b);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter1} = a;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::List<self::Class::T%>) → void */ setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter3} = a;
+}
+class Class1<T extends core::Object? = dynamic> extends core::Object implements self::Class<self::Class1::T%> {
+  synthetic constructor •() → self::Class1<self::Class1::T%>
+    : super core::Object::•()
+    ;
+  method method1(covariant-by-declaration core::double a) → void {}
+  method method2(covariant-by-declaration core::double b) → void {}
+  method method3(covariant-by-declaration core::double a, covariant-by-declaration core::double b) → void {}
+  method method4({required core::double a = #C1}) → void {}
+  method method5({required core::double b = #C1}) → void {}
+  method method7(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a) → void {}
+  method method8(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> b) → void {}
+  method method9(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a, covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> b) → void {}
+  method method10({required covariant-by-class core::Set<self::Class1::T%> a = #C1}) → void {}
+  method method11({required covariant-by-class core::Set<self::Class1::T%> b = #C1}) → void {}
+  set setter1(covariant-by-declaration core::double a) → void {}
+  set setter3(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a) → void {}
+}
+abstract class Interface2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface2<self::Interface2::T%>
+    : super core::Object::•()
+    ;
+  abstract method method1(core::int a) → void;
+  abstract method method2(core::int b) → void;
+  abstract method method3(core::int a, core::int b) → void;
+  abstract method method7(covariant-by-class core::List<self::Interface2::T%> a) → void;
+  abstract method method8(covariant-by-class core::List<self::Interface2::T%> b) → void;
+  abstract method method9(covariant-by-class core::List<self::Interface2::T%> a, covariant-by-class core::List<self::Interface2::T%> b) → void;
+  abstract set setter1(core::int a) → void;
+  abstract set setter3(covariant-by-class core::List<self::Interface2::T%> a) → void;
+}
+abstract class Class2<T extends core::Object? = dynamic> extends core::Object implements self::Class<self::Class2::T%>, self::Interface2<self::Class2::T%> {
+  synthetic constructor •() → self::Class2<self::Class2::T%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect
new file mode 100644
index 0000000..a5176a6
--- /dev/null
+++ b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect
@@ -0,0 +1,243 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:52:23: Error: The parameter 'a' of the method 'Class1.method1' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Class.method1'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method1(double a) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:39:8: Context: This is the overridden method ('method1').
+//   void method1(covariant int a);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:53:23: Error: The parameter 'b' of the method 'Class1.method2' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Super.method2'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method2(double b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:7:8: Context: This is the overridden method ('method2').
+//   void method2(int b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:54:23: Error: The parameter 'a' of the method 'Class1.method3' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Class.method3'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method3(double a, double b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:41:8: Context: This is the overridden method ('method3').
+//   void method3(covariant int a, num b);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:54:33: Error: The parameter 'b' of the method 'Class1.method3' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Super.method3'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method3(double a, double b) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:8:8: Context: This is the overridden method ('method3').
+//   void method3(num a, int b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:55:33: Error: The parameter 'a' of the method 'Class1.method4' has type 'double', which does not match the corresponding type, 'num', in the overridden method, 'Super.method4'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void method4({required double a}) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:9:8: Context: This is the overridden method ('method4').
+//   void method4({required num a}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:56:33: Error: The parameter 'b' of the method 'Class1.method5' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Super.method5'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method5({required double b}) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:10:8: Context: This is the overridden method ('method5').
+//   void method5({required int b}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:58:23: Error: The parameter 'a' of the method 'Class1.method7' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Class.method7'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method7(Set<T> a) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:42:8: Context: This is the overridden method ('method7').
+//   void method7(covariant List<T> a);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:59:23: Error: The parameter 'b' of the method 'Class1.method8' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Super.method8'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method8(Set<T> b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:13:8: Context: This is the overridden method ('method8').
+//   void method8(List<T> b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:60:23: Error: The parameter 'a' of the method 'Class1.method9' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Class.method9'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method9(Set<T> a, Set<T> b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:44:8: Context: This is the overridden method ('method9').
+//   void method9(covariant List<T> a, Iterable<T> b);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:60:33: Error: The parameter 'b' of the method 'Class1.method9' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Super.method9'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method9(Set<T> a, Set<T> b) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:14:8: Context: This is the overridden method ('method9').
+//   void method9(Iterable<T> a, List<T> b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:61:34: Error: The parameter 'a' of the method 'Class1.method10' has type 'Set<T>', which does not match the corresponding type, 'Iterable<T>', in the overridden method, 'Super.method10'.
+//  - 'Set' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+// Change to a supertype of 'Iterable<T>', or, for a covariant parameter, a subtype.
+//   void method10({required Set<T> a}) {} // error
+//                                  ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:15:8: Context: This is the overridden method ('method10').
+//   void method10({required Iterable<T> a}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:62:34: Error: The parameter 'b' of the method 'Class1.method11' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Super.method11'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method11({required Set<T> b}) {} // error
+//                                  ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:16:8: Context: This is the overridden method ('method11').
+//   void method11({required List<T> b}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:64:27: Error: The parameter 'a' of the method 'Class1.setter1' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Class.setter1'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void set setter1(double a) {} // error
+//                           ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:45:12: Context: This is the overridden method ('setter1').
+//   void set setter1(covariant int a);
+//            ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:66:27: Error: The parameter 'a' of the method 'Class1.setter3' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Class.setter3'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void set setter3(Set<T> a) {} // error
+//                           ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:47:12: Context: This is the overridden method ('setter3').
+//   void set setter3(covariant List<T> a);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    ;
+  method method1(core::num a) → void
+    ;
+  method method2(core::int b) → void
+    ;
+  method method3(core::num a, core::int b) → void
+    ;
+  method method4({required core::num a}) → void
+    ;
+  method method5({required core::int b}) → void
+    ;
+  method method7(covariant-by-class core::Iterable<self::Super::T%> a) → void
+    ;
+  method method8(covariant-by-class core::List<self::Super::T%> b) → void
+    ;
+  method method9(covariant-by-class core::Iterable<self::Super::T%> a, covariant-by-class core::List<self::Super::T%> b) → void
+    ;
+  method method10({required covariant-by-class core::Iterable<self::Super::T%> a}) → void
+    ;
+  method method11({required covariant-by-class core::List<self::Super::T%> b}) → void
+    ;
+  set setter1(core::num a) → void
+    ;
+  set setter3(covariant-by-class core::Iterable<self::Super::T%> a) → void
+    ;
+}
+abstract class Interface<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface<self::Interface::T%>
+    ;
+  method method2(covariant-by-declaration core::num b) → void
+    ;
+  method method3(core::num a, covariant-by-declaration core::num b) → void
+    ;
+  method method5({required core::int b}) → void
+    ;
+  method method8(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void
+    ;
+  method method9(covariant-by-class core::Iterable<self::Interface::T%> a, covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void
+    ;
+  method method11({required covariant-by-class core::List<self::Interface::T%> b}) → void
+    ;
+}
+class Class<T extends core::Object? = dynamic> extends self::Super<self::Class::T%> implements self::Interface<self::Class::T%> {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method1}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::num) → void */ method2(covariant-by-declaration core::int b) → void
+    return super.{self::Super::method2}(b);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int, core::num) → void */ method3(covariant-by-declaration core::num a, covariant-by-declaration core::int b) → void
+    return super.{self::Super::method3}(a, b);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>) → void */ method7(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method7}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::Iterable<self::Class::T%>) → void */ method8(covariant-by-declaration covariant-by-class core::List<self::Class::T%> b) → void
+    return super.{self::Super::method8}(b);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>, core::Iterable<self::Class::T%>) → void */ method9(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a, covariant-by-declaration covariant-by-class core::List<self::Class::T%> b) → void
+    return super.{self::Super::method9}(a, b);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter1} = a;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::List<self::Class::T%>) → void */ setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter3} = a;
+}
+class Class1<T extends core::Object? = dynamic> extends core::Object implements self::Class<self::Class1::T%> {
+  synthetic constructor •() → self::Class1<self::Class1::T%>
+    ;
+  method method1(covariant-by-declaration core::double a) → void
+    ;
+  method method2(covariant-by-declaration core::double b) → void
+    ;
+  method method3(covariant-by-declaration core::double a, covariant-by-declaration core::double b) → void
+    ;
+  method method4({required core::double a}) → void
+    ;
+  method method5({required core::double b}) → void
+    ;
+  method method7(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a) → void
+    ;
+  method method8(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> b) → void
+    ;
+  method method9(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a, covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> b) → void
+    ;
+  method method10({required covariant-by-class core::Set<self::Class1::T%> a}) → void
+    ;
+  method method11({required covariant-by-class core::Set<self::Class1::T%> b}) → void
+    ;
+  set setter1(covariant-by-declaration core::double a) → void
+    ;
+  set setter3(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a) → void
+    ;
+}
+abstract class Interface2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface2<self::Interface2::T%>
+    ;
+  abstract method method1(core::int a) → void;
+  abstract method method2(core::int b) → void;
+  abstract method method3(core::int a, core::int b) → void;
+  abstract method method7(covariant-by-class core::List<self::Interface2::T%> a) → void;
+  abstract method method8(covariant-by-class core::List<self::Interface2::T%> b) → void;
+  abstract method method9(covariant-by-class core::List<self::Interface2::T%> a, covariant-by-class core::List<self::Interface2::T%> b) → void;
+  abstract set setter1(core::int a) → void;
+  abstract set setter3(covariant-by-class core::List<self::Interface2::T%> a) → void;
+}
+abstract class Class2<T extends core::Object? = dynamic> extends core::Object implements self::Class<self::Class2::T%>, self::Interface2<self::Class2::T%> {
+  synthetic constructor •() → self::Class2<self::Class2::T%>
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/implicit_super_call.dart b/pkg/front_end/testcases/general/implicit_super_call.dart
new file mode 100644
index 0000000..5615742
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_super_call.dart
@@ -0,0 +1,116 @@
+// Copyright (c) 2021, 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.
+
+class Super1 {
+  void call() {}
+}
+
+class Class1 extends Super1 {
+  void method() {
+    super();
+    super.call();
+  }
+}
+
+class Super2 {
+  int call(int a, [int? b]) => a;
+}
+
+class Class2 extends Super2 {
+  void method() {
+    super(0);
+    super(0, 1);
+    super.call(0);
+    super.call(0, 1);
+  }
+}
+
+class Super3 {
+  int call(int a, {int? b, int? c}) => a;
+}
+
+class Class3 extends Super3 {
+  void method() {
+    super(0);
+    super(0, b: 1);
+    super(0, c: 1);
+    super(0, b: 1, c: 2);
+    super(0, c: 1, b: 2);
+    super.call(0);
+    super.call(0, b: 1);
+    super.call(0, c: 1);
+    super.call(0, b: 1, c: 2);
+    super.call(0, c: 1, b: 2);
+  }
+}
+
+class Super4 {
+  T call<T>(T a) => a;
+}
+
+class Class4 extends Super4 {
+  void method() {
+    super(0);
+    super<int>(0);
+    super.call(0);
+    super.call<int>(0);
+  }
+}
+
+class Super5 {
+  int Function(int) get call => (int a) => a;
+}
+
+class Class5 extends Super5 {
+  void test() {
+    super(0); // error
+  }
+
+  void method() {
+    super.call(0); // ok
+  }
+}
+
+class Super6 {
+  int Function(int) call = (int a) => a;
+}
+
+class Class6 extends Super6 {
+  void test() {
+    super(0); // error
+  }
+
+  void method() {
+    super.call(0); // ok
+  }
+}
+
+class Super7 {
+  void set call(int Function(int) value) {}
+}
+
+class Class7 extends Super7 {
+  void test() {
+    super(0); // error
+    super.call(0); // error
+  }
+}
+
+class Super8 {}
+
+class Class8 extends Super8 {
+  void test() {
+    super(); // error
+    super.call(); // error
+  }
+}
+
+main() {
+  new Class1().method();
+  new Class2().method();
+  new Class3().method();
+  new Class4().method();
+  new Class5().method();
+  new Class6().method();
+}
diff --git a/pkg/front_end/testcases/general/implicit_super_call.dart.textual_outline.expect b/pkg/front_end/testcases/general/implicit_super_call.dart.textual_outline.expect
new file mode 100644
index 0000000..e6e9f87
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_super_call.dart.textual_outline.expect
@@ -0,0 +1,65 @@
+class Super1 {
+  void call() {}
+}
+
+class Class1 extends Super1 {
+  void method() {}
+}
+
+class Super2 {
+  int call(int a, [int? b]) => a;
+}
+
+class Class2 extends Super2 {
+  void method() {}
+}
+
+class Super3 {
+  int call(int a, {int? b, int? c}) => a;
+}
+
+class Class3 extends Super3 {
+  void method() {}
+}
+
+class Super4 {
+  T call<T>(T a) => a;
+}
+
+class Class4 extends Super4 {
+  void method() {}
+}
+
+class Super5 {
+  int Function(int) get call => (int a) => a;
+}
+
+class Class5 extends Super5 {
+  void test() {}
+  void method() {}
+}
+
+class Super6 {
+  int Function(int) call = (int a) => a;
+}
+
+class Class6 extends Super6 {
+  void test() {}
+  void method() {}
+}
+
+class Super7 {
+  void set call(int Function(int) value) {}
+}
+
+class Class7 extends Super7 {
+  void test() {}
+}
+
+class Super8 {}
+
+class Class8 extends Super8 {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/implicit_super_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implicit_super_call.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4cb5718
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_super_call.dart.textual_outline_modelled.expect
@@ -0,0 +1,65 @@
+class Class1 extends Super1 {
+  void method() {}
+}
+
+class Class2 extends Super2 {
+  void method() {}
+}
+
+class Class3 extends Super3 {
+  void method() {}
+}
+
+class Class4 extends Super4 {
+  void method() {}
+}
+
+class Class5 extends Super5 {
+  void method() {}
+  void test() {}
+}
+
+class Class6 extends Super6 {
+  void method() {}
+  void test() {}
+}
+
+class Class7 extends Super7 {
+  void test() {}
+}
+
+class Class8 extends Super8 {
+  void test() {}
+}
+
+class Super1 {
+  void call() {}
+}
+
+class Super2 {
+  int call(int a, [int? b]) => a;
+}
+
+class Super3 {
+  int call(int a, {int? b, int? c}) => a;
+}
+
+class Super4 {
+  T call<T>(T a) => a;
+}
+
+class Super5 {
+  int Function(int) get call => (int a) => a;
+}
+
+class Super6 {
+  int Function(int) call = (int a) => a;
+}
+
+class Super7 {
+  void set call(int Function(int) value) {}
+}
+
+class Super8 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/implicit_super_call.dart.weak.expect b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.expect
new file mode 100644
index 0000000..f6e3ccb
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.expect
@@ -0,0 +1,190 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:67:5: Error: Cannot invoke `super` because it declares 'call' to be something other than a method.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//     super(0); // error
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:81:5: Error: Cannot invoke `super` because it declares 'call' to be something other than a method.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//     super(0); // error
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:95:5: Error: Superclass has no method named 'call'.
+//     super(0); // error
+//     ^^^^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:96:11: Error: Superclass has no method named 'call'.
+//     super.call(0); // error
+//           ^^^^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:104:5: Error: Superclass has no method named 'call'.
+//     super(); // error
+//     ^^^^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:105:11: Error: Superclass has no method named 'call'.
+//     super.call(); // error
+//           ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  synthetic constructor •() → self::Super1
+    : super core::Object::•()
+    ;
+  method call() → void {}
+}
+class Class1 extends self::Super1 {
+  synthetic constructor •() → self::Class1
+    : super self::Super1::•()
+    ;
+  method method() → void {
+    super.{self::Super1::call}();
+    super.{self::Super1::call}();
+  }
+}
+class Super2 extends core::Object {
+  synthetic constructor •() → self::Super2
+    : super core::Object::•()
+    ;
+  method call(core::int a, [core::int? b = #C1]) → core::int
+    return a;
+}
+class Class2 extends self::Super2 {
+  synthetic constructor •() → self::Class2
+    : super self::Super2::•()
+    ;
+  method method() → void {
+    super.{self::Super2::call}(0);
+    super.{self::Super2::call}(0, 1);
+    super.{self::Super2::call}(0);
+    super.{self::Super2::call}(0, 1);
+  }
+}
+class Super3 extends core::Object {
+  synthetic constructor •() → self::Super3
+    : super core::Object::•()
+    ;
+  method call(core::int a, {core::int? b = #C1, core::int? c = #C1}) → core::int
+    return a;
+}
+class Class3 extends self::Super3 {
+  synthetic constructor •() → self::Class3
+    : super self::Super3::•()
+    ;
+  method method() → void {
+    super.{self::Super3::call}(0);
+    super.{self::Super3::call}(0, b: 1);
+    super.{self::Super3::call}(0, c: 1);
+    super.{self::Super3::call}(0, b: 1, c: 2);
+    super.{self::Super3::call}(0, c: 1, b: 2);
+    super.{self::Super3::call}(0);
+    super.{self::Super3::call}(0, b: 1);
+    super.{self::Super3::call}(0, c: 1);
+    super.{self::Super3::call}(0, b: 1, c: 2);
+    super.{self::Super3::call}(0, c: 1, b: 2);
+  }
+}
+class Super4 extends core::Object {
+  synthetic constructor •() → self::Super4
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>(self::Super4::call::T% a) → self::Super4::call::T%
+    return a;
+}
+class Class4 extends self::Super4 {
+  synthetic constructor •() → self::Class4
+    : super self::Super4::•()
+    ;
+  method method() → void {
+    super.{self::Super4::call}<core::int>(0);
+    super.{self::Super4::call}<core::int>(0);
+    super.{self::Super4::call}<core::int>(0);
+    super.{self::Super4::call}<core::int>(0);
+  }
+}
+class Super5 extends core::Object {
+  synthetic constructor •() → self::Super5
+    : super core::Object::•()
+    ;
+  get call() → (core::int) → core::int
+    return (core::int a) → core::int => a;
+}
+class Class5 extends self::Super5 {
+  synthetic constructor •() → self::Class5
+    : super self::Super5::•()
+    ;
+  method test() → void {
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:67:5: Error: Cannot invoke `super` because it declares 'call' to be something other than a method.
+Try changing 'call' to a method or explicitly invoke 'call'.
+    super(0); // error
+    ^";
+  }
+  method method() → void {
+    super.{self::Super5::call}(0){(core::int) → core::int};
+  }
+}
+class Super6 extends core::Object {
+  field (core::int) → core::int call = (core::int a) → core::int => a;
+  synthetic constructor •() → self::Super6
+    : super core::Object::•()
+    ;
+}
+class Class6 extends self::Super6 {
+  synthetic constructor •() → self::Class6
+    : super self::Super6::•()
+    ;
+  method test() → void {
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:81:5: Error: Cannot invoke `super` because it declares 'call' to be something other than a method.
+Try changing 'call' to a method or explicitly invoke 'call'.
+    super(0); // error
+    ^";
+  }
+  method method() → void {
+    super.{self::Super6::call}(0){(core::int) → core::int};
+  }
+}
+class Super7 extends core::Object {
+  synthetic constructor •() → self::Super7
+    : super core::Object::•()
+    ;
+  set call((core::int) → core::int value) → void {}
+}
+class Class7 extends self::Super7 {
+  synthetic constructor •() → self::Class7
+    : super self::Super7::•()
+    ;
+  method test() → void {
+    super.call(0);
+    super.call(0);
+  }
+}
+class Super8 extends core::Object {
+  synthetic constructor •() → self::Super8
+    : super core::Object::•()
+    ;
+}
+class Class8 extends self::Super8 {
+  synthetic constructor •() → self::Class8
+    : super self::Super8::•()
+    ;
+  method test() → void {
+    super.call();
+    super.call();
+  }
+}
+static method main() → dynamic {
+  new self::Class1::•().{self::Class1::method}(){() → void};
+  new self::Class2::•().{self::Class2::method}(){() → void};
+  new self::Class3::•().{self::Class3::method}(){() → void};
+  new self::Class4::•().{self::Class4::method}(){() → void};
+  new self::Class5::•().{self::Class5::method}(){() → void};
+  new self::Class6::•().{self::Class6::method}(){() → void};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect
new file mode 100644
index 0000000..3f03f7a
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  synthetic constructor •() → self::Super1
+    ;
+  method call() → void
+    ;
+}
+class Class1 extends self::Super1 {
+  synthetic constructor •() → self::Class1
+    ;
+  method method() → void
+    ;
+}
+class Super2 extends core::Object {
+  synthetic constructor •() → self::Super2
+    ;
+  method call(core::int a, [core::int? b]) → core::int
+    ;
+}
+class Class2 extends self::Super2 {
+  synthetic constructor •() → self::Class2
+    ;
+  method method() → void
+    ;
+}
+class Super3 extends core::Object {
+  synthetic constructor •() → self::Super3
+    ;
+  method call(core::int a, {core::int? b, core::int? c}) → core::int
+    ;
+}
+class Class3 extends self::Super3 {
+  synthetic constructor •() → self::Class3
+    ;
+  method method() → void
+    ;
+}
+class Super4 extends core::Object {
+  synthetic constructor •() → self::Super4
+    ;
+  method call<T extends core::Object? = dynamic>(self::Super4::call::T% a) → self::Super4::call::T%
+    ;
+}
+class Class4 extends self::Super4 {
+  synthetic constructor •() → self::Class4
+    ;
+  method method() → void
+    ;
+}
+class Super5 extends core::Object {
+  synthetic constructor •() → self::Super5
+    ;
+  get call() → (core::int) → core::int
+    ;
+}
+class Class5 extends self::Super5 {
+  synthetic constructor •() → self::Class5
+    ;
+  method test() → void
+    ;
+  method method() → void
+    ;
+}
+class Super6 extends core::Object {
+  field (core::int) → core::int call;
+  synthetic constructor •() → self::Super6
+    ;
+}
+class Class6 extends self::Super6 {
+  synthetic constructor •() → self::Class6
+    ;
+  method test() → void
+    ;
+  method method() → void
+    ;
+}
+class Super7 extends core::Object {
+  synthetic constructor •() → self::Super7
+    ;
+  set call((core::int) → core::int value) → void
+    ;
+}
+class Class7 extends self::Super7 {
+  synthetic constructor •() → self::Class7
+    ;
+  method test() → void
+    ;
+}
+class Super8 extends core::Object {
+  synthetic constructor •() → self::Super8
+    ;
+}
+class Class8 extends self::Super8 {
+  synthetic constructor •() → self::Class8
+    ;
+  method test() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/implicit_super_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.transformed.expect
new file mode 100644
index 0000000..b81cdfd
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.transformed.expect
@@ -0,0 +1,137 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:11:5: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     super();
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:22:5: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     super(0);
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:23:5: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     super(0, 1);
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:35:5: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     super(0);
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:36:5: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     super(0, b: 1);
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:37:5: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     super(0, c: 1);
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:38:5: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     super(0, b: 1, c: 2);
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:39:5: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     super(0, c: 1, b: 2);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  synthetic constructor •() → self::Super1
+    : super core::Object::•()
+    ;
+  method call() → void {}
+}
+class Class1 extends self::Super1 {
+  synthetic constructor •() → self::Class1
+    : super self::Super1::•()
+    ;
+  method method() → void {
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:11:5: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    super();
+    ^";
+    super.{self::Super1::call}();
+  }
+}
+class Super2 extends core::Object {
+  synthetic constructor •() → self::Super2
+    : super core::Object::•()
+    ;
+  method call(core::int a, [core::int? b = #C1]) → core::int
+    return a;
+}
+class Class2 extends self::Super2 {
+  synthetic constructor •() → self::Class2
+    : super self::Super2::•()
+    ;
+  method method() → void {
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:22:5: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    super(0);
+    ^";
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:23:5: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    super(0, 1);
+    ^";
+    super.{self::Super2::call}(0);
+    super.{self::Super2::call}(0, 1);
+  }
+}
+class Super3 extends core::Object {
+  synthetic constructor •() → self::Super3
+    : super core::Object::•()
+    ;
+  method call(core::int a, {core::int? b = #C1, core::int? c = #C1}) → core::int
+    return a;
+}
+class Class3 extends self::Super3 {
+  synthetic constructor •() → self::Class3
+    : super self::Super3::•()
+    ;
+  method method() → void {
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:35:5: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    super(0);
+    ^";
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:36:5: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    super(0, b: 1);
+    ^";
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:37:5: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    super(0, c: 1);
+    ^";
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:38:5: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    super(0, b: 1, c: 2);
+    ^";
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:39:5: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    super(0, c: 1, b: 2);
+    ^";
+    super.{self::Super3::call}(0);
+    super.{self::Super3::call}(0, b: 1);
+    super.{self::Super3::call}(0, c: 1);
+    super.{self::Super3::call}(0, b: 1, c: 2);
+    super.{self::Super3::call}(0, c: 1, b: 2);
+  }
+}
+static method main() → dynamic {
+  new self::Class1::•().{self::Class1::method}(){() → void};
+  new self::Class2::•().{self::Class2::method}(){() → void};
+  new self::Class3::•().{self::Class3::method}(){() → void};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/implicit_this.dart b/pkg/front_end/testcases/general/implicit_this.dart
index 8acf692..289b962 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart
+++ b/pkg/front_end/testcases/general/implicit_this.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2016, 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.
+
 // @dart=2.9
+
 class C {
   m() {
     print("Called m");
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
index a73f4c5..6d764be 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
@@ -65,7 +65,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::fact2];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::C*
     : super core::Object::•()
     ;
@@ -140,12 +140,12 @@
  - 'Object' is from 'dart:core'.
 Change the type of the method or the context in which it is used.
   void Function(Object) i = C.staticFunction;
-                              ^" in #C1;
+                              ^" in #C2;
   (core::Object*) →* void j = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function or the context in which it is used.
   void Function(Object) j = topLevelFunction;
-                            ^" in #C2;
+                            ^" in #C3;
   (core::Object*) →* void k = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function or the context in which it is used.
@@ -162,13 +162,14 @@
   self::D* f = new self::D::•() as{TypeError} self::D*;
   self::C* g = new self::C::nonFact();
   self::C* h = new self::C::nonFact2();
-  (core::int*) →* void i = #C1;
-  (core::int*) →* void j = #C2;
+  (core::int*) →* void i = #C2;
+  (core::int*) →* void j = #C3;
   (core::int*) →* void k = localFunction;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff self::C::staticFunction
-  #C2 = static-tearoff self::topLevelFunction
+  #C1 = constructor-tearoff self::C::fact2
+  #C2 = static-tearoff self::C::staticFunction
+  #C3 = static-tearoff self::topLevelFunction
 }
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect
index 6da6ddb..fe7f848 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect
@@ -39,3 +39,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///invalid_cast.dart:7:7 -> ConstructorTearOffConstant(C.fact2)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
index 7ea1c1e..d1ae432 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
@@ -65,7 +65,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::fact2];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::C*
     : super core::Object::•()
     ;
@@ -140,12 +140,12 @@
  - 'Object' is from 'dart:core'.
 Change the type of the method or the context in which it is used.
   void Function(Object) i = C.staticFunction;
-                              ^" in #C1;
+                              ^" in #C2;
   (core::Object*) →* void j = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function or the context in which it is used.
   void Function(Object) j = topLevelFunction;
-                            ^" in #C2;
+                            ^" in #C3;
   (core::Object*) →* void k = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function or the context in which it is used.
@@ -162,13 +162,14 @@
   self::D* f = new self::D::•();
   self::C* g = new self::C::nonFact();
   self::C* h = new self::C::nonFact2();
-  (core::int*) →* void i = #C1;
-  (core::int*) →* void j = #C2;
+  (core::int*) →* void i = #C2;
+  (core::int*) →* void j = #C3;
   (core::int*) →* void k = localFunction;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff self::C::staticFunction
-  #C2 = static-tearoff self::topLevelFunction
+  #C1 = constructor-tearoff self::C::fact2
+  #C2 = static-tearoff self::C::staticFunction
+  #C3 = static-tearoff self::topLevelFunction
 }
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
index bf4d0eb..c0cc024 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
     return new self::B::•<self::A::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -33,3 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+}
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
index 04afde7..6b16904 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
@@ -33,3 +33,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue34714.dart:5:7 -> ConstructorTearOffConstant(A.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
index bf4d0eb..c0cc024 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
     return new self::B::•<self::A::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -33,3 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+}
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
index d009d81..d657617 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
@@ -18,7 +18,7 @@
 export "org-dartlang-testcase:///bar_lib.dart";
 
 abstract class Foo extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[foo::Foo::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   const constructor •() → foo::Foo
     : super core::Object::•()
     ;
@@ -42,6 +42,7 @@
 constants  {
   #C1 = bar::Bar<dynamic> {}
   #C2 = <foo::Foo*>{#C1}
+  #C3 = constructor-tearoff foo::Foo::bar
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
index 277bd57..c3b5d5f 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
@@ -44,4 +44,5 @@
 
 Extra constant evaluation status:
 Evaluated: SetLiteral @ org-dartlang-testcase:///main.dart:7:27 -> SetConstant(const <Foo*>{const Bar<dynamic>{}})
-Extra constant evaluation: evaluated: 4, effectively constant: 1
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///foo_lib.dart:9:16 -> ConstructorTearOffConstant(Foo.bar)
+Extra constant evaluation: evaluated: 4, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
index d009d81..d657617 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
 export "org-dartlang-testcase:///bar_lib.dart";
 
 abstract class Foo extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[foo::Foo::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   const constructor •() → foo::Foo
     : super core::Object::•()
     ;
@@ -42,6 +42,7 @@
 constants  {
   #C1 = bar::Bar<dynamic> {}
   #C2 = <foo::Foo*>{#C1}
+  #C3 = constructor-tearoff foo::Foo::bar
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
index dcbf1e1..9e86d1c 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
@@ -13,7 +13,7 @@
     ;
 }
 abstract class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::A::foo]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor •() → self::A
     : super core::Object::•()
     ;
@@ -24,6 +24,7 @@
 
 constants  {
   #C1 = self::B<dynamic> {}
+  #C2 = constructor-tearoff self::A::foo
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect
index a916713..771d13c 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect
@@ -26,4 +26,5 @@
 
 Extra constant evaluation status:
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue45003_2.dart:6:30 -> InstanceConstant(const B<dynamic>{})
-Extra constant evaluation: evaluated: 4, effectively constant: 1
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45003_2.dart:13:16 -> ConstructorTearOffConstant(A.foo)
+Extra constant evaluation: evaluated: 4, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect
index dcbf1e1..9e86d1c 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
     ;
 }
 abstract class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::A::foo]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor •() → self::A
     : super core::Object::•()
     ;
@@ -24,6 +24,7 @@
 
 constants  {
   #C1 = self::B<dynamic> {}
+  #C2 = constructor-tearoff self::A::foo
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
index 651a6e4..d517647 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
@@ -31,7 +31,7 @@
 @#C1
 @#C4
 class Array<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
+  static final field dynamic _redirecting# = <dynamic>[#C5];
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
     return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
@@ -52,6 +52,7 @@
   #C2 = "vm:entry-point"
   #C3 = null
   #C4 = core::pragma {name:#C2, options:#C3}
+  #C5 = constructor-tearoff self2::Array::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
index 7c8d05d..f06670d 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
@@ -53,4 +53,5 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:10:1 -> InstanceConstant(const _Patch{})
 Evaluated: ConstructorInvocation @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const pragma{pragma.name: "vm:entry-point", pragma.options: null})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:14:17 -> InstanceConstant(const _Patch{})
-Extra constant evaluation: evaluated: 8, effectively constant: 3
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///origin_lib.dart:6:7 -> ConstructorTearOffConstant(Array.)
+Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
index 651a6e4..d517647 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
 @#C1
 @#C4
 class Array<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
+  static final field dynamic _redirecting# = <dynamic>[#C5];
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
     return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
@@ -52,6 +52,7 @@
   #C2 = "vm:entry-point"
   #C3 = null
   #C4 = core::pragma {name:#C2, options:#C3}
+  #C5 = constructor-tearoff self2::Array::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.expect
index 2fd5dea..e0ea5d7 100644
--- a/pkg/front_end/testcases/general/issue46334.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.expect
@@ -10,10 +10,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C
     return invalid-expression "pkg/front_end/testcases/general/issue46334.dart:6:11: Error: Cyclic definition of factory 'C'.
   factory C() = C;
           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect
index 2ac4318..ccca97c 100644
--- a/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect
@@ -18,3 +18,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue46334.dart:5:7 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect
index 2fd5dea..e0ea5d7 100644
--- a/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect
@@ -10,10 +10,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C
     return invalid-expression "pkg/front_end/testcases/general/issue46334.dart:6:11: Error: Cyclic definition of factory 'C'.
   factory C() = C;
           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/general/issue47013b.dart.weak.expect b/pkg/front_end/testcases/general/issue47013b.dart.weak.expect
index 70fa41f..7ab0301 100644
--- a/pkg/front_end/testcases/general/issue47013b.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47013b.dart.weak.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ m(covariant-by-declaration core::num i) → void
     return super.{self::A::m}(i);
 }
 class C extends self::B {
diff --git a/pkg/front_end/testcases/general/issue47013b.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47013b.dart.weak.outline.expect
index 81997e1..132d880 100644
--- a/pkg/front_end/testcases/general/issue47013b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47013b.dart.weak.outline.expect
@@ -11,7 +11,7 @@
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ m(covariant-by-declaration core::num i) → void
     return super.{self::A::m}(i);
 }
 class C extends self::B {
diff --git a/pkg/front_end/testcases/general/issue47013b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47013b.dart.weak.transformed.expect
index 70fa41f..7ab0301 100644
--- a/pkg/front_end/testcases/general/issue47013b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47013b.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ m(covariant-by-declaration core::num i) → void
     return super.{self::A::m}(i);
 }
 class C extends self::B {
diff --git a/pkg/front_end/testcases/general/issue47013d.dart.weak.expect b/pkg/front_end/testcases/general/issue47013d.dart.weak.expect
index 7039795..20bde3e 100644
--- a/pkg/front_end/testcases/general/issue47013d.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47013d.dart.weak.expect
@@ -23,8 +23,8 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i, covariant-by-declaration core::num n) → void
-    return super.{self::A::m}(i, n as core::int);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int, core::num) → void */ m(covariant-by-declaration core::num i, covariant-by-declaration core::int n) → void
+    return super.{self::A::m}(i, n);
 }
 static method main() → dynamic {
   self::B b = new self::B::•();
diff --git a/pkg/front_end/testcases/general/issue47013d.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47013d.dart.weak.outline.expect
index f310569..63ad8c8 100644
--- a/pkg/front_end/testcases/general/issue47013d.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47013d.dart.weak.outline.expect
@@ -11,8 +11,8 @@
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i, covariant-by-declaration core::num n) → void
-    return super.{self::A::m}(i, n as core::int);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int, core::num) → void */ m(covariant-by-declaration core::num i, covariant-by-declaration core::int n) → void
+    return super.{self::A::m}(i, n);
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue47013d.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47013d.dart.weak.transformed.expect
index 7039795..20bde3e 100644
--- a/pkg/front_end/testcases/general/issue47013d.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47013d.dart.weak.transformed.expect
@@ -23,8 +23,8 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i, covariant-by-declaration core::num n) → void
-    return super.{self::A::m}(i, n as core::int);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int, core::num) → void */ m(covariant-by-declaration core::num i, covariant-by-declaration core::int n) → void
+    return super.{self::A::m}(i, n);
 }
 static method main() → dynamic {
   self::B b = new self::B::•();
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
index e755d5a..706562c 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
@@ -9,28 +9,28 @@
     ;
 }
 class Settings extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
-  static factory •({@#C2 self::Sidebar sidebar = #C3}) → self::Settings
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[self::_SSettings::•]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C3}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
   final field self::Sidebar sidebar;
-  const constructor •({self::Sidebar sidebar = #C1}) → self::_$_SSettings
+  const constructor •({self::Sidebar sidebar = #C2}) → self::_$_SSettings
     : self::_$_SSettings::sidebar = sidebar, super core::Object::•()
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[self::_SSidebar::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -42,9 +42,13 @@
 static method main() → void {}
 
 constants  {
-  #C1 = self::_$_SSidebar {}
-  #C2 = self::Default {defaultValue:#C1}
-  #C3 = null
+  #C1 = constructor-tearoff self::Settings::•
+  #C2 = self::_$_SSidebar {}
+  #C3 = self::Default {defaultValue:#C2}
+  #C4 = null
+  #C5 = constructor-tearoff self::Sidebar::•
+  #C6 = constructor-tearoff self::_SSettings::•
+  #C7 = constructor-tearoff self::_SSidebar::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
index ebe57b3..bad6433 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
@@ -44,5 +44,9 @@
 
 
 Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47036.dart:11:7 -> ConstructorTearOffConstant(Settings.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47036.dart:17:7 -> ConstructorTearOffConstant(Sidebar.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47036.dart:21:16 -> ConstructorTearOffConstant(_SSettings.)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47036.dart:26:44 -> InstanceConstant(const _$_SSidebar{})
-Extra constant evaluation: evaluated: 17, effectively constant: 1
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47036.dart:31:16 -> ConstructorTearOffConstant(_SSidebar.)
+Extra constant evaluation: evaluated: 17, effectively constant: 5
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
index e755d5a..706562c 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
@@ -9,28 +9,28 @@
     ;
 }
 class Settings extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
-  static factory •({@#C2 self::Sidebar sidebar = #C3}) → self::Settings
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[self::_SSettings::•]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C3}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
   final field self::Sidebar sidebar;
-  const constructor •({self::Sidebar sidebar = #C1}) → self::_$_SSettings
+  const constructor •({self::Sidebar sidebar = #C2}) → self::_$_SSettings
     : self::_$_SSettings::sidebar = sidebar, super core::Object::•()
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[self::_SSidebar::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -42,9 +42,13 @@
 static method main() → void {}
 
 constants  {
-  #C1 = self::_$_SSidebar {}
-  #C2 = self::Default {defaultValue:#C1}
-  #C3 = null
+  #C1 = constructor-tearoff self::Settings::•
+  #C2 = self::_$_SSidebar {}
+  #C3 = self::Default {defaultValue:#C2}
+  #C4 = null
+  #C5 = constructor-tearoff self::Sidebar::•
+  #C6 = constructor-tearoff self::_SSettings::•
+  #C7 = constructor-tearoff self::_SSidebar::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47339.dart b/pkg/front_end/testcases/general/issue47339.dart
new file mode 100644
index 0000000..0637fa2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47339.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2021, 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.
+
+class Foo {
+  const Foo.named();
+  const factory Foo.namedFactory() = Foo.named;
+}
+
+typedef Bar = Foo;
+
+const Bar bar = Bar.named();
+
+const Bar bar2 = Bar.namedFactory();
+
+class FooGeneric<X> {
+  const FooGeneric.named();
+  const factory FooGeneric.namedFactory() = FooGeneric.named;
+}
+
+typedef BarGeneric<X> = FooGeneric<X>;
+
+const BarGeneric<int> barGeneric = BarGeneric.named();
+
+const BarGeneric<int> barGeneric2 = BarGeneric.namedFactory();
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47339.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47339.dart.textual_outline.expect
new file mode 100644
index 0000000..5f8c270
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47339.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+class Foo {
+  const Foo.named();
+  const factory Foo.namedFactory() = Foo.named;
+}
+
+typedef Bar = Foo;
+const Bar bar = Bar.named();
+const Bar bar2 = Bar.namedFactory();
+
+class FooGeneric<X> {
+  const FooGeneric.named();
+  const factory FooGeneric.namedFactory() = FooGeneric.named;
+}
+
+typedef BarGeneric<X> = FooGeneric<X>;
+const BarGeneric<int> barGeneric = BarGeneric.named();
+const BarGeneric<int> barGeneric2 = BarGeneric.namedFactory();
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47339.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47339.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cb8bacb
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47339.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+class Foo {
+  const Foo.named();
+  const factory Foo.namedFactory() = Foo.named;
+}
+
+class FooGeneric<X> {
+  const FooGeneric.named();
+  const factory FooGeneric.namedFactory() = FooGeneric.named;
+}
+
+const Bar bar = Bar.named();
+const Bar bar2 = Bar.namedFactory();
+const BarGeneric<int> barGeneric = BarGeneric.named();
+const BarGeneric<int> barGeneric2 = BarGeneric.namedFactory();
+main() {}
+typedef Bar = Foo;
+typedef BarGeneric<X> = FooGeneric<X>;
diff --git a/pkg/front_end/testcases/general/issue47339.dart.weak.expect b/pkg/front_end/testcases/general/issue47339.dart.weak.expect
new file mode 100644
index 0000000..02f1b57
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47339.dart.weak.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Bar = self::Foo;
+typedef BarGeneric<X extends core::Object? = dynamic> = self::FooGeneric<X%>;
+class Foo extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor named() → self::Foo
+    : super core::Object::•()
+    ;
+  static factory namedFactory() → self::Foo
+    return new self::Foo::named();
+}
+class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor named() → self::FooGeneric<self::FooGeneric::X%>
+    : super core::Object::•()
+    ;
+  static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%>
+    return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
+}
+static const field self::Foo bar = #C3;
+static const field self::Foo bar2 = #C3;
+static const field self::FooGeneric<core::int> barGeneric = #C4;
+static const field self::FooGeneric<core::int> barGeneric2 = #C4;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Foo::namedFactory
+  #C2 = constructor-tearoff self::FooGeneric::namedFactory
+  #C3 = self::Foo {}
+  #C4 = self::FooGeneric<core::int*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47339.dart:
+- Foo.named (from org-dartlang-testcase:///issue47339.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- FooGeneric.named (from org-dartlang-testcase:///issue47339.dart:17:9)
diff --git a/pkg/front_end/testcases/general/issue47339.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47339.dart.weak.outline.expect
new file mode 100644
index 0000000..8e10651
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47339.dart.weak.outline.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Bar = self::Foo;
+typedef BarGeneric<X extends core::Object? = dynamic> = self::FooGeneric<X%>;
+class Foo extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::namedFactory]/*isLegacy*/;
+  const constructor named() → self::Foo
+    : super core::Object::•()
+    ;
+  static factory namedFactory() → self::Foo
+    return new self::Foo::named();
+}
+class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[self::FooGeneric::namedFactory]/*isLegacy*/;
+  const constructor named() → self::FooGeneric<self::FooGeneric::X%>
+    : super core::Object::•()
+    ;
+  static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%>
+    return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
+}
+static const field self::Foo bar = const self::Foo::named();
+static const field self::Foo bar2 = const self::Foo::named();
+static const field self::FooGeneric<core::int> barGeneric = const self::FooGeneric::named<core::int>();
+static const field self::FooGeneric<core::int> barGeneric2 = const self::FooGeneric::named<core::int>();
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47339.dart:5:7 -> ConstructorTearOffConstant(Foo.namedFactory)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47339.dart:16:7 -> ConstructorTearOffConstant(FooGeneric.namedFactory)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:12:11 -> InstanceConstant(const Foo{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:14:22 -> InstanceConstant(const Foo{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:23:23 -> InstanceConstant(const FooGeneric<int*>{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:25:48 -> InstanceConstant(const FooGeneric<int*>{})
+Extra constant evaluation: evaluated: 10, effectively constant: 6
diff --git a/pkg/front_end/testcases/general/issue47339.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47339.dart.weak.transformed.expect
new file mode 100644
index 0000000..02f1b57
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47339.dart.weak.transformed.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Bar = self::Foo;
+typedef BarGeneric<X extends core::Object? = dynamic> = self::FooGeneric<X%>;
+class Foo extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor named() → self::Foo
+    : super core::Object::•()
+    ;
+  static factory namedFactory() → self::Foo
+    return new self::Foo::named();
+}
+class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor named() → self::FooGeneric<self::FooGeneric::X%>
+    : super core::Object::•()
+    ;
+  static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%>
+    return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
+}
+static const field self::Foo bar = #C3;
+static const field self::Foo bar2 = #C3;
+static const field self::FooGeneric<core::int> barGeneric = #C4;
+static const field self::FooGeneric<core::int> barGeneric2 = #C4;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Foo::namedFactory
+  #C2 = constructor-tearoff self::FooGeneric::namedFactory
+  #C3 = self::Foo {}
+  #C4 = self::FooGeneric<core::int*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47339.dart:
+- Foo.named (from org-dartlang-testcase:///issue47339.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- FooGeneric.named (from org-dartlang-testcase:///issue47339.dart:17:9)
diff --git a/pkg/front_end/testcases/general/issue47462.dart b/pkg/front_end/testcases/general/issue47462.dart
new file mode 100644
index 0000000..17b9e38
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2021, 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.
+
+typedef MyList<T extends num> = List<T>;
+
+main() {
+  const c1 = MyList<num>.filled;
+  const c2 = MyList<num>.filled;
+  const c3 = (MyList.filled)<num>;
+
+  const c4 = identical(c1, c2);
+  const c5 = identical(c1, c3);
+
+  expect(true, c4);
+  expect(false, c5);
+
+  expect(true, identical(c1, c2));
+  expect(false, identical(c1, c3));
+
+  var v1 = MyList<num>.filled;
+  var v2 = MyList<num>.filled;
+  var v3 = (MyList.filled)<num>;
+
+  var v4 = identical(v1, v2);
+  var v5 = identical(v1, v3);
+
+  expect(true, v4);
+  expect(false, v5);
+
+  expect(true, identical(v1, v2));
+  expect(false, identical(v1, v3));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/general/issue47462.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47462.dart.textual_outline.expect
new file mode 100644
index 0000000..f4c644d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+typedef MyList<T extends num> = List<T>;
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/general/issue47462.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47462.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f083298
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+expect(expected, actual) {}
+main() {}
+typedef MyList<T extends num> = List<T>;
diff --git a/pkg/front_end/testcases/general/issue47462.dart.weak.expect b/pkg/front_end/testcases/general/issue47462.dart.weak.expect
new file mode 100644
index 0000000..2a6bd0b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.weak.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
diff --git a/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect
new file mode 100644
index 0000000..b89a67b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
diff --git a/pkg/front_end/testcases/general/issue47462.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47462.dart.weak.transformed.expect
new file mode 100644
index 0000000..9e2f5a1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.weak.transformed.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::_List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:18:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:19:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 52, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue47495.dart b/pkg/front_end/testcases/general/issue47495.dart
new file mode 100644
index 0000000..53c19c1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47495.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.9
+
+class S {}
+class M {}
+
+typedef SAlias = S;
+typedef MAlias = M;
+
+class C = SAlias with MAlias;
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47495.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47495.dart.textual_outline.expect
new file mode 100644
index 0000000..c7f3471
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47495.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+// @dart = 2.9
+class S {}
+class M {}
+typedef SAlias = S;
+typedef MAlias = M;
+class C = SAlias with MAlias;
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47495.dart.weak.expect b/pkg/front_end/testcases/general/issue47495.dart.weak.expect
new file mode 100644
index 0000000..1c6fab0
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47495.dart.weak.expect
@@ -0,0 +1,84 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47495.dart:10:16: Error: Can't create typedef from non-function type.
+// typedef SAlias = S;
+//                ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:11:16: Error: Can't create typedef from non-function type.
+// typedef MAlias = M;
+//                ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' can't be mixed in.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
+// typedef MAlias = M;
+//         ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'SAlias' which is an alias of 'invalid-type' can't be used as supertype.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:10:9: Context: The issue arises via this type alias.
+// typedef SAlias = S;
+//         ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' which is an alias of 'invalid-type' can't be used as supertype.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
+// typedef MAlias = M;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef SAlias = invalid-type;
+typedef MAlias = invalid-type;
+class S extends core::Object {
+  synthetic constructor •() → self::S*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47495.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47495.dart.weak.outline.expect
new file mode 100644
index 0000000..f366ace
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47495.dart.weak.outline.expect
@@ -0,0 +1,82 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47495.dart:10:16: Error: Can't create typedef from non-function type.
+// typedef SAlias = S;
+//                ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:11:16: Error: Can't create typedef from non-function type.
+// typedef MAlias = M;
+//                ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' can't be mixed in.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
+// typedef MAlias = M;
+//         ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'SAlias' which is an alias of 'invalid-type' can't be used as supertype.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:10:9: Context: The issue arises via this type alias.
+// typedef SAlias = S;
+//         ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' which is an alias of 'invalid-type' can't be used as supertype.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
+// typedef MAlias = M;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef SAlias = invalid-type;
+typedef MAlias = invalid-type;
+class S extends core::Object {
+  synthetic constructor •() → self::S*
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue47495.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47495.dart.weak.transformed.expect
new file mode 100644
index 0000000..1c6fab0
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47495.dart.weak.transformed.expect
@@ -0,0 +1,84 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47495.dart:10:16: Error: Can't create typedef from non-function type.
+// typedef SAlias = S;
+//                ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:11:16: Error: Can't create typedef from non-function type.
+// typedef MAlias = M;
+//                ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' can't be mixed in.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
+// typedef MAlias = M;
+//         ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'SAlias' which is an alias of 'invalid-type' can't be used as supertype.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:10:9: Context: The issue arises via this type alias.
+// typedef SAlias = S;
+//         ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' which is an alias of 'invalid-type' can't be used as supertype.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
+// typedef MAlias = M;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef SAlias = invalid-type;
+typedef MAlias = invalid-type;
+class S extends core::Object {
+  synthetic constructor •() → self::S*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect
index e433f66..eba1d44 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect
@@ -2,15 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:15: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:15: Error: Type variables can't be used as constants.
 //   C({a: 0, b: T}) : trace = "a: $a, b: $b";
 //               ^
-// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:15: Context: The type 'T' is not a constant because it depends on a type parameter, only instantiated types are allowed.
-//   C({a: 0, b: T}) : trace = "a: $a, b: $b";
-//               ^
-// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:12: Context: While analyzing:
-//   C({a: 0, b: T}) : trace = "a: $a, b: $b";
-//            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -20,7 +14,7 @@
 
 class C<T extends core::Object* = dynamic> extends core::Object {
   field core::String* trace;
-  constructor •({dynamic a = #C1, dynamic b = invalid-expression "The type 'T' is not a constant because it depends on a type parameter, only instantiated types are allowed."}) → self::C<self::C::T*>*
+  constructor •({dynamic a = #C1, dynamic b = invalid-expression "Type variables can't be used as constants."}) → self::C<self::C::T*>*
     : self::C::trace = "a: ${a}, b: ${b}", super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect
index 3a642dd..7780786 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect
@@ -2,15 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:15: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:15: Error: Type variables can't be used as constants.
 //   C({a: 0, b: T}) : trace = "a: $a, b: $b";
 //               ^
-// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:15: Context: The type 'T' is not a constant because it depends on a type parameter, only instantiated types are allowed.
-//   C({a: 0, b: T}) : trace = "a: $a, b: $b";
-//               ^
-// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:12: Context: While analyzing:
-//   C({a: 0, b: T}) : trace = "a: $a, b: $b";
-//            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -20,7 +14,7 @@
 
 class C<T extends core::Object* = dynamic> extends core::Object {
   field core::String* trace;
-  constructor •({dynamic a = #C1, dynamic b = invalid-expression "The type 'T' is not a constant because it depends on a type parameter, only instantiated types are allowed."}) → self::C<self::C::T*>*
+  constructor •({dynamic a = #C1, dynamic b = invalid-expression "Type variables can't be used as constants."}) → self::C<self::C::T*>*
     : self::C::trace = "a: ${a}, b: ${b}", super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart b/pkg/front_end/testcases/general/new_as_selector.dart
new file mode 100644
index 0000000..103aa67
--- /dev/null
+++ b/pkg/front_end/testcases/general/new_as_selector.dart
@@ -0,0 +1,75 @@
+// Copyright (c) 2021, 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.
+
+// @dart=2.14
+
+import 'new_as_selector.dart' as prefix1;
+import 'new_as_selector.dart' deferred as prefix2 hide E;
+
+int new = 87; // error
+
+C c = C();
+
+class Super {}
+
+class C extends Super {
+  int new = 42; // error
+
+  C() : super.new(); // error
+  C.named() : this.new(); // error
+
+  method()  {
+    this.new; // error
+    this.new(); // error
+    this.new<int>(); // error
+    this.new = 87; // error
+  }
+}
+
+extension E on int {
+  external int new; // error
+
+  call<T>() {}
+}
+
+method(dynamic d) => d.new; // error
+
+test() {
+  new C().new; // error
+  new C().new(); // error
+  new C().new = 87; // error
+  C c = C();
+  c.new; // error
+  c.new = 87; // error
+  dynamic foo;
+  foo.new; // error
+  foo.new(); // error
+  foo.new<int>(); // error
+  foo?.new; // error
+  foo?.new(); // error
+  foo?.new<int>(); // error
+  foo..new; // error
+  foo..new(); // error
+  foo..new<int>(); // error
+  (foo).new; // error
+  (foo).new(); // error
+  (foo).new<int>(); // error
+  prefix1.new; // error
+  prefix1.new(); // error
+  prefix1.new<int>(); // error
+  prefix2.c.new; // error
+  prefix2.c.new(); // error
+  prefix2.c.new<int>(); // error
+  E(0).new; // error
+  E(0).new(); // error
+  E(0).new<int>(); // error
+  unresolved.new; // error
+  unresolved.new(); // error
+  unresolved.new<int>(); // error
+  C.new; // error
+  C.new(); // error
+}
+
+main() {
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart.textual_outline.expect b/pkg/front_end/testcases/general/new_as_selector.dart.textual_outline.expect
new file mode 100644
index 0000000..9084629
--- /dev/null
+++ b/pkg/front_end/testcases/general/new_as_selector.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+// @dart = 2.14
+import 'new_as_selector.dart' as prefix1;
+import 'new_as_selector.dart' deferred as prefix2 hide E;
+int new = 87;
+C c = C();
+class Super {}
+class C extends Super {
+  int new = 42;
+  C() : super.new();
+  C.named() : this.new();
+  method() {}
+}
+extension E on int {
+  external int new;
+  call<T>() {}
+}
+method(dynamic d) => d.new;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart.weak.expect b/pkg/front_end/testcases/general/new_as_selector.dart.weak.expect
new file mode 100644
index 0000000..01083e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/new_as_selector.dart.weak.expect
@@ -0,0 +1,311 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:10:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:17:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C() : super.new(); // error
+//               ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.named() : this.new(); // error
+//                    ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:31:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:23:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new; // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:24:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:25:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new<int>(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:26:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new = 87; // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:39:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   new C().new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:40:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   new C().new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:41:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   new C().new = 87; // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:43:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   c.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:44:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   c.new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:46:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo.new; // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:47:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo.new(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:48:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo.new<int>(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:49:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo?.new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:50:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo?.new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:51:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo?.new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:52:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo..new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:53:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo..new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:54:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo..new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:55:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   (foo).new; // error
+//         ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:56:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   (foo).new(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:57:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   (foo).new<int>(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:58:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix1.new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:59:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix1.new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:60:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix1.new<int>(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:61:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix2.c.new; // error
+//             ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:62:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix2.c.new(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:63:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix2.c.new<int>(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:64:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   E(0).new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:65:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   E(0).new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:66:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   E(0).new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:67:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   unresolved.new; // error
+//              ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+//   unresolved.new; // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:68:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   unresolved.new(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:68:3: Error: Undefined name 'unresolved'.
+//   unresolved.new(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:69:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   unresolved.new<int>(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:69:3: Error: Undefined name 'unresolved'.
+//   unresolved.new<int>(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: Member not found: 'new'.
+//   C.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:71:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.new(); // error
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class C extends self::Super {
+  field core::int new = 42;
+  constructor •() → self::C
+    : super self::Super::•()
+    ;
+  constructor named() → self::C
+    : this self::C::•()
+    ;
+  method method() → dynamic {
+    this.{self::C::new}{core::int};
+    self::E|call<dynamic>(this.{self::C::new}{core::int});
+    self::E|call<core::int>(this.{self::C::new}{core::int});
+    this.{self::C::new} = 87;
+  }
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new = 87;
+static field self::C c = new self::C::•();
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  return d{dynamic}.new;
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int};
+  self::E|call<dynamic>(new self::C::•().{self::C::new}{core::int});
+  new self::C::•().{self::C::new} = 87;
+  self::C c = new self::C::•();
+  c.{self::C::new}{core::int};
+  c.{self::C::new} = 87;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  let final dynamic #t1 = foo in #t1 == null ?{dynamic} null : #t1{dynamic}.new;
+  let final dynamic #t2 = foo in #t2 == null ?{dynamic} null : #t2{dynamic}.new();
+  let final dynamic #t3 = foo in #t3 == null ?{dynamic} null : #t3{dynamic}.new<core::int>();
+  let final dynamic #t4 = foo in block {
+    #t4{dynamic}.new;
+  } =>#t4;
+  let final dynamic #t5 = foo in block {
+    #t5{dynamic}.new();
+  } =>#t5;
+  let final dynamic #t6 = foo in block {
+    #t6{dynamic}.new<core::int>();
+  } =>#t6;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  self::new;
+  self::E|call<dynamic>(self::new);
+  self::E|call<core::int>(self::new);
+  let final dynamic #t7 = CheckLibraryIsLoaded(prefix2) in self::c.{self::C::new}{core::int};
+  let final dynamic #t8 = CheckLibraryIsLoaded(prefix2) in self::E|call<dynamic>(self::c.{self::C::new}{core::int});
+  let final dynamic #t9 = CheckLibraryIsLoaded(prefix2) in self::E|call<core::int>(self::c.{self::C::new}{core::int});
+  self::E|get#new(0);
+  self::E|call<dynamic>(self::E|get#new(0));
+  self::E|call<core::int>(self::E|get#new(0));
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+  unresolved.new; // error
+  ^^^^^^^^^^"{<invalid>}.new;
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:68:3: Error: Undefined name 'unresolved'.
+  unresolved.new(); // error
+  ^^^^^^^^^^"{dynamic}.new();
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:69:3: Error: Undefined name 'unresolved'.
+  unresolved.new<int>(); // error
+  ^^^^^^^^^^"{dynamic}.new<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: Member not found: 'new'.
+  C.new; // error
+    ^^^";
+  new self::C::•();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart.weak.outline.expect b/pkg/front_end/testcases/general/new_as_selector.dart.weak.outline.expect
new file mode 100644
index 0000000..6772b34
--- /dev/null
+++ b/pkg/front_end/testcases/general/new_as_selector.dart.weak.outline.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:10:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:17:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C() : super.new(); // error
+//               ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.named() : this.new(); // error
+//                    ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:31:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    ;
+}
+class C extends self::Super {
+  field core::int new;
+  constructor •() → self::C
+    ;
+  constructor named() → self::C
+    ;
+  method method() → dynamic
+    ;
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new;
+static field self::C c;
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic
+  ;
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart.weak.transformed.expect b/pkg/front_end/testcases/general/new_as_selector.dart.weak.transformed.expect
new file mode 100644
index 0000000..0ecdf2a
--- /dev/null
+++ b/pkg/front_end/testcases/general/new_as_selector.dart.weak.transformed.expect
@@ -0,0 +1,311 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:10:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:17:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C() : super.new(); // error
+//               ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.named() : this.new(); // error
+//                    ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:31:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:23:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new; // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:24:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:25:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new<int>(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:26:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new = 87; // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:39:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   new C().new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:40:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   new C().new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:41:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   new C().new = 87; // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:43:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   c.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:44:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   c.new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:46:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo.new; // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:47:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo.new(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:48:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo.new<int>(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:49:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo?.new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:50:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo?.new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:51:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo?.new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:52:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo..new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:53:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo..new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:54:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo..new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:55:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   (foo).new; // error
+//         ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:56:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   (foo).new(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:57:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   (foo).new<int>(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:58:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix1.new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:59:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix1.new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:60:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix1.new<int>(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:61:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix2.c.new; // error
+//             ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:62:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix2.c.new(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:63:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix2.c.new<int>(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:64:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   E(0).new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:65:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   E(0).new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:66:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   E(0).new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:67:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   unresolved.new; // error
+//              ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+//   unresolved.new; // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:68:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   unresolved.new(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:68:3: Error: Undefined name 'unresolved'.
+//   unresolved.new(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:69:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   unresolved.new<int>(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:69:3: Error: Undefined name 'unresolved'.
+//   unresolved.new<int>(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: Member not found: 'new'.
+//   C.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:71:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.new(); // error
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class C extends self::Super {
+  field core::int new = 42;
+  constructor •() → self::C
+    : super self::Super::•()
+    ;
+  constructor named() → self::C
+    : this self::C::•()
+    ;
+  method method() → dynamic {
+    this.{self::C::new}{core::int};
+    self::E|call<dynamic>(this.{self::C::new}{core::int});
+    self::E|call<core::int>(this.{self::C::new}{core::int});
+    this.{self::C::new} = 87;
+  }
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new = 87;
+static field self::C c = new self::C::•();
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  return d{dynamic}.new;
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int};
+  self::E|call<dynamic>(new self::C::•().{self::C::new}{core::int});
+  new self::C::•().{self::C::new} = 87;
+  self::C c = new self::C::•();
+  c.{self::C::new}{core::int};
+  c.{self::C::new} = 87;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  let final dynamic #t1 = foo in #t1 == null ?{dynamic} null : #t1{dynamic}.new;
+  let final dynamic #t2 = foo in #t2 == null ?{dynamic} null : #t2{dynamic}.new();
+  let final dynamic #t3 = foo in #t3 == null ?{dynamic} null : #t3{dynamic}.new<core::int>();
+  let final dynamic #t4 = foo in block {
+    #t4{dynamic}.new;
+  } =>#t4;
+  let final dynamic #t5 = foo in block {
+    #t5{dynamic}.new();
+  } =>#t5;
+  let final dynamic #t6 = foo in block {
+    #t6{dynamic}.new<core::int>();
+  } =>#t6;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  self::new;
+  self::E|call<dynamic>(self::new);
+  self::E|call<core::int>(self::new);
+  let final core::Object* #t7 = CheckLibraryIsLoaded(prefix2) in self::c.{self::C::new}{core::int};
+  let final core::Object* #t8 = CheckLibraryIsLoaded(prefix2) in self::E|call<dynamic>(self::c.{self::C::new}{core::int});
+  let final core::Object* #t9 = CheckLibraryIsLoaded(prefix2) in self::E|call<core::int>(self::c.{self::C::new}{core::int});
+  self::E|get#new(0);
+  self::E|call<dynamic>(self::E|get#new(0));
+  self::E|call<core::int>(self::E|get#new(0));
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+  unresolved.new; // error
+  ^^^^^^^^^^"{<invalid>}.new;
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:68:3: Error: Undefined name 'unresolved'.
+  unresolved.new(); // error
+  ^^^^^^^^^^"{dynamic}.new();
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:69:3: Error: Undefined name 'unresolved'.
+  unresolved.new<int>(); // error
+  ^^^^^^^^^^"{dynamic}.new<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: Member not found: 'new'.
+  C.new; // error
+    ^^^";
+  new self::C::•();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart b/pkg/front_end/testcases/general/no_such_method_forwarder.dart
index 5155aa6..b2938fc 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, 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.
+
 // @dart=2.9
+
 class X {
   void _foo() async {
     await null;
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
index 3f9946a..a58f8ef 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
@@ -44,12 +44,12 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> SymbolConstant(#_foo)
-Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> SymbolConstant(#foo)
-Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:8:8 -> SymbolConstant(#_foo)
+Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:8:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:8:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:8:8 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:13:8 -> SymbolConstant(#foo)
+Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:13:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:13:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:13:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 16, effectively constant: 8
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart b/pkg/front_end/testcases/general/override_setter_with_field.dart
index df45e3a..28626d7 100644
--- a/pkg/front_end/testcases/general/override_setter_with_field.dart
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 abstract class A {
   void set x(Object y);
 }
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.expect b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.expect
index 61d0c16..765d23f 100644
--- a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/override_setter_with_field.dart:10:7: Error: The field 'B.x' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'A.x'.
+// pkg/front_end/testcases/general/override_setter_with_field.dart:12:7: Error: The field 'B.x' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'A.x'.
 //  - 'Object' is from 'dart:core'.
 //   int x;
 //       ^
-// pkg/front_end/testcases/general/override_setter_with_field.dart:6:12: Context: This is the overridden method ('x').
+// pkg/front_end/testcases/general/override_setter_with_field.dart:8:12: Context: This is the overridden method ('x').
 //   void set x(Object y);
 //            ^
 //
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.outline.expect
index ff4e9c0..f7419b7 100644
--- a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.outline.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/override_setter_with_field.dart:10:7: Error: The field 'B.x' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'A.x'.
+// pkg/front_end/testcases/general/override_setter_with_field.dart:12:7: Error: The field 'B.x' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'A.x'.
 //  - 'Object' is from 'dart:core'.
 //   int x;
 //       ^
-// pkg/front_end/testcases/general/override_setter_with_field.dart:6:12: Context: This is the overridden method ('x').
+// pkg/front_end/testcases/general/override_setter_with_field.dart:8:12: Context: This is the overridden method ('x').
 //   void set x(Object y);
 //            ^
 //
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.expect b/pkg/front_end/testcases/general/private_members.dart.weak.expect
index bf194cb..7d67ee2 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.expect
@@ -13,7 +13,7 @@
 class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
   field core::int _privateField = 1;
   field core::int _privateFinalField = 1;
-  static final field dynamic _redirecting# = <dynamic>[self::_Class::_privateRedirectingFactory]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _privateConstructor() → self::_Class
     : super core::Object::•()
     ;
@@ -56,3 +56,7 @@
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateGetter(lowered final core::int #this) → core::int
   return 42;
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void {}
+
+constants  {
+  #C1 = constructor-tearoff self::_Class::_privateRedirectingFactory
+}
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect b/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect
index fdc9a0e..c51001d 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect
@@ -46,3 +46,8 @@
   ;
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///private_members_part.dart:11:7 -> ConstructorTearOffConstant(_Class._privateRedirectingFactory)
+Extra constant evaluation: evaluated: 6, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect b/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
index bf194cb..7d67ee2 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
 class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
   field core::int _privateField = 1;
   field core::int _privateFinalField = 1;
-  static final field dynamic _redirecting# = <dynamic>[self::_Class::_privateRedirectingFactory]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _privateConstructor() → self::_Class
     : super core::Object::•()
     ;
@@ -56,3 +56,7 @@
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateGetter(lowered final core::int #this) → core::int
   return 42;
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void {}
+
+constants  {
+  #C1 = constructor-tearoff self::_Class::_privateRedirectingFactory
+}
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.expect b/pkg/front_end/testcases/general/qualified.dart.weak.expect
index 4deccd1..59d3ddb 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.expect
@@ -73,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static final field dynamic _redirecting# = <dynamic>[self::C::b];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
@@ -114,7 +114,7 @@
 
 typedef VoidFunction = () →* void;
 class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → lib::C<lib::C::T*>*
     : super self::C::•()
     ;
@@ -160,3 +160,8 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::b
+  #C2 = constructor-tearoff lib::C::b
+}
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
index 7528cb9..57448e6 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
@@ -143,3 +143,9 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///qualified_part.dart:7:7 -> ConstructorTearOffConstant(C.b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///qualified_lib.dart:9:7 -> ConstructorTearOffConstant(C.b)
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
index a982723..83dac20 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
@@ -74,7 +74,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static final field dynamic _redirecting# = <dynamic>[self::C::b];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
@@ -115,7 +115,7 @@
 
 typedef VoidFunction = () →* void;
 class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → lib::C<lib::C::T*>*
     : super self::C::•()
     ;
@@ -161,3 +161,8 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::b
+  #C2 = constructor-tearoff lib::C::b
+}
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
index 0173839..293f8a2 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -28,3 +28,7 @@
 static method main() → dynamic {
   new self::B::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::fisk
+}
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
index 94296d3..2ae8aaa 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
@@ -25,3 +25,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_constructor.dart:5:7 -> ConstructorTearOffConstant(A.fisk)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
index 0173839..293f8a2 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -28,3 +28,7 @@
 static method main() → dynamic {
   new self::B::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::fisk
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
index 6155d9d..ba2466c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 
 abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
     return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
@@ -32,7 +32,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
     return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -86,7 +86,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
+  static final field dynamic _redirecting# = <dynamic>[#C3];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
     return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -101,7 +101,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
+  static final field dynamic _redirecting# = <dynamic>[#C4];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
     return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -174,3 +174,10 @@
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::FooBase::•
+  #C2 = constructor-tearoff self::Foo::•
+  #C3 = constructor-tearoff self::SimpleCase::•
+  #C4 = constructor-tearoff self::SimpleCaseImpl::•
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
index 611e0cc..6978627 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
@@ -156,3 +156,11 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:5:16 -> ConstructorTearOffConstant(FooBase.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:10:16 -> ConstructorTearOffConstant(Foo.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:27:7 -> ConstructorTearOffConstant(SimpleCase.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:31:7 -> ConstructorTearOffConstant(SimpleCaseImpl.)
+Extra constant evaluation: evaluated: 12, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
index 0f768e15..025c11c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 
 abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
     return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
@@ -32,7 +32,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
     return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -86,7 +86,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
+  static final field dynamic _redirecting# = <dynamic>[#C3];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
     return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -101,7 +101,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
+  static final field dynamic _redirecting# = <dynamic>[#C4];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
     return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -174,3 +174,10 @@
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::FooBase::•
+  #C2 = constructor-tearoff self::Foo::•
+  #C3 = constructor-tearoff self::SimpleCase::•
+  #C4 = constructor-tearoff self::SimpleCaseImpl::•
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
index 16a9cdc..e86259e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -25,3 +25,8 @@
 static method main() → dynamic {
   new self::A::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::first
+  #C2 = constructor-tearoff self::A::second
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
index 3f90310..8eeb6bc 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
@@ -23,3 +23,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_chain_test.dart:10:7 -> ConstructorTearOffConstant(A.first)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_chain_test.dart:10:7 -> ConstructorTearOffConstant(A.second)
+Extra constant evaluation: evaluated: 5, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
index 16a9cdc..e86259e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -25,3 +25,8 @@
 static method main() → dynamic {
   new self::A::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::first
+  #C2 = constructor-tearoff self::A::second
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
index e5a7448..3dc0b99 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
     return new self::_Y::•<self::_X::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -50,7 +50,7 @@
 }
 class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
   constructor •() → self::B<self::B::T*>*
-    : super self::A::•(#C1)
+    : super self::A::•(#C2)
     ;
 }
 static method main() → dynamic {
@@ -61,7 +61,8 @@
 }
 
 constants  {
-  #C1 = self::_Y<Null> {}
+  #C1 = constructor-tearoff self::_X::•
+  #C2 = self::_Y<Null> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
index 55c2b59..23c7bac 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
@@ -53,3 +53,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_const_inference.dart:9:7 -> ConstructorTearOffConstant(_X.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
index e5a7448..3dc0b99 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
     return new self::_Y::•<self::_X::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -50,7 +50,7 @@
 }
 class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
   constructor •() → self::B<self::B::T*>*
-    : super self::A::•(#C1)
+    : super self::A::•(#C2)
     ;
 }
 static method main() → dynamic {
@@ -61,7 +61,8 @@
 }
 
 constants  {
-  #C1 = self::_Y<Null> {}
+  #C1 = constructor-tearoff self::_X::•
+  #C2 = self::_Y<Null> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
index f1030db..4a74b87 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
@@ -12,8 +12,8 @@
 
 class A extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
   static factory redirect([core::int field]) → self::A
@@ -31,5 +31,6 @@
 }
 
 constants  {
-  #C1 = 42
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = 42
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
index c031d22..7669a3f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
@@ -14,3 +14,8 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_default_value.dart:5:7 -> ConstructorTearOffConstant(A.redirect)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
index f1030db..4a74b87 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
@@ -12,8 +12,8 @@
 
 class A extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
   static factory redirect([core::int field]) → self::A
@@ -31,5 +31,6 @@
 }
 
 constants  {
-  #C1 = 42
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = 42
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect
index 27d959b..f674d71 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect
@@ -101,7 +101,7 @@
 
 class Class1 extends core::Object {
   field core::int field = 0;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -184,12 +184,13 @@
     super.foo(new self::Class1::_());
     super.+(new self::Class1::_());
   }
-  method method({dynamic a = #C1}) → dynamic {}
+  method method({dynamic a = #C2}) → dynamic {}
   get call() → core::int
     return 0;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
index 8977ba1..70bc2cc 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
@@ -23,3 +23,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_invocation_in_invalid.dart:5:7 -> ConstructorTearOffConstant(Class1.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
index 39405c7..4f4319e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
@@ -18,7 +18,7 @@
 typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
 @#C1
 class Const extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor internal() → self::Const
     : super core::Object::•()
     ;
@@ -27,24 +27,24 @@
 }
 class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
   @#C1
-  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {
+  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {
     @#C1 dynamic l1;
     @#C1
-    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {}
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {}
   };
   @#C1
   constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
   @#C1
-  method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+  method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
     @#C1 dynamic l1;
     @#C1
-    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
   }
   @#C1
-  method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-    <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+  method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+    <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
   }
 }
 @#C1
@@ -56,46 +56,47 @@
   tearoff method2 = self::Extension|get#method2;
 }
 @#C1
-static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 };
 @#C1
-static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 };
 @#C1
-static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 }
 @#C1
-static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
 }
 @#C1
-static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 }
 static method Extension|get#method1<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method1::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, [dynamic]) → dynamic
-  return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C2]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
+  return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C3]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
 @#C1
-static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
 }
 static method Extension|get#method2<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method2::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → dynamic
-  return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C2}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
+  return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C3}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
 static method main() → dynamic {}
 
 constants  {
   #C1 = self::Const {}
-  #C2 = null
+  #C2 = constructor-tearoff self::Const::•
+  #C3 = null
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
index 777c550..ac02ea3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
@@ -80,6 +80,7 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:85:2 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:86:24 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:17:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:18:7 -> ConstructorTearOffConstant(Const.)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:46:14 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:56:4 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:59:4 -> InstanceConstant(const Const{})
@@ -98,4 +99,4 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:109:12 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:23:2 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:90:4 -> InstanceConstant(const Const{})
-Extra constant evaluation: evaluated: 41, effectively constant: 28
+Extra constant evaluation: evaluated: 41, effectively constant: 29
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
index 39405c7..4f4319e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
 typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
 @#C1
 class Const extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor internal() → self::Const
     : super core::Object::•()
     ;
@@ -27,24 +27,24 @@
 }
 class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
   @#C1
-  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {
+  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {
     @#C1 dynamic l1;
     @#C1
-    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {}
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {}
   };
   @#C1
   constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
   @#C1
-  method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+  method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
     @#C1 dynamic l1;
     @#C1
-    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
   }
   @#C1
-  method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-    <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+  method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+    <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
   }
 }
 @#C1
@@ -56,46 +56,47 @@
   tearoff method2 = self::Extension|get#method2;
 }
 @#C1
-static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 };
 @#C1
-static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 };
 @#C1
-static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 }
 @#C1
-static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
 }
 @#C1
-static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 }
 static method Extension|get#method1<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method1::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, [dynamic]) → dynamic
-  return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C2]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
+  return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C3]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
 @#C1
-static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
 }
 static method Extension|get#method2<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method2::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → dynamic
-  return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C2}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
+  return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C3}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
 static method main() → dynamic {}
 
 constants  {
   #C1 = self::Const {}
-  #C2 = null
+  #C2 = constructor-tearoff self::Const::•
+  #C3 = null
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
index 9cea1c8..9b12539 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor named(dynamic p) → self::Foo*
     : super core::Object::•()
     ;
-  @#C1
-  static factory •(@#C2 @#C3 dynamic p) → self::Foo*
+  @#C2
+  static factory •(@#C3 @#C4 dynamic p) → self::Foo*
     return new self::Foo::named(p);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -21,13 +21,14 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* forParameter = #C2;
-static const field core::int* forFactoryItself = #C1;
-static const field core::int* anotherForParameter = #C3;
+static const field core::int* forParameter = #C3;
+static const field core::int* forFactoryItself = #C2;
+static const field core::int* anotherForParameter = #C4;
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 2
-  #C2 = 1
-  #C3 = 3
+  #C1 = constructor-tearoff self::Foo::•
+  #C2 = 2
+  #C3 = 1
+  #C4 = 3
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
index f807177..69d94af 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
@@ -29,4 +29,5 @@
 
 Extra constant evaluation status:
 Evaluated: StaticGet @ org-dartlang-testcase:///redirecting_factory_metadata.dart:15:4 -> IntConstant(2)
-Extra constant evaluation: evaluated: 5, effectively constant: 1
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_metadata.dart:14:7 -> ConstructorTearOffConstant(Foo.)
+Extra constant evaluation: evaluated: 5, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
index 9cea1c8..9b12539 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor named(dynamic p) → self::Foo*
     : super core::Object::•()
     ;
-  @#C1
-  static factory •(@#C2 @#C3 dynamic p) → self::Foo*
+  @#C2
+  static factory •(@#C3 @#C4 dynamic p) → self::Foo*
     return new self::Foo::named(p);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -21,13 +21,14 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* forParameter = #C2;
-static const field core::int* forFactoryItself = #C1;
-static const field core::int* anotherForParameter = #C3;
+static const field core::int* forParameter = #C3;
+static const field core::int* forFactoryItself = #C2;
+static const field core::int* anotherForParameter = #C4;
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 2
-  #C2 = 1
-  #C3 = 3
+  #C1 = constructor-tearoff self::Foo::•
+  #C2 = 2
+  #C3 = 1
+  #C4 = 3
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
index ca460af..f2a4360 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -23,3 +23,7 @@
 static method main() → dynamic {
   new self::A::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
index 8549d41..20fd71c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
@@ -21,3 +21,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_simple_test.dart:10:7 -> ConstructorTearOffConstant(A.redir)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
index ca460af..f2a4360 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -23,3 +23,7 @@
 static method main() → dynamic {
   new self::A::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
index b3ec99a..16c46e9 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -48,3 +48,7 @@
 static method main() → dynamic {
   new self::B::•<self::Y*>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
index fedbec2..024a135 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
@@ -43,3 +43,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_typeargs_test.dart:15:7 -> ConstructorTearOffConstant(A.redir)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
index b3ec99a..16c46e9 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -48,3 +48,7 @@
 static method main() → dynamic {
   new self::B::•<self::Y*>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
index d5fafac..469f2af 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
@@ -23,3 +23,7 @@
 static method main() → dynamic {
   new self::A::•<core::int*, core::String*>(42, "foobar");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
index 3bf6457..795e0a9 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
@@ -21,3 +21,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_typeparam_test.dart:12:7 -> ConstructorTearOffConstant(A.redir)
+Extra constant evaluation: evaluated: 5, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
index d5fafac..469f2af 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
@@ -23,3 +23,7 @@
 static method main() → dynamic {
   new self::A::•<core::int*, core::String*>(42, "foobar");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
index 6b9f76b..98d4e12 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
@@ -43,3 +43,7 @@
 static method main() → dynamic {
   new self::A::•<self::X*, self::Y*>(new self::X::•(), new self::Y::•());
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
index 522c0dc..ef67ff4 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
@@ -39,3 +39,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_typeparambounds_test.dart:16:7 -> ConstructorTearOffConstant(A.redir)
+Extra constant evaluation: evaluated: 5, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
index 6b9f76b..98d4e12 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
@@ -43,3 +43,7 @@
 static method main() → dynamic {
   new self::A::•<self::X*, self::Y*>(new self::X::•(), new self::Y::•());
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
index 45971e6..273bd861 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
@@ -41,3 +41,8 @@
 static method main() → dynamic {
   exp::Expect::equals("${new self::C::•<core::int*, core::num*, core::String*>()}", "int,num,String");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
index 97f2aa7..4a31e13 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
@@ -36,3 +36,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments.dart:12:7 -> ConstructorTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments.dart:17:7 -> ConstructorTearOffConstant(B.)
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
index 45971e6..273bd861 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
@@ -41,3 +41,8 @@
 static method main() → dynamic {
   exp::Expect::equals("${new self::C::•<core::int*, core::num*, core::String*>()}", "int,num,String");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
index 21aa750..516d00c 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
@@ -41,3 +41,8 @@
 static method main() → dynamic {
   exp::Expect::equals("${new self::C::•<core::int*, core::List<core::int*>*, core::Map<core::int*, core::List<core::int*>*>*>()}", "int,List<int>,Map<int, List<int>>");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
index fc699bb..2736c94 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
@@ -36,3 +36,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments_subst.dart:11:16 -> ConstructorTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments_subst.dart:16:16 -> ConstructorTearOffConstant(B.)
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
index 21aa750..516d00c 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
@@ -41,3 +41,8 @@
 static method main() → dynamic {
   exp::Expect::equals("${new self::C::•<core::int*, core::List<core::int*>*, core::Map<core::int*, core::List<core::int*>*>*>()}", "int,List<int>,Map<int, List<int>>");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
index e858e7d..be27ced 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   const constructor empty() → self::A*
     : super core::Object::•()
     ;
@@ -31,11 +31,12 @@
     return "${self::B::T*}";
 }
 static method main() → void {
-  exp::Expect::equals("${#C1}", "String");
+  exp::Expect::equals("${#C2}", "String");
 }
 
 constants  {
-  #C1 = self::B<core::String*> {}
+  #C1 = constructor-tearoff self::A::•
+  #C2 = self::B<core::String*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
index 0d1b358..7640720 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
@@ -31,3 +31,8 @@
 }
 static method main() → void
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_type_arguments.dart:10:7 -> ConstructorTearOffConstant(A.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
index e858e7d..be27ced 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   const constructor empty() → self::A*
     : super core::Object::•()
     ;
@@ -31,11 +31,12 @@
     return "${self::B::T*}";
 }
 static method main() → void {
-  exp::Expect::equals("${#C1}", "String");
+  exp::Expect::equals("${#C2}", "String");
 }
 
 constants  {
-  #C1 = self::B<core::String*> {}
+  #C1 = constructor-tearoff self::A::•
+  #C2 = self::B<core::String*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/super_call.dart b/pkg/front_end/testcases/general/super_call.dart
index 33cb6ae..0ba2666 100644
--- a/pkg/front_end/testcases/general/super_call.dart
+++ b/pkg/front_end/testcases/general/super_call.dart
@@ -12,8 +12,7 @@
   int call(int x) => x * 3;
 
   int call_super() {
-    // Assumes that super() means super.call().
-    // In reality, it is illegal to use it this way.
+    // super() means super.call().
     return super(5);
   }
 }
diff --git a/pkg/front_end/testcases/general/super_call.dart.weak.expect b/pkg/front_end/testcases/general/super_call.dart.weak.expect
index 6c726a4..1e7e27c 100644
--- a/pkg/front_end/testcases/general/super_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.expect
@@ -1,12 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/super_call.dart:17:12: Error: Can't use 'super' as an expression.
-// To delegate a constructor to a super constructor, put the super call as an initializer.
-//     return super(5);
-//            ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -34,10 +26,7 @@
   method call(core::int* x) → core::int*
     return x.{core::num::*}(3){(core::num*) →* core::int*};
   method call_super() → core::int* {
-    return invalid-expression "pkg/front_end/testcases/general/super_call.dart:17:12: Error: Can't use 'super' as an expression.
-To delegate a constructor to a super constructor, put the super call as an initializer.
-    return super(5);
-           ^";
+    return super.{self::A::call}(5);
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect
index 6c726a4..1e7e27c 100644
--- a/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect
@@ -1,12 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/super_call.dart:17:12: Error: Can't use 'super' as an expression.
-// To delegate a constructor to a super constructor, put the super call as an initializer.
-//     return super(5);
-//            ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -34,10 +26,7 @@
   method call(core::int* x) → core::int*
     return x.{core::num::*}(3){(core::num*) →* core::int*};
   method call_super() → core::int* {
-    return invalid-expression "pkg/front_end/testcases/general/super_call.dart:17:12: Error: Can't use 'super' as an expression.
-To delegate a constructor to a super constructor, put the super call as an initializer.
-    return super(5);
-           ^";
+    return super.{self::A::call}(5);
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_semi_stub.dart b/pkg/front_end/testcases/general/super_semi_stub.dart
new file mode 100644
index 0000000..71a58db3
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_semi_stub.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2021, 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.
+
+class Super {
+  void method(num a) {}
+  void set setter(num a) {}
+}
+
+class Class extends Super {
+  void method(covariant int a);
+  void set setter(covariant int a);
+}
+
+class Subclass extends Class {
+  void method(int a) {
+    void Function(num) sup1 = super.method; // ok
+    var sup2 = super.method;
+    void Function(num) cls1 = Class().method; // error
+    void Function(int) cls2 = Class().method; // ok
+    var cls3 = Class().method;
+  }
+
+  void set setter(int a) {
+    super.setter = 0; // ok
+    super.setter = 0.5; // ok
+    Class().setter = 0; // ok
+    Class().setter = 0.5; // error
+  }
+}
+
+test(Subclass sub) {
+  sub.method(0); // ok
+  sub.method(0.5); // error
+
+  Class cls = sub;
+  cls.method(0); // ok
+  cls.method(0.5); // error
+
+  Super sup = sub;
+  sup.method(0); // ok
+  sup.method(0.5); // ok
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/super_semi_stub.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_semi_stub.dart.textual_outline.expect
new file mode 100644
index 0000000..f10e6b6
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_semi_stub.dart.textual_outline.expect
@@ -0,0 +1,17 @@
+class Super {
+  void method(num a) {}
+  void set setter(num a) {}
+}
+
+class Class extends Super {
+  void method(covariant int a);
+  void set setter(covariant int a);
+}
+
+class Subclass extends Class {
+  void method(int a) {}
+  void set setter(int a) {}
+}
+
+test(Subclass sub) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/super_semi_stub.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_semi_stub.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..332dc973
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_semi_stub.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+class Class extends Super {
+  void method(covariant int a);
+  void set setter(covariant int a);
+}
+
+class Subclass extends Class {
+  void method(int a) {}
+  void set setter(int a) {}
+}
+
+class Super {
+  void method(num a) {}
+  void set setter(num a) {}
+}
+
+main() {}
+test(Subclass sub) {}
diff --git a/pkg/front_end/testcases/general/super_semi_stub.dart.weak.expect b/pkg/front_end/testcases/general/super_semi_stub.dart.weak.expect
new file mode 100644
index 0000000..31c108e
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_semi_stub.dart.weak.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_semi_stub.dart:17:37: Error: A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(num)'.
+//     void Function(num) sup1 = super.method; // ok
+//                                     ^
+//
+// pkg/front_end/testcases/general/super_semi_stub.dart:19:39: Error: A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(num)'.
+//     void Function(num) cls1 = Class().method; // error
+//                                       ^
+//
+// pkg/front_end/testcases/general/super_semi_stub.dart:34:14: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//   sub.method(0.5); // error
+//              ^
+//
+// pkg/front_end/testcases/general/super_semi_stub.dart:38:14: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//   cls.method(0.5); // error
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method method(core::num a) → void {}
+  set setter(core::num a) → void {}
+}
+class Class extends self::Super {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method}(a);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter} = a;
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass
+    : super self::Class::•()
+    ;
+  method method(covariant-by-declaration core::int a) → void {
+    (core::num) → void sup1 = invalid-expression "pkg/front_end/testcases/general/super_semi_stub.dart:17:37: Error: A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(num)'.
+    void Function(num) sup1 = super.method; // ok
+                                    ^" in super.{self::Class::method} as{TypeError,ForNonNullableByDefault} (core::num) → void;
+    (core::int) → void sup2 = super.{self::Class::method};
+    (core::num) → void cls1 = invalid-expression "pkg/front_end/testcases/general/super_semi_stub.dart:19:39: Error: A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(num)'.
+    void Function(num) cls1 = Class().method; // error
+                                      ^" in new self::Class::•().{self::Class::method}{(core::int) → void} as{TypeError,ForNonNullableByDefault} (core::num) → void;
+    (core::int) → void cls2 = new self::Class::•().{self::Class::method}{(core::int) → void};
+    (core::int) → void cls3 = new self::Class::•().{self::Class::method}{(core::int) → void};
+  }
+  set setter(covariant-by-declaration core::int a) → void {
+    super.{self::Class::setter} = 0;
+    super.{self::Class::setter} = 0.5;
+    new self::Class::•().{self::Class::setter} = 0;
+    new self::Class::•().{self::Class::setter} = 0.5;
+  }
+}
+static method test(self::Subclass sub) → dynamic {
+  sub.{self::Subclass::method}(0){(core::int) → void};
+  sub.{self::Subclass::method}(invalid-expression "pkg/front_end/testcases/general/super_semi_stub.dart:34:14: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  sub.method(0.5); // error
+             ^" in 0.5 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  self::Class cls = sub;
+  cls.{self::Class::method}(0){(core::int) → void};
+  cls.{self::Class::method}(invalid-expression "pkg/front_end/testcases/general/super_semi_stub.dart:38:14: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  cls.method(0.5); // error
+             ^" in 0.5 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  self::Super sup = sub;
+  sup.{self::Super::method}(0){(core::num) → void};
+  sup.{self::Super::method}(0.5){(core::num) → void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_semi_stub.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_semi_stub.dart.weak.outline.expect
new file mode 100644
index 0000000..dcca0c1
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_semi_stub.dart.weak.outline.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    ;
+  method method(core::num a) → void
+    ;
+  set setter(core::num a) → void
+    ;
+}
+class Class extends self::Super {
+  synthetic constructor •() → self::Class
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method}(a);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter} = a;
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass
+    ;
+  method method(covariant-by-declaration core::int a) → void
+    ;
+  set setter(covariant-by-declaration core::int a) → void
+    ;
+}
+static method test(self::Subclass sub) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart b/pkg/front_end/testcases/general/super_set_covariant.dart
index 88aaff1..a7d4d45 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart
@@ -1,15 +1,16 @@
 // Copyright (c) 2020, 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.
+
 // @dart=2.9
+
 class SuperClass {
   void set setter(Object o) {}
 }
 
 abstract class Class extends SuperClass {
-  // TODO(johnniwinther): Should this introduce a concrete forwarding stub, and
-  // if so, should the target of the super set below be the forwarding super
-  // stub?
+  // This introduces a forwarding semi stub with the parameter type of
+  // the `SuperClass.setter` but with a signature type of `void Function(int)`.
   void set setter(covariant int o);
 }
 
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect
index 9153148..fede2f5 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect
@@ -1,11 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     super.setter = '$o';
-//                        ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -29,7 +22,7 @@
   synthetic constructor •() → self::Class*
     : super self::SuperClass::•()
     ;
-  forwarding-stub forwarding-semi-stub set setter(covariant-by-declaration core::int* o) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int*) →* void */ setter(covariant-by-declaration core::Object* o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
@@ -37,9 +30,7 @@
     : super self::Class::•()
     ;
   set setter(covariant-by-declaration core::int* o) → void {
-    super.{self::Class::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    super.setter = '\$o';
-                       ^" in "${o}" as{TypeError} core::int*;
+    super.{self::Class::setter} = "${o}";
   }
 }
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect
index 7500961..84045f4 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class Class extends self::SuperClass {
   synthetic constructor •() → self::Class*
     ;
-  forwarding-stub forwarding-semi-stub set setter(covariant-by-declaration core::int* o) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int*) →* void */ setter(covariant-by-declaration core::Object* o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect
index 9153148..fede2f5 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect
@@ -1,11 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-//     super.setter = '$o';
-//                        ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -29,7 +22,7 @@
   synthetic constructor •() → self::Class*
     : super self::SuperClass::•()
     ;
-  forwarding-stub forwarding-semi-stub set setter(covariant-by-declaration core::int* o) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int*) →* void */ setter(covariant-by-declaration core::Object* o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
@@ -37,9 +30,7 @@
     : super self::Class::•()
     ;
   set setter(covariant-by-declaration core::int* o) → void {
-    super.{self::Class::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
-    super.setter = '\$o';
-                       ^" in "${o}" as{TypeError} core::int*;
+    super.{self::Class::setter} = "${o}";
   }
 }
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart b/pkg/front_end/testcases/general/type_variable_in_static_context.dart
new file mode 100644
index 0000000..d8f37df
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart
@@ -0,0 +1,154 @@
+// Copyright (c) 2021, 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.
+
+typedef A<T> = Class<T>;
+
+typedef B<T extends num> = Class<T>;
+
+class Class<T> {
+  const Class();
+
+  @T()
+  static T? method0<S extends T>(T arg) {
+    T? local;
+    T;
+    void fun<U extends T>() {}
+  }
+
+  @Class<T>()
+  static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+    Class<T>? local;
+    new Class<T>();
+    Class<T>;
+    Class<T>.new;
+    void fun<U extends Class<T>>() {}
+  }
+
+  @Class<Class<T>>()
+  static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+    Class<Class<T>>? local;
+    new Class<Class<T>>();
+    Class<Class<T>>;
+    Class<Class<T>>.new;
+    void fun<U extends Class<Class<T>>>() {}
+  }
+
+  @A<T>()
+  static A<T>? method3<S extends A<T>>(A<T> arg) {
+    A<T>? local;
+    new A<T>();
+    A<T>;
+    A<T>.new;
+    void fun<U extends A<T>>() {}
+  }
+
+  @A<A<T>>()
+  static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+    A<A<T>>? local;
+    new A<A<T>>();
+    A<A<T>>;
+    A<A<T>>.new;
+    void fun<U extends A<A<T>>>() {}
+  }
+
+  @B<T>()
+  static B<T>? method5<S extends B<T>>(B<T> arg) {
+    B<T>? local;
+    new B<T>();
+    B<T>;
+    B<T>.new;
+    void fun<U extends B<T>>() {}
+  }
+
+  @A<B<T>>()
+  static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+    A<B<T>>? local;
+    new A<B<T>>();
+    A<B<T>>;
+    A<B<T>>.new;
+    void fun<U extends A<B<T>>>() {}
+  }
+
+  @Class<void Function<S extends T>()>()
+  static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+    void Function<S extends T>()? local;
+    void fun<V extends void Function<S extends T>()>() {}
+  }
+
+  @T()
+  static T field0;
+
+  @Class<T>()
+  static Class<T>? field1;
+
+  @Class<Class<T>>()
+  static Type field2 = T;
+
+  @A<T>()
+  static Type field3 = Class<T>;
+
+  @B<T>()
+  static var field4 = (T t) => T;
+
+  @T()
+  final T? instanceField;
+
+  @T()
+  T instanceMethod<S extends T>(T t) {
+    T;
+    return t;
+  }
+}
+
+extension Extension<T> on T {
+  Extension(T t);
+
+  factory Extension.fact(T t) => null;
+
+  @T()
+  static T field0;
+
+  @T()
+  T field1;
+
+  @T()
+  static T? staticMethod<S extends T>(T arg) {
+    T? local;
+    T;
+    void fun<U extends T>() {}
+  }
+
+  @T()
+  T instanceMethod<S extends T>(T t) {
+    T;
+    return t;
+  }
+}
+
+mixin Mixin<T> {
+  Mixin(T t);
+
+  factory Mixin.fact(T t) => null;
+
+  @T()
+  static T field0;
+
+  @T()
+  static T? staticMethod<S extends T>(T arg) {
+    T? local;
+    T;
+    void fun<U extends T>() {}
+  }
+
+  @T()
+  T? instanceField;
+
+  @T()
+  T instanceMethod<S extends T>(T t) {
+    T;
+    return t;
+  }
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.textual_outline.expect
new file mode 100644
index 0000000..d1247c0
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.textual_outline.expect
@@ -0,0 +1,60 @@
+typedef A<T> = Class<T>;
+typedef B<T extends num> = Class<T>;
+class Class<T> {
+  const Class();
+  @T()
+  static T? method0<S extends T>(T arg) {}
+  @Class<T>()
+  static Class<T>? method1<S extends Class<T>>(Class<T> arg) {}
+  @Class<Class<T>>()
+  static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {}
+  @A<T>()
+  static A<T>? method3<S extends A<T>>(A<T> arg) {}
+  @A<A<T>>()
+  static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {}
+  @B<T>()
+  static B<T>? method5<S extends B<T>>(B<T> arg) {}
+  @A<B<T>>()
+  static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {}
+  @Class<void Function<S extends T>()>()
+  static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {}
+  @T()
+  static T field0;
+  @Class<T>()
+  static Class<T>? field1;
+  @Class<Class<T>>()
+  static Type field2 = T;
+  @A<T>()
+  static Type field3 = Class<T>;
+  @B<T>()
+  static var field4 = (T t) => T;
+  @T()
+  final T? instanceField;
+  @T()
+  T instanceMethod<S extends T>(T t) {}
+}
+extension Extension<T> on T {
+  Extension(T t);
+  factory Extension.fact(T t) => null;
+  @T()
+  static T field0;
+  @T()
+  T field1;
+  @T()
+  static T? staticMethod<S extends T>(T arg) {}
+  @T()
+  T instanceMethod<S extends T>(T t) {}
+}
+mixin Mixin<T> {
+  Mixin(T t);
+  factory Mixin.fact(T t) => null;
+  @T()
+  static T field0;
+  @T()
+  static T? staticMethod<S extends T>(T arg) {}
+  @T()
+  T? instanceField;
+  @T()
+  T instanceMethod<S extends T>(T t) {}
+}
+main() {}
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..86ca952
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+class Class<T> {
+  static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {}
+  static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {}
+  static A<T>? method3<S extends A<T>>(A<T> arg) {}
+  static B<T>? method5<S extends B<T>>(B<T> arg) {}
+  static Class<Class<T>>? method2<S extends Class<Class<T>>>(
+      Class<Class<T>> arg) {}
+  static Class<T>? method1<S extends Class<T>>(Class<T> arg) {}
+  static T? method0<S extends T>(T arg) {}
+  static void Function<S extends T>()?
+      method7<U extends void Function<S extends T>()>(
+          void Function<S extends T>() arg) {}
+}
+
+main() {}
+typedef A<T> = Class<T>;
+typedef B<T extends num> = Class<T>;
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect
new file mode 100644
index 0000000..31bd8fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect
@@ -0,0 +1,630 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension(T t);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   T field1;
+//     ^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
+//   Mixin(T t);
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
+//   factory Mixin.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:11: Error: Expected 0 type arguments.
+//   factory Extension.fact(T t) => null;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:31: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                               ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:44: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:57: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:36: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:41: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:36: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:41: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:73:34: Error: Type variables can't be used in static members.
+//   @Class<void Function<S extends T>()>()
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:34: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:82: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:112: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                                                                                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:80:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:83:16: Error: Type variables can't be used in static members.
+//   static Class<T>? field1;
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:110:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:10: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:135:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:10: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:24: Error: Type variables can't be used in static members.
+//   static var field4 = (T t) => T;
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:32: Error: Type variables can't be used in static members.
+//   static var field4 = (T t) => T;
+//                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:12:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
+//   @A<A<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
+//   @A<B<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:97:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:109:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:112:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:115:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:122:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:134:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:137:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:144:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:147:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:14:5: Error: Type variables can't be used in static members.
+//     T? local;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:15:5: Error: Type variables can't be used in static members.
+//     T;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:16:24: Error: Type variables can't be used in static members.
+//     void fun<U extends T>() {}
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:21:11: Error: Type variables can't be used in static members.
+//     Class<T>? local;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:22:15: Error: Type variables can't be used in static members.
+//     new Class<T>();
+//               ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:23:11: Error: Type variables can't be used in static members.
+//     Class<T>;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:24:11: Error: Type variables can't be used in static members.
+//     Class<T>.new;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:25:30: Error: Type variables can't be used in static members.
+//     void fun<U extends Class<T>>() {}
+//                              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:30:17: Error: Type variables can't be used in static members.
+//     Class<Class<T>>? local;
+//                 ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:31:21: Error: Type variables can't be used in static members.
+//     new Class<Class<T>>();
+//                     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:32:17: Error: Type variables can't be used in static members.
+//     Class<Class<T>>;
+//                 ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:33:17: Error: Type variables can't be used in static members.
+//     Class<Class<T>>.new;
+//                 ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:34:36: Error: Type variables can't be used in static members.
+//     void fun<U extends Class<Class<T>>>() {}
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:39:7: Error: Type variables can't be used in static members.
+//     A<T>? local;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:40:11: Error: Type variables can't be used in static members.
+//     new A<T>();
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:41:7: Error: Type variables can't be used in static members.
+//     A<T>;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:42:7: Error: Type variables can't be used in static members.
+//     A<T>.new;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:43:26: Error: Type variables can't be used in static members.
+//     void fun<U extends A<T>>() {}
+//                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:48:9: Error: Type variables can't be used in static members.
+//     A<A<T>>? local;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:49:13: Error: Type variables can't be used in static members.
+//     new A<A<T>>();
+//             ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:50:9: Error: Type variables can't be used in static members.
+//     A<A<T>>;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:51:9: Error: Type variables can't be used in static members.
+//     A<A<T>>.new;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:52:28: Error: Type variables can't be used in static members.
+//     void fun<U extends A<A<T>>>() {}
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:57:7: Error: Type variables can't be used in static members.
+//     B<T>? local;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:58:11: Error: Type variables can't be used in static members.
+//     new B<T>();
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:59:7: Error: Type variables can't be used in static members.
+//     B<T>;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:60:7: Error: Type variables can't be used in static members.
+//     B<T>.new;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:61:26: Error: Type variables can't be used in static members.
+//     void fun<U extends B<T>>() {}
+//                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:66:9: Error: Type variables can't be used in static members.
+//     A<B<T>>? local;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:67:13: Error: Type variables can't be used in static members.
+//     new A<B<T>>();
+//             ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:68:9: Error: Type variables can't be used in static members.
+//     A<B<T>>;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:69:9: Error: Type variables can't be used in static members.
+//     A<B<T>>.new;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:70:28: Error: Type variables can't be used in static members.
+//     void fun<U extends A<B<T>>>() {}
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:75:29: Error: Type variables can't be used in static members.
+//     void Function<S extends T>()? local;
+//                             ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:76:48: Error: Type variables can't be used in static members.
+//     void fun<V extends void Function<S extends T>()>() {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:86:24: Error: Type variables can't be used in static members.
+//   static Type field2 = T;
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:89:30: Error: Type variables can't be used in static members.
+//   static Type field3 = Class<T>;
+//                              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:117:5: Error: Type variables can't be used in static members.
+//     T? local;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:118:5: Error: Type variables can't be used in static members.
+//     T;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:119:24: Error: Type variables can't be used in static members.
+//     void fun<U extends T>() {}
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:30: Error: The value 'null' can't be returned from a function with return type 'Mixin<T>' because 'Mixin<T>' is not nullable.
+//  - 'Mixin' is from 'pkg/front_end/testcases/general/type_variable_in_static_context.dart'.
+//   factory Mixin.fact(T t) => null;
+//                              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:139:5: Error: Type variables can't be used in static members.
+//     T? local;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:140:5: Error: Type variables can't be used in static members.
+//     T;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:141:24: Error: Type variables can't be used in static members.
+//     void fun<U extends T>() {}
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:95:12: Error: Final field 'instanceField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final T? instanceField;
+//            ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%>;
+typedef B<T extends core::num> = self::Class<T>;
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static field invalid-type field0 = null;
+  @#C2
+  static field self::Class<invalid-type>? field1 = null;
+  @#C3
+  static field core::Type field2 = #C4;
+  @#C2
+  static field core::Type field3 = #C5;
+  @#C2
+  static field (invalid-type) → core::Type field4 = (invalid-type t) → core::Type => #C4;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  final field self::Class::T? instanceField = null;
+  const constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:12:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static method method0<S extends invalid-type>(invalid-type arg) → invalid-type {
+    invalid-type local;
+    #C4;
+    function fun<U extends invalid-type>() → void {}
+  }
+  @#C2
+  static method method1<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>? {
+    self::Class<invalid-type>? local;
+    new self::Class::•<invalid-type>();
+    #C5;
+    #C7;
+    function fun<U extends self::Class<invalid-type>>() → void {}
+  }
+  @#C3
+  static method method2<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>? {
+    self::Class<self::Class<invalid-type>>? local;
+    new self::Class::•<self::Class<invalid-type>>();
+    #C8;
+    #C9;
+    function fun<U extends self::Class<self::Class<invalid-type>>>() → void {}
+  }
+  @#C2
+  static method method3<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>? {
+    self::Class<invalid-type>? local;
+    new self::Class::•<invalid-type>();
+    #C5;
+    #C7;
+    function fun<U extends self::Class<invalid-type>>() → void {}
+  }
+  @#C3
+  static method method4<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>? {
+    self::Class<self::Class<invalid-type>>? local;
+    new self::Class::•<self::Class<invalid-type>>();
+    #C8;
+    #C9;
+    function fun<U extends self::Class<self::Class<invalid-type>>>() → void {}
+  }
+  @#C2
+  static method method5<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>? {
+    self::Class<invalid-type>? local;
+    new self::Class::•<invalid-type>();
+    #C5;
+    #C7;
+    function fun<U extends self::Class<invalid-type>>() → void {}
+  }
+  @#C3
+  static method method6<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>? {
+    self::Class<self::Class<invalid-type>>? local;
+    new self::Class::•<self::Class<invalid-type>>();
+    #C8;
+    #C9;
+    function fun<U extends self::Class<self::Class<invalid-type>>>() → void {}
+  }
+  @#C10
+  static method method7<U extends <S extends invalid-type = dynamic>() → void>(<S extends invalid-type = dynamic>() → void arg) → <S extends invalid-type = dynamic>() →? void {
+    <S extends invalid-type>() →? void local;
+    function fun<V extends <S extends invalid-type>() → void>() → void {}
+  }
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:97:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  method instanceMethod<covariant-by-class S extends self::Class::T%>(covariant-by-class self::Class::T% t) → self::Class::T% {
+    self::Class::T%;
+    return t;
+  }
+}
+abstract class Mixin<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:134:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static field invalid-type field0 = null;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:144:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  covariant-by-class field self::Mixin::T? instanceField = null;
+  constructor •(invalid-type t) → self::Mixin<self::Mixin::T%>
+    : super core::Object::•()
+    ;
+  static factory fact<T extends core::Object? = dynamic>(self::Mixin::fact::T% t) → self::Mixin<self::Mixin::fact::T%>
+    return invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:30: Error: The value 'null' can't be returned from a function with return type 'Mixin<T>' because 'Mixin<T>' is not nullable.
+ - 'Mixin' is from 'pkg/front_end/testcases/general/type_variable_in_static_context.dart'.
+  factory Mixin.fact(T t) => null;
+                             ^" in null as{TypeError,ForNonNullableByDefault} Never;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:137:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static method staticMethod<S extends invalid-type>(invalid-type arg) → invalid-type {
+    invalid-type local;
+    #C4;
+    function fun<U extends invalid-type>() → void {}
+  }
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:147:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  method instanceMethod<covariant-by-class S extends self::Mixin::T%>(covariant-by-class self::Mixin::T% t) → self::Mixin::T% {
+    self::Mixin::T%;
+    return t;
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on T% {
+  static field field0 = self::Extension|field0;
+  field field1 = self::Extension|field1;
+  static method staticMethod = self::Extension|staticMethod;
+  method instanceMethod = self::Extension|instanceMethod;
+  tearoff instanceMethod = self::Extension|get#instanceMethod;
+}
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:109:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static field invalid-type Extension|field0;
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:112:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static field invalid-type Extension|field1;
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:115:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static method Extension|staticMethod<S extends invalid-type>(invalid-type arg) → invalid-type {
+  invalid-type local;
+  #C4;
+  function fun<U extends invalid-type>() → void {}
+}
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:122:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static method Extension|instanceMethod<T extends core::Object? = dynamic, S extends self::Extension|instanceMethod::T% = dynamic>(lowered final self::Extension|instanceMethod::T% #this, self::Extension|instanceMethod::T% t) → self::Extension|instanceMethod::T% {
+  self::Extension|instanceMethod::T%;
+  return t;
+}
+static method Extension|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::Extension|get#instanceMethod::T% #this) → <S extends self::Extension|get#instanceMethod::T% = dynamic>(self::Extension|get#instanceMethod::T%) → self::Extension|get#instanceMethod::T%
+  return <S extends self::Extension|get#instanceMethod::T% = dynamic>(self::Extension|get#instanceMethod::T% t) → self::Extension|get#instanceMethod::T% => self::Extension|instanceMethod<self::Extension|get#instanceMethod::T%, S%>(#this, t);
+static method main() → dynamic {}
+static method _#B#new#tearOff<T extends core::num>() → self::Class<self::_#B#new#tearOff::T>
+  return new self::Class::•<self::_#B#new#tearOff::T>();
+
+constants  {
+  #C1 = null
+  #C2 = self::Class<invalid-type> {instanceField:#C1}
+  #C3 = self::Class<self::Class<invalid-type>*> {instanceField:#C1}
+  #C4 = TypeLiteralConstant(invalid-type)
+  #C5 = TypeLiteralConstant(self::Class<invalid-type>*)
+  #C6 = constructor-tearoff self::Class::•
+  #C7 = instantiation #C6 <invalid-type>
+  #C8 = TypeLiteralConstant(self::Class<self::Class<invalid-type>*>*)
+  #C9 = instantiation #C6 <self::Class<invalid-type>*>
+  #C10 = self::Class<<S extends invalid-type>() →* void> {instanceField:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///type_variable_in_static_context.dart:
+- Class. (from org-dartlang-testcase:///type_variable_in_static_context.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.outline.expect
new file mode 100644
index 0000000..fcae7bb
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.outline.expect
@@ -0,0 +1,394 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension(T t);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   T field1;
+//     ^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
+//   Mixin(T t);
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
+//   factory Mixin.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:11: Error: Expected 0 type arguments.
+//   factory Extension.fact(T t) => null;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:31: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                               ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:44: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:57: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:36: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:41: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:36: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:41: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:73:34: Error: Type variables can't be used in static members.
+//   @Class<void Function<S extends T>()>()
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:34: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:82: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:112: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                                                                                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:80:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:83:16: Error: Type variables can't be used in static members.
+//   static Class<T>? field1;
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:110:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:10: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:135:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:10: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:24: Error: Type variables can't be used in static members.
+//   static var field4 = (T t) => T;
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:32: Error: Type variables can't be used in static members.
+//   static var field4 = (T t) => T;
+//                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:12:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
+//   @A<A<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
+//   @A<B<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:97:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:109:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:112:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:115:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:122:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:134:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:137:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:144:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:147:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%>;
+typedef B<T extends core::num> = self::Class<T>;
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static field invalid-type field0;
+  @self::Class::•<invalid-type>()
+  static field self::Class<invalid-type>? field1;
+  @self::Class::•<self::Class<invalid-type>>()
+  static field core::Type field2;
+  @self::Class::•<invalid-type>()
+  static field core::Type field3;
+  @self::Class::•<invalid-type>()
+  static field (invalid-type) → core::Type field4;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  final field self::Class::T? instanceField;
+  const constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:12:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static method method0<S extends invalid-type>(invalid-type arg) → invalid-type
+    ;
+  @self::Class::•<invalid-type>()
+  static method method1<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>?
+    ;
+  @self::Class::•<self::Class<invalid-type>>()
+  static method method2<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>?
+    ;
+  @self::Class::•<invalid-type>()
+  static method method3<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>?
+    ;
+  @self::Class::•<self::Class<invalid-type>>()
+  static method method4<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>?
+    ;
+  @self::Class::•<invalid-type>()
+  static method method5<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>?
+    ;
+  @self::Class::•<self::Class<invalid-type>>()
+  static method method6<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>?
+    ;
+  @self::Class::•<<S extends invalid-type>() → void>()
+  static method method7<U extends <S extends invalid-type = dynamic>() → void>(<S extends invalid-type = dynamic>() → void arg) → <S extends invalid-type = dynamic>() →? void
+    ;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:97:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  method instanceMethod<covariant-by-class S extends self::Class::T%>(covariant-by-class self::Class::T% t) → self::Class::T%
+    ;
+}
+abstract class Mixin<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:134:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static field invalid-type field0;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:144:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  covariant-by-class field self::Mixin::T? instanceField;
+  constructor •(invalid-type t) → self::Mixin<self::Mixin::T%>
+    ;
+  static factory fact<T extends core::Object? = dynamic>(self::Mixin::fact::T% t) → self::Mixin<self::Mixin::fact::T%>
+    ;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:137:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static method staticMethod<S extends invalid-type>(invalid-type arg) → invalid-type
+    ;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:147:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  method instanceMethod<covariant-by-class S extends self::Mixin::T%>(covariant-by-class self::Mixin::T% t) → self::Mixin::T%
+    ;
+}
+extension Extension<T extends core::Object? = dynamic> on T% {
+  static field field0 = self::Extension|field0;
+  field field1 = self::Extension|field1;
+  static method staticMethod = self::Extension|staticMethod;
+  method instanceMethod = self::Extension|instanceMethod;
+  tearoff instanceMethod = self::Extension|get#instanceMethod;
+}
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:109:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static field invalid-type Extension|field0;
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:112:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static field invalid-type Extension|field1;
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:115:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static method Extension|staticMethod<S extends invalid-type>(invalid-type arg) → invalid-type
+  ;
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:122:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static method Extension|instanceMethod<T extends core::Object? = dynamic, S extends self::Extension|instanceMethod::T% = dynamic>(lowered final self::Extension|instanceMethod::T% #this, self::Extension|instanceMethod::T% t) → self::Extension|instanceMethod::T%
+  ;
+static method Extension|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::Extension|get#instanceMethod::T% #this) → <S extends self::Extension|get#instanceMethod::T% = dynamic>(self::Extension|get#instanceMethod::T%) → self::Extension|get#instanceMethod::T%
+  return <S extends self::Extension|get#instanceMethod::T% = dynamic>(self::Extension|get#instanceMethod::T% t) → self::Extension|get#instanceMethod::T% => self::Extension|instanceMethod<self::Extension|get#instanceMethod::T%, S%>(#this, t);
+static method main() → dynamic
+  ;
+static method _#B#new#tearOff<T extends core::num>() → self::Class<self::_#B#new#tearOff::T>
+  return new self::Class::•<self::_#B#new#tearOff::T>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:19:4 -> InstanceConstant(const Class<<invalid>>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:28:4 -> InstanceConstant(const Class<Class<<invalid>>*>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:37:4 -> InstanceConstant(const Class<<invalid>>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:46:4 -> InstanceConstant(const Class<Class<<invalid>>*>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:55:4 -> InstanceConstant(const Class<<invalid>>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:64:4 -> InstanceConstant(const Class<Class<<invalid>>*>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:73:4 -> InstanceConstant(const Class<void Function<S extends <invalid>>()*>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:82:4 -> InstanceConstant(const Class<<invalid>>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:85:4 -> InstanceConstant(const Class<Class<<invalid>>*>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:88:4 -> InstanceConstant(const Class<<invalid>>{Class.instanceField: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///type_variable_in_static_context.dart:91:4 -> InstanceConstant(const Class<<invalid>>{Class.instanceField: null})
+Extra constant evaluation: evaluated: 16, effectively constant: 11
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect
new file mode 100644
index 0000000..1da87de
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect
@@ -0,0 +1,630 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension(T t);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   T field1;
+//     ^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
+//   Mixin(T t);
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
+//   factory Mixin.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:11: Error: Expected 0 type arguments.
+//   factory Extension.fact(T t) => null;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:31: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                               ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:44: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:57: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:36: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:41: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:36: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:41: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:73:34: Error: Type variables can't be used in static members.
+//   @Class<void Function<S extends T>()>()
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:34: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:82: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:112: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                                                                                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:80:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:83:16: Error: Type variables can't be used in static members.
+//   static Class<T>? field1;
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:110:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:10: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:135:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:10: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:24: Error: Type variables can't be used in static members.
+//   static var field4 = (T t) => T;
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:32: Error: Type variables can't be used in static members.
+//   static var field4 = (T t) => T;
+//                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:12:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
+//   @A<A<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
+//   @A<B<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:97:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:109:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:112:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:115:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:122:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:134:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:137:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:144:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:147:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:14:5: Error: Type variables can't be used in static members.
+//     T? local;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:15:5: Error: Type variables can't be used in static members.
+//     T;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:16:24: Error: Type variables can't be used in static members.
+//     void fun<U extends T>() {}
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:21:11: Error: Type variables can't be used in static members.
+//     Class<T>? local;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:22:15: Error: Type variables can't be used in static members.
+//     new Class<T>();
+//               ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:23:11: Error: Type variables can't be used in static members.
+//     Class<T>;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:24:11: Error: Type variables can't be used in static members.
+//     Class<T>.new;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:25:30: Error: Type variables can't be used in static members.
+//     void fun<U extends Class<T>>() {}
+//                              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:30:17: Error: Type variables can't be used in static members.
+//     Class<Class<T>>? local;
+//                 ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:31:21: Error: Type variables can't be used in static members.
+//     new Class<Class<T>>();
+//                     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:32:17: Error: Type variables can't be used in static members.
+//     Class<Class<T>>;
+//                 ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:33:17: Error: Type variables can't be used in static members.
+//     Class<Class<T>>.new;
+//                 ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:34:36: Error: Type variables can't be used in static members.
+//     void fun<U extends Class<Class<T>>>() {}
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:39:7: Error: Type variables can't be used in static members.
+//     A<T>? local;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:40:11: Error: Type variables can't be used in static members.
+//     new A<T>();
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:41:7: Error: Type variables can't be used in static members.
+//     A<T>;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:42:7: Error: Type variables can't be used in static members.
+//     A<T>.new;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:43:26: Error: Type variables can't be used in static members.
+//     void fun<U extends A<T>>() {}
+//                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:48:9: Error: Type variables can't be used in static members.
+//     A<A<T>>? local;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:49:13: Error: Type variables can't be used in static members.
+//     new A<A<T>>();
+//             ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:50:9: Error: Type variables can't be used in static members.
+//     A<A<T>>;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:51:9: Error: Type variables can't be used in static members.
+//     A<A<T>>.new;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:52:28: Error: Type variables can't be used in static members.
+//     void fun<U extends A<A<T>>>() {}
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:57:7: Error: Type variables can't be used in static members.
+//     B<T>? local;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:58:11: Error: Type variables can't be used in static members.
+//     new B<T>();
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:59:7: Error: Type variables can't be used in static members.
+//     B<T>;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:60:7: Error: Type variables can't be used in static members.
+//     B<T>.new;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:61:26: Error: Type variables can't be used in static members.
+//     void fun<U extends B<T>>() {}
+//                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:66:9: Error: Type variables can't be used in static members.
+//     A<B<T>>? local;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:67:13: Error: Type variables can't be used in static members.
+//     new A<B<T>>();
+//             ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:68:9: Error: Type variables can't be used in static members.
+//     A<B<T>>;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:69:9: Error: Type variables can't be used in static members.
+//     A<B<T>>.new;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:70:28: Error: Type variables can't be used in static members.
+//     void fun<U extends A<B<T>>>() {}
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:75:29: Error: Type variables can't be used in static members.
+//     void Function<S extends T>()? local;
+//                             ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:76:48: Error: Type variables can't be used in static members.
+//     void fun<V extends void Function<S extends T>()>() {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:86:24: Error: Type variables can't be used in static members.
+//   static Type field2 = T;
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:89:30: Error: Type variables can't be used in static members.
+//   static Type field3 = Class<T>;
+//                              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:117:5: Error: Type variables can't be used in static members.
+//     T? local;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:118:5: Error: Type variables can't be used in static members.
+//     T;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:119:24: Error: Type variables can't be used in static members.
+//     void fun<U extends T>() {}
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:30: Error: The value 'null' can't be returned from a function with return type 'Mixin<T>' because 'Mixin<T>' is not nullable.
+//  - 'Mixin' is from 'pkg/front_end/testcases/general/type_variable_in_static_context.dart'.
+//   factory Mixin.fact(T t) => null;
+//                              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:139:5: Error: Type variables can't be used in static members.
+//     T? local;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:140:5: Error: Type variables can't be used in static members.
+//     T;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:141:24: Error: Type variables can't be used in static members.
+//     void fun<U extends T>() {}
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:95:12: Error: Final field 'instanceField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final T? instanceField;
+//            ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%>;
+typedef B<T extends core::num> = self::Class<T>;
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static field invalid-type field0 = null;
+  @#C2
+  static field self::Class<invalid-type>? field1 = null;
+  @#C3
+  static field core::Type field2 = #C4;
+  @#C2
+  static field core::Type field3 = #C5;
+  @#C2
+  static field (invalid-type) → core::Type field4 = (invalid-type t) → core::Type => #C4;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  final field self::Class::T? instanceField = null;
+  const constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:12:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static method method0<S extends invalid-type>(invalid-type arg) → invalid-type {
+    invalid-type local;
+    #C4;
+    function fun<U extends invalid-type>() → void {}
+  }
+  @#C2
+  static method method1<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>? {
+    self::Class<invalid-type>? local;
+    new self::Class::•<invalid-type>();
+    #C5;
+    #C7;
+    function fun<U extends self::Class<invalid-type>>() → void {}
+  }
+  @#C3
+  static method method2<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>? {
+    self::Class<self::Class<invalid-type>>? local;
+    new self::Class::•<self::Class<invalid-type>>();
+    #C8;
+    #C9;
+    function fun<U extends self::Class<self::Class<invalid-type>>>() → void {}
+  }
+  @#C2
+  static method method3<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>? {
+    self::Class<invalid-type>? local;
+    new self::Class::•<invalid-type>();
+    #C5;
+    #C7;
+    function fun<U extends self::Class<invalid-type>>() → void {}
+  }
+  @#C3
+  static method method4<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>? {
+    self::Class<self::Class<invalid-type>>? local;
+    new self::Class::•<self::Class<invalid-type>>();
+    #C8;
+    #C9;
+    function fun<U extends self::Class<self::Class<invalid-type>>>() → void {}
+  }
+  @#C2
+  static method method5<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>? {
+    self::Class<invalid-type>? local;
+    new self::Class::•<invalid-type>();
+    #C5;
+    #C7;
+    function fun<U extends self::Class<invalid-type>>() → void {}
+  }
+  @#C3
+  static method method6<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>? {
+    self::Class<self::Class<invalid-type>>? local;
+    new self::Class::•<self::Class<invalid-type>>();
+    #C8;
+    #C9;
+    function fun<U extends self::Class<self::Class<invalid-type>>>() → void {}
+  }
+  @#C10
+  static method method7<U extends <S extends invalid-type = dynamic>() → void>(<S extends invalid-type = dynamic>() → void arg) → <S extends invalid-type = dynamic>() →? void {
+    <S extends invalid-type>() →? void local;
+    function fun<V extends <S extends invalid-type>() → void>() → void {}
+  }
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:97:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  method instanceMethod<covariant-by-class S extends self::Class::T%>(covariant-by-class self::Class::T% t) → self::Class::T% {
+    self::Class::T%;
+    return t;
+  }
+}
+abstract class Mixin<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:134:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static field invalid-type field0 = null;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:144:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  covariant-by-class field self::Mixin::T? instanceField = null;
+  constructor •(invalid-type t) → self::Mixin<self::Mixin::T%>
+    : super core::Object::•()
+    ;
+  static factory fact<T extends core::Object? = dynamic>(self::Mixin::fact::T% t) → self::Mixin<self::Mixin::fact::T%>
+    return invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:30: Error: The value 'null' can't be returned from a function with return type 'Mixin<T>' because 'Mixin<T>' is not nullable.
+ - 'Mixin' is from 'pkg/front_end/testcases/general/type_variable_in_static_context.dart'.
+  factory Mixin.fact(T t) => null;
+                             ^" in null;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:137:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static method staticMethod<S extends invalid-type>(invalid-type arg) → invalid-type {
+    invalid-type local;
+    #C4;
+    function fun<U extends invalid-type>() → void {}
+  }
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:147:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  method instanceMethod<covariant-by-class S extends self::Mixin::T%>(covariant-by-class self::Mixin::T% t) → self::Mixin::T% {
+    self::Mixin::T%;
+    return t;
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on T% {
+  static field field0 = self::Extension|field0;
+  field field1 = self::Extension|field1;
+  static method staticMethod = self::Extension|staticMethod;
+  method instanceMethod = self::Extension|instanceMethod;
+  tearoff instanceMethod = self::Extension|get#instanceMethod;
+}
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:109:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static field invalid-type Extension|field0;
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:112:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static field invalid-type Extension|field1;
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:115:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static method Extension|staticMethod<S extends invalid-type>(invalid-type arg) → invalid-type {
+  invalid-type local;
+  #C4;
+  function fun<U extends invalid-type>() → void {}
+}
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:122:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static method Extension|instanceMethod<T extends core::Object? = dynamic, S extends self::Extension|instanceMethod::T% = dynamic>(lowered final self::Extension|instanceMethod::T% #this, self::Extension|instanceMethod::T% t) → self::Extension|instanceMethod::T% {
+  self::Extension|instanceMethod::T%;
+  return t;
+}
+static method Extension|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::Extension|get#instanceMethod::T% #this) → <S extends self::Extension|get#instanceMethod::T% = dynamic>(self::Extension|get#instanceMethod::T%) → self::Extension|get#instanceMethod::T%
+  return <S extends self::Extension|get#instanceMethod::T% = dynamic>(self::Extension|get#instanceMethod::T% t) → self::Extension|get#instanceMethod::T% => self::Extension|instanceMethod<self::Extension|get#instanceMethod::T%, S%>(#this, t);
+static method main() → dynamic {}
+static method _#B#new#tearOff<T extends core::num>() → self::Class<self::_#B#new#tearOff::T>
+  return new self::Class::•<self::_#B#new#tearOff::T>();
+
+constants  {
+  #C1 = null
+  #C2 = self::Class<invalid-type> {instanceField:#C1}
+  #C3 = self::Class<self::Class<invalid-type>*> {instanceField:#C1}
+  #C4 = TypeLiteralConstant(invalid-type)
+  #C5 = TypeLiteralConstant(self::Class<invalid-type>*)
+  #C6 = constructor-tearoff self::Class::•
+  #C7 = instantiation #C6 <invalid-type>
+  #C8 = TypeLiteralConstant(self::Class<self::Class<invalid-type>*>*)
+  #C9 = instantiation #C6 <self::Class<invalid-type>*>
+  #C10 = self::Class<<S extends invalid-type>() →* void> {instanceField:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///type_variable_in_static_context.dart:
+- Class. (from org-dartlang-testcase:///type_variable_in_static_context.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart b/pkg/front_end/testcases/general/type_variable_prefix.dart
index 905f448..9e32d32 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2016, 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.
+
 // @dart=2.9
+
 import "dart:core" as T;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect
index 93f9c23..20eabce 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+// pkg/front_end/testcases/general/type_variable_prefix.dart:10:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.outline.expect
index 5ec5fac..17c7da5 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+// pkg/front_end/testcases/general/type_variable_prefix.dart:10:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect
index 93f9c23..20eabce 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+// pkg/front_end/testcases/general/type_variable_prefix.dart:10:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect
index fe9dcbd..4fbbbaa 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
+// pkg/front_end/testcases/general/type_variable_uses.dart:7:12: Error: Type variables can't be used in static members.
 //   static C<T> staticMethod() {
-//               ^
+//            ^
 //
 // pkg/front_end/testcases/general/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
 //     print(T);
@@ -69,7 +69,7 @@
   const constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  static method staticMethod() → self::C<dynamic>* {
+  static method staticMethod() → self::C<invalid-type>* {
     core::print(#C1);
     invalid-type t;
     self::C<invalid-type>* l;
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.outline.expect
index c7c6526..6825fba 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.outline.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
+// pkg/front_end/testcases/general/type_variable_uses.dart:7:12: Error: Type variables can't be used in static members.
 //   static C<T> staticMethod() {
-//               ^
+//            ^
 //
 import self as self;
 import "dart:core" as core;
@@ -13,7 +13,7 @@
   const constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  static method staticMethod() → self::C<dynamic>*
+  static method staticMethod() → self::C<invalid-type>*
     ;
   method instanceMethod() → self::C<self::C::T*>*
     ;
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect
index fe9dcbd..4fbbbaa 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
+// pkg/front_end/testcases/general/type_variable_uses.dart:7:12: Error: Type variables can't be used in static members.
 //   static C<T> staticMethod() {
-//               ^
+//            ^
 //
 // pkg/front_end/testcases/general/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
 //     print(T);
@@ -69,7 +69,7 @@
   const constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  static method staticMethod() → self::C<dynamic>* {
+  static method staticMethod() → self::C<invalid-type>* {
     core::print(#C1);
     invalid-type t;
     self::C<invalid-type>* l;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
index 39507e3..f8cb2d3 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
@@ -12,7 +12,7 @@
   import "package:module/lib2.dart";
 
   abstract class XSet extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib1::XSet::identity];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     static factory identity() → lib1::XSet*
       return lib2::XLinkedHashSet::identity();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -33,7 +33,7 @@
   import "package:module/lib3.dart";
 
   class XLinkedHashSet extends dart.core::Object implements lib1::XSet {
-    static final field dynamic _redirecting# = <dynamic>[lib2::XLinkedHashSet::identity];
+    static final field dynamic _redirecting# = <dynamic>[#C2];
     static factory identity() → lib2::XLinkedHashSet*
       return new lib3::XIdentityHashSet::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -68,3 +68,7 @@
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib1::XSet::identity
+  #C2 = constructor-tearoff lib2::XLinkedHashSet::identity
+}
diff --git a/pkg/front_end/testcases/incremental/constructor_change.yaml b/pkg/front_end/testcases/incremental/constructor_change.yaml
new file mode 100644
index 0000000..58e4c05
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/constructor_change.yaml
@@ -0,0 +1,79 @@
+# Copyright (c) 2021, 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.md file.
+
+# Compile an application, change a file, but don't change the outline.
+# Try to mess up the hierarchy.
+
+type: newworld
+target: DDC
+worlds:
+  - entry: main.dart
+    experiments: alternative-invalidation-strategy
+    sources:
+      main.dart: |
+        import "lib1.dart";
+        import "lib2.dart";
+        import "lib3.dart";
+
+        main() {
+          Foo foo = new Bar();
+          lib3Method(foo);
+        }
+      lib1.dart: |
+        class Foo {
+          void fooMethod() {
+            // Not filled out.
+          }
+        }
+      lib2.dart: |
+        import "lib1.dart";
+        class Bar extends Foo {
+          void barMethod() {
+            // Not filled out.
+          }
+        }
+      lib3.dart: |
+        import "lib1.dart";
+        import "lib2.dart";
+        void lib3Method(Foo foo) {
+          var f = Bar.new;
+          Foo bar = f();
+          bool equal = foo == bar;
+          print("foo == bar = $equal");
+        }
+    expectedLibraryCount: 4
+  - entry: main.dart
+    experiments: alternative-invalidation-strategy
+    worldType: updated
+    expectInitializeFromDill: false
+    invalidate:
+      - lib1.dart
+    sources:
+      lib1.dart: |
+        class Foo {
+          void fooMethod() {
+            print("fooMethod");
+          }
+        }
+    expectedLibraryCount: 4
+    expectsRebuildBodiesOnly: true
+  - entry: main.dart
+    experiments: alternative-invalidation-strategy
+    worldType: updated
+    expectInitializeFromDill: false
+    invalidate:
+      - lib3.dart
+    sources:
+      lib3.dart: |
+        import "lib1.dart";
+        import "lib2.dart";
+        void lib3Method(Foo foo) {
+          var f = Bar.new;
+          Foo bar = f();
+          bool equal = foo == bar;
+          print("foo == bar = $equal");
+          print("Done!");
+        }
+    expectedLibraryCount: 4
+    expectsRebuildBodiesOnly: true
diff --git a/pkg/front_end/testcases/incremental/constructor_change.yaml.world.1.expect b/pkg/front_end/testcases/incremental/constructor_change.yaml.world.1.expect
new file mode 100644
index 0000000..3885ee0
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/constructor_change.yaml.world.1.expect
@@ -0,0 +1,51 @@
+main = main::main;
+library from "org-dartlang-test:///lib1.dart" as lib1 {
+
+  class Foo extends dart.core::Object {
+    synthetic constructor •() → lib1::Foo
+      : super dart.core::Object::•()
+      ;
+    method fooMethod() → void {}
+    static method _#new#tearOff() → lib1::Foo
+      return new lib1::Foo::•();
+  }
+}
+library from "org-dartlang-test:///lib2.dart" as lib2 {
+
+  import "org-dartlang-test:///lib1.dart";
+
+  class Bar extends lib1::Foo {
+    synthetic constructor •() → lib2::Bar
+      : super lib1::Foo::•()
+      ;
+    method barMethod() → void {}
+    static method _#new#tearOff() → lib2::Bar
+      return new lib2::Bar::•();
+  }
+}
+library from "org-dartlang-test:///lib3.dart" as lib3 {
+
+  import "org-dartlang-test:///lib1.dart";
+  import "org-dartlang-test:///lib2.dart";
+
+  static method lib3Method(lib1::Foo foo) → void {
+    () → lib2::Bar f = #C1;
+    lib1::Foo bar = f(){() → lib2::Bar};
+    dart.core::bool equal = foo =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} bar;
+    dart.core::print("foo == bar = ${equal}");
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib1.dart";
+  import "org-dartlang-test:///lib2.dart";
+  import "org-dartlang-test:///lib3.dart";
+
+  static method main() → dynamic {
+    lib1::Foo foo = new lib2::Bar::•();
+    lib3::lib3Method(foo);
+  }
+}
+constants  {
+  #C1 = static-tearoff lib2::Bar::_#new#tearOff
+}
diff --git a/pkg/front_end/testcases/incremental/constructor_change.yaml.world.2.expect b/pkg/front_end/testcases/incremental/constructor_change.yaml.world.2.expect
new file mode 100644
index 0000000..8b4f83e
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/constructor_change.yaml.world.2.expect
@@ -0,0 +1,53 @@
+main = main::main;
+library from "org-dartlang-test:///lib1.dart" as lib1 {
+
+  class Foo extends dart.core::Object {
+    synthetic constructor •() → lib1::Foo
+      : super dart.core::Object::•()
+      ;
+    method fooMethod() → void {
+      dart.core::print("fooMethod");
+    }
+    static method _#new#tearOff() → lib1::Foo
+      return new lib1::Foo::•();
+  }
+}
+library from "org-dartlang-test:///lib2.dart" as lib2 {
+
+  import "org-dartlang-test:///lib1.dart";
+
+  class Bar extends lib1::Foo {
+    synthetic constructor •() → lib2::Bar
+      : super lib1::Foo::•()
+      ;
+    method barMethod() → void {}
+    static method _#new#tearOff() → lib2::Bar
+      return new lib2::Bar::•();
+  }
+}
+library from "org-dartlang-test:///lib3.dart" as lib3 {
+
+  import "org-dartlang-test:///lib1.dart";
+  import "org-dartlang-test:///lib2.dart";
+
+  static method lib3Method(lib1::Foo foo) → void {
+    () → lib2::Bar f = #C1;
+    lib1::Foo bar = f(){() → lib2::Bar};
+    dart.core::bool equal = foo =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} bar;
+    dart.core::print("foo == bar = ${equal}");
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib1.dart";
+  import "org-dartlang-test:///lib2.dart";
+  import "org-dartlang-test:///lib3.dart";
+
+  static method main() → dynamic {
+    lib1::Foo foo = new lib2::Bar::•();
+    lib3::lib3Method(foo);
+  }
+}
+constants  {
+  #C1 = static-tearoff lib2::Bar::_#new#tearOff
+}
diff --git a/pkg/front_end/testcases/incremental/constructor_change.yaml.world.3.expect b/pkg/front_end/testcases/incremental/constructor_change.yaml.world.3.expect
new file mode 100644
index 0000000..3436a8d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/constructor_change.yaml.world.3.expect
@@ -0,0 +1,54 @@
+main = main::main;
+library from "org-dartlang-test:///lib1.dart" as lib1 {
+
+  class Foo extends dart.core::Object {
+    synthetic constructor •() → lib1::Foo
+      : super dart.core::Object::•()
+      ;
+    method fooMethod() → void {
+      dart.core::print("fooMethod");
+    }
+    static method _#new#tearOff() → lib1::Foo
+      return new lib1::Foo::•();
+  }
+}
+library from "org-dartlang-test:///lib2.dart" as lib2 {
+
+  import "org-dartlang-test:///lib1.dart";
+
+  class Bar extends lib1::Foo {
+    synthetic constructor •() → lib2::Bar
+      : super lib1::Foo::•()
+      ;
+    method barMethod() → void {}
+    static method _#new#tearOff() → lib2::Bar
+      return new lib2::Bar::•();
+  }
+}
+library from "org-dartlang-test:///lib3.dart" as lib3 {
+
+  import "org-dartlang-test:///lib1.dart";
+  import "org-dartlang-test:///lib2.dart";
+
+  static method lib3Method(lib1::Foo foo) → void {
+    () → lib2::Bar f = #C1;
+    lib1::Foo bar = f(){() → lib2::Bar};
+    dart.core::bool equal = foo =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} bar;
+    dart.core::print("foo == bar = ${equal}");
+    dart.core::print("Done!");
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib1.dart";
+  import "org-dartlang-test:///lib2.dart";
+  import "org-dartlang-test:///lib3.dart";
+
+  static method main() → dynamic {
+    lib1::Foo foo = new lib2::Bar::•();
+    lib3::lib3Method(foo);
+  }
+}
+constants  {
+  #C1 = static-tearoff lib2::Bar::_#new#tearOff
+}
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
index 938df3f..b30010d 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
@@ -9,7 +9,7 @@
 //
 
   class C extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib::C::e4];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     constructor •() → lib::C*
       : super dart.core::Object::•()
       ;
@@ -35,3 +35,6 @@
     lib::C* c = new lib::C::•();
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib::C::e4
+}
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
index 991ad94..cc3198c 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
@@ -9,7 +9,7 @@
 //
 
   class C extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib::C::e4];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     constructor •() → lib::C*
       : super dart.core::Object::•()
       ;
@@ -36,3 +36,6 @@
     dart.core::print(c);
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib::C::e4
+}
diff --git a/pkg/front_end/testcases/incremental/external_extension_field.yaml b/pkg/front_end/testcases/incremental/external_extension_field.yaml
new file mode 100644
index 0000000..27097d3
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/external_extension_field.yaml
@@ -0,0 +1,33 @@
+# Copyright (c) 2021, 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.md file.
+
+type: newworld
+worlds:
+  - entry: main.dart
+    experiments: alternative-invalidation-strategy
+    sources:
+      main.dart: |
+        extension E on String {
+          external int field;
+        }
+        main() {
+          "foo".field = "bar".field;
+        }
+    expectedLibraryCount: 1
+  - entry: main.dart
+    experiments: alternative-invalidation-strategy
+    worldType: updated
+    expectInitializeFromDill: false
+    invalidate:
+      - main.dart
+    sources:
+      main.dart: |
+        extension E on String {
+          external int field;
+        }
+        main() {
+          "foo".field = "bar".field;
+        }
+    expectedLibraryCount: 1
+    expectsRebuildBodiesOnly: true
diff --git a/pkg/front_end/testcases/incremental/external_extension_field.yaml.world.1.expect b/pkg/front_end/testcases/incremental/external_extension_field.yaml.world.1.expect
new file mode 100644
index 0000000..3241fbe
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/external_extension_field.yaml.world.1.expect
@@ -0,0 +1,13 @@
+main = main::main;
+library from "org-dartlang-test:///main.dart" as main {
+
+  extension E on dart.core::String {
+    get field = main::E|get#field;
+    set field = main::E|set#field;
+  }
+  external static method E|get#field(dart.core::String #this) → dart.core::int;
+  external static method E|set#field(dart.core::String #this, dart.core::int #externalFieldValue) → void;
+  static method main() → dynamic {
+    main::E|set#field("foo", main::E|get#field("bar"));
+  }
+}
diff --git a/pkg/front_end/testcases/incremental/external_extension_field.yaml.world.2.expect b/pkg/front_end/testcases/incremental/external_extension_field.yaml.world.2.expect
new file mode 100644
index 0000000..3241fbe
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/external_extension_field.yaml.world.2.expect
@@ -0,0 +1,13 @@
+main = main::main;
+library from "org-dartlang-test:///main.dart" as main {
+
+  extension E on dart.core::String {
+    get field = main::E|get#field;
+    set field = main::E|set#field;
+  }
+  external static method E|get#field(dart.core::String #this) → dart.core::int;
+  external static method E|set#field(dart.core::String #this, dart.core::int #externalFieldValue) → void;
+  static method main() → dynamic {
+    main::E|set#field("foo", main::E|get#field("bar"));
+  }
+}
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
index 41475f6..ff0ff25 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
@@ -51,32 +51,32 @@
       return new foo::Foo::_($creationLocationd_0dea112b090073317d4: #C12);
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C13]/*isLegacy*/;
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#new#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C17);
     static method _#_#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C18);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C19);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C20]/*isLegacy*/;
     const constructor __({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      return #C22;
+      return #C24;
     static method _#new#tearOff() → foo::Baz
-      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
+      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C25);
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#_#tearOff() → foo::Baz
-      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C25);
-    static method _#__#tearOff() → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C27);
+    static method _#__#tearOff() → foo::Baz
+      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C29);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
@@ -87,25 +87,25 @@
         return new foo::Boz::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
       }
       else {
-        return #C32;
+        return #C34;
       }
     }
     static method _#new#tearOff({required dart.core::bool createNew = #C1}) → foo::Boz
-      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C33);
+      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C35);
     static method _#_#tearOff() → foo::Boz
-      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C35);
+      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C37);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///foo.dart";
 
-  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C38);
-  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C39);
-  static field foo::Bar constBar = #C42;
-  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C43);
-  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C44);
-  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C46);
+  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C40);
+  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C41);
+  static field foo::Bar constBar = #C44;
+  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C45);
+  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C46);
+  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C48);
 }
 constants  {
   #C1 = null
@@ -120,38 +120,40 @@
   #C10 = 3.0
   #C11 = 7.0
   #C12 = wid::_Location {file:#C2, line:#C10, column:#C11, name:#C5, parameterLocations:#C1}
-  #C13 = 4.0
-  #C14 = 42.0
-  #C15 = "Bar"
-  #C16 = wid::_Location {file:#C2, line:#C13, column:#C14, name:#C15, parameterLocations:#C1}
-  #C17 = 5.0
-  #C18 = wid::_Location {file:#C2, line:#C17, column:#C11, name:#C15, parameterLocations:#C1}
-  #C19 = 6.0
-  #C20 = "Baz"
-  #C21 = wid::_Location {file:#C2, line:#C19, column:#C4, name:#C20, parameterLocations:#C1}
-  #C22 = foo::Baz {_location:#C21}
-  #C23 = wid::_Location {file:#C2, line:#C19, column:#C8, name:#C20, parameterLocations:#C1}
-  #C24 = 15.0
-  #C25 = wid::_Location {file:#C2, line:#C11, column:#C24, name:#C20, parameterLocations:#C1}
-  #C26 = 8.0
-  #C27 = wid::_Location {file:#C2, line:#C26, column:#C11, name:#C20, parameterLocations:#C1}
-  #C28 = 9.0
-  #C29 = 128.0
-  #C30 = "Boz"
-  #C31 = wid::_Location {file:#C2, line:#C28, column:#C29, name:#C30, parameterLocations:#C1}
-  #C32 = foo::Boz {_location:#C31}
-  #C33 = wid::_Location {file:#C2, line:#C28, column:#C8, name:#C30, parameterLocations:#C1}
-  #C34 = 10.0
-  #C35 = wid::_Location {file:#C2, line:#C34, column:#C11, name:#C30, parameterLocations:#C1}
-  #C36 = "org-dartlang-test:///main.dart"
-  #C37 = 18.0
-  #C38 = wid::_Location {file:#C36, line:#C3, column:#C37, name:#C5, parameterLocations:#C1}
-  #C39 = wid::_Location {file:#C36, line:#C10, column:#C37, name:#C15, parameterLocations:#C1}
-  #C40 = 22.0
-  #C41 = wid::_Location {file:#C36, line:#C13, column:#C40, name:#C15, parameterLocations:#C1}
-  #C42 = foo::Bar {_location:#C41}
-  #C43 = wid::_Location {file:#C36, line:#C17, column:#C37, name:#C20, parameterLocations:#C1}
-  #C44 = wid::_Location {file:#C36, line:#C19, column:#C37, name:#C30, parameterLocations:#C1}
-  #C45 = 20.0
-  #C46 = wid::_Location {file:#C36, line:#C11, column:#C45, name:#C30, parameterLocations:#C1}
+  #C13 = constructor-tearoff foo::Bar::•
+  #C14 = 4.0
+  #C15 = 42.0
+  #C16 = "Bar"
+  #C17 = wid::_Location {file:#C2, line:#C14, column:#C15, name:#C16, parameterLocations:#C1}
+  #C18 = 5.0
+  #C19 = wid::_Location {file:#C2, line:#C18, column:#C11, name:#C16, parameterLocations:#C1}
+  #C20 = constructor-tearoff foo::Baz::_
+  #C21 = 6.0
+  #C22 = "Baz"
+  #C23 = wid::_Location {file:#C2, line:#C21, column:#C4, name:#C22, parameterLocations:#C1}
+  #C24 = foo::Baz {_location:#C23}
+  #C25 = wid::_Location {file:#C2, line:#C21, column:#C8, name:#C22, parameterLocations:#C1}
+  #C26 = 15.0
+  #C27 = wid::_Location {file:#C2, line:#C11, column:#C26, name:#C22, parameterLocations:#C1}
+  #C28 = 8.0
+  #C29 = wid::_Location {file:#C2, line:#C28, column:#C11, name:#C22, parameterLocations:#C1}
+  #C30 = 9.0
+  #C31 = 128.0
+  #C32 = "Boz"
+  #C33 = wid::_Location {file:#C2, line:#C30, column:#C31, name:#C32, parameterLocations:#C1}
+  #C34 = foo::Boz {_location:#C33}
+  #C35 = wid::_Location {file:#C2, line:#C30, column:#C8, name:#C32, parameterLocations:#C1}
+  #C36 = 10.0
+  #C37 = wid::_Location {file:#C2, line:#C36, column:#C11, name:#C32, parameterLocations:#C1}
+  #C38 = "org-dartlang-test:///main.dart"
+  #C39 = 18.0
+  #C40 = wid::_Location {file:#C38, line:#C3, column:#C39, name:#C5, parameterLocations:#C1}
+  #C41 = wid::_Location {file:#C38, line:#C10, column:#C39, name:#C16, parameterLocations:#C1}
+  #C42 = 22.0
+  #C43 = wid::_Location {file:#C38, line:#C14, column:#C42, name:#C16, parameterLocations:#C1}
+  #C44 = foo::Bar {_location:#C43}
+  #C45 = wid::_Location {file:#C38, line:#C18, column:#C39, name:#C22, parameterLocations:#C1}
+  #C46 = wid::_Location {file:#C38, line:#C21, column:#C39, name:#C32, parameterLocations:#C1}
+  #C47 = 20.0
+  #C48 = wid::_Location {file:#C38, line:#C11, column:#C47, name:#C32, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
index 6f610b2..47c45a0 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
@@ -51,32 +51,32 @@
       return new foo::Foo::_($creationLocationd_0dea112b090073317d4: #C12);
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C13]/*isLegacy*/;
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#new#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C17);
     static method _#_#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C18);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C19);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C20]/*isLegacy*/;
     const constructor __({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      return #C22;
+      return #C24;
     static method _#new#tearOff() → foo::Baz
-      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
+      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C25);
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#_#tearOff() → foo::Baz
-      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C25);
-    static method _#__#tearOff() → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C27);
+    static method _#__#tearOff() → foo::Baz
+      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C29);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
@@ -87,13 +87,13 @@
         return new foo::Boz::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
       }
       else {
-        return #C32;
+        return #C34;
       }
     }
     static method _#new#tearOff({required dart.core::bool createNew = #C1}) → foo::Boz
-      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C33);
+      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C35);
     static method _#_#tearOff() → foo::Boz
-      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C35);
+      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C37);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -114,27 +114,29 @@
   #C10 = 3.0
   #C11 = 7.0
   #C12 = wid::_Location {file:#C2, line:#C10, column:#C11, name:#C5, parameterLocations:#C1}
-  #C13 = 4.0
-  #C14 = 42.0
-  #C15 = "Bar"
-  #C16 = wid::_Location {file:#C2, line:#C13, column:#C14, name:#C15, parameterLocations:#C1}
-  #C17 = 5.0
-  #C18 = wid::_Location {file:#C2, line:#C17, column:#C11, name:#C15, parameterLocations:#C1}
-  #C19 = 6.0
-  #C20 = "Baz"
-  #C21 = wid::_Location {file:#C2, line:#C19, column:#C4, name:#C20, parameterLocations:#C1}
-  #C22 = foo::Baz {_location:#C21}
-  #C23 = wid::_Location {file:#C2, line:#C19, column:#C8, name:#C20, parameterLocations:#C1}
-  #C24 = 15.0
-  #C25 = wid::_Location {file:#C2, line:#C11, column:#C24, name:#C20, parameterLocations:#C1}
-  #C26 = 8.0
-  #C27 = wid::_Location {file:#C2, line:#C26, column:#C11, name:#C20, parameterLocations:#C1}
-  #C28 = 9.0
-  #C29 = 128.0
-  #C30 = "Boz"
-  #C31 = wid::_Location {file:#C2, line:#C28, column:#C29, name:#C30, parameterLocations:#C1}
-  #C32 = foo::Boz {_location:#C31}
-  #C33 = wid::_Location {file:#C2, line:#C28, column:#C8, name:#C30, parameterLocations:#C1}
-  #C34 = 10.0
-  #C35 = wid::_Location {file:#C2, line:#C34, column:#C11, name:#C30, parameterLocations:#C1}
+  #C13 = constructor-tearoff foo::Bar::•
+  #C14 = 4.0
+  #C15 = 42.0
+  #C16 = "Bar"
+  #C17 = wid::_Location {file:#C2, line:#C14, column:#C15, name:#C16, parameterLocations:#C1}
+  #C18 = 5.0
+  #C19 = wid::_Location {file:#C2, line:#C18, column:#C11, name:#C16, parameterLocations:#C1}
+  #C20 = constructor-tearoff foo::Baz::_
+  #C21 = 6.0
+  #C22 = "Baz"
+  #C23 = wid::_Location {file:#C2, line:#C21, column:#C4, name:#C22, parameterLocations:#C1}
+  #C24 = foo::Baz {_location:#C23}
+  #C25 = wid::_Location {file:#C2, line:#C21, column:#C8, name:#C22, parameterLocations:#C1}
+  #C26 = 15.0
+  #C27 = wid::_Location {file:#C2, line:#C11, column:#C26, name:#C22, parameterLocations:#C1}
+  #C28 = 8.0
+  #C29 = wid::_Location {file:#C2, line:#C28, column:#C11, name:#C22, parameterLocations:#C1}
+  #C30 = 9.0
+  #C31 = 128.0
+  #C32 = "Boz"
+  #C33 = wid::_Location {file:#C2, line:#C30, column:#C31, name:#C32, parameterLocations:#C1}
+  #C34 = foo::Boz {_location:#C33}
+  #C35 = wid::_Location {file:#C2, line:#C30, column:#C8, name:#C32, parameterLocations:#C1}
+  #C36 = 10.0
+  #C37 = wid::_Location {file:#C2, line:#C36, column:#C11, name:#C32, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
index 41475f6..ff0ff25 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
@@ -51,32 +51,32 @@
       return new foo::Foo::_($creationLocationd_0dea112b090073317d4: #C12);
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C13]/*isLegacy*/;
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#new#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C17);
     static method _#_#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C18);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C19);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C20]/*isLegacy*/;
     const constructor __({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      return #C22;
+      return #C24;
     static method _#new#tearOff() → foo::Baz
-      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
+      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C25);
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#_#tearOff() → foo::Baz
-      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C25);
-    static method _#__#tearOff() → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C27);
+    static method _#__#tearOff() → foo::Baz
+      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C29);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
@@ -87,25 +87,25 @@
         return new foo::Boz::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
       }
       else {
-        return #C32;
+        return #C34;
       }
     }
     static method _#new#tearOff({required dart.core::bool createNew = #C1}) → foo::Boz
-      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C33);
+      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C35);
     static method _#_#tearOff() → foo::Boz
-      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C35);
+      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C37);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///foo.dart";
 
-  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C38);
-  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C39);
-  static field foo::Bar constBar = #C42;
-  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C43);
-  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C44);
-  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C46);
+  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C40);
+  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C41);
+  static field foo::Bar constBar = #C44;
+  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C45);
+  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C46);
+  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C48);
 }
 constants  {
   #C1 = null
@@ -120,38 +120,40 @@
   #C10 = 3.0
   #C11 = 7.0
   #C12 = wid::_Location {file:#C2, line:#C10, column:#C11, name:#C5, parameterLocations:#C1}
-  #C13 = 4.0
-  #C14 = 42.0
-  #C15 = "Bar"
-  #C16 = wid::_Location {file:#C2, line:#C13, column:#C14, name:#C15, parameterLocations:#C1}
-  #C17 = 5.0
-  #C18 = wid::_Location {file:#C2, line:#C17, column:#C11, name:#C15, parameterLocations:#C1}
-  #C19 = 6.0
-  #C20 = "Baz"
-  #C21 = wid::_Location {file:#C2, line:#C19, column:#C4, name:#C20, parameterLocations:#C1}
-  #C22 = foo::Baz {_location:#C21}
-  #C23 = wid::_Location {file:#C2, line:#C19, column:#C8, name:#C20, parameterLocations:#C1}
-  #C24 = 15.0
-  #C25 = wid::_Location {file:#C2, line:#C11, column:#C24, name:#C20, parameterLocations:#C1}
-  #C26 = 8.0
-  #C27 = wid::_Location {file:#C2, line:#C26, column:#C11, name:#C20, parameterLocations:#C1}
-  #C28 = 9.0
-  #C29 = 128.0
-  #C30 = "Boz"
-  #C31 = wid::_Location {file:#C2, line:#C28, column:#C29, name:#C30, parameterLocations:#C1}
-  #C32 = foo::Boz {_location:#C31}
-  #C33 = wid::_Location {file:#C2, line:#C28, column:#C8, name:#C30, parameterLocations:#C1}
-  #C34 = 10.0
-  #C35 = wid::_Location {file:#C2, line:#C34, column:#C11, name:#C30, parameterLocations:#C1}
-  #C36 = "org-dartlang-test:///main.dart"
-  #C37 = 18.0
-  #C38 = wid::_Location {file:#C36, line:#C3, column:#C37, name:#C5, parameterLocations:#C1}
-  #C39 = wid::_Location {file:#C36, line:#C10, column:#C37, name:#C15, parameterLocations:#C1}
-  #C40 = 22.0
-  #C41 = wid::_Location {file:#C36, line:#C13, column:#C40, name:#C15, parameterLocations:#C1}
-  #C42 = foo::Bar {_location:#C41}
-  #C43 = wid::_Location {file:#C36, line:#C17, column:#C37, name:#C20, parameterLocations:#C1}
-  #C44 = wid::_Location {file:#C36, line:#C19, column:#C37, name:#C30, parameterLocations:#C1}
-  #C45 = 20.0
-  #C46 = wid::_Location {file:#C36, line:#C11, column:#C45, name:#C30, parameterLocations:#C1}
+  #C13 = constructor-tearoff foo::Bar::•
+  #C14 = 4.0
+  #C15 = 42.0
+  #C16 = "Bar"
+  #C17 = wid::_Location {file:#C2, line:#C14, column:#C15, name:#C16, parameterLocations:#C1}
+  #C18 = 5.0
+  #C19 = wid::_Location {file:#C2, line:#C18, column:#C11, name:#C16, parameterLocations:#C1}
+  #C20 = constructor-tearoff foo::Baz::_
+  #C21 = 6.0
+  #C22 = "Baz"
+  #C23 = wid::_Location {file:#C2, line:#C21, column:#C4, name:#C22, parameterLocations:#C1}
+  #C24 = foo::Baz {_location:#C23}
+  #C25 = wid::_Location {file:#C2, line:#C21, column:#C8, name:#C22, parameterLocations:#C1}
+  #C26 = 15.0
+  #C27 = wid::_Location {file:#C2, line:#C11, column:#C26, name:#C22, parameterLocations:#C1}
+  #C28 = 8.0
+  #C29 = wid::_Location {file:#C2, line:#C28, column:#C11, name:#C22, parameterLocations:#C1}
+  #C30 = 9.0
+  #C31 = 128.0
+  #C32 = "Boz"
+  #C33 = wid::_Location {file:#C2, line:#C30, column:#C31, name:#C32, parameterLocations:#C1}
+  #C34 = foo::Boz {_location:#C33}
+  #C35 = wid::_Location {file:#C2, line:#C30, column:#C8, name:#C32, parameterLocations:#C1}
+  #C36 = 10.0
+  #C37 = wid::_Location {file:#C2, line:#C36, column:#C11, name:#C32, parameterLocations:#C1}
+  #C38 = "org-dartlang-test:///main.dart"
+  #C39 = 18.0
+  #C40 = wid::_Location {file:#C38, line:#C3, column:#C39, name:#C5, parameterLocations:#C1}
+  #C41 = wid::_Location {file:#C38, line:#C10, column:#C39, name:#C16, parameterLocations:#C1}
+  #C42 = 22.0
+  #C43 = wid::_Location {file:#C38, line:#C14, column:#C42, name:#C16, parameterLocations:#C1}
+  #C44 = foo::Bar {_location:#C43}
+  #C45 = wid::_Location {file:#C38, line:#C18, column:#C39, name:#C22, parameterLocations:#C1}
+  #C46 = wid::_Location {file:#C38, line:#C21, column:#C39, name:#C32, parameterLocations:#C1}
+  #C47 = 20.0
+  #C48 = wid::_Location {file:#C38, line:#C11, column:#C47, name:#C32, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
index 008ff7a..20a26f1 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
@@ -2,7 +2,7 @@
 library from "org-dartlang-test:///foo.dart" as foo {
 
   abstract class Key extends dart.core::Object /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Key::•];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     const constructor empty() → foo::Key*
       : super dart.core::Object::•()
       ;
@@ -45,3 +45,6 @@
     dart.core::print("${k}");
   }
 }
+constants  {
+  #C1 = constructor-tearoff foo::Key::•
+}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
index 02964ab..b8a5016 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     static factory •() → lib1::Foo*
       return new lib2::Bar::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -51,3 +51,6 @@
     lib1::libMethod();
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib1::Foo::•
+}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
index 14d998a..ba249a3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
@@ -4,7 +4,7 @@
   import "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     static factory •() → lib1::Foo*
       return new lib2::Bar::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -52,3 +52,6 @@
     lib1::libMethod();
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib1::Foo::•
+}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
index 8cde08e..7aa880b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
@@ -2,7 +2,7 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[main::Foo::bar];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     constructor •() → main::Foo*
       : super dart.core::Object::•()
       ;
@@ -26,3 +26,6 @@
       ;
   }
 }
+constants  {
+  #C1 = constructor-tearoff main::Foo::bar
+}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
index 8cde08e..7aa880b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
@@ -2,7 +2,7 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[main::Foo::bar];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     constructor •() → main::Foo*
       : super dart.core::Object::•()
       ;
@@ -26,3 +26,6 @@
       ;
   }
 }
+constants  {
+  #C1 = constructor-tearoff main::Foo::bar
+}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
index f15273b..1d8965d 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
@@ -43,6 +43,9 @@
   ffi::AllocatorAlloc,
   ffi::Array,
   ffi::ArrayArray,
+  ffi::Bool,
+  ffi::BoolArray,
+  ffi::BoolPointer,
   ffi::DartRepresentationOf,
   ffi::Dart_CObject,
   ffi::Double,
@@ -113,6 +116,9 @@
   ffi::AllocatorAlloc,
   ffi::Array,
   ffi::ArrayArray,
+  ffi::Bool,
+  ffi::BoolArray,
+  ffi::BoolPointer,
   ffi::DartRepresentationOf,
   ffi::Dart_CObject,
   ffi::Double,
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
index 0b32258..6bf1e19 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
@@ -43,6 +43,9 @@
   ffi::AllocatorAlloc,
   ffi::Array,
   ffi::ArrayArray,
+  ffi::Bool,
+  ffi::BoolArray,
+  ffi::BoolPointer,
   ffi::DartRepresentationOf,
   ffi::Dart_CObject,
   ffi::Double,
@@ -113,6 +116,9 @@
   ffi::AllocatorAlloc,
   ffi::Array,
   ffi::ArrayArray,
+  ffi::Bool,
+  ffi::BoolArray,
+  ffi::BoolPointer,
   ffi::DartRepresentationOf,
   ffi::Dart_CObject,
   ffi::Double,
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
index ec2714c..7f8c3dd 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get t() → self::C::T*;
   abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
@@ -38,3 +38,7 @@
 static method main() → dynamic {
   self::C<core::int*>* x = new self::CImpl::•<core::int*>(42);
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
index a882ba7..f6167ed 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
@@ -36,3 +36,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructors_infer_from_arguments_redirecting_factory.dart:8:16 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
index ec2714c..7f8c3dd 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get t() → self::C::T*;
   abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
@@ -38,3 +38,7 @@
 static method main() → dynamic {
   self::C<core::int*>* x = new self::CImpl::•<core::int*>(42);
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
index cf8581d..a2fd0ae 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get t() → self::C::T*;
   abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
@@ -40,3 +40,7 @@
 static method main() → dynamic {
   self::C<core::int*>* x = self::CImpl::•<core::int*>(42);
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
index f2e7522..0980409 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
@@ -38,3 +38,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructors_infer_from_arguments_redirecting_factory_to_factory.dart:8:16 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
index cf8581d..a2fd0ae 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get t() → self::C::T*;
   abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
@@ -40,3 +40,7 @@
 static method main() → dynamic {
   self::C<core::int*>* x = self::CImpl::•<core::int*>(42);
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
index 937b216..a033796 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
@@ -177,13 +177,13 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = instantiation math::max <core::int*>
-  #C3 = instantiation math::max <core::double*>
-  #C4 = instantiation math::max <core::num*>
-  #C5 = instantiation math::max <core::Object*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::double*>
+  #C4 = instantiation #C1 <core::num*>
+  #C5 = instantiation #C1 <core::Object*>
   #C6 = static-tearoff math::min
-  #C7 = instantiation math::min <core::int*>
-  #C8 = instantiation math::min <core::double*>
-  #C9 = instantiation math::min <core::num*>
-  #C10 = instantiation math::min <core::Object*>
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = instantiation #C6 <core::double*>
+  #C9 = instantiation #C6 <core::num*>
+  #C10 = instantiation #C6 <core::Object*>
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
index 937b216..a033796 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
@@ -177,13 +177,13 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = instantiation math::max <core::int*>
-  #C3 = instantiation math::max <core::double*>
-  #C4 = instantiation math::max <core::num*>
-  #C5 = instantiation math::max <core::Object*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::double*>
+  #C4 = instantiation #C1 <core::num*>
+  #C5 = instantiation #C1 <core::Object*>
   #C6 = static-tearoff math::min
-  #C7 = instantiation math::min <core::int*>
-  #C8 = instantiation math::min <core::double*>
-  #C9 = instantiation math::min <core::num*>
-  #C10 = instantiation math::min <core::Object*>
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = instantiation #C6 <core::double*>
+  #C9 = instantiation #C6 <core::num*>
+  #C10 = instantiation #C6 <core::Object*>
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
index 5a16fe2..5a1deb3 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
@@ -45,5 +45,5 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = instantiation math::max <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
index 39218a6..28f2a02 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
@@ -45,5 +45,5 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = instantiation math::max <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
index ba2952c..f272f74 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
@@ -45,7 +45,7 @@
 
 constants  {
   #C1 = static-tearoff self::f
-  #C2 = instantiation self::f <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::C::g
-  #C4 = instantiation self::C::g <core::int*>
+  #C4 = instantiation #C3 <core::int*>
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
index ba2952c..f272f74 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
 
 constants  {
   #C1 = static-tearoff self::f
-  #C2 = instantiation self::f <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::C::g
-  #C4 = instantiation self::C::g <core::int*>
+  #C4 = instantiation #C3 <core::int*>
 }
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart
new file mode 100644
index 0000000..8d34e3c
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart
@@ -0,0 +1,86 @@
+// Copyright (c) 2021, 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.
+
+class A {
+  A(int x, int y, {required int z});
+
+  factory A.foo(int x, int y, {required int z}) => new A(x, y, z: z);
+
+  void Function(int x, int y, {required int z}) get property => throw 42;
+
+  void bar(int x, int y, {required int z}) {}
+}
+
+typedef B = A;
+
+foo(int x, int y, {required int z}) {}
+
+extension E on A {
+  method1() {
+    method2(foo: 1, 2); // This call.
+  }
+  method2(int bar, {int? foo}) {}
+}
+
+test(dynamic d, Function f, A a) {
+  void local(int x, int y, {required int z}) {}
+
+  // StaticInvocation.
+  foo(1, 2, z: 3);
+  foo(1, z: 2, 3);
+  foo(z: 1, 2, 3);
+
+  // FactoryConstructorInvocation.
+  new A.foo(1, 2, z: 3);
+  new A.foo(1, z: 2, 3);
+  new A.foo(z: 1, 2, 3);
+  new B.foo(1, 2, z: 3);
+  new B.foo(1, z: 2, 3);
+  new B.foo(z: 1, 2, 3);
+
+  // ConstructorInvocation.
+  new A(1, 2, z: 3);
+  new A(1, z: 2, 3);
+  new A(z: 1, 2, 3);
+  new B(1, 2, z: 3);
+  new B(1, z: 2, 3);
+  new B(z: 1, 2, 3);
+
+  // DynamicInvocation.
+  d(1, 2, z: 3);
+  d(1, z: 2, 3);
+  d(z: 1, 2, 3);
+
+  // FunctionInvocation.
+  f(1, 2, z: 3);
+  f(1, z: 2, 3);
+  f(z: 1, 2, 3);
+
+  // InstanceGetterInvocation.
+  a.property(1, 2, z: 3);
+  a.property(1, z: 2, 3);
+  a.property(z: 1, 2, 3);
+
+  // InstanceInvocation.
+  a.bar(1, 2, z: 3);
+  a.bar(1, z: 2, 3);
+  a.bar(z: 1, 2, 3);
+
+  // LocalFunctionInvocation.
+  local(1, 2, z: 3);
+  local(1, z: 2, 3);
+  local(z: 1, 2, 3);
+}
+
+class Test extends A {
+  Test() : super(1, 2, z: 3);
+
+  test() {
+    super.bar(1, 2, z: 3);
+    super.bar(1, z: 2, 3);
+    super.bar(z: 1, 2, 3);
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.expect
new file mode 100644
index 0000000..2f58211
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef B = self::A;
+class A extends core::Object {
+  constructor •(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    : super core::Object::•()
+    ;
+  static factory foo(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    return new self::A::•(x, y, z: z);
+  get property() → (core::int, core::int, {required z: core::int}) → void
+    return throw 42;
+  method bar(core::int x, core::int y, {required core::int z = #C1}) → void {}
+}
+class Test extends self::A {
+  constructor •() → self::Test
+    : super self::A::•(1, 2, z: 3)
+    ;
+  method test() → dynamic {
+    super.{self::A::bar}(1, 2, z: 3);
+    let final core::int #t1 = 1 in let final core::int #t2 = 2 in super.{self::A::bar}(#t1, 3, z: #t2);
+    let final core::int #t3 = 1 in super.{self::A::bar}(2, 3, z: #t3);
+  }
+}
+extension E on self::A {
+  method method1 = self::E|method1;
+  tearoff method1 = self::E|get#method1;
+  method method2 = self::E|method2;
+  tearoff method2 = self::E|get#method2;
+}
+static method foo(core::int x, core::int y, {required core::int z = #C1}) → dynamic {}
+static method E|method1(lowered final self::A #this) → dynamic {
+  let final self::A #t4 = #this in let final core::int #t5 = 1 in self::E|method2(#t4, 2, foo: #t5);
+}
+static method E|get#method1(lowered final self::A #this) → () → dynamic
+  return () → dynamic => self::E|method1(#this);
+static method E|method2(lowered final self::A #this, core::int bar, {core::int? foo = #C1}) → dynamic {}
+static method E|get#method2(lowered final self::A #this) → (core::int, {foo: core::int?}) → dynamic
+  return (core::int bar, {core::int? foo = #C1}) → dynamic => self::E|method2(#this, bar, foo: foo);
+static method test(dynamic d, core::Function f, self::A a) → dynamic {
+  function local(core::int x, core::int y, {required core::int z = #C1}) → void {}
+  self::foo(1, 2, z: 3);
+  let final core::int #t6 = 1 in let final core::int #t7 = 2 in self::foo(#t6, 3, z: #t7);
+  let final core::int #t8 = 1 in self::foo(2, 3, z: #t8);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t9 = 1 in let final core::int #t10 = 2 in self::A::foo(#t9, 3, z: #t10);
+  let final core::int #t11 = 1 in self::A::foo(2, 3, z: #t11);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t12 = 1 in let final core::int #t13 = 2 in self::A::foo(#t12, 3, z: #t13);
+  let final core::int #t14 = 1 in self::A::foo(2, 3, z: #t14);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t15 = 1 in let final core::int #t16 = 2 in new self::A::•(#t15, 3, z: #t16);
+  let final core::int #t17 = 1 in new self::A::•(2, 3, z: #t17);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t18 = 1 in let final core::int #t19 = 2 in new self::A::•(#t18, 3, z: #t19);
+  let final core::int #t20 = 1 in new self::A::•(2, 3, z: #t20);
+  d{dynamic}.call(1, 2, z: 3);
+  let final core::int #t21 = 1 in let final core::int #t22 = 2 in d{dynamic}.call(#t21, 3, z: #t22);
+  let final core::int #t23 = 1 in d{dynamic}.call(2, 3, z: #t23);
+  f(1, 2, z: 3);
+  let final core::int #t24 = 1 in let final core::int #t25 = 2 in f(#t24, 3, z: #t25);
+  let final core::int #t26 = 1 in f(2, 3, z: #t26);
+  let final self::A #t27 = a in let final core::int #t28 = 1 in let final core::int #t29 = 2 in let final core::int #t30 = 3 in #t27.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t28, #t29, z: #t30){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t31 = a in let final core::int #t32 = 1 in let final core::int #t33 = 2 in let final core::int #t34 = 3 in #t31.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t32, #t34, z: #t33){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t35 = a in let final core::int #t36 = 1 in let final core::int #t37 = 2 in let final core::int #t38 = 3 in #t35.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t37, #t38, z: #t36){(core::int, core::int, {required z: core::int}) → void};
+  a.{self::A::bar}(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t39 = a in let final core::int #t40 = 1 in let final core::int #t41 = 2 in #t39.{self::A::bar}(#t40, 3, z: #t41){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t42 = a in let final core::int #t43 = 1 in #t42.{self::A::bar}(2, 3, z: #t43){(core::int, core::int, {required z: core::int}) → void};
+  local(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t44 = 1 in let final core::int #t45 = 2 in local(#t44, 3, z: #t45){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t46 = 1 in local(2, 3, z: #t46){(core::int, core::int, {required z: core::int}) → void};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect
new file mode 100644
index 0000000..c92ba29
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect
@@ -0,0 +1,121 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef B = self::A;
+class A extends core::Object {
+  constructor •(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    : super core::Object::•()
+    ;
+  static factory foo(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    return new self::A::•(x, y, z: z);
+  get property() → (core::int, core::int, {required z: core::int}) → void
+    return throw 42;
+  method bar(core::int x, core::int y, {required core::int z = #C1}) → void {}
+}
+class Test extends self::A {
+  constructor •() → self::Test
+    : super self::A::•(1, 2, z: 3)
+    ;
+  method test() → dynamic {
+    super.{self::A::bar}(1, 2, z: 3);
+    let final core::int #t1 = 1 in let final core::int #t2 = 2 in super.{self::A::bar}(#t1, 3, z: #t2);
+    let final core::int #t3 = 1 in super.{self::A::bar}(2, 3, z: #t3);
+  }
+}
+extension E on self::A {
+  method method1 = self::E|method1;
+  tearoff method1 = self::E|get#method1;
+  method method2 = self::E|method2;
+  tearoff method2 = self::E|get#method2;
+}
+static method foo(core::int x, core::int y, {required core::int z = #C1}) → dynamic {}
+static method E|method1(lowered final self::A #this) → dynamic {
+  let final self::A #t4 = #this in let final core::int #t5 = 1 in self::E|method2(#t4, 2, foo: #t5);
+}
+static method E|get#method1(lowered final self::A #this) → () → dynamic
+  return () → dynamic => self::E|method1(#this);
+static method E|method2(lowered final self::A #this, core::int bar, {core::int? foo = #C1}) → dynamic {}
+static method E|get#method2(lowered final self::A #this) → (core::int, {foo: core::int?}) → dynamic
+  return (core::int bar, {core::int? foo = #C1}) → dynamic => self::E|method2(#this, bar, foo: foo);
+static method test(dynamic d, core::Function f, self::A a) → dynamic {
+  function local(core::int x, core::int y, {required core::int z = #C1}) → void {}
+  self::foo(1, 2, z: 3);
+  let final core::int #t6 = 1 in let final core::int #t7 = 2 in self::foo(#t6, 3, z: #t7);
+  let final core::int #t8 = 1 in self::foo(2, 3, z: #t8);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t9 = 1 in let final core::int #t10 = 2 in self::A::foo(#t9, 3, z: #t10);
+  let final core::int #t11 = 1 in self::A::foo(2, 3, z: #t11);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t12 = 1 in let final core::int #t13 = 2 in self::A::foo(#t12, 3, z: #t13);
+  let final core::int #t14 = 1 in self::A::foo(2, 3, z: #t14);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t15 = 1 in let final core::int #t16 = 2 in new self::A::•(#t15, 3, z: #t16);
+  let final core::int #t17 = 1 in new self::A::•(2, 3, z: #t17);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t18 = 1 in let final core::int #t19 = 2 in new self::A::•(#t18, 3, z: #t19);
+  let final core::int #t20 = 1 in new self::A::•(2, 3, z: #t20);
+  d{dynamic}.call(1, 2, z: 3);
+  let final core::int #t21 = 1 in let final core::int #t22 = 2 in d{dynamic}.call(#t21, 3, z: #t22);
+  let final core::int #t23 = 1 in d{dynamic}.call(2, 3, z: #t23);
+  f(1, 2, z: 3);
+  let final core::int #t24 = 1 in let final core::int #t25 = 2 in f(#t24, 3, z: #t25);
+  let final core::int #t26 = 1 in f(2, 3, z: #t26);
+  let final self::A #t27 = a in let final core::int #t28 = 1 in let final core::int #t29 = 2 in let final core::int #t30 = 3 in #t27.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t28, #t29, z: #t30){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t31 = a in let final core::int #t32 = 1 in let final core::int #t33 = 2 in let final core::int #t34 = 3 in #t31.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t32, #t34, z: #t33){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t35 = a in let final core::int #t36 = 1 in let final core::int #t37 = 2 in let final core::int #t38 = 3 in #t35.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t37, #t38, z: #t36){(core::int, core::int, {required z: core::int}) → void};
+  a.{self::A::bar}(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t39 = a in let final core::int #t40 = 1 in let final core::int #t41 = 2 in #t39.{self::A::bar}(#t40, 3, z: #t41){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t42 = a in let final core::int #t43 = 1 in #t42.{self::A::bar}(2, 3, z: #t43){(core::int, core::int, {required z: core::int}) → void};
+  local(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t44 = 1 in let final core::int #t45 = 2 in local(#t44, 3, z: #t45){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t46 = 1 in local(2, 3, z: #t46){(core::int, core::int, {required z: core::int}) → void};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:81:15 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:81:21 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:82:18 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:21:18 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:31:7 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:31:13 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:32:10 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:36:13 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:36:19 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:37:16 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:39:13 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:39:19 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:40:16 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:44:9 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:44:15 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:45:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:47:9 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:47:15 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:48:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:52:5 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:52:11 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:53:8 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:57:5 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:57:11 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:58:8 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:61:14 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:61:17 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:61:23 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:62:14 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:62:23 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:62:20 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:63:20 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:63:23 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:63:17 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:67:9 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:67:15 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:68:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:72:9 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:72:15 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:73:12 -> IntConstant(1)
+Extra constant evaluation: evaluated: 155, effectively constant: 40
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline.expect
new file mode 100644
index 0000000..903b3b6
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline.expect
@@ -0,0 +1,23 @@
+class A {
+  A(int x, int y, {required int z});
+  factory A.foo(int x, int y, {required int z}) => new A(x, y, z: z);
+  void Function(int x, int y, {required int z}) get property => throw 42;
+  void bar(int x, int y, {required int z}) {}
+}
+
+typedef B = A;
+foo(int x, int y, {required int z}) {}
+
+extension E on A {
+  method1() {}
+  method2(int bar, {int? foo}) {}
+}
+
+test(dynamic d, Function f, A a) {}
+
+class Test extends A {
+  Test() : super(1, 2, z: 3);
+  test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f0b79da
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+class A {
+  A(int x, int y, {required int z});
+  factory A.foo(int x, int y, {required int z}) => new A(x, y, z: z);
+  void Function(int x, int y, {required int z}) get property => throw 42;
+  void bar(int x, int y, {required int z}) {}
+}
+
+class Test extends A {
+  Test() : super(1, 2, z: 3);
+  test() {}
+}
+
+extension E on A {
+  method1() {}
+  method2(int bar, {int? foo}) {}
+}
+
+foo(int x, int y, {required int z}) {}
+main() {}
+test(dynamic d, Function f, A a) {}
+typedef B = A;
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.expect
new file mode 100644
index 0000000..2f58211
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef B = self::A;
+class A extends core::Object {
+  constructor •(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    : super core::Object::•()
+    ;
+  static factory foo(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    return new self::A::•(x, y, z: z);
+  get property() → (core::int, core::int, {required z: core::int}) → void
+    return throw 42;
+  method bar(core::int x, core::int y, {required core::int z = #C1}) → void {}
+}
+class Test extends self::A {
+  constructor •() → self::Test
+    : super self::A::•(1, 2, z: 3)
+    ;
+  method test() → dynamic {
+    super.{self::A::bar}(1, 2, z: 3);
+    let final core::int #t1 = 1 in let final core::int #t2 = 2 in super.{self::A::bar}(#t1, 3, z: #t2);
+    let final core::int #t3 = 1 in super.{self::A::bar}(2, 3, z: #t3);
+  }
+}
+extension E on self::A {
+  method method1 = self::E|method1;
+  tearoff method1 = self::E|get#method1;
+  method method2 = self::E|method2;
+  tearoff method2 = self::E|get#method2;
+}
+static method foo(core::int x, core::int y, {required core::int z = #C1}) → dynamic {}
+static method E|method1(lowered final self::A #this) → dynamic {
+  let final self::A #t4 = #this in let final core::int #t5 = 1 in self::E|method2(#t4, 2, foo: #t5);
+}
+static method E|get#method1(lowered final self::A #this) → () → dynamic
+  return () → dynamic => self::E|method1(#this);
+static method E|method2(lowered final self::A #this, core::int bar, {core::int? foo = #C1}) → dynamic {}
+static method E|get#method2(lowered final self::A #this) → (core::int, {foo: core::int?}) → dynamic
+  return (core::int bar, {core::int? foo = #C1}) → dynamic => self::E|method2(#this, bar, foo: foo);
+static method test(dynamic d, core::Function f, self::A a) → dynamic {
+  function local(core::int x, core::int y, {required core::int z = #C1}) → void {}
+  self::foo(1, 2, z: 3);
+  let final core::int #t6 = 1 in let final core::int #t7 = 2 in self::foo(#t6, 3, z: #t7);
+  let final core::int #t8 = 1 in self::foo(2, 3, z: #t8);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t9 = 1 in let final core::int #t10 = 2 in self::A::foo(#t9, 3, z: #t10);
+  let final core::int #t11 = 1 in self::A::foo(2, 3, z: #t11);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t12 = 1 in let final core::int #t13 = 2 in self::A::foo(#t12, 3, z: #t13);
+  let final core::int #t14 = 1 in self::A::foo(2, 3, z: #t14);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t15 = 1 in let final core::int #t16 = 2 in new self::A::•(#t15, 3, z: #t16);
+  let final core::int #t17 = 1 in new self::A::•(2, 3, z: #t17);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t18 = 1 in let final core::int #t19 = 2 in new self::A::•(#t18, 3, z: #t19);
+  let final core::int #t20 = 1 in new self::A::•(2, 3, z: #t20);
+  d{dynamic}.call(1, 2, z: 3);
+  let final core::int #t21 = 1 in let final core::int #t22 = 2 in d{dynamic}.call(#t21, 3, z: #t22);
+  let final core::int #t23 = 1 in d{dynamic}.call(2, 3, z: #t23);
+  f(1, 2, z: 3);
+  let final core::int #t24 = 1 in let final core::int #t25 = 2 in f(#t24, 3, z: #t25);
+  let final core::int #t26 = 1 in f(2, 3, z: #t26);
+  let final self::A #t27 = a in let final core::int #t28 = 1 in let final core::int #t29 = 2 in let final core::int #t30 = 3 in #t27.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t28, #t29, z: #t30){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t31 = a in let final core::int #t32 = 1 in let final core::int #t33 = 2 in let final core::int #t34 = 3 in #t31.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t32, #t34, z: #t33){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t35 = a in let final core::int #t36 = 1 in let final core::int #t37 = 2 in let final core::int #t38 = 3 in #t35.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t37, #t38, z: #t36){(core::int, core::int, {required z: core::int}) → void};
+  a.{self::A::bar}(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t39 = a in let final core::int #t40 = 1 in let final core::int #t41 = 2 in #t39.{self::A::bar}(#t40, 3, z: #t41){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t42 = a in let final core::int #t43 = 1 in #t42.{self::A::bar}(2, 3, z: #t43){(core::int, core::int, {required z: core::int}) → void};
+  local(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t44 = 1 in let final core::int #t45 = 2 in local(#t44, 3, z: #t45){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t46 = 1 in local(2, 3, z: #t46){(core::int, core::int, {required z: core::int}) → void};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
new file mode 100644
index 0000000..23ee911
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef B = self::A;
+class A extends core::Object {
+  constructor •(core::int x, core::int y, {required core::int z}) → self::A
+    ;
+  static factory foo(core::int x, core::int y, {required core::int z}) → self::A
+    ;
+  get property() → (core::int, core::int, {required z: core::int}) → void
+    ;
+  method bar(core::int x, core::int y, {required core::int z}) → void
+    ;
+}
+class Test extends self::A {
+  constructor •() → self::Test
+    ;
+  method test() → dynamic
+    ;
+}
+extension E on self::A {
+  method method1 = self::E|method1;
+  tearoff method1 = self::E|get#method1;
+  method method2 = self::E|method2;
+  tearoff method2 = self::E|get#method2;
+}
+static method foo(core::int x, core::int y, {required core::int z}) → dynamic
+  ;
+static method E|method1(lowered final self::A #this) → dynamic
+  ;
+static method E|get#method1(lowered final self::A #this) → () → dynamic
+  return () → dynamic => self::E|method1(#this);
+static method E|method2(lowered final self::A #this, core::int bar, {core::int? foo}) → dynamic
+  ;
+static method E|get#method2(lowered final self::A #this) → (core::int, {foo: core::int?}) → dynamic
+  return (core::int bar, {core::int? foo}) → dynamic => self::E|method2(#this, bar, foo: foo);
+static method test(dynamic d, core::Function f, self::A a) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect
new file mode 100644
index 0000000..c92ba29
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect
@@ -0,0 +1,121 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef B = self::A;
+class A extends core::Object {
+  constructor •(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    : super core::Object::•()
+    ;
+  static factory foo(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    return new self::A::•(x, y, z: z);
+  get property() → (core::int, core::int, {required z: core::int}) → void
+    return throw 42;
+  method bar(core::int x, core::int y, {required core::int z = #C1}) → void {}
+}
+class Test extends self::A {
+  constructor •() → self::Test
+    : super self::A::•(1, 2, z: 3)
+    ;
+  method test() → dynamic {
+    super.{self::A::bar}(1, 2, z: 3);
+    let final core::int #t1 = 1 in let final core::int #t2 = 2 in super.{self::A::bar}(#t1, 3, z: #t2);
+    let final core::int #t3 = 1 in super.{self::A::bar}(2, 3, z: #t3);
+  }
+}
+extension E on self::A {
+  method method1 = self::E|method1;
+  tearoff method1 = self::E|get#method1;
+  method method2 = self::E|method2;
+  tearoff method2 = self::E|get#method2;
+}
+static method foo(core::int x, core::int y, {required core::int z = #C1}) → dynamic {}
+static method E|method1(lowered final self::A #this) → dynamic {
+  let final self::A #t4 = #this in let final core::int #t5 = 1 in self::E|method2(#t4, 2, foo: #t5);
+}
+static method E|get#method1(lowered final self::A #this) → () → dynamic
+  return () → dynamic => self::E|method1(#this);
+static method E|method2(lowered final self::A #this, core::int bar, {core::int? foo = #C1}) → dynamic {}
+static method E|get#method2(lowered final self::A #this) → (core::int, {foo: core::int?}) → dynamic
+  return (core::int bar, {core::int? foo = #C1}) → dynamic => self::E|method2(#this, bar, foo: foo);
+static method test(dynamic d, core::Function f, self::A a) → dynamic {
+  function local(core::int x, core::int y, {required core::int z = #C1}) → void {}
+  self::foo(1, 2, z: 3);
+  let final core::int #t6 = 1 in let final core::int #t7 = 2 in self::foo(#t6, 3, z: #t7);
+  let final core::int #t8 = 1 in self::foo(2, 3, z: #t8);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t9 = 1 in let final core::int #t10 = 2 in self::A::foo(#t9, 3, z: #t10);
+  let final core::int #t11 = 1 in self::A::foo(2, 3, z: #t11);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t12 = 1 in let final core::int #t13 = 2 in self::A::foo(#t12, 3, z: #t13);
+  let final core::int #t14 = 1 in self::A::foo(2, 3, z: #t14);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t15 = 1 in let final core::int #t16 = 2 in new self::A::•(#t15, 3, z: #t16);
+  let final core::int #t17 = 1 in new self::A::•(2, 3, z: #t17);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t18 = 1 in let final core::int #t19 = 2 in new self::A::•(#t18, 3, z: #t19);
+  let final core::int #t20 = 1 in new self::A::•(2, 3, z: #t20);
+  d{dynamic}.call(1, 2, z: 3);
+  let final core::int #t21 = 1 in let final core::int #t22 = 2 in d{dynamic}.call(#t21, 3, z: #t22);
+  let final core::int #t23 = 1 in d{dynamic}.call(2, 3, z: #t23);
+  f(1, 2, z: 3);
+  let final core::int #t24 = 1 in let final core::int #t25 = 2 in f(#t24, 3, z: #t25);
+  let final core::int #t26 = 1 in f(2, 3, z: #t26);
+  let final self::A #t27 = a in let final core::int #t28 = 1 in let final core::int #t29 = 2 in let final core::int #t30 = 3 in #t27.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t28, #t29, z: #t30){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t31 = a in let final core::int #t32 = 1 in let final core::int #t33 = 2 in let final core::int #t34 = 3 in #t31.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t32, #t34, z: #t33){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t35 = a in let final core::int #t36 = 1 in let final core::int #t37 = 2 in let final core::int #t38 = 3 in #t35.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t37, #t38, z: #t36){(core::int, core::int, {required z: core::int}) → void};
+  a.{self::A::bar}(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t39 = a in let final core::int #t40 = 1 in let final core::int #t41 = 2 in #t39.{self::A::bar}(#t40, 3, z: #t41){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t42 = a in let final core::int #t43 = 1 in #t42.{self::A::bar}(2, 3, z: #t43){(core::int, core::int, {required z: core::int}) → void};
+  local(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t44 = 1 in let final core::int #t45 = 2 in local(#t44, 3, z: #t45){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t46 = 1 in local(2, 3, z: #t46){(core::int, core::int, {required z: core::int}) → void};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:81:15 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:81:21 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:82:18 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:21:18 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:31:7 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:31:13 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:32:10 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:36:13 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:36:19 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:37:16 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:39:13 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:39:19 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:40:16 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:44:9 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:44:15 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:45:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:47:9 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:47:15 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:48:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:52:5 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:52:11 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:53:8 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:57:5 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:57:11 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:58:8 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:61:14 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:61:17 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:61:23 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:62:14 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:62:23 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:62:20 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:63:20 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:63:23 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:63:17 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:67:9 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:67:15 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:68:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:72:9 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:72:15 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///all_kinds.dart:73:12 -> IntConstant(1)
+Extra constant evaluation: evaluated: 155, effectively constant: 40
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/folder.options b/pkg/front_end/testcases/named_arguments_anywhere/folder.options
new file mode 100644
index 0000000..b97203b
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/folder.options
@@ -0,0 +1 @@
+--enable-experiment=named-arguments-anywhere
\ No newline at end of file
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart
new file mode 100644
index 0000000..ebb9e92
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2021, 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.
+
+class A {
+  A(int x, bool y, {required String z});
+
+  A.foo() : this(42, z: "foo", false);
+
+  factory A.bar(int x, bool y, {required String z}) = A;
+}
+
+class B extends A {
+  B() : super(42, z: "foo", false);
+}
+
+test() {
+  new A.bar(42, false, z: "bar");
+  new A.bar(42, z: "bar", false);
+  new A.bar(z: "bar", 42, false);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.strong.expect b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.strong.expect
new file mode 100644
index 0000000..5b2dee8
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.strong.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    : super core::Object::•()
+    ;
+  constructor foo() → self::A
+    : final core::int #t1 = 42, final core::String #t2 = "foo", this self::A::•(#t1, false, z: #t2)
+    ;
+  static factory bar(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    return new self::A::•(x, y, z: z);
+}
+class B extends self::A {
+  constructor •() → self::B
+    : final core::int #t3 = 42, final core::String #t4 = "foo", super self::A::•(#t3, false, z: #t4)
+    ;
+}
+static method test() → dynamic {
+  new self::A::•(42, false, z: "bar");
+  let final core::int #t5 = 42 in let final core::String #t6 = "bar" in new self::A::•(#t5, false, z: #t6);
+  let final core::String #t7 = "bar" in new self::A::•(42, false, z: #t7);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::bar
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.strong.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.strong.transformed.expect
new file mode 100644
index 0000000..06dd91e
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.strong.transformed.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    : super core::Object::•()
+    ;
+  constructor foo() → self::A
+    : final core::int #t1 = 42, final core::String #t2 = "foo", this self::A::•(#t1, false, z: #t2)
+    ;
+  static factory bar(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    return new self::A::•(x, y, z: z);
+}
+class B extends self::A {
+  constructor •() → self::B
+    : final core::int #t3 = 42, final core::String #t4 = "foo", super self::A::•(#t3, false, z: #t4)
+    ;
+}
+static method test() → dynamic {
+  new self::A::•(42, false, z: "bar");
+  let final core::int #t5 = 42 in let final core::String #t6 = "bar" in new self::A::•(#t5, false, z: #t6);
+  let final core::String #t7 = "bar" in new self::A::•(42, false, z: #t7);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::bar
+  #C2 = null
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///redirecting_constructor_initializers.dart:19:13 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///redirecting_constructor_initializers.dart:19:20 -> StringConstant("bar")
+Evaluated: VariableGet @ org-dartlang-testcase:///redirecting_constructor_initializers.dart:20:16 -> StringConstant("bar")
+Extra constant evaluation: evaluated: 18, effectively constant: 3
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.textual_outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.textual_outline.expect
new file mode 100644
index 0000000..4ca0a85
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class A {
+  A(int x, bool y, {required String z});
+  A.foo() : this(42, z: "foo", false);
+  factory A.bar(int x, bool y, {required String z}) = A;
+}
+class B extends A {
+  B() : super(42, z: "foo", false);
+}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.expect b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.expect
new file mode 100644
index 0000000..5b2dee8
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    : super core::Object::•()
+    ;
+  constructor foo() → self::A
+    : final core::int #t1 = 42, final core::String #t2 = "foo", this self::A::•(#t1, false, z: #t2)
+    ;
+  static factory bar(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    return new self::A::•(x, y, z: z);
+}
+class B extends self::A {
+  constructor •() → self::B
+    : final core::int #t3 = 42, final core::String #t4 = "foo", super self::A::•(#t3, false, z: #t4)
+    ;
+}
+static method test() → dynamic {
+  new self::A::•(42, false, z: "bar");
+  let final core::int #t5 = 42 in let final core::String #t6 = "bar" in new self::A::•(#t5, false, z: #t6);
+  let final core::String #t7 = "bar" in new self::A::•(42, false, z: #t7);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::bar
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect
new file mode 100644
index 0000000..ccf5a7c
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::bar]/*isLegacy*/;
+  constructor •(core::int x, core::bool y, {required core::String z}) → self::A
+    ;
+  constructor foo() → self::A
+    ;
+  static factory bar(core::int x, core::bool y, {required core::String z}) → self::A
+    return new self::A::•(x, y, z: z);
+}
+class B extends self::A {
+  constructor •() → self::B
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_constructor_initializers.dart:5:7 -> ConstructorTearOffConstant(A.bar)
+Extra constant evaluation: evaluated: 6, effectively constant: 1
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.transformed.expect
new file mode 100644
index 0000000..06dd91e
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.transformed.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    : super core::Object::•()
+    ;
+  constructor foo() → self::A
+    : final core::int #t1 = 42, final core::String #t2 = "foo", this self::A::•(#t1, false, z: #t2)
+    ;
+  static factory bar(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    return new self::A::•(x, y, z: z);
+}
+class B extends self::A {
+  constructor •() → self::B
+    : final core::int #t3 = 42, final core::String #t4 = "foo", super self::A::•(#t3, false, z: #t4)
+    ;
+}
+static method test() → dynamic {
+  new self::A::•(42, false, z: "bar");
+  let final core::int #t5 = 42 in let final core::String #t6 = "bar" in new self::A::•(#t5, false, z: #t6);
+  let final core::String #t7 = "bar" in new self::A::•(42, false, z: #t7);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::bar
+  #C2 = null
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///redirecting_constructor_initializers.dart:19:13 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///redirecting_constructor_initializers.dart:19:20 -> StringConstant("bar")
+Evaluated: VariableGet @ org-dartlang-testcase:///redirecting_constructor_initializers.dart:20:16 -> StringConstant("bar")
+Extra constant evaluation: evaluated: 18, effectively constant: 3
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
index 5ea885d..22f41cf 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
@@ -90,7 +90,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object)
   #C2 = static-tearoff con::id
-  #C3 = instantiation con::id <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = 0
   #C5 = con::Class<core::int> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) → dynamic)
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
index 5ea885d..22f41cf 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
@@ -90,7 +90,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object)
   #C2 = static-tearoff con::id
-  #C3 = instantiation con::id <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = 0
   #C5 = con::Class<core::int> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) → dynamic)
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
index 17a63c7..9af4cec 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
@@ -90,7 +90,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object*)
   #C2 = static-tearoff con::id
-  #C3 = instantiation con::id <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = con::Class<core::int*> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) →* dynamic)
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
index 17a63c7..9af4cec 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
@@ -90,7 +90,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object*)
   #C2 = static-tearoff con::id
-  #C3 = instantiation con::id <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = con::Class<core::int*> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) →* dynamic)
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
index 26a075c..b233a23 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
@@ -103,121 +103,131 @@
 
 class A extends core::Object {
   final field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::A
+  constructor constructor2({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::A
+  constructor constructor3([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::A
+  constructor constructor4({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::A
+  constructor constructor5([core::int? i = #C6]) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::A
+  constructor constructor6({core::int? i = #C6}) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::A
+  constructor constructor7({required core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  external constructor constructor8([core::int i = #C1]) → self::A
+  external constructor constructor8([core::int i = #C6]) → self::A
     : super core::Object::•()
     ;
-  external constructor constructor9({core::int i = #C1}) → self::A
+  external constructor constructor9({core::int i = #C6}) → self::A
     : super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::A
+  static factory factory3([core::int i = #C6]) → self::A
     return new self::A::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::A
+  static factory factory4({core::int i = #C6}) → self::A
     return new self::A::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::A
+  static factory factory5([core::int? i = #C6]) → self::A
     return new self::A::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::A
+  static factory factory6({core::int? i = #C6}) → self::A
     return new self::A::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::A
+  static factory factory7({required core::int i = #C6}) → self::A
     return new self::A::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::A
+  static factory factory8([core::int i = #C6]) → self::A
     return new self::A::constructor3();
-  static factory factory9({core::int i = #C1}) → self::A
+  static factory factory9({core::int i = #C6}) → self::A
     return new self::A::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
-  external method method8([core::int i = #C1]) → dynamic;
-  external method method9({core::int i = #C1}) → dynamic;
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+  external method method8([core::int i = #C6]) → dynamic;
+  external method method9({core::int i = #C6}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i = 42;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method3([core::int i = #C1]) → dynamic;
-  abstract method method4({core::int i = #C1}) → dynamic;
-  abstract method method5([core::int? i = #C1]) → dynamic;
-  abstract method method6({core::int? i = #C1}) → dynamic;
-  abstract method method7({required core::int i = #C1}) → dynamic;
+  abstract method method3([core::int i = #C6]) → dynamic;
+  abstract method method4({core::int i = #C6}) → dynamic;
+  abstract method method5([core::int? i = #C6]) → dynamic;
+  abstract method method6({core::int? i = #C6}) → dynamic;
+  abstract method method7({required core::int i = #C6}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10, #C11]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::C
+  constructor constructor2({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::C
+  constructor constructor3([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::C
+  constructor constructor4({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::C
+  constructor constructor5([core::int? i = #C6]) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor5([int? i]) : this.i = i; // error
                                       ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::C
+  constructor constructor6({core::int? i = #C6}) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor6({int? i}) : this.i = i; // error
                                       ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::C
+  constructor constructor7({required core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::C
+  static factory factory3([core::int i = #C6]) → self::C
     return new self::C::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::C
+  static factory factory4({core::int i = #C6}) → self::C
     return new self::C::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::C
+  static factory factory5([core::int? i = #C6]) → self::C
     return new self::C::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::C
+  static factory factory6({core::int? i = #C6}) → self::C
     return new self::C::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::C
+  static factory factory7({required core::int i = #C6}) → self::C
     return new self::C::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::C
+  static factory factory8([core::int i = #C6]) → self::C
     return new self::C::constructor3();
-  static factory factory9({core::int i = #C1}) → self::C
+  static factory factory9({core::int i = #C6}) → self::C
     return new self::C::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
 }
 static method main() → void {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::A::factory3
+  #C2 = constructor-tearoff self::A::factory4
+  #C3 = constructor-tearoff self::A::factory5
+  #C4 = constructor-tearoff self::A::factory6
+  #C5 = constructor-tearoff self::A::factory7
+  #C6 = null
+  #C7 = constructor-tearoff self::C::factory3
+  #C8 = constructor-tearoff self::C::factory4
+  #C9 = constructor-tearoff self::C::factory5
+  #C10 = constructor-tearoff self::C::factory6
+  #C11 = constructor-tearoff self::C::factory7
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
index b672730..0c4486a 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
@@ -103,121 +103,131 @@
 
 class A extends core::Object {
   final field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::A
+  constructor constructor2({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::A
+  constructor constructor3([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::A
+  constructor constructor4({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::A
+  constructor constructor5([core::int? i = #C6]) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in let core::int? #t1 = i in #t1 == null ?{core::int} #t1 as{TypeError,ForNonNullableByDefault} core::int : #t1{core::int}, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::A
+  constructor constructor6({core::int? i = #C6}) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in let core::int? #t2 = i in #t2 == null ?{core::int} #t2 as{TypeError,ForNonNullableByDefault} core::int : #t2{core::int}, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::A
+  constructor constructor7({required core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  external constructor constructor8([core::int i = #C1]) → self::A
+  external constructor constructor8([core::int i = #C6]) → self::A
     : super core::Object::•()
     ;
-  external constructor constructor9({core::int i = #C1}) → self::A
+  external constructor constructor9({core::int i = #C6}) → self::A
     : super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::A
+  static factory factory3([core::int i = #C6]) → self::A
     return new self::A::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::A
+  static factory factory4({core::int i = #C6}) → self::A
     return new self::A::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::A
+  static factory factory5([core::int? i = #C6]) → self::A
     return new self::A::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::A
+  static factory factory6({core::int? i = #C6}) → self::A
     return new self::A::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::A
+  static factory factory7({required core::int i = #C6}) → self::A
     return new self::A::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::A
+  static factory factory8([core::int i = #C6]) → self::A
     return new self::A::constructor3();
-  static factory factory9({core::int i = #C1}) → self::A
+  static factory factory9({core::int i = #C6}) → self::A
     return new self::A::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
-  external method method8([core::int i = #C1]) → dynamic;
-  external method method9({core::int i = #C1}) → dynamic;
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+  external method method8([core::int i = #C6]) → dynamic;
+  external method method9({core::int i = #C6}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i = 42;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method3([core::int i = #C1]) → dynamic;
-  abstract method method4({core::int i = #C1}) → dynamic;
-  abstract method method5([core::int? i = #C1]) → dynamic;
-  abstract method method6({core::int? i = #C1}) → dynamic;
-  abstract method method7({required core::int i = #C1}) → dynamic;
+  abstract method method3([core::int i = #C6]) → dynamic;
+  abstract method method4({core::int i = #C6}) → dynamic;
+  abstract method method5([core::int? i = #C6]) → dynamic;
+  abstract method method6({core::int? i = #C6}) → dynamic;
+  abstract method method7({required core::int i = #C6}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10, #C11]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::C
+  constructor constructor2({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::C
+  constructor constructor3([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::C
+  constructor constructor4({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::C
+  constructor constructor5([core::int? i = #C6]) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor5([int? i]) : this.i = i; // error
                                       ^" in let core::int? #t3 = i in #t3 == null ?{core::int} #t3 as{TypeError,ForNonNullableByDefault} core::int : #t3{core::int}, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::C
+  constructor constructor6({core::int? i = #C6}) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor6({int? i}) : this.i = i; // error
                                       ^" in let core::int? #t4 = i in #t4 == null ?{core::int} #t4 as{TypeError,ForNonNullableByDefault} core::int : #t4{core::int}, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::C
+  constructor constructor7({required core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::C
+  static factory factory3([core::int i = #C6]) → self::C
     return new self::C::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::C
+  static factory factory4({core::int i = #C6}) → self::C
     return new self::C::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::C
+  static factory factory5([core::int? i = #C6]) → self::C
     return new self::C::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::C
+  static factory factory6({core::int? i = #C6}) → self::C
     return new self::C::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::C
+  static factory factory7({required core::int i = #C6}) → self::C
     return new self::C::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::C
+  static factory factory8([core::int i = #C6]) → self::C
     return new self::C::constructor3();
-  static factory factory9({core::int i = #C1}) → self::C
+  static factory factory9({core::int i = #C6}) → self::C
     return new self::C::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
 }
 static method main() → void {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::A::factory3
+  #C2 = constructor-tearoff self::A::factory4
+  #C3 = constructor-tearoff self::A::factory5
+  #C4 = constructor-tearoff self::A::factory6
+  #C5 = constructor-tearoff self::A::factory7
+  #C6 = null
+  #C7 = constructor-tearoff self::C::factory3
+  #C8 = constructor-tearoff self::C::factory4
+  #C9 = constructor-tearoff self::C::factory5
+  #C10 = constructor-tearoff self::C::factory6
+  #C11 = constructor-tearoff self::C::factory7
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
index 26a075c..b233a23 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
@@ -103,121 +103,131 @@
 
 class A extends core::Object {
   final field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::A
+  constructor constructor2({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::A
+  constructor constructor3([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::A
+  constructor constructor4({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::A
+  constructor constructor5([core::int? i = #C6]) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::A
+  constructor constructor6({core::int? i = #C6}) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::A
+  constructor constructor7({required core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  external constructor constructor8([core::int i = #C1]) → self::A
+  external constructor constructor8([core::int i = #C6]) → self::A
     : super core::Object::•()
     ;
-  external constructor constructor9({core::int i = #C1}) → self::A
+  external constructor constructor9({core::int i = #C6}) → self::A
     : super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::A
+  static factory factory3([core::int i = #C6]) → self::A
     return new self::A::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::A
+  static factory factory4({core::int i = #C6}) → self::A
     return new self::A::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::A
+  static factory factory5([core::int? i = #C6]) → self::A
     return new self::A::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::A
+  static factory factory6({core::int? i = #C6}) → self::A
     return new self::A::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::A
+  static factory factory7({required core::int i = #C6}) → self::A
     return new self::A::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::A
+  static factory factory8([core::int i = #C6]) → self::A
     return new self::A::constructor3();
-  static factory factory9({core::int i = #C1}) → self::A
+  static factory factory9({core::int i = #C6}) → self::A
     return new self::A::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
-  external method method8([core::int i = #C1]) → dynamic;
-  external method method9({core::int i = #C1}) → dynamic;
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+  external method method8([core::int i = #C6]) → dynamic;
+  external method method9({core::int i = #C6}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i = 42;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method3([core::int i = #C1]) → dynamic;
-  abstract method method4({core::int i = #C1}) → dynamic;
-  abstract method method5([core::int? i = #C1]) → dynamic;
-  abstract method method6({core::int? i = #C1}) → dynamic;
-  abstract method method7({required core::int i = #C1}) → dynamic;
+  abstract method method3([core::int i = #C6]) → dynamic;
+  abstract method method4({core::int i = #C6}) → dynamic;
+  abstract method method5([core::int? i = #C6]) → dynamic;
+  abstract method method6({core::int? i = #C6}) → dynamic;
+  abstract method method7({required core::int i = #C6}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10, #C11]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::C
+  constructor constructor2({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::C
+  constructor constructor3([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::C
+  constructor constructor4({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::C
+  constructor constructor5([core::int? i = #C6]) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor5([int? i]) : this.i = i; // error
                                       ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::C
+  constructor constructor6({core::int? i = #C6}) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor6({int? i}) : this.i = i; // error
                                       ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::C
+  constructor constructor7({required core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::C
+  static factory factory3([core::int i = #C6]) → self::C
     return new self::C::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::C
+  static factory factory4({core::int i = #C6}) → self::C
     return new self::C::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::C
+  static factory factory5([core::int? i = #C6]) → self::C
     return new self::C::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::C
+  static factory factory6({core::int? i = #C6}) → self::C
     return new self::C::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::C
+  static factory factory7({required core::int i = #C6}) → self::C
     return new self::C::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::C
+  static factory factory8([core::int i = #C6]) → self::C
     return new self::C::constructor3();
-  static factory factory9({core::int i = #C1}) → self::C
+  static factory factory9({core::int i = #C6}) → self::C
     return new self::C::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
 }
 static method main() → void {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::A::factory3
+  #C2 = constructor-tearoff self::A::factory4
+  #C3 = constructor-tearoff self::A::factory5
+  #C4 = constructor-tearoff self::A::factory6
+  #C5 = constructor-tearoff self::A::factory7
+  #C6 = null
+  #C7 = constructor-tearoff self::C::factory3
+  #C8 = constructor-tearoff self::C::factory4
+  #C9 = constructor-tearoff self::C::factory5
+  #C10 = constructor-tearoff self::C::factory6
+  #C11 = constructor-tearoff self::C::factory7
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
index 0040b41..48dab81 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
@@ -187,3 +187,17 @@
 }
 static method main() → void
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory3)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory4)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory5)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory6)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory7)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory3)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory4)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory5)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory6)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory7)
+Extra constant evaluation: evaluated: 32, effectively constant: 10
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
index 94f4fab..8ee747f 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
@@ -103,121 +103,131 @@
 
 class A extends core::Object {
   final field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::A
+  constructor constructor2({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::A
+  constructor constructor3([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::A
+  constructor constructor4({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::A
+  constructor constructor5([core::int? i = #C6]) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::A
+  constructor constructor6({core::int? i = #C6}) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::A
+  constructor constructor7({required core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  external constructor constructor8([core::int i = #C1]) → self::A
+  external constructor constructor8([core::int i = #C6]) → self::A
     : super core::Object::•()
     ;
-  external constructor constructor9({core::int i = #C1}) → self::A
+  external constructor constructor9({core::int i = #C6}) → self::A
     : super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::A
+  static factory factory3([core::int i = #C6]) → self::A
     return new self::A::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::A
+  static factory factory4({core::int i = #C6}) → self::A
     return new self::A::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::A
+  static factory factory5([core::int? i = #C6]) → self::A
     return new self::A::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::A
+  static factory factory6({core::int? i = #C6}) → self::A
     return new self::A::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::A
+  static factory factory7({required core::int i = #C6}) → self::A
     return new self::A::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::A
+  static factory factory8([core::int i = #C6]) → self::A
     return new self::A::constructor3();
-  static factory factory9({core::int i = #C1}) → self::A
+  static factory factory9({core::int i = #C6}) → self::A
     return new self::A::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
-  external method method8([core::int i = #C1]) → dynamic;
-  external method method9({core::int i = #C1}) → dynamic;
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+  external method method8([core::int i = #C6]) → dynamic;
+  external method method9({core::int i = #C6}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i = 42;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method3([core::int i = #C1]) → dynamic;
-  abstract method method4({core::int i = #C1}) → dynamic;
-  abstract method method5([core::int? i = #C1]) → dynamic;
-  abstract method method6({core::int? i = #C1}) → dynamic;
-  abstract method method7({required core::int i = #C1}) → dynamic;
+  abstract method method3([core::int i = #C6]) → dynamic;
+  abstract method method4({core::int i = #C6}) → dynamic;
+  abstract method method5([core::int? i = #C6]) → dynamic;
+  abstract method method6({core::int? i = #C6}) → dynamic;
+  abstract method method7({required core::int i = #C6}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10, #C11]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::C
+  constructor constructor2({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::C
+  constructor constructor3([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::C
+  constructor constructor4({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::C
+  constructor constructor5([core::int? i = #C6]) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor5([int? i]) : this.i = i; // error
                                       ^" in i, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::C
+  constructor constructor6({core::int? i = #C6}) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor6({int? i}) : this.i = i; // error
                                       ^" in i, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::C
+  constructor constructor7({required core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::C
+  static factory factory3([core::int i = #C6]) → self::C
     return new self::C::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::C
+  static factory factory4({core::int i = #C6}) → self::C
     return new self::C::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::C
+  static factory factory5([core::int? i = #C6]) → self::C
     return new self::C::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::C
+  static factory factory6({core::int? i = #C6}) → self::C
     return new self::C::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::C
+  static factory factory7({required core::int i = #C6}) → self::C
     return new self::C::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::C
+  static factory factory8([core::int i = #C6]) → self::C
     return new self::C::constructor3();
-  static factory factory9({core::int i = #C1}) → self::C
+  static factory factory9({core::int i = #C6}) → self::C
     return new self::C::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
 }
 static method main() → void {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::A::factory3
+  #C2 = constructor-tearoff self::A::factory4
+  #C3 = constructor-tearoff self::A::factory5
+  #C4 = constructor-tearoff self::A::factory6
+  #C5 = constructor-tearoff self::A::factory7
+  #C6 = null
+  #C7 = constructor-tearoff self::C::factory3
+  #C8 = constructor-tearoff self::C::factory4
+  #C9 = constructor-tearoff self::C::factory5
+  #C10 = constructor-tearoff self::C::factory6
+  #C11 = constructor-tearoff self::C::factory7
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
index 66fe67c..276acf3 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
@@ -15,5 +15,5 @@
 
 constants  {
   #C1 = static-tearoff self::checkme
-  #C2 = instantiation self::checkme <self::X>
+  #C2 = instantiation #C1 <self::X>
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
index 66fe67c..276acf3 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
@@ -15,5 +15,5 @@
 
 constants  {
   #C1 = static-tearoff self::checkme
-  #C2 = instantiation self::checkme <self::X>
+  #C2 = instantiation #C1 <self::X>
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
index 17ca8c8..b570b8b 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
@@ -15,5 +15,5 @@
 
 constants  {
   #C1 = static-tearoff self::checkme
-  #C2 = instantiation self::checkme <self::X*>
+  #C2 = instantiation #C1 <self::X*>
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
index 17ca8c8..b570b8b 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
@@ -15,5 +15,5 @@
 
 constants  {
   #C1 = static-tearoff self::checkme
-  #C2 = instantiation self::checkme <self::X*>
+  #C2 = instantiation #C1 <self::X*>
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
index 0c168d7..2637180 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(Never n) → self::C
     return new self::D::•(n);
 }
@@ -22,3 +22,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
index 0c168d7..2637180 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(Never n) → self::C
     return new self::D::•(n);
 }
@@ -22,3 +22,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
index 0c168d7..2637180 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(Never n) → self::C
     return new self::D::•(n);
 }
@@ -22,3 +22,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect
index 18f72ef..fd5c0b5 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect
@@ -15,3 +15,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42844_1.dart:5:7 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
index 0c168d7..2637180 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(Never n) → self::C
     return new self::D::•(n);
 }
@@ -22,3 +22,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
index bd950c6..d84e75e 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     return new self::D::•(n);
 }
@@ -23,3 +23,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
index bd950c6..d84e75e 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     return new self::D::•(n);
 }
@@ -23,3 +23,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
index bd950c6..d84e75e 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     return new self::D::•(n);
 }
@@ -23,3 +23,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect
index 53f7e37..967bc12 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect
@@ -15,3 +15,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42844_2.dart:5:7 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
index bd950c6..d84e75e 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     return new self::D::•(n);
 }
@@ -23,3 +23,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
index a02c4ef..46f6782 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
@@ -259,3 +259,7 @@
   self::A<Null> a = new self::A::•<Null>();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
index a02c4ef..46f6782 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
@@ -259,3 +259,7 @@
   self::A<Null> a = new self::A::•<Null>();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
index a02c4ef..46f6782 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
@@ -259,3 +259,7 @@
   self::A<Null> a = new self::A::•<Null>();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
index 39eaec6..ffca4b4 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
@@ -149,3 +149,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue43211.dart:35:7 -> ConstructorTearOffConstant(C.redirect)
+Extra constant evaluation: evaluated: 14, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
index a02c4ef..46f6782 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
@@ -259,3 +259,7 @@
   self::A<Null> a = new self::A::•<Null>();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
index fd4ab1f..6fe128e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
@@ -16,14 +16,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i = #C1}) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor gen({core::int i = #C2}) → self::C
     : super core::Object::•()
     ;
-  static factory fact({core::int i = #C1}) → self::C {
+  static factory fact({core::int i = #C2}) → self::C {
     return new self::C::gen();
   }
-  static factory redirect({core::int i = #C1}) → self::C
+  static factory redirect({core::int i = #C2}) → self::C
     return new self::C::gen(i: i);
 }
 class D extends core::Object {
@@ -34,5 +34,6 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::C::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
index fd4ab1f..6fe128e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
@@ -16,14 +16,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i = #C1}) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor gen({core::int i = #C2}) → self::C
     : super core::Object::•()
     ;
-  static factory fact({core::int i = #C1}) → self::C {
+  static factory fact({core::int i = #C2}) → self::C {
     return new self::C::gen();
   }
-  static factory redirect({core::int i = #C1}) → self::C
+  static factory redirect({core::int i = #C2}) → self::C
     return new self::C::gen(i: i);
 }
 class D extends core::Object {
@@ -34,5 +34,6 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::C::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
index fd4ab1f..6fe128e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
@@ -16,14 +16,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i = #C1}) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor gen({core::int i = #C2}) → self::C
     : super core::Object::•()
     ;
-  static factory fact({core::int i = #C1}) → self::C {
+  static factory fact({core::int i = #C2}) → self::C {
     return new self::C::gen();
   }
-  static factory redirect({core::int i = #C1}) → self::C
+  static factory redirect({core::int i = #C2}) → self::C
     return new self::C::gen(i: i);
 }
 class D extends core::Object {
@@ -34,5 +34,6 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::C::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
index bff1a1e..110f141 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
@@ -30,3 +30,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue43276.dart:5:7 -> ConstructorTearOffConstant(C.redirect)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
index fd4ab1f..6fe128e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
@@ -16,14 +16,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i = #C1}) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor gen({core::int i = #C2}) → self::C
     : super core::Object::•()
     ;
-  static factory fact({core::int i = #C1}) → self::C {
+  static factory fact({core::int i = #C2}) → self::C {
     return new self::C::gen();
   }
-  static factory redirect({core::int i = #C1}) → self::C
+  static factory redirect({core::int i = #C2}) → self::C
     return new self::C::gen(i: i);
 }
 class D extends core::Object {
@@ -34,5 +34,6 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::C::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
index e038284..9882343 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     return new self::_A::•<self::A::•::T%>(value);
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     return new self::_B::•<self::B::•::T%>(value);
 }
@@ -23,3 +23,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
index e038284..9882343 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     return new self::_A::•<self::A::•::T%>(value);
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     return new self::_B::•<self::B::•::T%>(value);
 }
@@ -23,3 +23,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
index e038284..9882343 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     return new self::_A::•<self::A::•::T%>(value);
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     return new self::_B::•<self::B::•::T%>(value);
 }
@@ -23,3 +23,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
index a50e08b..59597d6 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
@@ -22,3 +22,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue43918.dart:5:16 -> ConstructorTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue43918.dart:13:16 -> ConstructorTearOffConstant(B.)
+Extra constant evaluation: evaluated: 8, effectively constant: 2
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
index e038284..9882343 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     return new self::_A::•<self::A::•::T%>(value);
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     return new self::_B::•<self::B::•::T%>(value);
 }
@@ -23,3 +23,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue47311.dart b/pkg/front_end/testcases/nnbd/issue47311.dart
new file mode 100644
index 0000000..7fef532
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue47311.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2021, 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:async';
+
+typedef Baz<T> = T Function(T);
+
+class Foo1<T> {
+  void method<S extends T>(Baz<S> x) {}
+}
+
+class Bar1 implements Foo1<Object> {
+  void method<T extends Object>(Baz<T> x) {}
+}
+
+class Foo2<T> {
+  void method<V extends S, S extends T>(Baz<S> x, Baz<V> y) {}
+}
+
+class Bar2 implements Foo2<Object> {
+  void method<V extends T, T extends Object>(Baz<T> x, Baz<V> y) {}
+}
+
+class Foo3<T> {
+  void method<V extends S, S extends FutureOr<T>>(Baz<S> x, Baz<V> y) {}
+}
+
+class Bar3 implements Foo3<Object> {
+  void method<V extends T, T extends FutureOr<Object>>(Baz<T> x, Baz<V> y) {}
+}
+
+class Foo4<T> {
+  void method<V extends FutureOr<S>, S extends T>(Baz<S> x, Baz<V> y) {}
+}
+
+class Bar4 implements Foo4<Object> {
+  void method<V extends FutureOr<T>, T extends Object>(Baz<T> x, Baz<V> y) {}
+}
+
+class Foo5<T> {
+  void method<V extends FutureOr<S>, S extends FutureOr<T>>(Baz<S> x, Baz<V> y) {}
+}
+
+class Bar5 implements Foo5<Object> {
+  void method<V extends FutureOr<T>, T extends FutureOr<Object>>(Baz<T> x, Baz<V> y) {}
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue47311.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue47311.dart.strong.expect
new file mode 100644
index 0000000..baea864
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue47311.dart.strong.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef Baz<invariant T extends core::Object? = dynamic> = (T%) → T%;
+class Foo1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo1<self::Foo1::T%>
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class S extends self::Foo1::T%>((self::Foo1::method::S%) → self::Foo1::method::S% x) → void {}
+}
+class Bar1 extends core::Object implements self::Foo1<core::Object> {
+  synthetic constructor •() → self::Bar1
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class T extends core::Object>((self::Bar1::method::T) → self::Bar1::method::T x) → void {}
+}
+class Foo2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo2<self::Foo2::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo2::method::S% = self::Foo2::T%, covariant-by-class S extends self::Foo2::T%>((self::Foo2::method::S%) → self::Foo2::method::S% x, (self::Foo2::method::V%) → self::Foo2::method::V% y) → void {}
+}
+class Bar2 extends core::Object implements self::Foo2<core::Object> {
+  synthetic constructor •() → self::Bar2
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar2::method::T = core::Object, covariant-by-class T extends core::Object>((self::Bar2::method::T) → self::Bar2::method::T x, (self::Bar2::method::V) → self::Bar2::method::V y) → void {}
+}
+class Foo3<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo3<self::Foo3::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo3::method::S% = FutureOr<self::Foo3::T%>, covariant-by-class S extends FutureOr<self::Foo3::T%>>((self::Foo3::method::S%) → self::Foo3::method::S% x, (self::Foo3::method::V%) → self::Foo3::method::V% y) → void {}
+}
+class Bar3 extends core::Object implements self::Foo3<core::Object> {
+  synthetic constructor •() → self::Bar3
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar3::method::T = FutureOr<core::Object>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar3::method::T) → self::Bar3::method::T x, (self::Bar3::method::V) → self::Bar3::method::V y) → void {}
+}
+class Foo4<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo4<self::Foo4::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo4::method::S%> = FutureOr<self::Foo4::T%>, covariant-by-class S extends self::Foo4::T%>((self::Foo4::method::S%) → self::Foo4::method::S% x, (self::Foo4::method::V%) → self::Foo4::method::V% y) → void {}
+}
+class Bar4 extends core::Object implements self::Foo4<core::Object> {
+  synthetic constructor •() → self::Bar4
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar4::method::T> = FutureOr<core::Object>, covariant-by-class T extends core::Object>((self::Bar4::method::T) → self::Bar4::method::T x, (self::Bar4::method::V) → self::Bar4::method::V y) → void {}
+}
+class Foo5<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo5<self::Foo5::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo5::method::S%> = FutureOr<FutureOr<self::Foo5::T%>>, covariant-by-class S extends FutureOr<self::Foo5::T%>>((self::Foo5::method::S%) → self::Foo5::method::S% x, (self::Foo5::method::V%) → self::Foo5::method::V% y) → void {}
+}
+class Bar5 extends core::Object implements self::Foo5<core::Object> {
+  synthetic constructor •() → self::Bar5
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar5::method::T> = FutureOr<FutureOr<core::Object>>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar5::method::T) → self::Bar5::method::T x, (self::Bar5::method::V) → self::Bar5::method::V y) → void {}
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue47311.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue47311.dart.strong.transformed.expect
new file mode 100644
index 0000000..baea864
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue47311.dart.strong.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef Baz<invariant T extends core::Object? = dynamic> = (T%) → T%;
+class Foo1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo1<self::Foo1::T%>
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class S extends self::Foo1::T%>((self::Foo1::method::S%) → self::Foo1::method::S% x) → void {}
+}
+class Bar1 extends core::Object implements self::Foo1<core::Object> {
+  synthetic constructor •() → self::Bar1
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class T extends core::Object>((self::Bar1::method::T) → self::Bar1::method::T x) → void {}
+}
+class Foo2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo2<self::Foo2::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo2::method::S% = self::Foo2::T%, covariant-by-class S extends self::Foo2::T%>((self::Foo2::method::S%) → self::Foo2::method::S% x, (self::Foo2::method::V%) → self::Foo2::method::V% y) → void {}
+}
+class Bar2 extends core::Object implements self::Foo2<core::Object> {
+  synthetic constructor •() → self::Bar2
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar2::method::T = core::Object, covariant-by-class T extends core::Object>((self::Bar2::method::T) → self::Bar2::method::T x, (self::Bar2::method::V) → self::Bar2::method::V y) → void {}
+}
+class Foo3<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo3<self::Foo3::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo3::method::S% = FutureOr<self::Foo3::T%>, covariant-by-class S extends FutureOr<self::Foo3::T%>>((self::Foo3::method::S%) → self::Foo3::method::S% x, (self::Foo3::method::V%) → self::Foo3::method::V% y) → void {}
+}
+class Bar3 extends core::Object implements self::Foo3<core::Object> {
+  synthetic constructor •() → self::Bar3
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar3::method::T = FutureOr<core::Object>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar3::method::T) → self::Bar3::method::T x, (self::Bar3::method::V) → self::Bar3::method::V y) → void {}
+}
+class Foo4<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo4<self::Foo4::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo4::method::S%> = FutureOr<self::Foo4::T%>, covariant-by-class S extends self::Foo4::T%>((self::Foo4::method::S%) → self::Foo4::method::S% x, (self::Foo4::method::V%) → self::Foo4::method::V% y) → void {}
+}
+class Bar4 extends core::Object implements self::Foo4<core::Object> {
+  synthetic constructor •() → self::Bar4
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar4::method::T> = FutureOr<core::Object>, covariant-by-class T extends core::Object>((self::Bar4::method::T) → self::Bar4::method::T x, (self::Bar4::method::V) → self::Bar4::method::V y) → void {}
+}
+class Foo5<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo5<self::Foo5::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo5::method::S%> = FutureOr<FutureOr<self::Foo5::T%>>, covariant-by-class S extends FutureOr<self::Foo5::T%>>((self::Foo5::method::S%) → self::Foo5::method::S% x, (self::Foo5::method::V%) → self::Foo5::method::V% y) → void {}
+}
+class Bar5 extends core::Object implements self::Foo5<core::Object> {
+  synthetic constructor •() → self::Bar5
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar5::method::T> = FutureOr<FutureOr<core::Object>>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar5::method::T) → self::Bar5::method::T x, (self::Bar5::method::V) → self::Bar5::method::V y) → void {}
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue47311.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue47311.dart.textual_outline.expect
new file mode 100644
index 0000000..07a20ea
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue47311.dart.textual_outline.expect
@@ -0,0 +1,47 @@
+import 'dart:async';
+
+typedef Baz<T> = T Function(T);
+
+class Foo1<T> {
+  void method<S extends T>(Baz<S> x) {}
+}
+
+class Bar1 implements Foo1<Object> {
+  void method<T extends Object>(Baz<T> x) {}
+}
+
+class Foo2<T> {
+  void method<V extends S, S extends T>(Baz<S> x, Baz<V> y) {}
+}
+
+class Bar2 implements Foo2<Object> {
+  void method<V extends T, T extends Object>(Baz<T> x, Baz<V> y) {}
+}
+
+class Foo3<T> {
+  void method<V extends S, S extends FutureOr<T>>(Baz<S> x, Baz<V> y) {}
+}
+
+class Bar3 implements Foo3<Object> {
+  void method<V extends T, T extends FutureOr<Object>>(Baz<T> x, Baz<V> y) {}
+}
+
+class Foo4<T> {
+  void method<V extends FutureOr<S>, S extends T>(Baz<S> x, Baz<V> y) {}
+}
+
+class Bar4 implements Foo4<Object> {
+  void method<V extends FutureOr<T>, T extends Object>(Baz<T> x, Baz<V> y) {}
+}
+
+class Foo5<T> {
+  void method<V extends FutureOr<S>, S extends FutureOr<T>>(
+      Baz<S> x, Baz<V> y) {}
+}
+
+class Bar5 implements Foo5<Object> {
+  void method<V extends FutureOr<T>, T extends FutureOr<Object>>(
+      Baz<T> x, Baz<V> y) {}
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue47311.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/issue47311.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fbbf978
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue47311.dart.textual_outline_modelled.expect
@@ -0,0 +1,46 @@
+import 'dart:async';
+
+class Bar1 implements Foo1<Object> {
+  void method<T extends Object>(Baz<T> x) {}
+}
+
+class Bar2 implements Foo2<Object> {
+  void method<V extends T, T extends Object>(Baz<T> x, Baz<V> y) {}
+}
+
+class Bar3 implements Foo3<Object> {
+  void method<V extends T, T extends FutureOr<Object>>(Baz<T> x, Baz<V> y) {}
+}
+
+class Bar4 implements Foo4<Object> {
+  void method<V extends FutureOr<T>, T extends Object>(Baz<T> x, Baz<V> y) {}
+}
+
+class Bar5 implements Foo5<Object> {
+  void method<V extends FutureOr<T>, T extends FutureOr<Object>>(
+      Baz<T> x, Baz<V> y) {}
+}
+
+class Foo1<T> {
+  void method<S extends T>(Baz<S> x) {}
+}
+
+class Foo2<T> {
+  void method<V extends S, S extends T>(Baz<S> x, Baz<V> y) {}
+}
+
+class Foo3<T> {
+  void method<V extends S, S extends FutureOr<T>>(Baz<S> x, Baz<V> y) {}
+}
+
+class Foo4<T> {
+  void method<V extends FutureOr<S>, S extends T>(Baz<S> x, Baz<V> y) {}
+}
+
+class Foo5<T> {
+  void method<V extends FutureOr<S>, S extends FutureOr<T>>(
+      Baz<S> x, Baz<V> y) {}
+}
+
+typedef Baz<T> = T Function(T);
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue47311.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue47311.dart.weak.expect
new file mode 100644
index 0000000..baea864
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue47311.dart.weak.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef Baz<invariant T extends core::Object? = dynamic> = (T%) → T%;
+class Foo1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo1<self::Foo1::T%>
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class S extends self::Foo1::T%>((self::Foo1::method::S%) → self::Foo1::method::S% x) → void {}
+}
+class Bar1 extends core::Object implements self::Foo1<core::Object> {
+  synthetic constructor •() → self::Bar1
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class T extends core::Object>((self::Bar1::method::T) → self::Bar1::method::T x) → void {}
+}
+class Foo2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo2<self::Foo2::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo2::method::S% = self::Foo2::T%, covariant-by-class S extends self::Foo2::T%>((self::Foo2::method::S%) → self::Foo2::method::S% x, (self::Foo2::method::V%) → self::Foo2::method::V% y) → void {}
+}
+class Bar2 extends core::Object implements self::Foo2<core::Object> {
+  synthetic constructor •() → self::Bar2
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar2::method::T = core::Object, covariant-by-class T extends core::Object>((self::Bar2::method::T) → self::Bar2::method::T x, (self::Bar2::method::V) → self::Bar2::method::V y) → void {}
+}
+class Foo3<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo3<self::Foo3::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo3::method::S% = FutureOr<self::Foo3::T%>, covariant-by-class S extends FutureOr<self::Foo3::T%>>((self::Foo3::method::S%) → self::Foo3::method::S% x, (self::Foo3::method::V%) → self::Foo3::method::V% y) → void {}
+}
+class Bar3 extends core::Object implements self::Foo3<core::Object> {
+  synthetic constructor •() → self::Bar3
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar3::method::T = FutureOr<core::Object>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar3::method::T) → self::Bar3::method::T x, (self::Bar3::method::V) → self::Bar3::method::V y) → void {}
+}
+class Foo4<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo4<self::Foo4::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo4::method::S%> = FutureOr<self::Foo4::T%>, covariant-by-class S extends self::Foo4::T%>((self::Foo4::method::S%) → self::Foo4::method::S% x, (self::Foo4::method::V%) → self::Foo4::method::V% y) → void {}
+}
+class Bar4 extends core::Object implements self::Foo4<core::Object> {
+  synthetic constructor •() → self::Bar4
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar4::method::T> = FutureOr<core::Object>, covariant-by-class T extends core::Object>((self::Bar4::method::T) → self::Bar4::method::T x, (self::Bar4::method::V) → self::Bar4::method::V y) → void {}
+}
+class Foo5<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo5<self::Foo5::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo5::method::S%> = FutureOr<FutureOr<self::Foo5::T%>>, covariant-by-class S extends FutureOr<self::Foo5::T%>>((self::Foo5::method::S%) → self::Foo5::method::S% x, (self::Foo5::method::V%) → self::Foo5::method::V% y) → void {}
+}
+class Bar5 extends core::Object implements self::Foo5<core::Object> {
+  synthetic constructor •() → self::Bar5
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar5::method::T> = FutureOr<FutureOr<core::Object>>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar5::method::T) → self::Bar5::method::T x, (self::Bar5::method::V) → self::Bar5::method::V y) → void {}
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue47311.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue47311.dart.weak.outline.expect
new file mode 100644
index 0000000..7bf55ff
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue47311.dart.weak.outline.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef Baz<invariant T extends core::Object? = dynamic> = (T%) → T%;
+class Foo1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo1<self::Foo1::T%>
+    ;
+  method method<covariant-by-class S extends self::Foo1::T%>((self::Foo1::method::S%) → self::Foo1::method::S% x) → void
+    ;
+}
+class Bar1 extends core::Object implements self::Foo1<core::Object> {
+  synthetic constructor •() → self::Bar1
+    ;
+  method method<covariant-by-class T extends core::Object>((self::Bar1::method::T) → self::Bar1::method::T x) → void
+    ;
+}
+class Foo2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo2<self::Foo2::T%>
+    ;
+  method method<V extends self::Foo2::method::S% = self::Foo2::T%, covariant-by-class S extends self::Foo2::T%>((self::Foo2::method::S%) → self::Foo2::method::S% x, (self::Foo2::method::V%) → self::Foo2::method::V% y) → void
+    ;
+}
+class Bar2 extends core::Object implements self::Foo2<core::Object> {
+  synthetic constructor •() → self::Bar2
+    ;
+  method method<V extends self::Bar2::method::T = core::Object, covariant-by-class T extends core::Object>((self::Bar2::method::T) → self::Bar2::method::T x, (self::Bar2::method::V) → self::Bar2::method::V y) → void
+    ;
+}
+class Foo3<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo3<self::Foo3::T%>
+    ;
+  method method<V extends self::Foo3::method::S% = FutureOr<self::Foo3::T%>, covariant-by-class S extends FutureOr<self::Foo3::T%>>((self::Foo3::method::S%) → self::Foo3::method::S% x, (self::Foo3::method::V%) → self::Foo3::method::V% y) → void
+    ;
+}
+class Bar3 extends core::Object implements self::Foo3<core::Object> {
+  synthetic constructor •() → self::Bar3
+    ;
+  method method<V extends self::Bar3::method::T = FutureOr<core::Object>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar3::method::T) → self::Bar3::method::T x, (self::Bar3::method::V) → self::Bar3::method::V y) → void
+    ;
+}
+class Foo4<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo4<self::Foo4::T%>
+    ;
+  method method<V extends FutureOr<self::Foo4::method::S%> = FutureOr<self::Foo4::T%>, covariant-by-class S extends self::Foo4::T%>((self::Foo4::method::S%) → self::Foo4::method::S% x, (self::Foo4::method::V%) → self::Foo4::method::V% y) → void
+    ;
+}
+class Bar4 extends core::Object implements self::Foo4<core::Object> {
+  synthetic constructor •() → self::Bar4
+    ;
+  method method<V extends FutureOr<self::Bar4::method::T> = FutureOr<core::Object>, covariant-by-class T extends core::Object>((self::Bar4::method::T) → self::Bar4::method::T x, (self::Bar4::method::V) → self::Bar4::method::V y) → void
+    ;
+}
+class Foo5<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo5<self::Foo5::T%>
+    ;
+  method method<V extends FutureOr<self::Foo5::method::S%> = FutureOr<FutureOr<self::Foo5::T%>>, covariant-by-class S extends FutureOr<self::Foo5::T%>>((self::Foo5::method::S%) → self::Foo5::method::S% x, (self::Foo5::method::V%) → self::Foo5::method::V% y) → void
+    ;
+}
+class Bar5 extends core::Object implements self::Foo5<core::Object> {
+  synthetic constructor •() → self::Bar5
+    ;
+  method method<V extends FutureOr<self::Bar5::method::T> = FutureOr<FutureOr<core::Object>>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar5::method::T) → self::Bar5::method::T x, (self::Bar5::method::V) → self::Bar5::method::V y) → void
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue47311.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue47311.dart.weak.transformed.expect
new file mode 100644
index 0000000..baea864
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue47311.dart.weak.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef Baz<invariant T extends core::Object? = dynamic> = (T%) → T%;
+class Foo1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo1<self::Foo1::T%>
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class S extends self::Foo1::T%>((self::Foo1::method::S%) → self::Foo1::method::S% x) → void {}
+}
+class Bar1 extends core::Object implements self::Foo1<core::Object> {
+  synthetic constructor •() → self::Bar1
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class T extends core::Object>((self::Bar1::method::T) → self::Bar1::method::T x) → void {}
+}
+class Foo2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo2<self::Foo2::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo2::method::S% = self::Foo2::T%, covariant-by-class S extends self::Foo2::T%>((self::Foo2::method::S%) → self::Foo2::method::S% x, (self::Foo2::method::V%) → self::Foo2::method::V% y) → void {}
+}
+class Bar2 extends core::Object implements self::Foo2<core::Object> {
+  synthetic constructor •() → self::Bar2
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar2::method::T = core::Object, covariant-by-class T extends core::Object>((self::Bar2::method::T) → self::Bar2::method::T x, (self::Bar2::method::V) → self::Bar2::method::V y) → void {}
+}
+class Foo3<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo3<self::Foo3::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo3::method::S% = FutureOr<self::Foo3::T%>, covariant-by-class S extends FutureOr<self::Foo3::T%>>((self::Foo3::method::S%) → self::Foo3::method::S% x, (self::Foo3::method::V%) → self::Foo3::method::V% y) → void {}
+}
+class Bar3 extends core::Object implements self::Foo3<core::Object> {
+  synthetic constructor •() → self::Bar3
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar3::method::T = FutureOr<core::Object>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar3::method::T) → self::Bar3::method::T x, (self::Bar3::method::V) → self::Bar3::method::V y) → void {}
+}
+class Foo4<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo4<self::Foo4::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo4::method::S%> = FutureOr<self::Foo4::T%>, covariant-by-class S extends self::Foo4::T%>((self::Foo4::method::S%) → self::Foo4::method::S% x, (self::Foo4::method::V%) → self::Foo4::method::V% y) → void {}
+}
+class Bar4 extends core::Object implements self::Foo4<core::Object> {
+  synthetic constructor •() → self::Bar4
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar4::method::T> = FutureOr<core::Object>, covariant-by-class T extends core::Object>((self::Bar4::method::T) → self::Bar4::method::T x, (self::Bar4::method::V) → self::Bar4::method::V y) → void {}
+}
+class Foo5<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo5<self::Foo5::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo5::method::S%> = FutureOr<FutureOr<self::Foo5::T%>>, covariant-by-class S extends FutureOr<self::Foo5::T%>>((self::Foo5::method::S%) → self::Foo5::method::S% x, (self::Foo5::method::V%) → self::Foo5::method::V% y) → void {}
+}
+class Bar5 extends core::Object implements self::Foo5<core::Object> {
+  synthetic constructor •() → self::Bar5
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar5::method::T> = FutureOr<FutureOr<core::Object>>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar5::method::T) → self::Bar5::method::T x, (self::Bar5::method::V) → self::Bar5::method::V y) → void {}
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect
index 59d5c75..3595f53 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect
@@ -62,9 +62,9 @@
     : super core::Object::•()
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method /* signature-type: (self::CustomInvocation) → core::String */ noSuchMethod(covariant-by-declaration core::Invocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (self::Class) → core::bool */ ==(covariant-by-declaration core::Object o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o = #C1}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.transformed.expect
index 59d5c75..3595f53 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.transformed.expect
@@ -62,9 +62,9 @@
     : super core::Object::•()
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method /* signature-type: (self::CustomInvocation) → core::String */ noSuchMethod(covariant-by-declaration core::Invocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (self::Class) → core::bool */ ==(covariant-by-declaration core::Object o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o = #C1}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect
index 59d5c75..3595f53 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect
@@ -62,9 +62,9 @@
     : super core::Object::•()
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method /* signature-type: (self::CustomInvocation) → core::String */ noSuchMethod(covariant-by-declaration core::Invocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (self::Class) → core::bool */ ==(covariant-by-declaration core::Object o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o = #C1}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
index b00ea1e..3b7cf09 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
@@ -16,9 +16,9 @@
   synthetic constructor •() → self::Class
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method /* signature-type: (self::CustomInvocation) → core::String */ noSuchMethod(covariant-by-declaration core::Invocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (self::Class) → core::bool */ ==(covariant-by-declaration core::Object o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.transformed.expect
index 59d5c75..3595f53 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.transformed.expect
@@ -62,9 +62,9 @@
     : super core::Object::•()
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method /* signature-type: (self::CustomInvocation) → core::String */ noSuchMethod(covariant-by-declaration core::Invocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (self::Class) → core::bool */ ==(covariant-by-declaration core::Object o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o = #C1}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
index 2640926..ba12861 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C1
     return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
 Try using a different type as argument.
@@ -75,7 +75,7 @@
     ;
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
@@ -86,3 +86,8 @@
                           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C1::•
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
index 2640926..ba12861 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C1
     return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
 Try using a different type as argument.
@@ -75,7 +75,7 @@
     ;
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
@@ -86,3 +86,8 @@
                           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C1::•
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
index 2640926..ba12861 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C1
     return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
 Try using a different type as argument.
@@ -75,7 +75,7 @@
     ;
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
@@ -86,3 +86,8 @@
                           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C1::•
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect
index 1f2f60e..115a6f4 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect
@@ -85,3 +85,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///override_checks.dart:19:7 -> ConstructorTearOffConstant(C1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///override_checks.dart:25:7 -> ConstructorTearOffConstant(D.bar)
+Extra constant evaluation: evaluated: 4, effectively constant: 2
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
index 2640926..ba12861 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C1
     return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
 Try using a different type as argument.
@@ -75,7 +75,7 @@
     ;
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
@@ -86,3 +86,8 @@
                           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C1::•
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart
new file mode 100644
index 0000000..6a7228b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2021, 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.
+
+class A {
+  int get foo => throw 42;
+}
+
+bar(int x) {}
+
+test(A? a) {
+  bar((a?.foo)!);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.strong.expect b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.strong.expect
new file mode 100644
index 0000000..bb556eb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.strong.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get foo() → core::int
+    return throw 42;
+}
+static method bar(core::int x) → dynamic {}
+static method test(self::A? a) → dynamic {
+  self::bar((let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::foo}{core::int})!);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.strong.transformed.expect
new file mode 100644
index 0000000..bb556eb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.strong.transformed.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get foo() → core::int
+    return throw 42;
+}
+static method bar(core::int x) → dynamic {}
+static method test(self::A? a) → dynamic {
+  self::bar((let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::foo}{core::int})!);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.textual_outline.expect
new file mode 100644
index 0000000..e36ef60
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+class A {
+  int get foo => throw 42;
+}
+
+bar(int x) {}
+test(A? a) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..755c4d8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+bar(int x) {}
+
+class A {
+  int get foo => throw 42;
+}
+
+main() {}
+test(A? a) {}
diff --git a/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.expect b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.expect
new file mode 100644
index 0000000..bb556eb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get foo() → core::int
+    return throw 42;
+}
+static method bar(core::int x) → dynamic {}
+static method test(self::A? a) → dynamic {
+  self::bar((let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::foo}{core::int})!);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.outline.expect
new file mode 100644
index 0000000..0fa1c0c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.outline.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+  get foo() → core::int
+    ;
+}
+static method bar(core::int x) → dynamic
+  ;
+static method test(self::A? a) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.transformed.expect
new file mode 100644
index 0000000..bb556eb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.transformed.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get foo() → core::int
+    return throw 42;
+}
+static method bar(core::int x) → dynamic {}
+static method test(self::A? a) → dynamic {
+  self::bar((let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::foo}{core::int})!);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.expect
index 3fe3e9d..7948117 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.expect
@@ -226,7 +226,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = 0
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.transformed.expect
index 3fe3e9d..7948117 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.transformed.expect
@@ -226,7 +226,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = 0
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.expect
index c410aaa..752b8a6 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.expect
@@ -217,7 +217,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num*> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.transformed.expect
index c410aaa..752b8a6 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.transformed.expect
@@ -217,7 +217,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num*> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.expect
index 7045d9b..fb57de9 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.expect
@@ -81,7 +81,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = true
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.transformed.expect
index 7045d9b..fb57de9 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.transformed.expect
@@ -81,7 +81,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = true
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.expect
index c7c169f..3b6c8a8 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.expect
@@ -81,7 +81,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = true
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num*> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.transformed.expect
index c7c169f..3b6c8a8 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.transformed.expect
@@ -81,7 +81,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = true
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num*> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect
index b504950..f72fa11 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect
@@ -82,7 +82,7 @@
 
 constants  {
   #C1 = static-tearoff con::id
-  #C2 = instantiation con::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = 0
   #C4 = con::Class<core::int*> {field:#C3}
   #C5 = <core::int*>[#C3]
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect
index b504950..f72fa11 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect
@@ -82,7 +82,7 @@
 
 constants  {
   #C1 = static-tearoff con::id
-  #C2 = instantiation con::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = 0
   #C4 = con::Class<core::int*> {field:#C3}
   #C5 = <core::int*>[#C3]
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
index be2afd3..5a2032c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
@@ -129,11 +129,11 @@
     : super self::Super::•()
     ;
   abstract get field1() → core::int;
-  forwarding-stub forwarding-semi-stub set field1(covariant-by-declaration core::int #externalFieldValue) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ field1(covariant-by-declaration core::num #externalFieldValue) → void
     return super.{self::Super::field1} = #externalFieldValue;
   abstract get field2() → core::String;
-  forwarding-stub forwarding-semi-stub set field2(covariant-by-declaration core::String #externalFieldValue) → void
-    return super.{self::Super::field2} = #externalFieldValue as core::num;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::String) → void */ field2(covariant-by-declaration core::num #externalFieldValue) → void
+    return super.{self::Super::field2} = #externalFieldValue;
   abstract get field3() → core::int;
   abstract set field3(core::int #externalFieldValue) → void;
   abstract get field4() → core::int;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.outline.expect
index ca4fea2..699de2bc 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.outline.expect
@@ -126,11 +126,11 @@
   synthetic constructor •() → self::Class
     ;
   abstract get field1() → core::int;
-  forwarding-stub forwarding-semi-stub set field1(covariant-by-declaration core::int #externalFieldValue) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ field1(covariant-by-declaration core::num #externalFieldValue) → void
     return super.{self::Super::field1} = #externalFieldValue;
   abstract get field2() → core::String;
-  forwarding-stub forwarding-semi-stub set field2(covariant-by-declaration core::String #externalFieldValue) → void
-    return super.{self::Super::field2} = #externalFieldValue as core::num;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::String) → void */ field2(covariant-by-declaration core::num #externalFieldValue) → void
+    return super.{self::Super::field2} = #externalFieldValue;
   abstract get field3() → core::int;
   abstract set field3(core::int #externalFieldValue) → void;
   abstract get field4() → core::int;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
index e670210f..9e7d45a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
@@ -63,10 +63,10 @@
   synthetic constructor •() → self::Class
     : super self::Super::•()
     ;
-  forwarding-stub forwarding-semi-stub method method1(covariant-by-declaration core::int i) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method1(covariant-by-declaration core::num i) → void
     return super.{self::Super::method1}(i);
-  forwarding-stub forwarding-semi-stub method method2(covariant-by-declaration core::String i) → void
-    return super.{self::Super::method2}(i as core::num);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::String) → void */ method2(covariant-by-declaration core::num i) → void
+    return super.{self::Super::method2}(i);
   abstract method method3(core::int i) → void;
   abstract method method4(covariant-by-declaration core::int i) → void;
   abstract method method5(covariant-by-declaration core::num n) → void;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.outline.expect
index dc87ebf..47e31a3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.outline.expect
@@ -69,10 +69,10 @@
 class Class extends self::Super implements self::Interface {
   synthetic constructor •() → self::Class
     ;
-  forwarding-stub forwarding-semi-stub method method1(covariant-by-declaration core::int i) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method1(covariant-by-declaration core::num i) → void
     return super.{self::Super::method1}(i);
-  forwarding-stub forwarding-semi-stub method method2(covariant-by-declaration core::String i) → void
-    return super.{self::Super::method2}(i as core::num);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::String) → void */ method2(covariant-by-declaration core::num i) → void
+    return super.{self::Super::method2}(i);
   abstract method method3(core::int i) → void;
   abstract method method4(covariant-by-declaration core::int i) → void;
   abstract method method5(covariant-by-declaration core::num n) → void;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
index f6fdb96..a51aa61 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
@@ -63,10 +63,10 @@
   synthetic constructor •() → self::Class
     : super self::Super::•()
     ;
-  forwarding-stub forwarding-semi-stub set setter1(covariant-by-declaration core::int i) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter1(covariant-by-declaration core::num i) → void
     return super.{self::Super::setter1} = i;
-  forwarding-stub forwarding-semi-stub set setter2(covariant-by-declaration core::String i) → void
-    return super.{self::Super::setter2} = i as core::num;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::String) → void */ setter2(covariant-by-declaration core::num i) → void
+    return super.{self::Super::setter2} = i;
   abstract set setter3(core::int i) → void;
   abstract set setter4(covariant-by-declaration core::int i) → void;
   abstract set setter5(covariant-by-declaration core::num n) → void;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.outline.expect
index 1ac459f..77a5f5b 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.outline.expect
@@ -69,10 +69,10 @@
 class Class extends self::Super implements self::Interface {
   synthetic constructor •() → self::Class
     ;
-  forwarding-stub forwarding-semi-stub set setter1(covariant-by-declaration core::int i) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter1(covariant-by-declaration core::num i) → void
     return super.{self::Super::setter1} = i;
-  forwarding-stub forwarding-semi-stub set setter2(covariant-by-declaration core::String i) → void
-    return super.{self::Super::setter2} = i as core::num;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::String) → void */ setter2(covariant-by-declaration core::num i) → void
+    return super.{self::Super::setter2} = i;
   abstract set setter3(core::int i) → void;
   abstract set setter4(covariant-by-declaration core::int i) → void;
   abstract set setter5(covariant-by-declaration core::num n) → void;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
index 9f5ab6a..ffdea68 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::Class
     : super core::Object::•()
     ;
@@ -11,3 +11,7 @@
     return new self::Class::•();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect
index 2dad0b1..96a3670 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect
@@ -11,3 +11,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:8:7 -> ConstructorTearOffConstant(Class.redirect)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
index 9f5ab6a..ffdea68 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::Class
     : super core::Object::•()
     ;
@@ -11,3 +11,7 @@
     return new self::Class::•();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart
new file mode 100644
index 0000000..bd46eb8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, 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 'test_lib.dart';
+
+main() {
+  test();
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.textual_outline.expect
new file mode 100644
index 0000000..6f433ef
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+import 'test_lib.dart';
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6f433ef
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+import 'test_lib.dart';
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.expect
new file mode 100644
index 0000000..b406d4f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//   int j = sub.mixinMethod(null);
+//                           ^
+//
+// pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   int j = sub.mixinMethod(null);
+//               ^
+//
+// pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   sub.mixinField2 = sub.mixinField1;
+//                         ^
+//
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = invalid-expression "pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  int j = sub.mixinMethod(null);
+              ^" in sub.{opt::_SubClass&Class&Mixin::mixinMethod}(invalid-expression "pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+  int j = sub.mixinMethod(null);
+                          ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) →* core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  sub.mixinField2 = sub.mixinField1;
+                        ^" in sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → self2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {}
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin extends self2::Class implements self2::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  field core::int? mixinField1 = null /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */;
+  field core::int mixinField2 = 0 /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */;
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super self2::Class::•()
+    ;
+  abstract member-signature get classField1() → core::int*; -> self2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> self2::Class::classField2
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {}
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> self2::Class::classMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set classField1(core::int* value) → void; -> self2::Class::classField1
+  abstract member-signature set classField2(core::int* value) → void; -> self2::Class::classField2
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.outline.expect
new file mode 100644
index 0000000..bec1cf1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.outline.expect
@@ -0,0 +1,70 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self3;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1;
+  field core::int classField2;
+  synthetic constructor •() → self3::Class
+    ;
+  method classMethod(core::int i) → core::int?
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1;
+  field core::int mixinField2;
+  method mixinMethod(core::int i) → core::int?
+    ;
+}
+
+library;
+import self as self4;
+import "opt_in_lib.dart" as self3;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin extends self3::Class implements self3::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  field core::int? mixinField1 /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */;
+  field core::int mixinField2 /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */;
+  synthetic constructor •() → self4::_SubClass&Class&Mixin*
+    : super self3::Class::•()
+    ;
+  abstract member-signature get classField1() → core::int*; -> self3::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> self3::Class::classField2
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int?
+    ;
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> self3::Class::classMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set classField1(core::int* value) → void; -> self3::Class::classField1
+  abstract member-signature set classField2(core::int* value) → void; -> self3::Class::classField2
+}
+class SubClass extends self4::_SubClass&Class&Mixin {
+  synthetic constructor •() → self4::SubClass*
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..f7a06b0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.transformed.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//   int j = sub.mixinMethod(null);
+//                           ^
+//
+// pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   int j = sub.mixinMethod(null);
+//               ^
+//
+// pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   sub.mixinField2 = sub.mixinField1;
+//                         ^
+//
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = invalid-expression "pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  int j = sub.mixinMethod(null);
+              ^" in sub.{opt::_SubClass&Class&Mixin::mixinMethod}(invalid-expression "pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+  int j = sub.mixinMethod(null);
+                          ^" in null){(core::int) →* core::int?};
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  sub.mixinField2 = sub.mixinField1;
+                        ^" in sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int?};
+}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → self2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {}
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin extends self2::Class implements self2::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  field core::int? mixinField1 = null /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */;
+  field core::int mixinField2 = 0 /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */;
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super self2::Class::•()
+    ;
+  abstract member-signature get classField1() → core::int*; -> self2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> self2::Class::classField2
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {}
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> self2::Class::classMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set classField1(core::int* value) → void; -> self2::Class::classField1
+  abstract member-signature set classField2(core::int* value) → void; -> self2::Class::classField2
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart
new file mode 100644
index 0000000..bd46eb8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, 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 'test_lib.dart';
+
+main() {
+  test();
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.textual_outline.expect
new file mode 100644
index 0000000..6f433ef
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+import 'test_lib.dart';
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6f433ef
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+import 'test_lib.dart';
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.expect
new file mode 100644
index 0000000..5c88ecc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.expect
@@ -0,0 +1,85 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = sub.{opt::_SubClass&Class&Mixin::mixinMethod}(null){(core::int*) →* core::int*};
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int*};
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  mixin-super-stub method mixinMethod(core::int* i) → core::int*
+    return super.{opt2::Mixin::mixinMethod}(i);
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.outline.expect
new file mode 100644
index 0000000..898c9ca
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.outline.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic
+  ;
+
+library;
+import self as self3;
+import "opt_in_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt::Class with opt::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self3::_SubClass&Class&Mixin*
+    : super opt::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt::Class::classField2
+  mixin-super-stub method mixinMethod(core::int* i) → core::int*
+    return super.{opt::Mixin::mixinMethod}(i);
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt::Class::classMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends self3::_SubClass&Class&Mixin {
+  synthetic constructor •() → self3::SubClass*
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1;
+  field core::int classField2;
+  synthetic constructor •() → opt::Class
+    ;
+  method classMethod(core::int i) → core::int?
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1;
+  field core::int mixinField2;
+  method mixinMethod(core::int i) → core::int?
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.transformed.expect
new file mode 100644
index 0000000..8b70b5c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.transformed.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = sub.{opt::_SubClass&Class&Mixin::mixinMethod}(null){(core::int*) →* core::int*};
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int*};
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin extends opt2::Class implements opt2::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  field core::int? mixinField1 = null /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */;
+  field core::int mixinField2 = 0 /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */;
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {}
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/opt_in_lib.dart b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/opt_in_lib.dart
new file mode 100644
index 0000000..f85f5ca
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/opt_in_lib.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2021, 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.
+
+class Class {
+  int? classField1;
+  int classField2 = 0;
+  int? classMethod(int i) {}
+}
+
+mixin Mixin {
+  int? mixinField1;
+  int mixinField2 = 0;
+  int? mixinMethod(int i) {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/opt_out_lib.dart b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/opt_out_lib.dart
new file mode 100644
index 0000000..e1f91ac
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/opt_out_lib.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, 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.
+
+// @dart=2.9
+
+import 'opt_in_lib.dart';
+
+class SubClass extends Class with Mixin {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test.options b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test.options
new file mode 100644
index 0000000..c0f5433
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test.options
@@ -0,0 +1,2 @@
+opt_in_lib.dart
+opt_out_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart
new file mode 100644
index 0000000..1c2249c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, 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 'opt_out_lib.dart';
+
+test() {
+  SubClass sub = new SubClass();
+  int i = sub.classMethod(null);
+  int j = sub.mixinMethod(null);
+  sub.classField2 = sub.classField1;
+  sub.mixinField2 = sub.mixinField1;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect
index 4ba2007..ed2219b 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect
@@ -170,8 +170,8 @@
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> SymbolConstant(#noFolding)
 Evaluated: ListLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> ListConstant(const <Type*>[])
 Evaluated: MapLiteral @ org-dartlang-testcase:///mock_http_headers.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:782:8 -> SymbolConstant(#clear)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:782:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:782:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:782:8 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:676:8 -> SymbolConstant(#clear)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:676:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:676:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/_http/http.dart:676:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 268, effectively constant: 91
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
index 34cee4f..e605bd9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
@@ -34,7 +34,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object?> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class1::redirect, opt::Class1::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6, #C7]/*isLegacy*/;
   const constructor _() → opt::Class1<opt::Class1::T%>
     : super core::Object::•()
     ;
@@ -46,7 +46,7 @@
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
 class Class2<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class2::redirect, opt::Class2::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8, #C9]/*isLegacy*/;
   const constructor _() → opt::Class2<opt::Class2::T>
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
 class Class3<T extends core::String> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class3::redirect, opt::Class3::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10, #C11]/*isLegacy*/;
   const constructor _() → opt::Class3<opt::Class3::T>
     : super core::Object::•()
     ;
@@ -70,7 +70,7 @@
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class4::redirect, opt::Class4::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C12, #C13]/*isLegacy*/;
   const constructor _() → opt::Class4<opt::Class4::T%>
     : super core::Object::•()
     ;
@@ -82,7 +82,7 @@
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
 class Class5<T extends dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class5::redirect, opt::Class5::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C14, #C15]/*isLegacy*/;
   const constructor _() → opt::Class5<opt::Class5::T%>
     : super core::Object::•()
     ;
@@ -96,7 +96,7 @@
 static method testOptIn() → dynamic {
   new opt::Class1::_<core::Object?>();
   new opt::Class1::_<core::Object?>();
-  #C6;
+  #C16;
   opt::Class1::fact<core::Object?>();
   new opt::Class2::_<core::Object>();
   new opt::Class2::_<core::Object>();
@@ -122,7 +122,17 @@
   #C3 = opt::Class3<core::String*> {}
   #C4 = opt::Class4<dynamic> {}
   #C5 = opt::Class5<dynamic> {}
-  #C6 = opt::Class1<core::Object?> {}
+  #C6 = constructor-tearoff opt::Class1::redirect
+  #C7 = constructor-tearoff opt::Class1::constRedirect
+  #C8 = constructor-tearoff opt::Class2::redirect
+  #C9 = constructor-tearoff opt::Class2::constRedirect
+  #C10 = constructor-tearoff opt::Class3::redirect
+  #C11 = constructor-tearoff opt::Class3::constRedirect
+  #C12 = constructor-tearoff opt::Class4::redirect
+  #C13 = constructor-tearoff opt::Class4::constRedirect
+  #C14 = constructor-tearoff opt::Class5::redirect
+  #C15 = constructor-tearoff opt::Class5::constRedirect
+  #C16 = opt::Class1<core::Object?> {}
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect
index 958ab4c..e1a0b96 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect
@@ -72,3 +72,17 @@
 }
 static method testOptIn() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:5:7 -> ConstructorTearOffConstant(Class1.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:5:7 -> ConstructorTearOffConstant(Class1.constRedirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:13:7 -> ConstructorTearOffConstant(Class2.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:13:7 -> ConstructorTearOffConstant(Class2.constRedirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:21:7 -> ConstructorTearOffConstant(Class3.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:21:7 -> ConstructorTearOffConstant(Class3.constRedirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:29:7 -> ConstructorTearOffConstant(Class4.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:29:7 -> ConstructorTearOffConstant(Class4.constRedirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:37:7 -> ConstructorTearOffConstant(Class5.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:37:7 -> ConstructorTearOffConstant(Class5.constRedirect)
+Extra constant evaluation: evaluated: 25, effectively constant: 10
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
index 34cee4f..e605bd9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object?> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class1::redirect, opt::Class1::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6, #C7]/*isLegacy*/;
   const constructor _() → opt::Class1<opt::Class1::T%>
     : super core::Object::•()
     ;
@@ -46,7 +46,7 @@
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
 class Class2<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class2::redirect, opt::Class2::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8, #C9]/*isLegacy*/;
   const constructor _() → opt::Class2<opt::Class2::T>
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
 class Class3<T extends core::String> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class3::redirect, opt::Class3::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10, #C11]/*isLegacy*/;
   const constructor _() → opt::Class3<opt::Class3::T>
     : super core::Object::•()
     ;
@@ -70,7 +70,7 @@
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class4::redirect, opt::Class4::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C12, #C13]/*isLegacy*/;
   const constructor _() → opt::Class4<opt::Class4::T%>
     : super core::Object::•()
     ;
@@ -82,7 +82,7 @@
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
 class Class5<T extends dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class5::redirect, opt::Class5::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C14, #C15]/*isLegacy*/;
   const constructor _() → opt::Class5<opt::Class5::T%>
     : super core::Object::•()
     ;
@@ -96,7 +96,7 @@
 static method testOptIn() → dynamic {
   new opt::Class1::_<core::Object?>();
   new opt::Class1::_<core::Object?>();
-  #C6;
+  #C16;
   opt::Class1::fact<core::Object?>();
   new opt::Class2::_<core::Object>();
   new opt::Class2::_<core::Object>();
@@ -122,7 +122,17 @@
   #C3 = opt::Class3<core::String*> {}
   #C4 = opt::Class4<dynamic> {}
   #C5 = opt::Class5<dynamic> {}
-  #C6 = opt::Class1<core::Object?> {}
+  #C6 = constructor-tearoff opt::Class1::redirect
+  #C7 = constructor-tearoff opt::Class1::constRedirect
+  #C8 = constructor-tearoff opt::Class2::redirect
+  #C9 = constructor-tearoff opt::Class2::constRedirect
+  #C10 = constructor-tearoff opt::Class3::redirect
+  #C11 = constructor-tearoff opt::Class3::constRedirect
+  #C12 = constructor-tearoff opt::Class4::redirect
+  #C13 = constructor-tearoff opt::Class4::constRedirect
+  #C14 = constructor-tearoff opt::Class5::redirect
+  #C15 = constructor-tearoff opt::Class5::constRedirect
+  #C16 = opt::Class1<core::Object?> {}
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
index 2cb6f54..342dcae 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
@@ -50,7 +50,7 @@
     ;
 }
 class CP<T extends core::Object> extends opt::P<opt::CP::T> /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::CP::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
   const constructor _(core::Object token) → opt::CP<opt::CP::T>
     : super opt::P::_(token)
     ;
@@ -63,7 +63,7 @@
     ;
 }
 class VP<T extends core::Object> extends opt::P<opt::VP::T> /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::VP::forToken]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   const constructor _(core::Object token, opt::VP::T useValue) → opt::VP<opt::VP::T>
     : super opt::P::_(token)
     ;
@@ -72,7 +72,7 @@
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
-  const constructor •({core::List<opt::P<core::Object>> list = #C7}) → opt::M
+  const constructor •({core::List<opt::P<core::Object>> list = #C9}) → opt::M
     : opt::M::list = list, super core::Object::•()
     ;
 }
@@ -84,7 +84,9 @@
   #C4 = opt::VP<core::Object*> {token:#C3}
   #C5 = <opt::P<core::Object*>*>[#C2, #C4]
   #C6 = opt::M {list:#C5}
-  #C7 = <opt::P<core::Object*>*>[]
+  #C7 = constructor-tearoff opt::CP::•
+  #C8 = constructor-tearoff opt::VP::forToken
+  #C9 = <opt::P<core::Object*>*>[]
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect
index ee92a0d..98b7803 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect
@@ -81,5 +81,7 @@
 Extra constant evaluation status:
 Evaluated: ListLiteral @ org-dartlang-testcase:///main.dart:15:14 -> ListConstant(const <P<Object*>*>[const CP<Object*>{P.token: Class*}, const VP<Object*>{P.token: const XToken{}}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:20:11 -> InstanceConstant(const M{M.list: const <P<Object*>*>[const CP<Object*>{P.token: Class*}, const VP<Object*>{P.token: const XToken{}}]})
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:11:7 -> ConstructorTearOffConstant(CP.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:21:7 -> ConstructorTearOffConstant(VP.forToken)
 Evaluated: ListLiteral @ org-dartlang-testcase:///opt_in_lib.dart:36:24 -> ListConstant(const <P<Object*>*>[])
-Extra constant evaluation: evaluated: 16, effectively constant: 3
+Extra constant evaluation: evaluated: 16, effectively constant: 5
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
index 2cb6f54..342dcae 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
@@ -50,7 +50,7 @@
     ;
 }
 class CP<T extends core::Object> extends opt::P<opt::CP::T> /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::CP::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
   const constructor _(core::Object token) → opt::CP<opt::CP::T>
     : super opt::P::_(token)
     ;
@@ -63,7 +63,7 @@
     ;
 }
 class VP<T extends core::Object> extends opt::P<opt::VP::T> /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::VP::forToken]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   const constructor _(core::Object token, opt::VP::T useValue) → opt::VP<opt::VP::T>
     : super opt::P::_(token)
     ;
@@ -72,7 +72,7 @@
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
-  const constructor •({core::List<opt::P<core::Object>> list = #C7}) → opt::M
+  const constructor •({core::List<opt::P<core::Object>> list = #C9}) → opt::M
     : opt::M::list = list, super core::Object::•()
     ;
 }
@@ -84,7 +84,9 @@
   #C4 = opt::VP<core::Object*> {token:#C3}
   #C5 = <opt::P<core::Object*>*>[#C2, #C4]
   #C6 = opt::M {list:#C5}
-  #C7 = <opt::P<core::Object*>*>[]
+  #C7 = constructor-tearoff opt::CP::•
+  #C8 = constructor-tearoff opt::VP::forToken
+  #C9 = <opt::P<core::Object*>*>[]
 }
 
 
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect
index 3df2a9b..ae8fcc4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef BAlias = self::B;
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   static factory •() → self::A
     return new self::B::•();
   static factory named() → self::A
@@ -19,3 +19,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::A::named
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect
index 3df2a9b..ae8fcc4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 typedef BAlias = self::B;
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   static factory •() → self::A
     return new self::B::•();
   static factory named() → self::A
@@ -19,3 +19,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::A::named
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect
index 3df2a9b..ae8fcc4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect
@@ -4,7 +4,7 @@
 
 typedef BAlias = self::B;
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   static factory •() → self::A
     return new self::B::•();
   static factory named() → self::A
@@ -19,3 +19,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::A::named
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect
index 978eeea..9cd6482 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect
@@ -18,3 +18,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45051.dart:5:7 -> ConstructorTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45051.dart:5:7 -> ConstructorTearOffConstant(A.named)
+Extra constant evaluation: evaluated: 5, effectively constant: 2
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect
index 3df2a9b..ae8fcc4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 typedef BAlias = self::B;
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   static factory •() → self::A
     return new self::B::•();
   static factory named() → self::A
@@ -19,3 +19,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::A::named
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect
index 1d4c9d2..14a187b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect
@@ -69,7 +69,7 @@
 typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
 typedef B<X extends (self::D<X>) → self::D<X> = (self::D<dynamic>) → self::D<dynamic>> = self::D<X>;
 class C<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::C<self::C::X%>
     : super core::Object::•() {}
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
@@ -78,7 +78,7 @@
     return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor •() → self::D<self::D::X%>
     : super core::Object::•()
     ;
@@ -108,3 +108,8 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+constants  {
+  #C1 = constructor-tearoff self::C::bar
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect
index 1d4c9d2..14a187b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect
@@ -69,7 +69,7 @@
 typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
 typedef B<X extends (self::D<X>) → self::D<X> = (self::D<dynamic>) → self::D<dynamic>> = self::D<X>;
 class C<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::C<self::C::X%>
     : super core::Object::•() {}
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
@@ -78,7 +78,7 @@
     return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor •() → self::D<self::D::X%>
     : super core::Object::•()
     ;
@@ -108,3 +108,8 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+constants  {
+  #C1 = constructor-tearoff self::C::bar
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect
index 1d4c9d2..14a187b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect
@@ -69,7 +69,7 @@
 typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
 typedef B<X extends (self::D<X>) → self::D<X> = (self::D<dynamic>) → self::D<dynamic>> = self::D<X>;
 class C<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::C<self::C::X%>
     : super core::Object::•() {}
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
@@ -78,7 +78,7 @@
     return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor •() → self::D<self::D::X%>
     : super core::Object::•()
     ;
@@ -108,3 +108,8 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+constants  {
+  #C1 = constructor-tearoff self::C::bar
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect
index 218a88b..e8f791f 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect
@@ -39,3 +39,9 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45519_2.dart:5:7 -> ConstructorTearOffConstant(C.bar)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45519_2.dart:10:7 -> ConstructorTearOffConstant(D.bar)
+Extra constant evaluation: evaluated: 12, effectively constant: 2
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect
index 1d4c9d2..14a187b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect
@@ -69,7 +69,7 @@
 typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
 typedef B<X extends (self::D<X>) → self::D<X> = (self::D<dynamic>) → self::D<dynamic>> = self::D<X>;
 class C<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::C<self::C::X%>
     : super core::Object::•() {}
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
@@ -78,7 +78,7 @@
     return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor •() → self::D<self::D::X%>
     : super core::Object::•()
     ;
@@ -108,3 +108,8 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+constants  {
+  #C1 = constructor-tearoff self::C::bar
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index d331e38..d03d29f 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -14,12 +14,14 @@
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized
 extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
+extension_types/type_variable_in_static_context: ExpectationFileMismatchSerialized # Expected.
 general/abstract_members: TypeCheckError
 general/bug30695: TypeCheckError
 general/covariant_field: TypeCheckError
 general/crashes/crash_02/main: Crash
 general/crashes/crash_06/main: Crash
 general/getter_vs_setter_type: TypeCheckError
+general/implement_semi_stub: TypeCheckError
 general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
index 4ca626f..b641197 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
@@ -75,7 +75,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::D*
     return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
   factory D() = Missing;
@@ -99,3 +99,7 @@
   factory D() = Missing;
                 ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::D::•
+}
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
index 5a0190f..b631f32 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
@@ -91,3 +91,8 @@
 }
 static method main() → void
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///class_hierarchy.dart:11:7 -> ConstructorTearOffConstant(D.)
+Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
index 4ca626f..b641197 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
@@ -75,7 +75,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::D*
     return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
   factory D() = Missing;
@@ -99,3 +99,7 @@
   factory D() = Missing;
                 ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::D::•
+}
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
index 900f8a7..05e4007 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
@@ -73,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3];
   constructor internal() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -102,7 +102,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
+  static final field dynamic _redirecting# = <dynamic>[#C4, #C5];
   constructor internal() → self::B<self::B::S*>*
     : super self::A::internal()
     ;
@@ -140,3 +140,11 @@
   factory A.c() = Missing;
                   ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::a
+  #C2 = constructor-tearoff self::A::b
+  #C3 = constructor-tearoff self::A::c
+  #C4 = constructor-tearoff self::B::a
+  #C5 = constructor-tearoff self::B::b
+}
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
index 12ffeef..ba2de86 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
@@ -117,3 +117,12 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:11:7 -> ConstructorTearOffConstant(A.a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:11:7 -> ConstructorTearOffConstant(A.b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:11:7 -> ConstructorTearOffConstant(A.c)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:19:7 -> ConstructorTearOffConstant(B.a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:19:7 -> ConstructorTearOffConstant(B.b)
+Extra constant evaluation: evaluated: 9, effectively constant: 5
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
index 900f8a7..05e4007 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
@@ -73,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3];
   constructor internal() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -102,7 +102,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
+  static final field dynamic _redirecting# = <dynamic>[#C4, #C5];
   constructor internal() → self::B<self::B::S*>*
     : super self::A::internal()
     ;
@@ -140,3 +140,11 @@
   factory A.c() = Missing;
                   ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::a
+  #C2 = constructor-tearoff self::A::b
+  #C3 = constructor-tearoff self::A::c
+  #C4 = constructor-tearoff self::B::a
+  #C5 = constructor-tearoff self::B::b
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
index 58f3e10..b0dbf3f 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
@@ -63,7 +63,7 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::C::good];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   const constructor constant() → self::C*
     : super core::Object::•()
     ;
@@ -98,17 +98,18 @@
          ^";
 static method main() → dynamic {
   self::C* c = null;
-  core::print(#C1);
+  core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   print(const C.missingFactoryKeyword());
               ^");
-  core::print(#C1);
+  core::print(#C2);
   core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
 }
 
 constants  {
-  #C1 = self::C {}
+  #C1 = constructor-tearoff self::C::good
+  #C2 = self::C {}
 }
 
 
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
index 49eadbc..19384f6 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
@@ -54,3 +54,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_000044.dart:9:7 -> ConstructorTearOffConstant(C.good)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
index 41ab0dd..b406cc3 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
@@ -63,7 +63,7 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::C::good];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   const constructor constant() → self::C*
     : super core::Object::•()
     ;
@@ -98,17 +98,18 @@
          ^";
 static method main() → dynamic {
   self::C* c = null;
-  core::print(#C1);
+  core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   print(const C.missingFactoryKeyword());
               ^");
-  core::print(#C1);
+  core::print(#C2);
   core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
 }
 
 constants  {
-  #C1 = self::C {}
+  #C1 = constructor-tearoff self::C::good
+  #C2 = self::C {}
 }
 
 
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
index 3f594b7..66f50c0 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::foo];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
@@ -45,3 +45,8 @@
   self::A* a = new self::D::•();
   exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
index b498bf4..1f48749 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
@@ -40,3 +40,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_000067.dart:7:7 -> ConstructorTearOffConstant(A.foo)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_000067.dart:13:7 -> ConstructorTearOffConstant(C.bar)
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
index 3f594b7..66f50c0 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::foo];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
@@ -45,3 +45,8 @@
   self::A* a = new self::D::•();
   exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
index 89937c2..6a366d0 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
@@ -33,7 +33,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::Supertype*
     return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
   factory Supertype() = Unresolved;
@@ -54,3 +54,7 @@
   print(new Supertype());
             ^");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
index e164c58..da1fe3e 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
@@ -47,3 +47,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_35259.dart:5:7 -> ConstructorTearOffConstant(Supertype.)
+Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
index 89937c2..6a366d0 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::Supertype*
     return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
   factory Supertype() = Unresolved;
@@ -54,3 +54,7 @@
   print(new Supertype());
             ^");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
index 27e321c..0b4828a 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::Supertype*
     return new self::X::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -51,3 +51,7 @@
   X x = new Supertype();
             ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
index 5198fda..fd0802b 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
@@ -43,3 +43,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_35260.dart:5:7 -> ConstructorTearOffConstant(Supertype.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
index 27e321c..0b4828a 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::Supertype*
     return new self::X::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -51,3 +51,7 @@
   X x = new Supertype();
             ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
index 6e380a7..9885c52 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::foo];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::B<self::B::T*>*
     : super self::C::•()
     ;
@@ -25,7 +25,7 @@
     return new self::B::•<self::B::foo::T*>();
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → self::C<self::C::K*>*
     : super core::Object::•()
     ;
@@ -49,3 +49,8 @@
   factory C.bar() = B<K>.foo;
                     ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::B::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
index b64319b..c71adb4 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
@@ -44,3 +44,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_35266.dart:5:7 -> ConstructorTearOffConstant(B.foo)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_35266.dart:11:7 -> ConstructorTearOffConstant(C.bar)
+Extra constant evaluation: evaluated: 5, effectively constant: 2
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
index 6e380a7..9885c52 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::foo];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::B<self::B::T*>*
     : super self::C::•()
     ;
@@ -25,7 +25,7 @@
     return new self::B::•<self::B::foo::T*>();
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → self::C<self::C::K*>*
     : super core::Object::•()
     ;
@@ -49,3 +49,8 @@
   factory C.bar() = B<K>.foo;
                     ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::B::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 6b92aed..3619d46 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -6,9 +6,6 @@
 # Kernel ASTs directly, that is, code in pkg/fasta/lib/src/kernel/ with
 # strong-mode enabled.
 
-dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854
-dart2js/late_from_dill/main: SemiFuzzFailure # dartbug.com/45854, see also https://dart-review.googlesource.com/c/sdk/+/213768
-
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
@@ -22,6 +19,7 @@
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
+extension_types/type_variable_in_static_context: ExpectationFileMismatchSerialized # Expected.
 late_lowering/covariant_late_field: TypeCheckError
 nnbd/covariant_late_field: TypeCheckError
 nnbd/getter_vs_setter_type: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 6eff171..0c51eb2 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -19,6 +19,7 @@
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
+extension_types/type_variable_in_static_context: ExpectationFileMismatchSerialized # Expected.
 extensions/extension_setter_error: TypeCheckError
 extensions/instance_access_of_static: RuntimeError
 extensions/invalid_explicit_access: RuntimeError
@@ -73,6 +74,8 @@
 general/error_recovery/yield_not_in_generator: RuntimeError
 general/expressions: RuntimeError
 general/getter_vs_setter_type: TypeCheckError
+general/implement_semi_stub: TypeCheckError
+general/implicit_super_call: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
 general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
@@ -103,6 +106,7 @@
 general/redirecting_factory: RuntimeError
 general/redirecting_factory_invocation_in_invalid: TypeCheckError
 general/spread_collection: RuntimeError # Should be fixed as part of implementing spread collection support
+general/super_semi_stub: TypeCheckError
 general/type_parameter_type_named_int: RuntimeError
 general/type_variable_as_super: RuntimeError
 general/unsound_promotion: TypeCheckError
@@ -131,6 +135,7 @@
 inference_new/infer_assign_to_index_this_upwards: TypeCheckError
 inference_new/infer_assign_to_index_upwards: TypeCheckError
 late_lowering/covariant_late_field: TypeCheckError
+named_arguments_anywhere/redirecting_constructor_initializers: Crash # Issue 47524.
 nnbd/covariant_late_field: TypeCheckError
 nnbd/getter_vs_setter_type: TypeCheckError
 nnbd/issue42603: TypeCheckError
@@ -149,6 +154,7 @@
 nnbd_mixed/issue41567: TypeCheckError
 nnbd_mixed/messages_with_types_opt_in: TypeCheckError
 nnbd_mixed/messages_with_types_opt_out: TypeCheckError
+nnbd_mixed/mixin_from_opt_in/main: RuntimeError
 rasta/abstract_constructor: RuntimeError
 rasta/bad_constructor_redirection: RuntimeError
 rasta/bad_continue: RuntimeError
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 076e9ed..260c55f 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -25,6 +25,7 @@
 const_functions/const_functions_const_factory: FormatterCrash
 constructor_tearoffs/issue46133: FormatterCrash
 constructor_tearoffs/issue47075: FormatterCrash
+constructor_tearoffs/new_as_selector: FormatterCrash
 dart2js/late_fields: FormatterCrash
 dart2js/late_statics: FormatterCrash
 extension_types/basic_show: FormatterCrash
@@ -39,6 +40,7 @@
 extension_types/simple_show_and_hide: FormatterCrash
 extension_types/simple_show_hide: FormatterCrash
 extension_types/simple_show_hide_conflicts: FormatterCrash
+extension_types/type_variable_in_static_context: FormatterCrash
 extension_types/various_hide_elements: FormatterCrash
 extension_types/various_show_elements: FormatterCrash
 extensions/extension_constructor: FormatterCrash
@@ -85,12 +87,15 @@
 general/issue43363: FormatterCrash
 general/issue45490: FormatterCrash
 general/issue45700.crash: FormatterCrash
+general/issue47495: FormatterCrash
 general/many_errors: FormatterCrash
 general/missing_prefix_name: FormatterCrash
+general/new_as_selector: FormatterCrash
 general/null_aware_super: FormatterCrash
 general/null_safety_invalid_experiment: FormatterCrash
 general/null_safety_invalid_experiment_and_language_version: FormatterCrash
 general/type_parameters_on_void: FormatterCrash
+general/type_variable_in_static_context: FormatterCrash
 general/var_as_type_name: FormatterCrash
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: FormatterCrash
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: FormatterCrash
@@ -129,6 +134,7 @@
 late_lowering/override_getter_setter: FormatterCrash
 late_lowering/skip_late_final_uninitialized_instance_fields/main: FormatterCrash
 late_lowering/uninitialized_non_nullable_late_fields: FormatterCrash
+named_arguments_anywhere/redirecting_constructor_initializers: FormatterCrash
 nnbd/abstract_field_errors: FormatterCrash
 nnbd/covariant_late_field: FormatterCrash
 nnbd/duplicates_instance: FormatterCrash
diff --git a/pkg/front_end/testcases/unscheduled_experiments/folder.options b/pkg/front_end/testcases/unscheduled_experiments/folder.options
new file mode 100644
index 0000000..b931072
--- /dev/null
+++ b/pkg/front_end/testcases/unscheduled_experiments/folder.options
@@ -0,0 +1 @@
+--enable-unscheduled-experiments
\ No newline at end of file
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index fe8d64f..3b2aaee 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -9,8 +9,6 @@
 general/error_recovery/issue_39202.crash: SemiFuzzCrash
 general/error_recovery/issue_39058.crash: SemiFuzzFailure
 regress/utf_16_le_content.crash: SemiFuzzCrash
-dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854
-dart2js/late_from_dill/main: SemiFuzzFailure # dartbug.com/45854, see also https://dart-review.googlesource.com/c/sdk/+/213768
 
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
@@ -25,6 +23,7 @@
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
+extension_types/type_variable_in_static_context: ExpectationFileMismatchSerialized # Expected.
 extensions/extension_setter_error: TypeCheckError
 extensions/instance_access_of_static: RuntimeError
 extensions/invalid_explicit_access: RuntimeError
@@ -79,6 +78,8 @@
 general/error_recovery/yield_not_in_generator: RuntimeError
 general/expressions: RuntimeError
 general/getter_vs_setter_type: TypeCheckError
+general/implement_semi_stub: TypeCheckError
+general/implicit_super_call: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
 general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
@@ -110,6 +111,7 @@
 general/redirecting_factory: RuntimeError
 general/redirecting_factory_invocation_in_invalid: TypeCheckError
 general/spread_collection: RuntimeError
+general/super_semi_stub: TypeCheckError
 general/type_parameter_type_named_int: RuntimeError # Expected
 general/type_variable_as_super: RuntimeError
 general/unsound_promotion: TypeCheckError
@@ -156,6 +158,7 @@
 nnbd_mixed/issue41567: TypeCheckError
 nnbd_mixed/messages_with_types_opt_in: TypeCheckError
 nnbd_mixed/messages_with_types_opt_out: TypeCheckError
+nnbd_mixed/mixin_from_opt_in/main: RuntimeError
 rasta/abstract_constructor: RuntimeError
 rasta/bad_constructor_redirection: RuntimeError
 rasta/bad_continue: RuntimeError
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 8c5b79e..cc90a5b 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -2,7 +2,7 @@
   "": "Copyright (c) 2016, 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.md file.",
-  "packages": "../../.packages",
+  "packages": "../../.dart_tool/package_config.json",
   "suites": [
     {
       "name": "messages",
@@ -248,7 +248,7 @@
       "pattern": [
         "pkg/front_end/.*\\.dart$",
         "pkg/front_end/.*\\.crash_dart$",
-        "tests/.*\\.dart$"
+        "/tests/.*\\.dart$"
       ],
       "exclude": []
     },
@@ -392,7 +392,7 @@
       "kind": "test_dart",
       "arch": "x64",
       "mode": "release",
-      "common": "--dart2js-batch --time -pcolor --report -ax64 -mrelease --write-result-log",
+      "common": "--time -pcolor --report -ax64 -mrelease --write-result-log",
       "command-lines": [
         "--checked dart2js",
         "-cdart2js -rd8 --exclude-suite=observatory_ui",
@@ -418,7 +418,7 @@
       "kind": "test_dart",
       "arch": "x64",
       "mode": "release",
-      "common": "--dart2js-batch --time -pcolor --report -ax64 -mrelease --write-result-log",
+      "common": "--time -pcolor --report -ax64 -mrelease --write-result-log",
       "command-lines": [
         "-t240 --checked pkg/(kernel|front_end|fasta) dart2js",
         "-cdartk -rvm",
@@ -432,7 +432,7 @@
       "kind": "test_dart",
       "arch": "x64",
       "mode": "release",
-      "common": "--dart2js-batch --time -pcolor --report -ax64 -mrelease --write-result-log",
+      "common": "--time -pcolor --report -ax64 -mrelease --write-result-log",
       "command-lines": [
         "-cdart2js -rd8 --use-sdk --minified language language_2 web_2 corelib corelib_2"
       ]
diff --git a/pkg/front_end/testing_with_lints.json b/pkg/front_end/testing_with_lints.json
index 6cdef88..4570a39 100644
--- a/pkg/front_end/testing_with_lints.json
+++ b/pkg/front_end/testing_with_lints.json
@@ -3,7 +3,7 @@
 "ignored_2":"for details. All rights reserved. Use of this source code is governed by a",
 "ignored_3":"BSD-style license that can be found in the LICENSE.md file.",
 
-  "packages": "../../.packages",
+  "packages": "../../.dart_tool/package_config.json",
   "analyze": {
     "options": "analysis_options.yaml",
     "uris": [
diff --git a/pkg/front_end/tool/_fasta/additional_targets_test.dart b/pkg/front_end/tool/_fasta/additional_targets_test.dart
index e5b3b50..dabba4c 100644
--- a/pkg/front_end/tool/_fasta/additional_targets_test.dart
+++ b/pkg/front_end/tool/_fasta/additional_targets_test.dart
@@ -18,7 +18,7 @@
   String expected =
       "  ${Flags.target}=${(targets.keys.toList()..sort()).join('|')}";
   MessageCode code = messageFastaUsageLong;
-  if (!code.message.contains(expected)) {
+  if (!code.problemMessage.contains(expected)) {
     throw "Error: ${code.name} in pkg/front_end/messages.yaml doesn't contain"
         " '$expected'.";
   }
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index 61caaf3..0c8312e 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -60,6 +60,7 @@
   Options.compileSdk,
   Options.dumpIr,
   Options.enableExperiment,
+  Options.enableUnscheduledExperiments,
   Options.excludeSource,
   Options.omitPlatform,
   Options.fatal,
@@ -106,7 +107,7 @@
   final bool verbose = Options.verbose.read(parsedOptions);
 
   if (help) {
-    print(computeUsage(programName, verbose).message);
+    print(computeUsage(programName, verbose).problemMessage);
     exit(0);
   }
 
@@ -188,6 +189,9 @@
       ? NnbdMode.Agnostic
       : (nnbdStrongMode ? NnbdMode.Strong : NnbdMode.Weak);
 
+  final bool enableUnscheduledExperiments =
+      Options.enableUnscheduledExperiments.read(parsedOptions);
+
   final bool warnOnReachabilityCheck =
       Options.warnOnReachabilityCheck.read(parsedOptions);
 
@@ -247,6 +251,7 @@
     ..explicitExperimentalFlags = explicitExperimentalFlags
     ..environmentDefines = noDefines ? null : parsedOptions.defines
     ..nnbdMode = nnbdMode
+    ..enableUnscheduledExperiments = enableUnscheduledExperiments
     ..additionalDills = linkDependencies
     ..emitDeps = !noDeps
     ..warnOnReachabilityCheck = warnOnReachabilityCheck
@@ -330,7 +335,7 @@
 
   return CompilerContext.runWithOptions<T>(options, (CompilerContext c) {
     if (problem != null) {
-      print(computeUsage(programName, options.verbose).message);
+      print(computeUsage(programName, options.verbose).problemMessage);
       PlainAndColorizedString formatted =
           c.format(problem.message.withoutLocation(), Severity.error);
       String formattedText;
@@ -350,9 +355,10 @@
 Message computeUsage(String programName, bool verbose) {
   String basicUsage = "Usage: $programName [options] dartfile\n";
   String? summary;
-  String options =
-      (verbose ? messageFastaUsageLong.message : messageFastaUsageShort.message)
-          .trim();
+  String options = (verbose
+          ? messageFastaUsageLong.problemMessage
+          : messageFastaUsageShort.problemMessage)
+      .trim();
   switch (programName) {
     case "outline":
       summary =
@@ -393,7 +399,7 @@
   try {
     return await action();
   } on DebugAbort catch (e) {
-    print(e.message.message);
+    print(e.message.problemMessage);
 
     // DebugAbort should never happen in production code, so we want test.py to
     // treat this as a crash which is signalled by exiting with 255.
diff --git a/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart b/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart
index 3624fe0..301e0cb 100644
--- a/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart
+++ b/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart
@@ -113,6 +113,7 @@
 
   @override
   void beginMethod(
+      DeclarationKind declarationKind,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 55d233a..f75d37e 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -430,10 +430,10 @@
   if (parameters.isEmpty && conversions.isEmpty && arguments.isEmpty) {
     // ignore: unnecessary_null_comparison
     if (problemMessage != null) {
-      codeArguments.add('message: r"""$problemMessage"""');
+      codeArguments.add('problemMessage: r"""$problemMessage"""');
     }
     if (correctionMessage != null) {
-      codeArguments.add('tip: r"""$correctionMessage"""');
+      codeArguments.add('correctionMessage: r"""$correctionMessage"""');
     }
 
     return new Template("""
@@ -449,10 +449,11 @@
   List<String> templateArguments = <String>[];
   // ignore: unnecessary_null_comparison
   if (problemMessage != null) {
-    templateArguments.add('messageTemplate: r"""$problemMessage"""');
+    templateArguments.add('problemMessageTemplate: r"""$problemMessage"""');
   }
   if (correctionMessage != null) {
-    templateArguments.add('tipTemplate: r"""$correctionMessage"""');
+    templateArguments
+        .add('correctionMessageTemplate: r"""$correctionMessage"""');
   }
 
   templateArguments.add("withArguments: _withArguments$name");
@@ -462,9 +463,10 @@
   if (hasLabeler) {
     message += " + labeler.originMessages";
   }
-  messageArguments.add("message: ${message}");
+  messageArguments.add("problemMessage: ${message}");
   if (correctionMessage != null) {
-    messageArguments.add("tip: ${interpolate(correctionMessage)}");
+    messageArguments
+        .add("correctionMessage: ${interpolate(correctionMessage)}");
   }
   messageArguments.add("arguments: { ${arguments.join(', ')} }");
 
diff --git a/pkg/front_end/tool/dart_doctest_impl.dart b/pkg/front_end/tool/dart_doctest_impl.dart
index 37f4d7a..1e51b84 100644
--- a/pkg/front_end/tool/dart_doctest_impl.dart
+++ b/pkg/front_end/tool/dart_doctest_impl.dart
@@ -51,6 +51,7 @@
     show useImplicitCreationExpressionInCfe;
 // ignore: import_of_legacy_library_into_null_safe
 import 'package:front_end/src/fasta/source/source_library_builder.dart';
+import 'package:front_end/src/fasta/source/source_loader.dart';
 import 'package:front_end/src/fasta/uri_translator.dart';
 import 'package:kernel/kernel.dart' as kernel
     show Combinator, Component, LibraryDependency, Library, Location, Source;
@@ -653,7 +654,7 @@
       location,
       endToken.charEnd - startToken.charOffset,
       source.importUri!.toString(),
-      message.message);
+      message.problemMessage);
 }
 
 CommentString extractComments(CommentToken comment, String rawString) {
@@ -878,7 +879,20 @@
       : super(fileSystem, includeComments, dillTarget, uriTranslator);
 
   @override
-  LibraryBuilder createLibraryBuilder(
+  SourceLoader createLoader() {
+    return new DocTestSourceLoader(compiler, fileSystem, includeComments, this);
+  }
+}
+
+class DocTestSourceLoader extends SourceLoader {
+  final DocTestIncrementalCompiler compiler;
+
+  DocTestSourceLoader(this.compiler, FileSystem fileSystem,
+      bool includeComments, DocTestIncrementalKernelTarget target)
+      : super(fileSystem, includeComments, target);
+
+  @override
+  SourceLibraryBuilder createLibraryBuilder(
       Uri uri,
       Uri fileUri,
       Uri? packageUri,
diff --git a/pkg/front_end/tool/kernel_ast_file_rewriter.dart b/pkg/front_end/tool/kernel_ast_file_rewriter.dart
index 2d0e924..16f15e7 100644
--- a/pkg/front_end/tool/kernel_ast_file_rewriter.dart
+++ b/pkg/front_end/tool/kernel_ast_file_rewriter.dart
@@ -57,8 +57,8 @@
 
     DirectParserASTContentClassDeclarationEnd classDeclaration =
         cls.getClassDeclaration();
-    DirectParserASTContentClassOrMixinBodyEnd classOrMixinBody =
-        classDeclaration.getClassOrMixinBody();
+    DirectParserASTContentClassOrMixinOrExtensionBodyEnd classOrMixinBody =
+        classDeclaration.getClassOrMixinOrExtensionBody();
 
     Set<String> namedClassConstructors = {};
     Set<String> namedFields = {};
diff --git a/pkg/frontend_server/pubspec.yaml b/pkg/frontend_server/pubspec.yaml
index 504c493..a3c97a6 100644
--- a/pkg/frontend_server/pubspec.yaml
+++ b/pkg/frontend_server/pubspec.yaml
@@ -7,7 +7,7 @@
   sdk: "^2.7.0"
 
 dependencies:
-  args: ^1.4.4
+  args: ^2.0.0
   build_integration:
     path: ../build_integration
   compiler:
@@ -18,7 +18,7 @@
     path: ../front_end
   kernel:
     path: ../kernel
-  package_config: ^1.9.0
+  package_config: ^2.0.0
   path: any
   usage: any
   vm:
diff --git a/pkg/frontend_server/test/src/javascript_bundle_test.dart b/pkg/frontend_server/test/src/javascript_bundle_test.dart
index d927f82..69a7156 100644
--- a/pkg/frontend_server/test/src/javascript_bundle_test.dart
+++ b/pkg/frontend_server/test/src/javascript_bundle_test.dart
@@ -40,7 +40,6 @@
   'dart:svg': [],
   'dart:web_audio': [],
   'dart:web_gl': [],
-  'dart:web_sql': [],
   'dart:_js_helper': [
     'PrivateSymbol',
     'LinkedMap',
diff --git a/pkg/js/lib/js.dart b/pkg/js/lib/js.dart
index 9de2f52..1c099c3 100644
--- a/pkg/js/lib/js.dart
+++ b/pkg/js/lib/js.dart
@@ -25,6 +25,10 @@
   const _Anonymous();
 }
 
+// class _StaticInterop {
+//   const _StaticInterop();
+// }
+
 /// An annotation that indicates a [JS] annotated class is structural and does
 /// not have a known JavaScript prototype.
 ///
@@ -33,3 +37,13 @@
 /// desugars to creating a JavaScript object literal with name-value pairs
 /// corresponding to the parameter names and values.
 const _Anonymous anonymous = _Anonymous();
+
+/// [staticInterop] enables the [JS] annotated class to be treated as a "static"
+/// interop class.
+///
+/// These classes allow interop with native types, like the ones in `dart:html`.
+/// These classes should not contain any instance members, inherited or
+/// otherwise, and should instead use static extension members.
+// TODO(47324, 47325): Uncomment these annotations once erasure and subtyping
+// are ready.
+// const _StaticInterop staticInterop = _StaticInterop();
diff --git a/pkg/js/proposal.md b/pkg/js/proposal.md
index 8e4ae76..9e33aa4 100644
--- a/pkg/js/proposal.md
+++ b/pkg/js/proposal.md
@@ -956,7 +956,7 @@
 }
 
 // Note: package:js will defined some helpers like this.
-// More research is needed to find all of the the common patterns.
+// More research is needed to find all of the common patterns.
 static Stream<T> CreateStream<T>(
     @JS() Func0 Function(Func1<T, void> nextOrObserver, [Func1 opt_error])
         subscribeToEvent) {
diff --git a/pkg/js_ast/lib/src/nodes.dart b/pkg/js_ast/lib/src/nodes.dart
index 9ded615..b84ef51 100644
--- a/pkg/js_ast/lib/src/nodes.dart
+++ b/pkg/js_ast/lib/src/nodes.dart
@@ -1516,8 +1516,13 @@
   @override
   final AsyncModifier asyncModifier;
 
+  /// Indicates whether it is permissible to try to emit this arrow function
+  /// in a form with an implicit 'return'.
+  final bool implicitReturnAllowed;
+
   ArrowFunction(this.params, this.body,
-      {this.asyncModifier = AsyncModifier.sync});
+      {this.asyncModifier = AsyncModifier.sync,
+      this.implicitReturnAllowed = true});
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrowFunction(this);
 
@@ -1534,8 +1539,9 @@
     body.accept1(visitor, arg);
   }
 
-  ArrowFunction _clone() =>
-      ArrowFunction(params, body, asyncModifier: asyncModifier);
+  ArrowFunction _clone() => ArrowFunction(params, body,
+      asyncModifier: asyncModifier,
+      implicitReturnAllowed: implicitReturnAllowed);
 
   int get precedenceLevel => ASSIGNMENT;
 }
diff --git a/pkg/js_ast/lib/src/printer.dart b/pkg/js_ast/lib/src/printer.dart
index af0c66a..5c5620e 100644
--- a/pkg/js_ast/lib/src/printer.dart
+++ b/pkg/js_ast/lib/src/printer.dart
@@ -1128,6 +1128,15 @@
     spaceOut();
     int closingPosition;
     Node body = fun.body;
+    // Simplify arrow functions that return a single expression.
+    // Note that this can result in some sourcemapped positions disappearing
+    // around the elided Return. See http://dartbug.com/47354
+    if (fun.implicitReturnAllowed && body is Block) {
+      final statement = unwrapBlockIfSingleStatement(body);
+      if (statement is Return) {
+        body = statement.value;
+      }
+    }
     if (body is Block) {
       closingPosition =
           blockOut(body, shouldIndent: false, needsNewline: false);
@@ -1140,7 +1149,7 @@
       visitNestedExpression(body, ASSIGNMENT,
           newInForInit: false, newAtStatementBegin: false);
       if (needsParens) out(")");
-      closingPosition = _charCount - 1;
+      closingPosition = _charCount;
     }
     localNamer.leaveScope();
     return closingPosition;
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 8c4fccf..e710da2 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 73;
+  UInt32 formatVersion = 74;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -444,6 +444,7 @@
   Name name;
   List<Expression> annotations;
   MemberReference stubTarget; // May be NullReference.
+  Option<FunctionType> signatureType;
   FunctionNode function;
 }
 
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index ee30a76..86800bb 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -2031,9 +2031,82 @@
     node.parent = this;
   }
 
+  /// Returns the type of this member when accessed as a getter.
+  ///
+  /// For a field, this is the field type. For a getter, this is the return
+  /// type. For a method or constructor, this is the tear off type.
+  ///
+  /// For a setter, this is undefined. Currently, non-nullable `Never` is
+  /// returned.
+  // TODO(johnniwinther): Should we use `InvalidType` for the undefined cases?
   DartType get getterType;
+
+  /// Returns the type of this member when access as a getter on a super class.
+  ///
+  /// This is in most cases the same as for [getterType].
+  ///
+  /// An exception is for forwarding semi stubs:
+  ///
+  ///    class Super {
+  ///      void method(num a) {}
+  ///    }
+  ///    class Class extends Super {
+  ///      void method(covariant int a);
+  ///    }
+  ///    class Subclass extends Class {
+  ///      void method(int a) {
+  ///        super.method; // Type `void Function(num)`.
+  ///        Class().method; // Type `void Function(int)`.
+  ///      }
+  ///    }
+  ///
+  /// Here, `Class.method` is turned into a forwarding semi stub
+  ///
+  ///     void method(covariant num a) => super.method(a);
+  ///
+  /// with [signatureType] `void Function(int)`. When `Class.method` is used
+  /// as the target of a super get, it has getter type `void Function(num)` and
+  /// as the target of an instance get, it has getter type `void Function(int)`.
+  DartType get superGetterType => getterType;
+
+  /// Returns the type of this member when accessed as a setter.
+  ///
+  /// For an assignable field, this is the field type. For a setter this is the
+  /// parameter type.
+  ///
+  /// For other members, including unassignable fields, this is undefined.
+  /// Currently, non-nullable `Never` is returned.
+  // TODO(johnniwinther): Should we use `InvalidType` for the undefined cases?
   DartType get setterType;
 
+  /// Returns the type of this member when access as a setter on a super class.
+  ///
+  /// This is in most cases the same as for [setterType].
+  ///
+  /// An exception is for forwarding semi stubs:
+  ///
+  ///    class Super {
+  ///      void set setter(num a) {}
+  ///    }
+  ///    class Class extends Super {
+  ///      void set setter(covariant int a);
+  ///    }
+  ///    class Subclass extends Class {
+  ///      void set setter(int a) {
+  ///        super.setter = 0.5; // Valid.
+  ///        Class().setter = 0.5; // Invalid.
+  ///      }
+  ///    }
+  ///
+  /// Here, `Class.setter` is turned into a forwarding semi stub
+  ///
+  ///     void set setter(covariant num a) => super.setter = a;
+  ///
+  /// with [signatureType] `void Function(int)`. When `Class.setter` is used
+  /// as the target of a super set, it has setter type `num` and as the target
+  /// of an instance set, it has setter type `int`.
+  DartType get superSetterType => setterType;
+
   bool get containsSuperCalls {
     return transformerFlags & TransformerFlag.superCalls != 0;
   }
@@ -2436,6 +2509,7 @@
     }
   }
 
+  // TODO(johnniwinther): Provide the tear off type here.
   @override
   DartType get getterType => const NeverType.nonNullable();
 
@@ -2597,7 +2671,8 @@
   }
 
   @override
-  DartType get getterType => const NeverType.nonNullable();
+  DartType get getterType =>
+      function.computeFunctionType(enclosingLibrary.nonNullable);
 
   @override
   DartType get setterType => const NeverType.nonNullable();
@@ -2851,6 +2926,31 @@
   ProcedureStubKind stubKind;
   Reference? stubTargetReference;
 
+  /// The interface member signature type of this procedure.
+  ///
+  /// Normally this is derived from the parameter types and return type of
+  /// [function]. In rare cases, the interface member signature type is
+  /// different from the class member type, in which case the interface member
+  /// signature type is stored here.
+  ///
+  /// For instance
+  ///
+  ///   class Super {
+  ///     void method(num a) {}
+  ///   }
+  ///   class Class extends Super {
+  ///     void method(covariant int a);
+  ///   }
+  ///
+  /// Here the member `Class.method` is turned into a forwarding semi stub to
+  /// ensure that arguments passed to `Super.method` are checked as covariant.
+  /// Since `Super.method` allows `num` as argument, the inserted covariant
+  /// check must be against `num` and not `int`, and the parameter type of the
+  /// forwarding semi stub must be changed to `num`. Still, the interface of
+  /// `Class` requires that `Class.method` is `void Function(int)`, so for this,
+  /// it is stored explicitly as the [signatureType] on the procedure.
+  FunctionType? signatureType;
+
   Procedure(Name name, ProcedureKind kind, FunctionNode function,
       {bool isAbstract: false,
       bool isStatic: false,
@@ -3081,6 +3181,9 @@
       function = v.transform(function);
       function.parent = this;
     }
+    if (signatureType != null) {
+      signatureType = v.visitDartType(signatureType!) as FunctionType;
+    }
   }
 
   @override
@@ -3091,11 +3194,28 @@
       function = v.transform(function);
       function.parent = this;
     }
+    if (signatureType != null) {
+      DartType newSignatureType =
+          v.visitDartType(signatureType!, dummyDartType);
+      if (identical(newSignatureType, dummyDartType)) {
+        signatureType = null;
+      } else {
+        signatureType = newSignatureType as FunctionType;
+      }
+    }
   }
 
   @override
   DartType get getterType {
     return isGetter
+        ? (signatureType?.returnType ?? function.returnType)
+        : (signatureType ??
+            function.computeFunctionType(enclosingLibrary.nonNullable));
+  }
+
+  @override
+  DartType get superGetterType {
+    return isGetter
         ? function.returnType
         : function.computeFunctionType(enclosingLibrary.nonNullable);
   }
@@ -3103,6 +3223,14 @@
   @override
   DartType get setterType {
     return isSetter
+        ? (signatureType?.positionalParameters[0] ??
+            function.positionalParameters[0].type)
+        : const NeverType.nonNullable();
+  }
+
+  @override
+  DartType get superSetterType {
+    return isSetter
         ? function.positionalParameters[0].type
         : const NeverType.nonNullable();
   }
@@ -4793,7 +4921,8 @@
   Reference targetReference;
 
   StaticGet(Member target)
-      : this.byReference(getNonNullableMemberReferenceGetter(target));
+      : assert(target is Field || (target is Procedure && target.isGetter)),
+        this.targetReference = getNonNullableMemberReferenceGetter(target);
 
   StaticGet.byReference(this.targetReference);
 
@@ -4841,7 +4970,10 @@
   Reference targetReference;
 
   StaticTearOff(Procedure target)
-      : this.byReference(getNonNullableMemberReferenceGetter(target));
+      : assert(target.isStatic, "Unexpected static tear off target: $target"),
+        assert(target.kind == ProcedureKind.Method,
+            "Unexpected static tear off target: $target"),
+        this.targetReference = getNonNullableMemberReferenceGetter(target);
 
   StaticTearOff.byReference(this.targetReference);
 
@@ -8491,8 +8623,9 @@
   Reference targetReference;
 
   ConstructorTearOff(Member target)
-      : assert(target is Constructor ||
-            (target is Procedure && target.kind == ProcedureKind.Factory)),
+      : assert(
+            target is Constructor || (target is Procedure && target.isFactory),
+            "Unexpected constructor tear off target: $target"),
         this.targetReference = getNonNullableMemberReferenceGetter(target);
 
   ConstructorTearOff.byReference(this.targetReference);
@@ -13042,10 +13175,11 @@
   @override
   final Reference targetReference;
 
-  StaticTearOffConstant(Procedure procedure)
-      : targetReference = procedure.reference {
-    assert(procedure.isStatic);
-  }
+  StaticTearOffConstant(Procedure target)
+      : assert(target.isStatic),
+        assert(target.kind == ProcedureKind.Method,
+            "Unexpected static tear off target: $target"),
+        targetReference = target.reference;
 
   StaticTearOffConstant.byReference(this.targetReference);
 
@@ -13103,8 +13237,9 @@
   final Reference targetReference;
 
   ConstructorTearOffConstant(Member target)
-      : assert(target is Constructor ||
-            (target is Procedure && target.kind == ProcedureKind.Factory)),
+      : assert(
+            target is Constructor || (target is Procedure && target.isFactory),
+            "Unexpected constructor tear off target: $target"),
         this.targetReference = getNonNullableMemberReferenceGetter(target);
 
   ConstructorTearOffConstant.byReference(this.targetReference);
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 12c33df..b1f1dcd 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1702,6 +1702,7 @@
         (kind == ProcedureKind.Factory && functionNodeSize <= 50) ||
             _disableLazyReading;
     Reference? stubTargetReference = readNullableMemberReference();
+    FunctionType? signatureType = readDartTypeOption() as FunctionType?;
     FunctionNode function = readFunctionNode(
         lazyLoadBody: !readFunctionNodeNow, outerEndOffset: endOffset);
     if (node == null) {
@@ -1724,6 +1725,7 @@
     node.setTransformerFlagsWithoutLazyLoading(transformerFlags);
     node.stubKind = stubKind;
     node.stubTargetReference = stubTargetReference;
+    node.signatureType = signatureType;
 
     assert((node.stubKind == ProcedureStubKind.ConcreteForwardingStub &&
             node.stubTargetReference != null) ||
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index a6d04bd..4cf39b7 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1314,6 +1314,7 @@
     writeName(node.name);
     writeAnnotationList(node.annotations);
     writeNullAllowedReference(node.stubTargetReference);
+    writeOptionalNode(node.signatureType);
     writeFunctionNode(node.function);
     leaveScope(memberScope: true);
 
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 8fb7add..859ed11 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -176,7 +176,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 73;
+  static const int BinaryFormatVersion = 74;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/reference_from_index.dart b/pkg/kernel/lib/reference_from_index.dart
index 6182a4b..47c7260 100644
--- a/pkg/kernel/lib/reference_from_index.dart
+++ b/pkg/kernel/lib/reference_from_index.dart
@@ -9,7 +9,6 @@
         Extension,
         Field,
         Library,
-        Member,
         Name,
         Procedure,
         ProcedureKind,
@@ -116,19 +115,19 @@
 
 class IndexedClass extends IndexedContainer {
   final Class cls;
-  final Map<Name, Member> _constructors = new Map<Name, Member>();
+  final Map<Name, Reference> _constructors = new Map<Name, Reference>();
   @override
   final Library library;
 
   IndexedClass._(this.cls, this.library) {
     for (int i = 0; i < cls.constructors.length; i++) {
       Constructor constructor = cls.constructors[i];
-      _constructors[constructor.name] = constructor;
+      _constructors[constructor.name] = constructor.reference;
     }
     for (int i = 0; i < cls.procedures.length; i++) {
       Procedure procedure = cls.procedures[i];
       if (procedure.isFactory) {
-        _constructors[procedure.name] = procedure;
+        _constructors[procedure.name] = procedure.reference;
       } else {
         _addProcedure(procedure);
       }
@@ -136,5 +135,5 @@
     _addFields(cls.fields);
   }
 
-  Member? lookupConstructor(Name name) => _constructors[name];
+  Reference? lookupConstructorReference(Name name) => _constructors[name];
 }
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index 4a163b9..9e8ae3f 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -1795,6 +1795,9 @@
     if (!checkProcedure_stubTargetReference(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
+    if (!checkProcedure_signatureType(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
     if (!checkProcedure_fileEndOffset(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
@@ -5147,6 +5150,12 @@
         other.stubTargetReference, 'stubTargetReference');
   }
 
+  bool checkProcedure_signatureType(
+      EquivalenceVisitor visitor, Procedure node, Procedure other) {
+    return visitor.checkNodes(
+        node.signatureType, other.signatureType, 'signatureType');
+  }
+
   bool checkProcedure_fileEndOffset(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
     return checkMember_fileEndOffset(visitor, node, other);
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index faf9eaa..6a24e52 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1208,6 +1208,11 @@
     if (features.isNotEmpty) {
       writeWord("/*${features.join(',')}*/");
     }
+    if (node.signatureType != null) {
+      writeWord('/* signature-type:');
+      writeType(node.signatureType!);
+      writeWord('*/');
+    }
     switch (node.stubKind) {
       case ProcedureStubKind.Regular:
       case ProcedureStubKind.AbstractForwardingStub:
@@ -2844,12 +2849,7 @@
     writeSpaced('=');
     writeWord('instantiation');
     writeSpace();
-    Constant tearOffConstant = node.tearOffConstant;
-    if (tearOffConstant is TearOffConstant) {
-      writeMemberReferenceFromReference(tearOffConstant.targetReference);
-    } else {
-      writeConstantReference(tearOffConstant);
-    }
+    writeConstantReference(node.tearOffConstant);
     writeSpace();
     writeSymbol('<');
     writeList(node.types, writeType);
diff --git a/pkg/kernel/lib/transformations/value_class.dart b/pkg/kernel/lib/transformations/value_class.dart
index 2a96ffd..f69a386 100644
--- a/pkg/kernel/lib/transformations/value_class.dart
+++ b/pkg/kernel/lib/transformations/value_class.dart
@@ -9,6 +9,7 @@
 import '../ast.dart';
 import '../core_types.dart' show CoreTypes;
 import '../class_hierarchy.dart' show ClassHierarchy;
+import '../reference_from_index.dart';
 import './scanner.dart';
 
 class ValueClassScanner extends ClassScanner<Null> {
@@ -64,12 +65,23 @@
   }
 }
 
-void transformComponent(Component node, CoreTypes coreTypes,
-    ClassHierarchy hierarchy, TypeEnvironment typeEnvironment) {
+void transformComponent(
+    Component node,
+    CoreTypes coreTypes,
+    ClassHierarchy hierarchy,
+    ReferenceFromIndex? referenceFromIndex,
+    TypeEnvironment typeEnvironment) {
   ValueClassScanner scanner = new ValueClassScanner();
   ScanResult<Class, Null> valueClasses = scanner.scan(node);
   for (Class valueClass in valueClasses.targets.keys) {
-    transformValueClass(valueClass, coreTypes, hierarchy, typeEnvironment);
+    transformValueClass(
+        valueClass,
+        coreTypes,
+        hierarchy,
+        referenceFromIndex
+            ?.lookupLibrary(valueClass.enclosingLibrary)
+            ?.lookupIndexedClass(valueClass.name),
+        typeEnvironment);
   }
 
   treatCopyWithCallSites(node, coreTypes, typeEnvironment, hierarchy);
@@ -79,8 +91,12 @@
   }
 }
 
-void transformValueClass(Class cls, CoreTypes coreTypes,
-    ClassHierarchy hierarchy, TypeEnvironment typeEnvironment) {
+void transformValueClass(
+    Class cls,
+    CoreTypes coreTypes,
+    ClassHierarchy hierarchy,
+    IndexedClass? indexedClass,
+    TypeEnvironment typeEnvironment) {
   Constructor? syntheticConstructor = null;
   for (Constructor constructor in cls.constructors) {
     if (constructor.isSynthetic) {
@@ -93,11 +109,11 @@
   allVariablesList.sort((a, b) => a.name!.compareTo(b.name!));
 
   addConstructor(cls, coreTypes, syntheticConstructor!);
-  addEqualsOperator(cls, coreTypes, hierarchy, allVariablesList);
-  addHashCode(cls, coreTypes, hierarchy, allVariablesList);
-  addToString(cls, coreTypes, hierarchy, allVariablesList);
-  addCopyWith(cls, coreTypes, hierarchy, allVariablesList, syntheticConstructor,
-      typeEnvironment);
+  addEqualsOperator(cls, coreTypes, hierarchy, indexedClass, allVariablesList);
+  addHashCode(cls, coreTypes, hierarchy, indexedClass, allVariablesList);
+  addToString(cls, coreTypes, hierarchy, indexedClass, allVariablesList);
+  addCopyWith(cls, coreTypes, hierarchy, indexedClass, allVariablesList,
+      syntheticConstructor, typeEnvironment);
 }
 
 void addConstructor(
@@ -137,7 +153,7 @@
 }
 
 void addEqualsOperator(Class cls, CoreTypes coreTypes, ClassHierarchy hierarchy,
-    List<VariableDeclaration> allVariablesList) {
+    IndexedClass? indexedClass, List<VariableDeclaration> allVariablesList) {
   List<VariableDeclaration> allVariables = allVariablesList.toList();
   for (Procedure procedure in cls.procedures) {
     if (procedure.kind == ProcedureKind.Operator &&
@@ -167,8 +183,9 @@
     targets[variable] = target;
   }
 
+  Name name = Name("==");
   Procedure equalsOperator = Procedure(
-      Name("=="),
+      name,
       ProcedureKind.Operator,
       FunctionNode(
           ReturnStatement(allVariables
@@ -184,13 +201,14 @@
                       previousValue!, LogicalExpressionOperator.AND, element))),
           returnType: returnType,
           positionalParameters: [other]),
-      fileUri: cls.fileUri)
+      fileUri: cls.fileUri,
+      reference: indexedClass?.lookupGetterReference(name))
     ..fileOffset = cls.fileOffset;
   cls.addProcedure(equalsOperator);
 }
 
 void addHashCode(Class cls, CoreTypes coreTypes, ClassHierarchy hierarchy,
-    List<VariableDeclaration> allVariablesList) {
+    IndexedClass? indexedClass, List<VariableDeclaration> allVariablesList) {
   List<VariableDeclaration> allVariables = allVariablesList.toList();
   for (Procedure procedure in cls.procedures) {
     if (procedure.kind == ProcedureKind.Getter &&
@@ -234,8 +252,9 @@
     targetsHashcode[variable] = targetHashcode;
     targets[variable] = target;
   }
+  Name name = Name("hashCode");
   cls.addProcedure(Procedure(
-      Name("hashCode"),
+      name,
       ProcedureKind.Getter,
       FunctionNode(
           ReturnStatement(StaticInvocation(
@@ -259,12 +278,13 @@
                             hashCombine!, Arguments([previousValue, element])))
               ]))),
           returnType: returnType),
-      fileUri: cls.fileUri)
+      fileUri: cls.fileUri,
+      reference: indexedClass?.lookupGetterReference(name))
     ..fileOffset = cls.fileOffset);
 }
 
 void addToString(Class cls, CoreTypes coreTypes, ClassHierarchy hierarchy,
-    List<VariableDeclaration> allVariablesList) {
+    IndexedClass? indexedClass, List<VariableDeclaration> allVariablesList) {
   List<Expression> wording = [StringLiteral("${cls.name}(")];
 
   for (VariableDeclaration variable in allVariablesList) {
@@ -291,12 +311,14 @@
   }
   DartType returnType =
       coreTypes.stringRawType(cls.enclosingLibrary.nonNullable);
+  Name name = Name("toString");
   cls.addProcedure(Procedure(
-      Name("toString"),
+      name,
       ProcedureKind.Method,
       FunctionNode(ReturnStatement(StringConcatenation(wording)),
           returnType: returnType),
-      fileUri: cls.fileUri)
+      fileUri: cls.fileUri,
+      reference: indexedClass?.lookupGetterReference(name))
     ..fileOffset = cls.fileOffset);
 }
 
@@ -304,6 +326,7 @@
     Class cls,
     CoreTypes coreTypes,
     ClassHierarchy hierarchy,
+    IndexedClass? indexedClass,
     List<VariableDeclaration> allVariablesList,
     Constructor syntheticConstructor,
     TypeEnvironment typeEnvironment) {
@@ -324,8 +347,9 @@
     targets[variable] = target;
   }
 
+  Name name = Name("copyWith");
   cls.addProcedure(Procedure(
-      Name("copyWith"),
+      name,
       ProcedureKind.Method,
       FunctionNode(
           ReturnStatement(ConstructorInvocation(
@@ -335,7 +359,8 @@
                       .map((f) => NamedExpression(f.name!, VariableGet(f)))
                       .toList()))),
           namedParameters: allVariables),
-      fileUri: cls.fileUri)
+      fileUri: cls.fileUri,
+      reference: indexedClass?.lookupGetterReference(name))
     ..fileOffset = cls.fileOffset);
 }
 
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index f836d1e..af4b1d0 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -1422,3 +1422,60 @@
       ? TypeParameterType.computeNullabilityFromBound(parameter)
       : Nullability.legacy;
 }
+
+/// Recalculates and updates nullabilities of the bounds in [typeParameters].
+///
+/// The procedure is intended to be used on type parameters that are in the
+/// scope of another declaration with type parameters. After a substitution
+/// involving the outer type parameters is performed, some potentially nullable
+/// bounds of the inner parameters can change to non-nullable. Since type
+/// parameters can depend on each other, the occurrences of those with changed
+/// nullabilities need to be updated in the bounds of the entire type parameter
+/// set.
+void updateBoundNullabilities(List<TypeParameter> typeParameters) {
+  if (typeParameters.isEmpty) return;
+  List<bool> visited =
+      new List<bool>.filled(typeParameters.length, false, growable: false);
+  for (int parameterIndex = 0;
+      parameterIndex < typeParameters.length;
+      parameterIndex++) {
+    _updateBoundNullabilities(typeParameters, visited, parameterIndex);
+  }
+}
+
+void _updateBoundNullabilities(
+    List<TypeParameter> typeParameters, List<bool> visited, int startIndex) {
+  if (visited[startIndex]) return;
+  visited[startIndex] = true;
+
+  TypeParameter parameter = typeParameters[startIndex];
+  DartType bound = parameter.bound;
+  while (bound is FutureOrType) {
+    bound = bound.typeArgument;
+  }
+  if (bound is TypeParameterType) {
+    int nextIndex = typeParameters.indexOf(bound.parameter);
+    if (nextIndex != -1) {
+      _updateBoundNullabilities(typeParameters, visited, nextIndex);
+      Nullability updatedNullability =
+          TypeParameterType.computeNullabilityFromBound(
+              typeParameters[nextIndex]);
+      if (bound.declaredNullability != updatedNullability) {
+        parameter.bound = _updateNestedFutureOrNullability(
+            parameter.bound, updatedNullability);
+      }
+    }
+  }
+}
+
+DartType _updateNestedFutureOrNullability(
+    DartType typeToUpdate, Nullability updatedNullability) {
+  if (typeToUpdate is FutureOrType) {
+    return new FutureOrType(
+        _updateNestedFutureOrNullability(
+            typeToUpdate.typeArgument, updatedNullability),
+        typeToUpdate.declaredNullability);
+  } else {
+    return typeToUpdate.withDeclaredNullability(updatedNullability);
+  }
+}
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index 9b8b502..e575a00 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -760,7 +760,7 @@
       checkUnresolvedInvocation(currentThisType!, node);
       return handleDynamicCall(currentThisType!, node.arguments);
     } else {
-      return handleCall(node.arguments, target.getterType,
+      return handleCall(node.arguments, target.superGetterType,
           receiver: getSuperReceiverType(target));
     }
   }
@@ -773,7 +773,7 @@
       return const DynamicType();
     } else {
       Substitution receiver = getSuperReceiverType(target);
-      return receiver.substituteType(target.getterType);
+      return receiver.substituteType(target.superGetterType);
     }
   }
 
@@ -784,7 +784,7 @@
     if (target != null) {
       Substitution receiver = getSuperReceiverType(target);
       checkAssignable(node.value, value,
-          receiver.substituteType(target.setterType, contravariant: true));
+          receiver.substituteType(target.superSetterType, contravariant: true));
     } else {
       checkUnresolvedInvocation(currentThisType!, node);
     }
diff --git a/pkg/kernel/pubspec.yaml b/pkg/kernel/pubspec.yaml
index 72c0820..140b0ee 100644
--- a/pkg/kernel/pubspec.yaml
+++ b/pkg/kernel/pubspec.yaml
@@ -7,9 +7,9 @@
 
 environment:
   sdk: '>=2.12.0 <3.0.0'
-dependencies:
+
 dev_dependencies:
-  args: '>=0.13.4 <2.0.0'
+  args: ^2.0.0
   expect:
     path: ../expect
   front_end:
diff --git a/pkg/kernel/test/class_hierarchy_self_check.dart b/pkg/kernel/test/class_hierarchy_self_check.dart
deleted file mode 100644
index 404d074..0000000
--- a/pkg/kernel/test/class_hierarchy_self_check.dart
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright (c) 2016, 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:kernel/kernel.dart';
-import 'package:kernel/class_hierarchy.dart';
-import 'package:kernel/core_types.dart';
-import 'package:test/test.dart';
-import 'class_hierarchy_basic.dart';
-import 'dart:io';
-import 'dart:math';
-import 'self_check_util.dart';
-
-void main(List<String> args) {
-  runSelfCheck(args, (String filename) {
-    testClassHierarchyOnComponent(loadComponentFromBinary(filename));
-  });
-}
-
-void testClassHierarchyOnComponent(Component component, {bool verbose: false}) {
-  BasicClassHierarchy basic = new BasicClassHierarchy(component);
-  CoreTypes coreTypes = new CoreTypes(component);
-  ClosedWorldClassHierarchy classHierarchy =
-      new ClassHierarchy(component, coreTypes) as ClosedWorldClassHierarchy;
-  int total = classHierarchy.numberOfClasses;
-  int progress = 0;
-  for (var class1 in classHierarchy.classes) {
-    for (var class2 in classHierarchy.classes) {
-      bool isSubclass = classHierarchy.isSubclassOf(class1, class2);
-      bool isSubtype = classHierarchy.isSubtypeOf(class1, class2);
-      var asInstance = classHierarchy.getClassAsInstanceOf(class1, class2);
-      if (isSubclass != basic.isSubclassOf(class1, class2)) {
-        fail('isSubclassOf(${class1.name}, ${class2.name}) returned '
-            '$isSubclass but should be ${!isSubclass}');
-      }
-      if (isSubtype != basic.isSubtypeOf(class1, class2)) {
-        fail('isSubtypeOf(${class1.name}, ${class2.name}) returned '
-            '$isSubtype but should be ${!isSubtype}');
-      }
-      if (asInstance != basic.getClassAsInstanceOf(class1, class2)) {
-        fail('asInstanceOf(${class1.name}, ${class2.name}) returned '
-            '$asInstance but should be '
-            '${basic.getClassAsInstanceOf(class1, class2)}');
-      }
-    }
-    ++progress;
-    if (verbose) {
-      stdout.write('\rSubclass queries ${100 * progress ~/ total}%');
-    }
-  }
-  Set<Name> names = new Set<Name>();
-  for (var classNode in classHierarchy.classes) {
-    for (var member in classNode.members) {
-      names.add(member.name);
-    }
-  }
-  List<Name> nameList = names.toList();
-  progress = 0;
-  for (var classNode in classHierarchy.classes) {
-    Iterable<Name> candidateNames = <Iterable<Name>>[
-      basic.gettersAndCalls[classNode]!.keys,
-      basic.setters[classNode]!.keys,
-      pickRandom(nameList, 100)
-    ].expand((x) => x);
-    for (Name name in candidateNames) {
-      Member? expectedGetter =
-          basic.getDispatchTarget(classNode, name, setter: false);
-      Member? expectedSetter =
-          basic.getDispatchTarget(classNode, name, setter: true);
-      Member? actualGetter =
-          classHierarchy.getDispatchTarget(classNode, name, setter: false);
-      Member? actualSetter =
-          classHierarchy.getDispatchTarget(classNode, name, setter: true);
-      if (actualGetter != expectedGetter) {
-        fail('lookupGetter($classNode, $name) returned '
-            '$actualGetter but should be $expectedGetter');
-      }
-      if (actualSetter != expectedSetter) {
-        fail('lookupSetter($classNode, $name) returned '
-            '$actualSetter but should be $expectedSetter');
-      }
-    }
-    ++progress;
-    if (verbose) {
-      stdout.write('\rDispatch queries ${100 * progress ~/ total}%');
-    }
-  }
-  progress = 0;
-  for (var classNode in classHierarchy.classes) {
-    Iterable<Name> candidateNames = [
-      basic.interfaceGettersAndCalls[classNode]!.keys,
-      basic.interfaceSetters[classNode]!.keys,
-      pickRandom(nameList, 100)
-    ].expand((x) => x);
-    for (Name name in candidateNames) {
-      Member? expectedGetter =
-          basic.getInterfaceMember(classNode, name, setter: false);
-      Member? expectedSetter =
-          basic.getInterfaceMember(classNode, name, setter: true);
-      Member? actualGetter =
-          classHierarchy.getInterfaceMember(classNode, name, setter: false);
-      Member? actualSetter =
-          classHierarchy.getInterfaceMember(classNode, name, setter: true);
-      if (actualGetter != expectedGetter) {
-        fail('getInterfaceMember($classNode, $name) returned '
-            '$actualGetter but should be $expectedGetter');
-      }
-      if (actualSetter != expectedSetter) {
-        fail('getInterfaceMember($classNode, $name, setter: true) '
-            'returned $actualSetter but should be $expectedSetter');
-      }
-    }
-    ++progress;
-    if (verbose) {
-      stdout.write('\rInterface queries ${100 * progress ~/ total}%');
-    }
-  }
-  for (var classNode in classHierarchy.classes) {
-    String getHash(member, superMember, setter) {
-      String eq = setter ? '=' : '';
-      return '$member$eq overrides $superMember$eq';
-    }
-
-    Set<String> expectedOverrides = new Set<String>();
-    basic.forEachOverridePair(classNode, (member, superMember, setter) {
-      expectedOverrides.add(getHash(member, superMember, setter));
-    });
-    Set<String> actualOverrides = new Set<String>();
-    classHierarchy.forEachOverridePair(classNode,
-        (member, superMember, setter) {
-      actualOverrides.add(getHash(member, superMember, setter));
-    });
-    for (var actual in actualOverrides) {
-      if (!expectedOverrides.contains(actual)) {
-        fail("forEachOverridePair($classNode) should not report that $actual");
-      }
-    }
-    for (var expected in expectedOverrides) {
-      if (!actualOverrides.contains(expected)) {
-        fail("forEachOverridePair($classNode) did not report that $expected");
-      }
-    }
-  }
-  if (verbose) {
-    print('\rProgress 100%. Done.');
-  }
-}
-
-var random = new Random(12345);
-
-List<T> pickRandom<T>(List<T> items, int n) {
-  var result = <T>[];
-  for (int i = 0; i < n; ++i) {
-    result.add(items[random.nextInt(items.length)]);
-  }
-  return result;
-}
diff --git a/pkg/kernel/test/class_hierarchy_test_disabled.dart b/pkg/kernel/test/class_hierarchy_test_disabled.dart
deleted file mode 100644
index bef2d58..0000000
--- a/pkg/kernel/test/class_hierarchy_test_disabled.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2016, 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:kernel/kernel.dart';
-import 'package:test/test.dart';
-import 'class_hierarchy_self_check.dart';
-
-void main() {
-  test('All-pairs class hierarchy tests on dart2js', () {
-    testClassHierarchyOnComponent(
-        loadComponentFromBinary('test/data/dart2js.dill'));
-  });
-}
diff --git a/pkg/kernel/test/round_trip.dart b/pkg/kernel/test/round_trip.dart
deleted file mode 100644
index 188a2a1..0000000
--- a/pkg/kernel/test/round_trip.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2016, 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.
-
-library kernel.round_trip;
-
-import 'dart:io';
-import 'package:kernel/binary/ast_from_binary.dart';
-import 'package:kernel/binary/ast_to_binary.dart';
-import 'binary/utils.dart';
-
-const String usage = '''
-Usage: round_trip.dart FILE.dill [sdk.dill]
-
-Deserialize and serialize the given component and check that the resulting byte
-sequence is identical to the original.
-''';
-
-void main(List<String> args) async {
-  if (args.length == 1) {
-    await testRoundTrip(new File(args[0]).readAsBytesSync(), null);
-  } else if (args.length == 2) {
-    await testRoundTrip(new File(args[0]).readAsBytesSync(),
-        new File(args[1]).readAsBytesSync());
-  } else {
-    print(usage);
-    exit(1);
-  }
-}
-
-Future<void> testRoundTrip(List<int> bytes, List<int>? sdkBytes) async {
-  var component = new Component();
-  if (sdkBytes != null) {
-    var sdk = new Component(nameRoot: component.root);
-    new BinaryBuilder(sdkBytes).readSingleFileComponent(sdk);
-  }
-  new BinaryBuilder(bytes).readSingleFileComponent(component);
-  ByteSink sink = new ByteSink();
-  new BinaryPrinter(sink).writeComponentFile(component);
-  List<int> writtenBytes = sink.builder.takeBytes();
-  if (bytes.length != writtenBytes.length) {
-    throw "Byte-lengths differ: ${bytes.length} vs ${writtenBytes.length}";
-  }
-  for (int i = 0; i < bytes.length; i++) {
-    if (bytes[i] != writtenBytes[i]) {
-      throw "Byte differs at index $i: "
-          "${show(bytes[i])} vs ${show(writtenBytes[i])}";
-    }
-  }
-  print("OK");
-}
-
-String show(int byte) {
-  return '$byte (0x${byte.toRadixString(16).padLeft(2, "0")})';
-}
diff --git a/pkg/kernel/test/round_trip_self_check.dart b/pkg/kernel/test/round_trip_self_check.dart
deleted file mode 100644
index 058cef8..0000000
--- a/pkg/kernel/test/round_trip_self_check.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2016, 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.
-
-library kernel.round_trip_test;
-
-import 'self_check_util.dart';
-import 'round_trip.dart' as cmd;
-
-void main(List<String> args) {
-  runSelfCheck(args, (String filename) {
-    cmd.main([filename]);
-  });
-}
diff --git a/pkg/kernel/test/self_check_util.dart b/pkg/kernel/test/self_check_util.dart
deleted file mode 100644
index d30640e..0000000
--- a/pkg/kernel/test/self_check_util.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2016, 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:async';
-
-import 'package:kernel/src/tool/batch_util.dart';
-
-/// Wraps a main() method for a test that should be runnable as a self-checking
-/// unit test.
-///
-/// These tests can be run like:
-///
-///    tools/test.py -cdartk -rself_check
-///
-/// The test can either be run with a single file passed on the command line
-/// or run in batch mode.
-void runSelfCheck(List<String> args, void runTest(String filename)) {
-  Future<CompilerOutcome> batchMain(List<String> arguments) async {
-    if (arguments.length != 1) {
-      throw 'Exactly one argument expected';
-    }
-    String filename = arguments[0];
-    if (!filename.endsWith('.dill')) {
-      throw 'File does not have expected .dill extension: $filename';
-    }
-    runTest(filename);
-    return CompilerOutcome.Ok;
-  }
-
-  if (args.length == 1 && args[0] == '--batch') {
-    runBatch(batchMain);
-  } else {
-    batchMain(args);
-  }
-}
diff --git a/pkg/kernel/test/verify_self_check.dart b/pkg/kernel/test/verify_self_check.dart
deleted file mode 100644
index ee84f9f..0000000
--- a/pkg/kernel/test/verify_self_check.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2016, 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:kernel/kernel.dart';
-import 'package:kernel/verifier.dart';
-
-import 'self_check_util.dart';
-
-void main(List<String> args) {
-  runSelfCheck(args, (String filename) {
-    verifyComponent(loadComponentFromBinary(filename));
-  });
-}
diff --git a/pkg/modular_test/test/pipeline_common.dart b/pkg/modular_test/test/pipeline_common.dart
index 7bfbf77..254db8c 100644
--- a/pkg/modular_test/test/pipeline_common.dart
+++ b/pkg/modular_test/test/pipeline_common.dart
@@ -59,7 +59,7 @@
       bool requestDependenciesData: true});
 
   /// Create a step that applies [action] only on the main module [inputId] data
-  /// and the the [depId] data of transitive dependencies and finally emits a
+  /// and the [depId] data of transitive dependencies and finally emits a
   /// result with the given [resultId].
   ///
   /// [depId] may be the same as [inputId] but not [resultId] since this action
diff --git a/pkg/native_stack_traces/CHANGELOG.md b/pkg/native_stack_traces/CHANGELOG.md
index 7a0f2b5..12bf080 100644
--- a/pkg/native_stack_traces/CHANGELOG.md
+++ b/pkg/native_stack_traces/CHANGELOG.md
@@ -1,4 +1,6 @@
-# Changelog
+## 0.4.5-dev
+
+- Require Dart >= 2.14
 
 ## 0.4.4
 
diff --git a/pkg/native_stack_traces/analysis_options.yaml b/pkg/native_stack_traces/analysis_options.yaml
index 486705d..d0f68fe 100644
--- a/pkg/native_stack_traces/analysis_options.yaml
+++ b/pkg/native_stack_traces/analysis_options.yaml
@@ -1 +1,8 @@
-include: package:pedantic/analysis_options.1.9.0.yaml
+include: package:lints/recommended.yaml
+
+linter:
+  rules:
+    - avoid_dynamic_calls
+    - directives_ordering
+    - prefer_expression_function_bodies
+    - sort_pub_dependencies
diff --git a/pkg/native_stack_traces/bin/decode.dart b/pkg/native_stack_traces/bin/decode.dart
index 4ced1ca..a7ca956 100644
--- a/pkg/native_stack_traces/bin/decode.dart
+++ b/pkg/native_stack_traces/bin/decode.dart
@@ -2,13 +2,13 @@
 // 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:async";
-import "dart:convert";
-import "dart:io" as io;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io' as io;
 
 import 'package:args/args.dart' show ArgParser, ArgResults;
-import 'package:path/path.dart' as path;
 import 'package:native_stack_traces/native_stack_traces.dart';
+import 'package:path/path.dart' as path;
 
 ArgParser _createBaseDebugParser(ArgParser parser) => parser
   ..addOption('debug',
@@ -134,7 +134,7 @@
 const int _badUsageExitCode = 1;
 
 void errorWithUsage(String message, {String? command}) {
-  print("Error: $message.\n");
+  print('Error: $message.\n');
   print(_usages[command]);
   io.exitCode = _badUsageExitCode;
 }
@@ -179,11 +179,11 @@
 
   void usageError(String message) => errorWithUsage(message, command: 'find');
   int? tryParseIntAddress(String s) {
-    if (!forceHexadecimal && !s.startsWith("0x")) {
+    if (!forceHexadecimal && !s.startsWith('0x')) {
       final decimal = int.tryParse(s);
       if (decimal != null) return decimal;
     }
-    return int.tryParse(s.startsWith("0x") ? s.substring(2) : s, radix: 16);
+    return int.tryParse(s.startsWith('0x') ? s.substring(2) : s, radix: 16);
   }
 
   PCOffset? convertAddress(StackTraceHeader header, String s) {
@@ -204,10 +204,10 @@
   }
 
   if ((options['vm_start'] == null) != (options['isolate_start'] == null)) {
-    return usageError("need both VM start and isolate start");
+    return usageError('need both VM start and isolate start');
   }
 
-  int vmStart = dwarf.vmStartAddress;
+  var vmStart = dwarf.vmStartAddress;
   if (options['vm_start'] != null) {
     final address = tryParseIntAddress(options['vm_start']);
     if (address == null) {
@@ -217,7 +217,7 @@
     vmStart = address;
   }
 
-  int isolateStart = dwarf.isolateStartAddress;
+  var isolateStart = dwarf.isolateStartAddress;
   if (options['isolate_start'] != null) {
     final address = tryParseIntAddress(options['isolate_start']);
     if (address == null) {
@@ -230,9 +230,12 @@
   final header = StackTraceHeader(isolateStart, vmStart);
 
   final locations = <PCOffset>[];
-  for (final String s in options['location'] + options.rest) {
+  for (final String s in [
+    ...(options['location'] as List<String>),
+    ...options.rest,
+  ]) {
     final location = convertAddress(header, s);
-    if (location == null) return usageError('could not parse PC address ${s}');
+    if (location == null) return usageError('could not parse PC address $s');
     locations.add(location);
   }
   if (locations.isEmpty) return usageError('no PC addresses to find');
@@ -241,14 +244,14 @@
     final addr = dwarf.virtualAddressOf(offset);
     final frames = dwarf
         .callInfoFor(addr, includeInternalFrames: verbose)
-        ?.map((CallInfo c) => "  " + c.toString());
+        ?.map((CallInfo c) => '  ' + c.toString());
     final addrString =
-        addr > 0 ? "0x" + addr.toRadixString(16) : addr.toString();
-    print("For virtual address ${addrString}:");
+        addr > 0 ? '0x' + addr.toRadixString(16) : addr.toString();
+    print('For virtual address $addrString:');
     if (frames == null) {
-      print("  Invalid virtual address.");
+      print('  Invalid virtual address.');
     } else if (frames.isEmpty) {
-      print("  Not a call from user or library code.");
+      print('  Not a call from user or library code.');
     } else {
       frames.forEach(print);
     }
@@ -280,7 +283,7 @@
       .transform(utf8.decoder)
       .transform(const LineSplitter())
       .transform(DwarfStackTraceDecoder(dwarf, includeInternalFrames: verbose))
-      .map((s) => s + "\n")
+      .map((s) => s + '\n')
       .transform(utf8.encoder);
 
   await output.addStream(convertedStream);
diff --git a/pkg/native_stack_traces/lib/elf.dart b/pkg/native_stack_traces/lib/elf.dart
index 3316655..31272b1 100644
--- a/pkg/native_stack_traces/lib/elf.dart
+++ b/pkg/native_stack_traces/lib/elf.dart
@@ -2,10 +2,10 @@
 // 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.
 
-export 'src/elf.dart' show DynamicTable, DynamicTableTag, Elf, Section, Symbol;
 export 'src/constants.dart'
     show
         isolateDataSymbolName,
         isolateSymbolName,
         vmDataSymbolName,
         vmSymbolName;
+export 'src/elf.dart' show DynamicTable, DynamicTableTag, Elf, Section, Symbol;
diff --git a/pkg/native_stack_traces/lib/src/constants.dart b/pkg/native_stack_traces/lib/src/constants.dart
index ca987f5..4edfb41 100644
--- a/pkg/native_stack_traces/lib/src/constants.dart
+++ b/pkg/native_stack_traces/lib/src/constants.dart
@@ -3,20 +3,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // The section name in which the build ID is stored as a note.
-const String buildIdSectionName = ".note.gnu.build-id";
+const String buildIdSectionName = '.note.gnu.build-id';
 // The type of a build ID note.
 const int buildIdNoteType = 3;
 // The name of a build ID note.
-const String buildIdNoteName = "GNU";
+const String buildIdNoteName = 'GNU';
 
 // The dynamic symbol name for the VM instructions section.
-const String vmSymbolName = "_kDartVmSnapshotInstructions";
+const String vmSymbolName = '_kDartVmSnapshotInstructions';
 
 // The dynamic symbol name for the VM data section.
-const String vmDataSymbolName = "_kDartVmSnapshotData";
+const String vmDataSymbolName = '_kDartVmSnapshotData';
 
 // The dynamic symbol name for the isolate instructions section.
-const String isolateSymbolName = "_kDartIsolateSnapshotInstructions";
+const String isolateSymbolName = '_kDartIsolateSnapshotInstructions';
 
 // The dynamic symbol name for the isolate data section.
-const String isolateDataSymbolName = "_kDartIsolateSnapshotData";
+const String isolateDataSymbolName = '_kDartIsolateSnapshotData';
diff --git a/pkg/native_stack_traces/lib/src/convert.dart b/pkg/native_stack_traces/lib/src/convert.dart
index b6d96b4..d0d43a1 100644
--- a/pkg/native_stack_traces/lib/src/convert.dart
+++ b/pkg/native_stack_traces/lib/src/convert.dart
@@ -2,14 +2,14 @@
 // 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:async";
-import "dart:math";
+import 'dart:async';
+import 'dart:math';
 
 import 'constants.dart' as constants;
-import "dwarf.dart";
+import 'dwarf.dart';
 
 String _stackTracePiece(CallInfo call, int depth) =>
-    "#${depth.toString().padRight(6)} ${call}";
+    '#${depth.toString().padRight(6)} $call';
 
 // A pattern matching the last line of the non-symbolic stack trace header.
 //
@@ -45,7 +45,7 @@
   /// The [PCOffset] for the given absolute program counter address.
   PCOffset offsetOf(int address) {
     final isolateOffset = address - _isolateStart;
-    int vmOffset = address - _vmStart;
+    var vmOffset = address - _vmStart;
     if (vmOffset > 0 && vmOffset == min(vmOffset, isolateOffset)) {
       return PCOffset(vmOffset, InstructionsSection.vm);
     } else {
@@ -87,11 +87,11 @@
   final symbolString = match.namedGroup('symbol')!;
   final offsetString = match.namedGroup('offset')!;
   int? offset;
-  if (!forceHexadecimal && !offsetString.startsWith("0x")) {
+  if (!forceHexadecimal && !offsetString.startsWith('0x')) {
     offset = int.tryParse(offsetString);
   }
   if (offset == null) {
-    final digits = offsetString.startsWith("0x")
+    final digits = offsetString.startsWith('0x')
         ? offsetString.substring(2)
         : offsetString;
     offset = int.tryParse(digits, radix: 16);
@@ -182,8 +182,9 @@
   DwarfStackTraceDecoder(this._dwarf, {bool includeInternalFrames = false})
       : _includeInternalFrames = includeInternalFrames;
 
+  @override
   Stream<String> bind(Stream<String> stream) async* {
-    int depth = 0;
+    var depth = 0;
     StackTraceHeader? header;
     await for (final line in stream) {
       final parsedHeader = _parseInstructionsLine(line);
diff --git a/pkg/native_stack_traces/lib/src/dwarf.dart b/pkg/native_stack_traces/lib/src/dwarf.dart
index 71605a0..06ace82 100644
--- a/pkg/native_stack_traces/lib/src/dwarf.dart
+++ b/pkg/native_stack_traces/lib/src/dwarf.dart
@@ -13,9 +13,9 @@
 int _initialLengthValue(Reader reader) {
   final length = reader.readBytes(4);
   if (length == 0xffffffff) {
-    throw FormatException("64-bit DWARF format detected");
+    throw FormatException('64-bit DWARF format detected');
   } else if (length > 0xfffffff0) {
-    throw FormatException("Unrecognized reserved initial length value");
+    throw FormatException('Unrecognized reserved initial length value');
   }
   return length;
 }
@@ -33,9 +33,9 @@
 };
 
 const _tagStrings = <_Tag, String>{
-  _Tag.compileUnit: "DW_TAG_compile_unit",
-  _Tag.inlinedSubroutine: "DW_TAG_inlined_subroutine",
-  _Tag.subprogram: "DW_TAG_subroutine",
+  _Tag.compileUnit: 'DW_TAG_compile_unit',
+  _Tag.inlinedSubroutine: 'DW_TAG_inlined_subroutine',
+  _Tag.subprogram: 'DW_TAG_subroutine',
 };
 
 enum _AttributeName {
@@ -77,22 +77,22 @@
 };
 
 const _attributeNameStrings = <_AttributeName, String>{
-  _AttributeName.sibling: "DW_AT_sibling",
-  _AttributeName.name: "DW_AT_name",
-  _AttributeName.statementList: "DW_AT_stmt_list",
-  _AttributeName.lowProgramCounter: "DW_AT_low_pc",
-  _AttributeName.highProgramCounter: "DW_AT_high_pc",
-  _AttributeName.compilationDirectory: "DW_AT_comp_dir",
-  _AttributeName.inline: "DW_AT_inline",
-  _AttributeName.producer: "DW_AT_producer",
-  _AttributeName.abstractOrigin: "DW_AT_abstract_origin",
-  _AttributeName.artificial: "DW_AT_artificial",
-  _AttributeName.declarationColumn: "DW_AT_decl_column",
-  _AttributeName.declarationFile: "DW_AT_decl_file",
-  _AttributeName.declarationLine: "DW_AT_decl_line",
-  _AttributeName.callColumn: "DW_AT_call_column",
-  _AttributeName.callFile: "DW_AT_call_file",
-  _AttributeName.callLine: "DW_AT_call_line",
+  _AttributeName.sibling: 'DW_AT_sibling',
+  _AttributeName.name: 'DW_AT_name',
+  _AttributeName.statementList: 'DW_AT_stmt_list',
+  _AttributeName.lowProgramCounter: 'DW_AT_low_pc',
+  _AttributeName.highProgramCounter: 'DW_AT_high_pc',
+  _AttributeName.compilationDirectory: 'DW_AT_comp_dir',
+  _AttributeName.inline: 'DW_AT_inline',
+  _AttributeName.producer: 'DW_AT_producer',
+  _AttributeName.abstractOrigin: 'DW_AT_abstract_origin',
+  _AttributeName.artificial: 'DW_AT_artificial',
+  _AttributeName.declarationColumn: 'DW_AT_decl_column',
+  _AttributeName.declarationFile: 'DW_AT_decl_file',
+  _AttributeName.declarationLine: 'DW_AT_decl_line',
+  _AttributeName.callColumn: 'DW_AT_call_column',
+  _AttributeName.callFile: 'DW_AT_call_file',
+  _AttributeName.callLine: 'DW_AT_call_line',
 };
 
 enum _AttributeForm {
@@ -114,12 +114,12 @@
 };
 
 const _attributeFormStrings = <_AttributeForm, String>{
-  _AttributeForm.address: "DW_FORM_addr",
-  _AttributeForm.string: "DW_FORM_string",
-  _AttributeForm.flag: "DW_FORM_flag",
-  _AttributeForm.constant: "DW_FORM_udata",
-  _AttributeForm.reference4: "DW_FORM_ref4",
-  _AttributeForm.sectionOffset: "DW_FORM_sec_offset",
+  _AttributeForm.address: 'DW_FORM_addr',
+  _AttributeForm.string: 'DW_FORM_string',
+  _AttributeForm.flag: 'DW_FORM_flag',
+  _AttributeForm.constant: 'DW_FORM_udata',
+  _AttributeForm.reference4: 'DW_FORM_ref4',
+  _AttributeForm.sectionOffset: 'DW_FORM_sec_offset',
 };
 
 class _Attribute {
@@ -133,10 +133,10 @@
     final formInt = reader.readLEB128EncodedInteger();
     if (nameInt == 0 && formInt == 0) return null;
     if (!_attributeNames.containsKey(nameInt)) {
-      throw FormatException("Unexpected DW_AT value 0x${paddedHex(nameInt)}");
+      throw FormatException('Unexpected DW_AT value 0x${paddedHex(nameInt)}');
     }
     if (!_attributeForms.containsKey(formInt)) {
-      throw FormatException("Unexpected DW_FORM value 0x${paddedHex(formInt)}");
+      throw FormatException('Unexpected DW_FORM value 0x${paddedHex(formInt)}');
     }
     return _Attribute._(_attributeNames[nameInt]!, _attributeForms[formInt]!);
   }
@@ -173,8 +173,8 @@
       case _AttributeForm.reference4:
         final intValue = value as int;
         final unresolvedValue = paddedHex(intValue, 4);
-        final name = unit?.nameOfOrigin(intValue) ?? "<unresolved>";
-        return '0x${unresolvedValue} (origin: ${name})';
+        final name = unit?.nameOfOrigin(intValue) ?? '<unresolved>';
+        return '0x$unresolvedValue (origin: $name)';
     }
   }
 }
@@ -188,23 +188,23 @@
   _Abbreviation._(this.code, this.tag, this.children, this.attributes);
 
   // Constants from the DWARF specification.
-  static const _DW_CHILDREN_no = 0x00;
-  static const _DW_CHILDREN_yes = 0x01;
+  static const _dwChildrenNo = 0x00;
+  static const _dwChildrenYes = 0x01;
 
   static _Abbreviation? fromReader(Reader reader) {
     final code = reader.readLEB128EncodedInteger();
     if (code == 0) return null;
     final tagInt = reader.readLEB128EncodedInteger();
     if (!_tags.containsKey(tagInt)) {
-      throw FormatException("Unexpected DW_TAG value 0x${paddedHex(tagInt)}");
+      throw FormatException('Unexpected DW_TAG value 0x${paddedHex(tagInt)}');
     }
     final tag = _tags[tagInt]!;
     final childrenByte = reader.readByte();
-    if (childrenByte != _DW_CHILDREN_no && childrenByte != _DW_CHILDREN_yes) {
-      throw FormatException("Expected DW_CHILDREN_no or DW_CHILDREN_yes: "
-          "${childrenByte}");
+    if (childrenByte != _dwChildrenNo && childrenByte != _dwChildrenYes) {
+      throw FormatException('Expected DW_CHILDREN_no or DW_CHILDREN_yes: '
+          '$childrenByte');
     }
-    final children = childrenByte == _DW_CHILDREN_yes;
+    final children = childrenByte == _dwChildrenYes;
     final attributes = reader.readRepeated(_Attribute.fromReader).toList();
     return _Abbreviation._(code, tag, children, attributes);
   }
@@ -249,14 +249,16 @@
   }
 
   void writeToStringBuffer(StringBuffer buffer) {
-    buffer..writeln('Abbreviations table:')..writeln();
+    buffer
+      ..writeln('Abbreviations table:')
+      ..writeln();
     _abbreviations.forEach((key, abbreviation) {
       buffer
         ..write('  ')
         ..write(key)
         ..writeln(':');
       abbreviation.writeToStringBuffer(buffer);
-      buffer..writeln();
+      buffer.writeln();
     });
   }
 
@@ -283,7 +285,7 @@
     // DIEs with an abbreviation table index of 0 are list end markers.
     if (code == 0) return null;
     if (!header.abbreviations.containsKey(code)) {
-      throw FormatException("Unknown abbreviation code 0x${paddedHex(code)}");
+      throw FormatException('Unknown abbreviation code 0x${paddedHex(code)}');
     }
     final abbreviation = header.abbreviations[code]!;
     final attributes = <_Attribute, Object>{};
@@ -396,7 +398,7 @@
         ..writeln('):');
       final sortedChildren = children.entries.toList()
         ..sort((kv1, kv2) => Comparable.compare(kv1.key, kv2.key));
-      for (int i = 0; i < sortedChildren.length; i++) {
+      for (var i = 0; i < sortedChildren.length; i++) {
         final offset = sortedChildren[i].key;
         final child = sortedChildren[i].value;
         buffer
@@ -411,6 +413,7 @@
     }
   }
 
+  @override
   String toString() {
     final buffer = StringBuffer();
     writeToStringBuffer(buffer);
@@ -435,13 +438,13 @@
     if (size == 0) return null;
     final version = reader.readBytes(2);
     if (version != 2) {
-      throw FormatException("Expected DWARF version 2, got $version");
+      throw FormatException('Expected DWARF version 2, got $version');
     }
     final abbreviationsOffset = reader.readBytes(4);
     final abbreviationsTable = abbreviationsTables[abbreviationsOffset];
     if (abbreviationsTable == null) {
-      throw FormatException("No abbreviation table found for offset "
-          "0x${paddedHex(abbreviationsOffset, 4)}");
+      throw FormatException('No abbreviation table found for offset '
+          '0x${paddedHex(abbreviationsOffset, 4)}');
     }
     final addressSize = reader.readByte();
     return CompilationUnitHeader._(
@@ -518,7 +521,7 @@
     final origin = referenceTable[offset];
     if (origin == null) {
       throw ArgumentError(
-          "${paddedHex(offset)} is not the offset of an abbreviated unit");
+          '${paddedHex(offset)} is not the offset of an abbreviated unit');
     }
     return origin[_AttributeName.name] as String;
   }
@@ -573,6 +576,7 @@
     }
   }
 
+  @override
   String toString() {
     final buffer = StringBuffer();
     writeToStringBuffer(buffer);
@@ -591,7 +595,7 @@
   static FileEntry? fromReader(Reader reader) {
     final name = reader.readNullTerminatedString();
     // An empty null-terminated string marks the table end.
-    if (name == "") return null;
+    if (name == '') return null;
     final directoryIndex = reader.readLEB128EncodedInteger();
     final lastModified = reader.readLEB128EncodedInteger();
     final size = reader.readLEB128EncodedInteger();
@@ -599,10 +603,10 @@
   }
 
   @override
-  String toString() => "File name: $name\n"
-      "  Directory index: $directoryIndex\n"
-      "  Last modified: $lastModified\n"
-      "  Size: $size\n";
+  String toString() => 'File name: $name\n'
+      '  Directory index: $directoryIndex\n'
+      '  Last modified: $lastModified\n'
+      '  Size: $size\n';
 }
 
 class FileInfo {
@@ -613,7 +617,7 @@
   static FileInfo fromReader(Reader reader) {
     final offsetFiles = reader.readRepeated(FileEntry.fromReader).toList();
     final files = <int, FileEntry>{};
-    for (int i = 0; i < offsetFiles.length; i++) {
+    for (var i = 0; i < offsetFiles.length; i++) {
       // File entries are one-based, not zero-based.
       files[i + 1] = offsetFiles[i];
     }
@@ -625,15 +629,15 @@
 
   void writeToStringBuffer(StringBuffer buffer) {
     if (_files.isEmpty) {
-      buffer.writeln("No file information.");
+      buffer.writeln('No file information.');
       return;
     }
 
-    final indexHeader = "Entry";
-    final dirIndexHeader = "Dir";
-    final modifiedHeader = "Time";
-    final sizeHeader = "Size";
-    final nameHeader = "Name";
+    final indexHeader = 'Entry';
+    final dirIndexHeader = 'Dir';
+    final modifiedHeader = 'Time';
+    final sizeHeader = 'Size';
+    final nameHeader = 'Name';
 
     final indexStrings = _files
         .map((int i, FileEntry f) => MapEntry<int, String>(i, i.toString()));
@@ -653,27 +657,39 @@
     final maxSizeLength = sizeStrings.values
         .fold(sizeHeader.length, (int acc, String s) => max(acc, s.length));
 
-    buffer.writeln("File information:");
+    buffer.writeln('File information:');
 
-    buffer..write(" ")..write(indexHeader.padRight(maxIndexLength));
-    buffer..write(" ")..write(dirIndexHeader.padRight(maxDirIndexLength));
-    buffer..write(" ")..write(modifiedHeader.padRight(maxModifiedLength));
-    buffer..write(" ")..write(sizeHeader.padRight(maxSizeLength));
     buffer
-      ..write(" ")
+      ..write(' ')
+      ..write(indexHeader.padRight(maxIndexLength));
+    buffer
+      ..write(' ')
+      ..write(dirIndexHeader.padRight(maxDirIndexLength));
+    buffer
+      ..write(' ')
+      ..write(modifiedHeader.padRight(maxModifiedLength));
+    buffer
+      ..write(' ')
+      ..write(sizeHeader.padRight(maxSizeLength));
+    buffer
+      ..write(' ')
       ..writeln(nameHeader);
 
     for (final index in _files.keys) {
-      buffer..write(" ")..write(indexStrings[index]!.padRight(maxIndexLength));
       buffer
-        ..write(" ")
+        ..write(' ')
+        ..write(indexStrings[index]!.padRight(maxIndexLength));
+      buffer
+        ..write(' ')
         ..write(dirIndexStrings[index]!.padRight(maxDirIndexLength));
       buffer
-        ..write(" ")
+        ..write(' ')
         ..write(modifiedStrings[index]!.padRight(maxModifiedLength));
-      buffer..write(" ")..write(sizeStrings[index]!.padRight(maxSizeLength));
       buffer
-        ..write(" ")
+        ..write(' ')
+        ..write(sizeStrings[index]!.padRight(maxSizeLength));
+      buffer
+        ..write(' ')
         ..writeln(_files[index]!.name);
     }
   }
@@ -687,7 +703,7 @@
 }
 
 class LineNumberState {
-  final defaultIsStatement;
+  final bool defaultIsStatement;
 
   late int address;
   late int fileIndex;
@@ -723,11 +739,12 @@
     return clone;
   }
 
-  String toString() => "Current line number state machine registers:\n"
-      "  Address: ${paddedHex(address)}\n"
-      "  File index: $fileIndex\n"
-      "  Line number: $line\n"
-      "  Column number: $column\n"
+  @override
+  String toString() => 'Current line number state machine registers:\n'
+      '  Address: ${paddedHex(address)}\n'
+      '  File index: $fileIndex\n'
+      '  Line number: $line\n'
+      '  Column number: $column\n'
       "  Is ${isStatement ? "" : "not "}a statement.\n"
       "  Is ${basicBlock ? "" : "not "}at the beginning of a basic block.\n"
       "  Is ${endSequence ? "" : "not "}just after the end of a sequence.";
@@ -772,7 +789,7 @@
     final isStmtByte = reader.readByte();
     if (isStmtByte < 0 || isStmtByte > 1) {
       throw FormatException(
-          "Unexpected value for default_is_stmt: ${isStmtByte}");
+          'Unexpected value for default_is_stmt: $isStmtByte');
     }
     final defaultIsStatement = isStmtByte == 1;
     final lineBase = reader.readByte(signed: true);
@@ -780,24 +797,24 @@
     final opcodeBase = reader.readByte();
     final standardOpcodeLengths = <int, int>{};
     // Standard opcode numbering starts at 1.
-    for (int i = 1; i < opcodeBase; i++) {
+    for (var i = 1; i < opcodeBase; i++) {
       standardOpcodeLengths[i] = reader.readLEB128EncodedInteger();
     }
     final includeDirectories = <String>[];
     while (!reader.done) {
       final directory = reader.readNullTerminatedString();
-      if (directory == "") break;
+      if (directory == '') break;
       includeDirectories.add(directory);
     }
     if (reader.done) {
-      throw FormatException("Unterminated directory entry");
+      throw FormatException('Unterminated directory entry');
     }
     final filesInfo = FileInfo.fromReader(reader);
 
     // Header length doesn't include the 2-byte version or 4-byte length fields.
     if (reader.offset != headerStart + headerLength) {
-      throw FormatException("At offset ${reader.offset} after header, "
-          "expected to be at offset ${headerStart + headerLength}");
+      throw FormatException('At offset ${reader.offset} after header, '
+          'expected to be at offset ${headerStart + headerLength}');
     }
 
     return LineNumberProgramHeader._(
@@ -833,7 +850,7 @@
       ..write('  Opcode base: ')
       ..writeln(opcodeBase)
       ..writeln('Standard opcode lengths:');
-    for (int i = 1; i < opcodeBase; i++) {
+    for (var i = 1; i < opcodeBase; i++) {
       buffer
         ..write('    Opcode ')
         ..write(i)
@@ -876,7 +893,7 @@
     if (header == null) return null;
     final calculatedMatrix = _readOpcodes(reader, header).toList();
     if (calculatedMatrix.isEmpty) {
-      throw FormatException("No line number information generated by program");
+      throw FormatException('No line number information generated by program');
     }
     return LineNumberProgram._(header, calculatedMatrix);
   }
@@ -903,7 +920,7 @@
           final subOpcode = reader.readByte();
           switch (subOpcode) {
             case 0:
-              throw FormatException("Attempted to execute extended opcode 0");
+              throw FormatException('Attempted to execute extended opcode 0');
             case 1: // DW_LNE_end_sequence
               state.endSequence = true;
               yield state.clone();
@@ -918,10 +935,10 @@
               break;
             case 3: // DW_LNE_define_file
               throw FormatException(
-                  "DW_LNE_define_file instruction not handled");
+                  'DW_LNE_define_file instruction not handled');
             default:
               throw FormatException(
-                  "Extended opcode ${subOpcode} not in DWARF 2");
+                  'Extended opcode $subOpcode not in DWARF 2');
           }
           break;
         case 1: // DW_LNS_copy
@@ -954,7 +971,7 @@
           state.address += reader.readBytes(2);
           break;
         default:
-          throw FormatException("Standard opcode ${opcode} not in DWARF 2");
+          throw FormatException('Standard opcode $opcode not in DWARF 2');
       }
     }
   }
@@ -1003,12 +1020,13 @@
   void writeToStringBuffer(StringBuffer buffer) {
     header.writeToStringBuffer(buffer);
 
-    buffer.writeln("Results of line number program:");
+    buffer.writeln('Results of line number program:');
     for (final state in calculatedMatrix) {
-      buffer..writeln(state);
+      buffer.writeln(state);
     }
   }
 
+  @override
   String toString() {
     final buffer = StringBuffer();
     writeToStringBuffer(buffer);
@@ -1040,6 +1058,7 @@
     });
   }
 
+  @override
   String toString() {
     final buffer = StringBuffer();
     writeToStringBuffer(buffer);
@@ -1047,20 +1066,6 @@
   }
 }
 
-// TODO(11617): Replace calls to these functions with a general hashing solution
-// once available.
-int _hashCombine(int hash, int value) {
-  hash = 0x1fffffff & (hash + value);
-  hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
-  return hash ^ (hash >> 6);
-}
-
-int _hashFinish(int hash) {
-  hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
-  hash = hash ^ (hash >> 11);
-  return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
-}
-
 /// Represents the information for a call site.
 abstract class CallInfo {
   /// Whether this call site is considered internal (i.e. not located in either
@@ -1089,36 +1094,38 @@
   bool get isInternal => internal;
 
   @override
-  int get hashCode {
-    int hash = 0;
-    hash = _hashCombine(hash, inlined.hashCode);
-    hash = _hashCombine(hash, internal.hashCode);
-    hash = _hashCombine(hash, function.hashCode);
-    hash = _hashCombine(hash, filename.hashCode);
-    hash = _hashCombine(hash, line.hashCode);
-    hash = _hashCombine(hash, column.hashCode);
-    return _hashFinish(hash);
-  }
+  int get hashCode => Object.hash(
+        inlined,
+        internal,
+        function,
+        filename,
+        line,
+        column,
+      );
 
   @override
-  bool operator ==(Object other) {
-    if (other is DartCallInfo) {
-      return inlined == other.inlined &&
-          internal == other.internal &&
-          function == other.function &&
-          filename == other.filename &&
-          line == other.line &&
-          column == other.column;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is DartCallInfo &&
+      inlined == other.inlined &&
+      internal == other.internal &&
+      function == other.function &&
+      filename == other.filename &&
+      line == other.line &&
+      column == other.column;
 
   void writeToStringBuffer(StringBuffer buffer) {
-    buffer..write(function)..write(' (')..write(filename);
+    buffer
+      ..write(function)
+      ..write(' (')
+      ..write(filename);
     if (line > 0) {
-      buffer..write(':')..write(line);
+      buffer
+        ..write(':')
+        ..write(line);
       if (column > 0) {
-        buffer..write(':')..write(column);
+        buffer
+          ..write(':')
+          ..write(column);
       }
     }
     buffer.write(')');
@@ -1140,19 +1147,14 @@
   StubCallInfo({required this.name, required this.offset});
 
   @override
-  int get hashCode => _hashFinish(
-      _hashCombine(_hashCombine(0, name.hashCode), offset.hashCode));
+  int get hashCode => Object.hash(name, offset);
 
   @override
-  bool operator ==(Object other) {
-    if (other is StubCallInfo) {
-      return name == other.name && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is StubCallInfo && name == other.name && offset == other.offset;
 
   @override
-  String toString() => "${name}+0x${offset.toRadixString(16)}";
+  String toString() => '$name+0x${offset.toRadixString(16)}';
 }
 
 /// The instructions section in which a program counter address is located.
@@ -1181,14 +1183,11 @@
           includeInternalFrames: includeInternalFrames);
 
   @override
-  int get hashCode => _hashFinish(_hashCombine(offset.hashCode, section.index));
+  int get hashCode => Object.hash(offset, section);
 
   @override
-  bool operator ==(Object other) {
-    return other is PCOffset &&
-        offset == other.offset &&
-        section == other.section;
-  }
+  bool operator ==(Object other) =>
+      other is PCOffset && offset == other.offset && section == other.section;
 
   @override
   String toString() => 'PCOffset($section, $offset)';
@@ -1235,23 +1234,23 @@
       Dwarf.fromReader(Reader.fromFile(path));
 
   static Dwarf _loadSectionsFromElf(Reader reader, Elf elf) {
-    final abbrevSection = elf.namedSections(".debug_abbrev").single;
+    final abbrevSection = elf.namedSections('.debug_abbrev').single;
     final abbrevReader = abbrevSection.refocusedCopy(reader);
     final abbreviationsTables = Map.fromEntries(
         abbrevReader.readRepeatedWithOffsets(_AbbreviationsTable.fromReader));
 
-    final lineNumberSection = elf.namedSections(".debug_line").single;
+    final lineNumberSection = elf.namedSections('.debug_line').single;
     final lineNumberInfo =
         LineNumberInfo.fromReader(lineNumberSection.refocusedCopy(reader));
 
-    final infoSection = elf.namedSections(".debug_info").single;
+    final infoSection = elf.namedSections('.debug_info').single;
     final debugInfo = DebugInfo.fromReader(
         infoSection.refocusedCopy(reader), abbreviationsTables);
 
     final vmStartSymbol = elf.dynamicSymbolFor(constants.vmSymbolName);
     if (vmStartSymbol == null) {
       throw FormatException(
-          "Expected a dynamic symbol with name ${constants.vmSymbolName}");
+          'Expected a dynamic symbol with name ${constants.vmSymbolName}');
     }
     final vmStartAddress = vmStartSymbol.value;
 
@@ -1259,7 +1258,7 @@
         elf.dynamicSymbolFor(constants.isolateSymbolName);
     if (isolateStartSymbol == null) {
       throw FormatException(
-          "Expected a dynamic symbol with name ${constants.isolateSymbolName}");
+          'Expected a dynamic symbol with name ${constants.isolateSymbolName}');
     }
     final isolateStartAddress = isolateStartSymbol.value;
 
@@ -1316,7 +1315,7 @@
       case InstructionsSection.isolate:
         return pcOffset.offset + isolateStartAddress;
       default:
-        throw "Unexpected value for instructions section";
+        throw 'Unexpected value for instructions section';
     }
   }
 
@@ -1327,7 +1326,10 @@
       ..writeln('----------------------------------------')
       ..writeln();
     _abbreviationsTables.forEach((offset, table) {
-      buffer..write('(Offset ')..write(paddedHex(offset, 4))..write(') ');
+      buffer
+        ..write('(Offset ')
+        ..write(paddedHex(offset, 4))
+        ..write(') ');
       table.writeToStringBuffer(buffer);
     });
     buffer
diff --git a/pkg/native_stack_traces/lib/src/elf.dart b/pkg/native_stack_traces/lib/src/elf.dart
index 268d5d80..ac7cb50 100644
--- a/pkg/native_stack_traces/lib/src/elf.dart
+++ b/pkg/native_stack_traces/lib/src/elf.dart
@@ -2,6 +2,8 @@
 // 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.
 
+// ignore_for_file: constant_identifier_names
+
 import 'dart:typed_data';
 
 import 'reader.dart';
@@ -16,41 +18,33 @@
 }
 
 // Reads an Elf{32,64}_Addr.
-int _readElfAddress(Reader reader) {
-  return _readElfBytes(reader, reader.wordSize, reader.wordSize);
-}
+int _readElfAddress(Reader reader) =>
+    _readElfBytes(reader, reader.wordSize, reader.wordSize);
 
 // Reads an Elf{32,64}_Off.
-int _readElfOffset(Reader reader) {
-  return _readElfBytes(reader, reader.wordSize, reader.wordSize);
-}
+int _readElfOffset(Reader reader) =>
+    _readElfBytes(reader, reader.wordSize, reader.wordSize);
 
 // Reads an Elf{32,64}_Half.
-int _readElfHalf(Reader reader) {
-  return _readElfBytes(reader, 2, 2);
-}
+int _readElfHalf(Reader reader) => _readElfBytes(reader, 2, 2);
 
 // Reads an Elf{32,64}_Word.
-int _readElfWord(Reader reader) {
-  return _readElfBytes(reader, 4, 4);
-}
+int _readElfWord(Reader reader) => _readElfBytes(reader, 4, 4);
 
 // Reads an Elf64_Xword.
 int _readElfXword(Reader reader) {
   switch (reader.wordSize) {
     case 4:
-      throw "Internal reader error: reading Elf64_Xword in 32-bit ELF file";
+      throw 'Internal reader error: reading Elf64_Xword in 32-bit ELF file';
     case 8:
       return _readElfBytes(reader, 8, 8);
     default:
-      throw "Unsupported word size ${reader.wordSize}";
+      throw 'Unsupported word size ${reader.wordSize}';
   }
 }
 
 // Reads an Elf{32,64}_Section.
-int _readElfSection(Reader reader) {
-  return _readElfBytes(reader, 2, 2);
-}
+int _readElfSection(Reader reader) => _readElfBytes(reader, 2, 2);
 
 // Used in cases where the value read for a given field is Elf32_Word on 32-bit
 // and Elf64_Xword on 64-bit.
@@ -61,7 +55,7 @@
     case 8:
       return _readElfXword(reader);
     default:
-      throw "Unsupported word size ${reader.wordSize}";
+      throw 'Unsupported word size ${reader.wordSize}';
   }
 }
 
@@ -113,14 +107,14 @@
         wordSize = 8;
         break;
       default:
-        throw FormatException("Unexpected e_ident[EI_CLASS] value");
+        throw FormatException('Unexpected e_ident[EI_CLASS] value');
     }
     final calculatedHeaderSize = 0x18 + 3 * wordSize + 0x10;
 
     if (fileSize < calculatedHeaderSize) {
-      throw FormatException("ELF file too small for header: "
-          "file size ${fileSize} < "
-          "calculated header size $calculatedHeaderSize");
+      throw FormatException('ELF file too small for header: '
+          'file size $fileSize < '
+          'calculated header size $calculatedHeaderSize');
     }
 
     Endian endian;
@@ -132,11 +126,11 @@
         endian = Endian.big;
         break;
       default:
-        throw FormatException("Unexpected e_indent[EI_DATA] value");
+        throw FormatException('Unexpected e_indent[EI_DATA] value');
     }
 
     if (reader.readByte() != 0x01) {
-      throw FormatException("Unexpected e_ident[EI_VERSION] value");
+      throw FormatException('Unexpected e_ident[EI_VERSION] value');
     }
 
     // After this point, we need the reader to be correctly set up re: word
@@ -147,7 +141,7 @@
     // Skip rest of e_ident/e_type/e_machine, i.e. move to e_version.
     reader.seek(0x14, absolute: true);
     if (_readElfWord(reader) != 0x01) {
-      throw FormatException("Unexpected e_version value");
+      throw FormatException('Unexpected e_version value');
     }
 
     final entry = _readElfAddress(reader);
@@ -167,25 +161,25 @@
     final sectionHeaderStringsIndex = _readElfHalf(reader);
 
     if (reader.offset != headerSize) {
-      throw FormatException("Only read ${reader.offset} bytes, not the "
-          "full header size ${headerSize}");
+      throw FormatException('Only read ${reader.offset} bytes, not the '
+          'full header size $headerSize');
     }
 
     if (headerSize != calculatedHeaderSize) {
-      throw FormatException("Stored ELF header size ${headerSize} != "
-          "calculated ELF header size $calculatedHeaderSize");
+      throw FormatException('Stored ELF header size $headerSize != '
+          'calculated ELF header size $calculatedHeaderSize');
     }
     if (fileSize < programHeaderOffset) {
-      throw FormatException("File is truncated before program header");
+      throw FormatException('File is truncated before program header');
     }
     if (fileSize < programHeaderOffset + programHeaderSize) {
-      throw FormatException("File is truncated within the program header");
+      throw FormatException('File is truncated within the program header');
     }
     if (fileSize < sectionHeaderOffset) {
-      throw FormatException("File is truncated before section header");
+      throw FormatException('File is truncated before section header');
     }
     if (fileSize < sectionHeaderOffset + sectionHeaderSize) {
-      throw FormatException("File is truncated within the section header");
+      throw FormatException('File is truncated within the section header');
     }
 
     return ElfHeader._(
@@ -207,7 +201,7 @@
   int get sectionHeaderSize => sectionHeaderCount * sectionHeaderEntrySize;
 
   // Constants used within the ELF specification.
-  static const _ELFMAG = "\x7fELF";
+  static const _ELFMAG = '\x7fELF';
   static const _ELFCLASS32 = 0x01;
   static const _ELFCLASS64 = 0x02;
   static const _ELFDATA2LSB = 0x01;
@@ -220,10 +214,10 @@
       ..write(' bits');
     switch (endian) {
       case Endian.little:
-        buffer..writeln(' and little-endian');
+        buffer.writeln(' and little-endian');
         break;
       case Endian.big:
-        buffer..writeln(' and big-endian');
+        buffer.writeln(' and big-endian');
         break;
     }
     buffer
@@ -278,7 +272,7 @@
       this.paddr, this.filesz, this.memsz, this.align, this.wordSize);
 
   static ProgramHeaderEntry fromReader(Reader reader) {
-    int wordSize = reader.wordSize;
+    var wordSize = reader.wordSize;
     assert(wordSize == 4 || wordSize == 8);
     final type = _readElfWord(reader);
     late int flags;
@@ -299,14 +293,14 @@
   }
 
   static const _typeStrings = <int, String>{
-    _PT_NULL: "PT_NULL",
-    _PT_LOAD: "PT_LOAD",
-    _PT_DYNAMIC: "PT_DYNAMIC",
-    _PT_PHDR: "PT_PHDR",
+    _PT_NULL: 'PT_NULL',
+    _PT_LOAD: 'PT_LOAD',
+    _PT_DYNAMIC: 'PT_DYNAMIC',
+    _PT_PHDR: 'PT_PHDR',
   };
 
   static String _typeToString(int type) =>
-      _typeStrings[type] ?? "unknown (${paddedHex(type, 4)})";
+      _typeStrings[type] ?? 'unknown (${paddedHex(type, 4)})';
 
   void writeToStringBuffer(StringBuffer buffer) {
     buffer
@@ -328,6 +322,7 @@
       ..write(paddedHex(align, wordSize));
   }
 
+  @override
   String toString() {
     final buffer = StringBuffer();
     writeToStringBuffer(buffer);
@@ -364,10 +359,11 @@
 
   void writeToStringBuffer(StringBuffer buffer) {
     for (var i = 0; i < length; i++) {
-      if (i != 0)
+      if (i != 0) {
         buffer
           ..writeln()
           ..writeln();
+      }
       buffer
         ..write('Entry ')
         ..write(i)
@@ -376,6 +372,7 @@
     }
   }
 
+  @override
   String toString() {
     final buffer = StringBuffer();
     writeToStringBuffer(buffer);
@@ -453,19 +450,19 @@
   }
 
   static const _typeStrings = <int, String>{
-    _SHT_NULL: "SHT_NULL",
-    _SHT_PROGBITS: "SHT_PROGBITS",
-    _SHT_SYMTAB: "SHT_SYMTAB",
-    _SHT_STRTAB: "SHT_STRTAB",
-    _SHT_HASH: "SHT_HASH",
-    _SHT_DYNAMIC: "SHT_DYNAMIC",
-    _SHT_NOTE: "SHT_NOTE",
-    _SHT_NOBITS: "SHT_NOBITS",
-    _SHT_DYNSYM: "SHT_DYNSYM",
+    _SHT_NULL: 'SHT_NULL',
+    _SHT_PROGBITS: 'SHT_PROGBITS',
+    _SHT_SYMTAB: 'SHT_SYMTAB',
+    _SHT_STRTAB: 'SHT_STRTAB',
+    _SHT_HASH: 'SHT_HASH',
+    _SHT_DYNAMIC: 'SHT_DYNAMIC',
+    _SHT_NOTE: 'SHT_NOTE',
+    _SHT_NOBITS: 'SHT_NOBITS',
+    _SHT_DYNSYM: 'SHT_DYNSYM',
   };
 
   static String _typeToString(int type) =>
-      _typeStrings[type] ?? "unknown (${paddedHex(type, 4)})";
+      _typeStrings[type] ?? 'unknown (${paddedHex(type, 4)})';
 
   void writeToStringBuffer(StringBuffer buffer) {
     buffer.write('Name: ');
@@ -496,6 +493,7 @@
       ..write(entrySize);
   }
 
+  @override
   String toString() {
     final buffer = StringBuffer();
     writeToStringBuffer(buffer);
@@ -521,10 +519,11 @@
 
   void writeToStringBuffer(StringBuffer buffer) {
     for (var i = 0; i < entries.length; i++) {
-      if (i != 0)
+      if (i != 0) {
         buffer
           ..writeln()
           ..writeln();
+      }
       buffer
         ..write('Entry ')
         ..write(i)
@@ -620,6 +619,7 @@
     return Note._(entry, type, name, description);
   }
 
+  @override
   void writeToStringBuffer(StringBuffer buffer) {
     buffer
       ..write('Section "')
@@ -669,9 +669,9 @@
       ..writeln('" is a string table:');
     for (var key in _entries.keys) {
       buffer
-        ..write("  ")
+        ..write('  ')
         ..write(key)
-        ..write(" => ")
+        ..write(' => ')
         ..writeln(_entries[key]);
     }
   }
@@ -734,7 +734,7 @@
   void _cacheNameFromStringTable(StringTable table) {
     final nameFromTable = table[nameIndex];
     if (nameFromTable == null) {
-      throw FormatException("Index $nameIndex not found in string table");
+      throw FormatException('Index $nameIndex not found in string table');
     }
     name = nameFromTable;
   }
@@ -750,31 +750,31 @@
       ..write('" =>');
     switch (bind) {
       case SymbolBinding.STB_GLOBAL:
-        buffer..write(' a global');
+        buffer.write(' a global');
         break;
       case SymbolBinding.STB_LOCAL:
-        buffer..write(' a local');
+        buffer.write(' a local');
         break;
     }
     switch (visibility) {
       case SymbolVisibility.STV_DEFAULT:
         break;
       case SymbolVisibility.STV_HIDDEN:
-        buffer..write(' hidden');
+        buffer.write(' hidden');
         break;
       case SymbolVisibility.STV_INTERNAL:
-        buffer..write(' internal');
+        buffer.write(' internal');
         break;
       case SymbolVisibility.STV_PROTECTED:
-        buffer..write(' protected');
+        buffer.write(' protected');
         break;
     }
     buffer
-      ..write(" symbol that points to ")
+      ..write(' symbol that points to ')
       ..write(size)
-      ..write(" bytes at location 0x")
+      ..write(' bytes at location 0x')
       ..write(paddedHex(value, _wordSize))
-      ..write(" in section ")
+      ..write(' in section ')
       ..write(sectionIndex);
   }
 
@@ -821,7 +821,7 @@
       ..write(headerEntry.name)
       ..writeln('" is a symbol table:');
     for (var symbol in _entries) {
-      buffer.write(" ");
+      buffer.write(' ');
       symbol.writeToStringBuffer(buffer);
       buffer.writeln();
     }
@@ -851,7 +851,7 @@
   // We don't use DynamicTableTag for the key so that we can handle ELF files
   // that may use unknown (to us) tags.
   final Map<int, int> _entries;
-  final _wordSize;
+  final int _wordSize;
 
   DynamicTable._(SectionHeaderEntry entry, this._entries, this._wordSize)
       : super._(entry);
@@ -922,7 +922,7 @@
         }
       } else {
         buffer
-          ..write("Unknown tag ")
+          ..write('Unknown tag ')
           ..write(kv.key)
           ..write(' => ')
           ..writeln(kv.value);
@@ -975,7 +975,7 @@
   ///
   /// Returns -1 if there is no dynamic symbol that matches [name].
   Symbol? dynamicSymbolFor(String name) {
-    for (final section in namedSections(".dynsym")) {
+    for (final section in namedSections('.dynsym')) {
       final dynsym = section as SymbolTable;
       if (dynsym.containsKey(name)) return dynsym[name];
     }
@@ -1026,7 +1026,7 @@
     // header entries.
     if (header.sectionHeaderStringsIndex < 0 ||
         header.sectionHeaderStringsIndex >= sectionHeader.entries.length) {
-      throw FormatException("Section header string table index invalid");
+      throw FormatException('Section header string table index invalid');
     }
     final sectionHeaderStringTableEntry =
         sectionHeader.entries[header.sectionHeaderStringsIndex];
@@ -1034,13 +1034,13 @@
         sections[sectionHeaderStringTableEntry] as StringTable?;
     if (sectionHeaderStringTable == null) {
       throw FormatException(
-          "No section for entry ${sectionHeaderStringTableEntry}");
+          'No section for entry $sectionHeaderStringTableEntry');
     }
     final sectionsByName = <String, Set<Section>>{};
     for (final entry in sectionHeader.entries) {
       final section = sections[entry];
       if (section == null) {
-        throw FormatException("No section found for entry ${entry}");
+        throw FormatException('No section found for entry $entry');
       }
       entry.setName(sectionHeaderStringTable);
       sectionsByName.putIfAbsent(entry.name, () => {}).add(section);
@@ -1062,7 +1062,7 @@
         final stringTable = stringTableMap[entry];
         if (stringTable == null) {
           throw FormatException(
-              "String table not found at section header entry ${link}");
+              'String table not found at section header entry $link');
         }
         symbolTable._cacheNames(stringTable);
       }
@@ -1115,7 +1115,7 @@
 
   @override
   String toString() {
-    StringBuffer buffer = StringBuffer();
+    var buffer = StringBuffer();
     writeToStringBuffer(buffer);
     return buffer.toString();
   }
diff --git a/pkg/native_stack_traces/lib/src/reader.dart b/pkg/native_stack_traces/lib/src/reader.dart
index 9eb5be6..8158878 100644
--- a/pkg/native_stack_traces/lib/src/reader.dart
+++ b/pkg/native_stack_traces/lib/src/reader.dart
@@ -3,12 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:io';
-import 'dart:typed_data';
 import 'dart:math';
+import 'dart:typed_data';
 
-String paddedHex(int value, [int bytes = 0]) {
-  return value.toRadixString(16).padLeft(2 * bytes, '0');
-}
+String paddedHex(int value, [int bytes = 0]) =>
+    value.toRadixString(16).padLeft(2 * bytes, '0');
 
 class Reader {
   final ByteData bdata;
@@ -20,9 +19,9 @@
   int _offset = 0;
 
   Endian get endian => _endian as Endian;
-  void set endian(Endian value) => _endian = value;
+  set endian(Endian value) => _endian = value;
   int get wordSize => _wordSize as int;
-  void set wordSize(int value) => _wordSize = value;
+  set wordSize(int value) => _wordSize = value;
 
   /// Unless provided, [wordSize] and [endian] are initialized to values that
   /// ensure no reads are made that depend on their value (e.g., readBytes).
@@ -58,8 +57,8 @@
 
   int readBytes(int size, {bool signed = false}) {
     if (_offset + size > length) {
-      throw ArgumentError("attempt to read ${size} bytes with only "
-          "${length - _offset} bytes remaining in the reader");
+      throw ArgumentError('attempt to read $size bytes with only '
+          '${length - _offset} bytes remaining in the reader');
     }
     final start = _offset;
     _offset += size;
@@ -80,7 +79,7 @@
             : bdata.getUint64(start, endian);
       default:
         _offset -= size;
-        throw ArgumentError("invalid request to read $size bytes");
+        throw ArgumentError('invalid request to read $size bytes');
     }
   }
 
@@ -88,7 +87,7 @@
   int readWord() => readBytes(wordSize);
   String readNullTerminatedString() {
     final start = bdata.offsetInBytes + _offset;
-    for (int i = 0; _offset + i < bdata.lengthInBytes; i++) {
+    for (var i = 0; _offset + i < bdata.lengthInBytes; i++) {
       if (bdata.getUint8(_offset + i) == 0) {
         _offset += i + 1;
         return String.fromCharCodes(bdata.buffer.asUint8List(start, i));
@@ -152,47 +151,51 @@
       startOffset = max(startOffset, lowerWindow);
       endOffset = min(endOffset, upperWindow);
     }
-    for (int i = startOffset; i < endOffset; i += bytesPerLine) {
-      buffer..write("0x")..write(paddedHex(i, 8))..write(" ");
-      for (int j = 0; j < bytesPerLine && i + j < endOffset; j++) {
+    for (var i = startOffset; i < endOffset; i += bytesPerLine) {
+      buffer
+        ..write('0x')
+        ..write(paddedHex(i, 8))
+        ..write(' ');
+      for (var j = 0; j < bytesPerLine && i + j < endOffset; j++) {
         var byte = baseData.getUint8(i + j);
         buffer
-          ..write(i + j == currentOffset ? "|" : " ")
+          ..write(i + j == currentOffset ? '|' : ' ')
           ..write(paddedHex(byte, 1));
       }
       buffer.writeln();
     }
   }
 
+  @override
   String toString() {
     final buffer = StringBuffer();
     buffer
-      ..write("Word size: ")
+      ..write('Word size: ')
       ..write(_wordSize)
       ..writeln();
     buffer
-      ..write("Endianness: ")
+      ..write('Endianness: ')
       ..write(_endian)
       ..writeln();
     buffer
-      ..write("Start:  0x")
+      ..write('Start:  0x')
       ..write(paddedHex(start, _wordSize ?? 0))
-      ..write(" (")
+      ..write(' (')
       ..write(start)
-      ..writeln(")");
+      ..writeln(')');
     buffer
-      ..write("Offset: 0x")
+      ..write('Offset: 0x')
       ..write(paddedHex(offset, _wordSize ?? 0))
-      ..write(" (")
+      ..write(' (')
       ..write(offset)
-      ..writeln(")");
+      ..writeln(')');
     buffer
-      ..write("Length: 0x")
+      ..write('Length: 0x')
       ..write(paddedHex(length, _wordSize ?? 0))
-      ..write(" (")
+      ..write(' (')
       ..write(length)
-      ..writeln(")");
-    buffer..writeln("Bytes around current position:");
+      ..writeln(')');
+    buffer.writeln('Bytes around current position:');
     writeCurrentReaderPosition(buffer, maxSize: 256);
     return buffer.toString();
   }
diff --git a/pkg/native_stack_traces/pubspec.yaml b/pkg/native_stack_traces/pubspec.yaml
index 7dbc3b2..1110d5c 100644
--- a/pkg/native_stack_traces/pubspec.yaml
+++ b/pkg/native_stack_traces/pubspec.yaml
@@ -1,11 +1,11 @@
 name: native_stack_traces
 description: Utilities for working with non-symbolic stack traces.
-version: 0.4.4
+version: 0.4.5-dev
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/native_stack_traces
 
 environment:
-  sdk: '>=2.12.0-0 <3.0.0'
+  sdk: '>=2.14.0 <3.0.0'
 
 executables:
   decode:
@@ -15,4 +15,4 @@
   path: ^1.8.0
 
 dev_dependencies:
-  pedantic: ^1.10.0
+  lints: ^1.0.0
diff --git a/pkg/nnbd_migration/lib/fix_reason_target.dart b/pkg/nnbd_migration/lib/fix_reason_target.dart
index c9c876b..43d1b3f 100644
--- a/pkg/nnbd_migration/lib/fix_reason_target.dart
+++ b/pkg/nnbd_migration/lib/fix_reason_target.dart
@@ -51,7 +51,7 @@
       : super(inner);
 
   @override
-  int get hashCode => Object.hash(2, inner.hashCode, name.hashCode);
+  int get hashCode => Object.hash(2, inner, name);
 
   @override
   bool operator ==(Object other) =>
@@ -80,7 +80,7 @@
       : super(inner);
 
   @override
-  int get hashCode => Object.hash(1, inner.hashCode, index);
+  int get hashCode => Object.hash(1, inner, index);
 
   @override
   bool operator ==(Object other) =>
@@ -98,7 +98,7 @@
   _FixReasonTarget_ReturnType(FixReasonTarget inner) : super(inner);
 
   @override
-  int get hashCode => Object.hash(3, inner.hashCode);
+  int get hashCode => Object.hash(3, inner);
 
   @override
   bool operator ==(Object other) =>
@@ -131,7 +131,7 @@
       : super(inner);
 
   @override
-  int get hashCode => Object.hash(5, inner.hashCode, index);
+  int get hashCode => Object.hash(5, inner, index);
 
   @override
   bool operator ==(Object other) =>
@@ -162,7 +162,7 @@
   _FixReasonTarget_YieldedType(FixReasonTarget inner) : super(inner);
 
   @override
-  int get hashCode => Object.hash(4, inner.hashCode);
+  int get hashCode => Object.hash(4, inner);
 
   @override
   bool operator ==(Object other) =>
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index e3e703b..030f06f 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -1966,7 +1966,7 @@
       if (!declaredElement.isStatic && enclosingElement is ClassElement) {
         var overriddenElements = _inheritanceManager.getOverridden2(
             enclosingElement,
-            Name(enclosingElement.library.source.uri, declaredElement.name!));
+            Name(enclosingElement.library.source.uri, declaredElement.name));
         for (var overriddenElement
             in overriddenElements ?? <ExecutableElement>[]) {
           _handleFieldOverriddenDeclaration(
@@ -1976,7 +1976,7 @@
           var overriddenElements = _inheritanceManager.getOverridden2(
               enclosingElement,
               Name(enclosingElement.library.source.uri,
-                  declaredElement.name! + '='));
+                  declaredElement.name + '='));
           for (var overriddenElement
               in overriddenElements ?? <ExecutableElement>[]) {
             _handleFieldOverriddenDeclaration(
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index 7524133..5e57c8b 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -1231,7 +1231,7 @@
         _makeTypeNameNullable(node, decoratedType);
       }
     }
-    (node as TypeNameImpl).type =
+    (node as NamedTypeImpl).type =
         _fixBuilder._variables!.toFinalType(decoratedType);
     super.visitNamedType(node);
   }
diff --git a/pkg/nnbd_migration/lib/src/front_end/migration_info.dart b/pkg/nnbd_migration/lib/src/front_end/migration_info.dart
index 02ea5e1..bde8b46 100644
--- a/pkg/nnbd_migration/lib/src/front_end/migration_info.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/migration_info.dart
@@ -142,7 +142,7 @@
       : super(offset, line, length);
 
   @override
-  int get hashCode => Object.hash(filePath.hashCode, offset, length);
+  int get hashCode => Object.hash(filePath, offset, length);
 
   @override
   bool operator ==(Object other) {
diff --git a/pkg/nnbd_migration/pubspec.yaml b/pkg/nnbd_migration/pubspec.yaml
index 6d8ac9d..19a70c2 100644
--- a/pkg/nnbd_migration/pubspec.yaml
+++ b/pkg/nnbd_migration/pubspec.yaml
@@ -7,28 +7,34 @@
   sdk: '>=2.14.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared:
-    path: ../_fe_analyzer_shared
-  analyzer:
-    path: ../analyzer
-  analyzer_plugin:
-    path: ../analyzer_plugin
-  args: ^1.4.4
+  _fe_analyzer_shared: any
+  analyzer: any
+  analyzer_plugin: any
+  args: ^2.3.0
   charcode: ^1.1.0
-  cli_util: ^0.2.0
-  collection: ^1.15.0-nullsafety.4
-  crypto: ^2.0.6
-  meta:
-    path: ../meta
+  cli_util: ^0.3.5
+  collection: ^1.15.0
+  crypto: ^3.0.1
+  meta: any
   path: ^1.6.2
-  pub_semver: ^1.4.2
+  pub_semver: ^2.1.0
   source_span: ^1.4.1
   yaml: any
 
 dev_dependencies:
   analyzer_utilities:
     path: ../analyzer_utilities
-  http: '>=0.11.3+17 <0.13.0'
+  http: ^0.13.4
   pedantic: ^1.9.0
   test: ^1.6.4
-  test_reflective_loader: ^0.1.8
+  test_reflective_loader: ^0.2.0
+
+dependency_overrides:
+  _fe_analyzer_shared:
+    path: ../_fe_analyzer_shared
+  analyzer:
+    path: ../analyzer
+  analyzer_plugin:
+    path: ../analyzer_plugin
+  meta:
+    path: ../meta
diff --git a/pkg/nnbd_migration/test/abstract_context.dart b/pkg/nnbd_migration/test/abstract_context.dart
index 88ee434..3d5267f 100644
--- a/pkg/nnbd_migration/test/abstract_context.dart
+++ b/pkg/nnbd_migration/test/abstract_context.dart
@@ -41,6 +41,8 @@
 
   String get homePath => '/home';
 
+  Folder get sdkRoot => newFolder('/sdk');
+
   AnalysisSession get session => driver!.currentSession;
 
   String get testsPath => '$homePath/tests';
@@ -164,7 +166,10 @@
     setupResourceProvider();
     overlayResourceProvider = OverlayResourceProvider(resourceProvider);
 
-    MockSdk(resourceProvider: resourceProvider);
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
 
     newFolder(testsPath);
     newFile('$testsPath/.packages', content: '''
@@ -217,7 +222,7 @@
       includedPaths: [convertPath(homePath)],
       enableIndex: true,
       resourceProvider: overlayResourceProvider,
-      sdkPath: convertPath('/sdk'),
+      sdkPath: sdkRoot.path,
     );
 
     _driver = getDriver(convertPath(testsPath));
diff --git a/pkg/nnbd_migration/test/edge_builder_test.dart b/pkg/nnbd_migration/test/edge_builder_test.dart
index 76db62c..fcec048 100644
--- a/pkg/nnbd_migration/test/edge_builder_test.dart
+++ b/pkg/nnbd_migration/test/edge_builder_test.dart
@@ -590,9 +590,9 @@
 
   Future<void> test_already_migrated_field() async {
     await analyze('''
-double f() => double.NAN;
+double f() => double.nan;
 ''');
-    var nanElement = typeProvider.doubleType.element.getField('NAN')!;
+    var nanElement = typeProvider.doubleType.element.getField('nan')!;
     assertEdge(variables!.decoratedElementType(nanElement).node,
         decoratedTypeAnnotation('double f').node,
         hard: false);
@@ -5367,7 +5367,7 @@
   Future<void>
       test_methodInvocation_typeParameter_inferred_inGenericClass() async {
     // this creates an edge case because the typeArguments are not equal in
-    // length the the typeFormals of the calleeType, due to the enclosing
+    // length the typeFormals of the calleeType, due to the enclosing
     // generic class.
     await analyze('''
 class C<T> {
@@ -5393,7 +5393,7 @@
   Future<void>
       test_methodInvocation_typeParameter_inferred_inGenericExtreme() async {
     // this creates an edge case because the typeArguments are not equal in
-    // length the the typeFormals of the calleeType, due to the enclosing
+    // length the typeFormals of the calleeType, due to the enclosing
     // generic class/functions.
     await analyze('''
 class C<T> {
diff --git a/pkg/nnbd_migration/test/migration_cli_test.dart b/pkg/nnbd_migration/test/migration_cli_test.dart
index e4df376..08b16bc 100644
--- a/pkg/nnbd_migration/test/migration_cli_test.dart
+++ b/pkg/nnbd_migration/test/migration_cli_test.dart
@@ -41,6 +41,8 @@
   });
 }
 
+const sdkRootPathPosix = '/sdk';
+
 /// Specialization of [InstrumentationListener] that generates artificial
 /// exceptions, so that we can test they are properly propagated to top level.
 class _ExceptionGeneratingInstrumentationListener
@@ -97,7 +99,7 @@
             binaryName: 'nnbd_migration',
             loggerFactory: (isVerbose) => _test.logger = TestLogger(isVerbose),
             defaultSdkPathOverride:
-                _test.resourceProvider.convertPath(mock_sdk.sdkRoot),
+                _test.resourceProvider.convertPath(sdkRootPathPosix),
             resourceProvider: _test.resourceProvider,
             environmentVariables: _test.environmentVariables);
 
@@ -450,7 +452,7 @@
     // the signature that was present prior to NNBD.  (This is what the
     // migration tool uses to detect an old SDK).
     var coreLib = resourceProvider.getFile(
-        resourceProvider.convertPath('${mock_sdk.sdkRoot}/lib/core/core.dart'));
+        resourceProvider.convertPath('$sdkRootPathPosix/lib/core/core.dart'));
     var oldCoreLibText = coreLib.readAsStringSync();
     var newCoreLibText = oldCoreLibText.replaceAll(
         'external bool operator ==(Object other)',
@@ -470,7 +472,7 @@
     // the signature that was present prior to NNBD.  (This is what the
     // migration tool uses to detect an old SDK).
     var coreLib = resourceProvider.getFile(
-        resourceProvider.convertPath('${mock_sdk.sdkRoot}/lib/core/core.dart'));
+        resourceProvider.convertPath('$sdkRootPathPosix/lib/core/core.dart'));
     var oldCoreLibText = coreLib.readAsStringSync();
     var newCoreLibText = oldCoreLibText.replaceAll(
         'external bool operator ==(Object other)',
@@ -597,7 +599,7 @@
 
     var projectContents = createProject();
     var projectDir = createProjectDir(projectContents);
-    var cliRunner = _createCli(nullSafePackages: ['test'])
+    var cliRunner = _createCli()
         .decodeCommandLineArgs(_parseArgs(['--apply-changes', projectDir]))!;
     await cliRunner.run();
     assertNormalExit(cliRunner);
@@ -2140,58 +2142,6 @@
 '''));
   }
 
-  test_pubspec_with_sdk_version_beta() async {
-    var projectDir = createProjectDir(simpleProject());
-    var cliRunner = _createCli(sdkVersion: '2.12.0-1.2.beta')
-        .decodeCommandLineArgs(_parseArgs(['--apply-changes', projectDir]))!;
-    await cliRunner.run();
-    assertProjectContents(
-        projectDir, simpleProject(migrated: true, pubspecText: '''
-name: test
-environment:
-  sdk: '>=2.12.0-1.2.beta <3.0.0'
-'''));
-  }
-
-  test_pubspec_with_sdk_version_dev() async {
-    var projectDir = createProjectDir(simpleProject());
-    var cliRunner = _createCli(sdkVersion: '2.12.0-1.2.dev')
-        .decodeCommandLineArgs(_parseArgs(['--apply-changes', projectDir]))!;
-    await cliRunner.run();
-    assertProjectContents(
-        projectDir, simpleProject(migrated: true, pubspecText: '''
-name: test
-environment:
-  sdk: '>=2.12.0-0 <3.0.0'
-'''));
-  }
-
-  test_pubspec_with_sdk_version_edge() async {
-    var projectDir = createProjectDir(simpleProject());
-    var cliRunner = _createCli(sdkVersion: '2.12.0-edge.1234567')
-        .decodeCommandLineArgs(_parseArgs(['--apply-changes', projectDir]))!;
-    await cliRunner.run();
-    assertProjectContents(
-        projectDir, simpleProject(migrated: true, pubspecText: '''
-name: test
-environment:
-  sdk: '>=2.12.0-0 <3.0.0'
-'''));
-  }
-
-  test_pubspec_with_sdk_version_internal() async {
-    var projectDir = createProjectDir(simpleProject());
-    var cliRunner = _createCli(sdkVersion: '2.12.0-1234567')
-        .decodeCommandLineArgs(_parseArgs(['--apply-changes', projectDir]))!;
-    await cliRunner.run();
-    assertProjectContents(
-        projectDir, simpleProject(migrated: true, pubspecText: '''
-name: test
-environment:
-  sdk: '>=2.12.0-0 <3.0.0'
-'''));
-  }
-
   test_uses_physical_resource_provider_by_default() {
     var cli = MigrationCli(binaryName: 'nnbd_migration');
     expect(cli.resourceProvider, same(PhysicalResourceProvider.INSTANCE));
@@ -2206,12 +2156,13 @@
         headers: {'Content-Type': 'application/json; charset=UTF-8'});
   }
 
-  _MigrationCli _createCli(
-      {List<String> nullSafePackages = const [], String? sdkVersion}) {
-    mock_sdk.MockSdk(
-        resourceProvider: resourceProvider,
-        nullSafePackages: nullSafePackages,
-        sdkVersion: sdkVersion);
+  _MigrationCli _createCli() {
+    mock_sdk.createMockSdk(
+      resourceProvider: resourceProvider,
+      root: resourceProvider.newFolder(
+        resourceProvider.convertPath(sdkRootPathPosix),
+      ),
+    );
     return _MigrationCli(this);
   }
 
diff --git a/pkg/pkg.status b/pkg/pkg.status
index a196360..1e9bf59 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -19,7 +19,7 @@
 compiler/test/codegen/load_elimination_test: Slow, Pass
 compiler/test/codegen/model_test: Slow, Pass
 compiler/test/deferred_loading/deferred_loading_test: Slow, Pass
-compiler/test/end_to_end/dump_info_test: Slow, Pass
+compiler/test/end_to_end/dump_info_test: Skip #47401
 compiler/test/impact/impact_test: Slow, Pass
 compiler/test/inference/inference0_test: Slow, Pass
 compiler/test/inference/inference1_test: Slow, Pass
diff --git a/pkg/smith/lib/configuration.dart b/pkg/smith/lib/configuration.dart
index 5861fbf..b1576bb7 100644
--- a/pkg/smith/lib/configuration.dart
+++ b/pkg/smith/lib/configuration.dart
@@ -688,7 +688,7 @@
         return const [Runtime.none];
       case Compiler.appJitk:
       case Compiler.dartk:
-        return const [Runtime.vm, Runtime.selfCheck];
+        return const [Runtime.vm];
       case Compiler.dartkp:
         return const [Runtime.dartPrecompiled];
       case Compiler.specParser:
@@ -805,7 +805,6 @@
   static const ie11 = Runtime._('ie11');
   static const edge = Runtime._('edge');
   static const chromeOnAndroid = Runtime._('chromeOnAndroid');
-  static const selfCheck = Runtime._('self_check');
   static const none = Runtime._('none');
 
   static final List<String> names = _all.keys.toList();
@@ -824,7 +823,6 @@
     ie11,
     edge,
     chromeOnAndroid,
-    selfCheck,
     none
   ], key: (runtime) => (runtime as Runtime).name);
 
@@ -881,9 +879,6 @@
       case chromeOnAndroid:
         return Compiler.dart2js;
 
-      case selfCheck:
-        return Compiler.dartk;
-
       case none:
         // If we aren't running it, we probably just want to analyze it.
         return Compiler.dart2analyzer;
diff --git a/pkg/status_file/pubspec.yaml b/pkg/status_file/pubspec.yaml
index 1536b63..5f9e8e2 100644
--- a/pkg/status_file/pubspec.yaml
+++ b/pkg/status_file/pubspec.yaml
@@ -5,7 +5,8 @@
   sdk: "^2.12.0"
 dependencies:
   path: "^1.4.0"
-  args: "^1.4.4"
+  args: ^2.0.0
+
 dev_dependencies:
   expect:
     path: ../expect
diff --git a/pkg/test_runner/lib/src/command.dart b/pkg/test_runner/lib/src/command.dart
index 8ba9f27..da28355 100644
--- a/pkg/test_runner/lib/src/command.dart
+++ b/pkg/test_runner/lib/src/command.dart
@@ -499,39 +499,6 @@
       VMCommandOutput(this, exitCode, timedOut, stdout, stderr, time, pid);
 }
 
-class VMBatchCommand extends ProcessCommand implements VMCommand {
-  final String dartFile;
-  final bool checked;
-
-  VMBatchCommand(String executable, this.dartFile, List<String> arguments,
-      Map<String, String> environmentOverrides,
-      {this.checked = true, int index = 0})
-      : super('vm-batch', executable, arguments, environmentOverrides, null,
-            index);
-
-  VMBatchCommand indexedCopy(int index) =>
-      VMBatchCommand(executable, dartFile, arguments, environmentOverrides,
-          checked: checked, index: index);
-
-  @override
-  List<String> get batchArguments =>
-      checked ? ['--checked', dartFile] : [dartFile];
-
-  @override
-  bool _equal(VMBatchCommand other) {
-    return super._equal(other) &&
-        dartFile == other.dartFile &&
-        checked == other.checked;
-  }
-
-  @override
-  void _buildHashCode(HashCodeBuilder builder) {
-    super._buildHashCode(builder);
-    builder.addJson(dartFile);
-    builder.addJson(checked);
-  }
-}
-
 // Run a VM test under RR, and copy the trace if it crashes. Using a helper
 // script like the precompiler does not work because the RR traces are large
 // and we must diligently erase them for non-crashes even if the test times
diff --git a/pkg/test_runner/lib/src/configuration.dart b/pkg/test_runner/lib/src/configuration.dart
index bf842a4..51110c0 100644
--- a/pkg/test_runner/lib/src/configuration.dart
+++ b/pkg/test_runner/lib/src/configuration.dart
@@ -31,7 +31,6 @@
       this.testList,
       this.repeat,
       this.batch,
-      this.batchDart2JS,
       this.copyCoreDumps,
       this.rr,
       this.isVerbose,
@@ -44,7 +43,6 @@
       this.reportFailures,
       this.reportInJson,
       this.resetBrowser,
-      this.skipCompilation,
       this.writeDebugLog,
       this.writeResults,
       this.writeLogs,
@@ -82,7 +80,6 @@
   // Boolean flags.
 
   final bool batch;
-  final bool batchDart2JS;
   final bool build;
   final bool copyCoreDumps;
   final bool rr;
@@ -97,7 +94,6 @@
   final bool reportFailures;
   final bool reportInJson;
   final bool resetBrowser;
-  final bool skipCompilation;
   final bool writeDebugLog;
   final bool writeResults;
   final bool writeLogs;
diff --git a/pkg/test_runner/lib/src/options.dart b/pkg/test_runner/lib/src/options.dart
index ae9b857..bfe16f6 100644
--- a/pkg/test_runner/lib/src/options.dart
+++ b/pkg/test_runner/lib/src/options.dart
@@ -133,11 +133,6 @@
 ie11:
 chromeOnAndroid:  Run JavaScript in the specified browser.
 
-self_check:       Pass each test or its compiled output to every file under
-                  `pkg` whose name ends with `_self_check.dart`. Each test is
-                  given to the self_check tester as a filename on stdin using
-                  the batch-mode protocol.
-
 none:             No runtime, compile only.''',
         abbr: 'r',
         values: Runtime.names),
@@ -268,9 +263,7 @@
     _Option('output_directory',
         'The name of the output directory for storing log files.',
         defaultsTo: "logs", hide: true),
-    _Option.bool('noBatch', 'Do not run tests in batch mode.', hide: true),
-    _Option.bool('dart2js_batch', 'Run dart2js tests in batch mode.',
-        hide: true),
+    _Option.bool('no_batch', 'Do not run tests in batch mode.', hide: true),
     _Option.bool('write_debug_log',
         'Don\'t write debug messages to stdout but rather to a logfile.',
         hide: true),
@@ -343,15 +336,6 @@
         '''Exclude suites from default selector, only works when no selector
 has been specified on the command line.''',
         hide: true),
-    _Option.bool(
-        'skip_compilation',
-        '''
-Skip the compilation step, using the compilation artifacts left in
-the output folder from a previous run. This flag will often cause
-false positives and negatives, but can be useful for quick and
-dirty offline testing when not making changes that affect the
-compiler.''',
-        hide: true),
     _Option.bool('print_passing_stdout',
         'Print the stdout of passing, as well as failing, tests.',
         hide: true)
@@ -758,8 +742,7 @@
           build: data["build"] as bool,
           testList: data["test_list_contents"] as List<String>,
           repeat: data["repeat"] as int,
-          batch: !(data["noBatch"] as bool),
-          batchDart2JS: data["dart2js_batch"] as bool,
+          batch: !(data["no_batch"] as bool),
           copyCoreDumps: data["copy_coredumps"] as bool,
           rr: data["rr"] as bool,
           isVerbose: data["verbose"] as bool,
@@ -772,7 +755,6 @@
           reportFailures: data["report_failures"] as bool,
           reportInJson: data["report_in_json"] as bool,
           resetBrowser: data["reset_browser_configuration"] as bool,
-          skipCompilation: data["skip_compilation"] as bool,
           writeDebugLog: data["write_debug_log"] as bool,
           writeResults: data["write_results"] as bool,
           writeLogs: data["write_logs"] as bool,
diff --git a/pkg/test_runner/lib/src/process_queue.dart b/pkg/test_runner/lib/src/process_queue.dart
index 3c8e5bb..2965f44 100644
--- a/pkg/test_runner/lib/src/process_queue.dart
+++ b/pkg/test_runner/lib/src/process_queue.dart
@@ -568,16 +568,12 @@
       assert(name == 'vm_compile_to_kernel');
       return _getBatchRunner(name)
           .runCommand(name, command, timeout, command.arguments);
-    } else if (command is CompilationCommand &&
-        globalConfiguration.batchDart2JS &&
-        command.displayName == 'dart2js') {
-      return _getBatchRunner("dart2js")
-          .runCommand("dart2js", command, timeout, command.arguments);
     } else if (command is AnalysisCommand && globalConfiguration.batch) {
       return _getBatchRunner(command.displayName)
           .runCommand(command.displayName, command, timeout, command.arguments);
     } else if (command is CompilationCommand &&
-        (command.displayName == 'dartdevc' ||
+        (command.displayName == 'dart2js' ||
+            command.displayName == 'dartdevc' ||
             command.displayName == 'dartdevk' ||
             command.displayName == 'fasta') &&
         globalConfiguration.batch) {
@@ -600,10 +596,6 @@
           adbDevicePool.releaseDevice(device);
         }
       });
-    } else if (command is VMBatchCommand) {
-      var name = command.displayName;
-      return _getBatchRunner(command.displayName + command.dartFile)
-          .runCommand(name, command, timeout, command.arguments);
     } else if (command is CompilationCommand &&
         command.displayName == 'babel') {
       return RunningProcess(command, timeout,
diff --git a/pkg/test_runner/lib/src/runtime_configuration.dart b/pkg/test_runner/lib/src/runtime_configuration.dart
index 27623e3..1810702 100644
--- a/pkg/test_runner/lib/src/runtime_configuration.dart
+++ b/pkg/test_runner/lib/src/runtime_configuration.dart
@@ -59,9 +59,6 @@
           );
         }
         break;
-
-      case Runtime.selfCheck:
-        return SelfCheckRuntimeConfiguration();
     }
     throw "unreachable";
   }
@@ -431,37 +428,6 @@
   }
 }
 
-class SelfCheckRuntimeConfiguration extends DartVmRuntimeConfiguration {
-  final List<String> selfCheckers = <String>[];
-
-  SelfCheckRuntimeConfiguration() {
-    searchForSelfCheckers();
-  }
-
-  void searchForSelfCheckers() {
-    var pkg = Repository.uri.resolve('pkg');
-    for (var entry in Directory.fromUri(pkg).listSync(recursive: true)) {
-      if (entry is File && entry.path.endsWith('_self_check.dart')) {
-        selfCheckers.add(entry.path);
-      }
-    }
-  }
-
-  List<Command> computeRuntimeCommands(
-      CommandArtifact artifact,
-      List<String> arguments,
-      Map<String, String> environmentOverrides,
-      List<String> extraLibs,
-      bool isCrashExpected) {
-    var executable = dartVmBinaryFileName;
-    return selfCheckers
-        .map((String tester) => VMBatchCommand(
-            executable, tester, arguments, environmentOverrides,
-            checked: _configuration.isChecked))
-        .toList();
-  }
-}
-
 /// Temporary runtime configuration for browser runtimes that haven't been
 /// migrated yet.
 // TODO(ahe): Remove this class.
diff --git a/pkg/test_runner/lib/src/test_configurations.dart b/pkg/test_runner/lib/src/test_configurations.dart
index bbacb13..6d7f1f8 100644
--- a/pkg/test_runner/lib/src/test_configurations.dart
+++ b/pkg/test_runner/lib/src/test_configurations.dart
@@ -268,8 +268,7 @@
     await Future.wait(serverFutures);
   }
 
-  // [firstConf] is needed here, since the ProcessQueue needs to know the
-  // settings of 'noBatch' and 'local_ip'
+  // [firstConf] is needed here, because the ProcessQueue uses some settings.
   ProcessQueue(firstConf, maxProcesses, maxBrowserProcesses, testSuites,
       eventListener, allTestsFinished, verbose, adbDevicePool);
 }
diff --git a/pkg/test_runner/lib/src/test_controller.js b/pkg/test_runner/lib/src/test_controller.js
index 05f7882..77e1b12 100644
--- a/pkg/test_runner/lib/src/test_controller.js
+++ b/pkg/test_runner/lib/src/test_controller.js
@@ -15,7 +15,7 @@
  * The first message should have [is_first_message] set, the last message
  * should have [is_done] set. Status updates should have [is_status_update] set.
  *
- * The [message_content] can be be any content. In our case it will a list of
+ * The [message_content] can be any content. In our case it will a list of
  * events encoded in JSON. See the next comment further down about what an event
  * is.
  */
diff --git a/pkg/test_runner/lib/src/test_suite.dart b/pkg/test_runner/lib/src/test_suite.dart
index f926645..9a5d685 100644
--- a/pkg/test_runner/lib/src/test_suite.dart
+++ b/pkg/test_runner/lib/src/test_suite.dart
@@ -811,9 +811,7 @@
 
     var compilationArtifact = compilerConfiguration.computeCompilationArtifact(
         tempDir, compileTimeArguments, environmentOverrides);
-    if (!configuration.skipCompilation) {
-      commands.addAll(compilationArtifact.commands);
-    }
+    commands.addAll(compilationArtifact.commands);
 
     if ((testFile.hasCompileError || testFile.isStaticErrorTest) &&
         compilerConfiguration.hasCompiler &&
diff --git a/pkg/test_runner/test/test_runner_test.dart b/pkg/test_runner/test/test_runner_test.dart
index 3d9ab93..2fd217a 100644
--- a/pkg/test_runner/test/test_runner_test.dart
+++ b/pkg/test_runner/test/test_runner_test.dart
@@ -120,7 +120,7 @@
 void testProcessQueue() {
   var maxProcesses = 2;
   var maxBrowserProcesses = maxProcesses;
-  var config = OptionsParser().parse(['--noBatch'])[0];
+  var config = OptionsParser().parse(['--no-batch'])[0];
   ProcessQueue(config, maxProcesses, maxBrowserProcesses,
       [CustomTestSuite(config)], [EventListener()], TestController.finished);
 }
diff --git a/pkg/testing/testing.json b/pkg/testing/testing.json
index 722834d..78faafc 100644
--- a/pkg/testing/testing.json
+++ b/pkg/testing/testing.json
@@ -3,7 +3,7 @@
 "":"for details. All rights reserved. Use of this source code is governed by a",
 "":"BSD-style license that can be found in the LICENSE.md file.",
 
-  "packages": "../../.packages",
+  "packages": "../../.dart_tool/package_config.json",
 
   "suites": [
     {
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index b788180..cb866c8 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -18,12 +18,12 @@
 import '../transformations/call_site_annotator.dart' as callSiteAnnotator;
 import '../transformations/lowering.dart' as lowering
     show transformLibraries, transformProcedure;
-import '../transformations/ffi.dart' as ffiHelper show importsFfi;
-import '../transformations/ffi_definitions.dart' as transformFfiDefinitions
+import '../transformations/ffi/common.dart' as ffiHelper show importsFfi;
+import '../transformations/ffi/definitions.dart' as transformFfiDefinitions
     show transformLibraries;
-import '../transformations/ffi_native.dart' as transformFfiNative
+import '../transformations/ffi/native.dart' as transformFfiNative
     show transformLibraries;
-import '../transformations/ffi_use_sites.dart' as transformFfiUseSites
+import '../transformations/ffi/use_sites.dart' as transformFfiUseSites
     show transformLibraries;
 
 /// Specializes the kernel IR to the Dart VM.
@@ -157,10 +157,15 @@
     if (!ffiHelper.importsFfi(component, libraries)) {
       logger?.call("Skipped ffi transformation");
     } else {
-      // Transform @FfiNative(..) functions into ffi native call functions.
-      transformFfiNative.transformLibraries(
-          component, libraries, diagnosticReporter, referenceFromIndex);
+      // Transform @FfiNative(..) functions into FFI native call functions.
+      // Pass instance method receivers as implicit first argument to the static
+      // native function.
+      // Transform arguments that extend NativeFieldWrapperClass1 to Pointer if
+      // the native function expects Pointer (to avoid Handle overhead).
+      transformFfiNative.transformLibraries(component, coreTypes, hierarchy,
+          libraries, diagnosticReporter, referenceFromIndex);
       logger?.call("Transformed ffi natives");
+
       // TODO(jensj/dacoharkes): We can probably limit the transformations to
       // libraries that transitivley depend on dart:ffi.
       transformFfiDefinitions.transformLibraries(
diff --git a/pkg/vm/lib/transformations/ffi.dart b/pkg/vm/lib/transformations/ffi/common.dart
similarity index 89%
rename from pkg/vm/lib/transformations/ffi.dart
rename to pkg/vm/lib/transformations/ffi/common.dart
index 25e2ac8..dc51195 100644
--- a/pkg/vm/lib/transformations/ffi.dart
+++ b/pkg/vm/lib/transformations/ffi/common.dart
@@ -31,7 +31,7 @@
   kUint8,
   kUint16,
   kUint32,
-  kUnit64,
+  kUint64,
   kIntptr,
   kFloat,
   kDouble,
@@ -39,61 +39,73 @@
   kOpaque,
   kStruct,
   kHandle,
+  kBool,
 }
 
-const NativeType kNativeTypeIntStart = NativeType.kInt8;
-const NativeType kNativeTypeIntEnd = NativeType.kIntptr;
+const Set<NativeType> nativeIntTypes = <NativeType>{
+  NativeType.kInt8,
+  NativeType.kInt16,
+  NativeType.kInt32,
+  NativeType.kInt64,
+  NativeType.kUint8,
+  NativeType.kUint16,
+  NativeType.kUint32,
+  NativeType.kUint64,
+  NativeType.kIntptr,
+};
 
-/// The [NativeType] class names, indexed by [NativeType].
-const List<String> nativeTypeClassNames = [
-  'NativeType',
-  '_NativeInteger',
-  '_NativeDouble',
-  'Pointer',
-  'NativeFunction',
-  'Int8',
-  'Int16',
-  'Int32',
-  'Int64',
-  'Uint8',
-  'Uint16',
-  'Uint32',
-  'Uint64',
-  'IntPtr',
-  'Float',
-  'Double',
-  'Void',
-  'Opaque',
-  'Struct',
-  'Handle'
-];
+/// The [NativeType] class names.
+const Map<NativeType, String> nativeTypeClassNames = <NativeType, String>{
+  NativeType.kNativeType: 'NativeType',
+  NativeType.kNativeInteger: '_NativeInteger',
+  NativeType.kNativeDouble: '_NativeDouble',
+  NativeType.kPointer: 'Pointer',
+  NativeType.kNativeFunction: 'NativeFunction',
+  NativeType.kInt8: 'Int8',
+  NativeType.kInt16: 'Int16',
+  NativeType.kInt32: 'Int32',
+  NativeType.kInt64: 'Int64',
+  NativeType.kUint8: 'Uint8',
+  NativeType.kUint16: 'Uint16',
+  NativeType.kUint32: 'Uint32',
+  NativeType.kUint64: 'Uint64',
+  NativeType.kIntptr: 'IntPtr',
+  NativeType.kFloat: 'Float',
+  NativeType.kDouble: 'Double',
+  NativeType.kVoid: 'Void',
+  NativeType.kOpaque: 'Opaque',
+  NativeType.kStruct: 'Struct',
+  NativeType.kHandle: 'Handle',
+  NativeType.kBool: 'Bool',
+};
 
 const int UNKNOWN = 0;
 const int WORD_SIZE = -1;
 
-/// The [NativeType] sizes in bytes, indexed by [NativeType].
-const List<int> nativeTypeSizes = [
-  UNKNOWN, // NativeType
-  UNKNOWN, // NativeInteger
-  UNKNOWN, // NativeDouble
-  WORD_SIZE, // Pointer
-  UNKNOWN, // NativeFunction
-  1, // Int8
-  2, // Int16
-  4, // Int32
-  8, // Int64
-  1, // Uint8
-  2, // Uint16
-  4, // Uint32
-  8, // Uint64
-  WORD_SIZE, // IntPtr
-  4, // Float
-  8, // Double
-  UNKNOWN, // Void
-  UNKNOWN, // Opaque
-  UNKNOWN, // Struct
-  WORD_SIZE, // Handle
-];
+/// The [NativeType] sizes in bytes.
+const Map<NativeType, int> nativeTypeSizes = <NativeType, int>{
+  NativeType.kNativeType: UNKNOWN,
+  NativeType.kNativeInteger: UNKNOWN,
+  NativeType.kNativeDouble: UNKNOWN,
+  NativeType.kPointer: WORD_SIZE,
+  NativeType.kNativeFunction: UNKNOWN,
+  NativeType.kInt8: 1,
+  NativeType.kInt16: 2,
+  NativeType.kInt32: 4,
+  NativeType.kInt64: 8,
+  NativeType.kUint8: 1,
+  NativeType.kUint16: 2,
+  NativeType.kUint32: 4,
+  NativeType.kUint64: 8,
+  NativeType.kIntptr: WORD_SIZE,
+  NativeType.kFloat: 4,
+  NativeType.kDouble: 8,
+  NativeType.kVoid: UNKNOWN,
+  NativeType.kOpaque: UNKNOWN,
+  NativeType.kStruct: UNKNOWN,
+  NativeType.kHandle: WORD_SIZE,
+  NativeType.kBool: 1,
+};
 
 /// The struct layout in various ABIs.
 ///
@@ -145,7 +157,7 @@
   Abi.wordSize32Align32: {
     NativeType.kDouble: 4,
     NativeType.kInt64: 4,
-    NativeType.kUnit64: 4
+    NativeType.kUint64: 4
   },
 
   // The default for MSVC x86:
@@ -169,6 +181,7 @@
 
 /// Load, store, and elementAt are rewired to their static type for these types.
 const List<NativeType> optimizedTypes = [
+  NativeType.kBool,
   NativeType.kInt8,
   NativeType.kInt16,
   NativeType.kInt32,
@@ -176,7 +189,7 @@
   NativeType.kUint8,
   NativeType.kUint16,
   NativeType.kUint32,
-  NativeType.kUnit64,
+  NativeType.kUint64,
   NativeType.kIntptr,
   NativeType.kFloat,
   NativeType.kDouble,
@@ -201,6 +214,7 @@
   final Class objectClass;
   final Class intClass;
   final Class doubleClass;
+  final Class boolClass;
   final Class listClass;
   final Class typeClass;
   final Procedure unsafeCastMethod;
@@ -235,7 +249,7 @@
   final Class structClass;
   final Class unionClass;
   final Class ffiNativeClass;
-  final Class nativeFieldWrapperClass;
+  final Class nativeFieldWrapperClass1Class;
   final Class ffiStructLayoutClass;
   final Field ffiStructLayoutTypesField;
   final Field ffiStructLayoutPackingField;
@@ -291,12 +305,13 @@
   final Procedure getNativeFieldFunction;
   final Procedure reachabilityFenceFunction;
 
-  late final DartType nativeFieldWrapperClassType;
-  late final DartType voidType;
-  late final DartType pointerType;
+  late final InterfaceType nativeFieldWrapperClass1Type;
+  late final InterfaceType voidType;
+  late final InterfaceType pointerVoidType;
 
   /// Classes corresponding to [NativeType], indexed by [NativeType].
-  final List<Class> nativeTypesClasses;
+  final Map<NativeType, Class> nativeTypesClasses;
+  final Map<Class, NativeType> classNativeTypes;
 
   Library? _currentLibrary;
   Library get currentLibrary => _currentLibrary!;
@@ -309,6 +324,7 @@
         objectClass = coreTypes.objectClass,
         intClass = coreTypes.intClass,
         doubleClass = coreTypes.doubleClass,
+        boolClass = coreTypes.boolClass,
         listClass = coreTypes.listClass,
         typeClass = coreTypes.typeClass,
         unsafeCastMethod =
@@ -355,7 +371,7 @@
         structClass = index.getClass('dart:ffi', 'Struct'),
         unionClass = index.getClass('dart:ffi', 'Union'),
         ffiNativeClass = index.getClass('dart:ffi', 'FfiNative'),
-        nativeFieldWrapperClass =
+        nativeFieldWrapperClass1Class =
             index.getClass('dart:nativewrappers', 'NativeFieldWrapperClass1'),
         ffiStructLayoutClass = index.getClass('dart:ffi', '_FfiStructLayout'),
         ffiStructLayoutTypesField =
@@ -431,31 +447,32 @@
             index.getTopLevelProcedure('dart:ffi', '_pointerFromFunction'),
         nativeCallbackFunctionProcedure =
             index.getTopLevelProcedure('dart:ffi', '_nativeCallbackFunction'),
-        nativeTypesClasses = nativeTypeClassNames
-            .map((name) => index.getClass('dart:ffi', name))
-            .toList(),
+        nativeTypesClasses = nativeTypeClassNames.map((nativeType, name) =>
+            MapEntry(nativeType, index.getClass('dart:ffi', name))),
+        classNativeTypes = nativeTypeClassNames.map((nativeType, name) =>
+            MapEntry(index.getClass('dart:ffi', name), nativeType)),
         loadMethods = Map.fromIterable(optimizedTypes, value: (t) {
-          final name = nativeTypeClassNames[t.index];
+          final name = nativeTypeClassNames[t];
           return index.getTopLevelProcedure('dart:ffi', "_load$name");
         }),
         loadUnalignedMethods =
             Map.fromIterable(unalignedLoadsStores, value: (t) {
-          final name = nativeTypeClassNames[t.index];
+          final name = nativeTypeClassNames[t];
           return index.getTopLevelProcedure(
               'dart:ffi', "_load${name}Unaligned");
         }),
         storeMethods = Map.fromIterable(optimizedTypes, value: (t) {
-          final name = nativeTypeClassNames[t.index];
+          final name = nativeTypeClassNames[t];
           return index.getTopLevelProcedure('dart:ffi', "_store$name");
         }),
         storeUnalignedMethods =
             Map.fromIterable(unalignedLoadsStores, value: (t) {
-          final name = nativeTypeClassNames[t.index];
+          final name = nativeTypeClassNames[t];
           return index.getTopLevelProcedure(
               'dart:ffi', "_store${name}Unaligned");
         }),
         elementAtMethods = Map.fromIterable(optimizedTypes, value: (t) {
-          final name = nativeTypeClassNames[t.index];
+          final name = nativeTypeClassNames[t];
           return index.getTopLevelProcedure('dart:ffi', "_elementAt$name");
         }),
         memCopy = index.getTopLevelProcedure('dart:ffi', '_memCopy'),
@@ -471,11 +488,11 @@
             'dart:nativewrappers', '_getNativeField'),
         reachabilityFenceFunction =
             index.getTopLevelProcedure('dart:_internal', 'reachabilityFence') {
-    nativeFieldWrapperClassType =
-        nativeFieldWrapperClass.getThisType(coreTypes, Nullability.nonNullable);
-    voidType = nativeTypesClasses[NativeType.kVoid.index]
+    nativeFieldWrapperClass1Type = nativeFieldWrapperClass1Class.getThisType(
+        coreTypes, Nullability.nonNullable);
+    voidType = nativeTypesClasses[NativeType.kVoid]!
         .getThisType(coreTypes, Nullability.nonNullable);
-    pointerType =
+    pointerVoidType =
         InterfaceType(pointerClass, Nullability.nonNullable, [voidType]);
   }
 
@@ -503,6 +520,7 @@
   /// [IntPtr]                             -> [int]
   /// [Double]                             -> [double]
   /// [Float]                              -> [double]
+  /// [Bool]                               -> [bool]
   /// [Void]                               -> [void]
   /// [Pointer]<T>                         -> [Pointer]<T>
   /// T extends [Pointer]                  -> T
@@ -538,13 +556,15 @@
     if (nativeType_ == NativeType.kPointer) {
       return nativeType;
     }
-    if (kNativeTypeIntStart.index <= nativeType_.index &&
-        nativeType_.index <= kNativeTypeIntEnd.index) {
+    if (nativeIntTypes.contains(nativeType_)) {
       return InterfaceType(intClass, Nullability.legacy);
     }
     if (nativeType_ == NativeType.kFloat || nativeType_ == NativeType.kDouble) {
       return InterfaceType(doubleClass, Nullability.legacy);
     }
+    if (nativeType_ == NativeType.kBool) {
+      return InterfaceType(boolClass, Nullability.legacy);
+    }
     if (nativeType_ == NativeType.kVoid) {
       return VoidType();
     }
@@ -579,11 +599,7 @@
   /// The [NativeType] corresponding to [c]. Returns `null` for user-defined
   /// structs.
   NativeType? getType(Class c) {
-    final int index = nativeTypesClasses.indexOf(c);
-    if (index == -1) {
-      return null;
-    }
-    return NativeType.values[index];
+    return classNativeTypes[c];
   }
 
   InterfaceType _listOfIntType() => InterfaceType(
@@ -731,8 +747,8 @@
     }
     if (!env.isSubtypeOf(
         type,
-        InterfaceType(nativeTypesClasses[NativeType.kNativeType.index],
-            Nullability.legacy),
+        InterfaceType(
+            nativeTypesClasses[NativeType.kNativeType]!, Nullability.legacy),
         SubtypeCheckMode.ignoringNullabilities)) {
       return false;
     }
@@ -756,8 +772,8 @@
     return env.isSubtypeOf(
         type,
         InterfaceType(pointerClass, Nullability.legacy, [
-          InterfaceType(nativeTypesClasses[NativeType.kNativeType.index],
-              Nullability.legacy)
+          InterfaceType(
+              nativeTypesClasses[NativeType.kNativeType]!, Nullability.legacy)
         ]),
         SubtypeCheckMode.ignoringNullabilities);
   }
@@ -772,8 +788,8 @@
     return env.isSubtypeOf(
         type,
         InterfaceType(arrayClass, Nullability.legacy, [
-          InterfaceType(nativeTypesClasses[NativeType.kNativeType.index],
-              Nullability.legacy)
+          InterfaceType(
+              nativeTypesClasses[NativeType.kNativeType]!, Nullability.legacy)
         ]),
         SubtypeCheckMode.ignoringNullabilities);
   }
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi/definitions.dart
similarity index 99%
rename from pkg/vm/lib/transformations/ffi_definitions.dart
rename to pkg/vm/lib/transformations/ffi/definitions.dart
index b0aa9a5..49a4b8d 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi/definitions.dart
@@ -31,7 +31,7 @@
 import 'package:kernel/type_environment.dart' show SubtypeCheckMode;
 import 'package:kernel/util/graph.dart';
 
-import 'ffi.dart';
+import 'common.dart';
 
 /// Checks and elaborates the dart:ffi compounds and their fields.
 ///
@@ -441,7 +441,7 @@
         success = false;
       } else {
         final DartType nativeType = InterfaceType(
-            nativeTypesClasses[_getFieldType(nativeTypeAnnos.first)!.index],
+            nativeTypesClasses[_getFieldType(nativeTypeAnnos.first)!]!,
             Nullability.legacy);
         final DartType? shouldBeDartType = convertNativeTypeToDartType(
             nativeType,
@@ -526,7 +526,7 @@
         "#typedDataBase",
         type: coreTypes.objectNonNullableRawType);
     final name = Name("#fromTypedDataBase");
-    final referenceFrom = indexedClass?.lookupConstructor(name);
+    final reference = indexedClass?.lookupConstructorReference(name);
     final Constructor ctor = Constructor(
         FunctionNode(EmptyStatement(),
             positionalParameters: [typedDataBase],
@@ -540,7 +540,7 @@
               Arguments([VariableGet(typedDataBase)]))
         ],
         fileUri: node.fileUri,
-        reference: referenceFrom?.reference)
+        reference: reference)
       ..fileOffset = node.fileOffset
       ..isNonNullableByDefault = node.enclosingLibrary.isNonNullableByDefault;
 
@@ -1075,7 +1075,7 @@
 
   @override
   Map<Abi, int> get size {
-    final int size = nativeTypeSizes[nativeType.index];
+    final int size = nativeTypeSizes[nativeType]!;
     if (size == WORD_SIZE) {
       return wordSize;
     }
diff --git a/pkg/vm/lib/transformations/ffi/native.dart b/pkg/vm/lib/transformations/ffi/native.dart
new file mode 100644
index 0000000..51a4d71
--- /dev/null
+++ b/pkg/vm/lib/transformations/ffi/native.dart
@@ -0,0 +1,548 @@
+// Copyright (c) 2021, 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:front_end/src/api_unstable/vm.dart'
+    show
+        messageFfiNativeMustBeExternal,
+        messageFfiNativeOnlyNativeFieldWrapperClassCanBePointer,
+        templateFfiNativeUnexpectedNumberOfParameters,
+        templateFfiNativeUnexpectedNumberOfParametersWithReceiver;
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
+import 'package:kernel/library_index.dart' show LibraryIndex;
+import 'package:kernel/reference_from_index.dart' show ReferenceFromIndex;
+import 'package:kernel/target/targets.dart' show DiagnosticReporter;
+import 'package:kernel/type_environment.dart';
+
+import 'common.dart' show FfiTransformer;
+
+/// Transform @FfiNative annotated functions into FFI native function pointer
+/// functions.
+void transformLibraries(
+    Component component,
+    CoreTypes coreTypes,
+    ClassHierarchy hierarchy,
+    List<Library> libraries,
+    DiagnosticReporter diagnosticReporter,
+    ReferenceFromIndex? referenceFromIndex) {
+  final index = LibraryIndex(component,
+      ['dart:ffi', 'dart:_internal', 'dart:typed_data', 'dart:nativewrappers']);
+  // Skip if dart:ffi isn't loaded (e.g. during incremental compile).
+  if (index.tryGetClass('dart:ffi', 'FfiNative') == null) {
+    return;
+  }
+  final transformer = FfiNativeTransformer(
+      index, coreTypes, hierarchy, diagnosticReporter, referenceFromIndex);
+  libraries.forEach(transformer.visitLibrary);
+}
+
+class FfiNativeTransformer extends FfiTransformer {
+  final DiagnosticReporter diagnosticReporter;
+  final ReferenceFromIndex? referenceFromIndex;
+  final Class ffiNativeClass;
+  final Class nativeFunctionClass;
+  final Field ffiNativeNameField;
+  final Field ffiNativeIsLeafField;
+  final Field resolverField;
+
+  // VariableDeclaration names can be null or empty string, in which case
+  // they're automatically assigned a "temporary" name like `#t0`.
+  static const variableDeclarationTemporaryName = null;
+
+  FfiNativeTransformer(
+      LibraryIndex index,
+      CoreTypes coreTypes,
+      ClassHierarchy hierarchy,
+      this.diagnosticReporter,
+      this.referenceFromIndex)
+      : ffiNativeClass = index.getClass('dart:ffi', 'FfiNative'),
+        nativeFunctionClass = index.getClass('dart:ffi', 'NativeFunction'),
+        ffiNativeNameField =
+            index.getField('dart:ffi', 'FfiNative', 'nativeName'),
+        ffiNativeIsLeafField =
+            index.getField('dart:ffi', 'FfiNative', 'isLeaf'),
+        resolverField = index.getTopLevelField('dart:ffi', '_ffi_resolver'),
+        super(index, coreTypes, hierarchy, diagnosticReporter,
+            referenceFromIndex);
+
+  ConstantExpression? _tryGetFfiNativeAnnotation(Member node) {
+    for (final Expression annotation in node.annotations) {
+      if (annotation is! ConstantExpression) {
+        continue;
+      }
+      final annotationConstant = annotation.constant;
+      if (annotationConstant is! InstanceConstant) {
+        continue;
+      }
+      if (annotationConstant.classNode == ffiNativeClass) {
+        return annotation;
+      }
+    }
+    return null;
+  }
+
+  bool _extendsNativeFieldWrapperClass1(DartType type) {
+    if (type is InterfaceType) {
+      Class? cls = type.classNode;
+      while (cls != null) {
+        if (cls == nativeFieldWrapperClass1Class) {
+          return true;
+        }
+        cls = cls.superclass;
+      }
+    }
+    return false;
+  }
+
+  // Replaces parameters with Pointer if:
+  // 1) they extend NativeFieldWrapperClass1, and
+  // 2) the corresponding FFI parameter is Pointer.
+  DartType _wrapArgumentType(
+      DartType dartParameterType, DartType ffiParameterType) {
+    if (dartParameterType is InterfaceType) {
+      if (_extendsNativeFieldWrapperClass1(dartParameterType) &&
+          env.isSubtypeOf(ffiParameterType, pointerVoidType,
+              SubtypeCheckMode.ignoringNullabilities)) {
+        return pointerVoidType;
+      }
+    }
+    return dartParameterType;
+  }
+
+  // Replaces return type with Object if it is Handle.
+  DartType _wrapReturnType(DartType dartReturnType, DartType ffiReturnType) {
+    if (env.isSubtypeOf(
+        ffiReturnType,
+        handleClass.getThisType(coreTypes, Nullability.nonNullable),
+        SubtypeCheckMode.ignoringNullabilities)) {
+      return objectClass.getThisType(coreTypes, dartReturnType.nullability);
+    }
+    return dartReturnType;
+  }
+
+  // Compute synthetic FFI function type, accounting for Objects passed as
+  // Pointer, and Objects returned as Handles.
+  FunctionType _wrapFunctionType(
+      FunctionType dartFunctionType, FunctionType ffiFunctionType) {
+    return FunctionType(
+      <DartType>[
+        for (var i = 0; i < dartFunctionType.positionalParameters.length; i++)
+          _wrapArgumentType(dartFunctionType.positionalParameters[i],
+              ffiFunctionType.positionalParameters[i]),
+      ],
+      _wrapReturnType(dartFunctionType.returnType, ffiFunctionType.returnType),
+      dartFunctionType.nullability,
+    );
+  }
+
+  // Create field holding the resolved native function pointer.
+  //
+  // For:
+  //   @FfiNative<IntPtr Function(Pointer<Void>)>('DoXYZ', isLeaf:true)
+  //   external int doXyz(NativeFieldWrapperClass1 obj);
+  //
+  // Create:
+  //   static final _doXyz$FfiNative$ptr =
+  //       Pointer<NativeFunction<IntPtr Function(Pointer<Void>)>>
+  //           .fromAddress(_ffi_resolver('..', 'DoXYZ', 1))
+  //           .asFunction<int Function(Pointer<Void>)>(isLeaf:true);
+  Field _createResolvedFfiNativeField(
+      String dartFunctionName,
+      StringConstant nativeFunctionName,
+      bool isLeaf,
+      FunctionType dartFunctionType,
+      FunctionType ffiFunctionType,
+      int fileOffset,
+      Uri fileUri) {
+    // Derive number of arguments from the native function signature.
+    final numberNativeArgs = ffiFunctionType.positionalParameters.length;
+
+    // _ffi_resolver('...', 'DoXYZ', 1)
+    final resolverInvocation = FunctionInvocation(
+        FunctionAccessKind.FunctionType,
+        StaticGet(resolverField),
+        Arguments(<Expression>[
+          ConstantExpression(
+              StringConstant(currentLibrary.importUri.toString())),
+          ConstantExpression(nativeFunctionName),
+          ConstantExpression(IntConstant(numberNativeArgs)),
+        ]),
+        functionType: resolverField.type as FunctionType)
+      ..fileOffset = fileOffset;
+
+    // _fromAddress<NativeFunction<Double Function(Double)>>(...)
+    final fromAddressInvocation = StaticInvocation(
+        fromAddressInternal,
+        Arguments(<Expression>[
+          resolverInvocation
+        ], types: [
+          InterfaceType(nativeFunctionClass, Nullability.legacy,
+              <DartType>[ffiFunctionType])
+        ]))
+      ..fileOffset = fileOffset;
+
+    // NativeFunctionPointer.asFunction
+    //     <Double Function(Double), double Function(double)>(..., isLeaf:true)
+    final asFunctionInvocation = StaticInvocation(
+        asFunctionMethod,
+        Arguments(<Expression>[
+          fromAddressInvocation
+        ], types: <DartType>[
+          ffiFunctionType,
+          dartFunctionType
+        ], named: <NamedExpression>[
+          NamedExpression('isLeaf', BoolLiteral(isLeaf))
+        ]))
+      ..fileOffset = fileOffset;
+
+    // static final _doXyz$FfiNative$Ptr = ...
+    final fieldName =
+        Name('_$dartFunctionName\$FfiNative\$Ptr', currentLibrary);
+    final functionPointerField = Field.immutable(fieldName,
+        type: dartFunctionType,
+        initializer: asFunctionInvocation,
+        isStatic: true,
+        isFinal: true,
+        fileUri: fileUri,
+        getterReference: currentLibraryIndex?.lookupGetterReference(fieldName))
+      ..fileOffset = fileOffset;
+
+    return functionPointerField;
+  }
+
+  // Whether a parameter of [dartParameterType], passed as [ffiParameterType],
+  // needs to be converted to Pointer.
+  bool _requiresPointerConversion(
+      DartType dartParameterType, DartType ffiParameterType) {
+    return (env.isSubtypeOf(ffiParameterType, pointerVoidType,
+            SubtypeCheckMode.ignoringNullabilities) &&
+        !env.isSubtypeOf(dartParameterType, pointerVoidType,
+            SubtypeCheckMode.ignoringNullabilities));
+  }
+
+  VariableDeclaration _declareTemporary(Expression initializer,
+      DartType dartParameterType, DartType ffiParameterType) {
+    final wrappedType =
+        (_requiresPointerConversion(dartParameterType, ffiParameterType)
+            ? nativeFieldWrapperClass1Type
+            : dartParameterType);
+    return VariableDeclaration(variableDeclarationTemporaryName,
+        initializer: initializer, type: wrappedType, isFinal: true);
+  }
+
+  Expression _getTemporary(VariableDeclaration temporary,
+      DartType dartParameterType, DartType ffiParameterType) {
+    if (_requiresPointerConversion(dartParameterType, ffiParameterType)) {
+      // Pointer.fromAddress(_getNativeField(#t0))
+      return StaticInvocation(
+          fromAddressInternal,
+          Arguments(<Expression>[
+            StaticInvocation(getNativeFieldFunction,
+                Arguments(<Expression>[VariableGet(temporary)]))
+          ], types: <DartType>[
+            voidType
+          ]));
+    }
+    return VariableGet(temporary);
+  }
+
+  // FfiNative calls that pass objects extending NativeFieldWrapperClass1
+  // should be passed as Pointer instead so we don't have the overhead of
+  // converting Handles.
+  // If we find a NativeFieldWrapperClass1 object being passed to an FfiNative
+  // signature taking a Pointer, we automatically wrap the argument in a call to
+  // `Pointer.fromAddress(_getNativeField(obj))`.
+  //
+  // Example:
+  //   passAsPointer(ClassWithNativeField());
+  //
+  // Becomes, roughly:
+  //   {
+  //     final NativeFieldWrapperClass1#t0 = ClassWithNativeField();
+  //     final #t1 = passAsPointer(Pointer.fromAddress(_getNativeField(#t0)));
+  //     reachabilityFence(#t0);
+  //   } => #t1
+  Expression _wrapArgumentsAndReturn(FunctionInvocation invocation,
+      FunctionType dartFunctionType, FunctionType ffiFunctionType) {
+    List<DartType> ffiParameters = ffiFunctionType.positionalParameters;
+    List<DartType> dartParameters = dartFunctionType.positionalParameters;
+    // Create lists of temporary variables for arguments potentially being
+    // wrapped, and the (potentially) wrapped arguments to be passed.
+    final temporariesForArguments = [];
+    final callArguments = <Expression>[];
+    final fencedArguments = [];
+    for (int i = 0; i < invocation.arguments.positional.length; i++) {
+      final temporary = _declareTemporary(invocation.arguments.positional[i],
+          dartParameters[i], ffiParameters[i]);
+      // Note: We also evaluate, and assign temporaries for, non-wrapped
+      // arguments as we need to preserve the original evaluation order.
+      temporariesForArguments.add(temporary);
+      callArguments
+          .add(_getTemporary(temporary, dartParameters[i], ffiParameters[i]));
+      if (_requiresPointerConversion(dartParameters[i], ffiParameters[i])) {
+        fencedArguments.add(temporary);
+        continue;
+      }
+    }
+
+    Expression resultInitializer = invocation;
+    if (env.isSubtypeOf(
+        ffiFunctionType.returnType,
+        handleClass.getThisType(coreTypes, Nullability.nonNullable),
+        SubtypeCheckMode.ignoringNullabilities)) {
+      resultInitializer = StaticInvocation(unsafeCastMethod,
+          Arguments([invocation], types: [dartFunctionType.returnType]));
+    }
+
+    //   final T #t1 = foo(Pointer.fromAddress(_getNativeField(#t0)));
+    final result = VariableDeclaration(variableDeclarationTemporaryName,
+        initializer: resultInitializer,
+        type: dartFunctionType.returnType,
+        isFinal: true);
+
+    invocation.arguments = Arguments(callArguments);
+
+    // {
+    //   final NativeFieldWrapperClass1 #t0 = ClassWithNativeField();
+    //   .. #t1 ..
+    //   reachabilityFence(#t0);
+    // } => #t1
+    final resultBlock = BlockExpression(
+      Block(<Statement>[
+        ...temporariesForArguments,
+        result,
+        for (final argument in fencedArguments)
+          ExpressionStatement(StaticInvocation(reachabilityFenceFunction,
+              Arguments(<Expression>[VariableGet(argument)])))
+      ]),
+      VariableGet(result),
+    );
+
+    return resultBlock;
+  }
+
+  // Verify the Dart and FFI parameter types are compatible.
+  bool _verifyParameter(DartType dartParameterType, DartType ffiParameterType,
+      int annotationOffset, Uri? file) {
+    // Only NativeFieldWrapperClass1 instances can be passed as pointer.
+    if (_requiresPointerConversion(dartParameterType, ffiParameterType) &&
+        !_extendsNativeFieldWrapperClass1(dartParameterType)) {
+      diagnosticReporter.report(
+          messageFfiNativeOnlyNativeFieldWrapperClassCanBePointer,
+          annotationOffset,
+          1,
+          file);
+      return false;
+    }
+    return true;
+  }
+
+  // Verify the signatures of the Dart function and the accompanying FfiNative
+  // annotation matches.
+  bool _verifySignatures(Procedure node, FunctionType dartFunctionType,
+      FunctionType ffiFunctionType, int annotationOffset) {
+    if (dartFunctionType.positionalParameters.length !=
+        ffiFunctionType.positionalParameters.length) {
+      final template = (node.isStatic
+          ? templateFfiNativeUnexpectedNumberOfParameters
+          : templateFfiNativeUnexpectedNumberOfParametersWithReceiver);
+      diagnosticReporter.report(
+          template.withArguments(dartFunctionType.positionalParameters.length,
+              ffiFunctionType.positionalParameters.length),
+          annotationOffset,
+          1,
+          node.location?.file);
+      return false;
+    }
+
+    var validSignature = true;
+    for (var i = 0; i < dartFunctionType.positionalParameters.length; i++) {
+      final dartParameterType = dartFunctionType.positionalParameters[i];
+      if (dartParameterType is InterfaceType) {
+        if (!_verifyParameter(
+            dartParameterType,
+            ffiFunctionType.positionalParameters[i],
+            annotationOffset,
+            node.location?.file)) {
+          validSignature = false;
+        }
+      }
+    }
+
+    return validSignature;
+  }
+
+  Procedure _transformProcedure(
+      Procedure node,
+      StringConstant nativeFunctionName,
+      bool isLeaf,
+      int annotationOffset,
+      FunctionType dartFunctionType,
+      FunctionType ffiFunctionType,
+      List<Expression> argumentList) {
+    if (!_verifySignatures(
+        node, ffiFunctionType, dartFunctionType, annotationOffset)) {
+      return node;
+    }
+
+    // int Function(Pointer<Void>)
+    final wrappedDartFunctionType =
+        _wrapFunctionType(dartFunctionType, ffiFunctionType);
+
+    final parent = node.parent;
+
+    var fileUri = currentLibrary.fileUri;
+    if (parent is Class) {
+      fileUri = parent.fileUri;
+    } else if (parent is Library) {
+      fileUri = parent.fileUri;
+    }
+
+    // static final _myMethod$FfiNative$Ptr = ..
+    final resolvedField = _createResolvedFfiNativeField(
+        node.name.text,
+        nativeFunctionName,
+        isLeaf,
+        wrappedDartFunctionType,
+        ffiFunctionType,
+        node.fileOffset,
+        fileUri);
+
+    // Add field to the parent the FfiNative function belongs to.
+    if (parent is Class) {
+      parent.addField(resolvedField);
+    } else if (parent is Library) {
+      parent.addField(resolvedField);
+    } else {
+      throw 'Unexpected parent of @FfiNative function. '
+          'Expected Class or Library, but found ${parent}.';
+    }
+
+    // _myFunction$FfiNative$Ptr(obj, x)
+    final functionPointerInvocation = FunctionInvocation(
+        FunctionAccessKind.FunctionType,
+        StaticGet(resolvedField),
+        Arguments(argumentList),
+        functionType: wrappedDartFunctionType)
+      ..fileOffset = node.fileOffset;
+
+    Expression result = (wrappedDartFunctionType == dartFunctionType
+        ? functionPointerInvocation
+        : _wrapArgumentsAndReturn(
+            functionPointerInvocation, dartFunctionType, ffiFunctionType));
+
+    //   => _myFunction$FfiNative$Ptr(
+    //     Pointer<Void>.fromAddress(_getNativeField(obj)), x)
+    node.function.body = ReturnStatement(result)..parent = node.function;
+
+    return node;
+  }
+
+  // Transform FfiNative instance methods.
+  // Example:
+  //   class MyNativeClass extends NativeFieldWrapperClass1 {
+  //     @FfiNative<IntPtr Function(Pointer<Void>, IntPtr)>('MyClass_MyMethod')
+  //     external int myMethod(int x);
+  //   }
+  // Becomes, roughly:
+  //   ... {
+  //     static final _myMethod$FfiNative$Ptr = ...
+  //     static _myMethod$FfiNative(MyNativeClass self, int x)
+  //       => _myMethod$FfiNative$Ptr(
+  //         Pointer<Void>.fromAddress(_getNativeField(self)), x);
+  //     int myMethod(int x) => _myMethod$FfiNative(this, x);
+  //   }
+  //
+  //   ... {
+  //     static final _myMethod$FfiNative$Ptr = ...
+  //     int myMethod(int x)
+  //       => _myMethod$FfiNative$Ptr(
+  //         Pointer<Void>.fromAddress(_getNativeField(this)), x);
+  //   }
+  Procedure _transformInstanceMethod(
+      Procedure node,
+      FunctionType ffiFunctionType,
+      StringConstant nativeFunctionName,
+      bool isLeaf,
+      int annotationOffset) {
+    final dartFunctionType = FunctionType([
+      (node.parent as Class).getThisType(coreTypes, Nullability.nonNullable),
+      for (final parameter in node.function.positionalParameters) parameter.type
+    ], node.function.returnType, Nullability.nonNullable);
+
+    final argumentList = <Expression>[
+      ThisExpression(),
+      for (final parameter in node.function.positionalParameters)
+        VariableGet(parameter)
+    ];
+
+    return _transformProcedure(node, nativeFunctionName, isLeaf,
+        annotationOffset, dartFunctionType, ffiFunctionType, argumentList);
+  }
+
+  // Transform FfiNative static functions.
+  // Example:
+  //   @FfiNative<IntPtr Function(Pointer<Void>, IntPtr)>('MyFunction')
+  //   external int myFunction(MyNativeClass obj, int x);
+  // Becomes, roughly:
+  //   static final _myFunction$FfiNative$Ptr = ...
+  //   int myFunction(MyNativeClass obj, int x)
+  //     => myFunction$FfiNative$Ptr(
+  //       Pointer<Void>.fromAddress(_getNativeField(obj)), x);
+  Procedure _transformStaticFunction(
+      Procedure node,
+      FunctionType ffiFunctionType,
+      StringConstant nativeFunctionName,
+      bool isLeaf,
+      int annotationOffset) {
+    final dartFunctionType =
+        node.function.computeThisFunctionType(Nullability.nonNullable);
+
+    final argumentList = <Expression>[
+      for (final parameter in node.function.positionalParameters)
+        VariableGet(parameter)
+    ];
+
+    return _transformProcedure(node, nativeFunctionName, isLeaf,
+        annotationOffset, dartFunctionType, ffiFunctionType, argumentList);
+  }
+
+  @override
+  visitProcedure(Procedure node) {
+    // Only transform functions that are external and have FfiNative annotation:
+    //   @FfiNative<Double Function(Double)>('Math_sqrt')
+    //   external double _square_root(double x);
+    final ffiNativeAnnotation = _tryGetFfiNativeAnnotation(node);
+    if (ffiNativeAnnotation == null) {
+      return node;
+    }
+
+    if (!node.isExternal) {
+      diagnosticReporter.report(messageFfiNativeMustBeExternal, node.fileOffset,
+          1, node.location?.file);
+      return node;
+    }
+    node.isExternal = false;
+
+    node.annotations.remove(ffiNativeAnnotation);
+
+    final ffiConstant = ffiNativeAnnotation.constant as InstanceConstant;
+    final ffiFunctionType = ffiConstant.typeArguments[0] as FunctionType;
+    final nativeFunctionName = ffiConstant
+        .fieldValues[ffiNativeNameField.fieldReference] as StringConstant;
+    final isLeaf = (ffiConstant.fieldValues[ffiNativeIsLeafField.fieldReference]
+            as BoolConstant)
+        .value;
+
+    if (!node.isStatic) {
+      return _transformInstanceMethod(node, ffiFunctionType, nativeFunctionName,
+          isLeaf, ffiNativeAnnotation.fileOffset);
+    }
+
+    return _transformStaticFunction(node, ffiFunctionType, nativeFunctionName,
+        isLeaf, ffiNativeAnnotation.fileOffset);
+  }
+}
diff --git a/pkg/vm/lib/transformations/ffi_use_sites.dart b/pkg/vm/lib/transformations/ffi/use_sites.dart
similarity index 86%
rename from pkg/vm/lib/transformations/ffi_use_sites.dart
rename to pkg/vm/lib/transformations/ffi/use_sites.dart
index a90f1ec..744bc00 100644
--- a/pkg/vm/lib/transformations/ffi_use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi/use_sites.dart
@@ -26,7 +26,7 @@
 import 'package:kernel/type_algebra.dart' show Substitution;
 import 'package:kernel/type_environment.dart';
 
-import 'ffi.dart'
+import 'common.dart'
     show
         NativeType,
         FfiTransformer,
@@ -131,20 +131,6 @@
     return result;
   }
 
-  InstanceConstant? _tryGetFfiNativeAnnotation(Member node) {
-    for (final Expression annotation in node.annotations) {
-      if (annotation is ConstantExpression) {
-        if (annotation.constant is InstanceConstant) {
-          final instConst = annotation.constant as InstanceConstant;
-          if (instConst.classNode == ffiNativeClass) {
-            return instConst;
-          }
-        }
-      }
-    }
-    return null;
-  }
-
   @override
   visitStaticInvocation(StaticInvocation node) {
     super.visitStaticInvocation(node);
@@ -366,88 +352,6 @@
                   .substituteType(allocateFunctionType
                       .withoutTypeParameters) as FunctionType);
         }
-      } else if (target is Procedure) {
-        // FfiNative calls that pass objects extending NativeFieldWrapperClass1
-        // (NFWC1) should be passed as Pointer instead so we don't have the
-        // overhead of converting Handles.
-        // If we find an NFWC1 object being passed to an FfiNative signature
-        // taking a Pointer, we automatically wrap the argument in a call to
-        // `Pointer.fromAddress(_getNativeField(obj))`.
-        // Example:
-        //   passAsPointer(ClassWithNativeField());
-        // Becomes, roughly:
-        //   #t0 = PointerClassWithNativeField();
-        //   passAsPointer(Pointer.fromAddress(_getNativeField(#t0)));
-        //   reachabilityFence(#t0);
-        final ffiNativeAnn = _tryGetFfiNativeAnnotation(target);
-        if (ffiNativeAnn != null) {
-          final DartType ffiSignature = ffiNativeAnn.typeArguments[0];
-          if (ffiSignature is FunctionType) {
-            final List<DartType> ffiParams = ffiSignature.positionalParameters;
-            final List<VariableDeclaration> dartParams =
-                target.function.positionalParameters;
-
-            List<VariableDeclaration> tmpsArgs = [];
-            List<Expression> callArgs = [];
-            final origArgs = node.arguments.positional;
-            for (int i = 0; i < origArgs.length; i++) {
-              if (env.isSubtypeOf(
-                      dartParams[i].type,
-                      nativeFieldWrapperClassType,
-                      SubtypeCheckMode.ignoringNullabilities) &&
-                  env.isSubtypeOf(ffiParams[i], pointerType,
-                      SubtypeCheckMode.ignoringNullabilities)) {
-                // final NativeFieldWrapperClass1 #t1 = MyNFWC1();.
-                final tmpPtr = VariableDeclaration('',
-                    initializer: origArgs[i],
-                    type: nativeFieldWrapperClassType,
-                    isFinal: true);
-                tmpsArgs.add(tmpPtr);
-
-                // Pointer.fromAddress(_getNativeField(#t1)).
-                final ptr = StaticInvocation(
-                    fromAddressInternal,
-                    Arguments([
-                      StaticInvocation(getNativeFieldFunction,
-                          Arguments([VariableGet(tmpPtr)]))
-                    ], types: [
-                      voidType
-                    ]));
-                callArgs.add(ptr);
-
-                continue;
-              }
-              // Note: We also evaluate, and assign temporaries for, non-wrapped
-              // arguments as we need to preserve the original evaluation order.
-              final tmpArg = VariableDeclaration('',
-                  initializer: origArgs[i], isFinal: true);
-              tmpsArgs.add(tmpArg);
-              callArgs.add(VariableGet(tmpArg));
-            }
-
-            final targetCall = StaticInvocation(target, Arguments(callArgs));
-
-            // {
-            //   T #t0;
-            //   final NativeFieldWrapperClass1 #t1 = MyNFWC1();
-            //   #t0 = foo(Pointer.fromAddress(_getNativeField(#t1)));
-            //   reachabilityFence(#t1);
-            // } => #t0
-            final tmpResult =
-                VariableDeclaration('', type: target.function.returnType);
-            return BlockExpression(
-              Block([
-                tmpResult,
-                ...tmpsArgs,
-                ExpressionStatement(VariableSet(tmpResult, targetCall)),
-                for (final ta in tmpsArgs)
-                  ExpressionStatement(StaticInvocation(
-                      reachabilityFenceFunction, Arguments([VariableGet(ta)])))
-              ]),
-              VariableGet(tmpResult),
-            );
-          }
-        }
       }
     } on _FfiStaticTypeError {
       // It's OK to swallow the exception because the diagnostics issued will
@@ -501,7 +405,7 @@
           .firstWhere((function) => function.name == Name('#sizeOf'));
       return StaticGet(sizeOfGetter);
     }
-    final int size = nativeTypeSizes[nt.index];
+    final int size = nativeTypeSizes[nt]!;
     if (size == WORD_SIZE) {
       return runtimeBranchOnLayout(wordSize);
     }
@@ -809,22 +713,6 @@
     return pointerType is InterfaceType ? pointerType.typeArguments[0] : null;
   }
 
-  // Replaces all NativeFieldWrapperClass1 parameters with Pointer.
-  FunctionType _pointerizeFunctionType(FunctionType dartType) {
-    List<DartType> parameters = [];
-    for (final parameter in dartType.positionalParameters) {
-      if (parameter is InterfaceType) {
-        if (env.isSubtypeOf(parameter, nativeFieldWrapperClassType,
-            SubtypeCheckMode.ignoringNullabilities)) {
-          parameters.add(pointerType);
-          continue;
-        }
-      }
-      parameters.add(parameter);
-    }
-    return FunctionType(parameters, dartType.returnType, dartType.nullability);
-  }
-
   void _ensureNativeTypeToDartType(
       DartType nativeType, DartType dartType, Expression node,
       {bool allowHandle: false}) {
@@ -837,15 +725,6 @@
         SubtypeCheckMode.ignoringNullabilities)) {
       return;
     }
-    // We do automatic argument conversion from NativeFieldWrapperClass1 to
-    // Pointer, so we specifically allow for NFWC1 to be passed as Pointer.
-    if (dartType is FunctionType) {
-      final ptrDartType = _pointerizeFunctionType(dartType);
-      if (env.isSubtypeOf(correspondingDartType, ptrDartType,
-          SubtypeCheckMode.ignoringNullabilities)) {
-        return;
-      }
-    }
     diagnosticReporter.report(
         templateFfiTypeMismatch.withArguments(dartType, correspondingDartType,
             nativeType, currentLibrary.isNonNullableByDefault),
@@ -911,7 +790,7 @@
         klass == opaqueClass ||
         klass == structClass ||
         klass == unionClass ||
-        nativeTypesClasses.contains(klass)) {
+        classNativeTypes[klass] != null) {
       return null;
     }
 
@@ -930,7 +809,7 @@
       }
     }
 
-    for (final parent in nativeTypesClasses) {
+    for (final parent in nativeTypesClasses.values) {
       if (hierarchy.isSubtypeOf(klass, parent)) {
         return parent;
       }
diff --git a/pkg/vm/lib/transformations/ffi_checks.md b/pkg/vm/lib/transformations/ffi_checks.md
deleted file mode 100644
index ed1ce41..0000000
--- a/pkg/vm/lib/transformations/ffi_checks.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# FFI static checks
-
-## Translating FFI types
-
-The FFI library defines a number of "native" types, which have corresponding
-Dart types. This is a many-to-one mapping, defined by `DartRepresentationOf` in
-`native_type.dart`.
-
-## Subtyping restrictions
-
-No class may extend, implement or mixin any classes inside the FFI library, with
-the following exception. Any class may extend (but not implement or mixin)
-`ffi.Struct`. In this case, the subclass is considered a *struct class*. No
-class may extend, implement or mixin a struct class.
-
-## Struct rules
-
-The following restrictions apply to struct classes:
-
-- A struct class must not be generic.
-- A struct class `X` must extend `Struct<X>`. That is, the type argument to the
-  superclass must be exactly the subclass itself.
-
-Some restrictions apply to fields of struct classes:
-
-- A field of a struct class must not have an initializer.
-- A field of a struct class must either have a type which is a subtype of
-  `ffi.Pointer` or else be annotated by one of the following types:
-    - `ffi.UintN` or `ffi.IntN` for any N
-    - `ffi.Float` or `ffi.Double`
-  If the field is annotated, the Dart version of the annotated type must be
-  identical to the field's declared type. Note that struct classes currently
-  must not be used as fields.
-- A field of a struct class must not have more than one annotation corresponding
-  to an FFI native type.
-
-Finally, struct classes must not have constructors with field initializers.
-
-## `fromFunction` rules
-
-The following restrictions apply to static invocations of the factory
-constructor `Pointer<T>.fromFunction(f, e)`. Dynamic invocations of this method,
-e.g. through mirrors, are runtime errors. `T` must be a subtype of
-`NativeFunction<T'>` for some `T'`. Let `F` be the Dart type which corresponds
-to static type of `T'` and `R` be the return type of `F`.
-
-- `T` must be instantiated; i.e., it must not reference any class or function
-  type parameters.
-- The static type of `f` must be a subtype of `F`.
-- Struct classes are not allowed as the top-level class in a parameter or return
-  type of `F`.
-- The static type of `e` must be a subtype of `R`.
-- `e` must be an expression which is legal in a constant context.
-- `f` must be a direct reference to a top-level method.
-- `e` must not be provided if `R` is `void` or `ffi.Pointer`.
-- `e` must be provided otherwise.
-
-## `asFunction` and `lookupFunction ` rules
-
-The following restrictions apply to statically resolved invocations of the
-instance method `Pointer<T>.asFunction<F>()` and
-`DynamicLibrary.lookupFunction<S, F>()`. Dynamic invocations of these methods,
-e.g. through mirrors or a receiver of static type `dynamic`, are runtime errors.
-`T` must be a subtype of `NativeFunction<T'>` for some `T'`. Let `F'` be the
-Dart type which corresponds to static type of `T'`/`S`.
-
-- `T`, `S` and `F` must be constants; i.e., they must not reference any class or
-  function type parameters.
-- `F'` must be a subtype of `F`.
diff --git a/pkg/vm/lib/transformations/ffi_native.dart b/pkg/vm/lib/transformations/ffi_native.dart
deleted file mode 100644
index 0752ed2..0000000
--- a/pkg/vm/lib/transformations/ffi_native.dart
+++ /dev/null
@@ -1,195 +0,0 @@
-// Copyright (c) 2021, 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:kernel/ast.dart';
-import 'package:kernel/library_index.dart' show LibraryIndex;
-import 'package:kernel/reference_from_index.dart'
-    show IndexedLibrary, ReferenceFromIndex;
-import 'package:kernel/target/targets.dart' show DiagnosticReporter;
-import 'package:front_end/src/api_unstable/vm.dart'
-    show messageFfiNativeAnnotationMustAnnotateStatic;
-
-/// Transform @FfiNative annotated functions into FFI native function pointer
-/// functions.
-void transformLibraries(
-    Component component,
-    List<Library> libraries,
-    DiagnosticReporter diagnosticReporter,
-    ReferenceFromIndex? referenceFromIndex) {
-  final index = LibraryIndex(component, ['dart:ffi']);
-  // Skip if dart:ffi isn't loaded (e.g. during incremental compile).
-  if (index.tryGetClass('dart:ffi', 'FfiNative') == null) {
-    return;
-  }
-  final transformer =
-      FfiNativeTransformer(index, diagnosticReporter, referenceFromIndex);
-  libraries.forEach(transformer.visitLibrary);
-}
-
-class FfiNativeTransformer extends Transformer {
-  Library? currentLibrary;
-  IndexedLibrary? currentLibraryIndex;
-
-  final DiagnosticReporter diagnosticReporter;
-  final ReferenceFromIndex? referenceFromIndex;
-  final Class ffiNativeClass;
-  final Class nativeFunctionClass;
-  final Field ffiNativeNameField;
-  final Field ffiNativeIsLeafField;
-  final Field resolverField;
-  final Procedure asFunctionProcedure;
-  final Procedure fromAddressInternal;
-
-  FfiNativeTransformer(
-      LibraryIndex index, this.diagnosticReporter, this.referenceFromIndex)
-      : ffiNativeClass = index.getClass('dart:ffi', 'FfiNative'),
-        nativeFunctionClass = index.getClass('dart:ffi', 'NativeFunction'),
-        ffiNativeNameField =
-            index.getField('dart:ffi', 'FfiNative', 'nativeName'),
-        ffiNativeIsLeafField =
-            index.getField('dart:ffi', 'FfiNative', 'isLeaf'),
-        resolverField = index.getTopLevelField('dart:ffi', '_ffi_resolver'),
-        asFunctionProcedure = index.getProcedure(
-            'dart:ffi', 'NativeFunctionPointer', 'asFunction'),
-        fromAddressInternal =
-            index.getTopLevelProcedure('dart:ffi', '_fromAddress') {}
-
-  @override
-  TreeNode visitLibrary(Library node) {
-    assert(currentLibrary == null);
-    currentLibrary = node;
-    currentLibraryIndex = referenceFromIndex?.lookupLibrary(node);
-    final result = super.visitLibrary(node);
-    currentLibrary = null;
-    return result;
-  }
-
-  InstanceConstant? _tryGetFfiNativeAnnotation(Member node) {
-    for (final Expression annotation in node.annotations) {
-      if (annotation is ConstantExpression) {
-        if (annotation.constant is InstanceConstant) {
-          final instConst = annotation.constant as InstanceConstant;
-          if (instConst.classNode == ffiNativeClass) {
-            return instConst;
-          }
-        }
-      }
-    }
-    return null;
-  }
-
-  // Transform:
-  //   @FfiNative<Double Function(Double)>('Math_sqrt', isLeaf:true)
-  //   external double _square_root(double x);
-  //
-  // Into:
-  //   final _@FfiNative__square_root =
-  //       Pointer<NativeFunction<Double Function(Double)>>
-  //           .fromAddress(_ffi_resolver('dart:math', 'Math_sqrt'))
-  //           .asFunction<double Function(double)>(isLeaf:true);
-  //   double _square_root(double x) => _@FfiNative__square_root(x);
-  Statement transformFfiNative(
-      Procedure node, InstanceConstant annotationConst) {
-    assert(currentLibrary != null);
-    final params = node.function.positionalParameters;
-    final functionName = annotationConst
-        .fieldValues[ffiNativeNameField.fieldReference] as StringConstant;
-    final isLeaf = annotationConst
-        .fieldValues[ffiNativeIsLeafField.fieldReference] as BoolConstant;
-
-    // double Function(double)
-    final DartType dartType =
-        node.function.computeThisFunctionType(Nullability.nonNullable);
-    // Double Function(Double)
-    final nativeType = annotationConst.typeArguments[0] as FunctionType;
-    // InterfaceType(NativeFunction<Double Function(Double)>*)
-    final DartType nativeInterfaceType =
-        InterfaceType(nativeFunctionClass, Nullability.legacy, [nativeType]);
-
-    // Derive number of arguments from the native function signature.
-    final args_n = nativeType.positionalParameters.length;
-
-    // TODO(dartbug.com/31579): Add `..fileOffset`s once we can handle these in
-    // patch files.
-
-    // _ffi_resolver('dart:math', 'Math_sqrt', 1)
-    final resolverInvocation = FunctionInvocation(
-        FunctionAccessKind.FunctionType,
-        StaticGet(resolverField),
-        Arguments([
-          ConstantExpression(
-              StringConstant(currentLibrary!.importUri.toString())),
-          ConstantExpression(functionName),
-          ConstantExpression(IntConstant(args_n)),
-        ]),
-        functionType: resolverField.type as FunctionType);
-
-    // _fromAddress<NativeFunction<Double Function(Double)>>(...)
-    final fromAddressInvocation = StaticInvocation(fromAddressInternal,
-        Arguments([resolverInvocation], types: [nativeInterfaceType]));
-
-    // NativeFunctionPointer.asFunction
-    //     <Double Function(Double), double Function(double)>(..., isLeaf:true)
-    final asFunctionInvocation = StaticInvocation(
-        asFunctionProcedure,
-        Arguments([fromAddressInvocation],
-            types: [nativeType, dartType],
-            named: [NamedExpression("isLeaf", BoolLiteral(isLeaf.value))]));
-
-    // final _@FfiNative__square_root = ...
-    final fieldName = Name('_@FfiNative_${node.name.text}', currentLibrary);
-    final funcPtrField = Field.immutable(fieldName,
-        type: dartType,
-        initializer: asFunctionInvocation,
-        isStatic: true,
-        isFinal: true,
-        fileUri: currentLibrary!.fileUri,
-        getterReference: currentLibraryIndex?.lookupGetterReference(fieldName))
-      ..fileOffset = node.fileOffset;
-    // Add field to the parent the FfiNative function belongs to.
-    final parent = node.parent;
-    if (parent is Class) {
-      parent.addField(funcPtrField);
-    } else if (parent is Library) {
-      parent.addField(funcPtrField);
-    } else {
-      throw 'Unexpected parent of @FfiNative function. '
-          'Expected Class or Library, but found ${parent}.';
-    }
-
-    // _@FfiNative__square_root(x)
-    final callFuncPtrInvocation = FunctionInvocation(
-        FunctionAccessKind.FunctionType,
-        StaticGet(funcPtrField),
-        Arguments(params.map<Expression>((p) => VariableGet(p)).toList()),
-        functionType: dartType as FunctionType);
-
-    return ReturnStatement(callFuncPtrInvocation);
-  }
-
-  @override
-  visitProcedure(Procedure node) {
-    // Only transform functions that are external and have FfiNative annotation:
-    //   @FfiNative<Double Function(Double)>('Math_sqrt')
-    //   external double _square_root(double x);
-    if (!node.isExternal) {
-      return node;
-    }
-    InstanceConstant? ffiNativeAnnotation = _tryGetFfiNativeAnnotation(node);
-    if (ffiNativeAnnotation == null) {
-      return node;
-    }
-
-    if (!node.isStatic) {
-      diagnosticReporter.report(messageFfiNativeAnnotationMustAnnotateStatic,
-          node.fileOffset, 1, node.location!.file);
-    }
-
-    node.isExternal = false;
-    node.function.body = transformFfiNative(node, ffiNativeAnnotation)
-      ..parent = node.function;
-
-    return node;
-  }
-}
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index 625616f..61870d6 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -104,6 +104,9 @@
 
   _Invocation(this.selector, this.args);
 
+  /// Initialize invocation before it is cached and processed.
+  void init() {}
+
   Type process(TypeFlowAnalysis typeFlowAnalysis);
 
   /// Returns result of this invocation if its available without
@@ -186,21 +189,29 @@
 
 class _DirectInvocation extends _Invocation {
   _DirectInvocation(DirectSelector selector, Args<Type> args)
-      : super(selector, args) {
+      : super(selector, args);
+
+  @override
+  void init() {
     // We don't emit [TypeCheck] statements for bounds checks of type
     // parameters, so if there are any type parameters, we must assume
     // they could fail bounds checks.
     //
     // TODO(sjindel): Use [TypeCheck] to avoid bounds checks.
-    final function = selector.member.function;
+    final function = selector.member!.function;
     if (function != null) {
-      typeChecksNeeded =
-          function.typeParameters.any((t) => t.isCovariantByClass);
+      for (TypeParameter tp in function.typeParameters) {
+        if (tp.isCovariantByClass) {
+          typeChecksNeeded = true;
+        }
+      }
     } else {
       Field field = selector.member as Field;
       if (selector.callKind == CallKind.PropertySet) {
         // TODO(dartbug.com/40615): Use TFA results to improve this criterion.
-        typeChecksNeeded = field.isCovariantByClass;
+        if (field.isCovariantByClass) {
+          typeChecksNeeded = true;
+        }
       }
     }
   }
@@ -550,8 +561,7 @@
       TypeFlowAnalysis typeFlowAnalysis) {
     final TFClass cls = receiver.cls;
 
-    Member? target =
-        (cls as _TFClassImpl).getDispatchTarget(selector, typeFlowAnalysis);
+    Member? target = (cls as _TFClassImpl).getDispatchTarget(selector);
 
     if (target != null) {
       if (kPrintTrace) {
@@ -792,6 +802,7 @@
               _typeFlowAnalysis.summaryCollector.rawArguments(selector);
           sa.approximation =
               approximation = _DispatchableInvocation(selector, rawArgs);
+          approximation.init();
           Statistics.approximateInvocationsCreated++;
         }
         Statistics.approximateInvocationsUsed++;
@@ -803,6 +814,7 @@
           max(Statistics.maxInvocationsCachedPerSelector, sa.count);
     }
 
+    invocation.init();
     bool added = _invocations.add(invocation);
     assert(added);
     ++Statistics.invocationsAddedToCache;
@@ -948,9 +960,13 @@
   /// exceeds this constant, then WideConeType approximation is used.
   static const int maxAllocatedTypesInSetSpecializations = 128;
 
+  final _TFClassImpl? superclass;
   final Set<_TFClassImpl> supertypes; // List of super-types including this.
   final Set<_TFClassImpl> _allocatedSubtypes = new Set<_TFClassImpl>();
-  final Map<Selector, Member> _dispatchTargets = <Selector, Member>{};
+  late final Map<Name, Member> _dispatchTargetsSetters =
+      _initDispatchTargets(true);
+  late final Map<Name, Member> _dispatchTargetsNonSetters =
+      _initDispatchTargets(false);
   final _DependencyTracker dependencyTracker = new _DependencyTracker();
 
   /// Flag indicating if this class has a noSuchMethod() method not inherited
@@ -958,7 +974,7 @@
   /// Lazy initialized by ClassHierarchyCache.hasNonTrivialNoSuchMethod().
   bool? hasNonTrivialNoSuchMethod;
 
-  _TFClassImpl(int id, Class classNode, this.supertypes)
+  _TFClassImpl(int id, Class classNode, this.superclass, this.supertypes)
       : super(id, classNode) {
     supertypes.add(this);
   }
@@ -1001,19 +1017,37 @@
     _specializedConeType = null; // Reset cached specialization.
   }
 
-  Member? getDispatchTarget(
-      Selector selector, TypeFlowAnalysis typeFlowAnalysis) {
-    Member? target = _dispatchTargets[selector];
-    if (target == null) {
-      target = typeFlowAnalysis.hierarchyCache.hierarchy.getDispatchTarget(
-          classNode, selector.name,
-          setter: selector.isSetter);
-      target ??= _DispatchableInvocation.kNoSuchMethodMarker;
-      _dispatchTargets[selector] = target;
+  Map<Name, Member> _initDispatchTargets(bool setters) {
+    Map<Name, Member> targets;
+    final superclass = this.superclass;
+    if (superclass != null) {
+      targets = Map.from(setters
+          ? superclass._dispatchTargetsSetters
+          : superclass._dispatchTargetsNonSetters);
+    } else {
+      targets = {};
     }
-    return identical(target, _DispatchableInvocation.kNoSuchMethodMarker)
-        ? null
-        : target;
+    for (Field f in classNode.fields) {
+      if (!f.isStatic && !f.isAbstract) {
+        if (!setters || f.hasSetter) {
+          targets[f.name] = f;
+        }
+      }
+    }
+    for (Procedure p in classNode.procedures) {
+      if (!p.isStatic && !p.isAbstract) {
+        if (p.isSetter == setters) {
+          targets[p.name] = p;
+        }
+      }
+    }
+    return targets;
+  }
+
+  Member? getDispatchTarget(Selector selector) {
+    return (selector.isSetter
+        ? _dispatchTargetsSetters
+        : _dispatchTargetsNonSetters)[selector.name];
   }
 
   String dump() => "$this {supers: $supertypes}";
@@ -1127,7 +1161,10 @@
     for (var sup in c.supers) {
       supertypes.addAll(getTFClass(sup.classNode).supertypes);
     }
-    return new _TFClassImpl(++_classIdCounter, c, supertypes);
+    Class? superclassNode = c.superclass;
+    _TFClassImpl? superclass =
+        superclassNode != null ? getTFClass(superclassNode) : null;
+    return new _TFClassImpl(++_classIdCounter, c, superclass, supertypes);
   }
 
   ConcreteType addAllocatedClass(Class cl) {
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 952eefe..a72ad85 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -1669,23 +1669,35 @@
 
   @override
   TypeExpr visitEqualsCall(EqualsCall node) {
-    final left = _visit(node.left);
-    final right = _visit(node.right);
+    _addUse(_visit(node.left));
+    _addUse(_visit(node.right));
     final target = node.interfaceTarget;
+    // 'operator==' is a very popular method which can be called
+    // with a huge number of combinations of argument types.
+    // These invocations can be sensitive to changes in the set of allocated
+    // classes, causing a large number of invalidated invocations.
+    // In order to speed up the analysis, arguments of 'operator=='
+    // are approximated eagerly to static types during summary construction.
     return _makeCall(
         node,
         (node.left is ThisExpression)
             ? new VirtualSelector(target)
             : new InterfaceSelector(target),
-        Args<TypeExpr>([left, right]));
+        Args<TypeExpr>([_staticType(node.left), _staticType(node.right)]));
   }
 
   @override
   TypeExpr visitEqualsNull(EqualsNull node) {
     final arg = _visit(node.expression);
     _makeNarrowNotNull(node, arg);
+    // 'operator==' is a very popular method which can be called
+    // with a huge number of combinations of argument types.
+    // These invocations can be sensitive to changes in the set of allocated
+    // classes, causing a large number of invalidated invocations.
+    // In order to speed up the analysis, arguments of 'operator=='
+    // are approximated eagerly to static types during summary construction.
     _makeCall(node, DirectSelector(_environment.coreTypes.objectEquals),
-        Args<TypeExpr>([arg, _nullType]));
+        Args<TypeExpr>([_staticType(node.expression), _nullType]));
     return _boolType;
   }
 
@@ -1838,6 +1850,18 @@
         passTypeArguments: node.target.isFactory);
     final target = node.target;
     assert((target is! Field) && !target.isGetter && !target.isSetter);
+    if (target == _environment.coreTypes.identicalProcedure) {
+      assert(args.values.length == 2 && args.names.isEmpty);
+      // 'identical' is a very popular method which can be called
+      // with a huge number of combinations of argument types.
+      // Those invocations can be sensitive to changes in the set of allocated
+      // classes, causing a large number of invalidated invocations.
+      // In order to speed up the analysis, invocations of 'identical'
+      // are approximated eagerly during summary construction.
+      _makeCall(node, new DirectSelector(target),
+          Args<TypeExpr>([Type.nullableAny(), Type.nullableAny()]));
+      return _boolType;
+    }
     TypeExpr result = _makeCall(node, new DirectSelector(target), args);
     if (target == unsafeCast) {
       // Async transformation inserts unsafeCasts to make sure
diff --git a/pkg/vm/lib/transformations/type_flow/types.dart b/pkg/vm/lib/transformations/type_flow/types.dart
index 3ed7b9b..6db75a7 100644
--- a/pkg/vm/lib/transformations/type_flow/types.dart
+++ b/pkg/vm/lib/transformations/type_flow/types.dart
@@ -166,7 +166,7 @@
   factory Type.nullable(Type t) => new NullableType(t);
 
   /// Create a type representing arbitrary nullable object (`dynamic`).
-  factory Type.nullableAny() => new NullableType(const AnyType());
+  factory Type.nullableAny() => const NullableType(const AnyType());
 
   Class? getConcreteClass(TypeHierarchy typeHierarchy) => null;
 
@@ -253,9 +253,7 @@
 class NullableType extends Type {
   final Type baseType;
 
-  NullableType(this.baseType) {
-    assert(baseType is! NullableType);
-  }
+  const NullableType(this.baseType) : assert(baseType is! NullableType);
 
   @override
   int get hashCode => (baseType.hashCode + 31) & kHashMask;
diff --git a/pkg/vm/pubspec.yaml b/pkg/vm/pubspec.yaml
index 20b2cd7..3ae9534 100644
--- a/pkg/vm/pubspec.yaml
+++ b/pkg/vm/pubspec.yaml
@@ -7,7 +7,7 @@
   sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
-  args: ^1.4.4
+  args: ^2.0.0
   build_integration:
     path: ../build_integration
   crypto: any
@@ -25,7 +25,3 @@
   path: any
   test: any
   web_socket_channel: any
-
-dependency_overrides:
-  front_end:
-    path: ../front_end
diff --git a/pkg/vm/test/transformations/ffi_test.dart b/pkg/vm/test/transformations/ffi_test.dart
new file mode 100644
index 0000000..cda6097
--- /dev/null
+++ b/pkg/vm/test/transformations/ffi_test.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2021, 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:io';
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:kernel/verifier.dart';
+
+import 'package:test/test.dart';
+
+import 'package:vm/transformations/ffi/native.dart' show transformLibraries;
+
+import '../common_test_utils.dart';
+
+final String pkgVmDir = Platform.script.resolve('../..').toFilePath();
+
+class TestDiagnosticReporter extends DiagnosticReporter<Object, Object> {
+  @override
+  void report(Object message, int charOffset, int length, Uri? fileUri,
+      {List<Object>? context}) {/* nop */}
+}
+
+runTestCase(Uri source) async {
+  final target = TestingVmTarget(TargetFlags());
+
+  Component component = await compileTestCaseToKernelProgram(source,
+      target: target, experimentalFlags: ['generic-metadata']);
+
+  final coreTypes = CoreTypes(component);
+
+  transformLibraries(
+      component,
+      coreTypes,
+      ClassHierarchy(component, coreTypes),
+      component.libraries,
+      TestDiagnosticReporter(),
+      /*referenceFromIndex=*/ null);
+
+  verifyComponent(component);
+
+  final actual = kernelLibraryToString(component.mainMethod!.enclosingLibrary);
+
+  compareResultWithExpectationsFile(source, actual);
+}
+
+main() {
+  group('ffi-transformations', () {
+    final testCasesDir = Directory(pkgVmDir + '/testcases/transformations/ffi');
+
+    for (var entry in testCasesDir
+        .listSync(recursive: true, followLinks: false)
+        .reversed) {
+      if (entry.path.endsWith(".dart")) {
+        test(entry.path, () => runTestCase(entry.uri));
+      }
+    }
+  });
+}
diff --git a/pkg/vm/testcases/transformations/ffi/ffinative.dart b/pkg/vm/testcases/transformations/ffi/ffinative.dart
new file mode 100644
index 0000000..d2d8c18
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/ffinative.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2021, 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.
+
+// Tests for @FfiNative related transformations.
+
+// @dart=2.14
+
+import 'dart:ffi';
+import 'dart:nativewrappers';
+
+@FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr')
+external int returnIntPtr(int x);
+
+@FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr', isLeaf: true)
+external int returnIntPtrLeaf(int x);
+
+class Classy {
+  @FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr')
+  external static int returnIntPtrStatic(int x);
+}
+
+class NativeClassy extends NativeFieldWrapperClass1 {
+  @FfiNative<Void Function(Pointer<Void>, IntPtr)>('doesntmatter')
+  external void goodHasReceiverPointer(int v);
+
+  @FfiNative<Void Function(Handle, IntPtr)>('doesntmatter')
+  external void goodHasReceiverHandle(int v);
+
+  @FfiNative<Void Function(Handle, Pointer<Void>)>('doesntmatter')
+  external void goodHasReceiverHandleAndPtr(NativeClassy v);
+
+  @FfiNative<Void Function(Handle, Handle)>('doesntmatter')
+  external void goodHasReceiverHandleAndHandle(NativeClassy v);
+
+  @FfiNative<Void Function(Pointer<Void>, Handle)>('doesntmatter')
+  external void goodHasReceiverPtrAndHandle(NativeClassy v);
+
+  @FfiNative<Handle Function(Pointer<Void>, Bool)>('doesntmatter')
+  external String? meh(bool blah);
+
+  @FfiNative<Bool Function(Pointer<Void>)>('doesntmatter')
+  external bool blah();
+}
+
+void main() {
+  returnIntPtr(13);
+  returnIntPtrLeaf(37);
+  Classy.returnIntPtrStatic(0xDE);
+  NativeClassy().goodHasReceiverPointer(0xAF);
+  NativeClassy().goodHasReceiverHandle(0xAF);
+  NativeClassy().goodHasReceiverHandleAndPtr(NativeClassy());
+  NativeClassy().goodHasReceiverHandleAndHandle(NativeClassy());
+  NativeClassy().goodHasReceiverPtrAndHandle(NativeClassy());
+  NativeClassy().meh(true);
+  NativeClassy().blah();
+}
diff --git a/pkg/vm/testcases/transformations/ffi/ffinative.dart.expect b/pkg/vm/testcases/transformations/ffi/ffinative.dart.expect
new file mode 100644
index 0000000..b33994e
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/ffinative.dart.expect
@@ -0,0 +1,93 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "dart:nativewrappers" as nat;
+import "dart:_internal" as _in;
+
+import "dart:ffi";
+import "dart:nativewrappers";
+
+class Classy extends core::Object {
+  static final field (core::int) → core::int _returnIntPtrStatic$FfiNative$Ptr = ffi::_asFunctionInternal<(core::int) → core::int, (ffi::IntPtr*) →* ffi::IntPtr*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::IntPtr*) →* ffi::IntPtr*>*>(ffi::_ffi_resolver(#C1, #C2, #C3){(core::Object, core::Object, core::int) → core::int}), false)/*isLegacy*/;
+  synthetic constructor •() → self::Classy
+    : super core::Object::•()
+    ;
+  static method returnIntPtrStatic(core::int x) → core::int
+    return self::Classy::_returnIntPtrStatic$FfiNative$Ptr(x){(core::int) → core::int};
+}
+class NativeClassy extends nat::NativeFieldWrapperClass1 {
+  static final field (ffi::Pointer<ffi::Void>, core::int) → void _goodHasReceiverPointer$FfiNative$Ptr = ffi::_asFunctionInternal<(ffi::Pointer<ffi::Void>, core::int) → void, (ffi::Pointer<ffi::Void*>*, ffi::IntPtr*) →* ffi::Void*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::Pointer<ffi::Void*>*, ffi::IntPtr*) →* ffi::Void*>*>(ffi::_ffi_resolver(#C1, #C4, #C5){(core::Object, core::Object, core::int) → core::int}), false)/*isLegacy*/;
+  static final field (self::NativeClassy, core::int) → void _goodHasReceiverHandle$FfiNative$Ptr = ffi::_asFunctionInternal<(self::NativeClassy, core::int) → void, (ffi::Handle*, ffi::IntPtr*) →* ffi::Void*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::Handle*, ffi::IntPtr*) →* ffi::Void*>*>(ffi::_ffi_resolver(#C1, #C4, #C5){(core::Object, core::Object, core::int) → core::int}), false)/*isLegacy*/;
+  static final field (self::NativeClassy, ffi::Pointer<ffi::Void>) → void _goodHasReceiverHandleAndPtr$FfiNative$Ptr = ffi::_asFunctionInternal<(self::NativeClassy, ffi::Pointer<ffi::Void>) → void, (ffi::Handle*, ffi::Pointer<ffi::Void*>*) →* ffi::Void*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::Handle*, ffi::Pointer<ffi::Void*>*) →* ffi::Void*>*>(ffi::_ffi_resolver(#C1, #C4, #C5){(core::Object, core::Object, core::int) → core::int}), false)/*isLegacy*/;
+  static final field (self::NativeClassy, self::NativeClassy) → void _goodHasReceiverHandleAndHandle$FfiNative$Ptr = ffi::_asFunctionInternal<(self::NativeClassy, self::NativeClassy) → void, (ffi::Handle*, ffi::Handle*) →* ffi::Void*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::Handle*, ffi::Handle*) →* ffi::Void*>*>(ffi::_ffi_resolver(#C1, #C4, #C5){(core::Object, core::Object, core::int) → core::int}), false)/*isLegacy*/;
+  static final field (ffi::Pointer<ffi::Void>, self::NativeClassy) → void _goodHasReceiverPtrAndHandle$FfiNative$Ptr = ffi::_asFunctionInternal<(ffi::Pointer<ffi::Void>, self::NativeClassy) → void, (ffi::Pointer<ffi::Void*>*, ffi::Handle*) →* ffi::Void*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::Pointer<ffi::Void*>*, ffi::Handle*) →* ffi::Void*>*>(ffi::_ffi_resolver(#C1, #C4, #C5){(core::Object, core::Object, core::int) → core::int}), false)/*isLegacy*/;
+  static final field (ffi::Pointer<ffi::Void>, core::bool) → core::Object? _meh$FfiNative$Ptr = ffi::_asFunctionInternal<(ffi::Pointer<ffi::Void>, core::bool) → core::Object?, (ffi::Pointer<ffi::Void*>*, ffi::Bool*) →* ffi::Handle*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::Pointer<ffi::Void*>*, ffi::Bool*) →* ffi::Handle*>*>(ffi::_ffi_resolver(#C1, #C4, #C5){(core::Object, core::Object, core::int) → core::int}), false)/*isLegacy*/;
+  static final field (ffi::Pointer<ffi::Void>) → core::bool _blah$FfiNative$Ptr = ffi::_asFunctionInternal<(ffi::Pointer<ffi::Void>) → core::bool, (ffi::Pointer<ffi::Void*>*) →* ffi::Bool*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::Pointer<ffi::Void*>*) →* ffi::Bool*>*>(ffi::_ffi_resolver(#C1, #C4, #C3){(core::Object, core::Object, core::int) → core::int}), false)/*isLegacy*/;
+  synthetic constructor •() → self::NativeClassy
+    : super nat::NativeFieldWrapperClass1::•()
+    ;
+  method goodHasReceiverPointer(core::int v) → void
+    return block {
+      final nat::NativeFieldWrapperClass1 #t1 = this;
+      final core::int #t2 = v;
+      final void #t3 = self::NativeClassy::_goodHasReceiverPointer$FfiNative$Ptr(ffi::_fromAddress<ffi::Void>(nat::_getNativeField(#t1)), #t2){(ffi::Pointer<ffi::Void>, core::int) → void};
+      _in::reachabilityFence(#t1);
+    } =>#t3;
+  method goodHasReceiverHandle(core::int v) → void
+    return self::NativeClassy::_goodHasReceiverHandle$FfiNative$Ptr(this, v){(self::NativeClassy, core::int) → void};
+  method goodHasReceiverHandleAndPtr(self::NativeClassy v) → void
+    return block {
+      final self::NativeClassy #t4 = this;
+      final nat::NativeFieldWrapperClass1 #t5 = v;
+      final void #t6 = self::NativeClassy::_goodHasReceiverHandleAndPtr$FfiNative$Ptr(#t4, ffi::_fromAddress<ffi::Void>(nat::_getNativeField(#t5))){(self::NativeClassy, ffi::Pointer<ffi::Void>) → void};
+      _in::reachabilityFence(#t5);
+    } =>#t6;
+  method goodHasReceiverHandleAndHandle(self::NativeClassy v) → void
+    return self::NativeClassy::_goodHasReceiverHandleAndHandle$FfiNative$Ptr(this, v){(self::NativeClassy, self::NativeClassy) → void};
+  method goodHasReceiverPtrAndHandle(self::NativeClassy v) → void
+    return block {
+      final nat::NativeFieldWrapperClass1 #t7 = this;
+      final self::NativeClassy #t8 = v;
+      final void #t9 = self::NativeClassy::_goodHasReceiverPtrAndHandle$FfiNative$Ptr(ffi::_fromAddress<ffi::Void>(nat::_getNativeField(#t7)), #t8){(ffi::Pointer<ffi::Void>, self::NativeClassy) → void};
+      _in::reachabilityFence(#t7);
+    } =>#t9;
+  method meh(core::bool blah) → core::String?
+    return block {
+      final nat::NativeFieldWrapperClass1 #t10 = this;
+      final core::bool #t11 = blah;
+      final core::String? #t12 = _in::unsafeCast<core::String?>(self::NativeClassy::_meh$FfiNative$Ptr(ffi::_fromAddress<ffi::Void>(nat::_getNativeField(#t10)), #t11){(ffi::Pointer<ffi::Void>, core::bool) → core::Object?});
+      _in::reachabilityFence(#t10);
+    } =>#t12;
+  method blah() → core::bool
+    return block {
+      final nat::NativeFieldWrapperClass1 #t13 = this;
+      final core::bool #t14 = self::NativeClassy::_blah$FfiNative$Ptr(ffi::_fromAddress<ffi::Void>(nat::_getNativeField(#t13))){(ffi::Pointer<ffi::Void>) → core::bool};
+      _in::reachabilityFence(#t13);
+    } =>#t14;
+}
+static final field (core::int) → core::int _returnIntPtr$FfiNative$Ptr = ffi::_asFunctionInternal<(core::int) → core::int, (ffi::IntPtr*) →* ffi::IntPtr*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::IntPtr*) →* ffi::IntPtr*>*>(ffi::_ffi_resolver(#C1, #C2, #C3){(core::Object, core::Object, core::int) → core::int}), false)/*isLegacy*/;
+static final field (core::int) → core::int _returnIntPtrLeaf$FfiNative$Ptr = ffi::_asFunctionInternal<(core::int) → core::int, (ffi::IntPtr*) →* ffi::IntPtr*>(ffi::_fromAddress<ffi::NativeFunction<(ffi::IntPtr*) →* ffi::IntPtr*>*>(ffi::_ffi_resolver(#C1, #C2, #C3){(core::Object, core::Object, core::int) → core::int}), true)/*isLegacy*/;
+static method returnIntPtr(core::int x) → core::int
+  return self::_returnIntPtr$FfiNative$Ptr(x){(core::int) → core::int};
+static method returnIntPtrLeaf(core::int x) → core::int
+  return self::_returnIntPtrLeaf$FfiNative$Ptr(x){(core::int) → core::int};
+static method main() → void {
+  self::returnIntPtr(13);
+  self::returnIntPtrLeaf(37);
+  self::Classy::returnIntPtrStatic(222);
+  new self::NativeClassy::•().{self::NativeClassy::goodHasReceiverPointer}(175){(core::int) → void};
+  new self::NativeClassy::•().{self::NativeClassy::goodHasReceiverHandle}(175){(core::int) → void};
+  new self::NativeClassy::•().{self::NativeClassy::goodHasReceiverHandleAndPtr}(new self::NativeClassy::•()){(self::NativeClassy) → void};
+  new self::NativeClassy::•().{self::NativeClassy::goodHasReceiverHandleAndHandle}(new self::NativeClassy::•()){(self::NativeClassy) → void};
+  new self::NativeClassy::•().{self::NativeClassy::goodHasReceiverPtrAndHandle}(new self::NativeClassy::•()){(self::NativeClassy) → void};
+  new self::NativeClassy::•().{self::NativeClassy::meh}(true){(core::bool) → core::String?};
+  new self::NativeClassy::•().{self::NativeClassy::blah}(){() → core::bool};
+}
+constants  {
+  #C1 = "#lib"
+  #C2 = "ReturnIntPtr"
+  #C3 = 1
+  #C4 = "doesntmatter"
+  #C5 = 2
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
index 23f3ef4..4f6ab2a 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
@@ -112,8 +112,8 @@
 %x = _Parameter #0 [_T (dart.core::int)+?]
 %y = _Parameter #1 [_T (dart.core::String)+?]
 %z = _Parameter #2 [_T ANY?]
-t3* = _Call [dart.core::num.==] (%x, _T (dart.core::_Smi, 5))
-t4* = _Call [dart.core::String.==] (%y, _T (dart.core::_OneByteString, "hi"))
+t3* = _Call [dart.core::num.==] (_T (dart.core::int)+?, _T (dart.core::int)+?)
+t4* = _Call [dart.core::String.==] (_T (dart.core::String)+?, _T (dart.core::String)+?)
 t5 = _Call direct [dart.core::Object.==] (%z, _T {}?)
 t6 = _Narrow (%z to _T ANY)
 t7 = _Call direct [#lib::foo] (_T (dart.core::_Smi, 5))
@@ -127,7 +127,7 @@
 RESULT: _T {}?
 ------------ if9 ------------
 %x = _Parameter #0 [_T (#lib::TestEnum)+?]
-t1* = _Call [dart.core::Object.==] (%x, _T (#lib::TestEnum, const #lib::TestEnum{dart.core::_Enum.index: 0, dart.core::_Enum._name: "v1"}))
+t1* = _Call [dart.core::Object.==] (_T (#lib::TestEnum)+?, _T (#lib::TestEnum)+?)
 t2 = _Call direct [#lib::foo] (_T (#lib::TestEnum, const #lib::TestEnum{dart.core::_Enum.index: 0, dart.core::_Enum._name: "v1"}))
 RESULT: _T {}?
 ------------ conditional1 ------------
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
index b559883..e5f2883 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
@@ -14,7 +14,7 @@
 a1_0 = _Join [dart.core::Object] (t3, %a1)
 t5 = _Call direct [#lib::bar] (a1_0, _T (dart.core::_Smi, 42))
 t6* = _Call direct [#lib::B.] (_T (#lib::B))
-t7* = _Call [dart.core::Object.==] (t6, %a2)
+t7* = _Call [dart.core::Object.==] (_T (dart.core::Object)+?, _T (dart.core::Object)+?)
 t8 = _Join [dart.core::Object?] (t6, %a2)
 t9 = _Narrow (t8 to _T (dart.core::Object)+?)
 RESULT: t9
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
index 9ff69a2..1878d03 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
@@ -7,7 +7,7 @@
   if(_in::unsafeCast<core::bool>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool] n{dynamic}.<(2)))
     return false;
   for (core::int i = 2; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i){(core::num) → core::int}.{core::num::<=}(_in::unsafeCast<core::num>(n)){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num) → core::int}) {
-    if([@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.%] [@vm.inferred-type.metadata=int] n{dynamic}.%(i) =={core::Object::==}{(core::Object) → core::bool} 0)
+    if([@vm.inferred-type.metadata=dart.core::bool?] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.%] [@vm.inferred-type.metadata=int] n{dynamic}.%(i) =={core::Object::==}{(core::Object) → core::bool} 0)
       return false;
   }
   return true;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
index 8ddda11..463adf9 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
@@ -22,6 +22,6 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3261,getterSelectorId:3262]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3252,getterSelectorId:3253]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect
index 4771de1..b822802 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect
@@ -100,7 +100,7 @@
   self::ByteStream x = new self::ByteStream::•(new self::_ControllerStream::•());
   self::Stream y = [@vm.direct-call.metadata=#lib::ByteStream.super_stream] [@vm.inferred-type.metadata=!] x.{self::ByteStream::super_stream}{self::Stream};
   self::Stream z = [@vm.direct-call.metadata=#lib::StreamView._stream] [@vm.inferred-type.metadata=!] x.{self::StreamView::_stream}{self::Stream};
-  if([@vm.direct-call.metadata=dart.core::Object.==] [@vm.inferred-type.metadata=dart.core::bool (skip check) (receiver not int)] y =={core::Object::==}{(core::Object) → core::bool} z) {
+  if([@vm.inferred-type.metadata=dart.core::bool (skip check) (receiver not int)] y =={core::Object::==}{(core::Object) → core::bool} z) {
     [@vm.direct-call.metadata=#lib::ByteStream.super_foobar2] [@vm.inferred-type.metadata=!? (skip check)] x.{self::ByteStream::super_foobar2}(){((dynamic) →? void) → dynamic};
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
index 73b0430..423420c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
@@ -29,7 +29,7 @@
   core::print("List<int> buffer = <int>[");
   for (core::int i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=dart.typed_data::_TypedListBase.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}{core::int}){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5){(core::num) → core::int}) {
     final core::String numbers = [@vm.direct-call.metadata=dart.typed_data::_TypedListBase.join] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=dart.typed_data::__Uint8List&_TypedList&_IntListMixin&_TypedIntListMixin.sublist] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] buffer.{typ::Uint8List::sublist}(i, [@vm.inferred-type.metadata=int] math::min<core::int>([@vm.direct-call.metadata=dart.typed_data::_TypedListBase.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}{core::int}, [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5){(core::num) → core::int})){(core::int, [core::int?]) → typ::Uint8List}.{core::Iterable::join}(", "){([core::String]) → core::String};
-    core::print("  ${numbers},${[@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i =={core::num::==}{(core::Object) → core::bool} 0 ?{core::String} " //" : ""}");
+    core::print("  ${numbers},${[@vm.inferred-type.metadata=dart.core::bool] i =={core::num::==}{(core::Object) → core::bool} 0 ?{core::String} " //" : ""}");
   }
   core::print("];");
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
index 64e1bc1..3a69351 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
@@ -51,6 +51,6 @@
   synthetic constructor •() → self::ConstClass
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3265,getterSelectorId:3266]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3256,getterSelectorId:3257]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect
index 3310998..4203e7a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect
@@ -61,7 +61,7 @@
   });
   self::E e = new self::F::•();
   let final core::int #t3 = [@vm.direct-call.metadata=#lib::F.bar] [@vm.inferred-type.metadata=dart.core::_Smi (value: 42)] e.{self::E::bar}{core::int} in exp::Expect::equals();
-  exp::Expect::isTrue(![@vm.inferred-type.metadata=dart.core::bool] core::identical(#C2, #C4));
+  exp::Expect::isTrue(!core::identical(#C2, #C4));
   [@vm.direct-call.metadata=#lib::I.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::I::•().{self::I::foo}(){() → dynamic};
   5;
 }
diff --git a/pkg/vm_service/example/vm_service_assert.dart b/pkg/vm_service/example/vm_service_assert.dart
index 0af318b..f30e794 100644
--- a/pkg/vm_service/example/vm_service_assert.dart
+++ b/pkg/vm_service/example/vm_service_assert.dart
@@ -30,6 +30,10 @@
   return obj;
 }
 
+List<dynamic> assertListOfDynamic(List<dynamic> list) {
+  return list;
+}
+
 List<int> assertListOfInt(List<int> list) {
   for (int elem in list) {
     assertInt(elem);
@@ -1146,6 +1150,12 @@
   return obj;
 }
 
+vms.UriList assertUriList(vms.UriList obj) {
+  assertNotNull(obj);
+  assertListOfDynamic(obj.uris!);
+  return obj;
+}
+
 vms.Version assertVersion(vms.Version obj) {
   assertNotNull(obj);
   assertInt(obj.major!);
diff --git a/pkg/vm_service/java/.gitignore b/pkg/vm_service/java/.gitignore
index cc8a3e7..817e983 100644
--- a/pkg/vm_service/java/.gitignore
+++ b/pkg/vm_service/java/.gitignore
@@ -43,6 +43,7 @@
 src/org/dartlang/vm/service/consumer/TimelineConsumer.java
 src/org/dartlang/vm/service/consumer/TimelineFlagsConsumer.java
 src/org/dartlang/vm/service/consumer/TimestampConsumer.java
+src/org/dartlang/vm/service/consumer/UriListConsumer.java
 src/org/dartlang/vm/service/consumer/VMConsumer.java
 src/org/dartlang/vm/service/consumer/VersionConsumer.java
 src/org/dartlang/vm/service/element/AllocationProfile.java
@@ -131,6 +132,7 @@
 src/org/dartlang/vm/service/element/TypeArgumentsRef.java
 src/org/dartlang/vm/service/element/TypeParameters.java
 src/org/dartlang/vm/service/element/UnresolvedSourceLocation.java
+src/org/dartlang/vm/service/element/UriList.java
 src/org/dartlang/vm/service/element/VM.java
 src/org/dartlang/vm/service/element/VMRef.java
 src/org/dartlang/vm/service/element/Version.java
diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/ResolvePackageUriConsumer.java b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/ResolvePackageUriConsumer.java
new file mode 100644
index 0000000..cb35d14
--- /dev/null
+++ b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/ResolvePackageUriConsumer.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2015, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.dartlang.vm.service.consumer;
+
+// This is a generated file.
+
+import org.dartlang.vm.service.element.ResolvedPackageUri;
+import org.dartlang.vm.service.element.Sentinel;
+
+@SuppressWarnings({"WeakerAccess", "unused"})
+public interface ResolvePackageUriConsumer extends Consumer {
+    void received(ResolvedPackageUri response);
+
+    void received(Sentinel response);
+}
diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/element/RPCError.java b/pkg/vm_service/java/src/org/dartlang/vm/service/element/RPCError.java
index 91d21d7..c8b2a58 100644
--- a/pkg/vm_service/java/src/org/dartlang/vm/service/element/RPCError.java
+++ b/pkg/vm_service/java/src/org/dartlang/vm/service/element/RPCError.java
@@ -38,7 +38,7 @@
  * }
  * </pre>
  * <p>
- * In addition the the [error codes](http://www.jsonrpc.org/specification#error_object) specified in
+ * In addition the [error codes](http://www.jsonrpc.org/specification#error_object) specified in
  * the JSON-RPC spec, we use the following application specific error codes:
  *
  * <pre>
diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/element/ResolvedPackageUri.java b/pkg/vm_service/java/src/org/dartlang/vm/service/element/ResolvedPackageUri.java
new file mode 100644
index 0000000..376b4f0
--- /dev/null
+++ b/pkg/vm_service/java/src/org/dartlang/vm/service/element/ResolvedPackageUri.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2015, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.dartlang.vm.service.element;
+
+// This is a generated file.
+
+import com.google.gson.JsonObject;
+
+@SuppressWarnings({"WeakerAccess", "unused"})
+public class ResolvedPackageUri extends Response {
+    public ResolvedPackageUri(JsonObject json) {
+        super(json);
+    }
+
+    /**
+   * The file URI for a given package.
+   */
+    public String getResolvedUri() {
+        return getAsString("resolvedUri");
+    }
+}
diff --git a/pkg/vm_service/java/version.properties b/pkg/vm_service/java/version.properties
index 383674e..8ae6998 100644
--- a/pkg/vm_service/java/version.properties
+++ b/pkg/vm_service/java/version.properties
@@ -1 +1 @@
-version=3.51
+version=3.52
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index 277b463..51958bd 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -26,7 +26,7 @@
         HeapSnapshotObjectNoData,
         HeapSnapshotObjectNullData;
 
-const String vmServiceVersion = '3.51.0';
+const String vmServiceVersion = '3.52.0';
 
 /// @optional
 const String optional = 'optional';
@@ -186,6 +186,7 @@
   'TypeArguments': TypeArguments.parse,
   'TypeParameters': TypeParameters.parse,
   'UnresolvedSourceLocation': UnresolvedSourceLocation.parse,
+  'UriList': UriList.parse,
   'Version': Version.parse,
   '@VM': VMRef.parse,
   'VM': VM.parse,
@@ -226,6 +227,8 @@
   'getVMTimelineMicros': const ['Timestamp'],
   'pause': const ['Success'],
   'kill': const ['Success'],
+  'lookupResolvedPackageUris': const ['UriList'],
+  'lookupPackageUris': const ['UriList'],
   'registerService': const ['Success'],
   'reloadSources': const ['ReloadReport'],
   'removeBreakpoint': const ['Success'],
@@ -920,6 +923,37 @@
   /// returned.
   Future<Success> kill(String isolateId);
 
+  /// The `lookupResolvedPackageUris` RPC is used to convert a list of URIs to
+  /// their resolved (or absolute) paths. For example, URIs passed to this RPC
+  /// are mapped in the following ways:
+  ///
+  /// - `dart:io` -&gt; `org-dartlang-sdk:///sdk/lib/io/io.dart`
+  /// - `package:test/test.dart` -&gt;
+  /// `file:///$PACKAGE_INSTALLATION_DIR/lib/test.dart`
+  /// - `file:///foo/bar/bazz.dart` -&gt; `file:///foo/bar/bazz.dart`
+  ///
+  /// If a URI is not known, the corresponding entry in the [UriList] response
+  /// will be `null`.
+  ///
+  /// See [UriList].
+  Future<UriList> lookupResolvedPackageUris(
+      String isolateId, List<String> uris);
+
+  /// The `lookupPackageUris` RPC is used to convert a list of URIs to their
+  /// unresolved paths. For example, URIs passed to this RPC are mapped in the
+  /// following ways:
+  ///
+  /// - `org-dartlang-sdk:///sdk/lib/io/io.dart` -&gt; `dart:io`
+  /// - `file:///$PACKAGE_INSTALLATION_DIR/lib/test.dart` -&gt;
+  /// `package:test/test.dart`
+  /// - `file:///foo/bar/bazz.dart` -&gt; `file:///foo/bar/bazz.dart`
+  ///
+  /// If a URI is not known, the corresponding entry in the [UriList] response
+  /// will be `null`.
+  ///
+  /// See [UriList].
+  Future<UriList> lookupPackageUris(String isolateId, List<String> uris);
+
   /// Registers a service that can be invoked by other VM service clients, where
   /// `service` is the name of the service to advertise and `alias` is an
   /// alternative name for the registered service.
@@ -1468,6 +1502,18 @@
             params!['isolateId'],
           );
           break;
+        case 'lookupResolvedPackageUris':
+          response = await _serviceImplementation.lookupResolvedPackageUris(
+            params!['isolateId'],
+            List<String>.from(params['uris'] ?? []),
+          );
+          break;
+        case 'lookupPackageUris':
+          response = await _serviceImplementation.lookupPackageUris(
+            params!['isolateId'],
+            List<String>.from(params['uris'] ?? []),
+          );
+          break;
         case 'reloadSources':
           response = await _serviceImplementation.reloadSources(
             params!['isolateId'],
@@ -1979,6 +2025,16 @@
       _call('kill', {'isolateId': isolateId});
 
   @override
+  Future<UriList> lookupResolvedPackageUris(
+          String isolateId, List<String> uris) =>
+      _call(
+          'lookupResolvedPackageUris', {'isolateId': isolateId, 'uris': uris});
+
+  @override
+  Future<UriList> lookupPackageUris(String isolateId, List<String> uris) =>
+      _call('lookupPackageUris', {'isolateId': isolateId, 'uris': uris});
+
+  @override
   Future<Success> registerService(String service, String alias) =>
       _call('registerService', {'service': service, 'alias': alias});
 
@@ -6112,9 +6168,8 @@
   /// example, memory associated with Dart objects through APIs such as
   /// Dart_NewFinalizableHandle, Dart_NewWeakPersistentHandle and
   /// Dart_NewExternalTypedData.  This usage is only as accurate as the values
-  /// supplied to these APIs from the VM embedder or native extensions. This
-  /// external memory applies GC pressure, but is separate from heapUsage and
-  /// heapCapacity.
+  /// supplied to these APIs from the VM embedder. This external memory applies
+  /// GC pressure, but is separate from heapUsage and heapCapacity.
   int? externalUsage;
 
   /// The total capacity of the heap in bytes. This is the amount of memory used
@@ -7876,6 +7931,38 @@
   String toString() => '[UnresolvedSourceLocation]';
 }
 
+class UriList extends Response {
+  static UriList? parse(Map<String, dynamic>? json) =>
+      json == null ? null : UriList._fromJson(json);
+
+  /// A list of URIs.
+  List<dynamic>? uris;
+
+  UriList({
+    required this.uris,
+  });
+
+  UriList._fromJson(Map<String, dynamic> json) : super._fromJson(json) {
+    uris = List<dynamic>.from(
+        createServiceObject(json['uris'], const ['dynamic']) as List? ?? []);
+  }
+
+  @override
+  String get type => 'UriList';
+
+  @override
+  Map<String, dynamic> toJson() {
+    final json = <String, dynamic>{};
+    json['type'] = type;
+    json.addAll({
+      'uris': uris?.map((f) => f.toJson()).toList(),
+    });
+    return json;
+  }
+
+  String toString() => '[UriList uris: ${uris}]';
+}
+
 /// See [Versioning].
 class Version extends Response {
   static Version? parse(Map<String, dynamic>? json) =>
diff --git a/pkg/vm_service/test/uri_mappings_lookup_test.dart b/pkg/vm_service/test/uri_mappings_lookup_test.dart
new file mode 100644
index 0000000..0155833
--- /dev/null
+++ b/pkg/vm_service/test/uri_mappings_lookup_test.dart
@@ -0,0 +1,56 @@
+// Copyright (c) 2021, 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:io';
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/test_helper.dart';
+
+final tests = <IsolateTest>[
+  (VmService service, IsolateRef isolate) async {
+    final isolateId = isolate.id!;
+    final unresolvedUris = <String>[
+      'dart:io', // dart:io -> org-dartlang-sdk:///sdk/lib/io/io.dart
+      Platform.script.toString(), // file:///abc.dart -> file:///abc.dart
+      'package:test/test.dart', // package:test/test.dart -> file:///some_dir/test/lib/test.dart
+      'package:does_not_exist/does_not_exist.dart', // invalid URI -> null
+    ];
+
+    var result = await service.lookupResolvedPackageUris(
+      isolateId,
+      unresolvedUris,
+    );
+    expect(result.uris, isNotNull);
+    var uris = result.uris!;
+    expect(uris.length, 4);
+    expect(uris[0], 'org-dartlang-sdk:///sdk/lib/io/io.dart');
+    expect(uris[1], Platform.script.toString());
+    expect(uris[2], startsWith('file:///'));
+    expect(uris[2], endsWith('third_party/pkg/test/pkgs/test/lib/test.dart'));
+    expect(uris[3], isNull);
+
+    result = await service.lookupPackageUris(
+      isolateId,
+      [
+        ...uris.sublist(0, 3),
+        'does_not_exist.dart',
+      ],
+    );
+    expect(result.uris, isNotNull);
+    uris = result.uris!;
+    expect(uris.length, 4);
+    expect(uris[0], unresolvedUris[0]);
+    expect(uris[1], unresolvedUris[1]);
+    expect(uris[2], unresolvedUris[2]);
+    expect(uris[3], isNull);
+  },
+];
+
+void main(args) => runIsolateTests(
+      args,
+      tests,
+      'uri_mappings_lookup_test.dart',
+    );
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 167ad39..ea7d40d 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -203,6 +203,7 @@
       frameworks = [
         "CoreFoundation.framework",
         "CoreServices.framework",
+        "Foundation.framework",
       ]
     }
 
@@ -336,6 +337,12 @@
       "io_natives.cc",
       "io_natives.h",
     ]
+    if (is_ios || is_mac) {
+      sources += [
+        "platform_macos_cocoa.h",
+        "platform_macos_cocoa.mm",
+      ]
+    }
 
     include_dirs = [
       "..",
@@ -412,6 +419,7 @@
       frameworks = [
         "CoreFoundation.framework",
         "Security.framework",
+        "Foundation.framework",
       ]
 
       if (is_mac) {
@@ -437,6 +445,12 @@
                  "io_natives.cc",
                  "io_natives.h",
                ] + extra_sources
+    if (is_ios || is_mac) {
+      sources += [
+        "platform_macos_cocoa.h",
+        "platform_macos_cocoa.mm",
+      ]
+    }
 
     if (is_linux || is_win || is_fuchsia) {
       if (dart_use_fallback_root_certificates) {
@@ -721,18 +735,6 @@
     } else {
       configs += [ "..:dart_maybe_product_config" ]
     }
-    if (target_os != current_os && target_os == "fuchsia") {
-      # We already have these in the standalone build, but Fuchsia doesn't
-      # have them. They are needed for running Fuchsia binaries built for the
-      # host.
-      if (is_linux) {
-        # TODO(liama): Commenting this line out because it causes problems for
-        # --os=fuchsia. If no one complains, remove it.
-        # configs += [ "../../build/config/gcc:executable_ldconfig" ]
-      } else if (is_mac) {
-        configs += [ "../../build/config/mac:mac_dynamic_flags" ]
-      }
-    }
 
     deps = [
       ":crashpad",
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index 560c7cd..565753d 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -358,7 +358,7 @@
   return str;
 }
 
-Dart_Handle DartUtils::MakeUint8Array(const uint8_t* buffer, intptr_t len) {
+Dart_Handle DartUtils::MakeUint8Array(const void* buffer, intptr_t len) {
   Dart_Handle array = Dart_NewTypedData(Dart_TypedData_kUint8, len);
   RETURN_IF_ERROR(array);
   {
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index 6fc2d3f..bbe0a1f 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -161,7 +161,7 @@
   static void CloseFile(void* stream);
   static bool EntropySource(uint8_t* buffer, intptr_t length);
   static Dart_Handle ReadStringFromFile(const char* filename);
-  static Dart_Handle MakeUint8Array(const uint8_t* buffer, intptr_t length);
+  static Dart_Handle MakeUint8Array(const void* buffer, intptr_t length);
   static Dart_Handle PrepareForScriptLoading(bool is_service_isolate,
                                              bool trace_loading);
   static Dart_Handle SetupPackageConfig(const char* packages_file);
diff --git a/runtime/bin/dfe.cc b/runtime/bin/dfe.cc
index b6c27fa..701967b 100644
--- a/runtime/bin/dfe.cc
+++ b/runtime/bin/dfe.cc
@@ -231,9 +231,11 @@
 
 void DFE::ReadScript(const char* script_uri,
                      uint8_t** kernel_buffer,
-                     intptr_t* kernel_buffer_size) const {
+                     intptr_t* kernel_buffer_size,
+                     bool decode_uri) const {
   int64_t start = Dart_TimelineGetMicros();
-  if (!TryReadKernelFile(script_uri, kernel_buffer, kernel_buffer_size)) {
+  if (!TryReadKernelFile(script_uri, kernel_buffer, kernel_buffer_size,
+                         decode_uri)) {
     return;
   }
   if (!Dart_IsKernel(*kernel_buffer, *kernel_buffer_size)) {
@@ -274,9 +276,12 @@
 ///
 /// If successful, newly allocated buffer with file contents is returned in
 /// [buffer], file contents byte count - in [size].
-static bool TryReadFile(const char* script_uri, uint8_t** buffer,
-                        intptr_t* size) {
-  void* script_file = DartUtils::OpenFileUri(script_uri, false);
+static bool TryReadFile(const char* script_uri,
+                        uint8_t** buffer,
+                        intptr_t* size,
+                        bool decode_uri = true) {
+  void* script_file = decode_uri ? DartUtils::OpenFileUri(script_uri, false)
+                                 : DartUtils::OpenFile(script_uri, false);
   if (script_file == nullptr) {
     return false;
   }
@@ -417,12 +422,13 @@
 
 bool DFE::TryReadKernelFile(const char* script_uri,
                             uint8_t** kernel_ir,
-                            intptr_t* kernel_ir_size) {
+                            intptr_t* kernel_ir_size,
+                            bool decode_uri) {
   *kernel_ir = nullptr;
   *kernel_ir_size = -1;
 
   uint8_t* buffer;
-  if (!TryReadFile(script_uri, &buffer, kernel_ir_size)) {
+  if (!TryReadFile(script_uri, &buffer, kernel_ir_size, decode_uri)) {
     return false;
   }
 
diff --git a/runtime/bin/dfe.h b/runtime/bin/dfe.h
index 649cc32..038bca7 100644
--- a/runtime/bin/dfe.h
+++ b/runtime/bin/dfe.h
@@ -92,7 +92,8 @@
   // valid kernel file, false otherwise.
   void ReadScript(const char* script_uri,
                   uint8_t** kernel_buffer,
-                  intptr_t* kernel_buffer_size) const;
+                  intptr_t* kernel_buffer_size,
+                  bool decode_uri = true) const;
 
   bool KernelServiceDillAvailable() const;
 
@@ -103,7 +104,8 @@
   // was returned.
   static bool TryReadKernelFile(const char* script_uri,
                                 uint8_t** kernel_buffer,
-                                intptr_t* kernel_buffer_size);
+                                intptr_t* kernel_buffer_size,
+                                bool decode_uri = true);
 
   // We distinguish between "intent to use Dart frontend" vs "can actually
   // use Dart frontend". The method UseDartFrontend tells us about the
diff --git a/runtime/bin/ffi_test/ffi_test_functions_generated.cc b/runtime/bin/ffi_test/ffi_test_functions_generated.cc
index 246c329..dc17bb0 100644
--- a/runtime/bin/ffi_test/ffi_test_functions_generated.cc
+++ b/runtime/bin/ffi_test/ffi_test_functions_generated.cc
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 
 #include <stddef.h>
 #include <stdlib.h>
@@ -34,6 +35,10 @@
   CHECK(((EXPECTED * 0.99) <= (ACTUAL) && (EXPECTED * 1.01) >= (ACTUAL)) ||    \
         ((EXPECTED * 0.99) >= (ACTUAL) && (EXPECTED * 1.01) <= (ACTUAL)))
 
+struct Struct1ByteBool {
+  bool a0;
+};
+
 struct Struct1ByteInt {
   int8_t a0;
 };
@@ -112,6 +117,19 @@
   int8_t a1;
 };
 
+struct Struct10BytesHomogeneousBool {
+  bool a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+};
+
 struct Struct12BytesHomogeneousFloat {
   float a0;
   float a1;
@@ -418,6 +436,10 @@
   uint8_t a0[8];
 };
 
+struct Struct10BytesInlineArrayBool {
+  bool a0[10];
+};
+
 struct StructInlineArrayIrregular {
   Struct3BytesInt2ByteAligned a0[2];
   uint8_t a1;
@@ -4745,6 +4767,134 @@
 }
 
 // Used for testing structs and unions by value.
+// Passing bools and a struct with bools.
+// Exhausts the registers to test bools and the bool struct alignment on the
+// stack.
+DART_EXPORT int32_t PassUint8Boolx9Struct10BytesHomogeneousBoolBool(
+    uint8_t a0,
+    bool a1,
+    bool a2,
+    bool a3,
+    bool a4,
+    bool a5,
+    bool a6,
+    bool a7,
+    bool a8,
+    bool a9,
+    Struct10BytesHomogeneousBool a10,
+    bool a11) {
+  std::cout << "PassUint8Boolx9Struct10BytesHomogeneousBoolBool"
+            << "(" << static_cast<int>(a0) << ", " << a1 << ", " << a2 << ", "
+            << a3 << ", " << a4 << ", " << a5 << ", " << a6 << ", " << a7
+            << ", " << a8 << ", " << a9 << ", (" << a10.a0 << ", " << a10.a1
+            << ", " << a10.a2 << ", " << a10.a3 << ", " << a10.a4 << ", "
+            << a10.a5 << ", " << a10.a6 << ", " << a10.a7 << ", " << a10.a8
+            << ", " << a10.a9 << "), " << a11 << ")"
+            << "\n";
+
+  int32_t result = 0;
+
+  result += a0;
+  result += a1 ? 1 : 0;
+  result += a2 ? 1 : 0;
+  result += a3 ? 1 : 0;
+  result += a4 ? 1 : 0;
+  result += a5 ? 1 : 0;
+  result += a6 ? 1 : 0;
+  result += a7 ? 1 : 0;
+  result += a8 ? 1 : 0;
+  result += a9 ? 1 : 0;
+  result += a10.a0 ? 1 : 0;
+  result += a10.a1 ? 1 : 0;
+  result += a10.a2 ? 1 : 0;
+  result += a10.a3 ? 1 : 0;
+  result += a10.a4 ? 1 : 0;
+  result += a10.a5 ? 1 : 0;
+  result += a10.a6 ? 1 : 0;
+  result += a10.a7 ? 1 : 0;
+  result += a10.a8 ? 1 : 0;
+  result += a10.a9 ? 1 : 0;
+  result += a11 ? 1 : 0;
+
+  std::cout << "result = " << result << "\n";
+
+  return result;
+}
+
+// Used for testing structs and unions by value.
+// Passing bools and a struct with bools.
+// Exhausts the registers to test bools and the bool struct alignment on the
+// stack.
+DART_EXPORT int32_t PassUint8Boolx9Struct10BytesInlineArrayBoolBool(
+    uint8_t a0,
+    bool a1,
+    bool a2,
+    bool a3,
+    bool a4,
+    bool a5,
+    bool a6,
+    bool a7,
+    bool a8,
+    bool a9,
+    Struct10BytesInlineArrayBool a10,
+    bool a11) {
+  std::cout << "PassUint8Boolx9Struct10BytesInlineArrayBoolBool"
+            << "(" << static_cast<int>(a0) << ", " << a1 << ", " << a2 << ", "
+            << a3 << ", " << a4 << ", " << a5 << ", " << a6 << ", " << a7
+            << ", " << a8 << ", " << a9 << ", ([" << a10.a0[0] << ", "
+            << a10.a0[1] << ", " << a10.a0[2] << ", " << a10.a0[3] << ", "
+            << a10.a0[4] << ", " << a10.a0[5] << ", " << a10.a0[6] << ", "
+            << a10.a0[7] << ", " << a10.a0[8] << ", " << a10.a0[9] << "]), "
+            << a11 << ")"
+            << "\n";
+
+  int32_t result = 0;
+
+  result += a0;
+  result += a1 ? 1 : 0;
+  result += a2 ? 1 : 0;
+  result += a3 ? 1 : 0;
+  result += a4 ? 1 : 0;
+  result += a5 ? 1 : 0;
+  result += a6 ? 1 : 0;
+  result += a7 ? 1 : 0;
+  result += a8 ? 1 : 0;
+  result += a9 ? 1 : 0;
+  result += a10.a0[0] ? 1 : 0;
+  result += a10.a0[1] ? 1 : 0;
+  result += a10.a0[2] ? 1 : 0;
+  result += a10.a0[3] ? 1 : 0;
+  result += a10.a0[4] ? 1 : 0;
+  result += a10.a0[5] ? 1 : 0;
+  result += a10.a0[6] ? 1 : 0;
+  result += a10.a0[7] ? 1 : 0;
+  result += a10.a0[8] ? 1 : 0;
+  result += a10.a0[9] ? 1 : 0;
+  result += a11 ? 1 : 0;
+
+  std::cout << "result = " << result << "\n";
+
+  return result;
+}
+
+// Used for testing structs and unions by value.
+// Returning a bool.
+DART_EXPORT bool PassUint8Struct1ByteBool(uint8_t a0, Struct1ByteBool a1) {
+  std::cout << "PassUint8Struct1ByteBool"
+            << "(" << static_cast<int>(a0) << ", (" << a1.a0 << "))"
+            << "\n";
+
+  uint64_t result = 0;
+
+  result += a0;
+  result += a1.a0 ? 1 : 0;
+
+  std::cout << "result = " << result << "\n";
+
+  return result % 2 != 0;
+}
+
+// Used for testing structs and unions by value.
 // Smallest struct with data.
 DART_EXPORT Struct1ByteInt ReturnStruct1ByteInt(int8_t a0) {
   std::cout << "ReturnStruct1ByteInt"
@@ -12260,6 +12410,215 @@
 }
 
 // Used for testing structs and unions by value.
+// Passing bools and a struct with bools.
+// Exhausts the registers to test bools and the bool struct alignment on the
+// stack.
+DART_EXPORT intptr_t TestPassUint8Boolx9Struct10BytesHomogeneousBoolBool(
+    // NOLINTNEXTLINE(whitespace/parens)
+    int32_t (*f)(uint8_t a0,
+                 bool a1,
+                 bool a2,
+                 bool a3,
+                 bool a4,
+                 bool a5,
+                 bool a6,
+                 bool a7,
+                 bool a8,
+                 bool a9,
+                 Struct10BytesHomogeneousBool a10,
+                 bool a11)) {
+  uint8_t a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  Struct10BytesHomogeneousBool a10 = {};
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0 = true;
+  a10.a1 = false;
+  a10.a2 = true;
+  a10.a3 = false;
+  a10.a4 = true;
+  a10.a5 = false;
+  a10.a6 = true;
+  a10.a7 = false;
+  a10.a8 = true;
+  a10.a9 = false;
+  a11 = true;
+
+  std::cout << "Calling TestPassUint8Boolx9Struct10BytesHomogeneousBoolBool("
+            << "(" << static_cast<int>(a0) << ", " << a1 << ", " << a2 << ", "
+            << a3 << ", " << a4 << ", " << a5 << ", " << a6 << ", " << a7
+            << ", " << a8 << ", " << a9 << ", (" << a10.a0 << ", " << a10.a1
+            << ", " << a10.a2 << ", " << a10.a3 << ", " << a10.a4 << ", "
+            << a10.a5 << ", " << a10.a6 << ", " << a10.a7 << ", " << a10.a8
+            << ", " << a10.a9 << "), " << a11 << ")"
+            << ")\n";
+
+  int32_t result = f(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  std::cout << "result = " << result << "\n";
+
+  CHECK_EQ(11, result);
+
+  // Pass argument that will make the Dart callback throw.
+  a0 = 42;
+
+  result = f(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  CHECK_EQ(0, result);
+
+  // Pass argument that will make the Dart callback return null.
+  a0 = 84;
+
+  result = f(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  CHECK_EQ(0, result);
+
+  return 0;
+}
+
+// Used for testing structs and unions by value.
+// Passing bools and a struct with bools.
+// Exhausts the registers to test bools and the bool struct alignment on the
+// stack.
+DART_EXPORT intptr_t TestPassUint8Boolx9Struct10BytesInlineArrayBoolBool(
+    // NOLINTNEXTLINE(whitespace/parens)
+    int32_t (*f)(uint8_t a0,
+                 bool a1,
+                 bool a2,
+                 bool a3,
+                 bool a4,
+                 bool a5,
+                 bool a6,
+                 bool a7,
+                 bool a8,
+                 bool a9,
+                 Struct10BytesInlineArrayBool a10,
+                 bool a11)) {
+  uint8_t a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  Struct10BytesInlineArrayBool a10 = {};
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0[0] = true;
+  a10.a0[1] = false;
+  a10.a0[2] = true;
+  a10.a0[3] = false;
+  a10.a0[4] = true;
+  a10.a0[5] = false;
+  a10.a0[6] = true;
+  a10.a0[7] = false;
+  a10.a0[8] = true;
+  a10.a0[9] = false;
+  a11 = true;
+
+  std::cout << "Calling TestPassUint8Boolx9Struct10BytesInlineArrayBoolBool("
+            << "(" << static_cast<int>(a0) << ", " << a1 << ", " << a2 << ", "
+            << a3 << ", " << a4 << ", " << a5 << ", " << a6 << ", " << a7
+            << ", " << a8 << ", " << a9 << ", ([" << a10.a0[0] << ", "
+            << a10.a0[1] << ", " << a10.a0[2] << ", " << a10.a0[3] << ", "
+            << a10.a0[4] << ", " << a10.a0[5] << ", " << a10.a0[6] << ", "
+            << a10.a0[7] << ", " << a10.a0[8] << ", " << a10.a0[9] << "]), "
+            << a11 << ")"
+            << ")\n";
+
+  int32_t result = f(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  std::cout << "result = " << result << "\n";
+
+  CHECK_EQ(11, result);
+
+  // Pass argument that will make the Dart callback throw.
+  a0 = 42;
+
+  result = f(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  CHECK_EQ(0, result);
+
+  // Pass argument that will make the Dart callback return null.
+  a0 = 84;
+
+  result = f(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  CHECK_EQ(0, result);
+
+  return 0;
+}
+
+// Used for testing structs and unions by value.
+// Returning a bool.
+DART_EXPORT intptr_t TestPassUint8Struct1ByteBool(
+    // NOLINTNEXTLINE(whitespace/parens)
+    bool (*f)(uint8_t a0, Struct1ByteBool a1)) {
+  uint8_t a0;
+  Struct1ByteBool a1 = {};
+
+  a0 = 1;
+  a1.a0 = false;
+
+  std::cout << "Calling TestPassUint8Struct1ByteBool("
+            << "(" << static_cast<int>(a0) << ", (" << a1.a0 << "))"
+            << ")\n";
+
+  bool result = f(a0, a1);
+
+  std::cout << "result = " << result << "\n";
+
+  CHECK_APPROX(1, result);
+
+  // Pass argument that will make the Dart callback throw.
+  a0 = 42;
+
+  result = f(a0, a1);
+
+  CHECK_APPROX(0.0, result);
+
+  // Pass argument that will make the Dart callback return null.
+  a0 = 84;
+
+  result = f(a0, a1);
+
+  CHECK_APPROX(0.0, result);
+
+  return 0;
+}
+
+// Used for testing structs and unions by value.
 // Smallest struct with data.
 DART_EXPORT intptr_t TestReturnStruct1ByteInt(
     // NOLINTNEXTLINE(whitespace/parens)
diff --git a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
index a705710..cf10a4e 100644
--- a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
+++ b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
@@ -1133,6 +1133,44 @@
                             DummyResourceFinalizer);
 }
 
+intptr_t AddPtrAndInt(void* self, intptr_t x) {
+  return reinterpret_cast<intptr_t>(self) + x;
+}
+
+intptr_t AddHandleFieldAndInt(Dart_Handle self, intptr_t x) {
+  intptr_t field = 0;
+  ENSURE(!Dart_IsError(Dart_GetNativeInstanceField(self, 0, &field)));
+  return field + x;
+}
+
+intptr_t AddPtrAndPtr(void* self, void* other) {
+  return reinterpret_cast<intptr_t>(self) + reinterpret_cast<intptr_t>(other);
+}
+
+intptr_t AddHandleFieldAndPtr(Dart_Handle self, void* other) {
+  intptr_t field = 0;
+  ENSURE(!Dart_IsError(Dart_GetNativeInstanceField(self, 0, &field)));
+  return field + reinterpret_cast<intptr_t>(other);
+}
+
+intptr_t AddHandleFieldAndHandleField(Dart_Handle self, Dart_Handle other) {
+  intptr_t field1 = 0;
+  ENSURE(!Dart_IsError(Dart_GetNativeInstanceField(self, 0, &field1)));
+  intptr_t field2 = 0;
+  ENSURE(!Dart_IsError(Dart_GetNativeInstanceField(other, 0, &field2)));
+  return field1 + field2;
+}
+
+intptr_t AddPtrAndHandleField(void* self, Dart_Handle other) {
+  intptr_t field = 0;
+  ENSURE(!Dart_IsError(Dart_GetNativeInstanceField(other, 0, &field)));
+  return reinterpret_cast<intptr_t>(self) + field;
+}
+
+intptr_t ReturnIntPtrMethod(Dart_Handle self, intptr_t value) {
+  return value;
+}
+
 static void* FfiNativeResolver(const char* name, uintptr_t args_n) {
   if (strcmp(name, "Dart_SetNativeInstanceField") == 0 && args_n == 3) {
     return reinterpret_cast<void*>(Dart_SetNativeInstanceField);
@@ -1167,6 +1205,27 @@
   if (strcmp(name, "SetResourceFinalizer") == 0 && args_n == 2) {
     return reinterpret_cast<void*>(SetResourceFinalizer);
   }
+  if (strcmp(name, "AddPtrAndInt") == 0 && args_n == 2) {
+    return reinterpret_cast<void*>(AddPtrAndInt);
+  }
+  if (strcmp(name, "AddHandleFieldAndInt") == 0 && args_n == 2) {
+    return reinterpret_cast<void*>(AddHandleFieldAndInt);
+  }
+  if (strcmp(name, "AddPtrAndPtr") == 0 && args_n == 2) {
+    return reinterpret_cast<void*>(AddPtrAndPtr);
+  }
+  if (strcmp(name, "AddHandleFieldAndPtr") == 0 && args_n == 2) {
+    return reinterpret_cast<void*>(AddHandleFieldAndPtr);
+  }
+  if (strcmp(name, "AddHandleFieldAndHandleField") == 0 && args_n == 2) {
+    return reinterpret_cast<void*>(AddHandleFieldAndHandleField);
+  }
+  if (strcmp(name, "AddPtrAndHandleField") == 0 && args_n == 2) {
+    return reinterpret_cast<void*>(AddPtrAndHandleField);
+  }
+  if (strcmp(name, "ReturnIntPtrMethod") == 0 && args_n == 2) {
+    return reinterpret_cast<void*>(ReturnIntPtrMethod);
+  }
   // This should be unreachable in tests.
   ENSURE(false);
 }
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index fad12cf..d7eda14 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -68,6 +68,10 @@
   Dart_SetIntegerReturnValue(args, file_pointer);
 }
 
+void FUNCTION_NAME(File_GetFD)(Dart_NativeArguments args) {
+  Dart_SetIntegerReturnValue(args, GetFile(args)->GetFD());
+}
+
 static void ReleaseFile(void* isolate_callback_data, void* peer) {
   File* file = reinterpret_cast<File*>(peer);
   file->Release();
@@ -135,7 +139,7 @@
 #if !defined(PRODUCT)
   if (!IsFile(dart_this)) {
     Dart_PropagateError(DartUtils::NewInternalError(
-        "File_Close expects the reciever to be a _RandomAccessFileOpsImpl."));
+        "File_Close expects the receiver to be a _RandomAccessFileOpsImpl."));
   }
 #endif
   File* file;
diff --git a/runtime/bin/file.h b/runtime/bin/file.h
index edeb388..f2d45e9 100644
--- a/runtime/bin/file.h
+++ b/runtime/bin/file.h
@@ -221,7 +221,8 @@
   // (stdin, stout or stderr).
   static File* OpenStdio(int fd);
 
-#if defined(DART_HOST_OS_FUCHSIA) || defined(DART_HOST_OS_LINUX)
+#if defined(DART_HOST_OS_FUCHSIA) || defined(DART_HOST_OS_LINUX) ||            \
+    defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_MACOS)
   static File* OpenFD(int fd);
 #endif
 
diff --git a/runtime/bin/file_android.cc b/runtime/bin/file_android.cc
index b1e9bb0..d766192 100644
--- a/runtime/bin/file_android.cc
+++ b/runtime/bin/file_android.cc
@@ -210,6 +210,10 @@
   return NULL;
 }
 
+File* File::OpenFD(int fd) {
+  return new File(new FileHandle(fd));
+}
+
 File* File::Open(Namespace* namespc, const char* name, FileOpenMode mode) {
   NamespaceScope ns(namespc, name);
   // Report errors for non-regular files.
diff --git a/runtime/bin/file_macos.cc b/runtime/bin/file_macos.cc
index 8fa3cd7..894884a 100644
--- a/runtime/bin/file_macos.cc
+++ b/runtime/bin/file_macos.cc
@@ -254,6 +254,10 @@
   return NULL;
 }
 
+File* File::OpenFD(int fd) {
+  return new File(new FileHandle(fd));
+}
+
 File* File::Open(Namespace* namespc, const char* name, FileOpenMode mode) {
   // Report errors for non-regular files.
   struct stat st;
diff --git a/runtime/bin/file_win.cc b/runtime/bin/file_win.cc
index b7f5dbe..bb24d00 100644
--- a/runtime/bin/file_win.cc
+++ b/runtime/bin/file_win.cc
@@ -935,18 +935,29 @@
 bool File::SetLastAccessed(Namespace* namespc,
                            const char* name,
                            int64_t millis) {
-  // First get the current times.
   struct __stat64 st;
   Utf8ToWideScope system_name(PrefixLongFilePath(name));
-  if (!StatHelper(system_name.wide(), &st)) {
+  if (!StatHelper(system_name.wide(), &st)) {  // Checks that it is a file.
     return false;
   }
 
-  // Set the new time:
-  struct __utimbuf64 times;
-  times.actime = millis / kMillisecondsPerSecond;
-  times.modtime = st.st_mtime;
-  return _wutime64(system_name.wide(), &times) == 0;
+  // _utime and related functions set the access and modification times of the
+  // affected file. Even if the specified modification time is not changed
+  // from the current value, _utime will trigger a file modification event
+  // (e.g. ReadDirectoryChangesW will report the file as modified).
+  //
+  // So set the file access time directly using SetFileTime.
+  FILETIME at = GetFiletimeFromMillis(millis);
+  HANDLE file_handle =
+      CreateFileW(system_name.wide(), FILE_WRITE_ATTRIBUTES,
+                  FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                  nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr);
+  if (file_handle == INVALID_HANDLE_VALUE) {
+    return false;
+  }
+  bool result = SetFileTime(file_handle, nullptr, &at, nullptr);
+  CloseHandle(file_handle);
+  return result;
 }
 
 bool File::SetLastModified(Namespace* namespc,
diff --git a/runtime/bin/io_impl_sources.gni b/runtime/bin/io_impl_sources.gni
index 8c368bb..33090f3 100644
--- a/runtime/bin/io_impl_sources.gni
+++ b/runtime/bin/io_impl_sources.gni
@@ -109,7 +109,4 @@
   "typed_data_utils.h",
 ]
 
-io_impl_tests = [
-  "platform_macos_test.cc",
-  "secure_socket_utils_test.cc",
-]
+io_impl_tests = [ "secure_socket_utils_test.cc" ]
diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc
index 83503b5..efa37c8 100644
--- a/runtime/bin/io_natives.cc
+++ b/runtime/bin/io_natives.cc
@@ -45,6 +45,7 @@
   V(File_Exists, 2)                                                            \
   V(File_Flush, 1)                                                             \
   V(File_GetPointer, 1)                                                        \
+  V(File_GetFD, 1)                                                             \
   V(File_GetStdioHandleType, 1)                                                \
   V(File_GetType, 3)                                                           \
   V(File_LastAccessed, 2)                                                      \
@@ -81,6 +82,10 @@
   V(Filter_CreateZLibInflate, 4)                                               \
   V(Filter_Process, 4)                                                         \
   V(Filter_Processed, 3)                                                       \
+  V(ResourceHandleImpl_toFile, 1)                                              \
+  V(ResourceHandleImpl_toSocket, 1)                                            \
+  V(ResourceHandleImpl_toRawSocket, 1)                                         \
+  V(ResourceHandleImpl_toRawDatagramSocket, 1)                                 \
   V(InternetAddress_Parse, 1)                                                  \
   V(InternetAddress_ParseScopedLinkLocalAddress, 1)                            \
   V(InternetAddress_RawAddrToString, 1)                                        \
@@ -147,6 +152,7 @@
   V(Socket_GetPort, 1)                                                         \
   V(Socket_GetRemotePeer, 1)                                                   \
   V(Socket_GetError, 1)                                                        \
+  V(Socket_GetFD, 1)                                                           \
   V(Socket_GetOption, 3)                                                       \
   V(Socket_GetRawOption, 4)                                                    \
   V(Socket_GetSocketId, 1)                                                     \
@@ -156,11 +162,15 @@
   V(Socket_LeaveMulticast, 4)                                                  \
   V(Socket_Read, 2)                                                            \
   V(Socket_RecvFrom, 1)                                                        \
+  V(Socket_ReceiveMessage, 2)                                                  \
+  V(Socket_SendMessage, 5)                                                     \
   V(Socket_SendTo, 6)                                                          \
   V(Socket_SetOption, 4)                                                       \
   V(Socket_SetRawOption, 4)                                                    \
   V(Socket_SetSocketId, 3)                                                     \
   V(Socket_WriteList, 4)                                                       \
+  V(SocketControlMessage_fromHandles, 2)                                       \
+  V(SocketControlMessageImpl_extractHandles, 1)                                \
   V(Stdin_ReadByte, 1)                                                         \
   V(Stdin_GetEchoMode, 1)                                                      \
   V(Stdin_SetEchoMode, 2)                                                      \
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 64f1715..4193965 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -431,8 +431,9 @@
   AppSnapshot* app_snapshot = NULL;
   // Kernel isolate uses an app snapshot or uses the dill file.
   if ((kernel_snapshot_uri != NULL) &&
-      (app_snapshot = Snapshot::TryReadAppSnapshot(kernel_snapshot_uri)) !=
-          NULL) {
+      (app_snapshot = Snapshot::TryReadAppSnapshot(
+           kernel_snapshot_uri, /*force_load_elf_from_memory=*/false,
+           /*decode_uri=*/false)) != nullptr) {
     const uint8_t* isolate_snapshot_data = NULL;
     const uint8_t* isolate_snapshot_instructions = NULL;
     const uint8_t* ignore_vm_snapshot_data;
@@ -603,8 +604,9 @@
   AppSnapshot* app_snapshot = nullptr;
   bool isolate_run_app_snapshot = true;
   if (dartdev_path.get() != nullptr &&
-      (app_snapshot = Snapshot::TryReadAppSnapshot(dartdev_path.get())) !=
-          nullptr) {
+      (app_snapshot = Snapshot::TryReadAppSnapshot(
+           dartdev_path.get(), /*force_load_elf_from_memory=*/false,
+           /*decode_uri=*/false)) != nullptr) {
     const uint8_t* isolate_snapshot_data = NULL;
     const uint8_t* isolate_snapshot_instructions = NULL;
     const uint8_t* ignore_vm_snapshot_data;
@@ -613,8 +615,8 @@
         &ignore_vm_snapshot_data, &ignore_vm_snapshot_instructions,
         &isolate_snapshot_data, &isolate_snapshot_instructions);
     isolate_group_data =
-        new IsolateGroupData(dartdev_path.get(), packages_config, app_snapshot,
-                             isolate_run_app_snapshot);
+        new IsolateGroupData(DART_DEV_ISOLATE_NAME, packages_config,
+                             app_snapshot, isolate_run_app_snapshot);
     isolate_data = new IsolateData(isolate_group_data);
     isolate = Dart_CreateIsolateGroup(
         DART_DEV_ISOLATE_NAME, DART_DEV_ISOLATE_NAME, isolate_snapshot_data,
@@ -642,7 +644,7 @@
       uint8_t* application_kernel_buffer = NULL;
       intptr_t application_kernel_buffer_size = 0;
       dfe.ReadScript(dartdev_path.get(), &application_kernel_buffer,
-                     &application_kernel_buffer_size);
+                     &application_kernel_buffer_size, /*decode_uri=*/false);
       isolate_group_data->SetKernelBufferNewlyOwned(
           application_kernel_buffer, application_kernel_buffer_size);
 
diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
index 26f40a4..0c22675 100644
--- a/runtime/bin/platform_macos.cc
+++ b/runtime/bin/platform_macos.cc
@@ -22,8 +22,11 @@
 #include <sys/utsname.h>   // NOLINT
 #include <unistd.h>        // NOLINT
 
+#include <string>
+
 #include "bin/console.h"
 #include "bin/file.h"
+#include "bin/platform_macos_cocoa.h"
 
 namespace dart {
 namespace bin {
@@ -113,89 +116,9 @@
 #endif
 }
 
-char* ExtractsOSVersionFromString(char* str) {
-  char* pos = strstr(str, "<key>ProductVersion</key>");
-  if (pos == NULL) {
-    return NULL;
-  }
-  pos = strstr(pos, "<string>");
-  if (pos == NULL) {
-    return NULL;
-  }
-  // Shift the index by the length of "<string>".
-  pos += 8;
-  char* end_pos = strstr(pos, "</string>");
-  if (end_pos == NULL) {
-    return NULL;
-  }
-
-  int length = end_pos - pos;
-  char* result =
-      reinterpret_cast<char*>(Dart_ScopeAllocate(length * sizeof(char)) + 1);
-  strncpy(result, pos, length);
-  result[length] = '\0';
-  return result;
-}
-
-static char* GetOSVersionFromPlist() {
-  const char* path = "/System/Library/CoreServices/SystemVersion.plist";
-  File* file = File::Open(NULL, path, File::kRead);
-  if (file == NULL) {
-    return NULL;
-  }
-  int length = file->Length();
-  if (length < 0) {
-    return NULL;
-  }
-  char* buffer =
-      reinterpret_cast<char*>(Dart_ScopeAllocate(length * sizeof(char) + 1));
-  int bytes = file->ReadFully(buffer, length);
-  buffer[length * sizeof(char)] = '\0';
-  file->Close();
-  file->Release();
-  if (bytes < 0) {
-    return NULL;
-  }
-  return ExtractsOSVersionFromString(buffer);
-}
-
 const char* Platform::OperatingSystemVersion() {
-  char str[64];
-  size_t size = sizeof(str);
-  // This is only available to some versions later than 10.13.*. If it failed,
-  // try to read from "SystemVersion.plist".
-  int res = sysctlbyname("kern.osproductversion", str, &size, NULL, 0);
-  if (res == 0) {
-    int len = snprintf(NULL, 0, "%s", str);
-    char* result_string = DartUtils::ScopedCString(len + 1);
-    strncpy(result_string, str, len);
-    result_string[len] = '\0';
-    return result_string;
-  }
-  char* result_string = GetOSVersionFromPlist();
-  if (result_string != NULL) {
-    return result_string;
-  }
-
-  struct utsname info;
-  int ret = uname(&info);
-  if (ret != 0) {
-    return NULL;
-  }
-  const char* kFormat = "%s %s %s";
-  int len =
-      snprintf(NULL, 0, kFormat, info.sysname, info.release, info.version);
-  if (len <= 0) {
-    return NULL;
-  }
-  char* result = DartUtils::ScopedCString(len + 1);
-  ASSERT(result != NULL);
-  len = snprintf(result, len + 1, kFormat, info.sysname, info.release,
-                 info.version);
-  if (len <= 0) {
-    return NULL;
-  }
-  return result;
+  std::string version(NSProcessInfoOperatingSystemVersionString());
+  return DartUtils::ScopedCopyCString(version.c_str());
 }
 
 const char* Platform::LibraryPrefix() {
diff --git a/runtime/bin/platform_macos_cocoa.h b/runtime/bin/platform_macos_cocoa.h
new file mode 100644
index 0000000..b166432
--- /dev/null
+++ b/runtime/bin/platform_macos_cocoa.h
@@ -0,0 +1,30 @@
+// Copyright (c) 2021, 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.
+
+#ifndef RUNTIME_BIN_PLATFORM_MACOS_COCOA_H_
+#define RUNTIME_BIN_PLATFORM_MACOS_COCOA_H_
+
+// platform_macos_cocoa[.h,.mm] defines a new compilation unit, written
+// in Objective-C++, that acts as a minimal bridge between platform_macos
+// and the Cocoa (https://en.wikipedia.org/wiki/Cocoa_(API)) API.
+
+#include "platform/globals.h"
+
+#if !defined(DART_HOST_OS_MACOS)
+#error Do not include platform_macos_cocoa.h on non-MacOS platforms.
+#endif
+
+#include <string>
+
+namespace dart {
+namespace bin {
+
+// Return the operating system version string.
+// See https://developer.apple.com/documentation/foundation/nsprocessinfo/1408730-operatingsystemversionstring.
+std::string NSProcessInfoOperatingSystemVersionString();
+
+}  // namespace bin
+}  // namespace dart
+
+#endif  // RUNTIME_BIN_PLATFORM_MACOS_COCOA_H_
diff --git a/runtime/bin/platform_macos_cocoa.mm b/runtime/bin/platform_macos_cocoa.mm
new file mode 100644
index 0000000..4a364e9
--- /dev/null
+++ b/runtime/bin/platform_macos_cocoa.mm
@@ -0,0 +1,29 @@
+// Copyright (c) 2021, 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.
+
+#include "platform/globals.h"
+
+#if !defined(DART_HOST_OS_MACOS)
+#error Do not build platform_macos_cocoa.mm on non-MacOS platforms.
+#endif
+
+#include "bin/platform_macos_cocoa.h"
+
+#import <Foundation/NSProcessInfo.h>
+#import <Foundation/NSString.h>
+
+namespace dart {
+namespace bin {
+
+std::string NSProcessInfoOperatingSystemVersionString() {
+  @autoreleasepool {
+    // `operatingSystemVersionString` has been available since iOS 2.0+ and macOS 10.2+.
+    NSString* version =
+        [[NSProcessInfo processInfo] operatingSystemVersionString];
+    return std::string([version UTF8String]);
+  }
+}
+
+}  // namespace bin
+}  // namespace dart
diff --git a/runtime/bin/platform_macos_test.cc b/runtime/bin/platform_macos_test.cc
deleted file mode 100644
index 3c37901..0000000
--- a/runtime/bin/platform_macos_test.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2020, 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.
-
-#if defined(DART_HOST_OS_MACOS)
-#include "bin/platform.h"
-#include "vm/unit_test.h"
-
-namespace dart {
-
-TEST_CASE(Platform_ExtractsOSVersionFromString) {
-  char str[] =
-      "some overheads\n<key>ProductVersion</key>\nsome bytes<string>Fake "
-      "version</string>";
-  char* result = bin::ExtractsOSVersionFromString(str);
-  EXPECT(result != NULL);
-  EXPECT_STREQ("Fake version", result);
-
-  EXPECT(bin::ExtractsOSVersionFromString("<key>ProductVersion</key>") == NULL);
-
-  // Incomplete file
-  EXPECT(bin::ExtractsOSVersionFromString(
-             "<key>ProductVersion</key><string>Fake version</string") != NULL);
-
-  // A copy of actual SystemVersion.plist on mac.
-  str =
-      "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-      "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" "
-      "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
-      "<plist version=\"1.0\">\n"
-      "<dict>\n"
-      "        <key>ProductBuildVersion</key>\n"
-      "        <string>19E287</string>\n"
-      "        <key>ProductCopyright</key>\n"
-      "        <string>1983-2020 Apple Inc.</string>\n"
-      "        <key>ProductName</key>\n"
-      "        <string>Mac OS X</string>\n"
-      "        <key>ProductUserVisibleVersion</key>\n"
-      "        <string>10.15.4</string>\n"
-      "        <key>ProductVersion</key>\n"
-      "        <string>10.15.4</string>\n"
-      "        <key>iOSSupportVersion</key>\n"
-      "        <string>13.4</string>\n"
-      "</dict>\n"
-      "</plist>"
-
-      result = bin::ExtractsOSVersionFromString(str);
-  EXPECT(result != NULL);
-  EXPECT_STREQ("10.15.4", result);
-}
-
-}  // namespace dart
-#endif  // defined(DART_HOST_OS_MACOS)
diff --git a/runtime/bin/process.cc b/runtime/bin/process.cc
index 8b5c402..3371314 100644
--- a/runtime/bin/process.cc
+++ b/runtime/bin/process.cc
@@ -319,8 +319,8 @@
   char* str = StringUtils::ConsoleStringToUtf8(reinterpret_cast<char*>(buffer),
                                                bytes_length, &len);
   if (str == NULL) {
-    Dart_ThrowException(
-        DartUtils::NewInternalError("SystemEncodingToString failed"));
+    Dart_ThrowException(DartUtils::NewDartUnsupportedError(
+        "SystemEncodingToString not supported on this operating system"));
   }
   result = Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(str), len);
   ThrowIfError(result);
@@ -338,8 +338,8 @@
   const char* system_string =
       StringUtils::Utf8ToConsoleString(utf8, utf8_len, &system_len);
   if (system_string == NULL) {
-    Dart_ThrowException(
-        DartUtils::NewInternalError("StringToSystemEncoding failed"));
+    Dart_ThrowException(DartUtils::NewDartUnsupportedError(
+        "StringToSystemEncoding not supported on this operating system"));
   }
   uint8_t* buffer = NULL;
   Dart_Handle external_array = IOBuffer::Allocate(system_len, &buffer);
diff --git a/runtime/bin/process_fuchsia.cc b/runtime/bin/process_fuchsia.cc
index de4433c..4b8f59d 100644
--- a/runtime/bin/process_fuchsia.cc
+++ b/runtime/bin/process_fuchsia.cc
@@ -756,12 +756,13 @@
         actions[fixed_actions_cnt + i] = {
           .action = FDIO_SPAWN_ACTION_ADD_NS_ENTRY,
           .ns = {
-            .prefix = flat_ns->path[i],
+            .prefix = DartUtils::ScopedCopyCString(flat_ns->path[i]),
             .handle = flat_ns->handle[i],
           },
         };
+        flat_ns->handle[i] = ZX_HANDLE_INVALID;
       }
-      free(flat_ns);
+      fdio_ns_free_flat_ns(flat_ns);
       flat_ns = nullptr;
     }
 
diff --git a/runtime/bin/process_test.cc b/runtime/bin/process_test.cc
index c6529c5..0809d6c 100644
--- a/runtime/bin/process_test.cc
+++ b/runtime/bin/process_test.cc
@@ -6,6 +6,11 @@
 #include <stdlib.h>
 #include <string.h>
 
+// Force .lib-file creation on Windows, make ninja happy with zero-build.
+#if defined(_WIN32)
+extern "C" __declspec(dllexport) void dummy() {}
+#endif
+
 #if defined(__has_feature)
 #if __has_feature(undefined_behavior_sanitizer)
 __attribute__((no_sanitize("undefined")))
diff --git a/runtime/bin/security_context.cc b/runtime/bin/security_context.cc
index d2cd927..77e7ad1 100644
--- a/runtime/bin/security_context.cc
+++ b/runtime/bin/security_context.cc
@@ -649,7 +649,7 @@
     Dart_PropagateError(status);
   }
 
-  // When the the second argument points to a non-NULL buffer address,
+  // When the second argument points to a non-NULL buffer address,
   // i2d_X509 fills that buffer with the DER encoded cert data and increments
   // the buffer pointer.
   unsigned char* tmp = static_cast<unsigned char*>(dart_cert_bytes);
@@ -755,12 +755,12 @@
 }
 
 static Dart_Handle ASN1TimeToMilliseconds(ASN1_TIME* aTime) {
-  ASN1_UTCTIME* epoch_start = M_ASN1_UTCTIME_new();
+  ASN1_UTCTIME* epoch_start = ASN1_UTCTIME_new();
   ASN1_UTCTIME_set_string(epoch_start, "700101000000Z");
   int days;
   int seconds;
   int result = ASN1_TIME_diff(&days, &seconds, epoch_start, aTime);
-  M_ASN1_UTCTIME_free(epoch_start);
+  ASN1_UTCTIME_free(epoch_start);
   if (result != 1) {
     // TODO(whesse): Propagate an error to Dart.
     Syslog::PrintErr("ASN1Time error %d\n", result);
@@ -807,7 +807,7 @@
   SSLFilter::InitializeLibrary();
   SSL_CTX* ctx = SSL_CTX_new(TLS_method());
   SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, SSLCertContext::CertificateCallback);
-  SSL_CTX_set_min_proto_version(ctx, TLS1_VERSION);
+  SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION);
   SSL_CTX_set_cipher_list(ctx, "HIGH:MEDIUM");
   SSLCertContext* context = new SSLCertContext(ctx);
   Dart_Handle err = SetSecurityContext(args, context);
diff --git a/runtime/bin/snapshot_utils.cc b/runtime/bin/snapshot_utils.cc
index cf9589a..754043a 100644
--- a/runtime/bin/snapshot_utils.cc
+++ b/runtime/bin/snapshot_utils.cc
@@ -330,13 +330,19 @@
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 
 AppSnapshot* Snapshot::TryReadAppSnapshot(const char* script_uri,
-                                          bool force_load_elf_from_memory) {
-  auto decoded_path = File::UriToPath(script_uri);
-  if (decoded_path == nullptr) {
-    return nullptr;
+                                          bool force_load_elf_from_memory,
+                                          bool decode_uri) {
+  Utils::CStringUniquePtr decoded_path(nullptr, std::free);
+  const char* script_name = nullptr;
+  if (decode_uri) {
+    decoded_path = File::UriToPath(script_uri);
+    if (decoded_path == nullptr) {
+      return nullptr;
+    }
+    script_name = decoded_path.get();
+  } else {
+    script_name = script_uri;
   }
-
-  const char* script_name = decoded_path.get();
   if (File::GetType(nullptr, script_name, true) != File::kIsFile) {
     // If 'script_name' refers to a pipe, don't read to check for an app
     // snapshot since we cannot rewind if it isn't (and couldn't mmap it in
diff --git a/runtime/bin/snapshot_utils.h b/runtime/bin/snapshot_utils.h
index 57d8929..ed96fb1 100644
--- a/runtime/bin/snapshot_utils.h
+++ b/runtime/bin/snapshot_utils.h
@@ -41,7 +41,8 @@
   static AppSnapshot* TryReadAppendedAppSnapshotElf(const char* container_path);
   static AppSnapshot* TryReadAppSnapshot(
       const char* script_uri,
-      bool force_load_elf_from_memory = false);
+      bool force_load_elf_from_memory = false,
+      bool decode_uri = true);
   static void WriteAppSnapshot(const char* filename,
                                uint8_t* vm_data_buffer,
                                intptr_t vm_data_size,
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index a781353..62cc613 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -12,6 +12,7 @@
 #include "bin/lockers.h"
 #include "bin/process.h"
 #include "bin/thread.h"
+#include "bin/typed_data_utils.h"
 #include "bin/utils.h"
 
 #include "include/dart_api.h"
@@ -382,6 +383,11 @@
   }
 }
 
+// This function will abort if sourceAddr is a Unix domain socket.
+// The family ("sa_family") of the socket address is infered from the length
+// of the address. Unix domain sockets addresses are the bytes of their file
+// system path so they have variable length. They cannot, therefore, be
+// differentiated from other address types in this function.
 void FUNCTION_NAME(Socket_CreateBindConnect)(Dart_NativeArguments args) {
   RawAddr addr;
   SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
@@ -649,6 +655,65 @@
   Dart_SetReturnValue(args, result);
 }
 
+void FUNCTION_NAME(Socket_ReceiveMessage)(Dart_NativeArguments args) {
+  Socket* socket = Socket::GetSocketIdNativeField(
+      ThrowIfError(Dart_GetNativeArgument(args, 0)));
+  ASSERT(socket != nullptr);
+
+  int64_t buffer_num_bytes = 0;
+  DartUtils::GetInt64Value(ThrowIfError(Dart_GetNativeArgument(args, 1)),
+                           &buffer_num_bytes);
+  int64_t buffer_num_bytes_allocated = buffer_num_bytes;
+  uint8_t* buffer = nullptr;
+  Dart_Handle data = IOBuffer::Allocate(buffer_num_bytes, &buffer);
+  if (Dart_IsNull(data)) {
+    Dart_ThrowException(DartUtils::NewDartOSError());
+  }
+  ASSERT(buffer != nullptr);
+
+  // Can't rely on RAII since Dart_ThrowException won't call destructors.
+  OSError* os_error = new OSError();
+  SocketControlMessage* control_messages;
+  const intptr_t messages_read = SocketBase::ReceiveMessage(
+      socket->fd(), buffer, &buffer_num_bytes, &control_messages,
+      SocketBase::kAsync, os_error);
+  if (messages_read < 0) {
+    ASSERT(messages_read == -1);
+    Dart_Handle error = DartUtils::NewDartOSError(os_error);
+    delete os_error;
+    Dart_ThrowException(error);
+  }
+  delete os_error;
+  if (buffer_num_bytes > 0 && buffer_num_bytes != buffer_num_bytes_allocated) {
+    // If received fewer than allocated buffer size, truncate buffer.
+    uint8_t* new_buffer = nullptr;
+    Dart_Handle new_data = IOBuffer::Allocate(buffer_num_bytes, &new_buffer);
+    if (Dart_IsNull(new_data)) {
+      Dart_ThrowException(DartUtils::NewDartOSError());
+    }
+    ASSERT(new_buffer != nullptr);
+    memmove(new_buffer, buffer, buffer_num_bytes);
+    data = new_data;
+  }
+
+  // returned list has a (level, type, message bytes) triple for every message,
+  // plus last element is raw data uint8list.
+  Dart_Handle list = ThrowIfError(Dart_NewList(messages_read * 3 + 1));
+  int j = 0;
+  for (intptr_t i = 0; i < messages_read; i++) {
+    SocketControlMessage* message = control_messages + i;
+    Dart_Handle uint8list_message_data = ThrowIfError(
+        DartUtils::MakeUint8Array(message->data(), message->data_length()));
+    ThrowIfError(Dart_ListSetAt(
+        list, j++, ThrowIfError(Dart_NewInteger(message->level()))));
+    ThrowIfError(Dart_ListSetAt(
+        list, j++, ThrowIfError(Dart_NewInteger(message->type()))));
+    ThrowIfError(Dart_ListSetAt(list, j++, uint8list_message_data));
+  }
+  ThrowIfError(Dart_ListSetAt(list, j, data));
+  Dart_SetReturnValue(args, list);
+}
+
 void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) {
   Socket* socket =
       Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
@@ -696,6 +761,70 @@
   }
 }
 
+void FUNCTION_NAME(Socket_SendMessage)(Dart_NativeArguments args) {
+  Socket* socket =
+      Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
+  intptr_t offset = DartUtils::GetNativeIntptrArgument(args, 2);
+  intptr_t length = DartUtils::GetNativeIntptrArgument(args, 3);
+
+  // List of triples <level, type, data> aranged to minimize dart api use in
+  // native methods.
+  Dart_Handle control_message_list_dart =
+      ThrowIfError(Dart_GetNativeArgument(args, 4));
+  ASSERT(Dart_IsList(control_message_list_dart));
+  intptr_t num_control_messages_pieces;
+  ThrowIfError(
+      Dart_ListLength(control_message_list_dart, &num_control_messages_pieces));
+  intptr_t num_control_messages = num_control_messages_pieces / 3;
+  ASSERT((num_control_messages * 3) == num_control_messages_pieces);
+  SocketControlMessage* control_messages =
+      reinterpret_cast<SocketControlMessage*>(Dart_ScopeAllocate(
+          sizeof(SocketControlMessage) * num_control_messages));
+  ASSERT(control_messages != nullptr);
+
+  SocketControlMessage* control_message = control_messages;
+  intptr_t j = 0;
+  for (intptr_t i = 0; i < num_control_messages; i++, control_message++) {
+    int level = DartUtils::GetIntegerValue(
+        ThrowIfError(Dart_ListGetAt(control_message_list_dart, j++)));
+    int type = DartUtils::GetIntegerValue(
+        ThrowIfError(Dart_ListGetAt(control_message_list_dart, j++)));
+    Dart_Handle uint8list_dart =
+        ThrowIfError(Dart_ListGetAt(control_message_list_dart, j++));
+
+    TypedDataScope data(uint8list_dart);
+    void* copied_data = Dart_ScopeAllocate(data.size_in_bytes());
+    ASSERT(copied_data != nullptr);
+    memmove(copied_data, data.data(), data.size_in_bytes());
+    new (control_message)
+        SocketControlMessage(level, type, copied_data, data.size_in_bytes());
+  }
+
+  // Can't rely on RAII since Dart_ThrowException won't call destructors.
+  OSError* os_error = new OSError();
+  intptr_t bytes_written;
+  {
+    Dart_Handle buffer_dart = Dart_GetNativeArgument(args, 1);
+    TypedDataScope data(buffer_dart);
+
+    ASSERT((offset + length) <= data.size_in_bytes());
+    uint8_t* buffer_at_offset =
+        reinterpret_cast<uint8_t*>(data.data()) + offset;
+    bytes_written = SocketBase::SendMessage(
+        socket->fd(), buffer_at_offset, length, control_messages,
+        num_control_messages, SocketBase::kAsync, os_error);
+  }
+
+  if (bytes_written < 0) {
+    Dart_Handle error = DartUtils::NewDartOSError(os_error);
+    delete os_error;
+    Dart_ThrowException(error);
+  }
+  delete os_error;
+
+  Dart_SetIntegerReturnValue(args, bytes_written);
+}
+
 void FUNCTION_NAME(Socket_SendTo)(Dart_NativeArguments args) {
   Socket* socket =
       Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
@@ -783,6 +912,12 @@
   Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
 }
 
+void FUNCTION_NAME(Socket_GetFD)(Dart_NativeArguments args) {
+  Socket* socket =
+      Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
+  Dart_SetIntegerReturnValue(args, socket->fd());
+}
+
 void FUNCTION_NAME(Socket_GetType)(Dart_NativeArguments args) {
   Socket* socket =
       Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
@@ -1341,5 +1476,191 @@
   return socket;
 }
 
+void FUNCTION_NAME(SocketControlMessage_fromHandles)(
+    Dart_NativeArguments args) {
+#if defined(DART_HOST_OS_WINDOWS) || defined(DART_HOST_OS_FUCHSIA)
+  Dart_SetReturnValue(args,
+                      DartUtils::NewDartUnsupportedError(
+                          "This is not supported on this operating system"));
+#else
+  ASSERT(Dart_IsNull(Dart_GetNativeArgument(args, 0)));
+  Dart_Handle handles_dart = Dart_GetNativeArgument(args, 1);
+  if (Dart_IsNull(handles_dart)) {
+    Dart_ThrowException(
+        DartUtils::NewDartArgumentError("handles list can't be null"));
+  }
+  ASSERT(Dart_IsList(handles_dart));
+  intptr_t num_handles;
+  ThrowIfError(Dart_ListLength(handles_dart, &num_handles));
+  intptr_t num_bytes = num_handles * sizeof(int);
+  int* handles = reinterpret_cast<int*>(Dart_ScopeAllocate(num_bytes));
+  Dart_Handle handle_dart_string =
+      ThrowIfError(DartUtils::NewString("_handle"));
+  for (intptr_t i = 0; i < num_handles; i++) {
+    Dart_Handle handle_dart = ThrowIfError(Dart_ListGetAt(handles_dart, i));
+    Dart_Handle handle_int_dart =
+        ThrowIfError(Dart_GetField(handle_dart, handle_dart_string));
+    handles[i] = DartUtils::GetIntegerValue(handle_int_dart);
+  }
+
+  Dart_Handle uint8list_dart =
+      ThrowIfError(Dart_NewTypedData(Dart_TypedData_kUint8, num_bytes));
+  ThrowIfError(Dart_ListSetAsBytes(uint8list_dart, /*offset=*/0,
+                                   reinterpret_cast<const uint8_t*>(handles),
+                                   num_bytes));
+  Dart_Handle dart_new_args[] = {Dart_NewInteger(SOL_SOCKET),
+                                 Dart_NewInteger(SCM_RIGHTS), uint8list_dart};
+
+  Dart_Handle socket_control_message_impl = ThrowIfError(DartUtils::GetDartType(
+      DartUtils::kIOLibURL, "_SocketControlMessageImpl"));
+  Dart_SetReturnValue(
+      args,
+      Dart_New(socket_control_message_impl,
+               /*constructor_name=*/Dart_Null(),
+               sizeof(dart_new_args) / sizeof(Dart_Handle), dart_new_args));
+#endif  // defined(DART_HOST_OS_WINDOWS) || defined(DART_HOST_OS_FUCHSIA)
+}
+
+void FUNCTION_NAME(SocketControlMessageImpl_extractHandles)(
+    Dart_NativeArguments args) {
+#if defined(DART_HOST_OS_WINDOWS) || defined(DART_HOST_OS_FUCHSIA)
+  Dart_SetReturnValue(args,
+                      DartUtils::NewDartUnsupportedError(
+                          "This is not supported on this operating system"));
+#else
+  Dart_Handle handle_type = ThrowIfError(
+      DartUtils::GetDartType(DartUtils::kIOLibURL, "ResourceHandle"));
+
+  Dart_Handle message_dart = Dart_GetNativeArgument(args, 0);
+  intptr_t level = DartUtils::GetIntegerValue(
+      ThrowIfError(Dart_GetField(message_dart, DartUtils::NewString("level"))));
+  intptr_t type = DartUtils::GetIntegerValue(
+      ThrowIfError(Dart_GetField(message_dart, DartUtils::NewString("type"))));
+  if (level != SOL_SOCKET || type != SCM_RIGHTS) {
+    Dart_SetReturnValue(args, ThrowIfError(Dart_NewListOfTypeFilled(
+                                  handle_type, Dart_Null(), 0)));
+    return;
+  }
+
+  Dart_Handle data_dart =
+      ThrowIfError(Dart_GetField(message_dart, DartUtils::NewString("data")));
+  ASSERT(Dart_IsTypedData(data_dart));
+
+  void* data;
+  intptr_t bytes_count;
+  Dart_TypedData_Type data_type;
+  ThrowIfError(
+      Dart_TypedDataAcquireData(data_dart, &data_type, &data, &bytes_count));
+  ASSERT(data_type == Dart_TypedData_kUint8);
+  int* ints_data = reinterpret_cast<int*>(Dart_ScopeAllocate(bytes_count));
+  ASSERT(ints_data != nullptr);
+  memmove(ints_data, data, bytes_count);
+  ThrowIfError(Dart_TypedDataReleaseData(data_dart));
+  intptr_t ints_count = bytes_count / sizeof(int);
+
+  Dart_Handle handle_impl_type =
+      DartUtils::GetDartType(DartUtils::kIOLibURL, "_ResourceHandleImpl");
+  Dart_Handle sentinel = ThrowIfError(
+      Dart_GetField(handle_impl_type, DartUtils::NewString("_sentinel")));
+  Dart_Handle handle_list =
+      ThrowIfError(Dart_NewListOfTypeFilled(handle_type, sentinel, ints_count));
+  for (intptr_t i = 0; i < ints_count; i++) {
+    Dart_Handle constructor_args[] = {
+        ThrowIfError(Dart_NewInteger(*(ints_data + i)))};
+    Dart_Handle handle_impl = ThrowIfError(Dart_New(
+        handle_impl_type,
+        /*constructor_name=*/Dart_Null(),
+        sizeof(constructor_args) / sizeof(Dart_Handle), constructor_args));
+    ThrowIfError(Dart_ListSetAt(handle_list, i, handle_impl));
+  }
+
+  Dart_SetReturnValue(args, handle_list);
+#endif  // defined(DART_HOST_OS_WINDOWS) || defined(DART_HOST_OS_FUCHSIA)
+}
+
+void FUNCTION_NAME(ResourceHandleImpl_toFile)(Dart_NativeArguments args) {
+#if defined(DART_HOST_OS_WINDOWS) || defined(DART_HOST_OS_FUCHSIA)
+  Dart_SetReturnValue(args,
+                      DartUtils::NewDartUnsupportedError(
+                          "This is not supported on this operating system"));
+#else
+  Dart_Handle handle_object = ThrowIfError(Dart_GetNativeArgument(args, 0));
+  Dart_Handle handle_field = ThrowIfError(
+      Dart_GetField(handle_object, DartUtils::NewString("_handle")));
+  intptr_t fd = DartUtils::GetIntegerValue(handle_field);
+
+  Dart_Handle random_access_file_type = ThrowIfError(
+      DartUtils::GetDartType(DartUtils::kIOLibURL, "_RandomAccessFile"));
+
+  Dart_Handle dart_new_args[2];
+  dart_new_args[1] = ThrowIfError(Dart_NewStringFromCString("<handle>"));
+
+  File* file = File::OpenFD(fd);
+
+  Dart_Handle result = Dart_NewInteger(reinterpret_cast<intptr_t>(file));
+  if (Dart_IsError(result)) {
+    file->Release();
+    Dart_PropagateError(result);
+  }
+  dart_new_args[0] = result;
+
+  Dart_Handle new_random_access_file =
+      Dart_New(random_access_file_type,
+               /*constructor_name=*/Dart_Null(),
+               /*number_of_arguments=*/2, dart_new_args);
+  if (Dart_IsError(new_random_access_file)) {
+    file->Release();
+    Dart_PropagateError(new_random_access_file);
+  }
+
+  Dart_SetReturnValue(args, new_random_access_file);
+#endif  // defined(DART_HOST_OS_WINDOWS) || defined(DART_HOST_OS_FUCHSIA)
+}
+
+void FUNCTION_NAME(ResourceHandleImpl_toSocket)(Dart_NativeArguments args) {
+  Dart_SetReturnValue(args,
+                      DartUtils::NewDartUnsupportedError(
+                          "This is not supported on this operating system"));
+}
+
+void FUNCTION_NAME(ResourceHandleImpl_toRawSocket)(Dart_NativeArguments args) {
+#if defined(DART_HOST_OS_WINDOWS) || defined(DART_HOST_OS_FUCHSIA)
+  Dart_SetReturnValue(args,
+                      DartUtils::NewDartUnsupportedError(
+                          "This is not supported on this operating system"));
+#else
+  Dart_Handle handle_object = ThrowIfError(Dart_GetNativeArgument(args, 0));
+  Dart_Handle handle_field = ThrowIfError(
+      Dart_GetField(handle_object, DartUtils::NewString("_handle")));
+  intptr_t fd = DartUtils::GetIntegerValue(handle_field);
+
+  SocketAddress* socket_address = reinterpret_cast<SocketAddress*>(
+      Dart_ScopeAllocate(sizeof(SocketAddress)));
+  ASSERT(socket_address != nullptr);
+  SocketBase::GetSocketName(fd, socket_address);
+
+  // return a list describing socket_address: (type, hostname, typed_data_addr,
+  // fd)
+  Dart_Handle list = ThrowIfError(Dart_NewList(4));
+  ThrowIfError(Dart_ListSetAt(
+      list, 0, ThrowIfError(Dart_NewInteger(socket_address->GetType()))));
+  ThrowIfError(Dart_ListSetAt(
+      list, 1,
+      ThrowIfError(Dart_NewStringFromCString(socket_address->as_string()))));
+  ThrowIfError(Dart_ListSetAt(
+      list, 2, SocketAddress::ToTypedData(socket_address->addr())));
+  ThrowIfError(Dart_ListSetAt(list, 3, ThrowIfError(Dart_NewInteger(fd))));
+
+  Dart_SetReturnValue(args, list);
+#endif  // defined(DART_HOST_OS_WINDOWS) || defined(DART_HOST_OS_FUCHSIA)
+}
+
+void FUNCTION_NAME(ResourceHandleImpl_toRawDatagramSocket)(
+    Dart_NativeArguments args) {
+  Dart_SetReturnValue(args,
+                      DartUtils::NewDartUnsupportedError(
+                          "This is not supported on this operating system"));
+}
+
 }  // namespace bin
 }  // namespace dart
diff --git a/runtime/bin/socket_base.h b/runtime/bin/socket_base.h
index 0442e5b..32016532 100644
--- a/runtime/bin/socket_base.h
+++ b/runtime/bin/socket_base.h
@@ -150,6 +150,30 @@
   DISALLOW_COPY_AND_ASSIGN(AddressList);
 };
 
+class SocketControlMessage {
+ public:
+  SocketControlMessage(intptr_t level,
+                       intptr_t type,
+                       void* data,
+                       size_t data_length)
+      : level_(level), type_(type), data_(data), data_length_(data_length) {}
+
+  intptr_t level() const { return level_; }
+  intptr_t type() const { return type_; }
+  void* data() const { return data_; }
+  size_t data_length() const { return data_length_; }
+
+  inline bool is_file_descriptors_control_message();
+
+ private:
+  const intptr_t level_;
+  const intptr_t type_;
+  void* data_;
+  const size_t data_length_;
+
+  DISALLOW_COPY_AND_ASSIGN(SocketControlMessage);
+};
+
 class SocketBase : public AllStatic {
  public:
   enum SocketRequest {
@@ -182,16 +206,30 @@
                          intptr_t num_bytes,
                          const RawAddr& addr,
                          SocketOpKind sync);
+  static intptr_t SendMessage(intptr_t fd,
+                              void* buffer,
+                              size_t buffer_num_bytes,
+                              SocketControlMessage* messages,
+                              intptr_t num_messages,
+                              SocketOpKind sync,
+                              OSError* p_oserror);
   static intptr_t RecvFrom(intptr_t fd,
                            void* buffer,
                            intptr_t num_bytes,
                            RawAddr* addr,
                            SocketOpKind sync);
+  static intptr_t ReceiveMessage(intptr_t fd,
+                                 void* buffer,
+                                 int64_t* p_buffer_num_bytes,
+                                 SocketControlMessage** p_messages,
+                                 SocketOpKind sync,
+                                 OSError* p_oserror);
   static bool AvailableDatagram(intptr_t fd, void* buffer, intptr_t num_bytes);
   // Returns true if the given error-number is because the system was not able
   // to bind the socket to a specific IP.
   static bool IsBindError(intptr_t error_number);
   static intptr_t GetPort(intptr_t fd);
+  static bool GetSocketName(intptr_t fd, SocketAddress* p_sa);
   static SocketAddress* GetRemotePeer(intptr_t fd, intptr_t* port);
   static void GetError(intptr_t fd, OSError* os_error);
   static int GetType(intptr_t fd);
diff --git a/runtime/bin/socket_base_android.cc b/runtime/bin/socket_base_android.cc
index f916aee..61e30ab 100644
--- a/runtime/bin/socket_base_android.cc
+++ b/runtime/bin/socket_base_android.cc
@@ -99,6 +99,20 @@
   return read_bytes;
 }
 
+bool SocketControlMessage::is_file_descriptors_control_message() {
+  return false;
+}
+
+intptr_t SocketBase::ReceiveMessage(intptr_t fd,
+                                    void* buffer,
+                                    int64_t* p_buffer_num_bytes,
+                                    SocketControlMessage** p_messages,
+                                    SocketOpKind sync,
+                                    OSError* p_oserror) {
+  errno = ENOSYS;
+  return -1;
+}
+
 bool SocketBase::AvailableDatagram(intptr_t fd,
                                    void* buffer,
                                    intptr_t num_bytes) {
@@ -141,6 +155,34 @@
   return written_bytes;
 }
 
+intptr_t SocketBase::SendMessage(intptr_t fd,
+                                 void* buffer,
+                                 size_t num_bytes,
+                                 SocketControlMessage* messages,
+                                 intptr_t num_messages,
+                                 SocketOpKind sync,
+                                 OSError* p_oserror) {
+  errno = ENOSYS;
+  return -1;
+}
+
+bool SocketBase::GetSocketName(intptr_t fd, SocketAddress* p_sa) {
+  ASSERT(fd >= 0);
+  ASSERT(p_sa != nullptr);
+  RawAddr raw;
+  socklen_t size = sizeof(raw);
+  if (NO_RETRY_EXPECTED(getsockname(fd, &raw.addr, &size))) {
+    return false;
+  }
+
+  // sockaddr_un contains sa_family_t sun_family and char[] sun_path.
+  // If size is the size of sa_family_t, this is an unnamed socket and
+  // sun_path contains garbage.
+  new (p_sa) SocketAddress(&raw.addr,
+                           /*unnamed_unix_socket=*/size == sizeof(sa_family_t));
+  return true;
+}
+
 intptr_t SocketBase::GetPort(intptr_t fd) {
   ASSERT(fd >= 0);
   RawAddr raw;
diff --git a/runtime/bin/socket_base_fuchsia.cc b/runtime/bin/socket_base_fuchsia.cc
index 5f36731..670a240 100644
--- a/runtime/bin/socket_base_fuchsia.cc
+++ b/runtime/bin/socket_base_fuchsia.cc
@@ -124,6 +124,20 @@
   return -1;
 }
 
+bool SocketControlMessage::is_file_descriptors_control_message() {
+  return false;
+}
+
+intptr_t SocketBase::ReceiveMessage(intptr_t fd,
+                                    void* buffer,
+                                    int64_t* p_buffer_num_bytes,
+                                    SocketControlMessage** p_messages,
+                                    SocketOpKind sync,
+                                    OSError* p_oserror) {
+  errno = ENOSYS;
+  return -1;
+}
+
 bool SocketBase::AvailableDatagram(intptr_t fd,
                                    void* buffer,
                                    intptr_t num_bytes) {
@@ -163,6 +177,34 @@
   return -1;
 }
 
+intptr_t SocketBase::SendMessage(intptr_t fd,
+                                 void* buffer,
+                                 size_t num_bytes,
+                                 SocketControlMessage* messages,
+                                 intptr_t num_messages,
+                                 SocketOpKind sync,
+                                 OSError* p_oserror) {
+  errno = ENOSYS;
+  return -1;
+}
+
+bool SocketBase::GetSocketName(intptr_t fd, SocketAddress* p_sa) {
+  ASSERT(fd >= 0);
+  ASSERT(p_sa != nullptr);
+  RawAddr raw;
+  socklen_t size = sizeof(raw);
+  if (NO_RETRY_EXPECTED(getsockname(fd, &raw.addr, &size))) {
+    return false;
+  }
+
+  // sockaddr_un contains sa_family_t sun_family and char[] sun_path.
+  // If size is the size of sa_family_t, this is an unnamed socket and
+  // sun_path contains garbage.
+  new (p_sa) SocketAddress(&raw.addr,
+                           /*unnamed_unix_socket=*/size == sizeof(sa_family_t));
+  return true;
+}
+
 intptr_t SocketBase::GetPort(intptr_t fd) {
   IOHandle* handle = reinterpret_cast<IOHandle*>(fd);
   ASSERT(handle->fd() >= 0);
diff --git a/runtime/bin/socket_base_linux.cc b/runtime/bin/socket_base_linux.cc
index 01d9d22..f23c23a 100644
--- a/runtime/bin/socket_base_linux.cc
+++ b/runtime/bin/socket_base_linux.cc
@@ -99,6 +99,75 @@
   return read_bytes;
 }
 
+bool SocketControlMessage::is_file_descriptors_control_message() {
+  return level_ == SOL_SOCKET && type_ == SCM_RIGHTS;
+}
+
+// /proc/sys/net/core/optmem_max is corresponding kernel setting.
+const size_t kMaxSocketMessageControlLength = 2048;
+
+// if return value is positive or zero - it's number of messages read
+// if it's negative - it's error code
+intptr_t SocketBase::ReceiveMessage(intptr_t fd,
+                                    void* buffer,
+                                    int64_t* p_buffer_num_bytes,
+                                    SocketControlMessage** p_messages,
+                                    SocketOpKind sync,
+                                    OSError* p_oserror) {
+  ASSERT(fd >= 0);
+  ASSERT(p_messages != nullptr);
+  ASSERT(p_buffer_num_bytes != nullptr);
+
+  struct iovec iov[1];
+  memset(iov, 0, sizeof(iov));
+  iov[0].iov_base = buffer;
+  iov[0].iov_len = *p_buffer_num_bytes;
+
+  struct msghdr msg;
+  memset(&msg, 0, sizeof(msg));
+  msg.msg_iov = iov;
+  msg.msg_iovlen = 1;  // number of elements in iov
+  uint8_t control_buffer[kMaxSocketMessageControlLength];
+  msg.msg_control = control_buffer;
+  msg.msg_controllen = sizeof(control_buffer);
+
+  ssize_t read_bytes = TEMP_FAILURE_RETRY(recvmsg(fd, &msg, MSG_CMSG_CLOEXEC));
+  if ((sync == kAsync) && (read_bytes == -1) && (errno == EWOULDBLOCK)) {
+    // If the read would block we need to retry and therefore return 0
+    // as the number of bytes read.
+    return 0;
+  }
+  if (read_bytes < 0) {
+    p_oserror->Reload();
+    return read_bytes;
+  }
+  *p_buffer_num_bytes = read_bytes;
+
+  struct cmsghdr* cmsg = CMSG_FIRSTHDR(&msg);
+  size_t num_messages = 0;
+  while (cmsg != nullptr) {
+    num_messages++;
+    cmsg = CMSG_NXTHDR(&msg, cmsg);
+  }
+  (*p_messages) = reinterpret_cast<SocketControlMessage*>(
+      Dart_ScopeAllocate(sizeof(SocketControlMessage) * num_messages));
+  SocketControlMessage* control_message = *p_messages;
+  for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != nullptr;
+       cmsg = CMSG_NXTHDR(&msg, cmsg), control_message++) {
+    void* data = CMSG_DATA(cmsg);
+    size_t data_length = cmsg->cmsg_len - (reinterpret_cast<uint8_t*>(data) -
+                                           reinterpret_cast<uint8_t*>(cmsg));
+    void* copied_data = Dart_ScopeAllocate(data_length);
+    ASSERT(copied_data != nullptr);
+    memmove(copied_data, data, data_length);
+    ASSERT(cmsg->cmsg_level == SOL_SOCKET);
+    ASSERT(cmsg->cmsg_type == SCM_RIGHTS);
+    new (control_message) SocketControlMessage(
+        cmsg->cmsg_level, cmsg->cmsg_type, copied_data, data_length);
+  }
+  return num_messages;
+}
+
 bool SocketBase::AvailableDatagram(intptr_t fd,
                                    void* buffer,
                                    intptr_t num_bytes) {
@@ -141,6 +210,84 @@
   return written_bytes;
 }
 
+intptr_t SocketBase::SendMessage(intptr_t fd,
+                                 void* buffer,
+                                 size_t num_bytes,
+                                 SocketControlMessage* messages,
+                                 intptr_t num_messages,
+                                 SocketOpKind sync,
+                                 OSError* p_oserror) {
+  ASSERT(fd >= 0);
+
+  struct iovec iov = {
+      .iov_base = buffer,
+      .iov_len = num_bytes,
+  };
+
+  struct msghdr msg;
+  memset(&msg, 0, sizeof(msg));
+  msg.msg_iov = &iov;
+  msg.msg_iovlen = 1;
+
+  if (messages != nullptr && num_messages > 0) {
+    SocketControlMessage* message = messages;
+    size_t total_length = 0;
+    for (intptr_t i = 0; i < num_messages; i++, message++) {
+      total_length += CMSG_SPACE(message->data_length());
+    }
+
+    uint8_t* control_buffer =
+        reinterpret_cast<uint8_t*>(Dart_ScopeAllocate(total_length));
+    memset(control_buffer, 0, total_length);
+    msg.msg_control = control_buffer;
+    msg.msg_controllen = total_length;
+
+    struct cmsghdr* cmsg = CMSG_FIRSTHDR(&msg);
+    message = messages;
+    for (intptr_t i = 0; i < num_messages;
+         i++, message++, cmsg = CMSG_NXTHDR(&msg, cmsg)) {
+      ASSERT(message->is_file_descriptors_control_message());
+      cmsg->cmsg_level = SOL_SOCKET;
+      cmsg->cmsg_type = SCM_RIGHTS;
+
+      intptr_t data_length = message->data_length();
+      cmsg->cmsg_len = CMSG_LEN(data_length);
+      memmove(CMSG_DATA(cmsg), message->data(), data_length);
+    }
+    msg.msg_controllen = total_length;
+  }
+
+  ssize_t written_bytes = TEMP_FAILURE_RETRY(sendmsg(fd, &msg, 0));
+  ASSERT(EAGAIN == EWOULDBLOCK);
+  if ((sync == kAsync) && (written_bytes == -1) && (errno == EWOULDBLOCK)) {
+    // If the would block we need to retry and therefore return 0 as
+    // the number of bytes written.
+    written_bytes = 0;
+  }
+  if (written_bytes < 0) {
+    p_oserror->Reload();
+  }
+
+  return written_bytes;
+}
+
+bool SocketBase::GetSocketName(intptr_t fd, SocketAddress* p_sa) {
+  ASSERT(fd >= 0);
+  ASSERT(p_sa != nullptr);
+  RawAddr raw;
+  socklen_t size = sizeof(raw);
+  if (NO_RETRY_EXPECTED(getsockname(fd, &raw.addr, &size))) {
+    return false;
+  }
+
+  // sockaddr_un contains sa_family_t sun_family and char[] sun_path.
+  // If size is the size of sa_family_t, this is an unnamed socket and
+  // sun_path contains garbage.
+  new (p_sa) SocketAddress(&raw.addr,
+                           /*unnamed_unix_socket=*/size == sizeof(sa_family_t));
+  return true;
+}
+
 intptr_t SocketBase::GetPort(intptr_t fd) {
   ASSERT(fd >= 0);
   RawAddr raw;
@@ -158,12 +305,12 @@
   if (NO_RETRY_EXPECTED(getpeername(fd, &raw.addr, &size))) {
     return NULL;
   }
-  // sockaddr_un contains sa_family_t sun_familty and char[] sun_path.
-  // If size is the size of sa_familty_t, this is an unnamed socket and
+  // sockaddr_un contains sa_family_t sun_family and char[] sun_path.
+  // If size is the size of sa_family_t, this is an unnamed socket and
   // sun_path contains garbage.
   if (size == sizeof(sa_family_t)) {
     *port = 0;
-    return new SocketAddress(&raw.addr, true);
+    return new SocketAddress(&raw.addr, /*unnamed_unix_socket=*/true);
   }
   *port = SocketAddress::GetAddrPort(raw);
   return new SocketAddress(&raw.addr);
diff --git a/runtime/bin/socket_base_macos.cc b/runtime/bin/socket_base_macos.cc
index cb26ed4..1b4cbcc 100644
--- a/runtime/bin/socket_base_macos.cc
+++ b/runtime/bin/socket_base_macos.cc
@@ -98,6 +98,20 @@
   return read_bytes;
 }
 
+bool SocketControlMessage::is_file_descriptors_control_message() {
+  return false;
+}
+
+intptr_t SocketBase::ReceiveMessage(intptr_t fd,
+                                    void* buffer,
+                                    int64_t* p_buffer_num_bytes,
+                                    SocketControlMessage** p_messages,
+                                    SocketOpKind sync,
+                                    OSError* p_oserror) {
+  errno = ENOSYS;
+  return -1;
+}
+
 bool SocketBase::AvailableDatagram(intptr_t fd,
                                    void* buffer,
                                    intptr_t num_bytes) {
@@ -140,6 +154,34 @@
   return written_bytes;
 }
 
+intptr_t SocketBase::SendMessage(intptr_t fd,
+                                 void* buffer,
+                                 size_t num_bytes,
+                                 SocketControlMessage* messages,
+                                 intptr_t num_messages,
+                                 SocketOpKind sync,
+                                 OSError* p_oserror) {
+  errno = ENOSYS;
+  return -1;
+}
+
+bool SocketBase::GetSocketName(intptr_t fd, SocketAddress* p_sa) {
+  ASSERT(fd >= 0);
+  ASSERT(p_sa != nullptr);
+  RawAddr raw;
+  socklen_t size = sizeof(raw);
+  if (NO_RETRY_EXPECTED(getsockname(fd, &raw.addr, &size))) {
+    return false;
+  }
+
+  // sockaddr_un contains sa_family_t sun_family and char[] sun_path.
+  // If size is the size of sa_family_t, this is an unnamed socket and
+  // sun_path contains garbage.
+  new (p_sa) SocketAddress(&raw.addr,
+                           /*unnamed_unix_socket=*/size == sizeof(sa_family_t));
+  return true;
+}
+
 intptr_t SocketBase::GetPort(intptr_t fd) {
   ASSERT(fd >= 0);
   RawAddr raw;
diff --git a/runtime/bin/socket_base_win.cc b/runtime/bin/socket_base_win.cc
index 120d42f..4d03305 100644
--- a/runtime/bin/socket_base_win.cc
+++ b/runtime/bin/socket_base_win.cc
@@ -99,6 +99,20 @@
   return handle->RecvFrom(buffer, num_bytes, &addr->addr, addr_len);
 }
 
+bool SocketControlMessage::is_file_descriptors_control_message() {
+  return false;
+}
+
+intptr_t SocketBase::ReceiveMessage(intptr_t fd,
+                                    void* buffer,
+                                    int64_t* p_buffer_num_bytes,
+                                    SocketControlMessage** p_messages,
+                                    SocketOpKind sync,
+                                    OSError* p_oserror) {
+  errno = ENOSYS;
+  return -1;
+}
+
 bool SocketBase::AvailableDatagram(intptr_t fd,
                                    void* buffer,
                                    intptr_t num_bytes) {
@@ -125,6 +139,34 @@
                         SocketAddress::GetAddrLength(addr));
 }
 
+intptr_t SocketBase::SendMessage(intptr_t fd,
+                                 void* buffer,
+                                 size_t num_bytes,
+                                 SocketControlMessage* messages,
+                                 intptr_t num_messages,
+                                 SocketOpKind sync,
+                                 OSError* p_oserror) {
+  errno = ENOSYS;
+  return -1;
+}
+
+bool SocketBase::GetSocketName(intptr_t fd, SocketAddress* p_sa) {
+  ASSERT(fd >= 0);
+  ASSERT(p_sa != nullptr);
+  RawAddr raw;
+  socklen_t size = sizeof(raw);
+  if (getsockname(fd, &raw.addr, &size) == SOCKET_ERROR) {
+    return false;
+  }
+
+  // sockaddr_un contains sa_family_t sun_family and char[] sun_path.
+  // If size is the size of sa_family_t, this is an unnamed socket and
+  // sun_path contains garbage.
+  new (p_sa) SocketAddress(&raw.addr,
+                           /*unnamed_unix_socket=*/size == sizeof(u_short));
+  return true;
+}
+
 intptr_t SocketBase::GetPort(intptr_t fd) {
   ASSERT(reinterpret_cast<Handle*>(fd)->is_socket());
   SocketHandle* socket_handle = reinterpret_cast<SocketHandle*>(fd);
diff --git a/runtime/bin/thread_android.cc b/runtime/bin/thread_android.cc
index d386ceb..60c911a 100644
--- a/runtime/bin/thread_android.cc
+++ b/runtime/bin/thread_android.cc
@@ -86,8 +86,11 @@
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  pthread_setname_np(pthread_self(), name);
+  // Set the thread name. There is 16 bytes limit on the name (including \0).
+  // pthread_setname_np ignores names that are too long rather than truncating.
+  char truncated_name[16];
+  snprintf(truncated_name, sizeof(truncated_name), "%s", name);
+  pthread_setname_np(pthread_self(), truncated_name);
 
   // Call the supplied thread start function handing it its parameters.
   function(parameter);
diff --git a/runtime/bin/thread_linux.cc b/runtime/bin/thread_linux.cc
index b671d0c..1a46a3e 100644
--- a/runtime/bin/thread_linux.cc
+++ b/runtime/bin/thread_linux.cc
@@ -86,8 +86,11 @@
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  pthread_setname_np(pthread_self(), name);
+  // Set the thread name. There is 16 bytes limit on the name (including \0).
+  // pthread_setname_np ignores names that are too long rather than truncating.
+  char truncated_name[16];
+  snprintf(truncated_name, sizeof(truncated_name), "%s", name);
+  pthread_setname_np(pthread_self(), truncated_name);
 
   // Call the supplied thread start function handing it its parameters.
   function(parameter);
diff --git a/runtime/bin/utils.h b/runtime/bin/utils.h
index 5f5a1cc..ab7b1c1 100644
--- a/runtime/bin/utils.h
+++ b/runtime/bin/utils.h
@@ -67,8 +67,8 @@
   // character. If result_len is not NUL, it is used to set the number
   // of characters in the result.
   //
-  // These conversion functions are only implemented on Windows as the
-  // Dart code only hit this path on Windows.
+  // A return value of `nullptr` indicates that the conversion is not supported,
+  // which is true on all platforms other than Windows.
   static const char* ConsoleStringToUtf8(const char* str,
                                          intptr_t len = -1,
                                          intptr_t* result_len = NULL);
diff --git a/runtime/bin/utils_android.cc b/runtime/bin/utils_android.cc
index 53a4cec..89002ab 100644
--- a/runtime/bin/utils_android.cc
+++ b/runtime/bin/utils_android.cc
@@ -43,28 +43,24 @@
 const char* StringUtils::ConsoleStringToUtf8(const char* str,
                                              intptr_t len,
                                              intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 const char* StringUtils::Utf8ToConsoleString(const char* utf8,
                                              intptr_t len,
                                              intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 char* StringUtils::ConsoleStringToUtf8(char* str,
                                        intptr_t len,
                                        intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 char* StringUtils::Utf8ToConsoleString(char* utf8,
                                        intptr_t len,
                                        intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
diff --git a/runtime/bin/utils_fuchsia.cc b/runtime/bin/utils_fuchsia.cc
index f034e87..3053550 100644
--- a/runtime/bin/utils_fuchsia.cc
+++ b/runtime/bin/utils_fuchsia.cc
@@ -41,28 +41,24 @@
 const char* StringUtils::ConsoleStringToUtf8(const char* str,
                                              intptr_t len,
                                              intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 const char* StringUtils::Utf8ToConsoleString(const char* utf8,
                                              intptr_t len,
                                              intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 char* StringUtils::ConsoleStringToUtf8(char* str,
                                        intptr_t len,
                                        intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 char* StringUtils::Utf8ToConsoleString(char* utf8,
                                        intptr_t len,
                                        intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
diff --git a/runtime/bin/utils_linux.cc b/runtime/bin/utils_linux.cc
index 9c9ad3a..5e18730 100644
--- a/runtime/bin/utils_linux.cc
+++ b/runtime/bin/utils_linux.cc
@@ -42,28 +42,24 @@
 const char* StringUtils::ConsoleStringToUtf8(const char* str,
                                              intptr_t len,
                                              intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 const char* StringUtils::Utf8ToConsoleString(const char* utf8,
                                              intptr_t len,
                                              intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 char* StringUtils::ConsoleStringToUtf8(char* str,
                                        intptr_t len,
                                        intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 char* StringUtils::Utf8ToConsoleString(char* utf8,
                                        intptr_t len,
                                        intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
diff --git a/runtime/bin/utils_macos.cc b/runtime/bin/utils_macos.cc
index 219d643..d9f4f46 100644
--- a/runtime/bin/utils_macos.cc
+++ b/runtime/bin/utils_macos.cc
@@ -46,28 +46,24 @@
 const char* StringUtils::ConsoleStringToUtf8(const char* str,
                                              intptr_t len,
                                              intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 const char* StringUtils::Utf8ToConsoleString(const char* utf8,
                                              intptr_t len,
                                              intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 char* StringUtils::ConsoleStringToUtf8(char* str,
                                        intptr_t len,
                                        intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
 char* StringUtils::Utf8ToConsoleString(char* utf8,
                                        intptr_t len,
                                        intptr_t* result_len) {
-  UNIMPLEMENTED();
   return NULL;
 }
 
diff --git a/runtime/bin/utils_win.cc b/runtime/bin/utils_win.cc
index fcbbcbb..174ed7f 100644
--- a/runtime/bin/utils_win.cc
+++ b/runtime/bin/utils_win.cc
@@ -16,6 +16,23 @@
 namespace dart {
 namespace bin {
 
+// The offset between a `FILETIME` epoch (January 1, 1601 UTC) and a Unix
+// epoch (January 1, 1970 UTC) measured in 100ns intervals.
+//
+// See https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-filetime
+static const int64_t kFileTimeEpoch = 116444736000000000LL;
+
+// Although win32 uses 64-bit integers for representing timestamps,
+// these are packed into a FILETIME structure. The FILETIME
+// structure is just a struct representing a 64-bit integer. The
+// TimeStamp union allows access to both a FILETIME and an integer
+// representation of the timestamp. The Windows timestamp is in
+// 100-nanosecond intervals since January 1, 1601.
+union TimeStamp {
+  FILETIME ft_;
+  int64_t t_;
+};
+
 void FormatMessageIntoBuffer(DWORD code, wchar_t* buffer, int buffer_length) {
   DWORD message_size = FormatMessageW(
       FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, code,
@@ -31,6 +48,12 @@
   buffer[buffer_length - 1] = 0;
 }
 
+FILETIME GetFiletimeFromMillis(int64_t millis) {
+  static const int64_t kTimeScaler = 10000;  // 100 ns to ms.
+  TimeStamp t = {.t_ = millis * kTimeScaler + kFileTimeEpoch};
+  return t.ft_;
+}
+
 OSError::OSError() : sub_system_(kSystem), code_(0), message_(NULL) {
   Reload();
 }
@@ -165,24 +188,12 @@
   return true;
 }
 
-// Although win32 uses 64-bit integers for representing timestamps,
-// these are packed into a FILETIME structure. The FILETIME
-// structure is just a struct representing a 64-bit integer. The
-// TimeStamp union allows access to both a FILETIME and an integer
-// representation of the timestamp. The Windows timestamp is in
-// 100-nanosecond intervals since January 1, 1601.
-union TimeStamp {
-  FILETIME ft_;
-  int64_t t_;
-};
-
 static int64_t GetCurrentTimeMicros() {
-  static const int64_t kTimeEpoc = 116444736000000000LL;
   static const int64_t kTimeScaler = 10;  // 100 ns to us.
 
   TimeStamp time;
   GetSystemTimeAsFileTime(&time.ft_);
-  return (time.t_ - kTimeEpoc) / kTimeScaler;
+  return (time.t_ - kFileTimeEpoch) / kTimeScaler;
 }
 
 static int64_t qpc_ticks_per_second = 0;
diff --git a/runtime/bin/utils_win.h b/runtime/bin/utils_win.h
index 3d4cfe3..facee43 100644
--- a/runtime/bin/utils_win.h
+++ b/runtime/bin/utils_win.h
@@ -18,6 +18,9 @@
 
 void FormatMessageIntoBuffer(DWORD code, wchar_t* buffer, int buffer_length);
 
+// Convert from milliseconds since the Unix epoch to a FILETIME.
+FILETIME GetFiletimeFromMillis(int64_t millis);
+
 // These string utility functions return strings that have been allocated with
 // Dart_ScopeAllocate(). They should be used only when we are inside an API
 // scope. If a string returned by one of these functions must persist beyond
diff --git a/runtime/docs/gc.md b/runtime/docs/gc.md
index dc35cb5..7c2fd9a 100644
--- a/runtime/docs/gc.md
+++ b/runtime/docs/gc.md
@@ -154,7 +154,7 @@
 
 The concurrent marker starts with an acquire-release operation, so all writes by the mutator up to the time that marking starts are visible to the marker.
 
-For old-space objects created before marking started, in each slot the marker can see either its value at the time marking started or any subsequent value sorted in the slot. Any slot that contained a pointer continues to continue a valid pointer for the object's lifetime, so no matter which value the marker sees, it won't interpret a non-pointer as a pointer. (The one interesting case here is array truncation, where some slot in the array will become the header of a filler object. We ensure this is safe for concurrent marking by ensuring the header for the filler object looks like a Smi.) If the marker sees an old value, we may lose some precision and retain a dead object, but we remain correct because the new value has been marked by the mutator.
+For old-space objects created before marking started, in each slot the marker can see either its value at the time marking started or any subsequent value sorted in the slot. Any slot that contained a pointer continues to contain a valid pointer for the object's lifetime, so no matter which value the marker sees, it won't interpret a non-pointer as a pointer. (The one interesting case here is array truncation, where some slot in the array will become the header of a filler object. We ensure this is safe for concurrent marking by ensuring the header for the filler object looks like a Smi.) If the marker sees an old value, we may lose some precision and retain a dead object, but we remain correct because the new value has been marked by the mutator.
 
 For old-space objects created after marking started, the marker may see uninitialized values because operations on slots are not synchronized. To prevent this, during marking we allocate old-space objects [black (marked)](https://en.wikipedia.org/wiki/Tracing_garbage_collection#TRI-COLOR) so the marker will not visit them.
 
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 02c28b2..b62c1a7 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -28,7 +28,7 @@
 #ifdef __cplusplus
 #define DART_EXTERN_C extern "C"
 #else
-#define DART_EXTERN_C
+#define DART_EXTERN_C extern
 #endif
 
 #if defined(__CYGWIN__)
@@ -608,6 +608,7 @@
   bool copy_parent_code;
   bool null_safety;
   bool is_system_isolate;
+  bool snapshot_is_dontneed_safe;
 } Dart_IsolateFlags;
 
 /**
diff --git a/runtime/include/dart_api_dl.h b/runtime/include/dart_api_dl.h
index 0854d71..1521df2 100644
--- a/runtime/include/dart_api_dl.h
+++ b/runtime/include/dart_api_dl.h
@@ -22,13 +22,7 @@
  * `Dart_InitializeApiDL` with `NativeApi.initializeApiDLData`.
  */
 
-#ifdef __cplusplus
-#define DART_EXTERN extern "C"
-#else
-#define DART_EXTERN extern
-#endif
-
-DART_EXTERN intptr_t Dart_InitializeApiDL(void* data);
+DART_EXPORT intptr_t Dart_InitializeApiDL(void* data);
 
 // ============================================================================
 // IMPORTANT! Never update these signatures without properly updating
@@ -114,14 +108,43 @@
 // End of verbatim copy.
 // ============================================================================
 
+// Copy of definition of DART_EXPORT without 'used' attribute.
+//
+// The 'used' attribute cannot be used with DART_API_ALL_DL_SYMBOLS because
+// they are not function declarations, but variable declarations with a
+// function pointer type.
+//
+// The function pointer variables are initialized with the addresses of the
+// functions in the VM. If we were to use function declarations instead, we
+// would need to forward the call to the VM adding indirection.
+#if defined(__CYGWIN__)
+#error Tool chain and platform not supported.
+#elif defined(_WIN32)
+#if defined(DART_SHARED_LIB)
+#define DART_EXPORT_DL DART_EXTERN_C __declspec(dllexport)
+#else
+#define DART_EXPORT_DL DART_EXTERN_C
+#endif
+#else
+#if __GNUC__ >= 4
+#if defined(DART_SHARED_LIB)
+#define DART_EXPORT_DL DART_EXTERN_C __attribute__((visibility("default")))
+#else
+#define DART_EXPORT_DL DART_EXTERN_C
+#endif
+#else
+#error Tool chain not supported.
+#endif
+#endif
+
 #define DART_API_DL_DECLARATIONS(name, R, A)                                   \
   typedef R(*name##_Type) A;                                                   \
-  DART_EXTERN name##_Type name##_DL;
+  DART_EXPORT_DL name##_Type name##_DL;
 
 DART_API_ALL_DL_SYMBOLS(DART_API_DL_DECLARATIONS)
 
-#undef DART_API_DL_DEFINITIONS
+#undef DART_API_DL_DECLARATIONS
 
-#undef DART_EXTERN
+#undef DART_EXPORT_DL
 
 #endif /* RUNTIME_INCLUDE_DART_API_DL_H_ */ /* NOLINT */
diff --git a/runtime/lib/function.cc b/runtime/lib/function.cc
index 77800d4..908fc31 100644
--- a/runtime/lib/function.cc
+++ b/runtime/lib/function.cc
@@ -40,22 +40,22 @@
     return false;
   }
   const auto& other_closure = Closure::Cast(other);
-  // Closures that are not implicit closures (tear-offs) are unique.
   const auto& func_a = Function::Handle(zone, receiver.function());
-  if (!func_a.IsImplicitClosureFunction()) {
-    return false;
-  }
   const auto& func_b = Function::Handle(zone, other_closure.function());
-  if (!func_b.IsImplicitClosureFunction()) {
-    return false;
-  }
-  // If the closure functions are not the same, check the function's name and
-  // owner, as multiple function objects could exist for the same function due
-  // to hot reload.
-  if (func_a.ptr() != func_b.ptr() &&
-      (func_a.name() != func_b.name() || func_a.Owner() != func_b.Owner() ||
-       func_a.is_static() != func_b.is_static())) {
-    return false;
+  // Check that functions match.
+  if (func_a.ptr() != func_b.ptr()) {
+    // Closure functions that are not implicit closures (tear-offs) are unique.
+    if (!func_a.IsImplicitClosureFunction() ||
+        !func_b.IsImplicitClosureFunction()) {
+      return false;
+    }
+    // If the closure functions are not the same, check the function's name and
+    // owner, as multiple function objects could exist for the same function due
+    // to hot reload.
+    if ((func_a.name() != func_b.name() || func_a.Owner() != func_b.Owner() ||
+         func_a.is_static() != func_b.is_static())) {
+      return false;
+    }
   }
   // Check that the delayed type argument vectors match.
   if (receiver.delayed_type_arguments() !=
@@ -72,11 +72,25 @@
       return false;
     }
   }
-  if (!func_a.is_static()) {
-    // Check that the both receiver instances are the same.
-    const Context& context_a = Context::Handle(zone, receiver.context());
-    const Context& context_b = Context::Handle(zone, other_closure.context());
-    return context_a.At(0) == context_b.At(0);
+  if (func_a.IsImplicitClosureFunction() &&
+      func_b.IsImplicitClosureFunction()) {
+    if (!func_a.is_static()) {
+      // Check that the both receiver instances are the same.
+      const Context& context_a = Context::Handle(zone, receiver.context());
+      const Context& context_b = Context::Handle(zone, other_closure.context());
+      return context_a.At(0) == context_b.At(0);
+    }
+  } else {
+    // Non-identical closures which are not tear-offs can be equal only if
+    // they are different instantiations of the same generic closure.
+    if (!func_a.IsGeneric() || receiver.IsGeneric() ||
+        (receiver.context() != other_closure.context()) ||
+        (receiver.instantiator_type_arguments() !=
+         other_closure.instantiator_type_arguments()) ||
+        (receiver.function_type_arguments() !=
+         other_closure.function_type_arguments())) {
+      return false;
+    }
   }
   return true;
 }
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index 0515336..3569eb9 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -205,8 +205,36 @@
       ObjectPtr raw = working_set.RemoveLast();
 
       const intptr_t cid = raw->GetClassId();
+      // Keep the list in sync with the one in runtime/vm/object_graph_copy.cc
       switch (cid) {
-        // List below matches the one in raw_object_snapshot.cc
+        // Can be shared.
+        case kOneByteStringCid:
+        case kTwoByteStringCid:
+        case kExternalOneByteStringCid:
+        case kExternalTwoByteStringCid:
+        case kMintCid:
+        case kImmutableArrayCid:
+        case kNeverCid:
+        case kSentinelCid:
+        case kInt32x4Cid:
+        case kSendPortCid:
+        case kCapabilityCid:
+        case kRegExpCid:
+        case kStackTraceCid:
+          continue;
+        // Cannot be shared due to possibly being mutable boxes for unboxed
+        // fields in JIT, but can be transferred via Isolate.exit()
+        case kDoubleCid:
+        case kFloat32x4Cid:
+        case kFloat64x2Cid:
+          continue;
+
+        case kClosureCid:
+          closure ^= raw;
+          // Only context has to be checked.
+          working_set.Add(closure.context());
+          continue;
+
 #define MESSAGE_SNAPSHOT_ILLEGAL(type)                                         \
   case k##type##Cid:                                                           \
     error_message =                                                            \
@@ -214,27 +242,12 @@
     error_found = true;                                                        \
     break;
 
-        MESSAGE_SNAPSHOT_ILLEGAL(DynamicLibrary);
-        MESSAGE_SNAPSHOT_ILLEGAL(MirrorReference);
-        MESSAGE_SNAPSHOT_ILLEGAL(Pointer);
-        MESSAGE_SNAPSHOT_ILLEGAL(ReceivePort);
-        MESSAGE_SNAPSHOT_ILLEGAL(RegExp);
-        MESSAGE_SNAPSHOT_ILLEGAL(StackTrace);
-        MESSAGE_SNAPSHOT_ILLEGAL(UserTag);
+          MESSAGE_SNAPSHOT_ILLEGAL(DynamicLibrary);
+          MESSAGE_SNAPSHOT_ILLEGAL(MirrorReference);
+          MESSAGE_SNAPSHOT_ILLEGAL(Pointer);
+          MESSAGE_SNAPSHOT_ILLEGAL(ReceivePort);
+          MESSAGE_SNAPSHOT_ILLEGAL(UserTag);
 
-        case kClosureCid: {
-          closure = Closure::RawCast(raw);
-          FunctionPtr func = closure.function();
-          // We only allow closure of top level methods or static functions in a
-          // class to be sent in isolate messages.
-          if (!Function::IsImplicitStaticClosureFunction(func)) {
-            // All other closures are errors.
-            erroneous_closure_function = func;
-            error_found = true;
-            break;
-          }
-          break;
-        }
         default:
           if (cid >= kNumPredefinedCids) {
             klass = class_table->At(cid);
diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc
index 02f2592..f8e903e 100644
--- a/runtime/lib/object.cc
+++ b/runtime/lib/object.cc
@@ -571,6 +571,11 @@
   InvocationMirror::DecodeType(invocation_type.Value(), &level, &kind);
 
   Function& function = Function::Handle(zone);
+  if (level == InvocationMirror::Level::kTopLevel) {
+    if (receiver.IsString()) return receiver.ptr();
+    ASSERT(receiver.IsNull());
+    return String::null();
+  }
   if (receiver.IsType()) {
     const auto& cls = Class::Handle(zone, Type::Cast(receiver).type_class());
     const auto& error = Error::Handle(zone, cls.EnsureIsFinalized(thread));
diff --git a/runtime/observatory/BUILD.gn b/runtime/observatory/BUILD.gn
index 80b6d6e..86647e8 100644
--- a/runtime/observatory/BUILD.gn
+++ b/runtime/observatory/BUILD.gn
@@ -13,7 +13,7 @@
 
   # dart2js produces a .deps file, but it is not in a format that is understood
   # by ninja, so we explicitly list all the sources here.
-  inputs = [ "../../.packages" ] + observatory_sources
+  inputs = [ "../../.dart_tool/package_config.json" ] + observatory_sources
 
   output = "$target_gen_dir/observatory/web/main.dart.js"
   outputs = [ output ]
@@ -24,7 +24,7 @@
   args = [
     "-o",
     rebase_path(output),
-    "--packages=" + rebase_path("../../.packages"),
+    "--packages=" + rebase_path("../../.dart_tool/package_config.json"),
     "--no-sound-null-safety",
   ]
   if (is_debug) {
diff --git a/runtime/observatory/lib/elements.dart b/runtime/observatory/lib/elements.dart
index d49b31c..9d90403 100644
--- a/runtime/observatory/lib/elements.dart
+++ b/runtime/observatory/lib/elements.dart
@@ -87,13 +87,11 @@
 export 'package:observatory/src/elements/strongly_reachable_instances.dart';
 export 'package:observatory/src/elements/subtypetestcache_ref.dart';
 export 'package:observatory/src/elements/subtypetestcache_view.dart';
-export 'package:observatory/src/elements/timeline/dashboard.dart';
 export 'package:observatory/src/elements/timeline_page.dart';
 export 'package:observatory/src/elements/type_arguments_ref.dart';
 export 'package:observatory/src/elements/unknown_ref.dart';
 export 'package:observatory/src/elements/unlinkedcall_ref.dart';
 export 'package:observatory/src/elements/unlinkedcall_view.dart';
-export 'package:observatory/src/elements/view_footer.dart';
 export 'package:observatory/src/elements/vm_connect.dart';
 export 'package:observatory/src/elements/vm_connect_target.dart';
 export 'package:observatory/src/elements/vm_view.dart';
diff --git a/runtime/observatory/lib/object_graph.dart b/runtime/observatory/lib/object_graph.dart
index 85f64df..18e0fae 100644
--- a/runtime/observatory/lib/object_graph.dart
+++ b/runtime/observatory/lib/object_graph.dart
@@ -590,6 +590,22 @@
       this._graph, this._cid, this.name, this.libName, this.libUri);
 }
 
+class _SyntheticSnapshotClass implements SnapshotClass {
+  final _SyntheticSnapshotObject _node;
+  _SyntheticSnapshotClass(this._node);
+
+  String get name => _node.description;
+  String get qualifiedName => _node.description;
+
+  int get shallowSize => _node.shallowSize;
+  int get externalSize => _node.externalSize;
+  int get internalSize => _node.internalSize;
+  int get ownedSize => 0;
+
+  int get instanceCount => 1;
+  Iterable<SnapshotObject> get instances => <SnapshotObject>[_node];
+}
+
 /// The analyzed graph from a heap snapshot.
 abstract class SnapshotGraph {
   String get description;
@@ -674,19 +690,19 @@
     var mlive = mergedRoot;
 
     capacity._description = "Capacity + External";
-    capacity._klass = live.klass;
-    capacity._internalSize = _capacity!;
-    capacity._externalSize = _totalExternalSize!;
-    capacity._retainedSize = capacity._internalSize + capacity._externalSize;
+    capacity._klass = new _SyntheticSnapshotClass(capacity);
+    capacity._internalSize = 0; // No shallow size.
+    capacity._externalSize = 0; // No shallow size.
+    capacity._retainedSize = _capacity! + _totalExternalSize!;
     capacity._successors = <SnapshotObject>[live, uncollected, fragmentation];
     capacity._predecessors = <SnapshotObject>[];
     capacity._children = <SnapshotObject>[live, uncollected, fragmentation];
 
     mcapacity._description = "Capacity + External";
-    mcapacity._klass = mlive.klass;
-    mcapacity._internalSize = _capacity!;
-    mcapacity._externalSize = _totalExternalSize!;
-    mcapacity._retainedSize = mcapacity._internalSize + mcapacity._externalSize;
+    mcapacity._klass = capacity._klass;
+    mcapacity._internalSize = 0; // No shallow size.
+    mcapacity._externalSize = 0; // No shallow size.
+    mcapacity._retainedSize = _capacity! + _totalExternalSize!;
     mcapacity._children = <SnapshotMergedDominator>[
       mlive,
       muncollected,
@@ -695,7 +711,7 @@
     mcapacity._objects = <SnapshotObject>[capacity];
 
     uncollected._description = "Uncollected Garbage";
-    uncollected._klass = live.klass;
+    uncollected._klass = new _SyntheticSnapshotClass(uncollected);
     uncollected._internalSize = _totalInternalSize! - _liveInternalSize!;
     uncollected._externalSize = _totalExternalSize! - _liveExternalSize!;
     uncollected._retainedSize =
@@ -706,7 +722,7 @@
     uncollected._children = <SnapshotObject>[];
 
     muncollected._description = "Uncollected Garbage";
-    muncollected._klass = mlive.klass;
+    muncollected._klass = uncollected._klass;
     muncollected._internalSize = _totalInternalSize! - _liveInternalSize!;
     muncollected._externalSize = _totalExternalSize! - _liveExternalSize!;
     muncollected._retainedSize =
@@ -716,7 +732,7 @@
     muncollected._objects = <SnapshotObject>[uncollected];
 
     fragmentation._description = "Free";
-    fragmentation._klass = live.klass;
+    fragmentation._klass = new _SyntheticSnapshotClass(fragmentation);
     fragmentation._internalSize = _capacity! - _totalInternalSize!;
     fragmentation._externalSize = 0;
     fragmentation._retainedSize = fragmentation._internalSize;
@@ -726,7 +742,7 @@
     fragmentation._children = <SnapshotObject>[];
 
     mfragmentation._description = "Free";
-    mfragmentation._klass = mlive.klass;
+    mfragmentation._klass = fragmentation._klass;
     mfragmentation._internalSize = _capacity! - _totalInternalSize!;
     mfragmentation._externalSize = 0;
     mfragmentation._retainedSize = mfragmentation._internalSize;
diff --git a/runtime/observatory/lib/src/app/application.dart b/runtime/observatory/lib/src/app/application.dart
index e7eae4d..15defac 100644
--- a/runtime/observatory/lib/src/app/application.dart
+++ b/runtime/observatory/lib/src/app/application.dart
@@ -171,7 +171,6 @@
     _pageRegistry.add(new PortsPage(this));
     _pageRegistry.add(new LoggingPage(this));
     _pageRegistry.add(new TimelinePage(this));
-    _pageRegistry.add(new TimelineDashboardPage(this));
     _pageRegistry.add(new ProcessSnapshotPage(this));
     // Note that ErrorPage must be the last entry in the list as it is
     // the catch all.
diff --git a/runtime/observatory/lib/src/app/page.dart b/runtime/observatory/lib/src/app/page.dart
index 9adaad7..e8c69d6 100644
--- a/runtime/observatory/lib/src/app/page.dart
+++ b/runtime/observatory/lib/src/app/page.dart
@@ -974,38 +974,6 @@
   bool canVisit(Uri uri) => uri.path == 'timeline';
 }
 
-class TimelineDashboardPage extends Page {
-  TimelineDashboardPage(app) : super(app);
-
-  DivElement container = new DivElement();
-
-  void onInstall() {
-    if (element == null) {
-      element = container;
-    }
-  }
-
-  void _visit(Uri uri) {
-    assert(canVisit(uri));
-    app.vm.load().then((_) {
-      container.children = <Element>[
-        new TimelineDashboardElement(
-                app.vm, _timelineRepository, app.notifications,
-                queue: app.queue)
-            .element
-      ];
-    });
-  }
-
-  @override
-  void onUninstall() {
-    super.onUninstall();
-    container.children = const [];
-  }
-
-  bool canVisit(Uri uri) => uri.path == 'timeline-dashboard';
-}
-
 class ProcessSnapshotPage extends Page {
   ProcessSnapshotPage(app) : super(app);
 
diff --git a/runtime/observatory/lib/src/elements/class_view.dart b/runtime/observatory/lib/src/elements/class_view.dart
index 6ac2e06..27c8cb0 100644
--- a/runtime/observatory/lib/src/elements/class_view.dart
+++ b/runtime/observatory/lib/src/elements/class_view.dart
@@ -30,7 +30,6 @@
 import 'package:observatory/src/elements/object_common.dart';
 import 'package:observatory/src/elements/source_inset.dart';
 import 'package:observatory/src/elements/source_link.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class ClassViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<ClassViewElement> _r;
@@ -257,8 +256,6 @@
                         .element
                   ]
                 : const [],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/context_view.dart b/runtime/observatory/lib/src/elements/context_view.dart
index 8cfb76c..bb72e98 100644
--- a/runtime/observatory/lib/src/elements/context_view.dart
+++ b/runtime/observatory/lib/src/elements/context_view.dart
@@ -19,7 +19,6 @@
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/object_common.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class ContextViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<ContextViewElement> _r;
@@ -187,9 +186,6 @@
           ]
       ]);
     }
-    content.add(new DivElement()
-      ..classes = ['content-centered-big']
-      ..children = <Element>[new ViewFooterElement(queue: _r.queue).element]);
     children = content;
   }
 }
diff --git a/runtime/observatory/lib/src/elements/css/shared.css b/runtime/observatory/lib/src/elements/css/shared.css
index f8c0756..1fc1bfb 100644
--- a/runtime/observatory/lib/src/elements/css/shared.css
+++ b/runtime/observatory/lib/src/elements/css/shared.css
@@ -1379,6 +1379,72 @@
   flex-shrink: 0;
 }
 
+/* process-snapshot */
+
+.process-snapshot .statusMessage {
+  font-size: 150%;
+  font-weight: bold;
+}
+.process-snapshot .statusBox {
+  height: 100%;
+  padding: 1em;
+}
+.process-snapshot .explanation {
+  display: block;
+  display: -webkit-box;
+  -webkit-line-clamp: 4;
+  -webkit-box-orient: vertical;
+  max-height: 80px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.process-snapshot .virtual-tree {
+  position: absolute;
+  height: auto;
+  top: 250px;
+  bottom: 0;
+  left: 0;
+  right: 0;
+}
+.process-snapshot .tree-item {
+  box-sizing: border-box;
+  line-height: 30px;
+  height: 30px;
+  padding-left: 5%;
+  padding-right: 5%;
+
+  display: flex;
+  flex-direction: row;
+}
+.process-snapshot .tree-item > .size,
+.process-snapshot .tree-item > .percentage {
+  text-align: right;
+  margin-left: 0.25em;
+  margin-right: 0.25em;
+  flex-basis: 5em;
+  flex-grow: 0;
+  flex-shrink: 0;
+}
+.process-snapshot .tree-item > .edge {
+  margin-left: 0.25em;
+  margin-right: 0.25em;
+  flex-basis: 0;
+  flex-grow: 1;
+  flex-shrink: 1;
+}
+.process-snapshot .tree-item > .name {
+  margin-left: 0.5em;
+  margin-right: 0.5em;
+  flex-basis: 0;
+  flex-grow: 4;
+  flex-shrink: 4;
+}
+.process-snapshot .tree-item > .link {
+  margin-left: 0.25em;
+  margin-right: 0.25em;
+  flex-grow: 0;
+  flex-shrink: 0;
+}
 
 /* icdata-ref */
 
diff --git a/runtime/observatory/lib/src/elements/error_view.dart b/runtime/observatory/lib/src/elements/error_view.dart
index 893e865..683c0a4 100644
--- a/runtime/observatory/lib/src/elements/error_view.dart
+++ b/runtime/observatory/lib/src/elements/error_view.dart
@@ -12,7 +12,6 @@
 import 'package:observatory/src/elements/helpers/custom_element.dart';
 import 'package:observatory/src/elements/nav/notify.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class ErrorViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<ErrorViewElement> _r;
@@ -67,7 +66,6 @@
             ..classes = ['well']
             ..children = <Element>[new PreElement()..text = error.message]
         ],
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
diff --git a/runtime/observatory/lib/src/elements/field_view.dart b/runtime/observatory/lib/src/elements/field_view.dart
index 2844b8f..1827ccb 100644
--- a/runtime/observatory/lib/src/elements/field_view.dart
+++ b/runtime/observatory/lib/src/elements/field_view.dart
@@ -24,7 +24,6 @@
 import 'package:observatory/src/elements/object_common.dart';
 import 'package:observatory/src/elements/script_inset.dart';
 import 'package:observatory/src/elements/source_link.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class FieldViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<FieldViewElement> _r;
@@ -162,7 +161,6 @@
                             queue: _r.queue)
                         .element
                   ],
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/flag_list.dart b/runtime/observatory/lib/src/elements/flag_list.dart
index d01b782..e7dfc42 100644
--- a/runtime/observatory/lib/src/elements/flag_list.dart
+++ b/runtime/observatory/lib/src/elements/flag_list.dart
@@ -16,7 +16,6 @@
 import 'package:observatory/src/elements/nav/refresh.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class FlagListElement extends CustomElement implements Renderable {
   late RenderingScheduler<FlagListElement> _r;
@@ -108,7 +107,6 @@
       new DivElement()
         ..classes = ['content-centered']
         ..children = content,
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
diff --git a/runtime/observatory/lib/src/elements/function_view.dart b/runtime/observatory/lib/src/elements/function_view.dart
index f4ecbfc..f8b4443 100644
--- a/runtime/observatory/lib/src/elements/function_view.dart
+++ b/runtime/observatory/lib/src/elements/function_view.dart
@@ -27,7 +27,6 @@
 import 'package:observatory/src/elements/object_common.dart';
 import 'package:observatory/src/elements/source_inset.dart';
 import 'package:observatory/src/elements/source_link.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class FunctionViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<FunctionViewElement> _r;
@@ -145,7 +144,6 @@
                             queue: _r.queue)
                         .element
                   ],
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/heap_snapshot.dart b/runtime/observatory/lib/src/elements/heap_snapshot.dart
index 0aae569..7deb8c7 100644
--- a/runtime/observatory/lib/src/elements/heap_snapshot.dart
+++ b/runtime/observatory/lib/src/elements/heap_snapshot.dart
@@ -73,45 +73,6 @@
   HeapSnapshotTreeMode.classesTableDiff,
 ];
 
-abstract class DiffTreeMap<T> extends TreeMap<T> {
-  int getSizeA(T node);
-  int getSizeB(T node);
-
-  // We need to sum gains and losses separately because they both contribute
-  // area to the tree map tiles, i.e., losses don't have negative area in the
-  // visualization. For this reason, common is not necessarily
-  // max(sizeA,sizeB)-min(sizeA,sizeB), gain is not necessarily
-  // abs(sizeB-sizeA), etc.
-  int getGain(T node);
-  int getLoss(T node);
-  int getCommon(T node);
-
-  String getName(T node);
-  String getType(T node);
-
-  int getArea(T node) => getCommon(node) + getGain(node) + getLoss(node);
-  String getLabel(T node) {
-    var name = getName(node);
-    var sizeA = Utils.formatSize(getSizeA(node));
-    var sizeB = Utils.formatSize(getSizeB(node));
-    return "$name [$sizeA → $sizeB]";
-  }
-
-  String getBackground(T node) {
-    int l = getLoss(node);
-    int c = getCommon(node);
-    int g = getGain(node);
-    int a = l + c + g;
-    if (a == 0) {
-      return "white";
-    }
-    // Stripes of green, white and red whose areas are poritional to loss, common and gain.
-    String stop1 = (l / a * 100).toString();
-    String stop2 = ((l + c) / a * 100).toString();
-    return "linear-gradient(to right, #66FF99 $stop1%, white $stop1% $stop2%, #FF6680 $stop2%)";
-  }
-}
-
 class DominatorTreeMap extends NormalTreeMap<SnapshotObject> {
   HeapSnapshotElement element;
   DominatorTreeMap(this.element);
@@ -831,7 +792,7 @@
         break;
       case HeapSnapshotTreeMode.mergedDominatorTreeDiff:
         var root = MergedDominatorDiff.from(
-            _snapshotA!.mergedRoot, _snapshotB!.mergedRoot);
+            _snapshotA!.extendedMergedRoot, _snapshotB!.extendedMergedRoot);
         _tree = new VirtualTreeElement(_createMergedDominatorDiff,
             _updateMergedDominatorDiff, _getChildrenMergedDominatorDiff,
             items: _getChildrenMergedDominatorDiff(root), queue: _r.queue);
@@ -855,7 +816,7 @@
       case HeapSnapshotTreeMode.mergedDominatorTreeMapDiff:
         if (mergedDiffSelection == null) {
           mergedDiffSelection = MergedDominatorDiff.from(
-              _snapshotA!.mergedRoot, _snapshotB!.mergedRoot);
+              _snapshotA!.extendedMergedRoot, _snapshotB!.extendedMergedRoot);
         }
         _createTreeMap(
             report, new MergedDominatorDiffTreeMap(this), mergedDiffSelection);
diff --git a/runtime/observatory/lib/src/elements/icdata_view.dart b/runtime/observatory/lib/src/elements/icdata_view.dart
index 90a0a3e..986e637 100644
--- a/runtime/observatory/lib/src/elements/icdata_view.dart
+++ b/runtime/observatory/lib/src/elements/icdata_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/object_common.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class ICDataViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<ICDataViewElement> _r;
@@ -182,7 +181,6 @@
                 ]
             ],
           new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/instance_view.dart b/runtime/observatory/lib/src/elements/instance_view.dart
index ca36d45..2063c28 100644
--- a/runtime/observatory/lib/src/elements/instance_view.dart
+++ b/runtime/observatory/lib/src/elements/instance_view.dart
@@ -29,7 +29,6 @@
 import 'package:observatory/src/elements/object_common.dart';
 import 'package:observatory/src/elements/source_inset.dart';
 import 'package:observatory/src/elements/source_link.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 import 'package:observatory/utils.dart';
 
 class InstanceViewElement extends CustomElement implements Renderable {
@@ -163,8 +162,6 @@
             .element
       ]);
     }
-    content.addAll(
-        [new HRElement(), new ViewFooterElement(queue: _r.queue).element]);
     children = <Element>[
       navBar(_createMenu()),
       new DivElement()
diff --git a/runtime/observatory/lib/src/elements/isolate_reconnect.dart b/runtime/observatory/lib/src/elements/isolate_reconnect.dart
index c6a02f9..16f8eed 100644
--- a/runtime/observatory/lib/src/elements/isolate_reconnect.dart
+++ b/runtime/observatory/lib/src/elements/isolate_reconnect.dart
@@ -13,7 +13,6 @@
 import 'package:observatory/src/elements/helpers/uris.dart';
 import 'package:observatory/src/elements/nav/notify.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class IsolateReconnectElement extends CustomElement implements Renderable {
   late RenderingScheduler<IsolateReconnectElement> _r;
@@ -104,7 +103,6 @@
                   new AnchorElement(href: Uris.vm())..text = 'isolates summary',
                 ]))
         ],
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 }
diff --git a/runtime/observatory/lib/src/elements/isolate_view.dart b/runtime/observatory/lib/src/elements/isolate_view.dart
index d792d03..bd60064 100644
--- a/runtime/observatory/lib/src/elements/isolate_view.dart
+++ b/runtime/observatory/lib/src/elements/isolate_view.dart
@@ -27,7 +27,6 @@
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/script_inset.dart';
 import 'package:observatory/src/elements/source_inset.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 import 'package:observatory/utils.dart';
 
 class IsolateViewElement extends CustomElement implements Renderable {
@@ -305,8 +304,6 @@
                         .element
                   ]
                 : const [],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/json_view.dart b/runtime/observatory/lib/src/elements/json_view.dart
index 9e59278..fd406b8 100644
--- a/runtime/observatory/lib/src/elements/json_view.dart
+++ b/runtime/observatory/lib/src/elements/json_view.dart
@@ -12,7 +12,6 @@
 import 'package:observatory/src/elements/helpers/custom_element.dart';
 import 'package:observatory/src/elements/nav/notify.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class JSONViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<JSONViewElement> _r;
@@ -63,8 +62,6 @@
           new HeadingElement.h2()..text = 'Object',
           new HRElement(),
           new PreElement()..text = JSONPretty.stringify(_map),
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/library_view.dart b/runtime/observatory/lib/src/elements/library_view.dart
index 849eaba..8ac928e 100644
--- a/runtime/observatory/lib/src/elements/library_view.dart
+++ b/runtime/observatory/lib/src/elements/library_view.dart
@@ -26,7 +26,6 @@
 import 'package:observatory/src/elements/object_common.dart';
 import 'package:observatory/src/elements/script_ref.dart';
 import 'package:observatory/src/elements/script_inset.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class LibraryViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<LibraryViewElement> _r;
@@ -190,8 +189,6 @@
                     queue: _r.queue)
                 .element
           ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/logging.dart b/runtime/observatory/lib/src/elements/logging.dart
index 349401d..af7d201 100644
--- a/runtime/observatory/lib/src/elements/logging.dart
+++ b/runtime/observatory/lib/src/elements/logging.dart
@@ -19,7 +19,6 @@
 import 'package:observatory/src/elements/nav/refresh.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class LoggingPageElement extends CustomElement implements Renderable {
   late RenderingScheduler<LoggingPageElement> _r;
diff --git a/runtime/observatory/lib/src/elements/megamorphiccache_view.dart b/runtime/observatory/lib/src/elements/megamorphiccache_view.dart
index fab2513..6bf2674 100644
--- a/runtime/observatory/lib/src/elements/megamorphiccache_view.dart
+++ b/runtime/observatory/lib/src/elements/megamorphiccache_view.dart
@@ -20,7 +20,6 @@
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/object_common.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class MegamorphicCacheViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<MegamorphicCacheViewElement> _r;
@@ -177,8 +176,6 @@
                     ]
                 ]
             ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/object_view.dart b/runtime/observatory/lib/src/elements/object_view.dart
index 7ff7708..c9f6cca 100644
--- a/runtime/observatory/lib/src/elements/object_view.dart
+++ b/runtime/observatory/lib/src/elements/object_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/object_common.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class ObjectViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<ObjectViewElement> _r;
@@ -116,8 +115,6 @@
                   _reachableSizes, _references, _retainingPaths, _objects,
                   queue: _r.queue)
               .element,
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/objectpool_view.dart b/runtime/observatory/lib/src/elements/objectpool_view.dart
index 1967324..4a07333 100644
--- a/runtime/observatory/lib/src/elements/objectpool_view.dart
+++ b/runtime/observatory/lib/src/elements/objectpool_view.dart
@@ -20,7 +20,6 @@
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/object_common.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class ObjectPoolViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<ObjectPoolViewElement> _r;
@@ -140,8 +139,6 @@
                       ..children = _createEntry(entry)
                   ])
                 .toList(),
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/objectstore_view.dart b/runtime/observatory/lib/src/elements/objectstore_view.dart
index 59c4003..d040f7f 100644
--- a/runtime/observatory/lib/src/elements/objectstore_view.dart
+++ b/runtime/observatory/lib/src/elements/objectstore_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory/src/elements/nav/refresh.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class ObjectStoreViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<ObjectStoreViewElement> _r;
@@ -116,7 +115,6 @@
                           ]
                       ])
                     .toList()),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/ports.dart b/runtime/observatory/lib/src/elements/ports.dart
index 4a40a89..3a26377 100644
--- a/runtime/observatory/lib/src/elements/ports.dart
+++ b/runtime/observatory/lib/src/elements/ports.dart
@@ -16,7 +16,6 @@
 import 'package:observatory/src/elements/nav/refresh.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class PortsElement extends CustomElement implements Renderable {
   late RenderingScheduler<PortsElement> _r;
@@ -101,7 +100,6 @@
           new BRElement(),
           new DivElement()..children = _createList(),
         ],
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
diff --git a/runtime/observatory/lib/src/elements/process_snapshot.dart b/runtime/observatory/lib/src/elements/process_snapshot.dart
index 3c64441..6e87923 100644
--- a/runtime/observatory/lib/src/elements/process_snapshot.dart
+++ b/runtime/observatory/lib/src/elements/process_snapshot.dart
@@ -4,6 +4,7 @@
 
 import 'dart:async';
 import 'dart:html';
+import 'dart:math' as Math;
 import 'dart:convert';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/object_graph.dart';
@@ -25,6 +26,25 @@
 import 'package:observatory/repositories.dart';
 import 'package:observatory/utils.dart';
 
+enum ProcessSnapshotTreeMode {
+  treeMap,
+  tree,
+  treeMapDiff,
+  treeDiff,
+}
+
+// Note the order of these lists is reflected in the UI, and the first option
+// is the default.
+const _viewModes = [
+  ProcessSnapshotTreeMode.treeMap,
+  ProcessSnapshotTreeMode.tree,
+];
+
+const _diffModes = [
+  ProcessSnapshotTreeMode.treeMapDiff,
+  ProcessSnapshotTreeMode.treeDiff,
+];
+
 class ProcessItemTreeMap extends NormalTreeMap<Map> {
   ProcessSnapshotElement element;
   ProcessItemTreeMap(this.element);
@@ -43,6 +63,148 @@
   void onDetails(Map node) {}
 }
 
+class ProcessItemDiff {
+  Map? _a;
+  Map? _b;
+  ProcessItemDiff? parent;
+  List<ProcessItemDiff>? children;
+  int retainedGain = -1;
+  int retainedLoss = -1;
+  int retainedCommon = -1;
+
+  int get retainedSizeA => _a == null ? 0 : _a!["size"];
+  int get retainedSizeB => _b == null ? 0 : _b!["size"];
+  int get retainedSizeDiff => retainedSizeB - retainedSizeA;
+
+  int get shallowSizeA {
+    if (_a == null) return 0;
+    var s = _a!["size"];
+    for (var c in _a!["children"]) {
+      s -= c["size"];
+    }
+    return s;
+  }
+
+  int get shallowSizeB {
+    if (_b == null) return 0;
+    var s = _b!["size"];
+    for (var c in _b!["children"]) {
+      s -= c["size"];
+    }
+    return s;
+  }
+
+  int get shallowSizeDiff => shallowSizeB - shallowSizeA;
+
+  String get name => _a == null ? _b!["name"] : _a!["name"];
+
+  static ProcessItemDiff from(Map a, Map b) {
+    var root = new ProcessItemDiff();
+    root._a = a;
+    root._b = b;
+
+    // We must use an explicit stack instead of the call stack because the
+    // dominator tree can be arbitrarily deep. We need to compute the full
+    // tree to compute areas, so we do this eagerly to avoid having to
+    // repeatedly test for initialization.
+    var worklist = <ProcessItemDiff>[];
+    worklist.add(root);
+    // Compute children top-down.
+    for (var i = 0; i < worklist.length; i++) {
+      worklist[i]._computeChildren(worklist);
+    }
+    // Compute area botton-up.
+    for (var i = worklist.length - 1; i >= 0; i--) {
+      worklist[i]._computeArea();
+    }
+
+    return root;
+  }
+
+  void _computeChildren(List<ProcessItemDiff> worklist) {
+    assert(children == null);
+    children = <ProcessItemDiff>[];
+
+    // Matching children by name.
+    final childrenB = <String, Map>{};
+    if (_b != null)
+      for (var childB in _b!["children"]) {
+        childrenB[childB["name"]] = childB;
+      }
+    if (_a != null)
+      for (var childA in _a!["children"]) {
+        var childDiff = new ProcessItemDiff();
+        childDiff.parent = this;
+        childDiff._a = childA;
+        var qualifiedName = childA["name"];
+        var childB = childrenB[qualifiedName];
+        if (childB != null) {
+          childrenB.remove(qualifiedName);
+          childDiff._b = childB;
+        }
+        children!.add(childDiff);
+        worklist.add(childDiff);
+      }
+    for (var childB in childrenB.values) {
+      var childDiff = new ProcessItemDiff();
+      childDiff.parent = this;
+      childDiff._b = childB;
+      children!.add(childDiff);
+      worklist.add(childDiff);
+    }
+
+    if (children!.length == 0) {
+      // Compress.
+      children = const <ProcessItemDiff>[];
+    }
+  }
+
+  void _computeArea() {
+    int g = 0;
+    int l = 0;
+    int c = 0;
+    for (var child in children!) {
+      g += child.retainedGain;
+      l += child.retainedLoss;
+      c += child.retainedCommon;
+    }
+    int d = shallowSizeDiff;
+    if (d > 0) {
+      g += d;
+      c += shallowSizeA;
+    } else {
+      l -= d;
+      c += shallowSizeB;
+    }
+    assert(retainedSizeA + g - l == retainedSizeB);
+    retainedGain = g;
+    retainedLoss = l;
+    retainedCommon = c;
+  }
+}
+
+class ProcessItemDiffTreeMap extends DiffTreeMap<ProcessItemDiff> {
+  ProcessSnapshotElement element;
+  ProcessItemDiffTreeMap(this.element);
+
+  int getSizeA(ProcessItemDiff node) => node.retainedSizeA;
+  int getSizeB(ProcessItemDiff node) => node.retainedSizeB;
+  int getGain(ProcessItemDiff node) => node.retainedGain;
+  int getLoss(ProcessItemDiff node) => node.retainedLoss;
+  int getCommon(ProcessItemDiff node) => node.retainedCommon;
+
+  String getType(ProcessItemDiff node) => node.name;
+  String getName(ProcessItemDiff node) => node.name;
+  ProcessItemDiff? getParent(ProcessItemDiff node) => node.parent;
+  Iterable<ProcessItemDiff> getChildren(ProcessItemDiff node) => node.children!;
+  void onSelect(ProcessItemDiff node) {
+    element.diffSelection = node;
+    element._r.dirty();
+  }
+
+  void onDetails(ProcessItemDiff node) {}
+}
+
 class ProcessSnapshotElement extends CustomElement implements Renderable {
   late RenderingScheduler<ProcessSnapshotElement> _r;
 
@@ -56,8 +218,10 @@
 
   List<Map> _loadedSnapshots = <Map>[];
   Map? selection;
+  ProcessItemDiff? diffSelection;
   Map? _snapshotA;
   Map? _snapshotB;
+  ProcessSnapshotTreeMode _mode = ProcessSnapshotTreeMode.treeMap;
 
   factory ProcessSnapshotElement(
       M.VM vm, M.EventRepository events, M.NotificationRepository notifications,
@@ -160,6 +324,8 @@
     _loadedSnapshots.add(snapshot);
     _snapshotA = snapshot;
     _snapshotB = snapshot;
+    selection = null;
+    diffSelection = null;
     _r.dirty();
   }
 
@@ -210,27 +376,210 @@
                     ..classes = ['memberName']
                     ..children = _createSnapshotSelectA()
                 ],
-              // TODO(rmacnak): Diffing.
-              // new DivElement()
-              //  ..classes = ['memberItem']
-              //  ..children = <Element>[
-              //    new DivElement()
-              //      ..classes = ['memberName']
-              //      ..text = 'Snapshot B',
-              //    new DivElement()
-              //      ..classes = ['memberName']
-              //      ..children = _createSnapshotSelectB()
-              //  ],
+              new DivElement()
+                ..classes = ['memberItem']
+                ..children = <Element>[
+                  new DivElement()
+                    ..classes = ['memberName']
+                    ..text = 'Snapshot B',
+                  new DivElement()
+                    ..classes = ['memberName']
+                    ..children = _createSnapshotSelectB()
+                ],
+              new DivElement()
+                ..classes = ['memberItem']
+                ..children = <Element>[
+                  new DivElement()
+                    ..classes = ['memberName']
+                    ..text = (_snapshotA == _snapshotB) ? 'View ' : 'Compare ',
+                  new DivElement()
+                    ..classes = ['memberName']
+                    ..children = _createModeSelect()
+                ]
             ]
         ],
     ];
-    if (selection == null) {
-      selection = _snapshotA!["root"];
+
+    switch (_mode) {
+      case ProcessSnapshotTreeMode.treeMap:
+        if (selection == null) {
+          selection = _snapshotA!["root"];
+        }
+        _createTreeMap(report, new ProcessItemTreeMap(this), selection);
+        break;
+      case ProcessSnapshotTreeMode.tree:
+        if (selection == null) {
+          selection = _snapshotA!["root"];
+        }
+        _tree = new VirtualTreeElement(
+            _createItem, _updateItem, _getChildrenItem,
+            items: [selection], queue: _r.queue);
+        _tree!.expand(selection!);
+        report.add(_tree!.element);
+        break;
+      case ProcessSnapshotTreeMode.treeMapDiff:
+        if (diffSelection == null) {
+          diffSelection =
+              ProcessItemDiff.from(_snapshotA!["root"], _snapshotB!["root"]);
+        }
+        _createTreeMap(report, new ProcessItemDiffTreeMap(this), diffSelection);
+        break;
+      case ProcessSnapshotTreeMode.treeDiff:
+        var root =
+            ProcessItemDiff.from(_snapshotA!["root"], _snapshotB!["root"]);
+        _tree = new VirtualTreeElement(
+            _createItemDiff, _updateItemDiff, _getChildrenItemDiff,
+            items: [root], queue: _r.queue);
+        _tree!.expand(root);
+        report.add(_tree!.element);
+        break;
+      default:
+        throw new Exception('Unknown ProcessSnapshotTreeMode: $_mode');
     }
-    _createTreeMap(report, new ProcessItemTreeMap(this), selection);
+
     return report;
   }
 
+  VirtualTreeElement? _tree;
+
+  static HtmlElement _createItem(toggle) {
+    return new DivElement()
+      ..classes = ['tree-item']
+      ..children = <Element>[
+        new SpanElement()
+          ..classes = ['percentage']
+          ..title = 'percentage of total',
+        new SpanElement()
+          ..classes = ['size']
+          ..title = 'retained size',
+        new SpanElement()..classes = ['lines'],
+        new ButtonElement()
+          ..classes = ['expander']
+          ..onClick.listen((_) => toggle(autoToggleSingleChildNodes: true)),
+        new SpanElement()..classes = ['name'],
+      ];
+  }
+
+  static HtmlElement _createItemDiff(toggle) {
+    return new DivElement()
+      ..classes = ['tree-item']
+      ..children = <Element>[
+        new SpanElement()
+          ..classes = ['percentage']
+          ..title = 'percentage of total',
+        new SpanElement()
+          ..classes = ['size']
+          ..title = 'retained size A',
+        new SpanElement()
+          ..classes = ['percentage']
+          ..title = 'percentage of total',
+        new SpanElement()
+          ..classes = ['size']
+          ..title = 'retained size B',
+        new SpanElement()
+          ..classes = ['size']
+          ..title = 'retained size change',
+        new SpanElement()..classes = ['lines'],
+        new ButtonElement()
+          ..classes = ['expander']
+          ..onClick.listen((_) => toggle(autoToggleSingleChildNodes: true)),
+        new SpanElement()..classes = ['name']
+      ];
+  }
+
+  void _updateItem(HtmlElement element, node, int depth) {
+    var size = node["size"];
+    var rootSize = _snapshotA!["root"]["size"];
+    element.children[0].text =
+        Utils.formatPercentNormalized(size * 1.0 / rootSize);
+    element.children[1].text = Utils.formatSize(size);
+    _updateLines(element.children[2].children, depth);
+    if (_getChildrenItem(node).isNotEmpty) {
+      element.children[3].text = _tree!.isExpanded(node) ? '▼' : '►';
+    } else {
+      element.children[3].text = '';
+    }
+    element.children[4].text = node["name"];
+    element.children[4].title = node["description"];
+  }
+
+  void _updateItemDiff(HtmlElement element, nodeDynamic, int depth) {
+    ProcessItemDiff node = nodeDynamic;
+    element.children[0].text = Utils.formatPercentNormalized(
+        node.retainedSizeA * 1.0 / _snapshotA!["root"]["size"]);
+    element.children[1].text = Utils.formatSize(node.retainedSizeA);
+    element.children[2].text = Utils.formatPercentNormalized(
+        node.retainedSizeB * 1.0 / _snapshotB!["root"]["size"]);
+    element.children[3].text = Utils.formatSize(node.retainedSizeB);
+    element.children[4].text = (node.retainedSizeDiff > 0 ? '+' : '') +
+        Utils.formatSize(node.retainedSizeDiff);
+    element.children[4].style.color =
+        node.retainedSizeDiff > 0 ? "red" : "green";
+    _updateLines(element.children[5].children, depth);
+    if (_getChildrenItemDiff(node).isNotEmpty) {
+      element.children[6].text = _tree!.isExpanded(node) ? '▼' : '►';
+    } else {
+      element.children[6].text = '';
+    }
+    element.children[7]..text = node.name;
+  }
+
+  static Iterable _getChildrenItem(node) {
+    return new List<Map>.from(node["children"]);
+  }
+
+  static Iterable _getChildrenItemDiff(nodeDynamic) {
+    ProcessItemDiff node = nodeDynamic;
+    final list = node.children!.toList();
+    list.sort((a, b) => b.retainedSizeDiff - a.retainedSizeDiff);
+    return list;
+  }
+
+  static _updateLines(List<Element> lines, int n) {
+    n = Math.max(0, n);
+    while (lines.length > n) {
+      lines.removeLast();
+    }
+    while (lines.length < n) {
+      lines.add(new SpanElement());
+    }
+  }
+
+  static String modeToString(ProcessSnapshotTreeMode mode) {
+    switch (mode) {
+      case ProcessSnapshotTreeMode.treeMap:
+      case ProcessSnapshotTreeMode.treeMapDiff:
+        return 'Tree Map';
+      case ProcessSnapshotTreeMode.tree:
+      case ProcessSnapshotTreeMode.treeDiff:
+        return 'Tree';
+    }
+    throw new Exception('Unknown ProcessSnapshotTreeMode: $mode');
+  }
+
+  List<Element> _createModeSelect() {
+    var s;
+    var modes = _snapshotA == _snapshotB ? _viewModes : _diffModes;
+    if (!modes.contains(_mode)) {
+      _mode = modes[0];
+      _r.dirty();
+    }
+    return [
+      s = new SelectElement()
+        ..classes = ['analysis-select']
+        ..value = modeToString(_mode)
+        ..children = modes.map((mode) {
+          return new OptionElement(
+              value: modeToString(mode), selected: _mode == mode)
+            ..text = modeToString(mode);
+        }).toList(growable: false)
+        ..onChange.listen((_) {
+          _mode = modes[s.selectedIndex];
+          _r.dirty();
+        })
+    ];
+  }
+
   String snapshotToString(snapshot) {
     if (snapshot == null) return "None";
     return snapshot["root"]["name"] +
@@ -253,6 +602,7 @@
         ..onChange.listen((_) {
           _snapshotA = _loadedSnapshots[s.selectedIndex];
           selection = null;
+          diffSelection = null;
           _r.dirty();
         })
     ];
@@ -273,6 +623,7 @@
         ..onChange.listen((_) {
           _snapshotB = _loadedSnapshots[s.selectedIndex];
           selection = null;
+          diffSelection = null;
           _r.dirty();
         })
     ];
diff --git a/runtime/observatory/lib/src/elements/script_view.dart b/runtime/observatory/lib/src/elements/script_view.dart
index 44fb84e..bbffe71 100644
--- a/runtime/observatory/lib/src/elements/script_view.dart
+++ b/runtime/observatory/lib/src/elements/script_view.dart
@@ -21,7 +21,6 @@
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/object_common.dart';
 import 'package:observatory/src/elements/script_inset.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class ScriptViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<ScriptViewElement> _r;
@@ -149,7 +148,6 @@
           new ScriptInsetElement(_isolate, _script, _scripts, _objects, _events,
                   currentPos: _pos, queue: _r.queue)
               .element,
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/sentinel_view.dart b/runtime/observatory/lib/src/elements/sentinel_view.dart
index dd45ef5..83082fb 100644
--- a/runtime/observatory/lib/src/elements/sentinel_view.dart
+++ b/runtime/observatory/lib/src/elements/sentinel_view.dart
@@ -13,7 +13,6 @@
 import 'package:observatory/src/elements/nav/notify.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class SentinelViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<SentinelViewElement> _r;
@@ -82,8 +81,6 @@
             ..text = 'Sentinel: #{_sentinel.valueAsString}',
           new HRElement(),
           new DivElement()..text = _sentinelKindToDescription(_sentinel.kind),
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/singletargetcache_view.dart b/runtime/observatory/lib/src/elements/singletargetcache_view.dart
index 6d0fdd3..66ad939 100644
--- a/runtime/observatory/lib/src/elements/singletargetcache_view.dart
+++ b/runtime/observatory/lib/src/elements/singletargetcache_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/object_common.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class SingleTargetCacheViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<SingleTargetCacheViewElement> _r;
@@ -170,8 +169,6 @@
                     ]
                 ]
             ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/subtypetestcache_view.dart b/runtime/observatory/lib/src/elements/subtypetestcache_view.dart
index 5734b7d..2e3c6cf 100644
--- a/runtime/observatory/lib/src/elements/subtypetestcache_view.dart
+++ b/runtime/observatory/lib/src/elements/subtypetestcache_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/object_common.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class SubtypeTestCacheViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<SubtypeTestCacheViewElement> _r;
@@ -141,8 +140,6 @@
                     ]
                 ]
             ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/timeline/dashboard.dart b/runtime/observatory/lib/src/elements/timeline/dashboard.dart
deleted file mode 100644
index 5aca24a..0000000
--- a/runtime/observatory/lib/src/elements/timeline/dashboard.dart
+++ /dev/null
@@ -1,230 +0,0 @@
-// Copyright (c) 2017, 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.
-
-/// This page is not directly reachable from the main Observatory ui.
-/// It is mainly mented to be used from editors as an integrated tool.
-///
-/// This page mainly targeting developers and not VM experts, so concepts like
-/// timeline streams are hidden away.
-///
-/// The page exposes two views over the timeline data.
-/// Both of them are filtered based on the optional argument `mode`.
-/// See [_TimelineView] for the explanation of the two possible values.
-
-import 'dart:async';
-import 'dart:html';
-import 'dart:convert';
-import 'package:observatory/models.dart' as M;
-import 'package:observatory/src/elements/helpers/nav_bar.dart';
-import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
-import 'package:observatory/src/elements/helpers/custom_element.dart';
-import 'package:observatory/src/elements/nav/notify.dart';
-
-/// The two possible views are available.
-/// * `string`
-///   The events are just filtered by `mode` and maintain their original
-///   timestamp.
-/// * `frame`
-///   The events are organized by frame.
-///   The events are shifted in order to give a high level view of the
-///   computation involved in a frame.
-///   The frame are concatenated one after the other taking care of not
-///   overlapping the related events.
-enum _TimelineView { strict, frame }
-
-class TimelineDashboardElement extends CustomElement implements Renderable {
-  late RenderingScheduler<TimelineDashboardElement> _r;
-
-  Stream<RenderedEvent<TimelineDashboardElement>> get onRendered =>
-      _r.onRendered;
-
-  late M.VM _vm;
-  late M.TimelineRepository _repository;
-  late M.NotificationRepository _notifications;
-  late M.TimelineFlags _flags;
-  _TimelineView _view = _TimelineView.strict;
-
-  M.VM get vm => _vm;
-  M.NotificationRepository get notifications => _notifications;
-
-  factory TimelineDashboardElement(M.VM vm, M.TimelineRepository repository,
-      M.NotificationRepository notifications,
-      {RenderingQueue? queue}) {
-    assert(vm != null);
-    assert(repository != null);
-    assert(notifications != null);
-    TimelineDashboardElement e = new TimelineDashboardElement.created();
-    e._r = new RenderingScheduler<TimelineDashboardElement>(e, queue: queue);
-    e._vm = vm;
-    e._repository = repository;
-    e._notifications = notifications;
-    if (vm.embedder == 'Flutter') {
-      e._view = _TimelineView.frame;
-    }
-    return e;
-  }
-
-  TimelineDashboardElement.created() : super.created('timeline-dashboard');
-
-  @override
-  attached() {
-    super.attached();
-    _r.enable();
-    _refresh();
-  }
-
-  @override
-  detached() {
-    super.detached();
-    _r.disable(notify: true);
-    children = <Element>[];
-  }
-
-  IFrameElement? _frame;
-  DivElement? _content;
-
-  void render() {
-    if (_frame == null) {
-      _frame = new IFrameElement();
-    }
-    if (_content == null) {
-      _content = new DivElement()..classes = ['content-centered-big'];
-    }
-    // ignore: unsafe_html
-    _frame!.src = _makeFrameUrl();
-    _content!.children = <Element>[
-      new HeadingElement.h2()
-        ..nodes = ([new Text("Timeline View")]
-          ..addAll(_createButtons())
-          ..addAll(_createTabs())),
-      new ParagraphElement()
-        ..text = (_view == _TimelineView.frame
-            ? 'Logical view of the computation involved in each frame '
-                '(timestamps may not be preserved)'
-            : 'Sequence of events generated during the execution '
-                '(timestamps are preserved)')
-    ];
-    if (children.isEmpty) {
-      children = <Element>[
-        navBar(<Element>[
-          new NavNotifyElement(_notifications, queue: _r.queue).element
-        ]),
-        _content!,
-        new DivElement()
-          ..classes = ['iframe']
-          ..children = <Element>[_frame!]
-      ];
-    }
-  }
-
-  List<Node> _createButtons() {
-    if (_flags == null) {
-      return [new Text('Loading')];
-    }
-    if (_suggestedProfile(_flags.profiles).streams.any((s) => !s.isRecorded)) {
-      return [
-        new ButtonElement()
-          ..classes = ['header_button']
-          ..text = 'Enable'
-          ..title = 'The Timeline is not fully enabled, click to enable'
-          ..onClick.listen((e) => _enable()),
-      ];
-    }
-    return [
-      new ButtonElement()
-        ..classes = ['header_button']
-        ..text = 'Load from VM'
-        ..title = 'Load the timeline'
-        ..onClick.listen((e) => _refresh()),
-      new ButtonElement()
-        ..classes = ['header_button']
-        ..text = 'Reset Timeline'
-        ..title = 'Reset the current timeline'
-        ..onClick.listen((e) => _clear()),
-      new ButtonElement()
-        ..classes = ['header_button', 'left-pad']
-        ..text = 'Save to File…'
-        ..title = 'Save the current Timeline to file'
-        ..onClick.listen((e) => _save()),
-      new ButtonElement()
-        ..classes = ['header_button']
-        ..text = 'Load from File…'
-        ..title = 'Load a saved timeline from file'
-        ..onClick.listen((e) => _load()),
-    ];
-  }
-
-  List<Element> _createTabs() {
-    if (_vm.embedder != 'Flutter') {
-      return const [];
-    }
-    return [
-      new SpanElement()
-        ..classes = ['tab_buttons']
-        ..children = <Element>[
-          new ButtonElement()
-            ..text = 'Frame View'
-            ..title = 'Logical view of the computation involved in each frame\n'
-                'Timestamps may not be preserved'
-            ..disabled = _view == _TimelineView.frame
-            ..onClick.listen((_) {
-              _view = _TimelineView.frame;
-              _r.dirty();
-            }),
-          new ButtonElement()
-            ..text = 'Time View'
-            ..title = 'Sequence of events generated during the execution\n'
-                'Timestamps are preserved'
-            ..disabled = _view == _TimelineView.strict
-            ..onClick.listen((_) {
-              _view = _TimelineView.strict;
-              _r.dirty();
-            }),
-        ]
-    ];
-  }
-
-  String _makeFrameUrl() {
-    final String mode = 'basic';
-    final String view = _view == _TimelineView.frame ? 'frame' : 'strict';
-    return 'timeline.html#mode=$mode&view=$view';
-  }
-
-  M.TimelineProfile _suggestedProfile(Iterable<M.TimelineProfile> profiles) {
-    return profiles
-        .where((profile) => profile.name == 'Flutter Developer')
-        .single;
-  }
-
-  Future _enable() async {
-    await _repository.setRecordedStreams(
-        vm, _suggestedProfile(_flags.profiles).streams);
-    _refresh();
-  }
-
-  Future _refresh() async {
-    _flags = await _repository.getFlags(vm);
-    _r.dirty();
-    final traceData =
-        Map<String, dynamic>.from(await _repository.getTimeline(vm));
-    return _postMessage('refresh', traceData);
-  }
-
-  Future _clear() async {
-    await _repository.clear(_vm);
-    return _postMessage('clear');
-  }
-
-  Future _save() => _postMessage('save');
-
-  Future _load() => _postMessage('load');
-
-  Future _postMessage(String method,
-      [Map<String, dynamic> params = const <String, dynamic>{}]) async {
-    var message = {'method': method, 'params': params};
-    _frame!.contentWindow!
-        .postMessage(json.encode(message), window.location.href);
-    return null;
-  }
-}
diff --git a/runtime/observatory/lib/src/elements/tree_map.dart b/runtime/observatory/lib/src/elements/tree_map.dart
index 3a3721d..79e18d4 100644
--- a/runtime/observatory/lib/src/elements/tree_map.dart
+++ b/runtime/observatory/lib/src/elements/tree_map.dart
@@ -192,3 +192,42 @@
     return "hsl($hue,60%,60%)";
   }
 }
+
+abstract class DiffTreeMap<T> extends TreeMap<T> {
+  int getSizeA(T node);
+  int getSizeB(T node);
+
+  // We need to sum gains and losses separately because they both contribute
+  // area to the tree map tiles, i.e., losses don't have negative area in the
+  // visualization. For this reason, common is not necessarily
+  // max(sizeA,sizeB)-min(sizeA,sizeB), gain is not necessarily
+  // abs(sizeB-sizeA), etc.
+  int getGain(T node);
+  int getLoss(T node);
+  int getCommon(T node);
+
+  String getName(T node);
+  String getType(T node);
+
+  int getArea(T node) => getCommon(node) + getGain(node) + getLoss(node);
+  String getLabel(T node) {
+    var name = getName(node);
+    var sizeA = Utils.formatSize(getSizeA(node));
+    var sizeB = Utils.formatSize(getSizeB(node));
+    return "$name [$sizeA → $sizeB]";
+  }
+
+  String getBackground(T node) {
+    int l = getLoss(node);
+    int c = getCommon(node);
+    int g = getGain(node);
+    int a = l + c + g;
+    if (a == 0) {
+      return "white";
+    }
+    // Stripes of green, white and red whose areas are poritional to loss, common and gain.
+    String stop1 = (l / a * 100).toString();
+    String stop2 = ((l + c) / a * 100).toString();
+    return "linear-gradient(to right, #66FF99 $stop1%, white $stop1% $stop2%, #FF6680 $stop2%)";
+  }
+}
diff --git a/runtime/observatory/lib/src/elements/unlinkedcall_view.dart b/runtime/observatory/lib/src/elements/unlinkedcall_view.dart
index a346b48..d1efd9f 100644
--- a/runtime/observatory/lib/src/elements/unlinkedcall_view.dart
+++ b/runtime/observatory/lib/src/elements/unlinkedcall_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import 'package:observatory/src/elements/object_common.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 
 class UnlinkedCallViewElement extends CustomElement implements Renderable {
   late RenderingScheduler<UnlinkedCallViewElement> _r;
@@ -153,8 +152,6 @@
                     ]
                 ]
             ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory/lib/src/elements/view_footer.dart b/runtime/observatory/lib/src/elements/view_footer.dart
deleted file mode 100644
index 1c8505b..0000000
--- a/runtime/observatory/lib/src/elements/view_footer.dart
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2015, 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.
-
-library view_footer_element;
-
-import 'dart:html';
-import 'dart:async';
-import 'package:observatory/src/elements/helpers/custom_element.dart';
-import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
-
-class ViewFooterElement extends CustomElement implements Renderable {
-  late RenderingScheduler<ViewFooterElement> _r;
-
-  Stream<RenderedEvent<ViewFooterElement>> get onRendered => _r.onRendered;
-
-  factory ViewFooterElement({RenderingQueue? queue}) {
-    ViewFooterElement e = new ViewFooterElement.created();
-    e._r = new RenderingScheduler<ViewFooterElement>(e, queue: queue);
-    return e;
-  }
-
-  ViewFooterElement.created() : super.created('view-footer');
-
-  @override
-  void attached() {
-    super.attached();
-    _r.enable();
-  }
-
-  @override
-  void detached() {
-    super.detached();
-    children = <Element>[];
-    _r.disable(notify: true);
-  }
-
-  void render() {
-    children = <Element>[
-      new AnchorElement()
-        // ignore: unsafe_html
-        ..href = 'https://dart-lang.github.io/observatory/'
-        ..text = 'View documentation',
-      new AnchorElement()
-        // ignore: unsafe_html
-        ..href =
-            'https://github.com/dart-lang/sdk/issues/new?title=Observatory:&amp;body=Observatory%20Feedback'
-        ..text = 'File a bug report'
-    ];
-  }
-}
diff --git a/runtime/observatory/lib/src/elements/vm_connect.dart b/runtime/observatory/lib/src/elements/vm_connect.dart
index 26bfb17..c90c7ab 100644
--- a/runtime/observatory/lib/src/elements/vm_connect.dart
+++ b/runtime/observatory/lib/src/elements/vm_connect.dart
@@ -13,7 +13,6 @@
 import 'package:observatory/src/elements/helpers/custom_element.dart';
 import 'package:observatory/src/elements/nav/notify.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 import 'package:observatory/src/elements/vm_connect_target.dart';
 
 class VMConnectElement extends CustomElement implements Renderable {
@@ -114,7 +113,6 @@
               new DivElement()..classes = ['flex-item-20-percent'],
             ],
         ],
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
diff --git a/runtime/observatory/lib/src/elements/vm_view.dart b/runtime/observatory/lib/src/elements/vm_view.dart
index 4bcec55..b787fdc 100644
--- a/runtime/observatory/lib/src/elements/vm_view.dart
+++ b/runtime/observatory/lib/src/elements/vm_view.dart
@@ -16,7 +16,6 @@
 import 'package:observatory/src/elements/nav/refresh.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
-import 'package:observatory/src/elements/view_footer.dart';
 import 'package:observatory/utils.dart';
 
 class VMViewElement extends CustomElement implements Renderable {
@@ -119,7 +118,6 @@
       describeVM(),
       describeIsolateGroups(),
       describeSystemIsolateGroups(),
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
@@ -265,6 +263,16 @@
               ..children = <Element>[
                 new DivElement()
                   ..classes = ['memberName']
+                  ..text = 'features',
+                new DivElement()
+                  ..classes = ['memberValue']
+                  ..text = _vm.features
+              ],
+            new DivElement()
+              ..classes = ['memberItem']
+              ..children = <Element>[
+                new DivElement()
+                  ..classes = ['memberName']
                   ..text = 'embedder',
                 new DivElement()
                   ..classes = ['memberValue']
diff --git a/runtime/observatory/lib/src/models/objects/vm.dart b/runtime/observatory/lib/src/models/objects/vm.dart
index 523f2a2..994b1e3 100644
--- a/runtime/observatory/lib/src/models/objects/vm.dart
+++ b/runtime/observatory/lib/src/models/objects/vm.dart
@@ -26,6 +26,8 @@
   /// The Dart VM version string.
   String get version;
 
+  String get features;
+
   String get embedder;
 
   /// The amount of memory currently allocated by native code in zones.
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 9878a02..f449b78 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -672,6 +672,7 @@
   final List<Service> services = <Service>[];
 
   String version = 'unknown';
+  String features = 'unknown';
   String hostCPU = 'unknown';
   String targetCPU = 'unknown';
   String embedder = 'unknown';
@@ -1030,6 +1031,7 @@
 
     _loaded = true;
     version = map['version'];
+    features = map['_features'] ?? 'unknown';
     hostCPU = map['hostCPU'];
     targetCPU = map['targetCPU'];
     architectureBits = map['architectureBits'];
@@ -3995,7 +3997,6 @@
     case 'NativeEntryData':
       return M.ObjectPoolEntryKind.nativeEntryData;
     case 'NativeFunction':
-    case 'NativeFunctionWrapper':
       return M.ObjectPoolEntryKind.nativeEntry;
   }
   throw new Exception('Unknown ObjectPoolEntryKind ($kind)');
diff --git a/runtime/observatory/observatory_sources.gni b/runtime/observatory/observatory_sources.gni
index 9ad1b96..8ea8e7c 100644
--- a/runtime/observatory/observatory_sources.gni
+++ b/runtime/observatory/observatory_sources.gni
@@ -131,14 +131,12 @@
   "lib/src/elements/strongly_reachable_instances.dart",
   "lib/src/elements/subtypetestcache_ref.dart",
   "lib/src/elements/subtypetestcache_view.dart",
-  "lib/src/elements/timeline/dashboard.dart",
   "lib/src/elements/timeline_page.dart",
   "lib/src/elements/tree_map.dart",
   "lib/src/elements/type_arguments_ref.dart",
   "lib/src/elements/unknown_ref.dart",
   "lib/src/elements/unlinkedcall_ref.dart",
   "lib/src/elements/unlinkedcall_view.dart",
-  "lib/src/elements/view_footer.dart",
   "lib/src/elements/vm_connect.dart",
   "lib/src/elements/vm_connect_target.dart",
   "lib/src/elements/vm_view.dart",
diff --git a/runtime/observatory/tests/service/coverage_closure_call_test.dart b/runtime/observatory/tests/service/coverage_closure_call_test.dart
new file mode 100644
index 0000000..d7566a2
--- /dev/null
+++ b/runtime/observatory/tests/service/coverage_closure_call_test.dart
@@ -0,0 +1,115 @@
+// Copyright (c) 2021, 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:observatory/service_io.dart';
+import 'package:test/test.dart';
+import 'test_helper.dart';
+import 'service_test_common.dart';
+import 'dart:developer';
+
+String leafFunction(void Function() f) {
+  f();
+  return "some constant";
+}
+
+void testFunction() {
+  debugger();
+  leafFunction(() {});
+  debugger();
+}
+
+bool allRangesCompiled(coverage) {
+  for (int i = 0; i < coverage['ranges'].length; i++) {
+    if (!coverage['ranges'][i]['compiled']) {
+      return false;
+    }
+  }
+  return true;
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    var stack = await isolate.getStack();
+
+    // Make sure we are in the right place.
+    expect(stack.type, equals('Stack'));
+    expect(stack['frames'].length, greaterThanOrEqualTo(1));
+    expect(stack['frames'][0].function.name, equals('testFunction'));
+
+    var root = isolate.rootLibrary;
+    await root.load();
+    var func = root.functions.singleWhere((f) => f.name == 'leafFunction');
+    await func.load();
+
+    var expectedRange = {
+      'scriptIndex': 0,
+      'startPos': 384,
+      'endPos': 458,
+      'compiled': true,
+      'coverage': {
+        'hits': [],
+        'misses': [384, 428]
+      }
+    };
+
+    var params = {
+      'reports': ['Coverage'],
+      'scriptId': func.location!.script.id,
+      'tokenPos': func.location!.tokenPos,
+      'endTokenPos': func.location!.endTokenPos,
+      'forceCompile': true
+    };
+    var report = await isolate.invokeRpcNoUpgrade('getSourceReport', params);
+    expect(report['type'], equals('SourceReport'));
+    expect(report['ranges'].length, 1);
+    expect(report['ranges'][0], equals(expectedRange));
+    expect(report['scripts'].length, 1);
+    expect(report['scripts'][0]['uri'],
+        endsWith('coverage_closure_call_test.dart'));
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    var stack = await isolate.getStack();
+
+    // Make sure we are in the right place.
+    expect(stack.type, equals('Stack'));
+    expect(stack['frames'].length, greaterThanOrEqualTo(1));
+    expect(stack['frames'][0].function.name, equals('testFunction'));
+
+    var root = isolate.rootLibrary;
+    await root.load();
+    var func = root.functions.singleWhere((f) => f.name == 'leafFunction');
+    await func.load();
+
+    var expectedRange = {
+      'scriptIndex': 0,
+      'startPos': 384,
+      'endPos': 458,
+      'compiled': true,
+      'coverage': {
+        'hits': [384, 428],
+        'misses': []
+      }
+    };
+
+    var params = {
+      'reports': ['Coverage'],
+      'scriptId': func.location!.script.id,
+      'tokenPos': func.location!.tokenPos,
+      'endTokenPos': func.location!.endTokenPos,
+      'forceCompile': true
+    };
+    var report = await isolate.invokeRpcNoUpgrade('getSourceReport', params);
+    expect(report['type'], equals('SourceReport'));
+    expect(report['ranges'].length, 1);
+    expect(report['ranges'][0], equals(expectedRange));
+    expect(report['scripts'].length, 1);
+    expect(report['scripts'][0]['uri'],
+        endsWith('coverage_closure_call_test.dart'));
+  },
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
diff --git a/runtime/observatory/tests/service/get_version_rpc_test.dart b/runtime/observatory/tests/service/get_version_rpc_test.dart
index 340b046..4ad1d93 100644
--- a/runtime/observatory/tests/service/get_version_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
     final result = await vm.invokeRpcNoUpgrade('getVersion', {});
     expect(result['type'], 'Version');
     expect(result['major'], 3);
-    expect(result['minor'], 51);
+    expect(result['minor'], 52);
     expect(result['_privateMajor'], 0);
     expect(result['_privateMinor'], 0);
   },
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index de8b15b..ee2c8dc 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -2,6 +2,7 @@
 # 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.
 # Flaky failures
+async_generator_breakpoint_test: Pass, Slow # Uses --stacktrace-every=...
 dds_log_history_size_gigantic_test: Pass, Slow # Involves processing lots of logs
 field_script_test: Pass, RuntimeError
 get_allocation_samples_test: Pass, RuntimeError # Inconsistent stack trace
@@ -22,22 +23,20 @@
 [ $compiler == dart2analyzer ]
 developer_extension_test: SkipByDesign
 
-# The _1 versions of this test can be slow due to stress testing flags.
-[ $mode == debug ]
-async_generator_breakpoint_test: Pass, Slow
-
 # Service protocol is not supported in product mode.
 [ $mode == product ]
 *: SkipByDesign
 
 [ $system == android ]
 string_escaping_test: Skip # Issue http://dartbug.com/42094
+uri_mappings_lookup_test: SkipByDesign # Relies on file paths in the SDK.
 
 [ $system == windows ]
 *: Slow
 async_generator_breakpoint_test: Skip # Issue 29145
 dev_fs_http_put_weird_char_test: Skip # Windows disallows carriage returns in paths
 dev_fs_weird_char_test: Skip # Windows disallows question mark in paths
+uri_mappings_lookup_test: SkipByDesign # Relies on file paths in the SDK.
 
 [ $compiler == none && $runtime == vm ]
 evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index af626d9..412cfbc 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -75,6 +75,7 @@
 code_test: SkipByDesign # Debugger is disabled in AOT mode.
 column_breakpoint_test: SkipByDesign # Debugger is disabled in AOT mode.
 complex_reload_test: SkipByDesign # Debugger is disabled in AOT mode.
+coverage_closure_call_test: SkipByDesign # Debugger and coverage are disabled in AOT mode.
 coverage_const_field_async_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
 coverage_leaf_function_test: SkipByDesign # Debugger is disabled in AOT mode.
 coverage_optimized_function_test: SkipByDesign # Debugger is disabled in AOT mode.
diff --git a/runtime/observatory/tests/service/uri_mappings_lookup_test.dart b/runtime/observatory/tests/service/uri_mappings_lookup_test.dart
new file mode 100644
index 0000000..dd19f6a
--- /dev/null
+++ b/runtime/observatory/tests/service/uri_mappings_lookup_test.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2021, 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:io';
+
+import 'package:observatory/service_io.dart';
+// Already a dependency of package:test.
+import 'package:pool/pool.dart';
+import 'package:test/test.dart';
+
+import 'test_helper.dart';
+
+final tests = <IsolateTest>[
+  (Isolate isolate) async {
+    final scriptUri =
+        'file://${Directory.current.path}/runtime/observatory/tests/service/uri_mappings_lookup_test.dart';
+    final unresolvedUris = <String>[
+      'package:does_not_exist/does_not_exist.dart', // invalid URI -> null
+      'dart:io', // dart:io -> org-dartlang-sdk:///sdk/lib/io/io.dart
+      'package:pool/pool.dart', // package:pool/pool.dart -> file:///some_dir/pool/lib/pool.dart
+      scriptUri, // file:///abc.dart -> file:///abc.dart
+    ];
+
+    var result = await isolate.invokeRpcNoUpgrade('lookupResolvedPackageUris', {
+      'uris': unresolvedUris,
+    });
+    expect(result['uris'], isNotNull);
+    var uris = result['uris'].cast<String?>();
+    expect(uris.length, 4);
+    expect(uris[0], isNull);
+    expect(uris[1], 'org-dartlang-sdk:///sdk/lib/io/io.dart');
+    expect(uris[2], startsWith('file:///'));
+    expect(uris[2], endsWith('third_party/pkg/pool/lib/pool.dart'));
+    expect(uris[3], scriptUri);
+
+    result = await isolate.invokeRpcNoUpgrade('lookupPackageUris', {
+      'uris': [
+        'does_not_exist.dart',
+        ...uris.sublist(1, 4),
+      ]
+    });
+    expect(result['uris'], isNotNull);
+    uris = result['uris'].cast<String?>();
+    expect(uris.length, 4);
+    expect(uris[0], isNull);
+    expect(uris[1], unresolvedUris[1]);
+    expect(uris[2], unresolvedUris[2]);
+    expect(uris[3], unresolvedUris[3]);
+  },
+];
+
+void main(args) => runIsolateTests(args, tests);
diff --git a/runtime/observatory_2/BUILD.gn b/runtime/observatory_2/BUILD.gn
index 412e378..b21c2f0 100644
--- a/runtime/observatory_2/BUILD.gn
+++ b/runtime/observatory_2/BUILD.gn
@@ -13,7 +13,7 @@
 
   # dart2js produces a .deps file, but it is not in a format that is understood
   # by ninja, so we explicitly list all the sources here.
-  inputs = [ "../../.packages" ] + observatory_sources
+  inputs = [ "../../.dart_tool/package_config.json" ] + observatory_sources
 
   output = "$target_gen_dir/observatory/web/main.dart.js"
   outputs = [ output ]
@@ -24,7 +24,7 @@
   args = [
     "-o",
     rebase_path(output),
-    "--packages=" + rebase_path("../../.packages"),
+    "--packages=" + rebase_path("../../.dart_tool/package_config.json"),
   ]
   if (is_debug) {
     args += [ "--enable-asserts" ]
diff --git a/runtime/observatory_2/lib/elements.dart b/runtime/observatory_2/lib/elements.dart
index b4f60b7..9f18b1c 100644
--- a/runtime/observatory_2/lib/elements.dart
+++ b/runtime/observatory_2/lib/elements.dart
@@ -93,7 +93,6 @@
 export 'package:observatory_2/src/elements/unknown_ref.dart';
 export 'package:observatory_2/src/elements/unlinkedcall_ref.dart';
 export 'package:observatory_2/src/elements/unlinkedcall_view.dart';
-export 'package:observatory_2/src/elements/view_footer.dart';
 export 'package:observatory_2/src/elements/vm_connect.dart';
 export 'package:observatory_2/src/elements/vm_connect_target.dart';
 export 'package:observatory_2/src/elements/vm_view.dart';
diff --git a/runtime/observatory_2/lib/src/elements/class_view.dart b/runtime/observatory_2/lib/src/elements/class_view.dart
index 4dd190e..188514c 100644
--- a/runtime/observatory_2/lib/src/elements/class_view.dart
+++ b/runtime/observatory_2/lib/src/elements/class_view.dart
@@ -30,7 +30,6 @@
 import 'package:observatory_2/src/elements/object_common.dart';
 import 'package:observatory_2/src/elements/source_inset.dart';
 import 'package:observatory_2/src/elements/source_link.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class ClassViewElement extends CustomElement implements Renderable {
   RenderingScheduler<ClassViewElement> _r;
@@ -257,8 +256,6 @@
                         .element
                   ]
                 : const [],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/context_view.dart b/runtime/observatory_2/lib/src/elements/context_view.dart
index 3b759eb..27030ec 100644
--- a/runtime/observatory_2/lib/src/elements/context_view.dart
+++ b/runtime/observatory_2/lib/src/elements/context_view.dart
@@ -19,7 +19,6 @@
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/object_common.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class ContextViewElement extends CustomElement implements Renderable {
   RenderingScheduler<ContextViewElement> _r;
@@ -187,9 +186,6 @@
           ]
       ]);
     }
-    content.add(new DivElement()
-      ..classes = ['content-centered-big']
-      ..children = <Element>[new ViewFooterElement(queue: _r.queue).element]);
     children = content;
   }
 }
diff --git a/runtime/observatory_2/lib/src/elements/error_view.dart b/runtime/observatory_2/lib/src/elements/error_view.dart
index d4edfb2..2d7393e 100644
--- a/runtime/observatory_2/lib/src/elements/error_view.dart
+++ b/runtime/observatory_2/lib/src/elements/error_view.dart
@@ -12,7 +12,6 @@
 import 'package:observatory_2/src/elements/helpers/custom_element.dart';
 import 'package:observatory_2/src/elements/nav/notify.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class ErrorViewElement extends CustomElement implements Renderable {
   RenderingScheduler<ErrorViewElement> _r;
@@ -67,7 +66,6 @@
             ..classes = ['well']
             ..children = <Element>[new PreElement()..text = error.message]
         ],
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
diff --git a/runtime/observatory_2/lib/src/elements/field_view.dart b/runtime/observatory_2/lib/src/elements/field_view.dart
index 5e4979f..50c9c17 100644
--- a/runtime/observatory_2/lib/src/elements/field_view.dart
+++ b/runtime/observatory_2/lib/src/elements/field_view.dart
@@ -24,7 +24,6 @@
 import 'package:observatory_2/src/elements/object_common.dart';
 import 'package:observatory_2/src/elements/script_inset.dart';
 import 'package:observatory_2/src/elements/source_link.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class FieldViewElement extends CustomElement implements Renderable {
   RenderingScheduler<FieldViewElement> _r;
@@ -162,7 +161,6 @@
                             queue: _r.queue)
                         .element
                   ],
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/flag_list.dart b/runtime/observatory_2/lib/src/elements/flag_list.dart
index 5f540fc..be6f863 100644
--- a/runtime/observatory_2/lib/src/elements/flag_list.dart
+++ b/runtime/observatory_2/lib/src/elements/flag_list.dart
@@ -16,7 +16,6 @@
 import 'package:observatory_2/src/elements/nav/refresh.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class FlagListElement extends CustomElement implements Renderable {
   RenderingScheduler<FlagListElement> _r;
@@ -108,7 +107,6 @@
       new DivElement()
         ..classes = ['content-centered']
         ..children = content,
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
diff --git a/runtime/observatory_2/lib/src/elements/function_view.dart b/runtime/observatory_2/lib/src/elements/function_view.dart
index 963ecc4..9850fde 100644
--- a/runtime/observatory_2/lib/src/elements/function_view.dart
+++ b/runtime/observatory_2/lib/src/elements/function_view.dart
@@ -27,7 +27,6 @@
 import 'package:observatory_2/src/elements/object_common.dart';
 import 'package:observatory_2/src/elements/source_inset.dart';
 import 'package:observatory_2/src/elements/source_link.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class FunctionViewElement extends CustomElement implements Renderable {
   RenderingScheduler<FunctionViewElement> _r;
@@ -145,7 +144,6 @@
                             queue: _r.queue)
                         .element
                   ],
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/icdata_view.dart b/runtime/observatory_2/lib/src/elements/icdata_view.dart
index 8018897..e52c5a4 100644
--- a/runtime/observatory_2/lib/src/elements/icdata_view.dart
+++ b/runtime/observatory_2/lib/src/elements/icdata_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/object_common.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class ICDataViewElement extends CustomElement implements Renderable {
   RenderingScheduler<ICDataViewElement> _r;
@@ -181,8 +180,6 @@
                     ]
                 ]
             ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/instance_view.dart b/runtime/observatory_2/lib/src/elements/instance_view.dart
index 1b78e7d..fcc1812 100644
--- a/runtime/observatory_2/lib/src/elements/instance_view.dart
+++ b/runtime/observatory_2/lib/src/elements/instance_view.dart
@@ -29,7 +29,6 @@
 import 'package:observatory_2/src/elements/object_common.dart';
 import 'package:observatory_2/src/elements/source_inset.dart';
 import 'package:observatory_2/src/elements/source_link.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 import 'package:observatory_2/utils.dart';
 
 class InstanceViewElement extends CustomElement implements Renderable {
@@ -162,8 +161,6 @@
             .element
       ]);
     }
-    content.addAll(
-        [new HRElement(), new ViewFooterElement(queue: _r.queue).element]);
     children = <Element>[
       navBar(_createMenu()),
       new DivElement()
diff --git a/runtime/observatory_2/lib/src/elements/isolate_reconnect.dart b/runtime/observatory_2/lib/src/elements/isolate_reconnect.dart
index f4b9e23..6beb606 100644
--- a/runtime/observatory_2/lib/src/elements/isolate_reconnect.dart
+++ b/runtime/observatory_2/lib/src/elements/isolate_reconnect.dart
@@ -13,7 +13,6 @@
 import 'package:observatory_2/src/elements/helpers/uris.dart';
 import 'package:observatory_2/src/elements/nav/notify.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class IsolateReconnectElement extends CustomElement implements Renderable {
   RenderingScheduler<IsolateReconnectElement> _r;
@@ -104,7 +103,6 @@
                   new AnchorElement(href: Uris.vm())..text = 'isolates summary',
                 ]))
         ],
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 }
diff --git a/runtime/observatory_2/lib/src/elements/isolate_view.dart b/runtime/observatory_2/lib/src/elements/isolate_view.dart
index 59104c9..08f281e 100644
--- a/runtime/observatory_2/lib/src/elements/isolate_view.dart
+++ b/runtime/observatory_2/lib/src/elements/isolate_view.dart
@@ -27,7 +27,6 @@
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/script_inset.dart';
 import 'package:observatory_2/src/elements/source_inset.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 import 'package:observatory_2/utils.dart';
 
 class IsolateViewElement extends CustomElement implements Renderable {
@@ -305,8 +304,6 @@
                         .element
                   ]
                 : const [],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/json_view.dart b/runtime/observatory_2/lib/src/elements/json_view.dart
index f003d60..b3cf6f2 100644
--- a/runtime/observatory_2/lib/src/elements/json_view.dart
+++ b/runtime/observatory_2/lib/src/elements/json_view.dart
@@ -12,7 +12,6 @@
 import 'package:observatory_2/src/elements/helpers/custom_element.dart';
 import 'package:observatory_2/src/elements/nav/notify.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class JSONViewElement extends CustomElement implements Renderable {
   RenderingScheduler<JSONViewElement> _r;
@@ -63,8 +62,6 @@
           new HeadingElement.h2()..text = 'Object',
           new HRElement(),
           new PreElement()..text = JSONPretty.stringify(_map),
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/library_view.dart b/runtime/observatory_2/lib/src/elements/library_view.dart
index b1c9656..6487337 100644
--- a/runtime/observatory_2/lib/src/elements/library_view.dart
+++ b/runtime/observatory_2/lib/src/elements/library_view.dart
@@ -26,7 +26,6 @@
 import 'package:observatory_2/src/elements/object_common.dart';
 import 'package:observatory_2/src/elements/script_ref.dart';
 import 'package:observatory_2/src/elements/script_inset.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class LibraryViewElement extends CustomElement implements Renderable {
   RenderingScheduler<LibraryViewElement> _r;
@@ -190,8 +189,6 @@
                     queue: _r.queue)
                 .element
           ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/logging.dart b/runtime/observatory_2/lib/src/elements/logging.dart
index dd922a2..6673491 100644
--- a/runtime/observatory_2/lib/src/elements/logging.dart
+++ b/runtime/observatory_2/lib/src/elements/logging.dart
@@ -19,7 +19,6 @@
 import 'package:observatory_2/src/elements/nav/refresh.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class LoggingPageElement extends CustomElement implements Renderable {
   RenderingScheduler<LoggingPageElement> _r;
diff --git a/runtime/observatory_2/lib/src/elements/megamorphiccache_view.dart b/runtime/observatory_2/lib/src/elements/megamorphiccache_view.dart
index 71bb435..95f3aba 100644
--- a/runtime/observatory_2/lib/src/elements/megamorphiccache_view.dart
+++ b/runtime/observatory_2/lib/src/elements/megamorphiccache_view.dart
@@ -20,7 +20,6 @@
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/object_common.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class MegamorphicCacheViewElement extends CustomElement implements Renderable {
   RenderingScheduler<MegamorphicCacheViewElement> _r;
@@ -177,8 +176,6 @@
                     ]
                 ]
             ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/object_view.dart b/runtime/observatory_2/lib/src/elements/object_view.dart
index ee41d78..6a6f01c 100644
--- a/runtime/observatory_2/lib/src/elements/object_view.dart
+++ b/runtime/observatory_2/lib/src/elements/object_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/object_common.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class ObjectViewElement extends CustomElement implements Renderable {
   RenderingScheduler<ObjectViewElement> _r;
@@ -117,8 +116,6 @@
                   _reachableSizes, _references, _retainingPaths, _objects,
                   queue: _r.queue)
               .element,
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/objectpool_view.dart b/runtime/observatory_2/lib/src/elements/objectpool_view.dart
index a99091a..fa74651 100644
--- a/runtime/observatory_2/lib/src/elements/objectpool_view.dart
+++ b/runtime/observatory_2/lib/src/elements/objectpool_view.dart
@@ -20,7 +20,6 @@
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/object_common.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class ObjectPoolViewElement extends CustomElement implements Renderable {
   RenderingScheduler<ObjectPoolViewElement> _r;
@@ -140,8 +139,6 @@
                       ..children = _createEntry(entry)
                   ])
                 .toList(),
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/objectstore_view.dart b/runtime/observatory_2/lib/src/elements/objectstore_view.dart
index 864ca59..1c6cdb9 100644
--- a/runtime/observatory_2/lib/src/elements/objectstore_view.dart
+++ b/runtime/observatory_2/lib/src/elements/objectstore_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory_2/src/elements/nav/refresh.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class ObjectStoreViewElement extends CustomElement implements Renderable {
   RenderingScheduler<ObjectStoreViewElement> _r;
@@ -116,7 +115,6 @@
                           ]
                       ])
                     .toList()),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/ports.dart b/runtime/observatory_2/lib/src/elements/ports.dart
index e8e4a49..3d44346 100644
--- a/runtime/observatory_2/lib/src/elements/ports.dart
+++ b/runtime/observatory_2/lib/src/elements/ports.dart
@@ -16,7 +16,6 @@
 import 'package:observatory_2/src/elements/nav/refresh.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class PortsElement extends CustomElement implements Renderable {
   RenderingScheduler<PortsElement> _r;
@@ -101,7 +100,6 @@
           new BRElement(),
           new DivElement()..children = _createList(),
         ],
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
diff --git a/runtime/observatory_2/lib/src/elements/script_view.dart b/runtime/observatory_2/lib/src/elements/script_view.dart
index 349aabc..e90c1b6 100644
--- a/runtime/observatory_2/lib/src/elements/script_view.dart
+++ b/runtime/observatory_2/lib/src/elements/script_view.dart
@@ -21,7 +21,6 @@
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/object_common.dart';
 import 'package:observatory_2/src/elements/script_inset.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class ScriptViewElement extends CustomElement implements Renderable {
   RenderingScheduler<ScriptViewElement> _r;
@@ -149,7 +148,6 @@
           new ScriptInsetElement(_isolate, _script, _scripts, _objects, _events,
                   currentPos: _pos, queue: _r.queue)
               .element,
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/sentinel_view.dart b/runtime/observatory_2/lib/src/elements/sentinel_view.dart
index 5628e78..33fde81 100644
--- a/runtime/observatory_2/lib/src/elements/sentinel_view.dart
+++ b/runtime/observatory_2/lib/src/elements/sentinel_view.dart
@@ -13,7 +13,6 @@
 import 'package:observatory_2/src/elements/nav/notify.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class SentinelViewElement extends CustomElement implements Renderable {
   RenderingScheduler<SentinelViewElement> _r;
@@ -82,8 +81,6 @@
             ..text = 'Sentinel: #{_sentinel.valueAsString}',
           new HRElement(),
           new DivElement()..text = _sentinelKindToDescription(_sentinel.kind),
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/singletargetcache_view.dart b/runtime/observatory_2/lib/src/elements/singletargetcache_view.dart
index b8d3224..8aabfa3 100644
--- a/runtime/observatory_2/lib/src/elements/singletargetcache_view.dart
+++ b/runtime/observatory_2/lib/src/elements/singletargetcache_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/object_common.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class SingleTargetCacheViewElement extends CustomElement implements Renderable {
   RenderingScheduler<SingleTargetCacheViewElement> _r;
@@ -170,8 +169,6 @@
                     ]
                 ]
             ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/subtypetestcache_view.dart b/runtime/observatory_2/lib/src/elements/subtypetestcache_view.dart
index ba42732..37ff6b0 100644
--- a/runtime/observatory_2/lib/src/elements/subtypetestcache_view.dart
+++ b/runtime/observatory_2/lib/src/elements/subtypetestcache_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/object_common.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class SubtypeTestCacheViewElement extends CustomElement implements Renderable {
   RenderingScheduler<SubtypeTestCacheViewElement> _r;
@@ -141,8 +140,6 @@
                     ]
                 ]
             ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/unlinkedcall_view.dart b/runtime/observatory_2/lib/src/elements/unlinkedcall_view.dart
index 76c29c0..a84edf7 100644
--- a/runtime/observatory_2/lib/src/elements/unlinkedcall_view.dart
+++ b/runtime/observatory_2/lib/src/elements/unlinkedcall_view.dart
@@ -17,7 +17,6 @@
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
 import 'package:observatory_2/src/elements/object_common.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 
 class UnlinkedCallViewElement extends CustomElement implements Renderable {
   RenderingScheduler<UnlinkedCallViewElement> _r;
@@ -153,8 +152,6 @@
                     ]
                 ]
             ],
-          new HRElement(),
-          new ViewFooterElement(queue: _r.queue).element
         ]
     ];
   }
diff --git a/runtime/observatory_2/lib/src/elements/view_footer.dart b/runtime/observatory_2/lib/src/elements/view_footer.dart
deleted file mode 100644
index 2f02451..0000000
--- a/runtime/observatory_2/lib/src/elements/view_footer.dart
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2015, 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.
-
-library view_footer_element;
-
-import 'dart:html';
-import 'dart:async';
-import 'package:observatory_2/src/elements/helpers/custom_element.dart';
-import 'package:observatory_2/src/elements/helpers/rendering_scheduler.dart';
-
-class ViewFooterElement extends CustomElement implements Renderable {
-  RenderingScheduler<ViewFooterElement> _r;
-
-  Stream<RenderedEvent<ViewFooterElement>> get onRendered => _r.onRendered;
-
-  factory ViewFooterElement({RenderingQueue queue}) {
-    ViewFooterElement e = new ViewFooterElement.created();
-    e._r = new RenderingScheduler<ViewFooterElement>(e, queue: queue);
-    return e;
-  }
-
-  ViewFooterElement.created() : super.created('view-footer');
-
-  @override
-  void attached() {
-    super.attached();
-    _r.enable();
-  }
-
-  @override
-  void detached() {
-    super.detached();
-    children = <Element>[];
-    _r.disable(notify: true);
-  }
-
-  void render() {
-    children = <Element>[
-      new AnchorElement()
-        // ignore: unsafe_html
-        ..href = 'https://dart-lang.github.io/observatory/'
-        ..text = 'View documentation',
-      new AnchorElement()
-        // ignore: unsafe_html
-        ..href =
-            'https://github.com/dart-lang/sdk/issues/new?title=Observatory:&amp;body=Observatory%20Feedback'
-        ..text = 'File a bug report'
-    ];
-  }
-}
diff --git a/runtime/observatory_2/lib/src/elements/vm_connect.dart b/runtime/observatory_2/lib/src/elements/vm_connect.dart
index fe30bc9..8cf099e 100644
--- a/runtime/observatory_2/lib/src/elements/vm_connect.dart
+++ b/runtime/observatory_2/lib/src/elements/vm_connect.dart
@@ -13,7 +13,6 @@
 import 'package:observatory_2/src/elements/helpers/custom_element.dart';
 import 'package:observatory_2/src/elements/nav/notify.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 import 'package:observatory_2/src/elements/vm_connect_target.dart';
 
 class VMConnectElement extends CustomElement implements Renderable {
@@ -114,7 +113,6 @@
               new DivElement()..classes = ['flex-item-20-percent'],
             ],
         ],
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
diff --git a/runtime/observatory_2/lib/src/elements/vm_view.dart b/runtime/observatory_2/lib/src/elements/vm_view.dart
index b7b6d65..97d4672 100644
--- a/runtime/observatory_2/lib/src/elements/vm_view.dart
+++ b/runtime/observatory_2/lib/src/elements/vm_view.dart
@@ -16,7 +16,6 @@
 import 'package:observatory_2/src/elements/nav/refresh.dart';
 import 'package:observatory_2/src/elements/nav/top_menu.dart';
 import 'package:observatory_2/src/elements/nav/vm_menu.dart';
-import 'package:observatory_2/src/elements/view_footer.dart';
 import 'package:observatory_2/utils.dart';
 
 class VMViewElement extends CustomElement implements Renderable {
@@ -119,7 +118,6 @@
       describeVM(),
       describeIsolateGroups(),
       describeSystemIsolateGroups(),
-      new ViewFooterElement(queue: _r.queue).element
     ];
   }
 
diff --git a/runtime/observatory_2/lib/src/service/object.dart b/runtime/observatory_2/lib/src/service/object.dart
index 5e220dc..a8d3c89 100644
--- a/runtime/observatory_2/lib/src/service/object.dart
+++ b/runtime/observatory_2/lib/src/service/object.dart
@@ -4008,7 +4008,6 @@
     case 'NativeEntryData':
       return M.ObjectPoolEntryKind.nativeEntryData;
     case 'NativeFunction':
-    case 'NativeFunctionWrapper':
       return M.ObjectPoolEntryKind.nativeEntry;
   }
   throw new Exception('Unknown ObjectPoolEntryKind ($kind)');
diff --git a/runtime/observatory_2/observatory_sources.gni b/runtime/observatory_2/observatory_sources.gni
index 7bf2bbb..0ee61e2 100644
--- a/runtime/observatory_2/observatory_sources.gni
+++ b/runtime/observatory_2/observatory_sources.gni
@@ -139,7 +139,6 @@
   "lib/src/elements/unknown_ref.dart",
   "lib/src/elements/unlinkedcall_ref.dart",
   "lib/src/elements/unlinkedcall_view.dart",
-  "lib/src/elements/view_footer.dart",
   "lib/src/elements/vm_connect.dart",
   "lib/src/elements/vm_connect_target.dart",
   "lib/src/elements/vm_view.dart",
diff --git a/runtime/observatory_2/tests/service_2/coverage_closure_call_test.dart b/runtime/observatory_2/tests/service_2/coverage_closure_call_test.dart
new file mode 100644
index 0000000..967f8fa
--- /dev/null
+++ b/runtime/observatory_2/tests/service_2/coverage_closure_call_test.dart
@@ -0,0 +1,115 @@
+// Copyright (c) 2021, 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:observatory_2/service_io.dart';
+import 'package:test/test.dart';
+import 'test_helper.dart';
+import 'service_test_common.dart';
+import 'dart:developer';
+
+String leafFunction(void Function() f) {
+  f();
+  return "some constant";
+}
+
+void testFunction() {
+  debugger();
+  leafFunction(() {});
+  debugger();
+}
+
+bool allRangesCompiled(coverage) {
+  for (int i = 0; i < coverage['ranges'].length; i++) {
+    if (!coverage['ranges'][i]['compiled']) {
+      return false;
+    }
+  }
+  return true;
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    var stack = await isolate.getStack();
+
+    // Make sure we are in the right place.
+    expect(stack.type, equals('Stack'));
+    expect(stack['frames'].length, greaterThanOrEqualTo(1));
+    expect(stack['frames'][0].function.name, equals('testFunction'));
+
+    var root = isolate.rootLibrary;
+    await root.load();
+    var func = root.functions.singleWhere((f) => f.name == 'leafFunction');
+    await func.load();
+
+    var expectedRange = {
+      'scriptIndex': 0,
+      'startPos': 386,
+      'endPos': 460,
+      'compiled': true,
+      'coverage': {
+        'hits': [],
+        'misses': [386, 430]
+      }
+    };
+
+    var params = {
+      'reports': ['Coverage'],
+      'scriptId': func.location.script.id,
+      'tokenPos': func.location.tokenPos,
+      'endTokenPos': func.location.endTokenPos,
+      'forceCompile': true
+    };
+    var report = await isolate.invokeRpcNoUpgrade('getSourceReport', params);
+    expect(report['type'], equals('SourceReport'));
+    expect(report['ranges'].length, 1);
+    expect(report['ranges'][0], equals(expectedRange));
+    expect(report['scripts'].length, 1);
+    expect(report['scripts'][0]['uri'],
+        endsWith('coverage_closure_call_test.dart'));
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    var stack = await isolate.getStack();
+
+    // Make sure we are in the right place.
+    expect(stack.type, equals('Stack'));
+    expect(stack['frames'].length, greaterThanOrEqualTo(1));
+    expect(stack['frames'][0].function.name, equals('testFunction'));
+
+    var root = isolate.rootLibrary;
+    await root.load();
+    var func = root.functions.singleWhere((f) => f.name == 'leafFunction');
+    await func.load();
+
+    var expectedRange = {
+      'scriptIndex': 0,
+      'startPos': 386,
+      'endPos': 460,
+      'compiled': true,
+      'coverage': {
+        'hits': [386, 430],
+        'misses': []
+      }
+    };
+
+    var params = {
+      'reports': ['Coverage'],
+      'scriptId': func.location.script.id,
+      'tokenPos': func.location.tokenPos,
+      'endTokenPos': func.location.endTokenPos,
+      'forceCompile': true
+    };
+    var report = await isolate.invokeRpcNoUpgrade('getSourceReport', params);
+    expect(report['type'], equals('SourceReport'));
+    expect(report['ranges'].length, 1);
+    expect(report['ranges'][0], equals(expectedRange));
+    expect(report['scripts'].length, 1);
+    expect(report['scripts'][0]['uri'],
+        endsWith('coverage_closure_call_test.dart'));
+  },
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
diff --git a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
index 9b7cdf5..12ffc1c 100644
--- a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
     final result = await vm.invokeRpcNoUpgrade('getVersion', {});
     expect(result['type'], equals('Version'));
     expect(result['major'], equals(3));
-    expect(result['minor'], equals(51));
+    expect(result['minor'], equals(52));
     expect(result['_privateMajor'], equals(0));
     expect(result['_privateMinor'], equals(0));
   },
diff --git a/runtime/observatory_2/tests/service_2/service_2.status b/runtime/observatory_2/tests/service_2/service_2.status
index 8e5b462..c5a50bb 100644
--- a/runtime/observatory_2/tests/service_2/service_2.status
+++ b/runtime/observatory_2/tests/service_2/service_2.status
@@ -15,10 +15,8 @@
 [ $arch == arm ]
 process_service_test: Pass, Fail # Issue 24344
 
-# Test uses service API and relies on correct class names
 [ $builder_tag == obfuscated ]
-dominator_tree_vm_test: SkipByDesign
-dominator_tree_vm_with_double_field_test: SkipByDesign
+*: SkipByDesign # Responses full of obfuscated names
 
 # Tests with known analyzer issues
 [ $compiler == dart2analyzer ]
@@ -34,12 +32,14 @@
 
 [ $system == android ]
 string_escaping_test: Skip # Issue http://dartbug.com/42094
+uri_mappings_lookup_test: SkipByDesign # Relies on file paths in the SDK.
 
 [ $system == windows ]
 *: Slow
 async_generator_breakpoint_test: Skip # Issue 29145
 dev_fs_http_put_weird_char_test: Skip # Windows disallows carriage returns in paths
 dev_fs_weird_char_test: Skip # Windows disallows question mark in paths
+uri_mappings_lookup_test: SkipByDesign # Relies on file paths in the SDK.
 
 [ $compiler == none && $runtime == vm ]
 evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
diff --git a/runtime/observatory_2/tests/service_2/service_2_kernel.status b/runtime/observatory_2/tests/service_2/service_2_kernel.status
index 322b922..ac51da2 100644
--- a/runtime/observatory_2/tests/service_2/service_2_kernel.status
+++ b/runtime/observatory_2/tests/service_2/service_2_kernel.status
@@ -75,6 +75,7 @@
 code_test: SkipByDesign # Debugger is disabled in AOT mode.
 column_breakpoint_test: SkipByDesign # Debugger is disabled in AOT mode.
 complex_reload_test: SkipByDesign # Debugger is disabled in AOT mode.
+coverage_closure_call_test: SkipByDesign # Debugger and coverage are disabled in AOT mode.
 coverage_const_field_async_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
 coverage_leaf_function_test: SkipByDesign # Debugger is disabled in AOT mode.
 coverage_optimized_function_test: SkipByDesign # Debugger is disabled in AOT mode.
diff --git a/runtime/observatory_2/tests/service_2/uri_mappings_lookup_test.dart b/runtime/observatory_2/tests/service_2/uri_mappings_lookup_test.dart
new file mode 100644
index 0000000..832dcee
--- /dev/null
+++ b/runtime/observatory_2/tests/service_2/uri_mappings_lookup_test.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2021, 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:io';
+
+import 'package:observatory_2/service_io.dart';
+// Already a dependency of package:test.
+import 'package:pool/pool.dart';
+import 'package:test/test.dart';
+
+import 'test_helper.dart';
+
+final tests = <IsolateTest>[
+  (Isolate isolate) async {
+    final scriptUri =
+        'file://${Directory.current.path}/runtime/observatory_2/tests/service_2/uri_mappings_lookup_test.dart';
+    final unresolvedUris = <String>[
+      'package:does_not_exist/does_not_exist.dart', // invalid URI -> null
+      'dart:io', // dart:io -> org-dartlang-sdk:///sdk/lib/io/io.dart
+      'package:pool/pool.dart', // package:pool/pool.dart -> file:///some_dir/pool/lib/pool.dart
+      scriptUri, // file:///abc.dart -> file:///abc.dart
+    ];
+
+    var result = await isolate.invokeRpcNoUpgrade('lookupResolvedPackageUris', {
+      'uris': unresolvedUris,
+    });
+    expect(result['uris'], isNotNull);
+    var uris = result['uris'].cast<String>();
+    expect(uris.length, 4);
+    expect(uris[0], isNull);
+    expect(uris[1], 'org-dartlang-sdk:///sdk/lib/io/io.dart');
+    expect(uris[2], startsWith('file:///'));
+    expect(uris[2], endsWith('third_party/pkg/pool/lib/pool.dart'));
+    expect(uris[3], scriptUri);
+
+    result = await isolate.invokeRpcNoUpgrade('lookupPackageUris', {
+      'uris': [
+        'does_not_exist.dart',
+        ...uris.sublist(1, 4),
+      ]
+    });
+    expect(result['uris'], isNotNull);
+    uris = result['uris'].cast<String>();
+    expect(uris.length, 4);
+    expect(uris[0], isNull);
+    expect(uris[1], unresolvedUris[1]);
+    expect(uris[2], unresolvedUris[2]);
+    expect(uris[3], unresolvedUris[3]);
+  },
+];
+
+void main(args) => runIsolateTests(args, tests);
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 7d69548..8e8c737 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -558,6 +558,9 @@
 constexpr intptr_t RoundWordsToGB(intptr_t size_in_words) {
   return (size_in_words + (GBInWords >> 1)) >> GBInWordsLog2;
 }
+constexpr double WordsToMB(intptr_t size_in_words) {
+  return static_cast<double>(size_in_words) / MBInWords;
+}
 
 constexpr intptr_t kIntptrOne = 1;
 constexpr intptr_t kIntptrMin = (kIntptrOne << (kBitsPerWord - 1));
diff --git a/runtime/tests/concurrency/run_stress_test_shards.dart b/runtime/tests/concurrency/run_stress_test_shards.dart
index 2d31d15..5f29e01 100644
--- a/runtime/tests/concurrency/run_stress_test_shards.dart
+++ b/runtime/tests/concurrency/run_stress_test_shards.dart
@@ -12,6 +12,16 @@
 
 import '../vm/dart/snapshot_test_helper.dart';
 
+int crashCounter = 0;
+
+final Map<String, String> environmentForTests = (() {
+  final env = Map<String, String>.from(Platform.environment);
+  final testMatrix =
+      json.decode(File('tools/bots/test_matrix.json').readAsStringSync());
+  env.addAll(testMatrix['sanitizer_options'].cast<String, String>());
+  return env;
+})();
+
 void forwardStream(Stream<List<int>> input, IOSink output) {
   // Print the information line-by-line.
   input
@@ -22,14 +32,30 @@
   });
 }
 
-Future<bool> run(String executable, List<String> args) async {
+class PotentialCrash {
+  final String test;
+  final int pid;
+  final List<String> binaries;
+  PotentialCrash(this.test, this.pid, this.binaries);
+}
+
+Future<bool> run(
+    String executable, List<String> args, List<PotentialCrash> crashes) async {
   print('Running "$executable ${args.join(' ')}"');
-  final Process process = await Process.start(executable, args);
+  final Process process =
+      await Process.start(executable, args, environment: environmentForTests);
   forwardStream(process.stdout, stdout);
   forwardStream(process.stderr, stderr);
   final int exitCode = await process.exitCode;
   if (exitCode != 0) {
-    print('=> Running "$executable ${args.join(' ')}" failed with $exitCode');
+    // Ignore normal exceptions and compile-time errors for the purpose of
+    // crashdump reporting.
+    if (exitCode != 255 && exitCode != 254) {
+      final crashNr = crashCounter++;
+      print('=> Running "$executable ${args.join(' ')}" failed with $exitCode');
+      print('=> Possible crash $crashNr (pid: ${process.pid})');
+      crashes.add(PotentialCrash('crash-$crashNr', process.pid, [executable]));
+    }
     io.exitCode = 255; // Make this shard fail.
     return false;
   }
@@ -37,7 +63,7 @@
 }
 
 abstract class TestRunner {
-  Future runTest();
+  Future runTest(List<PotentialCrash> crashes);
 }
 
 class JitTestRunner extends TestRunner {
@@ -46,8 +72,8 @@
 
   JitTestRunner(this.buildDir, this.arguments);
 
-  Future runTest() async {
-    await run('$buildDir/dart', arguments);
+  Future runTest(List<PotentialCrash> crashes) async {
+    await run('$buildDir/dart', arguments, crashes);
   }
 }
 
@@ -58,19 +84,62 @@
 
   AotTestRunner(this.buildDir, this.arguments, this.aotArguments);
 
-  Future runTest() async {
+  Future runTest(List<PotentialCrash> crashes) async {
     await withTempDir((String dir) async {
       final elfFile = path.join(dir, 'app.elf');
 
-      if (await run('$buildDir/gen_snapshot',
-          ['--snapshot-kind=app-aot-elf', '--elf=$elfFile', ...arguments])) {
-        await run(
-            '$buildDir/dart_precompiled_runtime', [...aotArguments, elfFile]);
+      if (await run(
+          '$buildDir/gen_snapshot',
+          ['--snapshot-kind=app-aot-elf', '--elf=$elfFile', ...arguments],
+          crashes)) {
+        await run('$buildDir/dart_precompiled_runtime',
+            [...aotArguments, elfFile], crashes);
       }
     });
   }
 }
 
+// Produces a name that tools/utils.py:BaseCoredumpArchiver supports.
+String getArchiveName(String binary) {
+  final parts = binary.split(Platform.pathSeparator);
+  late String mode;
+  late String arch;
+  final buildDir = parts[1];
+  for (final prefix in ['Release', 'Debug', 'Product']) {
+    if (buildDir.startsWith(prefix)) {
+      mode = prefix.toLowerCase();
+      arch = buildDir.substring(prefix.length);
+    }
+  }
+  final name = parts.skip(2).join('__');
+  return 'binary.${mode}_${arch}_${name}';
+}
+
+void writeUnexpectedCrashesFile(List<PotentialCrash> crashes) {
+  // The format of this file is:
+  //
+  //     test-name,pid,binary-file1,binary-file2,...
+  //
+  const unexpectedCrashesFile = 'unexpected-crashes';
+
+  final buffer = StringBuffer();
+  final Set<String> archivedBinaries = {};
+  for (final crash in crashes) {
+    buffer.write('${crash.test},${crash.pid}');
+    for (final binary in crash.binaries) {
+      final archivedName = getArchiveName(binary);
+      buffer.write(',$archivedName');
+      if (!archivedBinaries.contains(archivedName)) {
+        File(binary).copySync(archivedName);
+        archivedBinaries.add(archivedName);
+      }
+    }
+    buffer.writeln();
+  }
+
+  File(unexpectedCrashesFile).writeAsStringSync(buffer.toString());
+}
+
 const int tsanShards = 200;
 
 final configurations = <TestRunner>[
@@ -120,11 +189,14 @@
     ..addOption('shards', help: 'number of shards used', defaultsTo: '1')
     ..addOption('shard', help: 'shard id', defaultsTo: '1')
     ..addOption('output-directory',
-        help: 'unused parameter to make sharding infra work', defaultsTo: '');
+        help: 'unused parameter to make sharding infra work', defaultsTo: '')
+    ..addFlag('copy-coredumps',
+        help: 'whether to copy binaries for coredumps', defaultsTo: false);
 
   final options = parser.parse(arguments);
   final shards = int.parse(options['shards']);
   final shard = int.parse(options['shard']) - 1;
+  final copyCoredumps = options['copy-coredumps'] as bool;
 
   // Tasks will eventually be killed if they do not have any output for some
   // time. So we'll explicitly print something every 4 minutes.
@@ -140,8 +212,12 @@
         thisShardsConfigurations.add(configurations[i]);
       }
     }
+    final crashes = <PotentialCrash>[];
     for (final config in thisShardsConfigurations) {
-      await config.runTest();
+      await config.runTest(crashes);
+    }
+    if (!crashes.isEmpty && copyCoredumps) {
+      writeUnexpectedCrashesFile(crashes);
     }
   } finally {
     timer.cancel();
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index 80ae9a9..f851825 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -63,7 +63,6 @@
     "../vm/dart/regress_39811_test.dart",
     "../vm/dart/regress_39905_test.dart",
     "../vm/dart/regress_40635_test.dart",
-    "../vm/dart/regress_40753_test.dart",
     "../vm/dart/regress_40754_test.dart",
     "../vm/dart/regress_40809_test.dart",
     "../vm/dart/regress_40964_test.dart",
@@ -3483,7 +3482,6 @@
     "../vm/dart_2/regress_39811_test.dart",
     "../vm/dart_2/regress_39905_test.dart",
     "../vm/dart_2/regress_40635_test.dart",
-    "../vm/dart_2/regress_40753_test.dart",
     "../vm/dart_2/regress_40754_test.dart",
     "../vm/dart_2/regress_40809_test.dart",
     "../vm/dart_2/regress_40964_test.dart",
diff --git a/runtime/tests/vm/dart/isolates/fast_object_copy2_test.dart b/runtime/tests/vm/dart/isolates/fast_object_copy2_test.dart
index 20b5557..3977179 100644
--- a/runtime/tests/vm/dart/isolates/fast_object_copy2_test.dart
+++ b/runtime/tests/vm/dart/isolates/fast_object_copy2_test.dart
@@ -76,6 +76,7 @@
   RegExp('a'),
   Isolate.current.pauseCapability,
   Int32x4(1, 2, 3, 4),
+  StackTrace.current,
 ];
 
 final copyableClosures = <dynamic>[
diff --git a/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart b/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
index 8509db3..6cc3be4 100644
--- a/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
+++ b/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
@@ -28,6 +28,25 @@
   void m() {}
 }
 
+final nonCopyableClosures = <dynamic>[
+  (() {
+    final a = ClassWithNativeFields();
+    return a.m;
+  })(),
+  (() {
+    final a = ClassWithNativeFields();
+    dynamic inner() => a;
+    return inner;
+  })(),
+  (() {
+    foo(var arg) {
+      return () => arg;
+    }
+
+    return foo(ClassWithNativeFields());
+  })(),
+];
+
 final Uint8List largeExternalTypedData =
     File(Platform.resolvedExecutable).readAsBytesSync()..[0] = 42;
 final Uint8List largeInternalTypedData = Uint8List(20 * 1024 * 1024)..[0] = 42;
@@ -587,6 +606,7 @@
   }
 
   Future testWeakProperty() async {
+    print('testWeakProperty');
     final key = Object();
     final expando1 = Expando();
     final expando2 = Expando();
@@ -651,24 +671,6 @@
 
   Future testForbiddenClosures() async {
     print('testForbiddenClosures');
-    final nonCopyableClosures = <dynamic>[
-      (() {
-        final a = ClassWithNativeFields();
-        return a.m;
-      })(),
-      (() {
-        final a = ClassWithNativeFields();
-        dynamic inner() => a;
-        return inner;
-      })(),
-      (() {
-        foo(var arg) {
-          return () => arg;
-        }
-
-        return foo(ClassWithNativeFields());
-      })(),
-    ];
     for (final closure in nonCopyableClosures) {
       Expect.throwsArgumentError(() => sendPort.send(closure));
     }
diff --git a/runtime/tests/vm/dart/regress_47425_test.dart b/runtime/tests/vm/dart/regress_47425_test.dart
new file mode 100644
index 0000000..f8d6576
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_47425_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2021, 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.
+
+// Regression test for https://github.com/dart-lang/sdk/issues/47425.
+// Verifies that Type.operator== works on generic types which
+// classes are not finalized.
+
+import 'package:expect/expect.dart';
+
+void testTypesEquality<A, B>(bool expected) {
+  Expect.equals(expected, A == B);
+}
+
+void withNewBox() {
+  Box();
+  testTypesEquality<Box<num>, Box<int>>(false);
+}
+
+void withoutNewBox() {
+  testTypesEquality<Box<num>, Box<int>>(false);
+}
+
+class Box<T> {}
+
+void main() {
+  testTypesEquality<num, int>(false);
+  testTypesEquality<Box<num>, Box<int>>(false);
+  testTypesEquality<Box<num>, Box<num>>(true);
+
+  withoutNewBox();
+  withNewBox();
+  withoutNewBox();
+
+  testTypesEquality<Box<num>, Box<int>>(false);
+  testTypesEquality<Box<num>, Box<num>>(true);
+}
diff --git a/runtime/tests/vm/dart/regress_47468_test.dart b/runtime/tests/vm/dart/regress_47468_test.dart
new file mode 100644
index 0000000..1ff1bbe
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_47468_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2021, 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.
+
+// Regression test for https://github.com/dart-lang/sdk/issues/47468.
+// Verifies that the sending empty non-const maps works
+
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:isolate';
+
+void main() async {
+  final nonConstMap = <int, Object>{};
+  final receivePort = ReceivePort();
+  final sendPort = receivePort.sendPort;
+  sendPort.send(nonConstMap);
+  await receivePort.first;
+}
diff --git a/runtime/tests/vm/dart/rematerialize_unboxed_double_field_test.dart b/runtime/tests/vm/dart/rematerialize_unboxed_double_field_test.dart
index cf764a2..b025120 100644
--- a/runtime/tests/vm/dart/rematerialize_unboxed_double_field_test.dart
+++ b/runtime/tests/vm/dart/rematerialize_unboxed_double_field_test.dart
@@ -2,7 +2,7 @@
 // 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.
 //
-// VMOptions=--deterministic --optimization-counter-threshold=10 --unbox-numeric-fields
+// VMOptions=--deterministic --optimization-counter-threshold=100 --unbox-numeric-fields
 
 import 'package:expect/expect.dart';
 
@@ -29,9 +29,9 @@
 
 void main(List<String> args) {
   var c = C();
-  for (var i = 0; i < 100; i++) c.d = 2.0;
+  for (var i = 0; i < 200; i++) c.d = 2.0;
 
-  for (var i = 0; i < 100; i++) {
+  for (var i = 0; i < 200; i++) {
     foo(NoopSink());
   }
 
diff --git a/runtime/tests/vm/dart/sendandexit_test.dart b/runtime/tests/vm/dart/sendandexit_test.dart
index 235a3c2..a48ec13 100644
--- a/runtime/tests/vm/dart/sendandexit_test.dart
+++ b/runtime/tests/vm/dart/sendandexit_test.dart
@@ -12,6 +12,11 @@
 
 import "package:expect/expect.dart";
 
+import "isolates/fast_object_copy_test.dart" show nonCopyableClosures;
+
+import "isolates/fast_object_copy2_test.dart"
+    show sharableObjects, copyableClosures;
+
 doNothingWorker(data) {}
 
 spawnWorker(worker, data) async {
@@ -23,17 +28,6 @@
   return await completer.future;
 }
 
-verifyCantSendAnonymousClosure() async {
-  final receivePort = ReceivePort();
-  Expect.throws(
-      () => Isolate.exit(receivePort.sendPort, () {}),
-      (e) =>
-          e.toString() ==
-          'Invalid argument: "Illegal argument in isolate message : '
-              '(object is a closure - Function \'<anonymous closure>\': static.)"');
-  receivePort.close();
-}
-
 class NativeWrapperClass extends NativeFieldWrapperClass1 {}
 
 verifyCantSendNative() async {
@@ -50,23 +44,55 @@
   final receivePort = ReceivePort();
   Expect.throws(
       () => Isolate.exit(receivePort.sendPort, receivePort),
-      // closure is encountered first before we reach ReceivePort instance
       (e) => e.toString().startsWith(
           'Invalid argument: "Illegal argument in isolate message : '
-          '(object is a closure - Function \''));
+          '(object is a ReceivePort)\"'));
   receivePort.close();
 }
 
-verifyCantSendRegexp() async {
-  final receivePort = ReceivePort();
-  final regexp = RegExp("");
-  Expect.throws(
-      () => Isolate.exit(receivePort.sendPort, regexp),
-      (e) =>
-          e.toString() ==
-          'Invalid argument: '
-              '"Illegal argument in isolate message : (object is a RegExp)"');
-  receivePort.close();
+verifyCantSendNonCopyable() async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final isolate = await Isolate.spawn((SendPort sendPort) {
+    for (final closure in nonCopyableClosures) {
+      Expect.throwsArgumentError(() => Isolate.exit(sendPort, closure));
+    }
+    sendPort.send(true);
+  }, port.sendPort);
+
+  await inbox.moveNext();
+  Expect.isTrue(inbox.current);
+  port.close();
+}
+
+sendShareable(SendPort sendPort) {
+  Isolate.exit(sendPort, sharableObjects);
+}
+
+verifyCanSendShareable() async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final isolate = await Isolate.spawn(sendShareable, port.sendPort);
+
+  await inbox.moveNext();
+  final result = inbox.current;
+  Expect.equals(sharableObjects.length, result.length);
+  port.close();
+}
+
+sendCopyable(SendPort sendPort) {
+  Isolate.exit(sendPort, copyableClosures);
+}
+
+verifyCanSendCopyableClosures() async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final isolate = await Isolate.spawn(sendCopyable, port.sendPort);
+
+  await inbox.moveNext();
+  final result = inbox.current;
+  Expect.equals(copyableClosures.length, result.length);
+  port.close();
 }
 
 add(a, b) => a + b;
@@ -75,16 +101,6 @@
   Isolate.exit(sendPort, add);
 }
 
-verifyCanSendStaticMethod() async {
-  final port = ReceivePort();
-  final inbox = StreamIterator<dynamic>(port);
-  final isolate = await Isolate.spawn(worker, port.sendPort);
-
-  await inbox.moveNext();
-  Expect.equals(5, (inbox.current)(2, 3));
-  port.close();
-}
-
 verifyExitMessageIsPostedLast() async {
   final port = ReceivePort();
   final inbox = new StreamIterator<dynamic>(port);
@@ -108,10 +124,9 @@
 }
 
 main() async {
-  await verifyCantSendAnonymousClosure();
   await verifyCantSendNative();
   await verifyCantSendReceivePort();
-  await verifyCantSendRegexp();
-  await verifyCanSendStaticMethod();
+  await verifyCanSendShareable();
+  await verifyCanSendCopyableClosures();
   await verifyExitMessageIsPostedLast();
 }
diff --git a/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart b/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart
index 9b74eca..526c449 100644
--- a/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart
+++ b/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart
@@ -59,8 +59,9 @@
   return profile;
 }
 
-Future<void> testJIT(String dillPath) async {
-  final description = 'jit';
+Future<void> testJIT(String dillPath, String snapshotKind) async {
+  final includesCode = snapshotKind == 'core-jit';
+  final description = snapshotKind;
   Expect.isTrue(_seenDescriptions.add(description),
       "test configuration $description would be run multiple times");
 
@@ -73,9 +74,11 @@
     final isolateDataPath = path.join(tempDir, 'isolate_data.bin');
 
     await run(genSnapshot, <String>[
-      '--snapshot-kind=core-jit',
-      '--vm_snapshot_instructions=$vmTextPath',
-      '--isolate_snapshot_instructions=$isolateTextPath',
+      '--snapshot-kind=$snapshotKind',
+      if (includesCode) ...<String>[
+        '--vm_snapshot_instructions=$vmTextPath',
+        '--isolate_snapshot_instructions=$isolateTextPath',
+      ],
       '--vm_snapshot_data=$vmDataPath',
       '--isolate_snapshot_data=$isolateDataPath',
       "--write-v8-snapshot-profile-to=$profilePath",
@@ -89,10 +92,12 @@
     // Verify that the total size of the snapshot text and data sections is
     // the same as the sum of the shallow sizes of all objects in the profile.
     // This ensures that all bytes are accounted for in some way.
-    final actualSize = await File(vmTextPath).length() +
-        await File(isolateTextPath).length() +
-        await File(vmDataPath).length() +
-        await File(isolateDataPath).length();
+    int actualSize =
+        await File(vmDataPath).length() + await File(isolateDataPath).length();
+    if (includesCode) {
+      actualSize += await File(vmTextPath).length() +
+          await File(isolateTextPath).length();
+    }
     final expectedSize =
         profile.nodes.fold<int>(0, (size, n) => size + n.selfSize);
 
@@ -426,8 +431,10 @@
     //   extra information that needs stripping), so no need to specify
     //   stripUtil for useAsm tests.
 
-    // Test profile generation with a core JIT snapshot.
-    await testJIT(jitDillPath);
+    // Test profile generation with a core snapshot (no code).
+    await testJIT(jitDillPath, 'core');
+    // Test profile generation with a core JIT snapshot (with code).
+    await testJIT(jitDillPath, 'core-jit');
 
     // Test unstripped ELF generation directly.
     await testAOT(aotDillPath);
diff --git a/runtime/tests/vm/dart_2/isolates/fast_object_copy2_test.dart b/runtime/tests/vm/dart_2/isolates/fast_object_copy2_test.dart
index a0aa022..9b8c1f0 100644
--- a/runtime/tests/vm/dart_2/isolates/fast_object_copy2_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/fast_object_copy2_test.dart
@@ -77,6 +77,7 @@
   RegExp('a'),
   Isolate.current.pauseCapability,
   Int32x4(1, 2, 3, 4),
+  StackTrace.current,
 ];
 
 final copyableClosures = <dynamic>[
diff --git a/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart b/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart
index bad2e3a..79de0c5 100644
--- a/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart
@@ -30,6 +30,25 @@
   void m() {}
 }
 
+final nonCopyableClosures = <dynamic>[
+  (() {
+    final a = ClassWithNativeFields();
+    return a.m;
+  })(),
+  (() {
+    final a = ClassWithNativeFields();
+    dynamic inner() => a;
+    return inner;
+  })(),
+  (() {
+    foo(var arg) {
+      return () => arg;
+    }
+
+    return foo(ClassWithNativeFields());
+  })(),
+];
+
 final Uint8List largeExternalTypedData =
     File(Platform.resolvedExecutable).readAsBytesSync()..[0] = 42;
 final Uint8List largeInternalTypedData = Uint8List(20 * 1024 * 1024)..[0] = 42;
@@ -589,6 +608,7 @@
   }
 
   Future testWeakProperty() async {
+    print('testWeakProperty');
     final key = Object();
     final expando1 = Expando();
     final expando2 = Expando();
@@ -653,24 +673,6 @@
 
   Future testForbiddenClosures() async {
     print('testForbiddenClosures');
-    final nonCopyableClosures = <dynamic>[
-      (() {
-        final a = ClassWithNativeFields();
-        return a.m;
-      })(),
-      (() {
-        final a = ClassWithNativeFields();
-        dynamic inner() => a;
-        return inner;
-      })(),
-      (() {
-        foo(var arg) {
-          return () => arg;
-        }
-
-        return foo(ClassWithNativeFields());
-      })(),
-    ];
     for (final closure in nonCopyableClosures) {
       Expect.throwsArgumentError(() => sendPort.send(closure));
     }
diff --git a/runtime/tests/vm/dart_2/regress_47425_test.dart b/runtime/tests/vm/dart_2/regress_47425_test.dart
new file mode 100644
index 0000000..7cd3cfa
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_47425_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2021, 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.
+
+// Regression test for https://github.com/dart-lang/sdk/issues/47425.
+// Verifies that Type.operator== works on generic types which
+// classes are not finalized.
+
+// @dart = 2.9
+
+import 'package:expect/expect.dart';
+
+void testTypesEquality<A, B>(bool expected) {
+  Expect.equals(expected, A == B);
+}
+
+void withNewBox() {
+  Box();
+  testTypesEquality<Box<num>, Box<int>>(false);
+}
+
+void withoutNewBox() {
+  testTypesEquality<Box<num>, Box<int>>(false);
+}
+
+class Box<T> {}
+
+void main() {
+  testTypesEquality<num, int>(false);
+  testTypesEquality<Box<num>, Box<int>>(false);
+  testTypesEquality<Box<num>, Box<num>>(true);
+
+  withoutNewBox();
+  withNewBox();
+  withoutNewBox();
+
+  testTypesEquality<Box<num>, Box<int>>(false);
+  testTypesEquality<Box<num>, Box<num>>(true);
+}
diff --git a/runtime/tests/vm/dart_2/regress_47468_test.dart b/runtime/tests/vm/dart_2/regress_47468_test.dart
new file mode 100644
index 0000000..b1ccb10
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_47468_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2021, 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.
+
+// Regression test for https://github.com/dart-lang/sdk/issues/47468.
+// Verifies that the sending empty non-const maps works
+
+// VMOptions=--no-enable-isolate-groups
+
+// @dart = 2.9
+
+import 'dart:isolate';
+
+void main() async {
+  final nonConstMap = <int, Object>{};
+  final receivePort = ReceivePort();
+  final sendPort = receivePort.sendPort;
+  sendPort.send(nonConstMap);
+  await receivePort.first;
+}
diff --git a/runtime/tests/vm/dart_2/rematerialize_unboxed_double_field_test.dart b/runtime/tests/vm/dart_2/rematerialize_unboxed_double_field_test.dart
index d8e037f..b15d7ff 100644
--- a/runtime/tests/vm/dart_2/rematerialize_unboxed_double_field_test.dart
+++ b/runtime/tests/vm/dart_2/rematerialize_unboxed_double_field_test.dart
@@ -2,7 +2,7 @@
 // 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.
 //
-// VMOptions=--deterministic --optimization-counter-threshold=10 --unbox-numeric-fields
+// VMOptions=--deterministic --optimization-counter-threshold=100 --unbox-numeric-fields
 
 // @dart = 2.9
 
@@ -31,9 +31,9 @@
 
 void main(List<String> args) {
   var c = C();
-  for (var i = 0; i < 100; i++) c.d = 2.0;
+  for (var i = 0; i < 200; i++) c.d = 2.0;
 
-  for (var i = 0; i < 100; i++) {
+  for (var i = 0; i < 200; i++) {
     foo(NoopSink());
   }
 
diff --git a/runtime/tests/vm/dart_2/sendandexit_test.dart b/runtime/tests/vm/dart_2/sendandexit_test.dart
index 3ee64fe..bf2ffe2 100644
--- a/runtime/tests/vm/dart_2/sendandexit_test.dart
+++ b/runtime/tests/vm/dart_2/sendandexit_test.dart
@@ -14,6 +14,11 @@
 
 import "package:expect/expect.dart";
 
+import "isolates/fast_object_copy_test.dart" show nonCopyableClosures;
+
+import "isolates/fast_object_copy2_test.dart"
+    show sharableObjects, copyableClosures;
+
 doNothingWorker(data) {}
 
 spawnWorker(worker, data) async {
@@ -25,17 +30,6 @@
   return await completer.future;
 }
 
-verifyCantSendAnonymousClosure() async {
-  final receivePort = ReceivePort();
-  Expect.throws(
-      () => Isolate.exit(receivePort.sendPort, () {}),
-      (e) =>
-          e.toString() ==
-          'Invalid argument: "Illegal argument in isolate message : '
-              '(object is a closure - Function \'<anonymous closure>\': static.)"');
-  receivePort.close();
-}
-
 class NativeWrapperClass extends NativeFieldWrapperClass1 {}
 
 verifyCantSendNative() async {
@@ -52,23 +46,55 @@
   final receivePort = ReceivePort();
   Expect.throws(
       () => Isolate.exit(receivePort.sendPort, receivePort),
-      // closure is encountered first before we reach ReceivePort instance
       (e) => e.toString().startsWith(
           'Invalid argument: "Illegal argument in isolate message : '
-          '(object is a closure - Function \''));
+          '(object is a ReceivePort)\"'));
   receivePort.close();
 }
 
-verifyCantSendRegexp() async {
-  final receivePort = ReceivePort();
-  final regexp = RegExp("");
-  Expect.throws(
-      () => Isolate.exit(receivePort.sendPort, regexp),
-      (e) =>
-          e.toString() ==
-          'Invalid argument: '
-              '"Illegal argument in isolate message : (object is a RegExp)"');
-  receivePort.close();
+verifyCantSendNonCopyable() async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final isolate = await Isolate.spawn((sendPort) {
+    for (final closure in nonCopyableClosures) {
+      Expect.throwsArgumentError(() => Isolate.exit(sendPort, closure));
+    }
+    sendPort.send(true);
+  }, port.sendPort);
+
+  await inbox.moveNext();
+  Expect.isTrue(inbox.current);
+  port.close();
+}
+
+sendShareable(SendPort sendPort) {
+  Isolate.exit(sendPort, sharableObjects);
+}
+
+verifyCanSendShareable() async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final isolate = await Isolate.spawn(sendShareable, port.sendPort);
+
+  await inbox.moveNext();
+  final result = inbox.current;
+  Expect.equals(sharableObjects.length, result.length);
+  port.close();
+}
+
+sendCopyable(SendPort sendPort) {
+  Isolate.exit(sendPort, copyableClosures);
+}
+
+verifyCanSendCopyableClosures() async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+  final isolate = await Isolate.spawn(sendCopyable, port.sendPort);
+
+  await inbox.moveNext();
+  final result = inbox.current;
+  Expect.equals(copyableClosures.length, result.length);
+  port.close();
 }
 
 add(a, b) => a + b;
@@ -77,16 +103,6 @@
   Isolate.exit(sendPort, add);
 }
 
-verifyCanSendStaticMethod() async {
-  final port = ReceivePort();
-  final inbox = StreamIterator<dynamic>(port);
-  final isolate = await Isolate.spawn(worker, port.sendPort);
-
-  await inbox.moveNext();
-  Expect.equals(5, (inbox.current)(2, 3));
-  port.close();
-}
-
 verifyExitMessageIsPostedLast() async {
   final port = ReceivePort();
   final inbox = new StreamIterator<dynamic>(port);
@@ -110,10 +126,10 @@
 }
 
 main() async {
-  await verifyCantSendAnonymousClosure();
   await verifyCantSendNative();
   await verifyCantSendReceivePort();
-  await verifyCantSendRegexp();
-  await verifyCanSendStaticMethod();
+  await verifyCantSendNonCopyable();
+  await verifyCanSendShareable();
+  await verifyCanSendCopyableClosures();
   await verifyExitMessageIsPostedLast();
 }
diff --git a/runtime/tests/vm/dart_2/v8_snapshot_profile_writer_test.dart b/runtime/tests/vm/dart_2/v8_snapshot_profile_writer_test.dart
index 37057d8..a4d23af 100644
--- a/runtime/tests/vm/dart_2/v8_snapshot_profile_writer_test.dart
+++ b/runtime/tests/vm/dart_2/v8_snapshot_profile_writer_test.dart
@@ -61,8 +61,9 @@
   return profile;
 }
 
-Future<void> testJIT(String dillPath) async {
-  final description = 'jit';
+Future<void> testJIT(String dillPath, String snapshotKind) async {
+  final includesCode = snapshotKind == 'core-jit';
+  final description = snapshotKind;
   Expect.isTrue(_seenDescriptions.add(description),
       "test configuration $description would be run multiple times");
 
@@ -75,9 +76,11 @@
     final isolateDataPath = path.join(tempDir, 'isolate_data.bin');
 
     await run(genSnapshot, <String>[
-      '--snapshot-kind=core-jit',
-      '--vm_snapshot_instructions=$vmTextPath',
-      '--isolate_snapshot_instructions=$isolateTextPath',
+      '--snapshot-kind=$snapshotKind',
+      if (includesCode) ...<String>[
+        '--vm_snapshot_instructions=$vmTextPath',
+        '--isolate_snapshot_instructions=$isolateTextPath',
+      ],
       '--vm_snapshot_data=$vmDataPath',
       '--isolate_snapshot_data=$isolateDataPath',
       "--write-v8-snapshot-profile-to=$profilePath",
@@ -91,10 +94,12 @@
     // Verify that the total size of the snapshot text and data sections is
     // the same as the sum of the shallow sizes of all objects in the profile.
     // This ensures that all bytes are accounted for in some way.
-    final actualSize = await File(vmTextPath).length() +
-        await File(isolateTextPath).length() +
-        await File(vmDataPath).length() +
-        await File(isolateDataPath).length();
+    int actualSize =
+        await File(vmDataPath).length() + await File(isolateDataPath).length();
+    if (includesCode) {
+      actualSize += await File(vmTextPath).length() +
+          await File(isolateTextPath).length();
+    }
     final expectedSize =
         profile.nodes.fold<int>(0, (size, n) => size + n.selfSize);
 
@@ -420,8 +425,10 @@
     //   extra information that needs stripping), so no need to specify
     //   stripUtil for useAsm tests.
 
-    // Test profile generation with a core JIT snapshot.
-    await testJIT(jitDillPath);
+    // Test profile generation with a core snapshot (no code).
+    await testJIT(jitDillPath, 'core');
+    // Test profile generation with a core JIT snapshot (with code).
+    await testJIT(jitDillPath, 'core-jit');
 
     // Test unstripped ELF generation directly.
     await testAOT(aotDillPath);
diff --git a/runtime/tools/ffi/sdk_lib_ffi_generator.dart b/runtime/tools/ffi/sdk_lib_ffi_generator.dart
index 3b68036..d44c2ec 100644
--- a/runtime/tools/ffi/sdk_lib_ffi_generator.dart
+++ b/runtime/tools/ffi/sdk_lib_ffi_generator.dart
@@ -27,6 +27,7 @@
   Config("IntPtr", "int", kDoNotEmit, kIntPtrElementSize),
   Config("Float", "double", "Float32List", 4),
   Config("Double", "double", "Float64List", 8),
+  Config("Bool", "bool", kDoNotEmit, 1),
 ];
 
 //
@@ -92,8 +93,12 @@
     }
   } else if (nativeType == "Float") {
     property = "float";
-  } else {
+  } else if (nativeType == "Double") {
     property = "double";
+  } else if (nativeType == "Bool") {
+    property = "bool";
+  } else {
+    throw "Unexpected type: $nativeType";
   }
 
   const platformIntPtr = """
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index 1d74f0a..11fe806 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -2290,9 +2290,35 @@
       s->WriteUnsigned(length);
       uint8_t* entry_bits = pool->untag()->entry_bits();
       for (intptr_t j = 0; j < length; j++) {
-        s->Write<uint8_t>(entry_bits[j]);
         UntaggedObjectPool::Entry& entry = pool->untag()->data()[j];
-        switch (ObjectPool::TypeBits::decode(entry_bits[j])) {
+        uint8_t bits = entry_bits[j];
+        ObjectPool::EntryType type = ObjectPool::TypeBits::decode(bits);
+        if (weak && (type == ObjectPool::EntryType::kTaggedObject)) {
+          // By default, every switchable call site will put (ic_data, code)
+          // into the object pool. The [code] is initialized (at AOT
+          // compile-time) to be [StubCode::SwitchableCallMiss] or
+          // [StubCode::MegamorphicCall].
+          //
+          // In --use-bare-instruction we reduce the extra indirection via
+          // the [code] object and store instead (ic_data, entrypoint) in
+          // the object pool.
+          //
+          // Since the actual [entrypoint] is only known at AOT runtime we
+          // switch all existing entries for these stubs to entrypoints
+          // encoded as EntryType::kSwitchableCallMissEntryPoint and
+          // EntryType::kMegamorphicCallEntryPoint.
+          if (entry.raw_obj_ == StubCode::SwitchableCallMiss().ptr()) {
+            type = ObjectPool::EntryType::kSwitchableCallMissEntryPoint;
+            bits = ObjectPool::EncodeBits(type,
+                                          ObjectPool::Patchability::kPatchable);
+          } else if (entry.raw_obj_ == StubCode::MegamorphicCall().ptr()) {
+            type = ObjectPool::EntryType::kMegamorphicCallEntryPoint;
+            bits = ObjectPool::EncodeBits(type,
+                                          ObjectPool::Patchability::kPatchable);
+          }
+        }
+        s->Write<uint8_t>(bits);
+        switch (type) {
           case ObjectPool::EntryType::kTaggedObject: {
             if ((entry.raw_obj_ == StubCode::CallNoScopeNative().ptr()) ||
                 (entry.raw_obj_ == StubCode::CallAutoScopeNative().ptr())) {
@@ -2314,11 +2340,15 @@
             s->Write<intptr_t>(entry.raw_value_);
             break;
           }
-          case ObjectPool::EntryType::kNativeFunction:
-          case ObjectPool::EntryType::kNativeFunctionWrapper: {
+          case ObjectPool::EntryType::kNativeFunction: {
             // Write nothing. Will initialize with the lazy link entry.
             break;
           }
+          case ObjectPool::EntryType::kSwitchableCallMissEntryPoint:
+          case ObjectPool::EntryType::kMegamorphicCallEntryPoint:
+            // Write nothing. Entry point is initialized during
+            // snapshot deserialization.
+            break;
           default:
             UNREACHABLE();
         }
@@ -2351,6 +2381,19 @@
   void ReadFill(Deserializer* d, bool primary) {
     ASSERT(!is_canonical());  // Never canonical.
     fill_position_ = d->position();
+#if defined(DART_PRECOMPILED_RUNTIME)
+    const uint8_t immediate_bits =
+        ObjectPool::EncodeBits(ObjectPool::EntryType::kImmediate,
+                               ObjectPool::Patchability::kPatchable);
+    uword switchable_call_miss_entry_point = 0;
+    uword megamorphic_call_entry_point = 0;
+    if (FLAG_use_bare_instructions) {
+      switchable_call_miss_entry_point =
+          StubCode::SwitchableCallMiss().MonomorphicEntryPoint();
+      megamorphic_call_entry_point =
+          StubCode::MegamorphicCall().MonomorphicEntryPoint();
+    }
+#endif  // defined(DART_PRECOMPILED_RUNTIME)
 
     for (intptr_t id = start_index_; id < stop_index_; id++) {
       const intptr_t length = d->ReadUnsigned();
@@ -2375,6 +2418,20 @@
             entry.raw_value_ = static_cast<intptr_t>(new_entry);
             break;
           }
+#if defined(DART_PRECOMPILED_RUNTIME)
+          case ObjectPool::EntryType::kSwitchableCallMissEntryPoint:
+            ASSERT(FLAG_use_bare_instructions);
+            pool->untag()->entry_bits()[j] = immediate_bits;
+            entry.raw_value_ =
+                static_cast<intptr_t>(switchable_call_miss_entry_point);
+            break;
+          case ObjectPool::EntryType::kMegamorphicCallEntryPoint:
+            ASSERT(FLAG_use_bare_instructions);
+            pool->untag()->entry_bits()[j] = immediate_bits;
+            entry.raw_value_ =
+                static_cast<intptr_t>(megamorphic_call_entry_point);
+            break;
+#endif  // defined(DART_PRECOMPILED_RUNTIME)
           default:
             UNREACHABLE();
         }
@@ -3787,14 +3844,9 @@
 
     PushFromTo(type);
 
-    if (type->untag()->type_class_id()->IsHeapObject()) {
-      // Type class is still an unresolved class.
-      UNREACHABLE();
-    }
-
-    SmiPtr raw_type_class_id = Smi::RawCast(type->untag()->type_class_id());
+    ASSERT(type->untag()->type_class_id_ != kIllegalCid);
     ClassPtr type_class =
-        s->isolate_group()->class_table()->At(Smi::Value(raw_type_class_id));
+        s->isolate_group()->class_table()->At(type->untag()->type_class_id_);
     s->Push(type_class);
   }
 
@@ -3826,9 +3878,8 @@
   // inserted into the canonical_types set.
   // Keep in sync with Type::Canonicalize.
   virtual bool IsInCanonicalSet(Serializer* s, TypePtr type) {
-    SmiPtr raw_type_class_id = Smi::RawCast(type->untag()->type_class_id());
     ClassPtr type_class =
-        s->isolate_group()->class_table()->At(Smi::Value(raw_type_class_id));
+        s->isolate_group()->class_table()->At(type->untag()->type_class_id_);
     if (type_class->untag()->declaration_type() != type) {
       return true;
     }
@@ -3841,6 +3892,9 @@
   void WriteType(Serializer* s, TypePtr type) {
     AutoTraceObject(type);
     WriteFromTo(type);
+    COMPILE_ASSERT(
+        std::is_unsigned<decltype(UntaggedType::type_class_id_)>::value);
+    s->WriteUnsigned(type->untag()->type_class_id_);
     ASSERT(type->untag()->type_state_ < (1 << UntaggedType::kTypeStateBitSize));
     ASSERT(type->untag()->nullability_ < (1 << kNullabilityBitSize));
     static_assert(UntaggedType::kTypeStateBitSize + kNullabilityBitSize <=
@@ -3877,6 +3931,9 @@
       Deserializer::InitializeHeader(type, kTypeCid, Type::InstanceSize(),
                                      primary && is_canonical());
       ReadFromTo(type);
+      COMPILE_ASSERT(
+          std::is_unsigned<decltype(UntaggedType::type_class_id_)>::value);
+      type->untag()->type_class_id_ = d->ReadUnsigned();
       const uint8_t combined = d->Read<uint8_t>();
       type->untag()->type_state_ = combined >> kNullabilityBitSize;
       type->untag()->nullability_ = combined & kNullabilityBitMask;
@@ -5470,7 +5527,7 @@
 
     if (!Snapshot::IncludesCode(s->kind())) {
       for (intptr_t i = 0; i < StubCode::NumEntries(); i++) {
-        s->AddBaseObject(StubCode::EntryAt(i).ptr(), "Code", "<stub code>");
+        s->AddBaseObject(StubCode::EntryAt(i).ptr());
       }
     }
   }
@@ -6785,13 +6842,13 @@
   const intptr_t version_len = strlen(expected_version);
   WriteBytes(reinterpret_cast<const uint8_t*>(expected_version), version_len);
 
-  const char* expected_features =
+  char* expected_features =
       Dart::FeaturesString(IsolateGroup::Current(), is_vm_snapshot, kind_);
   ASSERT(expected_features != NULL);
   const intptr_t features_len = strlen(expected_features);
   WriteBytes(reinterpret_cast<const uint8_t*>(expected_features),
              features_len + 1);
-  free(const_cast<char*>(expected_features));
+  free(expected_features);
 }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -6894,6 +6951,8 @@
   // Code cluster should be deserialized before Function as
   // FunctionDeserializationCluster::ReadFill uses instructions table
   // which is filled in CodeDeserializationCluster::ReadFill.
+  // Code cluster should also precede ObjectPool as its ReadFill uses
+  // entry points of stubs.
   ADD_NON_CANONICAL_NEXT(kCodeCid)
   // The function cluster should be deserialized before any closures, as
   // PostLoad for closures caches the entry point found in the function.
@@ -7774,6 +7833,8 @@
 };
 
 void Deserializer::Deserialize(DeserializationRoots* roots) {
+  const void* clustered_start = CurrentBufferAddress();
+
   Array& refs = Array::Handle(zone_);
   num_base_objects_ = ReadUnsigned();
   num_objects_ = ReadUnsigned();
@@ -7867,8 +7928,8 @@
 
   roots->PostLoad(this, refs);
 
-#if defined(DEBUG)
   auto isolate_group = thread()->isolate_group();
+#if defined(DEBUG)
   isolate_group->ValidateClassTable();
   if (isolate_group != Dart::vm_isolate()->group()) {
     isolate_group->heap()->Verify();
@@ -7882,6 +7943,13 @@
       clusters_[i]->PostLoad(this, refs, primary);
     }
   }
+
+  if (isolate_group->snapshot_is_dontneed_safe()) {
+    size_t clustered_length = reinterpret_cast<uword>(CurrentBufferAddress()) -
+                              reinterpret_cast<uword>(clustered_start);
+    VirtualMemory::DontNeed(const_cast<void*>(clustered_start),
+                            clustered_length);
+  }
 }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -8305,7 +8373,6 @@
   ProgramDeserializationRoots roots(thread_->isolate_group()->object_store());
   deserializer.Deserialize(&roots);
 
-  PatchGlobalObjectPool();
   InitializeBSS();
 
   return ApiError::null();
@@ -8351,52 +8418,11 @@
   UnitDeserializationRoots roots(unit);
   deserializer.Deserialize(&roots);
 
-  PatchGlobalObjectPool();
   InitializeBSS();
 
   return ApiError::null();
 }
 
-void FullSnapshotReader::PatchGlobalObjectPool() {
-#if defined(DART_PRECOMPILED_RUNTIME)
-  if (FLAG_use_bare_instructions) {
-    // By default, every switchable call site will put (ic_data, code) into the
-    // object pool.  The [code] is initialized (at AOT compile-time) to be a
-    // [StubCode::SwitchableCallMiss].
-    //
-    // In --use-bare-instruction we reduce the extra indirection via the [code]
-    // object and store instead (ic_data, entrypoint) in the object pool.
-    //
-    // Since the actual [entrypoint] is only known at AOT runtime we switch all
-    // existing UnlinkedCall entries in the object pool to be it's entrypoint.
-    auto zone = thread_->zone();
-    const auto& pool = ObjectPool::Handle(
-        zone, ObjectPool::RawCast(
-                  isolate_group()->object_store()->global_object_pool()));
-    auto& entry = Object::Handle(zone);
-    auto& smi = Smi::Handle(zone);
-    for (intptr_t i = 0; i < pool.Length(); i++) {
-      if (pool.TypeAt(i) == ObjectPool::EntryType::kTaggedObject) {
-        entry = pool.ObjectAt(i);
-        if (entry.ptr() == StubCode::SwitchableCallMiss().ptr()) {
-          smi = Smi::FromAlignedAddress(
-              StubCode::SwitchableCallMiss().MonomorphicEntryPoint());
-          pool.SetTypeAt(i, ObjectPool::EntryType::kImmediate,
-                         ObjectPool::Patchability::kPatchable);
-          pool.SetObjectAt(i, smi);
-        } else if (entry.ptr() == StubCode::MegamorphicCall().ptr()) {
-          smi = Smi::FromAlignedAddress(
-              StubCode::MegamorphicCall().MonomorphicEntryPoint());
-          pool.SetTypeAt(i, ObjectPool::EntryType::kImmediate,
-                         ObjectPool::Patchability::kPatchable);
-          pool.SetObjectAt(i, smi);
-        }
-      }
-    }
-  }
-#endif  // defined(DART_PRECOMPILED_RUNTIME)
-}
-
 void FullSnapshotReader::InitializeBSS() {
 #if defined(DART_PRECOMPILED_RUNTIME)
   // Initialize entries in the isolate portion of the BSS segment.
diff --git a/runtime/vm/app_snapshot.h b/runtime/vm/app_snapshot.h
index da96ab4..7bc3032 100644
--- a/runtime/vm/app_snapshot.h
+++ b/runtime/vm/app_snapshot.h
@@ -805,7 +805,6 @@
   IsolateGroup* isolate_group() const { return thread_->isolate_group(); }
 
   ApiErrorPtr ConvertToApiError(char* message);
-  void PatchGlobalObjectPool();
   void InitializeBSS();
 
   Snapshot::Kind kind_;
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index 3c2345e..db27125 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -48,7 +48,6 @@
   bin::Builtin::SetNativeResolver(bin::Builtin::kCLILibrary);
   TransitionNativeToVM transition(thread);
   StackZone zone(thread);
-  HANDLESCOPE(thread);
   Timer timer;
   timer.Start();
   const Error& error =
@@ -413,7 +412,6 @@
 
   TransitionNativeToVM transition(thread);
   StackZone zone(thread);
-  HANDLESCOPE(thread);
 
   Api::CheckAndFinalizePendingClasses(thread);
 
@@ -451,7 +449,6 @@
 
   TransitionNativeToVM transition(thread);
   StackZone zone(thread);
-  HANDLESCOPE(thread);
 
   Api::CheckAndFinalizePendingClasses(thread);
 
@@ -496,7 +493,6 @@
   {
     TransitionNativeToVM transition(thread);
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Api::CheckAndFinalizePendingClasses(thread);
   }
   Dart_Isolate isolate = Dart_CurrentIsolate();
@@ -514,7 +510,6 @@
 BENCHMARK(SerializeNull) {
   TransitionNativeToVM transition(thread);
   StackZone zone(thread);
-  HANDLESCOPE(thread);
   const Object& null_object = Object::Handle();
   const intptr_t kLoopCount = 1000000;
   Timer timer;
@@ -536,7 +531,6 @@
 BENCHMARK(SerializeSmi) {
   TransitionNativeToVM transition(thread);
   StackZone zone(thread);
-  HANDLESCOPE(thread);
   const Integer& smi_object = Integer::Handle(Smi::New(42));
   const intptr_t kLoopCount = 1000000;
   Timer timer;
@@ -558,7 +552,6 @@
 BENCHMARK(SimpleMessage) {
   TransitionNativeToVM transition(thread);
   StackZone zone(thread);
-  HANDLESCOPE(thread);
   const Array& array_object = Array::Handle(Array::New(2));
   array_object.SetAt(0, Integer::Handle(Smi::New(42)));
   array_object.SetAt(1, Object::Handle());
@@ -592,7 +585,6 @@
   EXPECT_VALID(h_result);
   TransitionNativeToVM transition(thread);
   StackZone zone(thread);
-  HANDLESCOPE(thread);
   Instance& map = Instance::Handle();
   map ^= Api::UnwrapHandle(h_result);
   const intptr_t kLoopCount = 100;
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 1ea4076..2d58396 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -206,6 +206,7 @@
 #if defined(DEBUG)
     for (intptr_t i = 0; i < class_array.Length(); i++) {
       cls ^= class_array.At(i);
+      // Recognized a new class, but forgot to add @pragma('vm:entrypoint')?
       ASSERT(cls.is_declaration_loaded());
     }
 #endif
@@ -1497,11 +1498,7 @@
           Map(param->untag()->parameterized_class_id_);
     } else if (obj->IsType()) {
       TypePtr type = Type::RawCast(obj);
-      ObjectPtr id = type->untag()->type_class_id();
-      if (!id->IsHeapObject()) {
-        type->untag()->set_type_class_id(
-            Smi::New(Map(Smi::Value(Smi::RawCast(id)))));
-      }
+      type->untag()->type_class_id_ = Map(type->untag()->type_class_id_);
     } else {
       intptr_t old_cid = obj->GetClassId();
       intptr_t new_cid = Map(old_cid);
@@ -1731,7 +1728,6 @@
   auto const isolate_group = thread->isolate_group();
   SafepointWriteRwLocker ml(thread, isolate_group->program_lock());
   StackZone stack_zone(thread);
-  HANDLESCOPE(thread);
   auto const zone = thread->zone();
 
   class ClearCodeVisitor : public FunctionVisitor {
diff --git a/runtime/vm/class_id.h b/runtime/vm/class_id.h
index 8d17bea..bc52316 100644
--- a/runtime/vm/class_id.h
+++ b/runtime/vm/class_id.h
@@ -156,7 +156,8 @@
 #define CLASS_LIST_FFI_TYPE_MARKER(V)                                          \
   CLASS_LIST_FFI_NUMERIC(V)                                                    \
   V(Void)                                                                      \
-  V(Handle)
+  V(Handle)                                                                    \
+  V(Bool)
 
 #define CLASS_LIST_FFI(V)                                                      \
   V(NativeFunction)                                                            \
@@ -404,9 +405,9 @@
     case kPointerCid:
     case kDynamicLibraryCid:
 #define CASE_FFI_CID(name) case kFfi##name##Cid:
-    CLASS_LIST_FFI(CASE_FFI_CID)
+      CLASS_LIST_FFI(CASE_FFI_CID)
 #undef CASE_FFI_CID
-    return true;
+      return true;
     default:
       return false;
   }
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 82b4c61..6c373a5 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -2128,6 +2128,7 @@
   Class& cls = Class::Handle(Z);
   Array& functions = Array::Handle(Z);
   Function& function = Function::Handle(Z);
+  Function& target = Function::Handle(Z);
   Code& code = Code::Handle(Z);
   Object& owner = Object::Handle(Z);
   GrowableObjectArray& retained_functions = GrowableObjectArray::Handle(Z);
@@ -2135,6 +2136,24 @@
   auto& ref = Object::Handle(Z);
 
   auto trim_function = [&](const Function& function) {
+    if (function.IsDynamicInvocationForwarder()) {
+      // For dynamic invocation forwarders sever strong connection between the
+      // forwarder and the target function if we are not going to retain
+      // target function anyway. The only use of the forwarding target outside
+      // of compilation pipeline is in Function::script() and that should not
+      // be used when we are dropping functions (cause we are not going to
+      // emit symbolic stack traces anyway).
+      // Note that we still need Function::script() to work during snapshot
+      // generation to generate DWARF, that's why we are using WSR and not
+      // simply setting forwarding target to null.
+      target = function.ForwardingTarget();
+      if (!functions_to_retain_.ContainsKey(target)) {
+        ref =
+            WeakSerializationReference::New(target, Function::null_function());
+        function.set_data(ref);
+      }
+    }
+
     sig = function.signature();
     // In the AOT runtime, most calls are direct or through the dispatch table,
     // not resolved via dynamic lookup. Thus, we only need to retain the
@@ -3009,7 +3028,6 @@
   // otherwise unreachable constants of dropped classes, which would
   // cause assertion failures during GC after classes are dropped.
   StackZone stack_zone(thread());
-  HANDLESCOPE(thread());
 
   error_ = Library::FinalizeAllClasses();
   if (!error_.IsNull()) {
@@ -3524,7 +3542,11 @@
   PreventRenaming("html");
 
   // Looked up by name via "DartUtils::GetDartType".
+  PreventRenaming("_RandomAccessFile");
   PreventRenaming("_RandomAccessFileOpsImpl");
+  PreventRenaming("ResourceHandle");
+  PreventRenaming("_ResourceHandleImpl");
+  PreventRenaming("_SocketControlMessageImpl");
   PreventRenaming("_NamespaceImpl");
 }
 
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm.cc b/runtime/vm/compiler/asm_intrinsifier_arm.cc
index f29a90a..b61046d 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm.cc
@@ -1210,20 +1210,19 @@
 }
 
 // Compares cid1 and cid2 to see if they're syntactically equivalent. If this
-// can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// can be determined by this fast path, it jumps to either equal_* or not_equal.
+// If classes are equivalent but may be generic, then jumps to
+// equal_may_be_generic. Clobbers scratch.
 static void EquivalentClassIds(Assembler* assembler,
                                Label* normal_ir_body,
-                               Label* equal,
+                               Label* equal_may_be_generic,
+                               Label* equal_not_generic,
                                Label* not_equal,
                                Register cid1,
                                Register cid2,
                                Register scratch,
                                bool testing_instance_cids) {
-  Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string, not_integer_or_string_or_list;
+  Label not_integer, not_integer_or_string, not_integer_or_string_or_list;
 
   // Check if left hand side is a closure. Closures are handled in the runtime.
   __ CompareImmediate(cid1, kClosureCid);
@@ -1233,25 +1232,11 @@
   // considered equivalent (e.g. multiple string implementation classes map to a
   // single String type).
   __ cmp(cid1, Operand(cid2));
-  __ b(&different_cids, NE);
-
-  // Types have the same class and neither is a closure type.
-  // Check if there are no type arguments. In this case we can return true.
-  // Otherwise fall through into the runtime to handle comparison.
-  __ LoadClassById(scratch, cid1);
-  __ ldr(
-      scratch,
-      FieldAddress(
-          scratch,
-          target::Class::host_type_arguments_field_offset_in_words_offset()));
-  __ CompareImmediate(scratch, target::Class::kNoTypeArguments);
-  __ b(&equal_cids_but_generic, NE);
-  __ b(equal);
+  __ b(equal_may_be_generic, EQ);
 
   // Class ids are different. Check if we are comparing two string types (with
   // different representations), two integer types, two list types or two type
   // types.
-  __ Bind(&different_cids);
   __ CompareImmediate(cid1, kNumPredefinedCids);
   __ b(not_equal, HI);
 
@@ -1259,7 +1244,7 @@
   JumpIfNotInteger(assembler, cid1, scratch, &not_integer);
 
   // First type is an integer. Check if the second is an integer too.
-  JumpIfInteger(assembler, cid2, scratch, equal);
+  JumpIfInteger(assembler, cid2, scratch, equal_not_generic);
   // Integer types are only equivalent to other integer types.
   __ b(not_equal);
 
@@ -1269,7 +1254,7 @@
                   testing_instance_cids ? &not_integer_or_string : not_equal);
 
   // First type is String. Check if the second is a string too.
-  JumpIfString(assembler, cid2, scratch, equal);
+  JumpIfString(assembler, cid2, scratch, equal_not_generic);
   // String types are only equivalent to other String types.
   __ b(not_equal);
 
@@ -1282,8 +1267,7 @@
     JumpIfNotList(assembler, cid2, scratch, not_equal);
     ASSERT(compiler::target::Array::type_arguments_offset() ==
            compiler::target::GrowableObjectArray::type_arguments_offset());
-    __ LoadImmediate(scratch, compiler::target::Array::type_arguments_offset());
-    __ b(&equal_cids_but_generic);
+    __ b(equal_may_be_generic);
 
     __ Bind(&not_integer_or_string_or_list);
     // Check if the first type is a Type. If it is not then types are not
@@ -1292,13 +1276,10 @@
     JumpIfNotType(assembler, cid1, scratch, not_equal);
 
     // First type is a Type. Check if the second is a Type too.
-    JumpIfType(assembler, cid2, scratch, equal);
+    JumpIfType(assembler, cid2, scratch, equal_not_generic);
     // Type types are only equivalent to other Type types.
     __ b(not_equal);
   }
-
-  // The caller must compare the type arguments.
-  __ Bind(&equal_cids_but_generic);
 }
 
 void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
@@ -1307,10 +1288,24 @@
   __ LoadClassIdMayBeSmi(R1, R1);
   __ LoadClassIdMayBeSmi(R2, R2);
 
-  Label equal, not_equal;
-  EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, R1, R2, R0,
+  Label equal_may_be_generic, equal, not_equal;
+  EquivalentClassIds(assembler, normal_ir_body, &equal_may_be_generic, &equal,
+                     &not_equal, R1, R2, R0,
                      /* testing_instance_cids = */ true);
 
+  __ Bind(&equal_may_be_generic);
+  // Classes are equivalent and neither is a closure class.
+  // Check if there are no type arguments. In this case we can return true.
+  // Otherwise fall through into the runtime to handle comparison.
+  __ LoadClassById(R0, R1);
+  __ ldr(
+      R0,
+      FieldAddress(
+          R0,
+          target::Class::host_type_arguments_field_offset_in_words_offset()));
+  __ CompareImmediate(R0, target::Class::kNoTypeArguments);
+  __ b(&equal, EQ);
+
   // Compare type arguments, host_type_arguments_field_offset_in_words in R0.
   __ ldm(IA, SP, (1 << R1 | 1 << R2));
   __ AddImmediate(R1, -kHeapObjectTag);
@@ -1352,7 +1347,7 @@
 
 void AsmIntrinsifier::Type_equality(Assembler* assembler,
                                     Label* normal_ir_body) {
-  Label equal, not_equal, equiv_cids, check_legacy;
+  Label equal, not_equal, equiv_cids_may_be_generic, equiv_cids, check_legacy;
 
   __ ldm(IA, SP, (1 << R1 | 1 << R2));
   __ cmp(R1, Operand(R2));
@@ -1365,14 +1360,14 @@
   __ b(normal_ir_body, NE);
 
   // Check if types are syntactically equal.
-  __ ldr(R3, FieldAddress(R1, target::Type::type_class_id_offset()));
-  __ SmiUntag(R3);
-  __ ldr(R4, FieldAddress(R2, target::Type::type_class_id_offset()));
-  __ SmiUntag(R4);
+  __ LoadTypeClassId(R3, R1);
+  __ LoadTypeClassId(R4, R2);
   // We are not testing instance cids, but type class cids of Type instances.
-  EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, &not_equal, R3, R4,
-                     R0, /* testing_instance_cids = */ false);
+  EquivalentClassIds(assembler, normal_ir_body, &equiv_cids_may_be_generic,
+                     &equiv_cids, &not_equal, R3, R4, R0,
+                     /* testing_instance_cids = */ false);
 
+  __ Bind(&equiv_cids_may_be_generic);
   // Compare type arguments in Type instances.
   __ ldr(R3, FieldAddress(R1, target::Type::arguments_offset()));
   __ ldr(R4, FieldAddress(R2, target::Type::arguments_offset()));
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index 66a1480..b6796b5 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -1355,20 +1355,19 @@
 }
 
 // Compares cid1 and cid2 to see if they're syntactically equivalent. If this
-// can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// can be determined by this fast path, it jumps to either equal_* or not_equal.
+// If classes are equivalent but may be generic, then jumps to
+// equal_may_be_generic. Clobbers scratch.
 static void EquivalentClassIds(Assembler* assembler,
                                Label* normal_ir_body,
-                               Label* equal,
+                               Label* equal_may_be_generic,
+                               Label* equal_not_generic,
                                Label* not_equal,
                                Register cid1,
                                Register cid2,
                                Register scratch,
                                bool testing_instance_cids) {
-  Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string, not_integer_or_string_or_list;
+  Label not_integer, not_integer_or_string, not_integer_or_string_or_list;
 
   // Check if left hand side is a closure. Closures are handled in the runtime.
   __ CompareImmediate(cid1, kClosureCid);
@@ -1378,25 +1377,11 @@
   // considered equivalent (e.g. multiple string implementation classes map to a
   // single String type).
   __ cmp(cid1, Operand(cid2));
-  __ b(&different_cids, NE);
-
-  // Types have the same class and neither is a closure type.
-  // Check if there are no type arguments. In this case we can return true.
-  // Otherwise fall through into the runtime to handle comparison.
-  __ LoadClassById(scratch, cid1);
-  __ ldr(scratch,
-         FieldAddress(
-             scratch,
-             target::Class::host_type_arguments_field_offset_in_words_offset()),
-         kFourBytes);
-  __ CompareImmediate(scratch, target::Class::kNoTypeArguments);
-  __ b(&equal_cids_but_generic, NE);
-  __ b(equal);
+  __ b(equal_may_be_generic, EQ);
 
   // Class ids are different. Check if we are comparing two string types (with
   // different representations), two integer types, two list types or two type
   // types.
-  __ Bind(&different_cids);
   __ CompareImmediate(cid1, kNumPredefinedCids);
   __ b(not_equal, HI);
 
@@ -1404,7 +1389,7 @@
   JumpIfNotInteger(assembler, cid1, scratch, &not_integer);
 
   // First type is an integer. Check if the second is an integer too.
-  JumpIfInteger(assembler, cid2, scratch, equal);
+  JumpIfInteger(assembler, cid2, scratch, equal_not_generic);
   // Integer types are only equivalent to other integer types.
   __ b(not_equal);
 
@@ -1414,7 +1399,7 @@
                   testing_instance_cids ? &not_integer_or_string : not_equal);
 
   // First type is String. Check if the second is a string too.
-  JumpIfString(assembler, cid2, scratch, equal);
+  JumpIfString(assembler, cid2, scratch, equal_not_generic);
   // String types are only equivalent to other String types.
   __ b(not_equal);
 
@@ -1427,8 +1412,7 @@
     JumpIfNotList(assembler, cid2, scratch, not_equal);
     ASSERT(compiler::target::Array::type_arguments_offset() ==
            compiler::target::GrowableObjectArray::type_arguments_offset());
-    __ LoadImmediate(scratch, compiler::target::Array::type_arguments_offset());
-    __ b(&equal_cids_but_generic);
+    __ b(equal_may_be_generic);
 
     __ Bind(&not_integer_or_string_or_list);
     // Check if the first type is a Type. If it is not then types are not
@@ -1437,13 +1421,10 @@
     JumpIfNotType(assembler, cid1, scratch, not_equal);
 
     // First type is a Type. Check if the second is a Type too.
-    JumpIfType(assembler, cid2, scratch, equal);
+    JumpIfType(assembler, cid2, scratch, equal_not_generic);
     // Type types are only equivalent to other Type types.
     __ b(not_equal);
   }
-
-  // The caller must compare the type arguments.
-  __ Bind(&equal_cids_but_generic);
 }
 
 void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
@@ -1452,10 +1433,24 @@
   __ LoadClassIdMayBeSmi(R2, R1);
   __ LoadClassIdMayBeSmi(R1, R0);
 
-  Label equal, not_equal;
-  EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, R1, R2, R0,
+  Label equal_may_be_generic, equal, not_equal;
+  EquivalentClassIds(assembler, normal_ir_body, &equal_may_be_generic, &equal,
+                     &not_equal, R1, R2, R0,
                      /* testing_instance_cids = */ true);
 
+  __ Bind(&equal_may_be_generic);
+  // Classes are equivalent and neither is a closure class.
+  // Check if there are no type arguments. In this case we can return true.
+  // Otherwise fall through into the runtime to handle comparison.
+  __ LoadClassById(R0, R1);
+  __ ldr(R0,
+         FieldAddress(
+             R0,
+             target::Class::host_type_arguments_field_offset_in_words_offset()),
+         kFourBytes);
+  __ CompareImmediate(R0, target::Class::kNoTypeArguments);
+  __ b(&equal, EQ);
+
   // Compare type arguments, host_type_arguments_field_offset_in_words in R0.
   __ ldp(R1, R2, Address(SP, 0 * target::kWordSize, Address::PairOffset));
   __ AddImmediate(R1, -kHeapObjectTag);
@@ -1501,7 +1496,7 @@
 
 void AsmIntrinsifier::Type_equality(Assembler* assembler,
                                     Label* normal_ir_body) {
-  Label equal, not_equal, equiv_cids, check_legacy;
+  Label equal, not_equal, equiv_cids_may_be_generic, equiv_cids, check_legacy;
 
   __ ldp(R1, R2, Address(SP, 0 * target::kWordSize, Address::PairOffset));
   __ CompareObjectRegisters(R1, R2);
@@ -1514,16 +1509,14 @@
   __ b(normal_ir_body, NE);
 
   // Check if types are syntactically equal.
-  __ LoadCompressedSmi(R3,
-                       FieldAddress(R1, target::Type::type_class_id_offset()));
-  __ SmiUntag(R3);
-  __ LoadCompressedSmi(R4,
-                       FieldAddress(R2, target::Type::type_class_id_offset()));
-  __ SmiUntag(R4);
+  __ LoadTypeClassId(R3, R1);
+  __ LoadTypeClassId(R4, R2);
   // We are not testing instance cids, but type class cids of Type instances.
-  EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, &not_equal, R3, R4,
-                     R0, /* testing_instance_cids = */ false);
+  EquivalentClassIds(assembler, normal_ir_body, &equiv_cids_may_be_generic,
+                     &equiv_cids, &not_equal, R3, R4, R0,
+                     /* testing_instance_cids = */ false);
 
+  __ Bind(&equiv_cids_may_be_generic);
   // Compare type arguments in Type instances.
   __ LoadCompressed(R3, FieldAddress(R1, target::Type::arguments_offset()));
   __ LoadCompressed(R4, FieldAddress(R2, target::Type::arguments_offset()));
diff --git a/runtime/vm/compiler/asm_intrinsifier_ia32.cc b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
index 7cb2f54..0c58ca7 100644
--- a/runtime/vm/compiler/asm_intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
@@ -1311,20 +1311,19 @@
 }
 
 // Compares cid1 and cid2 to see if they're syntactically equivalent. If this
-// can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// can be determined by this fast path, it jumps to either equal_* or not_equal.
+// If classes are equivalent but may be generic, then jumps to
+// equal_may_be_generic. Clobbers scratch.
 static void EquivalentClassIds(Assembler* assembler,
                                Label* normal_ir_body,
-                               Label* equal,
+                               Label* equal_may_be_generic,
+                               Label* equal_not_generic,
                                Label* not_equal,
                                Register cid1,
                                Register cid2,
                                Register scratch,
                                bool testing_instance_cids) {
-  Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string, not_integer_or_string_or_list;
+  Label not_integer, not_integer_or_string, not_integer_or_string_or_list;
 
   // Check if left hand side is a closure. Closures are handled in the runtime.
   __ cmpl(cid1, Immediate(kClosureCid));
@@ -1334,25 +1333,11 @@
   // considered equivalent (e.g. multiple string implementation classes map to a
   // single String type).
   __ cmpl(cid1, cid2);
-  __ j(NOT_EQUAL, &different_cids);
-
-  // Types have the same class and neither is a closure type.
-  // Check if there are no type arguments. In this case we can return true.
-  // Otherwise fall through into the runtime to handle comparison.
-  __ LoadClassById(scratch, cid1);
-  __ movl(
-      scratch,
-      FieldAddress(
-          scratch,
-          target::Class::host_type_arguments_field_offset_in_words_offset()));
-  __ cmpl(scratch, Immediate(target::Class::kNoTypeArguments));
-  __ j(NOT_EQUAL, &equal_cids_but_generic);
-  __ jmp(equal);
+  __ j(EQUAL, equal_may_be_generic);
 
   // Class ids are different. Check if we are comparing two string types (with
   // different representations), two integer types, two list types or two type
   // types.
-  __ Bind(&different_cids);
   __ cmpl(cid1, Immediate(kNumPredefinedCids));
   __ j(ABOVE_EQUAL, not_equal);
 
@@ -1362,7 +1347,7 @@
 
   // First type is an integer. Check if the second is an integer too.
   __ movl(scratch, cid2);
-  JumpIfInteger(assembler, scratch, equal);
+  JumpIfInteger(assembler, scratch, equal_not_generic);
   // Integer types are only equivalent to other integer types.
   __ jmp(not_equal);
 
@@ -1374,7 +1359,7 @@
 
   // First type is a String. Check if the second is a String too.
   __ movl(scratch, cid2);
-  JumpIfString(assembler, scratch, equal);
+  JumpIfString(assembler, scratch, equal_not_generic);
   // String types are only equivalent to other String types.
   __ jmp(not_equal);
 
@@ -1389,24 +1374,21 @@
     JumpIfNotList(assembler, scratch, not_equal);
     ASSERT(compiler::target::Array::type_arguments_offset() ==
            compiler::target::GrowableObjectArray::type_arguments_offset());
-    __ movl(scratch,
-            Immediate(compiler::target::Array::type_arguments_offset()));
-    __ jmp(&equal_cids_but_generic, Assembler::kNearJump);
+    __ jmp(equal_may_be_generic);
 
     __ Bind(&not_integer_or_string_or_list);
     // Check if the first type is a Type. If it is not then types are not
     // equivalent because they have different class ids and they are not String
     // or integer or List or Type.
-    JumpIfNotType(assembler, cid1, not_equal);
+    __ movl(scratch, cid1);
+    JumpIfNotType(assembler, scratch, not_equal);
 
     // First type is a Type. Check if the second is a Type too.
-    JumpIfType(assembler, cid2, equal);
+    __ movl(scratch, cid2);
+    JumpIfType(assembler, scratch, equal_not_generic);
     // Type types are only equivalent to other Type types.
     __ jmp(not_equal);
   }
-
-  // The caller must compare the type arguments.
-  __ Bind(&equal_cids_but_generic);
 }
 
 void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
@@ -1417,9 +1399,23 @@
   __ movl(EAX, Address(ESP, +2 * target::kWordSize));
   __ LoadClassIdMayBeSmi(EBX, EAX);
 
-  Label equal, not_equal;
-  EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, EDI, EBX,
-                     EAX, /* testing_instance_cids = */ true);
+  Label equal_may_be_generic, equal, not_equal;
+  EquivalentClassIds(assembler, normal_ir_body, &equal_may_be_generic, &equal,
+                     &not_equal, EDI, EBX, EAX,
+                     /* testing_instance_cids = */ true);
+
+  __ Bind(&equal_may_be_generic);
+  // Classes are equivalent and neither is a closure class.
+  // Check if there are no type arguments. In this case we can return true.
+  // Otherwise fall through into the runtime to handle comparison.
+  __ LoadClassById(EAX, EDI);
+  __ movl(
+      EAX,
+      FieldAddress(
+          EAX,
+          target::Class::host_type_arguments_field_offset_in_words_offset()));
+  __ cmpl(EAX, Immediate(target::Class::kNoTypeArguments));
+  __ j(EQUAL, &equal);
 
   // Compare type arguments, host_type_arguments_field_offset_in_words in EAX.
   __ movl(EDI, Address(ESP, +1 * target::kWordSize));
@@ -1465,7 +1461,7 @@
 
 void AsmIntrinsifier::Type_equality(Assembler* assembler,
                                     Label* normal_ir_body) {
-  Label equal, not_equal, equiv_cids, check_legacy;
+  Label equal, not_equal, equiv_cids_may_be_generic, equiv_cids, check_legacy;
 
   __ movl(EDI, Address(ESP, +1 * target::kWordSize));
   __ movl(EBX, Address(ESP, +2 * target::kWordSize));
@@ -1479,14 +1475,14 @@
   __ j(NOT_EQUAL, normal_ir_body);
 
   // Check if types are syntactically equal.
-  __ movl(ECX, FieldAddress(EDI, target::Type::type_class_id_offset()));
-  __ SmiUntag(ECX);
-  __ movl(EDX, FieldAddress(EBX, target::Type::type_class_id_offset()));
-  __ SmiUntag(EDX);
+  __ LoadTypeClassId(ECX, EDI);
+  __ LoadTypeClassId(EDX, EBX);
   // We are not testing instance cids, but type class cids of Type instances.
-  EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, &not_equal, ECX,
-                     EDX, EAX, /* testing_instance_cids = */ false);
+  EquivalentClassIds(assembler, normal_ir_body, &equiv_cids_may_be_generic,
+                     &equiv_cids, &not_equal, ECX, EDX, EAX,
+                     /* testing_instance_cids = */ false);
 
+  __ Bind(&equiv_cids_may_be_generic);
   // Compare type arguments in Type instances.
   __ movl(ECX, FieldAddress(EDI, target::Type::arguments_offset()));
   __ movl(EDX, FieldAddress(EBX, target::Type::arguments_offset()));
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index 8a57264..c4e02a9 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -1212,20 +1212,19 @@
 }
 
 // Compares cid1 and cid2 to see if they're syntactically equivalent. If this
-// can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// can be determined by this fast path, it jumps to either equal_* or not_equal.
+// If classes are equivalent but may be generic, then jumps to
+// equal_may_be_generic. Clobbers scratch.
 static void EquivalentClassIds(Assembler* assembler,
                                Label* normal_ir_body,
-                               Label* equal,
+                               Label* equal_may_be_generic,
+                               Label* equal_not_generic,
                                Label* not_equal,
                                Register cid1,
                                Register cid2,
                                Register scratch,
                                bool testing_instance_cids) {
-  Label different_cids, equal_cids_but_generic, not_integer,
-      not_integer_or_string, not_integer_or_string_or_list;
+  Label not_integer, not_integer_or_string, not_integer_or_string_or_list;
 
   // Check if left hand side is a closure. Closures are handled in the runtime.
   __ cmpq(cid1, Immediate(kClosureCid));
@@ -1235,25 +1234,11 @@
   // considered equivalent (e.g. multiple string implementation classes map to a
   // single String type).
   __ cmpq(cid1, cid2);
-  __ j(NOT_EQUAL, &different_cids);
-
-  // Types have the same class and neither is a closure type.
-  // Check if there are no type arguments. In this case we can return true.
-  // Otherwise fall through into the runtime to handle comparison.
-  __ LoadClassById(scratch, cid1);
-  __ movl(
-      scratch,
-      FieldAddress(
-          scratch,
-          target::Class::host_type_arguments_field_offset_in_words_offset()));
-  __ cmpl(scratch, Immediate(target::Class::kNoTypeArguments));
-  __ j(NOT_EQUAL, &equal_cids_but_generic);
-  __ jmp(equal);
+  __ j(EQUAL, equal_may_be_generic);
 
   // Class ids are different. Check if we are comparing two string types (with
   // different representations), two integer types, two list types or two type
   // types.
-  __ Bind(&different_cids);
   __ cmpq(cid1, Immediate(kNumPredefinedCids));
   __ j(ABOVE_EQUAL, not_equal);
 
@@ -1263,7 +1248,7 @@
 
   // First type is an integer. Check if the second is an integer too.
   __ movq(scratch, cid2);
-  JumpIfInteger(assembler, scratch, equal);
+  JumpIfInteger(assembler, scratch, equal_not_generic);
   // Integer types are only equivalent to other integer types.
   __ jmp(not_equal);
 
@@ -1275,7 +1260,7 @@
 
   // First type is a String. Check if the second is a String too.
   __ movq(scratch, cid2);
-  JumpIfString(assembler, scratch, equal);
+  JumpIfString(assembler, scratch, equal_not_generic);
   // String types are only equivalent to other String types.
   __ jmp(not_equal);
 
@@ -1290,24 +1275,21 @@
     JumpIfNotList(assembler, scratch, not_equal);
     ASSERT(compiler::target::Array::type_arguments_offset() ==
            compiler::target::GrowableObjectArray::type_arguments_offset());
-    __ movq(scratch,
-            Immediate(compiler::target::Array::type_arguments_offset()));
-    __ jmp(&equal_cids_but_generic, Assembler::kNearJump);
+    __ jmp(equal_may_be_generic);
 
     __ Bind(&not_integer_or_string_or_list);
     // Check if the first type is a Type. If it is not then types are not
     // equivalent because they have different class ids and they are not String
     // or integer or List or Type.
-    JumpIfNotType(assembler, cid1, not_equal);
+    __ movq(scratch, cid1);
+    JumpIfNotType(assembler, scratch, not_equal);
 
     // First type is a Type. Check if the second is a Type too.
-    JumpIfType(assembler, cid2, equal);
+    __ movq(scratch, cid2);
+    JumpIfType(assembler, scratch, equal_not_generic);
     // Type types are only equivalent to other Type types.
     __ jmp(not_equal);
   }
-
-  // The caller must compare the type arguments.
-  __ Bind(&equal_cids_but_generic);
 }
 
 void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
@@ -1318,9 +1300,23 @@
   __ movq(RAX, Address(RSP, +2 * target::kWordSize));
   __ LoadClassIdMayBeSmi(RDX, RAX);
 
-  Label equal, not_equal;
-  EquivalentClassIds(assembler, normal_ir_body, &equal, &not_equal, RCX, RDX,
-                     RAX, /* testing_instance_cids = */ true);
+  Label equal_may_be_generic, equal, not_equal;
+  EquivalentClassIds(assembler, normal_ir_body, &equal_may_be_generic, &equal,
+                     &not_equal, RCX, RDX, RAX,
+                     /* testing_instance_cids = */ true);
+
+  __ Bind(&equal_may_be_generic);
+  // Classes are equivalent and neither is a closure class.
+  // Check if there are no type arguments. In this case we can return true.
+  // Otherwise fall through into the runtime to handle comparison.
+  __ LoadClassById(RAX, RCX);
+  __ movl(
+      RAX,
+      FieldAddress(
+          RAX,
+          target::Class::host_type_arguments_field_offset_in_words_offset()));
+  __ cmpl(RAX, Immediate(target::Class::kNoTypeArguments));
+  __ j(EQUAL, &equal);
 
   // Compare type arguments, host_type_arguments_field_offset_in_words in RAX.
   __ movq(RCX, Address(RSP, +1 * target::kWordSize));
@@ -1370,7 +1366,7 @@
 
 void AsmIntrinsifier::Type_equality(Assembler* assembler,
                                     Label* normal_ir_body) {
-  Label equal, not_equal, equiv_cids, check_legacy;
+  Label equal, not_equal, equiv_cids_may_be_generic, equiv_cids, check_legacy;
 
   __ movq(RCX, Address(RSP, +1 * target::kWordSize));
   __ movq(RDX, Address(RSP, +2 * target::kWordSize));
@@ -1384,16 +1380,14 @@
   __ j(NOT_EQUAL, normal_ir_body);
 
   // Check if types are syntactically equal.
-  __ LoadCompressedSmi(RDI,
-                       FieldAddress(RCX, target::Type::type_class_id_offset()));
-  __ SmiUntag(RDI);
-  __ LoadCompressedSmi(RSI,
-                       FieldAddress(RDX, target::Type::type_class_id_offset()));
-  __ SmiUntag(RSI);
+  __ LoadTypeClassId(RDI, RCX);
+  __ LoadTypeClassId(RSI, RDX);
   // We are not testing instance cids, but type class cids of Type instances.
-  EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, &not_equal, RDI,
-                     RSI, RAX, /* testing_instance_cids = */ false);
+  EquivalentClassIds(assembler, normal_ir_body, &equiv_cids_may_be_generic,
+                     &equiv_cids, &not_equal, RDI, RSI, RAX,
+                     /* testing_instance_cids = */ false);
 
+  __ Bind(&equiv_cids_may_be_generic);
   // Compare type arguments in Type instances.
   __ LoadCompressed(RDI, FieldAddress(RCX, target::Type::arguments_offset()));
   __ LoadCompressed(RSI, FieldAddress(RDX, target::Type::arguments_offset()));
diff --git a/runtime/vm/compiler/assembler/assembler_base.cc b/runtime/vm/compiler/assembler/assembler_base.cc
index 9dbd0ff..07d7285 100644
--- a/runtime/vm/compiler/assembler/assembler_base.cc
+++ b/runtime/vm/compiler/assembler/assembler_base.cc
@@ -414,14 +414,6 @@
       label->address(), ObjectPoolBuilderEntry::kNativeFunction, patchable));
 }
 
-intptr_t ObjectPoolBuilder::FindNativeFunctionWrapper(
-    const ExternalLabel* label,
-    ObjectPoolBuilderEntry::Patchability patchable) {
-  return FindObject(ObjectPoolBuilderEntry(
-      label->address(), ObjectPoolBuilderEntry::kNativeFunctionWrapper,
-      patchable));
-}
-
 bool ObjectPoolBuilder::TryCommitToParent() {
   ASSERT(parent_ != nullptr);
   if (parent_->CurrentLength() != base_index_) {
diff --git a/runtime/vm/compiler/assembler/assembler_base.h b/runtime/vm/compiler/assembler/assembler_base.h
index ad8aa79..c3410b4 100644
--- a/runtime/vm/compiler/assembler/assembler_base.h
+++ b/runtime/vm/compiler/assembler/assembler_base.h
@@ -732,6 +732,18 @@
   // can be accessed without checking the class id first.
   virtual void CompareTypeNullabilityWith(Register type, int8_t value) = 0;
 
+  void LoadTypeClassId(Register dst, Register src) {
+#if !defined(TARGET_ARCH_IA32)
+    EnsureHasClassIdInDEBUG(kTypeCid, src, TMP);
+#endif
+    ASSERT(!compiler::target::UntaggedType::kTypeClassIdIsSigned);
+    ASSERT_EQUAL(compiler::target::UntaggedType::kTypeClassIdBitSize,
+                 kBitsPerInt16);
+    LoadFieldFromOffset(dst, src,
+                        compiler::target::Type::type_class_id_offset(),
+                        kUnsignedTwoBytes);
+  }
+
   virtual void EnsureHasClassIdInDEBUG(intptr_t cid,
                                        Register src,
                                        Register scratch,
diff --git a/runtime/vm/compiler/assembler/object_pool_builder.h b/runtime/vm/compiler/assembler/object_pool_builder.h
index db77eb8..7ceb222 100644
--- a/runtime/vm/compiler/assembler/object_pool_builder.h
+++ b/runtime/vm/compiler/assembler/object_pool_builder.h
@@ -29,7 +29,14 @@
     kTaggedObject,
     kImmediate,
     kNativeFunction,
-    kNativeFunctionWrapper,
+
+    // Used only during AOT snapshot serialization/deserialization.
+    // Denotes kImmediate entry with
+    //  - StubCode::SwitchableCallMiss().MonomorphicEntryPoint()
+    //  - StubCode::MegamorphicCall().MonomorphicEntryPoint()
+    // values which become known only at run time.
+    kSwitchableCallMissEntryPoint,
+    kMegamorphicCallEntryPoint,
   };
 
   using TypeBits = BitField<uint8_t, EntryType, 0, 7>;
@@ -158,9 +165,6 @@
   intptr_t FindImmediate(uword imm);
   intptr_t FindNativeFunction(const ExternalLabel* label,
                               ObjectPoolBuilderEntry::Patchability patchable);
-  intptr_t FindNativeFunctionWrapper(
-      const ExternalLabel* label,
-      ObjectPoolBuilderEntry::Patchability patchable);
 
   intptr_t CurrentLength() const {
     return object_pool_.length() + used_from_parent_.length();
diff --git a/runtime/vm/compiler/backend/block_scheduler.cc b/runtime/vm/compiler/backend/block_scheduler.cc
index 33dae39..7fb1408 100644
--- a/runtime/vm/compiler/backend/block_scheduler.cc
+++ b/runtime/vm/compiler/backend/block_scheduler.cc
@@ -63,7 +63,11 @@
     return;
   }
   Array& edge_counters = Array::Handle();
-  edge_counters ^= ic_data_array.At(0);
+  edge_counters ^=
+      ic_data_array.At(Function::ICDataArrayIndices::kEdgeCounters);
+  if (edge_counters.IsNull()) {
+    return;
+  }
 
   auto graph_entry = flow_graph->graph_entry();
   BlockEntryInstr* entry = graph_entry->normal_entry();
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index 60fdf3a..50418b8 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -758,6 +758,10 @@
   // Nothing to do.
 }
 
+void ConstantPropagator::VisitRecordCoverage(RecordCoverageInstr* instr) {
+  // Nothing to do.
+}
+
 void ConstantPropagator::VisitOneByteStringFromCharCode(
     OneByteStringFromCharCodeInstr* instr) {
   const Object& o = instr->char_code()->definition()->constant_value();
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index fa930ed..5aeec58 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -506,6 +506,9 @@
 
   void CreateCommonConstants();
 
+  const Array& coverage_array() const { return *coverage_array_; }
+  void set_coverage_array(const Array& array) { coverage_array_ = &array; }
+
  private:
   friend class FlowGraphCompiler;  // TODO(ajcbik): restructure
   friend class FlowGraphChecker;
@@ -629,6 +632,8 @@
 
   intptr_t inlining_id_;
   bool should_print_;
+
+  const Array* coverage_array_ = &Array::empty_array();
 };
 
 class LivenessAnalysis : public ValueObject {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 9355b01..a421fe8 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -1622,12 +1622,7 @@
     } else if (loc.IsFpuRegister()) {
       // Check that a register is not specified twice in the summary.
       const FpuRegister fpu_reg = loc.fpu_reg();
-      if ((fpu_reg < 0) || (fpu_reg >= kNumberOfFpuRegisters)) {
-        // Debug prints for https://github.com/dart-lang/sdk/issues/47314.
-        OS::PrintErr("input(%" Pd ") fpu_reg = %d\n", i, fpu_reg);
-        OS::PrintErr("instr = %s\n", instr->ToCString());
-        UNREACHABLE();
-      }
+      ASSERT((fpu_reg >= 0) && (fpu_reg < kNumberOfFpuRegisters));
       ASSERT(!blocked_fpu_registers[fpu_reg]);
       blocked_fpu_registers[fpu_reg] = true;
     }
@@ -1642,12 +1637,7 @@
     } else if (loc.IsFpuRegister()) {
       // Check that a register is not specified twice in the summary.
       const FpuRegister fpu_reg = loc.fpu_reg();
-      if ((fpu_reg < 0) || (fpu_reg >= kNumberOfFpuRegisters)) {
-        // Debug prints for https://github.com/dart-lang/sdk/issues/47314.
-        OS::PrintErr("temp(%" Pd ") fpu_reg = %d\n", i, fpu_reg);
-        OS::PrintErr("instr = %s\n", instr->ToCString());
-        UNREACHABLE();
-      }
+      ASSERT((fpu_reg >= 0) && (fpu_reg < kNumberOfFpuRegisters));
       ASSERT(!blocked_fpu_registers[fpu_reg]);
       blocked_fpu_registers[fpu_reg] = true;
     }
@@ -2530,8 +2520,15 @@
     const AbstractType& type,
     compiler::Label* is_instance_lbl,
     compiler::Label* is_not_instance_lbl) {
+  ASSERT(!type.IsTopTypeForInstanceOf());
   __ Comment("InlineInstanceof");
-
+  if (type.IsObjectType()) {  // Must be non-nullable.
+    __ CompareObject(TypeTestABI::kInstanceReg, Object::null_object());
+    // All non-null objects are instances of non-nullable Object.
+    __ BranchIf(NOT_EQUAL, is_instance_lbl);
+    __ Jump(is_not_instance_lbl);
+    return SubtypeTestCache::null();  // No need for an STC.
+  }
   if (type.IsFunctionType()) {
     return GenerateFunctionTypeTest(source, type, is_instance_lbl,
                                     is_not_instance_lbl);
@@ -2587,6 +2584,11 @@
     const Class& type_class,
     compiler::Label* is_instance_lbl,
     compiler::Label* is_not_instance_lbl) {
+  // If the type being tested is non-nullable Object, we are in NNBD strong
+  // mode, since top types do not reach here. In this case, testing the
+  // superclass of a null instance yields a wrong result (as the Null class
+  // extends Object).
+  ASSERT(!type_class.IsObjectClass());
   __ Comment("Subtype1TestCacheLookup");
 #if defined(DEBUG)
   compiler::Label ok;
@@ -2594,43 +2596,40 @@
   __ Breakpoint();
   __ Bind(&ok);
 #endif
-  // Check immediate superclass equality. If type_class is Object, then testing
-  // supertype may yield a wrong result for Null in NNBD strong mode (because
-  // Null also extends Object).
-  if (!type_class.IsObjectClass() ||
-      !IsolateGroup::Current()->use_strict_null_safety_checks()) {
-    // We don't use TypeTestABI::kScratchReg for the first scratch register as
-    // it is not defined on IA32. Instead, we use the subtype test cache
-    // register, as it is clobbered by the subtype test cache stub call anyway.
-    const Register kScratch1Reg = TypeTestABI::kSubtypeTestCacheReg;
+  // We don't use TypeTestABI::kScratchReg for the first scratch register as
+  // it is not defined on IA32. Instead, we use the subtype test cache
+  // register, as it is clobbered by the subtype test cache stub call anyway.
+  const Register kScratch1Reg = TypeTestABI::kSubtypeTestCacheReg;
 #if defined(TARGET_ARCH_IA32)
-    // We don't use TypeTestABI::kScratchReg as it is not defined on IA32.
-    // Instead, we pick another TypeTestABI register and push/pop it around
-    // the uses of the second scratch register.
-    const Register kScratch2Reg = TypeTestABI::kDstTypeReg;
-    __ PushRegister(kScratch2Reg);
+  // We don't use TypeTestABI::kScratchReg as it is not defined on IA32.
+  // Instead, we pick another TypeTestABI register and push/pop it around
+  // the uses of the second scratch register.
+  const Register kScratch2Reg = TypeTestABI::kDstTypeReg;
+  __ PushRegister(kScratch2Reg);
 #else
-    // We can use TypeTestABI::kScratchReg for the second scratch register, as
-    // IA32 is handled separately.
-    const Register kScratch2Reg = TypeTestABI::kScratchReg;
+  // We can use TypeTestABI::kScratchReg for the second scratch register, as
+  // IA32 is handled separately.
+  const Register kScratch2Reg = TypeTestABI::kScratchReg;
 #endif
-    static_assert(kScratch1Reg != kScratch2Reg,
-                  "Scratch registers must be distinct");
-    __ LoadClassId(kScratch2Reg, TypeTestABI::kInstanceReg);
-    __ LoadClassById(kScratch1Reg, kScratch2Reg);
+  static_assert(kScratch1Reg != kScratch2Reg,
+                "Scratch registers must be distinct");
+  // Check immediate superclass equality.
+  __ LoadClassId(kScratch2Reg, TypeTestABI::kInstanceReg);
+  __ LoadClassById(kScratch1Reg, kScratch2Reg);
 #if defined(TARGET_ARCH_IA32)
-    // kScratch2 is no longer used, so restore it.
-    __ PopRegister(kScratch2Reg);
+  // kScratch2 is no longer used, so restore it.
+  __ PopRegister(kScratch2Reg);
 #endif
-    __ LoadCompressedFieldFromOffset(
-        kScratch1Reg, kScratch1Reg,
-        compiler::target::Class::super_type_offset());
-    __ LoadCompressedFieldFromOffset(
-        kScratch1Reg, kScratch1Reg,
-        compiler::target::Type::type_class_id_offset());
-    __ CompareImmediate(kScratch1Reg, Smi::RawValue(type_class.id()));
-    __ BranchIf(EQUAL, is_instance_lbl);
-  }
+  __ LoadCompressedFieldFromOffset(
+      kScratch1Reg, kScratch1Reg, compiler::target::Class::super_type_offset());
+  // Check for a null super type. Instances whose class has a null super type
+  // can only be an instance of top types or of non-nullable Object, but this
+  // method is not called for those types, so the object cannot be an instance.
+  __ CompareObject(kScratch1Reg, Object::null_object());
+  __ BranchIf(EQUAL, is_not_instance_lbl);
+  __ LoadTypeClassId(kScratch1Reg, kScratch1Reg);
+  __ CompareImmediate(kScratch1Reg, type_class.id());
+  __ BranchIf(EQUAL, is_instance_lbl);
 
   return GenerateCallSubtypeTestStub(kTestTypeOneArg, is_instance_lbl,
                                      is_not_instance_lbl);
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 7f82524..8e7e24d 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -3002,6 +3002,11 @@
   return NULL;
 }
 
+Instruction* RecordCoverageInstr::Canonicalize(FlowGraph* flow_graph) {
+  ASSERT(!coverage_array_.IsNull());
+  return coverage_array_.At(coverage_index_) != Smi::New(0) ? nullptr : this;
+}
+
 Definition* BoxInstr::Canonicalize(FlowGraph* flow_graph) {
   if (input_use_list() == nullptr) {
     // Environments can accommodate any representation. No need to box.
@@ -6783,6 +6788,28 @@
   return locs;
 }
 
+LocationSummary* RecordCoverageInstr::MakeLocationSummary(Zone* zone,
+                                                          bool opt) const {
+  const intptr_t kNumInputs = 0;
+  const intptr_t kNumTemps = 2;
+  LocationSummary* locs = new (zone)
+      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  locs->set_temp(0, Location::RequiresRegister());
+  locs->set_temp(1, Location::RequiresRegister());
+  return locs;
+}
+
+void RecordCoverageInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const auto array_temp = locs()->temp(0).reg();
+  const auto value_temp = locs()->temp(1).reg();
+
+  __ LoadObject(array_temp, coverage_array_);
+  __ LoadImmediate(value_temp, Smi::RawValue(1));
+  __ StoreFieldToOffset(value_temp, array_temp,
+                        Array::element_offset(coverage_index_),
+                        compiler::kObjectBytes);
+}
+
 #undef Z
 
 Representation FfiCallInstr::representation() const {
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index a6f9d2d..745412a 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -426,6 +426,7 @@
   M(RelationalOp, kNoGC)                                                       \
   M(NativeCall, _)                                                             \
   M(DebugStepCheck, _)                                                         \
+  M(RecordCoverage, kNoGC)                                                     \
   M(LoadIndexed, kNoGC)                                                        \
   M(LoadCodeUnits, kNoGC)                                                      \
   M(StoreIndexed, kNoGC)                                                       \
@@ -6017,6 +6018,31 @@
   DISALLOW_COPY_AND_ASSIGN(StoreIndexedInstr);
 };
 
+class RecordCoverageInstr : public TemplateInstruction<0, NoThrow> {
+ public:
+  RecordCoverageInstr(const Array& coverage_array,
+                      intptr_t coverage_index,
+                      const InstructionSource& source)
+      : TemplateInstruction(source),
+        coverage_array_(coverage_array),
+        coverage_index_(coverage_index),
+        token_pos_(source.token_pos) {}
+
+  DECLARE_INSTRUCTION(RecordCoverage)
+
+  virtual TokenPosition token_pos() const { return token_pos_; }
+  virtual bool ComputeCanDeoptimize() const { return false; }
+  virtual bool HasUnknownSideEffects() const { return false; }
+  virtual Instruction* Canonicalize(FlowGraph* flow_graph);
+
+ private:
+  const Array& coverage_array_;
+  const intptr_t coverage_index_;
+  const TokenPosition token_pos_;
+
+  DISALLOW_COPY_AND_ASSIGN(RecordCoverageInstr);
+};
+
 // Note overrideable, built-in: value ? false : true.
 class BooleanNegateInstr : public TemplateDefinition<1, NoThrow> {
  public:
@@ -6164,6 +6190,7 @@
  private:
   friend class BranchInstr;
   friend class IfThenElseInstr;
+  friend class RecordCoverageInstr;
 
   virtual void RawSetInputAt(intptr_t i, Value* value) { inputs_[i] = value; }
 };
@@ -6665,6 +6692,9 @@
     return calls_initializer() && !throw_exception_on_initialization();
   }
 
+  virtual bool CanCallDart() const {
+    return calls_initializer() && !throw_exception_on_initialization();
+  }
   virtual bool CanTriggerGC() const { return calls_initializer(); }
   virtual bool MayThrow() const { return calls_initializer(); }
 
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 7432fad..ce64f09 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -3964,13 +3964,12 @@
     if (ValueFitsSmi()) {
       return;
     }
-    __ cmp(out, compiler::Operand(value, LSL, 1));
+    __ cmpw(value, compiler::Operand(out, ASR, 1));
     __ b(&done, EQ);  // Jump if the sbfiz instruction didn't lose info.
   } else {
     ASSERT(from_representation() == kUnboxedUint32);
     // A 32 bit positive Smi has one tag bit and one unused sign bit,
     // leaving only 30 bits for the payload.
-    // __ ubfiz(out, value, kSmiTagSize, compiler::target::kSmiBits);
     __ LslImmediate(out, value, kSmiTagSize, compiler::kFourBytes);
     if (ValueFitsSmi()) {
       return;
@@ -6083,14 +6082,14 @@
       compiler::Label* deopt =
           compiler->AddDeoptStub(deopt_id(), ICData::kDeoptBinaryInt64Op);
 
-      __ tbnz(deopt, right, kBitsPerWord - 1);
+      __ tbnz(deopt, right, compiler::target::kSmiBits + 1);
     }
 
     EmitShiftUint32ByRegister(compiler, op_kind(), out, left, right);
 
     if (!shift_count_in_range) {
       // If shift value is > 31, return zero.
-      __ CompareImmediate(right, 31);
+      __ CompareImmediate(right, 31, compiler::kObjectBytes);
       __ csel(out, out, ZR, LE);
     }
   }
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index b3c92e0..2ad4305 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -6608,12 +6608,12 @@
         compiler::Label* deopt =
             compiler->AddDeoptStub(deopt_id(), ICData::kDeoptBinaryInt64Op);
 
-        __ testq(RCX, RCX);
+        __ OBJ(test)(RCX, RCX);
         __ j(LESS, deopt);
       }
 
       compiler::Label cont;
-      __ cmpq(RCX, compiler::Immediate(kUint32ShiftCountLimit));
+      __ OBJ(cmp)(RCX, compiler::Immediate(kUint32ShiftCountLimit));
       __ j(LESS_EQUAL, &cont);
 
       __ xorl(left, left);
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index 7d35302..74a7257 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -642,8 +642,6 @@
   }
 
  private:
-  typedef DirectChainedHashMap<PointerKeyValueTrait<Instruction> > Map;
-
   Instruction* EmitRecursively(Instruction* instruction, Instruction* sink) {
     // Schedule all unscheduled inputs and unwrap all constrained inputs.
     for (intptr_t i = 0; i < instruction->InputCount(); i++) {
@@ -723,7 +721,7 @@
   }
 
   FlowGraph* flow_graph_;
-  Map map_;
+  PointerSet<Instruction> map_;
   const ZoneGrowableArray<BlockEntryInstr*>& loop_headers_;
   GrowableArray<BlockEntryInstr*> pre_headers_;
   GrowableArray<Instruction*> emitted_;
diff --git a/runtime/vm/compiler/backend/redundancy_elimination.cc b/runtime/vm/compiler/backend/redundancy_elimination.cc
index a704ac9..6f13e1f 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination.cc
@@ -46,9 +46,7 @@
   }
 
  private:
-  typedef DirectChainedHashMap<PointerKeyValueTrait<Instruction> > Map;
-
-  Map map_;
+  PointerSet<Instruction> map_;
 };
 
 // Place describes an abstract location (e.g. field) that IR can load
@@ -683,7 +681,7 @@
 class AliasedSet : public ZoneAllocated {
  public:
   AliasedSet(Zone* zone,
-             DirectChainedHashMap<PointerKeyValueTrait<Place> >* places_map,
+             PointerSet<Place>* places_map,
              ZoneGrowableArray<Place*>* places,
              PhiPlaceMoves* phi_moves)
       : zone_(zone),
@@ -1179,7 +1177,7 @@
 
   Zone* zone_;
 
-  DirectChainedHashMap<PointerKeyValueTrait<Place> >* places_map_;
+  PointerSet<Place>* places_map_;
 
   const ZoneGrowableArray<Place*>& places_;
 
@@ -1188,7 +1186,7 @@
   // A list of all seen aliases and a map that allows looking up canonical
   // alias object.
   GrowableArray<const Place*> aliases_;
-  DirectChainedHashMap<PointerKeyValueTrait<const Place> > aliases_map_;
+  PointerSet<const Place> aliases_map_;
 
   SmallSet<Place::ElementSize> typed_data_access_sizes_;
 
@@ -1244,9 +1242,8 @@
 // corresponding to phi input are numbered and record outgoing phi moves
 // for each block which establish correspondence between phi dependent place
 // and phi input's place that is flowing in.
-static PhiPlaceMoves* ComputePhiMoves(
-    DirectChainedHashMap<PointerKeyValueTrait<Place> >* map,
-    ZoneGrowableArray<Place*>* places) {
+static PhiPlaceMoves* ComputePhiMoves(PointerSet<Place>* map,
+                                      ZoneGrowableArray<Place*>* places) {
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
   PhiPlaceMoves* phi_moves = new (zone) PhiPlaceMoves();
@@ -1300,10 +1297,9 @@
 
 enum CSEMode { kOptimizeLoads, kOptimizeStores };
 
-static AliasedSet* NumberPlaces(
-    FlowGraph* graph,
-    DirectChainedHashMap<PointerKeyValueTrait<Place> >* map,
-    CSEMode mode) {
+static AliasedSet* NumberPlaces(FlowGraph* graph,
+                                PointerSet<Place>* map,
+                                CSEMode mode) {
   // Loads representing different expression ids will be collected and
   // used to build per offset kill sets.
   Zone* zone = graph->zone();
@@ -1735,7 +1731,7 @@
       return false;
     }
 
-    DirectChainedHashMap<PointerKeyValueTrait<Place> > map;
+    PointerSet<Place> map;
     AliasedSet* aliased_set = NumberPlaces(graph, &map, kOptimizeLoads);
     if ((aliased_set != NULL) && !aliased_set->IsEmpty()) {
       // If any loads were forwarded return true from Optimize to run load
@@ -2774,7 +2770,7 @@
   }
 
   FlowGraph* graph_;
-  DirectChainedHashMap<PointerKeyValueTrait<Place> >* map_;
+  PointerSet<Place>* map_;
 
   // Mapping between field offsets in words and expression ids of loads from
   // that offset.
@@ -2866,7 +2862,7 @@
  public:
   StoreOptimizer(FlowGraph* graph,
                  AliasedSet* aliased_set,
-                 DirectChainedHashMap<PointerKeyValueTrait<Place> >* map)
+                 PointerSet<Place>* map)
       : LivenessAnalysis(aliased_set->max_place_id(), graph->postorder()),
         graph_(graph),
         map_(map),
@@ -2887,7 +2883,7 @@
       return;
     }
 
-    DirectChainedHashMap<PointerKeyValueTrait<Place> > map;
+    PointerSet<Place> map;
     AliasedSet* aliased_set = NumberPlaces(graph, &map, kOptimizeStores);
     if ((aliased_set != NULL) && !aliased_set->IsEmpty()) {
       StoreOptimizer store_optimizer(graph, aliased_set, &map);
@@ -3048,7 +3044,7 @@
   }
 
   FlowGraph* graph_;
-  DirectChainedHashMap<PointerKeyValueTrait<Place> >* map_;
+  PointerSet<Place>* map_;
 
   // Mapping between field offsets in words and expression ids of loads from
   // that offset.
diff --git a/runtime/vm/compiler/backend/slot.cc b/runtime/vm/compiler/backend/slot.cc
index 15f0080..b4b9920 100644
--- a/runtime/vm/compiler/backend/slot.cc
+++ b/runtime/vm/compiler/backend/slot.cc
@@ -43,7 +43,7 @@
       : zone_(thread->zone()), fields_(thread->zone()) {}
 
   Zone* const zone_;
-  DirectChainedHashMap<PointerKeyValueTrait<const Slot> > fields_;
+  PointerSet<const Slot> fields_;
 };
 
 #define NATIVE_SLOT_NAME(C, F) Kind::k##C##_##F
diff --git a/runtime/vm/compiler/ffi/callback.cc b/runtime/vm/compiler/ffi/callback.cc
index d1d9b67..ef58014 100644
--- a/runtime/vm/compiler/ffi/callback.cc
+++ b/runtime/vm/compiler/ffi/callback.cc
@@ -52,7 +52,8 @@
   //
   // Exceptional return values currently cannot be pointers because we don't
   // have constant pointers.
-  ASSERT(exceptional_return.IsNull() || exceptional_return.IsNumber());
+  ASSERT(exceptional_return.IsNull() || exceptional_return.IsNumber() ||
+         exceptional_return.IsBool());
   if (!exceptional_return.IsSmi() && exceptional_return.IsNew()) {
     function.SetFfiCallbackExceptionalReturn(Instance::Handle(
         zone, exceptional_return.CopyShallowToOldSpace(thread)));
diff --git a/runtime/vm/compiler/ffi/marshaller.h b/runtime/vm/compiler/ffi/marshaller.h
index 9d9f3cc..fc29f67 100644
--- a/runtime/vm/compiler/ffi/marshaller.h
+++ b/runtime/vm/compiler/ffi/marshaller.h
@@ -109,6 +109,10 @@
     return AbstractType::Handle(zone_, CType(arg_index)).type_class_id() ==
            kFfiHandleCid;
   }
+  bool IsBool(intptr_t arg_index) const {
+    return AbstractType::Handle(zone_, CType(arg_index)).type_class_id() ==
+           kFfiBoolCid;
+  }
 
   bool IsCompound(intptr_t arg_index) const {
     const auto& type = AbstractType::Handle(zone_, CType(arg_index));
diff --git a/runtime/vm/compiler/ffi/native_type.cc b/runtime/vm/compiler/ffi/native_type.cc
index 125fa3e..6dfaeb7 100644
--- a/runtime/vm/compiler/ffi/native_type.cc
+++ b/runtime/vm/compiler/ffi/native_type.cc
@@ -357,6 +357,7 @@
       return kInt16;
     case kFfiInt32Cid:
       return kInt32;
+    case kFfiBoolCid:
     case kFfiUint8Cid:
       return kUint8;
     case kFfiUint16Cid:
diff --git a/runtime/vm/compiler/ffi/native_type_vm_test.cc b/runtime/vm/compiler/ffi/native_type_vm_test.cc
index 52f0835..196ae4c 100644
--- a/runtime/vm/compiler/ffi/native_type_vm_test.cc
+++ b/runtime/vm/compiler/ffi/native_type_vm_test.cc
@@ -25,6 +25,28 @@
   EXPECT(native_type.IsPrimitive());
 }
 
+// In all calling conventions `bool` behaves as `uint8_t` when it comes to:
+// - size
+// - alignment in structs
+// - alignment on stack
+// - upper bytes in cpu registers.
+ISOLATE_UNIT_TEST_CASE(Ffi_NativeType_Bool_FromAbstractType) {
+  Zone* Z = thread->zone();
+
+  const auto& ffi_library = Library::Handle(Library::FfiLibrary());
+  const auto& bool_class = Class::Handle(GetClass(ffi_library, "Bool"));
+  const auto& bool_type = Type::Handle(bool_class.DeclarationType());
+  const auto& bool_native_type = NativeType::FromAbstractType(Z, bool_type);
+
+  const auto& uint8_native_type = *new (Z) NativePrimitiveType(kUint8);
+
+  EXPECT(bool_native_type.Equals(uint8_native_type));
+  EXPECT_EQ(1, bool_native_type.SizeInBytes());
+  EXPECT_STREQ("uint8", bool_native_type.ToCString());
+  EXPECT(bool_native_type.IsInt());
+  EXPECT(bool_native_type.IsPrimitive());
+}
+
 // Test that we construct `NativeType` correctly from `Type`.
 ISOLATE_UNIT_TEST_CASE(Ffi_NativeType_Struct_FromAbstractType) {
   Zone* Z = thread->zone();
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
index b16a368..7b9bac9 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
@@ -1138,10 +1138,25 @@
   return call_hook;
 }
 
+static bool SupportsCoverage() {
+#if defined(PRODUCT)
+  return false;
+#else
+  return !CompilerState::Current().is_aot();
+#endif
+}
+
 Fragment BaseFlowGraphBuilder::ClosureCall(TokenPosition position,
                                            intptr_t type_args_len,
                                            intptr_t argument_count,
                                            const Array& argument_names) {
+  Fragment result;
+
+  if (SupportsCoverage()) {
+    const intptr_t coverage_index = GetCoverageIndexFor(position);
+    result <<= new (Z) RecordCoverageInstr(coverage_array(), coverage_index,
+                                           InstructionSource(position));
+  }
   const intptr_t total_count =
       (type_args_len > 0 ? 1 : 0) + argument_count +
       /*closure (bare instructions) or function (otherwise)*/ 1;
@@ -1150,7 +1165,8 @@
       new (Z) ClosureCallInstr(arguments, type_args_len, argument_names,
                                InstructionSource(position), GetNextDeoptId());
   Push(call);
-  return Fragment(call);
+  result <<= call;
+  return result;
 }
 
 void BaseFlowGraphBuilder::reset_context_depth_for_deopt_id(intptr_t deopt_id) {
@@ -1233,5 +1249,53 @@
   return Fragment(instr);
 }
 
+intptr_t BaseFlowGraphBuilder::GetCoverageIndexFor(TokenPosition token_pos) {
+  if (coverage_array_.IsNull()) {
+    // We have not yet created coverage_array, this is the first time
+    // we are building the graph for this function. Collect coverage
+    // positions.
+    for (intptr_t i = 0; i < coverage_array_positions_.length(); i++) {
+      if (coverage_array_positions_.At(i) == token_pos) {
+        return 2 * i + 1;
+      }
+    }
+    const auto index = 2 * coverage_array_positions_.length() + 1;
+    coverage_array_positions_.Add(token_pos);
+    return index;
+  }
+
+  for (intptr_t i = 0; i < coverage_array_.Length(); i += 2) {
+    if (TokenPosition::Deserialize(Smi::Value(
+            static_cast<SmiPtr>(coverage_array_.At(i)))) == token_pos) {
+      return i + 1;
+    }
+  }
+  // Reaching here indicates that the graph is constructed in an unstable way.
+  UNREACHABLE();
+  return 1;
+}
+
+void BaseFlowGraphBuilder::FinalizeCoverageArray() {
+  if (!coverage_array_.IsNull()) {
+    return;
+  }
+
+  if (coverage_array_positions_.is_empty()) {
+    coverage_array_ = Array::empty_array().ptr();
+    return;
+  }
+
+  coverage_array_ =
+      Array::New(coverage_array_positions_.length() * 2, Heap::kOld);
+
+  Smi& value = Smi::Handle();
+  for (intptr_t i = 0; i < coverage_array_positions_.length(); i++) {
+    value = Smi::New(coverage_array_positions_[i].Serialize());
+    coverage_array_.SetAt(2 * i, value);
+    value = Smi::New(0);  // no coverage recorded.
+    coverage_array_.SetAt(2 * i + 1, value);
+  }
+}
+
 }  // namespace kernel
 }  // namespace dart
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.h b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
index 0a5339f..ee7e7ce 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.h
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
@@ -159,7 +159,15 @@
         saved_args_desc_array_(
             has_saved_args_desc_array()
                 ? Array::ZoneHandle(zone_, function_.saved_args_desc())
-                : Object::null_array()) {}
+                : Object::null_array()),
+        coverage_array_(
+            Array::ZoneHandle(parsed_function->function().GetCoverageArray())) {
+  }
+
+  const Array& coverage_array() const { return coverage_array_; }
+
+  intptr_t GetCoverageIndexFor(TokenPosition token_pos);
+  void FinalizeCoverageArray();
 
   Fragment LoadField(const Field& field, bool calls_initializer);
   Fragment LoadNativeField(const Slot& native_field,
@@ -496,6 +504,9 @@
   const bool inlining_unchecked_entry_;
   const Array& saved_args_desc_array_;
 
+  GrowableArray<TokenPosition> coverage_array_positions_;
+  Array& coverage_array_;
+
   friend class StreamingFlowGraphBuilder;
 
  private:
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 8c1f3bc..798174d 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -725,7 +725,8 @@
   } else if (has_body) {
     body += BuildStatement();
   } else if (dart_function.is_external()) {
-    body += ThrowNoSuchMethodError(dart_function);
+    body +=
+        ThrowNoSuchMethodError(dart_function, /*incompatible_arguments=*/false);
   }
 
   if (body.is_open()) {
@@ -1535,8 +1536,10 @@
 }
 
 Fragment StreamingFlowGraphBuilder::ThrowNoSuchMethodError(
-    const Function& target) {
-  return flow_graph_builder_->ThrowNoSuchMethodError(target);
+    const Function& target,
+    bool incompatible_arguments) {
+  return flow_graph_builder_->ThrowNoSuchMethodError(target,
+                                                     incompatible_arguments);
 }
 
 Fragment StreamingFlowGraphBuilder::Constant(const Object& value) {
@@ -1571,7 +1574,9 @@
                                                intptr_t argument_count,
                                                ICData::RebindRule rebind_rule) {
   if (!target.AreValidArgumentCounts(0, argument_count, 0, nullptr)) {
-    return flow_graph_builder_->ThrowNoSuchMethodError(target);
+    return flow_graph_builder_->ThrowNoSuchMethodError(
+        target,
+        /*incompatible_arguments=*/true);
   }
   return flow_graph_builder_->StaticCall(position, target, argument_count,
                                          rebind_rule);
@@ -1588,7 +1593,9 @@
     bool use_unchecked_entry) {
   if (!target.AreValidArguments(type_args_count, argument_count, argument_names,
                                 nullptr)) {
-    return flow_graph_builder_->ThrowNoSuchMethodError(target);
+    return flow_graph_builder_->ThrowNoSuchMethodError(
+        target,
+        /*incompatible_arguments=*/true);
   }
   return flow_graph_builder_->StaticCall(
       position, target, argument_count, argument_names, rebind_rule,
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index 7160201..3cd6257 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -159,7 +159,8 @@
       intptr_t yield_index = UntaggedPcDescriptors::kInvalidYieldIndex);
   Fragment EvaluateAssertion();
   Fragment RethrowException(TokenPosition position, int catch_try_index);
-  Fragment ThrowNoSuchMethodError(const Function& target);
+  Fragment ThrowNoSuchMethodError(const Function& target,
+                                  bool incompatible_arguments);
   Fragment Constant(const Object& value);
   Fragment IntConstant(int64_t value);
   Fragment LoadStaticField(const Field& field, bool calls_initializer);
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph_test.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph_test.cc
index 6bb19fa..ca7fcc2 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph_test.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph_test.cc
@@ -333,6 +333,9 @@
     kMatchAndMoveCheckNull,
     kMatchAndMoveLoadField,
     kMoveDebugStepChecks,
+#if !defined(PRODUCT)
+    kMatchAndMoveRecordCoverage,
+#endif
     kMatchAndMoveClosureCall,
     kMoveDebugStepChecks,
     kMatchReturn,
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index ab29403..efd2f8e 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -674,7 +674,8 @@
   return instructions;
 }
 
-Fragment FlowGraphBuilder::ThrowNoSuchMethodError(const Function& target) {
+Fragment FlowGraphBuilder::ThrowNoSuchMethodError(const Function& target,
+                                                  bool incompatible_arguments) {
   const Class& klass = Class::ZoneHandle(
       Z, Library::LookupCoreClass(Symbols::NoSuchMethodError()));
   ASSERT(!klass.IsNull());
@@ -687,7 +688,7 @@
   Fragment instructions;
 
   const Class& owner = Class::Handle(Z, target.Owner());
-  AbstractType& receiver = AbstractType::ZoneHandle();
+  auto& receiver = Instance::ZoneHandle();
   InvocationMirror::Kind kind = InvocationMirror::Kind::kMethod;
   if (target.IsImplicitGetterFunction() || target.IsGetterFunction()) {
     kind = InvocationMirror::kGetter;
@@ -696,6 +697,9 @@
   }
   InvocationMirror::Level level;
   if (owner.IsTopLevel()) {
+    if (incompatible_arguments) {
+      receiver = target.UserVisibleSignature();
+    }
     level = InvocationMirror::Level::kTopLevel;
   } else {
     receiver = owner.RareType();
@@ -768,7 +772,12 @@
 
   StreamingFlowGraphBuilder streaming_flow_graph_builder(
       this, kernel_data, kernel_data_program_offset);
-  return streaming_flow_graph_builder.BuildGraph();
+  auto result = streaming_flow_graph_builder.BuildGraph();
+
+  FinalizeCoverageArray();
+  result->set_coverage_array(coverage_array());
+
+  return result;
 }
 
 Fragment FlowGraphBuilder::NativeFunctionBody(const Function& function,
@@ -3959,6 +3968,48 @@
   return Fragment(unbox);
 }
 
+// TODO(http://dartbug.com/47487): Support unboxed output value.
+Fragment FlowGraphBuilder::BoolToInt() {
+  // TODO(http://dartbug.com/36855) Build IfThenElseInstr, instead of letting
+  // the optimizer turn this into that.
+
+  LocalVariable* expression_temp = parsed_function_->expression_temp_var();
+
+  Fragment instructions;
+  TargetEntryInstr* is_true;
+  TargetEntryInstr* is_false;
+
+  instructions += BranchIfTrue(&is_true, &is_false);
+  JoinEntryInstr* join = BuildJoinEntry();
+
+  {
+    Fragment store_1(is_true);
+    store_1 += IntConstant(1);
+    store_1 += StoreLocal(TokenPosition::kNoSource, expression_temp);
+    store_1 += Drop();
+    store_1 += Goto(join);
+  }
+
+  {
+    Fragment store_0(is_false);
+    store_0 += IntConstant(0);
+    store_0 += StoreLocal(TokenPosition::kNoSource, expression_temp);
+    store_0 += Drop();
+    store_0 += Goto(join);
+  }
+
+  instructions = Fragment(instructions.entry, join);
+  instructions += LoadLocal(expression_temp);
+  return instructions;
+}
+
+Fragment FlowGraphBuilder::IntToBool() {
+  Fragment body;
+  body += IntConstant(0);
+  body += StrictCompare(Token::kNE_STRICT);
+  return body;
+}
+
 Fragment FlowGraphBuilder::NativeReturn(
     const compiler::ffi::CallbackMarshaller& marshaller) {
   auto* instr = new (Z)
@@ -4314,6 +4365,10 @@
     }
 
     body += Box(marshaller.RepInDart(arg_index));
+
+    if (marshaller.IsBool(arg_index)) {
+      body += IntToBool();
+    }
   }
   return body;
 }
@@ -4332,6 +4387,10 @@
   } else if (marshaller.IsHandle(arg_index)) {
     body += WrapHandle(api_local_scope);
   } else {
+    if (marshaller.IsBool(arg_index)) {
+      body += BoolToInt();
+    }
+
     body += UnboxTruncate(marshaller.RepInDart(arg_index));
   }
 
@@ -4388,6 +4447,7 @@
     }
     function_body += LoadLocal(
         parsed_function_->ParameterVariable(kFirstArgumentParameterOffset + i));
+    // TODO(http://dartbug.com/47486): Support entry without checking for null.
     // Check for 'null'.
     function_body += CheckNullOptimized(
         String::ZoneHandle(
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index 20c5b77c..6dfc141 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -226,7 +226,11 @@
   Fragment StringInterpolateSingle(TokenPosition position);
   Fragment StringInterpolate(TokenPosition position);
   Fragment ThrowTypeError();
-  Fragment ThrowNoSuchMethodError(const Function& target);
+
+  // [incompatible_arguments] should be true if the NSM is due to a mismatch
+  // between the provided arguments and the function signature.
+  Fragment ThrowNoSuchMethodError(const Function& target,
+                                  bool incompatible_arguments);
   Fragment ThrowLateInitializationError(TokenPosition position,
                                         const char* throw_method_name,
                                         const String& name);
@@ -271,6 +275,12 @@
   // target representation.
   Fragment UnboxTruncate(Representation to);
 
+  // Converts a true to 1 and false to 0.
+  Fragment BoolToInt();
+
+  // Converts 0 to false and the rest to true.
+  Fragment IntToBool();
+
   // Creates an ffi.Pointer holding a given address (TOS).
   Fragment FfiPointerFromAddress(const Type& result_type);
 
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index db4e074..378ea73 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -1166,6 +1166,10 @@
       }
       if (++next_read_ == field) return;
       FALL_THROUGH;
+    case kSignatureType:
+      helper_->SkipOptionalDartType();  // read signature type.
+      if (++next_read_ == field) return;
+      FALL_THROUGH;
     case kFunction:
       helper_->SkipFunctionNode();  // read function node.
       if (++next_read_ == field) return;
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index c854d07..cfe75b0 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -532,6 +532,7 @@
     kName,
     kAnnotations,
     kStubTarget,
+    kSignatureType,
     kFunction,
     kEnd,
   };
diff --git a/runtime/vm/compiler/jit/compiler.cc b/runtime/vm/compiler/jit/compiler.cc
index c9f4f86..acdb7c6 100644
--- a/runtime/vm/compiler/jit/compiler.cc
+++ b/runtime/vm/compiler/jit/compiler.cc
@@ -243,7 +243,7 @@
     // immediately, causing an infinite compilation loop. The compiler raises
     // the threshold for functions with breakpoints, so we drop the unoptimized
     // to force it to be recompiled.
-    if (thread->isolate()->CanOptimizeImmediately()) {
+    if (CanOptimizeImmediately()) {
       function.ClearCode();
     }
     return false;
@@ -461,11 +461,10 @@
       }
     }
   } else {  // not optimized.
-    if (function.ic_data_array() == Array::null()) {
-      function.SaveICDataMap(
-          graph_compiler->deopt_id_to_ic_data(),
-          Array::Handle(zone, graph_compiler->edge_counters_array()));
-    }
+    function.SaveICDataMap(
+        graph_compiler->deopt_id_to_ic_data(),
+        Array::Handle(zone, graph_compiler->edge_counters_array()),
+        flow_graph->coverage_array());
     function.set_unoptimized_code(code);
     function.AttachCode(code);
     function.SetWasCompiled(true);
@@ -1110,9 +1109,8 @@
 
 BackgroundCompiler::BackgroundCompiler(IsolateGroup* isolate_group)
     : isolate_group_(isolate_group),
-      queue_monitor_(),
+      monitor_(),
       function_queue_(new BackgroundCompilationQueue()),
-      done_monitor_(),
       running_(false),
       done_(true),
       disabled_depth_(0) {}
@@ -1123,72 +1121,56 @@
 }
 
 void BackgroundCompiler::Run() {
-  while (true) {
-    // Maybe something is already in the queue, check first before waiting
-    // to be notified.
-    bool result = Thread::EnterIsolateGroupAsHelper(
-        isolate_group_, Thread::kCompilerTask, /*bypass_safepoint=*/false);
-    ASSERT(result);
+  bool result = Thread::EnterIsolateGroupAsHelper(
+      isolate_group_, Thread::kCompilerTask, /*bypass_safepoint=*/false);
+  ASSERT(result);
+  {
+    Thread* thread = Thread::Current();
+    StackZone stack_zone(thread);
+    Zone* zone = stack_zone.GetZone();
+    HANDLESCOPE(thread);
+    Function& function = Function::Handle(zone);
+    QueueElement* element = nullptr;
     {
-      Thread* thread = Thread::Current();
-      StackZone stack_zone(thread);
-      Zone* zone = stack_zone.GetZone();
-      HANDLESCOPE(thread);
-      Function& function = Function::Handle(zone);
-      {
-        SafepointMonitorLocker ml(&queue_monitor_);
-        if (running_) {
-          function = function_queue()->PeekFunction();
-        }
+      SafepointMonitorLocker ml(&monitor_);
+      if (running_ && !function_queue()->IsEmpty()) {
+        element = function_queue()->Remove();
+        function ^= element->function();
       }
-      while (!function.IsNull()) {
-        Compiler::CompileOptimizedFunction(thread, function,
-                                           Compiler::kNoOSRDeoptId);
+    }
+    if (element != nullptr) {
+      delete element;
+      Compiler::CompileOptimizedFunction(thread, function,
+                                         Compiler::kNoOSRDeoptId);
 
-        QueueElement* qelem = NULL;
-        {
-          SafepointMonitorLocker ml(&queue_monitor_);
-          if (!running_ || function_queue()->IsEmpty()) {
-            // We are shutting down, queue was cleared.
-            function = Function::null();
-          } else {
-            qelem = function_queue()->Remove();
-            const Function& old = Function::Handle(qelem->Function());
-            // If an optimizable method is not optimized, put it back on
-            // the background queue (unless it was passed to foreground).
-            if ((!old.HasOptimizedCode() && old.IsOptimizable()) ||
-                FLAG_stress_test_background_compilation) {
-              if (Compiler::CanOptimizeFunction(thread, old)) {
-                QueueElement* repeat_qelem = new QueueElement(old);
-                function_queue()->Add(repeat_qelem);
-              }
-            }
-            function = function_queue()->PeekFunction();
+      // If an optimizable method is not optimized, put it back on
+      // the background queue (unless it was passed to foreground).
+      if ((!function.HasOptimizedCode() && function.IsOptimizable()) ||
+          FLAG_stress_test_background_compilation) {
+        if (Compiler::CanOptimizeFunction(thread, function)) {
+          SafepointMonitorLocker ml(&monitor_);
+          if (running_) {
+            QueueElement* repeat_qelem = new QueueElement(function);
+            function_queue()->Add(repeat_qelem);
           }
         }
-        if (qelem != NULL) {
-          delete qelem;
-        }
       }
     }
-    Thread::ExitIsolateGroupAsHelper(/*bypass_safepoint=*/false);
-    {
-      // Wait to be notified when the work queue is not empty.
-      MonitorLocker ml(&queue_monitor_);
-      while (function_queue()->IsEmpty() && running_) {
-        ml.Wait();
-      }
-      if (!running_) {
-        break;
-      }
-    }
-  }  // while running
-
+  }
+  Thread::ExitIsolateGroupAsHelper(/*bypass_safepoint=*/false);
   {
-    // Notify that the thread is done.
-    MonitorLocker ml_done(&done_monitor_);
-    done_ = true;
-    ml_done.NotifyAll();
+    MonitorLocker ml(&monitor_);
+    if (running_ && !function_queue()->IsEmpty() &&
+        Dart::thread_pool()->Run<BackgroundCompilerTask>(this)) {
+      // Successfully scheduled a new task.
+    } else {
+      // Background compiler done. This notification must happen after the
+      // thread leaves to group to avoid a shutdown race with the thread
+      // registry.
+      running_ = false;
+      done_ = true;
+      ml.NotifyAll();
+    }
   }
 }
 
@@ -1197,7 +1179,7 @@
   ASSERT(thread->IsMutatorThread());
   ASSERT(!thread->IsAtSafepoint(SafepointLevel::kGCAndDeopt));
 
-  SafepointMonitorLocker ml_done(&done_monitor_);
+  SafepointMonitorLocker ml(&monitor_);
   if (disabled_depth_ > 0) return false;
   if (!running_ && done_) {
     running_ = true;
@@ -1213,7 +1195,6 @@
     }
   }
 
-  SafepointMonitorLocker ml(&queue_monitor_);
   ASSERT(running_);
   if (function_queue()->ContainsObj(function)) {
     return true;
@@ -1233,21 +1214,16 @@
   ASSERT(thread->isolate() == nullptr || thread->IsMutatorThread());
   ASSERT(!thread->IsAtSafepoint(SafepointLevel::kGCAndDeopt));
 
-  SafepointMonitorLocker ml_done(&done_monitor_);
-  StopLocked(thread, &ml_done);
+  SafepointMonitorLocker ml(&monitor_);
+  StopLocked(thread, &ml);
 }
 
 void BackgroundCompiler::StopLocked(Thread* thread,
-                                    SafepointMonitorLocker* done_locker) {
-  {
-    SafepointMonitorLocker ml(&queue_monitor_);
-    running_ = false;
-    function_queue_->Clear();
-    ml.NotifyAll();  // Stop waiting for the queue.
-  }
-
+                                    SafepointMonitorLocker* locker) {
+  running_ = false;
+  function_queue_->Clear();
   while (!done_) {
-    done_locker->Wait();
+    locker->Wait();
   }
 }
 
@@ -1256,7 +1232,7 @@
   ASSERT(thread->IsMutatorThread());
   ASSERT(!thread->IsAtSafepoint(SafepointLevel::kGCAndDeopt));
 
-  SafepointMonitorLocker ml_done(&done_monitor_);
+  SafepointMonitorLocker ml(&monitor_);
   disabled_depth_--;
   if (disabled_depth_ < 0) {
     FATAL("Mismatched number of calls to BackgroundCompiler::Enable/Disable.");
@@ -1268,10 +1244,10 @@
   ASSERT(thread->IsMutatorThread());
   ASSERT(!thread->IsAtSafepoint(SafepointLevel::kGCAndDeopt));
 
-  SafepointMonitorLocker ml_done(&done_monitor_);
+  SafepointMonitorLocker ml(&monitor_);
   disabled_depth_++;
   if (done_) return;
-  StopLocked(thread, &ml_done);
+  StopLocked(thread, &ml);
 }
 
 #else  // DART_PRECOMPILED_RUNTIME
diff --git a/runtime/vm/compiler/jit/compiler.h b/runtime/vm/compiler/jit/compiler.h
index 456c70b..caa0903 100644
--- a/runtime/vm/compiler/jit/compiler.h
+++ b/runtime/vm/compiler/jit/compiler.h
@@ -76,6 +76,15 @@
   // The result for a function may change if debugging gets turned on/off.
   static bool CanOptimizeFunction(Thread* thread, const Function& function);
 
+#if !defined(PRODUCT)
+  // Whether it's possible for unoptimized code to optimize immediately on entry
+  // (can happen with random or very low optimization counter thresholds)
+  static bool CanOptimizeImmediately() {
+    return FLAG_optimization_counter_threshold < 2 ||
+           FLAG_randomize_optimization_counter;
+  }
+#endif
+
   // Generates code for given function without optimization and sets its code
   // field.
   //
@@ -149,13 +158,10 @@
 
   IsolateGroup* isolate_group_;
 
-  Monitor queue_monitor_;  // Controls access to the queue.
+  Monitor monitor_;  // Controls access to the queue and running state.
   BackgroundCompilationQueue* function_queue_;
-
-  Monitor done_monitor_;    // Notify/wait that the thread is done.
   bool running_;            // While true, will try to read queue and compile.
   bool done_;               // True if the thread is done.
-
   int16_t disabled_depth_;
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(BackgroundCompiler);
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index 5bc2fff..3210c35 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -369,6 +369,12 @@
 const word UntaggedAbstractType::kTypeStateFinalizedInstantiated =
     dart::UntaggedAbstractType::kFinalizedInstantiated;
 
+const bool UntaggedType::kTypeClassIdIsSigned =
+    std::is_signed<decltype(dart::UntaggedType::type_class_id_)>::value;
+
+const word UntaggedType::kTypeClassIdBitSize =
+    sizeof(dart::UntaggedType::type_class_id_) * kBitsPerByte;
+
 const word UntaggedObject::kBarrierOverlapShift =
     dart::UntaggedObject::kBarrierOverlapShift;
 
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index 85c8181..5ce613d 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -451,6 +451,12 @@
   static const word kTypeStateFinalizedInstantiated;
 };
 
+class UntaggedType : public AllStatic {
+ public:
+  static const bool kTypeClassIdIsSigned;
+  static const word kTypeClassIdBitSize;
+};
+
 class Object : public AllStatic {
  public:
   // Offset of the tags word.
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index bc544f7..494a811 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -288,7 +288,7 @@
     Thread_call_to_runtime_stub_offset = 144;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 800;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 48;
+    Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 792;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -302,7 +302,7 @@
     356;
 static constexpr dart::compiler::target::word
     Thread_double_negate_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_end_offset = 56;
+static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
@@ -331,10 +331,10 @@
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     784;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 804;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    68;
+    64;
 static constexpr dart::compiler::target::word
     Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -342,7 +342,7 @@
 static constexpr dart::compiler::target::word
     Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 84;
+    Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
     Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
@@ -383,11 +383,11 @@
     Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 32;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    60;
+    56;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 64;
+    Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -397,33 +397,33 @@
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    80;
+    76;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 76;
-static constexpr dart::compiler::target::word Thread_top_offset = 52;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
+    Thread_top_exit_frame_info_offset = 72;
+static constexpr dart::compiler::target::word Thread_top_offset = 48;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
 static constexpr dart::compiler::target::word
     Thread_unboxed_int64_runtime_arg_offset = 96;
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 92;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
     124;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    36;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
+    32;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 776;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 780;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
-static constexpr dart::compiler::target::word Type_arguments_offset = 16;
-static constexpr dart::compiler::target::word Type_hash_offset = 20;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 12;
-static constexpr dart::compiler::target::word Type_type_state_offset = 24;
-static constexpr dart::compiler::target::word Type_nullability_offset = 25;
+static constexpr dart::compiler::target::word Type_arguments_offset = 12;
+static constexpr dart::compiler::target::word Type_hash_offset = 16;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
+static constexpr dart::compiler::target::word Type_type_state_offset = 22;
+static constexpr dart::compiler::target::word Type_nullability_offset = 23;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -549,7 +549,7 @@
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
 static constexpr dart::compiler::target::word
     TransferableTypedData_InstanceSize = 4;
-static constexpr dart::compiler::target::word Type_InstanceSize = 28;
+static constexpr dart::compiler::target::word Type_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 28;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 20;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
@@ -800,188 +800,188 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1504;
+    1496;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1512;
+    1504;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 240;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 376;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 384;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 392;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1584;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 216;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 96;
+    Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1592;
+    Thread_double_truncate_round_supported_offset = 1584;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    456;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
+static constexpr dart::compiler::target::word
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1536;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
     696;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word Thread_end_offset = 112;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1568;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1600;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    128;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 160;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1520;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1528;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1544;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 504;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    112;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 256;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 248;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    152;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1520;
+    Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word Thread_top_offset = 96;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 32;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1576;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1608;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    136;
+    Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 464;
+    Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 280;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1536;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    64;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    120;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    160;
-static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word Thread_top_offset = 104;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    232;
-static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1560;
-static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1568;
+    Thread_callback_stack_return_offset = 1560;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 32;
-static constexpr dart::compiler::target::word Type_hash_offset = 40;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
-static constexpr dart::compiler::target::word Type_type_state_offset = 48;
-static constexpr dart::compiler::target::word Type_nullability_offset = 49;
+static constexpr dart::compiler::target::word Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
+static constexpr dart::compiler::target::word Type_type_state_offset = 42;
+static constexpr dart::compiler::target::word Type_nullability_offset = 43;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -1036,8 +1036,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
-        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
+        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
+        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -1109,7 +1109,7 @@
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     TransferableTypedData_InstanceSize = 8;
-static constexpr dart::compiler::target::word Type_InstanceSize = 56;
+static constexpr dart::compiler::target::word Type_InstanceSize = 48;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 48;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
@@ -1397,7 +1397,7 @@
     Thread_call_to_runtime_stub_offset = 144;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 768;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 48;
+    Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 760;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -1411,7 +1411,7 @@
     356;
 static constexpr dart::compiler::target::word
     Thread_double_negate_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_end_offset = 56;
+static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
@@ -1440,10 +1440,10 @@
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     752;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 772;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    68;
+    64;
 static constexpr dart::compiler::target::word
     Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -1451,7 +1451,7 @@
 static constexpr dart::compiler::target::word
     Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 84;
+    Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
     Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
@@ -1492,11 +1492,11 @@
     Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 32;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    60;
+    56;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 64;
+    Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -1506,33 +1506,33 @@
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    80;
+    76;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 76;
-static constexpr dart::compiler::target::word Thread_top_offset = 52;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
+    Thread_top_exit_frame_info_offset = 72;
+static constexpr dart::compiler::target::word Thread_top_offset = 48;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
 static constexpr dart::compiler::target::word
     Thread_unboxed_int64_runtime_arg_offset = 96;
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 92;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
     124;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    36;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
+    32;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 744;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 748;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
-static constexpr dart::compiler::target::word Type_arguments_offset = 16;
-static constexpr dart::compiler::target::word Type_hash_offset = 20;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 12;
-static constexpr dart::compiler::target::word Type_type_state_offset = 24;
-static constexpr dart::compiler::target::word Type_nullability_offset = 25;
+static constexpr dart::compiler::target::word Type_arguments_offset = 12;
+static constexpr dart::compiler::target::word Type_hash_offset = 16;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
+static constexpr dart::compiler::target::word Type_type_state_offset = 22;
+static constexpr dart::compiler::target::word Type_nullability_offset = 23;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -1655,7 +1655,7 @@
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
 static constexpr dart::compiler::target::word
     TransferableTypedData_InstanceSize = 4;
-static constexpr dart::compiler::target::word Type_InstanceSize = 28;
+static constexpr dart::compiler::target::word Type_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 28;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 20;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
@@ -1906,188 +1906,188 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1568;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1576;
+    1568;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 240;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 376;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 384;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 392;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1648;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 216;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 96;
+    Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1656;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    456;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
+static constexpr dart::compiler::target::word
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1600;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
     696;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word Thread_end_offset = 112;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1632;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1664;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    128;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 160;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1592;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1608;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 504;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    112;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 256;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 248;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    152;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1584;
+    Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word Thread_top_offset = 96;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 32;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1640;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1672;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    136;
+    Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 464;
+    Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 280;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1600;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    64;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    120;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    160;
-static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word Thread_top_offset = 104;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    232;
-static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1624;
-static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1632;
+    Thread_callback_stack_return_offset = 1624;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 32;
-static constexpr dart::compiler::target::word Type_hash_offset = 40;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
-static constexpr dart::compiler::target::word Type_type_state_offset = 48;
-static constexpr dart::compiler::target::word Type_nullability_offset = 49;
+static constexpr dart::compiler::target::word Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
+static constexpr dart::compiler::target::word Type_type_state_offset = 42;
+static constexpr dart::compiler::target::word Type_nullability_offset = 43;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -2142,9 +2142,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
-        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
-        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
+        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
+        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
+        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -2216,7 +2216,7 @@
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     TransferableTypedData_InstanceSize = 8;
-static constexpr dart::compiler::target::word Type_InstanceSize = 56;
+static constexpr dart::compiler::target::word Type_InstanceSize = 48;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 48;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
@@ -2464,188 +2464,188 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1504;
+    1496;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1512;
+    1504;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 240;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 376;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 384;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 392;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1584;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 216;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 96;
+    Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1592;
+    Thread_double_truncate_round_supported_offset = 1584;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    456;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
+static constexpr dart::compiler::target::word
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1536;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
     696;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word Thread_end_offset = 112;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1568;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1600;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    128;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 160;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1520;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1528;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1544;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 504;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    112;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 256;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 248;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    152;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1520;
+    Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word Thread_top_offset = 96;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 32;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1576;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1608;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    136;
+    Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 464;
+    Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 280;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1536;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    64;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    120;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    160;
-static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word Thread_top_offset = 104;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    232;
-static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1560;
-static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1568;
+    Thread_callback_stack_return_offset = 1560;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 28;
-static constexpr dart::compiler::target::word Type_hash_offset = 32;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
-static constexpr dart::compiler::target::word Type_type_state_offset = 36;
-static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word Type_hash_offset = 28;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 32;
+static constexpr dart::compiler::target::word Type_type_state_offset = 34;
+static constexpr dart::compiler::target::word Type_nullability_offset = 35;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 36;
@@ -2700,8 +2700,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
-        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
+        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
+        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -3021,188 +3021,188 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1568;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1576;
+    1568;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 240;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 376;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 384;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 392;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1648;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 216;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 96;
+    Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1656;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    456;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
+static constexpr dart::compiler::target::word
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1600;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
     696;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word Thread_end_offset = 112;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1632;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1664;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    128;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 160;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1592;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1608;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 504;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    112;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 256;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 248;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    152;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1584;
+    Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word Thread_top_offset = 96;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 32;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1640;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1672;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    136;
+    Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 464;
+    Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 280;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1600;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    64;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    120;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    160;
-static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word Thread_top_offset = 104;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    232;
-static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1624;
-static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1632;
+    Thread_callback_stack_return_offset = 1624;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 28;
-static constexpr dart::compiler::target::word Type_hash_offset = 32;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
-static constexpr dart::compiler::target::word Type_type_state_offset = 36;
-static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word Type_hash_offset = 28;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 32;
+static constexpr dart::compiler::target::word Type_type_state_offset = 34;
+static constexpr dart::compiler::target::word Type_nullability_offset = 35;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 36;
@@ -3257,9 +3257,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
-        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
-        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
+        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
+        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
+        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -3615,7 +3615,7 @@
     Thread_call_to_runtime_stub_offset = 144;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 800;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 48;
+    Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 792;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -3629,7 +3629,7 @@
     356;
 static constexpr dart::compiler::target::word
     Thread_double_negate_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_end_offset = 56;
+static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
@@ -3658,10 +3658,10 @@
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     784;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 804;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    68;
+    64;
 static constexpr dart::compiler::target::word
     Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -3669,7 +3669,7 @@
 static constexpr dart::compiler::target::word
     Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 84;
+    Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
     Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
@@ -3710,11 +3710,11 @@
     Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 32;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    60;
+    56;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 64;
+    Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -3724,33 +3724,33 @@
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    80;
+    76;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 76;
-static constexpr dart::compiler::target::word Thread_top_offset = 52;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
+    Thread_top_exit_frame_info_offset = 72;
+static constexpr dart::compiler::target::word Thread_top_offset = 48;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
 static constexpr dart::compiler::target::word
     Thread_unboxed_int64_runtime_arg_offset = 96;
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 92;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
     124;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    36;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
+    32;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 776;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 780;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
-static constexpr dart::compiler::target::word Type_arguments_offset = 16;
-static constexpr dart::compiler::target::word Type_hash_offset = 20;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 12;
-static constexpr dart::compiler::target::word Type_type_state_offset = 24;
-static constexpr dart::compiler::target::word Type_nullability_offset = 25;
+static constexpr dart::compiler::target::word Type_arguments_offset = 12;
+static constexpr dart::compiler::target::word Type_hash_offset = 16;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
+static constexpr dart::compiler::target::word Type_type_state_offset = 22;
+static constexpr dart::compiler::target::word Type_nullability_offset = 23;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -3876,7 +3876,7 @@
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
 static constexpr dart::compiler::target::word
     TransferableTypedData_InstanceSize = 4;
-static constexpr dart::compiler::target::word Type_InstanceSize = 28;
+static constexpr dart::compiler::target::word Type_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 28;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 20;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
@@ -4121,188 +4121,188 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1504;
+    1496;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1512;
+    1504;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 240;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 376;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 384;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 392;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1584;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 216;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 96;
+    Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1592;
+    Thread_double_truncate_round_supported_offset = 1584;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    456;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
+static constexpr dart::compiler::target::word
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1536;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
     696;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word Thread_end_offset = 112;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1568;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1600;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    128;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 160;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1520;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1528;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1544;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 504;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    112;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 256;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 248;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    152;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1520;
+    Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word Thread_top_offset = 96;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 32;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1576;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1608;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    136;
+    Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 464;
+    Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 280;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1536;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    64;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    120;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    160;
-static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word Thread_top_offset = 104;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    232;
-static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1560;
-static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1568;
+    Thread_callback_stack_return_offset = 1560;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 32;
-static constexpr dart::compiler::target::word Type_hash_offset = 40;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
-static constexpr dart::compiler::target::word Type_type_state_offset = 48;
-static constexpr dart::compiler::target::word Type_nullability_offset = 49;
+static constexpr dart::compiler::target::word Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
+static constexpr dart::compiler::target::word Type_type_state_offset = 42;
+static constexpr dart::compiler::target::word Type_nullability_offset = 43;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -4357,8 +4357,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
-        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
+        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
+        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -4430,7 +4430,7 @@
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     TransferableTypedData_InstanceSize = 8;
-static constexpr dart::compiler::target::word Type_InstanceSize = 56;
+static constexpr dart::compiler::target::word Type_InstanceSize = 48;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 48;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
@@ -4712,7 +4712,7 @@
     Thread_call_to_runtime_stub_offset = 144;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 768;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 48;
+    Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 760;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -4726,7 +4726,7 @@
     356;
 static constexpr dart::compiler::target::word
     Thread_double_negate_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_end_offset = 56;
+static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
@@ -4755,10 +4755,10 @@
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     752;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 772;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    68;
+    64;
 static constexpr dart::compiler::target::word
     Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -4766,7 +4766,7 @@
 static constexpr dart::compiler::target::word
     Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 84;
+    Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
     Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
@@ -4807,11 +4807,11 @@
     Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 32;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    60;
+    56;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 64;
+    Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -4821,33 +4821,33 @@
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    80;
+    76;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 76;
-static constexpr dart::compiler::target::word Thread_top_offset = 52;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
+    Thread_top_exit_frame_info_offset = 72;
+static constexpr dart::compiler::target::word Thread_top_offset = 48;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
 static constexpr dart::compiler::target::word
     Thread_unboxed_int64_runtime_arg_offset = 96;
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 92;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
     124;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    36;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
+    32;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 744;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 748;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
-static constexpr dart::compiler::target::word Type_arguments_offset = 16;
-static constexpr dart::compiler::target::word Type_hash_offset = 20;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 12;
-static constexpr dart::compiler::target::word Type_type_state_offset = 24;
-static constexpr dart::compiler::target::word Type_nullability_offset = 25;
+static constexpr dart::compiler::target::word Type_arguments_offset = 12;
+static constexpr dart::compiler::target::word Type_hash_offset = 16;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
+static constexpr dart::compiler::target::word Type_type_state_offset = 22;
+static constexpr dart::compiler::target::word Type_nullability_offset = 23;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -4970,7 +4970,7 @@
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
 static constexpr dart::compiler::target::word
     TransferableTypedData_InstanceSize = 4;
-static constexpr dart::compiler::target::word Type_InstanceSize = 28;
+static constexpr dart::compiler::target::word Type_InstanceSize = 24;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 28;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 20;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 16;
@@ -5215,188 +5215,188 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1568;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1576;
+    1568;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 240;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 376;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 384;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 392;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1648;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 216;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 96;
+    Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1656;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    456;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
+static constexpr dart::compiler::target::word
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1600;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
     696;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word Thread_end_offset = 112;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1632;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1664;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    128;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 160;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1592;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1608;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 504;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    112;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 256;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 248;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    152;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1584;
+    Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word Thread_top_offset = 96;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 32;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1640;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1672;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    136;
+    Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 464;
+    Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 280;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1600;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    64;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    120;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    160;
-static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word Thread_top_offset = 104;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    232;
-static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1624;
-static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1632;
+    Thread_callback_stack_return_offset = 1624;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 32;
-static constexpr dart::compiler::target::word Type_hash_offset = 40;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
-static constexpr dart::compiler::target::word Type_type_state_offset = 48;
-static constexpr dart::compiler::target::word Type_nullability_offset = 49;
+static constexpr dart::compiler::target::word Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
+static constexpr dart::compiler::target::word Type_type_state_offset = 42;
+static constexpr dart::compiler::target::word Type_nullability_offset = 43;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -5451,9 +5451,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
-        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
-        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
+        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
+        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
+        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -5525,7 +5525,7 @@
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     TransferableTypedData_InstanceSize = 8;
-static constexpr dart::compiler::target::word Type_InstanceSize = 56;
+static constexpr dart::compiler::target::word Type_InstanceSize = 48;
 static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 48;
 static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 40;
 static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
@@ -5767,188 +5767,188 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1504;
+    1496;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1512;
+    1504;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 240;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 376;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 384;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 392;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1584;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 216;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 96;
+    Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1592;
+    Thread_double_truncate_round_supported_offset = 1584;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    456;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
+static constexpr dart::compiler::target::word
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1536;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
     696;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word Thread_end_offset = 112;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1568;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1600;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    128;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 160;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1520;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1528;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1544;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 504;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    112;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 256;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 248;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    152;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1520;
+    Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word Thread_top_offset = 96;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 32;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1576;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1608;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    136;
+    Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 464;
+    Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 280;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1536;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    64;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    120;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    160;
-static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word Thread_top_offset = 104;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    232;
-static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1560;
-static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1568;
+    Thread_callback_stack_return_offset = 1560;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 28;
-static constexpr dart::compiler::target::word Type_hash_offset = 32;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
-static constexpr dart::compiler::target::word Type_type_state_offset = 36;
-static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word Type_hash_offset = 28;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 32;
+static constexpr dart::compiler::target::word Type_type_state_offset = 34;
+static constexpr dart::compiler::target::word Type_nullability_offset = 35;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 36;
@@ -6003,8 +6003,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
-        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
+        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
+        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -6318,188 +6318,188 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1568;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1576;
+    1568;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 240;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 376;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 384;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 392;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1648;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 216;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 96;
+    Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1656;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 448;
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    456;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
+static constexpr dart::compiler::target::word
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    1600;
+static constexpr dart::compiler::target::word
+    Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
     696;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word Thread_end_offset = 112;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1632;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1664;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    128;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 160;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1592;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1608;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 504;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    112;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 256;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 248;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    152;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1584;
+    Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word Thread_top_offset = 96;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 32;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1640;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1672;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    136;
+    Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 464;
+    Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
-static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 280;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
-static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
-static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
-static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1600;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    64;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    120;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 128;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
-static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    160;
-static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word Thread_top_offset = 104;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    232;
-static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1624;
-static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1632;
+    Thread_callback_stack_return_offset = 1624;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 28;
-static constexpr dart::compiler::target::word Type_hash_offset = 32;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
-static constexpr dart::compiler::target::word Type_type_state_offset = 36;
-static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word Type_hash_offset = 28;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 32;
+static constexpr dart::compiler::target::word Type_type_state_offset = 34;
+static constexpr dart::compiler::target::word Type_nullability_offset = 35;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 36;
@@ -6554,9 +6554,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
-        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
-        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
+        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
+        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
+        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -6952,7 +6952,7 @@
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
     800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 48;
+    AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 792;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -6967,7 +6967,7 @@
     AOT_Thread_double_abs_address_offset = 356;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_negate_address_offset = 352;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 56;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -6996,11 +6996,11 @@
     AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_through_ffi_offset = 784;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     804;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 68;
+    AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
     AOT_Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -7008,7 +7008,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 84;
+    AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
@@ -7052,11 +7052,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    32;
+    28;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 60;
+    AOT_Thread_saved_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 64;
+    AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -7066,24 +7066,24 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 80;
+    AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 76;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 52;
+    AOT_Thread_top_exit_frame_info_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    20;
+    16;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 96;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 92;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_code_offset = 124;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 36;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 40;
+    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 =
     776;
 static constexpr dart::compiler::target::word
@@ -7092,12 +7092,12 @@
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     12;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 16;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 20;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 12;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 16;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    12;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 25;
+    20;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 22;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 23;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 24;
@@ -7242,7 +7242,7 @@
 static constexpr dart::compiler::target::word AOT_LoadingUnit_InstanceSize = 20;
 static constexpr dart::compiler::target::word
     AOT_TransferableTypedData_InstanceSize = 4;
-static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
     28;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
@@ -7524,198 +7524,198 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1504;
+    AOT_Thread_active_exception_offset = 1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1512;
+    AOT_Thread_active_stacktrace_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 240;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 376;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 392;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1584;
+    1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    224;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 272;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
+    1592;
+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 = 1584;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_entry_offset = 616;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_stub_offset = 448;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_abs_address_offset = 688;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    AOT_Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word
+    AOT_Thread_execution_state_offset = 1536;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1512;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1568;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 96;
+    AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1592;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 456;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 496;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1544;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 504;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 256;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1520;
-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 = 1576;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 136;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        280;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    208;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1528;
+    1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1536;
+    AOT_Thread_saved_shadow_call_stack_offset = 1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1552;
+    AOT_Thread_safepoint_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 480;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    64;
+    56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 120;
+    AOT_Thread_saved_stack_limit_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 128;
+    AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 160;
+    AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
+    AOT_Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    40;
+    32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
+    AOT_Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 232;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
+    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 =
-    1560;
+    1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1568;
+    AOT_Thread_callback_stack_return_offset = 1560;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 40;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    24;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 48;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 49;
+    40;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -7781,8 +7781,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
-        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
+        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
+        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -7862,7 +7862,7 @@
 static constexpr dart::compiler::target::word AOT_LoadingUnit_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     AOT_TransferableTypedData_InstanceSize = 8;
-static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
     48;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
@@ -8147,198 +8147,198 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1568;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1576;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 240;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 376;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 392;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1648;
+    1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    224;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 272;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
+    1656;
+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 = 1648;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_entry_offset = 616;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_stub_offset = 448;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_abs_address_offset = 688;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    AOT_Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word
+    AOT_Thread_execution_state_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1576;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1632;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 96;
+    AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1656;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 456;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 496;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1608;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 504;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 256;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1584;
-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 = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1672;
-static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 136;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        280;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    208;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1592;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1600;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1616;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 480;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    64;
+    56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 120;
+    AOT_Thread_saved_stack_limit_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 128;
+    AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 160;
+    AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
+    AOT_Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    40;
+    32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
+    AOT_Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 232;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
+    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 =
-    1624;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1632;
+    AOT_Thread_callback_stack_return_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 40;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    24;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 48;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 49;
+    40;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -8404,9 +8404,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
-        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
-        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
+        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
+        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
+        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -8486,7 +8486,7 @@
 static constexpr dart::compiler::target::word AOT_LoadingUnit_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     AOT_TransferableTypedData_InstanceSize = 8;
-static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
     48;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
@@ -8767,198 +8767,198 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1504;
+    AOT_Thread_active_exception_offset = 1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1512;
+    AOT_Thread_active_stacktrace_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 240;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 376;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 392;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1584;
+    1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    224;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 272;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
+    1592;
+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 = 1584;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_entry_offset = 616;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_stub_offset = 448;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_abs_address_offset = 688;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    AOT_Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word
+    AOT_Thread_execution_state_offset = 1536;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1512;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1568;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 96;
+    AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1592;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 456;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 496;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1544;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 504;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 256;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1520;
-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 = 1576;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 136;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        280;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    208;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1528;
+    1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1536;
+    AOT_Thread_saved_shadow_call_stack_offset = 1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1552;
+    AOT_Thread_safepoint_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 480;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    64;
+    56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 120;
+    AOT_Thread_saved_stack_limit_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 128;
+    AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 160;
+    AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
+    AOT_Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    40;
+    32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
+    AOT_Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 232;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
+    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 =
-    1560;
+    1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1568;
+    AOT_Thread_callback_stack_return_offset = 1560;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    24;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+    32;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 34;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 35;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 36;
@@ -9024,8 +9024,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
-        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
+        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
+        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9386,198 +9386,198 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1568;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1576;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 240;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 376;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 392;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1648;
+    1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    224;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 272;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
+    1656;
+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 = 1648;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_entry_offset = 616;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_stub_offset = 448;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_abs_address_offset = 688;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    AOT_Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word
+    AOT_Thread_execution_state_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1576;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1632;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 96;
+    AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1656;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 456;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 496;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1608;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 504;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 256;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1584;
-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 = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1672;
-static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 136;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        280;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    208;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1592;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1600;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1616;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 480;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    64;
+    56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 120;
+    AOT_Thread_saved_stack_limit_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 128;
+    AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 160;
+    AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
+    AOT_Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    40;
+    32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
+    AOT_Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 232;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
+    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 =
-    1624;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1632;
+    AOT_Thread_callback_stack_return_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    24;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+    32;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 34;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 35;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 36;
@@ -9643,9 +9643,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
-        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
-        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
+        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
+        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
+        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -10046,7 +10046,7 @@
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
     800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 48;
+    AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 792;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -10061,7 +10061,7 @@
     AOT_Thread_double_abs_address_offset = 356;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_negate_address_offset = 352;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 56;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -10090,11 +10090,11 @@
     AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_through_ffi_offset = 784;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     804;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 68;
+    AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
     AOT_Thread_lazy_deopt_from_return_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -10102,7 +10102,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_lazy_specialize_type_test_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 84;
+    AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
     AOT_Thread_megamorphic_call_checked_entry_offset = 308;
 static constexpr dart::compiler::target::word
@@ -10146,11 +10146,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    32;
+    28;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 60;
+    AOT_Thread_saved_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 64;
+    AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -10160,24 +10160,24 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 80;
+    AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 76;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 52;
+    AOT_Thread_top_exit_frame_info_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    20;
+    16;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 96;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 92;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_code_offset = 124;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 36;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 40;
+    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 =
     776;
 static constexpr dart::compiler::target::word
@@ -10186,12 +10186,12 @@
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     12;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 16;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 20;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 12;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 16;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    12;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 25;
+    20;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 22;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 23;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 24;
@@ -10336,7 +10336,7 @@
 static constexpr dart::compiler::target::word AOT_LoadingUnit_InstanceSize = 20;
 static constexpr dart::compiler::target::word
     AOT_TransferableTypedData_InstanceSize = 4;
-static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
     28;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
@@ -10611,198 +10611,198 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1504;
+    AOT_Thread_active_exception_offset = 1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1512;
+    AOT_Thread_active_stacktrace_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 240;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 376;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 392;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1584;
+    1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    224;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 272;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
+    1592;
+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 = 1584;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_entry_offset = 616;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_stub_offset = 448;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_abs_address_offset = 688;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    AOT_Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word
+    AOT_Thread_execution_state_offset = 1536;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1512;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1568;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 96;
+    AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1592;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 456;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 496;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1544;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 504;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 256;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1520;
-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 = 1576;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 136;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        280;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    208;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1528;
+    1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1536;
+    AOT_Thread_saved_shadow_call_stack_offset = 1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1552;
+    AOT_Thread_safepoint_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 480;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    64;
+    56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 120;
+    AOT_Thread_saved_stack_limit_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 128;
+    AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 160;
+    AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
+    AOT_Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    40;
+    32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
+    AOT_Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 232;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
+    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 =
-    1560;
+    1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1568;
+    AOT_Thread_callback_stack_return_offset = 1560;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 40;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    24;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 48;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 49;
+    40;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -10868,8 +10868,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
-        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
+        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
+        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -10949,7 +10949,7 @@
 static constexpr dart::compiler::target::word AOT_LoadingUnit_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     AOT_TransferableTypedData_InstanceSize = 8;
-static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
     48;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
@@ -11227,198 +11227,198 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1568;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1576;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 240;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 376;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 392;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1648;
+    1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    224;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 272;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
+    1656;
+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 = 1648;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_entry_offset = 616;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_stub_offset = 448;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_abs_address_offset = 688;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    AOT_Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word
+    AOT_Thread_execution_state_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1576;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1632;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 96;
+    AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1656;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 456;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 496;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1608;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 504;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 256;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1584;
-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 = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1672;
-static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 136;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        280;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    208;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1592;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1600;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1616;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 480;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    64;
+    56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 120;
+    AOT_Thread_saved_stack_limit_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 128;
+    AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 160;
+    AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
+    AOT_Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    40;
+    32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
+    AOT_Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 232;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
+    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 =
-    1624;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1632;
+    AOT_Thread_callback_stack_return_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 40;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    24;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 48;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 49;
+    40;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -11484,9 +11484,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
-        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
-        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
+        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
+        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
+        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11566,7 +11566,7 @@
 static constexpr dart::compiler::target::word AOT_LoadingUnit_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     AOT_TransferableTypedData_InstanceSize = 8;
-static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Type_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_TypeParameter_InstanceSize =
     48;
 static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
@@ -11840,198 +11840,198 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1504;
+    AOT_Thread_active_exception_offset = 1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1512;
+    AOT_Thread_active_stacktrace_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 240;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 376;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 392;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1584;
+    1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    224;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 272;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
+    1592;
+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 = 1584;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_entry_offset = 616;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_stub_offset = 448;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_abs_address_offset = 688;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    AOT_Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word
+    AOT_Thread_execution_state_offset = 1536;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1512;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1568;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 96;
+    AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1592;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 456;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 496;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1544;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 504;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 256;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1520;
-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 = 1576;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 136;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        280;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    208;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1528;
+    1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1536;
+    AOT_Thread_saved_shadow_call_stack_offset = 1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1552;
+    AOT_Thread_safepoint_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 480;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    64;
+    56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 120;
+    AOT_Thread_saved_stack_limit_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 128;
+    AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 160;
+    AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
+    AOT_Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    40;
+    32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
+    AOT_Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 232;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
+    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 =
-    1560;
+    1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1568;
+    AOT_Thread_callback_stack_return_offset = 1560;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    24;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+    32;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 34;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 35;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 36;
@@ -12097,8 +12097,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
-        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
+        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
+        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12452,198 +12452,198 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1568;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1576;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 240;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 368;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 376;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 384;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 392;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1648;
+    1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    224;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 216;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 272;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
+    1656;
+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 = 1648;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_entry_offset = 616;
+static constexpr dart::compiler::target::word
+    AOT_Thread_deoptimize_stub_offset = 448;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_abs_address_offset = 688;
+static constexpr dart::compiler::target::word
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+static constexpr dart::compiler::target::word
+    AOT_Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word
+    AOT_Thread_execution_state_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_safepoint_stub_offset = 496;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1576;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1632;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 96;
+    AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1656;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 456;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 496;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1608;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 504;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 256;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1584;
-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 = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1672;
-static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 136;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 464;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 472;
-static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 168;
-static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 416;
-static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
-static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        280;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    208;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1592;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1600;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1616;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 480;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
-    64;
+    56;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 120;
+    AOT_Thread_saved_stack_limit_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 128;
+    AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 408;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 160;
+    AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 152;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
+    AOT_Thread_top_exit_frame_info_offset = 144;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
-    40;
+    32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_double_runtime_arg_offset = 200;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
+    AOT_Thread_unboxed_double_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 232;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_mask_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
+    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 =
-    1624;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1632;
+    AOT_Thread_callback_stack_return_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
 static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
-    24;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+    32;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 34;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 35;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 36;
@@ -12709,9 +12709,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
-        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
-        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
+        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
+        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
+        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index c340571..210001c 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -322,11 +322,7 @@
   // instantiation may result in a top type.
   // Function types cannot be top types.
   __ BranchIf(NOT_EQUAL, &done);
-  __ LoadCompressedField(
-      scratch2_reg,
-      compiler::FieldAddress(scratch1_reg,
-                             compiler::target::Type::type_class_id_offset()));
-  __ SmiUntag(scratch2_reg);
+  __ LoadTypeClassId(scratch2_reg, scratch1_reg);
   __ CompareImmediate(scratch2_reg, kDynamicCid);
   __ BranchIf(EQUAL, &is_top_type, compiler::Assembler::kNearJump);
   __ CompareImmediate(scratch2_reg, kVoidCid);
@@ -443,11 +439,7 @@
     // FutureOr is a special case because it may have the non-nullable bit set,
     // but FutureOr<T> functions as the union of T and Future<T>, so it must be
     // unwrapped to see if T is nullable.
-    __ LoadCompressedField(
-        kScratchReg,
-        compiler::FieldAddress(kCurrentTypeReg,
-                               compiler::target::Type::type_class_id_offset()));
-    __ SmiUntag(kScratchReg);
+    __ LoadTypeClassId(kScratchReg, kCurrentTypeReg);
     __ CompareImmediate(kScratchReg, kFutureOrCid);
     __ BranchIf(NOT_EQUAL, &done);
     __ LoadCompressedField(
diff --git a/runtime/vm/compiler/write_barrier_elimination_test.cc b/runtime/vm/compiler/write_barrier_elimination_test.cc
index f483b05..936d432 100644
--- a/runtime/vm/compiler/write_barrier_elimination_test.cc
+++ b/runtime/vm/compiler/write_barrier_elimination_test.cc
@@ -252,4 +252,54 @@
   EXPECT(store_into_phi->ShouldEmitStoreBarrier());
 }
 
+ISOLATE_UNIT_TEST_CASE(IRTest_WriteBarrierElimination_LoadLateField) {
+  DEBUG_ONLY(
+      SetFlagScope<bool> sfs(&FLAG_trace_write_barrier_elimination, true));
+  const char* kScript = R"(
+    class A {
+      late var x = new B();
+    }
+
+    class B {
+    }
+
+    class C {
+      C(this.a, this.b);
+      A a;
+      B b;
+    }
+
+    foo(A a) => C(a, a.x);
+
+    main() { foo(A()); }
+    )";
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+
+  Invoke(root_library, "main");
+
+  const auto& function = Function::Handle(GetFunction(root_library, "foo"));
+  TestPipeline pipeline(function, CompilerPass::kJIT);
+  FlowGraph* flow_graph = pipeline.RunPasses({});
+
+  auto entry = flow_graph->graph_entry()->normal_entry();
+  EXPECT(entry != nullptr);
+
+  StoreInstanceFieldInstr* store1 = nullptr;
+  StoreInstanceFieldInstr* store2 = nullptr;
+
+  ILMatcher cursor(flow_graph, entry);
+  RELEASE_ASSERT(cursor.TryMatch(
+      {
+          kMatchAndMoveAllocateObject,
+          kMatchAndMoveLoadField,
+          {kMatchAndMoveStoreInstanceField, &store1},
+          {kMatchAndMoveStoreInstanceField, &store2},
+      },
+      kMoveGlob));
+
+  EXPECT(store1->ShouldEmitStoreBarrier());
+  EXPECT(store2->ShouldEmitStoreBarrier());
+}
+
 }  // namespace dart
diff --git a/runtime/vm/cpu_arm.cc b/runtime/vm/cpu_arm.cc
index ac65f6d..6d300fb 100644
--- a/runtime/vm/cpu_arm.cc
+++ b/runtime/vm/cpu_arm.cc
@@ -83,12 +83,11 @@
 // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/sys_icache_invalidate.3.html
 #if defined(DART_HOST_OS_IOS)
   sys_icache_invalidate(reinterpret_cast<void*>(start), size);
-#elif defined(__linux__) && !defined(ANDROID)
-  extern void __clear_cache(char*, char*);
+#elif defined(DART_HOST_OS_LINUX)
   char* beg = reinterpret_cast<char*>(start);
   char* end = reinterpret_cast<char*>(start + size);
-  ::__clear_cache(beg, end);
-#elif defined(ANDROID)
+  __builtin___clear_cache(beg, end);
+#elif defined(DART_HOST_OS_ANDROID)
   cacheflush(start, start + size, 0);
 #else
 #error FlushICache only tested/supported on Linux, Android and iOS
diff --git a/runtime/vm/cpu_arm64.cc b/runtime/vm/cpu_arm64.cc
index d193d23..23e9fee 100644
--- a/runtime/vm/cpu_arm64.cc
+++ b/runtime/vm/cpu_arm64.cc
@@ -45,10 +45,9 @@
 #if defined(DART_HOST_OS_MACOS) || defined(DART_HOST_OS_IOS)
   sys_icache_invalidate(reinterpret_cast<void*>(start), size);
 #elif defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_LINUX)
-  extern void __clear_cache(char*, char*);
   char* beg = reinterpret_cast<char*>(start);
   char* end = reinterpret_cast<char*>(start + size);
-  ::__clear_cache(beg, end);
+  __builtin___clear_cache(beg, end);
 #elif defined(DART_HOST_OS_FUCHSIA)
   zx_status_t result = zx_cache_flush(reinterpret_cast<const void*>(start),
                                       size, ZX_CACHE_FLUSH_INSN);
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index cd3ca635..ced30ca 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -1064,9 +1064,9 @@
   return Error::null();
 }
 
-const char* Dart::FeaturesString(IsolateGroup* isolate_group,
-                                 bool is_vm_isolate,
-                                 Snapshot::Kind kind) {
+char* Dart::FeaturesString(IsolateGroup* isolate_group,
+                           bool is_vm_isolate,
+                           Snapshot::Kind kind) {
   TextBuffer buffer(64);
 
 // Different fields are included for DEBUG/RELEASE/PRODUCT.
@@ -1091,7 +1091,7 @@
   do {                                                                         \
     const bool value =                                                         \
         isolate_group != nullptr ? isolate_group->name() : flag;               \
-    ADD_FLAG(#name, value);                                                    \
+    ADD_FLAG(name, value);                                                     \
   } while (0);
 
   if (Snapshot::IncludesCode(kind)) {
@@ -1134,7 +1134,9 @@
 #error What architecture?
 #endif
 #if defined(DART_COMPRESSED_POINTERS)
-    buffer.AddString(" compressed");
+    buffer.AddString(" compressed-pointers");
+#else
+    buffer.AddString(" no-compressed-pointers");
 #endif
   }
 
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index c22f1f0..9d0cdf1 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.h
@@ -111,9 +111,10 @@
   static uword AllocateReadOnlyHandle();
   static bool IsReadOnlyHandle(uword address);
 
-  static const char* FeaturesString(IsolateGroup* isolate_group,
-                                    bool is_vm_snapshot,
-                                    Snapshot::Kind kind);
+  // The returned string has to be free()ed.
+  static char* FeaturesString(IsolateGroup* isolate_group,
+                              bool is_vm_snapshot,
+                              Snapshot::Kind kind);
   static Snapshot::Kind vm_snapshot_kind() { return vm_snapshot_kind_; }
 
   static Dart_ThreadExitCallback thread_exit_callback() {
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index cfc1759..1c7026a 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1301,7 +1301,6 @@
   bool success = false;
   {
     StackZone zone(T);
-    HANDLESCOPE(T);
     // We enter an API scope here as InitializeIsolate could compile some
     // bootstrap library files which call out to a tag handler that may create
     // Api Handles when an error is encountered.
@@ -2053,7 +2052,6 @@
     auto thread = Thread::Current();
     TransitionNativeToVM transition(thread);
     StackZone zone(thread);
-    HANDLESCOPE(thread);
 
     if (on_error_port != ILLEGAL_PORT) {
       const auto& port =
@@ -2077,7 +2075,7 @@
   Isolate* I = T->isolate();
   CHECK_API_SCOPE(T);
   CHECK_CALLBACK_STATE(T);
-  API_TIMELINE_BEGIN_END_BASIC(T);
+  API_TIMELINE_BEGIN_END(T);
   TransitionNativeToVM transition(T);
   if (I->message_handler()->HandleNextMessage() != MessageHandler::kOK) {
     return Api::NewHandle(T, T->StealStickyError());
@@ -2090,7 +2088,7 @@
   Isolate* I = T->isolate();
   CHECK_API_SCOPE(T);
   CHECK_CALLBACK_STATE(T);
-  API_TIMELINE_BEGIN_END_BASIC(T);
+  API_TIMELINE_BEGIN_END(T);
   TransitionNativeToVM transition(T);
   if (I->message_notify_callback() != NULL) {
     return Api::NewError("waitForEventSync is not supported by this embedder");
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index 683be98..47f9b7a 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -118,27 +118,17 @@
 #ifdef SUPPORT_TIMELINE
 #define API_TIMELINE_DURATION(thread)                                          \
   TimelineBeginEndScope api_tbes(thread, Timeline::GetAPIStream(), CURRENT_FUNC)
-#define API_TIMELINE_DURATION_BASIC(thread)                                    \
-  API_TIMELINE_DURATION(thread);                                               \
-  api_tbes.SetNumArguments(1);                                                 \
-  api_tbes.CopyArgument(0, "mode", "basic");
 
 #define API_TIMELINE_BEGIN_END(thread)                                         \
   TimelineBeginEndScope api_tbes(thread, Timeline::GetAPIStream(), CURRENT_FUNC)
 
-#define API_TIMELINE_BEGIN_END_BASIC(thread)                                   \
-  API_TIMELINE_BEGIN_END(thread);                                              \
-  api_tbes.SetNumArguments(1);                                                 \
-  api_tbes.CopyArgument(0, "mode", "basic");
 #else
 #define API_TIMELINE_DURATION(thread)                                          \
   do {                                                                         \
   } while (false)
-#define API_TIMELINE_DURATION_BASIC(thread) API_TIMELINE_DURATION(thread)
 #define API_TIMELINE_BEGIN_END(thread)                                         \
   do {                                                                         \
   } while (false)
-#define API_TIMELINE_BEGIN_END_BASIC(thread) API_TIMELINE_BEGIN_END(thread)
 #endif  // !PRODUCT
 
 class Api : AllStatic {
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index bed2681..7074ded 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -3128,7 +3128,6 @@
   {
     TransitionNativeToVM transition(thread);
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     for (int i = 0; i < 500; i++) {
       String& str = String::Handle();
       str ^= PersistentHandle::Cast(handles[i])->ptr();
@@ -4551,7 +4550,6 @@
   {
     TransitionNativeToVM transition1(thread);
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Smi& val = Smi::Handle();
     TransitionVMToNative transition2(thread);
 
@@ -4619,9 +4617,11 @@
   Thread* thread = Thread::Current();
   EXPECT(thread != NULL);
   ApiLocalScope* scope = thread->api_top_scope();
+  EXPECT_EQ(0, thread->ZoneSizeInBytes());
   {
     // Start a new scope and allocate some memory.
     Dart_EnterScope();
+    EXPECT_EQ(0, thread->ZoneSizeInBytes());
     for (int i = 0; i < 100; i++) {
       Dart_ScopeAllocate(16);
     }
diff --git a/runtime/vm/dart_api_state.cc b/runtime/vm/dart_api_state.cc
index 888bab9..5c81c57 100644
--- a/runtime/vm/dart_api_state.cc
+++ b/runtime/vm/dart_api_state.cc
@@ -14,6 +14,4 @@
 
 namespace dart {
 
-RelaxedAtomic<intptr_t> ApiNativeScope::current_memory_usage_ = 0;
-
 }  // namespace dart
diff --git a/runtime/vm/dart_api_state.h b/runtime/vm/dart_api_state.h
index 0741b90..e23252e 100644
--- a/runtime/vm/dart_api_state.h
+++ b/runtime/vm/dart_api_state.h
@@ -110,7 +110,7 @@
     if ((thread != NULL) && (thread->zone() == &zone_)) {
       thread->set_zone(zone_.previous_);
     }
-    zone_.DeleteAll();
+    zone_.Reset();
   }
 
  private:
@@ -656,18 +656,11 @@
     ASSERT(Current() == NULL);
     OSThread::SetThreadLocal(Api::api_native_key_,
                              reinterpret_cast<uword>(this));
-    // We manually increment the memory usage counter since there is memory
-    // initially allocated within the zone on creation.
-    IncrementNativeScopeMemoryCapacity(zone_.GetZone()->CapacityInBytes());
   }
 
   ~ApiNativeScope() {
     ASSERT(Current() == this);
     OSThread::SetThreadLocal(Api::api_native_key_, 0);
-    // We must also manually decrement the memory usage counter since the native
-    // is still holding it's initial memory and ~Zone() won't be able to
-    // determine which memory usage counter to decrement.
-    DecrementNativeScopeMemoryCapacity(zone_.GetZone()->CapacityInBytes());
   }
 
   static inline ApiNativeScope* Current() {
@@ -675,16 +668,6 @@
         OSThread::GetThreadLocal(Api::api_native_key_));
   }
 
-  static uintptr_t current_memory_usage() { return current_memory_usage_; }
-
-  static void IncrementNativeScopeMemoryCapacity(intptr_t size) {
-    current_memory_usage_.fetch_add(size);
-  }
-
-  static void DecrementNativeScopeMemoryCapacity(intptr_t size) {
-    current_memory_usage_.fetch_sub(size);
-  }
-
   Zone* zone() {
     Zone* result = zone_.GetZone();
     ASSERT(result->handles()->CountScopedHandles() == 0);
@@ -693,9 +676,6 @@
   }
 
  private:
-  // The current total memory usage within ApiNativeScopes.
-  static RelaxedAtomic<intptr_t> current_memory_usage_;
-
   ApiZone zone_;
 };
 
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 9037441..650cbd2 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -474,7 +474,7 @@
   ASSERT(num_arguments >= 0);
   const intptr_t num_pos_args = num_arguments - num_named_args;
 
-  // Build the arguments descriptor array, which consists of the the type
+  // Build the arguments descriptor array, which consists of the type
   // argument vector length (0 if none); total argument count; the positional
   // argument count; a sequence of (name, position) pairs, sorted by name, for
   // each named optional argument; and a terminating null to simplify iterating
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index 53fc598..231bc3f 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -225,7 +225,7 @@
 // There may be more than one CodeBreakpoint for one BreakpointLocation,
 // e.g. when a function gets compiled as a regular function and as a closure.
 // There may be more than one BreakpointLocation associated with CodeBreakpoint,
-// one for for every isolate in a group that sets a breakpoint at particular
+// one for every isolate in a group that sets a breakpoint at particular
 // code location represented by the CodeBreakpoint.
 // Each BreakpointLocation might be enabled/disabled based on whether it has
 // any actual breakpoints associated with it.
diff --git a/runtime/vm/handles.cc b/runtime/vm/handles.cc
index b276a08..b088957 100644
--- a/runtime/vm/handles.cc
+++ b/runtime/vm/handles.cc
@@ -19,16 +19,6 @@
 
 DEFINE_FLAG(bool, verify_handles, false, "Verify handles.");
 
-VMHandles::~VMHandles() {
-  if (FLAG_trace_handles) {
-    OS::PrintErr("***   Handle Counts for 0x(%" Px "):Zone = %d,Scoped = %d\n",
-                 reinterpret_cast<intptr_t>(this), CountZoneHandles(),
-                 CountScopedHandles());
-    OS::PrintErr("*** Deleting VM handle block 0x%" Px "\n",
-                 reinterpret_cast<intptr_t>(this));
-  }
-}
-
 void VMHandles::VisitObjectPointers(ObjectPointerVisitor* visitor) {
   return Handles<kVMHandleSizeInWords, kVMHandlesPerChunk,
                  kOffsetOfRawPtr>::VisitObjectPointers(visitor);
diff --git a/runtime/vm/handles.h b/runtime/vm/handles.h
index ed4e9db..f2f9005 100644
--- a/runtime/vm/handles.h
+++ b/runtime/vm/handles.h
@@ -107,6 +107,24 @@
     return true;
   }
 
+  intptr_t ZoneHandlesCapacityInBytes() const {
+    intptr_t capacity = 0;
+    for (HandlesBlock* block = zone_blocks_; block != nullptr;
+         block = block->next_block()) {
+      capacity += sizeof(*block);
+    }
+    return capacity;
+  }
+
+  intptr_t ScopedHandlesCapacityInBytes() const {
+    intptr_t capacity = 0;
+    for (HandlesBlock* block = scoped_blocks_; block != nullptr;
+         block = block->next_block()) {
+      capacity += sizeof(*block);
+    }
+    return capacity;
+  }
+
  protected:
   // Returns a count of active handles (used for testing purposes).
   int CountScopedHandles() const;
@@ -126,7 +144,7 @@
   class HandlesBlock : public MallocAllocated {
    public:
     explicit HandlesBlock(HandlesBlock* next)
-        : next_handle_slot_(0), next_block_(next) {}
+        : next_block_(next), next_handle_slot_(0) {}
     ~HandlesBlock();
 
     // Reinitializes handle block for reuse.
@@ -175,9 +193,9 @@
     void set_next_block(HandlesBlock* next) { next_block_ = next; }
 
    private:
-    uword data_[kHandleSizeInWords * kHandlesPerChunk];  // Handles area.
-    intptr_t next_handle_slot_;  // Next slot for allocation in current block.
     HandlesBlock* next_block_;   // Link to next block of handles.
+    intptr_t next_handle_slot_;  // Next slot for allocation in current block.
+    uword data_[kHandleSizeInWords * kHandlesPerChunk];  // Handles area.
 
     DISALLOW_COPY_AND_ASSIGN(HandlesBlock);
   };
@@ -222,7 +240,7 @@
 };
 
 static const int kVMHandleSizeInWords = 2;
-static const int kVMHandlesPerChunk = 64;
+static const int kVMHandlesPerChunk = 63;
 static const int kOffsetOfRawPtr = kWordSize;
 class VMHandles : public Handles<kVMHandleSizeInWords,
                                  kVMHandlesPerChunk,
@@ -232,12 +250,25 @@
 
   VMHandles()
       : Handles<kVMHandleSizeInWords, kVMHandlesPerChunk, kOffsetOfRawPtr>() {
+#if defined(DEBUG)
     if (FLAG_trace_handles) {
       OS::PrintErr("*** Starting a new VM handle block 0x%" Px "\n",
                    reinterpret_cast<intptr_t>(this));
     }
+#endif
   }
-  ~VMHandles();
+  ~VMHandles() {
+#if defined(DEBUG)
+    if (FLAG_trace_handles) {
+      OS::PrintErr("***   Handle Counts for 0x(%" Px
+                   "):Zone = %d,Scoped = %d\n",
+                   reinterpret_cast<intptr_t>(this), CountZoneHandles(),
+                   CountScopedHandles());
+      OS::PrintErr("*** Deleting VM handle block 0x%" Px "\n",
+                   reinterpret_cast<intptr_t>(this));
+    }
+#endif
+  }
 
   // Visit all object pointers stored in the various handles.
   void VisitObjectPointers(ObjectPointerVisitor* visitor);
diff --git a/runtime/vm/handles_impl.h b/runtime/vm/handles_impl.h
index 0697a13..c46844f 100644
--- a/runtime/vm/handles_impl.h
+++ b/runtime/vm/handles_impl.h
@@ -81,7 +81,6 @@
     AllocateHandle(Zone* zone) {
 #if defined(DEBUG)
   Thread* thread = Thread::Current();
-  ASSERT(thread->top_handle_scope() != NULL);
   ASSERT(thread->MayAllocateHandles());
 #endif  // DEBUG
   Handles* handles = zone->handles();
diff --git a/runtime/vm/hash_map.h b/runtime/vm/hash_map.h
index e1f1be9..2c816a6 100644
--- a/runtime/vm/hash_map.h
+++ b/runtime/vm/hash_map.h
@@ -359,22 +359,22 @@
 };
 
 template <typename T>
-class PointerKeyValueTrait {
+class PointerSetKeyValueTrait {
  public:
   typedef T* Value;
   typedef T* Key;
   typedef T* Pair;
 
   static Key KeyOf(Pair kv) { return kv; }
-
   static Value ValueOf(Pair kv) { return kv; }
-
   static inline uword Hash(Key key) { return key->Hash(); }
-
   static inline bool IsKeyEqual(Pair kv, Key key) { return kv->Equals(*key); }
 };
 
 template <typename T>
+using PointerSet = DirectChainedHashMap<PointerSetKeyValueTrait<T>>;
+
+template <typename T>
 class NumbersKeyValueTrait {
  public:
   typedef T Value;
@@ -408,12 +408,14 @@
   static bool IsKeyEqual(Pair kv, Key key) { return kv.key == key; }
 };
 
-class CStringSetKeyValueTrait : public PointerKeyValueTrait<const char> {
+class CStringSetKeyValueTrait {
  public:
-  using Key = PointerKeyValueTrait<const char>::Key;
-  using Value = PointerKeyValueTrait<const char>::Value;
-  using Pair = PointerKeyValueTrait<const char>::Pair;
+  using Key = const char*;
+  using Value = const char*;
+  using Pair = const char*;
 
+  static Key KeyOf(Pair kv) { return kv; }
+  static Value ValueOf(Pair kv) { return kv; }
   static uword Hash(Key key) {
     ASSERT(key != nullptr);
     return Utils::StringHash(key, strlen(key));
diff --git a/runtime/vm/hash_map_test.cc b/runtime/vm/hash_map_test.cc
index 52fc97a..014de42 100644
--- a/runtime/vm/hash_map_test.cc
+++ b/runtime/vm/hash_map_test.cc
@@ -19,7 +19,7 @@
 };
 
 TEST_CASE(DirectChainedHashMap) {
-  DirectChainedHashMap<PointerKeyValueTrait<TestValue> > map;
+  DirectChainedHashMap<PointerSetKeyValueTrait<TestValue>> map;
   EXPECT(map.IsEmpty());
   TestValue v1(0);
   TestValue v2(1);
@@ -33,14 +33,14 @@
   EXPECT(map.Remove(&v1));
   EXPECT(map.Lookup(&v1) == NULL);
   map.Insert(&v1);
-  DirectChainedHashMap<PointerKeyValueTrait<TestValue> > map2(map);
+  DirectChainedHashMap<PointerSetKeyValueTrait<TestValue>> map2(map);
   EXPECT(map2.LookupValue(&v1) == &v1);
   EXPECT(map2.LookupValue(&v2) == &v2);
   EXPECT(map2.LookupValue(&v3) == &v1);
 }
 
 TEST_CASE(DirectChainedHashMapInsertRemove) {
-  DirectChainedHashMap<PointerKeyValueTrait<TestValue> > map;
+  DirectChainedHashMap<PointerSetKeyValueTrait<TestValue>> map;
   EXPECT(map.IsEmpty());
   TestValue v1(1);
   TestValue v2(3);  // Note: v1, v2, v3 should have the same hash.
@@ -97,7 +97,7 @@
 }
 
 TEST_CASE(MallocDirectChainedHashMap) {
-  MallocDirectChainedHashMap<PointerKeyValueTrait<TestValue> > map;
+  MallocDirectChainedHashMap<PointerSetKeyValueTrait<TestValue>> map;
   EXPECT(map.IsEmpty());
   TestValue v1(0);
   TestValue v2(1);
@@ -108,7 +108,7 @@
   EXPECT(map.LookupValue(&v1) == &v1);
   EXPECT(map.LookupValue(&v2) == &v2);
   EXPECT(map.LookupValue(&v3) == &v1);
-  MallocDirectChainedHashMap<PointerKeyValueTrait<TestValue> > map2(map);
+  MallocDirectChainedHashMap<PointerSetKeyValueTrait<TestValue>> map2(map);
   EXPECT(map2.LookupValue(&v1) == &v1);
   EXPECT(map2.LookupValue(&v2) == &v2);
   EXPECT(map2.LookupValue(&v3) == &v1);
@@ -117,7 +117,7 @@
 TEST_CASE(ZoneDirectChainedHashMap) {
   auto zone = thread->zone();
   auto const map = new (zone)
-      ZoneDirectChainedHashMap<PointerKeyValueTrait<TestValue>>(zone);
+      ZoneDirectChainedHashMap<PointerSetKeyValueTrait<TestValue>>(zone);
   EXPECT(map->IsEmpty());
   TestValue v1(0);
   TestValue v2(1);
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index 97850c6..9c8269b 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -128,7 +128,7 @@
       return addr;
     }
     // Before throwing an out-of-memory error try a synchronous GC.
-    CollectAllGarbage(kLowMemory);
+    CollectAllGarbage(GCReason::kLowMemory);
     WaitForSweeperTasks(thread);
   }
   uword addr = old_space_.TryAllocate(size, type, PageSpace::kForceGrowth);
@@ -160,7 +160,7 @@
     }
     // Attempt to free some external allocation by a scavenge. (If the total
     // remains above the limit, next external alloc will trigger another.)
-    CollectGarbage(kScavenge, kExternal);
+    CollectGarbage(GCType::kScavenge, GCReason::kExternal);
     // Promotion may have pushed old space over its limit. Fall through for old
     // space GC check.
   } else {
@@ -170,11 +170,11 @@
 
   if (old_space_.ReachedHardThreshold()) {
     if (last_gc_was_old_space_) {
-      CollectNewSpaceGarbage(Thread::Current(), kFull);
+      CollectNewSpaceGarbage(Thread::Current(), GCReason::kFull);
     }
-    CollectGarbage(kMarkSweep, kExternal);
+    CollectGarbage(GCType::kMarkSweep, GCReason::kExternal);
   } else {
-    CheckStartConcurrentMarking(Thread::Current(), kExternal);
+    CheckStartConcurrentMarking(Thread::Current(), GCReason::kExternal);
   }
 }
 
@@ -247,8 +247,8 @@
            (old_space_->phase() != PageSpace::kDone)) {
       if (old_space_->phase() == PageSpace::kAwaitingFinalization) {
         ml.Exit();
-        heap_->CollectOldSpaceGarbage(thread, Heap::kMarkSweep,
-                                      Heap::kFinalize);
+        heap_->CollectOldSpaceGarbage(thread, GCType::kMarkSweep,
+                                      GCReason::kFinalize);
         ml.Enter();
       }
       while (old_space_->tasks() > 0) {
@@ -365,61 +365,69 @@
 void Heap::NotifyIdle(int64_t deadline) {
   Thread* thread = Thread::Current();
   TIMELINE_FUNCTION_GC_DURATION(thread, "NotifyIdle");
-  GcSafepointOperationScope safepoint_operation(thread);
+  {
+    GcSafepointOperationScope safepoint_operation(thread);
 
-  // Check if we want to collect new-space first, because if we want to collect
-  // both new-space and old-space, the new-space collection should run first
-  // to shrink the root set (make old-space GC faster) and avoid
-  // intergenerational garbage (make old-space GC free more memory).
-  if (new_space_.ShouldPerformIdleScavenge(deadline)) {
-    CollectNewSpaceGarbage(thread, kIdle);
+    // Check if we want to collect new-space first, because if we want to
+    // collect both new-space and old-space, the new-space collection should run
+    // first to shrink the root set (make old-space GC faster) and avoid
+    // intergenerational garbage (make old-space GC free more memory).
+    if (new_space_.ShouldPerformIdleScavenge(deadline)) {
+      CollectNewSpaceGarbage(thread, GCReason::kIdle);
+    }
+
+    // Check if we want to collect old-space, in decreasing order of cost.
+    // Because we use a deadline instead of a timeout, we automatically take any
+    // time used up by a scavenge into account when deciding if we can complete
+    // a mark-sweep on time.
+    if (old_space_.ShouldPerformIdleMarkCompact(deadline)) {
+      // We prefer mark-compact over other old space GCs if we have enough time,
+      // since it removes old space fragmentation and frees up most memory.
+      // Blocks for O(heap), roughtly twice as costly as mark-sweep.
+      CollectOldSpaceGarbage(thread, GCType::kMarkCompact, GCReason::kIdle);
+    } else if (old_space_.ReachedHardThreshold()) {
+      // Even though the following GC may exceed our idle deadline, we need to
+      // ensure than that promotions during idle scavenges do not lead to
+      // unbounded growth of old space. If a program is allocating only in new
+      // space and all scavenges happen during idle time, then NotifyIdle will
+      // be the only place that checks the old space allocation limit.
+      // Compare the tail end of Heap::CollectNewSpaceGarbage.
+      // Blocks for O(heap).
+      CollectOldSpaceGarbage(thread, GCType::kMarkSweep, GCReason::kIdle);
+    } else if (old_space_.ShouldStartIdleMarkSweep(deadline) ||
+               old_space_.ReachedSoftThreshold()) {
+      // If we have both work to do and enough time, start or finish GC.
+      // If we have crossed the soft threshold, ignore time; the next old-space
+      // allocation will trigger this work anyway, so we try to pay at least
+      // some of that cost with idle time.
+      // Blocks for O(roots).
+      PageSpace::Phase phase;
+      {
+        MonitorLocker ml(old_space_.tasks_lock());
+        phase = old_space_.phase();
+      }
+      if (phase == PageSpace::kAwaitingFinalization) {
+        CollectOldSpaceGarbage(thread, GCType::kMarkSweep, GCReason::kFinalize);
+      } else if (phase == PageSpace::kDone) {
+        StartConcurrentMarking(thread, GCReason::kIdle);
+      }
+    }
   }
 
-  // Check if we want to collect old-space, in decreasing order of cost.
-  // Because we use a deadline instead of a timeout, we automatically take any
-  // time used up by a scavenge into account when deciding if we can complete
-  // a mark-sweep on time.
-  if (old_space_.ShouldPerformIdleMarkCompact(deadline)) {
-    // We prefer mark-compact over other old space GCs if we have enough time,
-    // since it removes old space fragmentation and frees up most memory.
-    // Blocks for O(heap), roughtly twice as costly as mark-sweep.
-    CollectOldSpaceGarbage(thread, kMarkCompact, kIdle);
-  } else if (old_space_.ReachedHardThreshold()) {
-    // Even though the following GC may exceed our idle deadline, we need to
-    // ensure than that promotions during idle scavenges do not lead to
-    // unbounded growth of old space. If a program is allocating only in new
-    // space and all scavenges happen during idle time, then NotifyIdle will be
-    // the only place that checks the old space allocation limit.
-    // Compare the tail end of Heap::CollectNewSpaceGarbage.
-    // Blocks for O(heap).
-    CollectOldSpaceGarbage(thread, kMarkSweep, kIdle);
-  } else if (old_space_.ShouldStartIdleMarkSweep(deadline) ||
-             old_space_.ReachedSoftThreshold()) {
-    // If we have both work to do and enough time, start or finish GC.
-    // If we have crossed the soft threshold, ignore time; the next old-space
-    // allocation will trigger this work anyway, so we try to pay at least some
-    // of that cost with idle time.
-    // Blocks for O(roots).
-    PageSpace::Phase phase;
-    {
-      MonitorLocker ml(old_space_.tasks_lock());
-      phase = old_space_.phase();
-    }
-    if (phase == PageSpace::kAwaitingFinalization) {
-      CollectOldSpaceGarbage(thread, Heap::kMarkSweep, Heap::kFinalize);
-    } else if (phase == PageSpace::kDone) {
-      StartConcurrentMarking(thread);
-    }
+  if (OS::GetCurrentMonotonicMicros() < deadline) {
+    SemiSpace::DrainCache();
   }
 }
 
 void Heap::NotifyLowMemory() {
   TIMELINE_FUNCTION_GC_DURATION(Thread::Current(), "NotifyLowMemory");
-  CollectMostGarbage(kLowMemory);
+  CollectMostGarbage(GCReason::kLowMemory);
 }
 
 void Heap::EvacuateNewSpace(Thread* thread, GCReason reason) {
-  ASSERT((reason != kOldSpace) && (reason != kPromotion));
+  ASSERT(reason != GCReason::kOldSpace);
+  ASSERT(reason != GCReason::kPromotion);
+  ASSERT(reason != GCReason::kFinalize);
   if (thread->isolate_group() == Dart::vm_isolate_group()) {
     // The vm isolate cannot safely collect garbage due to unvisited read-only
     // handles and slots bootstrapped with RAW_NULL. Ignore GC requests to
@@ -429,21 +437,26 @@
   }
   {
     GcSafepointOperationScope safepoint_operation(thread);
-    RecordBeforeGC(kScavenge, reason);
-    VMTagScope tagScope(thread, reason == kIdle ? VMTag::kGCIdleTagId
-                                                : VMTag::kGCNewSpaceTagId);
+    RecordBeforeGC(GCType::kScavenge, reason);
+    VMTagScope tagScope(thread, reason == GCReason::kIdle
+                                    ? VMTag::kGCIdleTagId
+                                    : VMTag::kGCNewSpaceTagId);
     TIMELINE_FUNCTION_GC_DURATION(thread, "EvacuateNewGeneration");
-    new_space_.Evacuate();
-    RecordAfterGC(kScavenge);
+    new_space_.Evacuate(reason);
+    RecordAfterGC(GCType::kScavenge);
     PrintStats();
-    NOT_IN_PRODUCT(PrintStatsToTimeline(&tbes, reason));
+#if defined(SUPPORT_TIMELINE)
+    PrintStatsToTimeline(&tbes, reason);
+#endif
     last_gc_was_old_space_ = false;
   }
 }
 
 void Heap::CollectNewSpaceGarbage(Thread* thread, GCReason reason) {
   NoActiveIsolateScope no_active_isolate_scope;
-  ASSERT((reason != kOldSpace) && (reason != kPromotion));
+  ASSERT(reason != GCReason::kOldSpace);
+  ASSERT(reason != GCReason::kPromotion);
+  ASSERT(reason != GCReason::kFinalize);
   if (thread->isolate_group() == Dart::vm_isolate_group()) {
     // The vm isolate cannot safely collect garbage due to unvisited read-only
     // handles and slots bootstrapped with RAW_NULL. Ignore GC requests to
@@ -453,22 +466,26 @@
   }
   {
     GcSafepointOperationScope safepoint_operation(thread);
-    RecordBeforeGC(kScavenge, reason);
+    RecordBeforeGC(GCType::kScavenge, reason);
     {
-      VMTagScope tagScope(thread, reason == kIdle ? VMTag::kGCIdleTagId
-                                                  : VMTag::kGCNewSpaceTagId);
-      TIMELINE_FUNCTION_GC_DURATION_BASIC(thread, "CollectNewGeneration");
-      new_space_.Scavenge();
-      RecordAfterGC(kScavenge);
+      VMTagScope tagScope(thread, reason == GCReason::kIdle
+                                      ? VMTag::kGCIdleTagId
+                                      : VMTag::kGCNewSpaceTagId);
+      TIMELINE_FUNCTION_GC_DURATION(thread, "CollectNewGeneration");
+      new_space_.Scavenge(reason);
+      RecordAfterGC(GCType::kScavenge);
       PrintStats();
-      NOT_IN_PRODUCT(PrintStatsToTimeline(&tbes, reason));
+#if defined(SUPPORT_TIMELINE)
+      PrintStatsToTimeline(&tbes, reason);
+#endif
       last_gc_was_old_space_ = false;
     }
-    if (reason == kNewSpace) {
+    if (reason == GCReason::kNewSpace) {
       if (old_space_.ReachedHardThreshold()) {
-        CollectOldSpaceGarbage(thread, kMarkSweep, kPromotion);
+        CollectOldSpaceGarbage(thread, GCType::kMarkSweep,
+                               GCReason::kPromotion);
       } else {
-        CheckStartConcurrentMarking(thread, kPromotion);
+        CheckStartConcurrentMarking(thread, GCReason::kPromotion);
       }
     }
   }
@@ -479,10 +496,11 @@
                                   GCReason reason) {
   NoActiveIsolateScope no_active_isolate_scope;
 
-  ASSERT(reason != kNewSpace);
-  ASSERT(type != kScavenge);
+  ASSERT(type != GCType::kScavenge);
+  ASSERT(reason != GCReason::kNewSpace);
+  ASSERT(reason != GCReason::kStoreBuffer);
   if (FLAG_use_compactor) {
-    type = kMarkCompact;
+    type = GCType::kMarkCompact;
   }
   if (thread->isolate_group() == Dart::vm_isolate_group()) {
     // The vm isolate cannot safely collect garbage due to unvisited read-only
@@ -501,13 +519,16 @@
         /*at_safepoint=*/true);
 
     RecordBeforeGC(type, reason);
-    VMTagScope tagScope(thread, reason == kIdle ? VMTag::kGCIdleTagId
-                                                : VMTag::kGCOldSpaceTagId);
-    TIMELINE_FUNCTION_GC_DURATION_BASIC(thread, "CollectOldGeneration");
-    old_space_.CollectGarbage(type == kMarkCompact, true /* finish */);
+    VMTagScope tagScope(thread, reason == GCReason::kIdle
+                                    ? VMTag::kGCIdleTagId
+                                    : VMTag::kGCOldSpaceTagId);
+    TIMELINE_FUNCTION_GC_DURATION(thread, "CollectOldGeneration");
+    old_space_.CollectGarbage(type == GCType::kMarkCompact, true /* finish */);
     RecordAfterGC(type);
     PrintStats();
-    NOT_IN_PRODUCT(PrintStatsToTimeline(&tbes, reason));
+#if defined(SUPPORT_TIMELINE)
+    PrintStatsToTimeline(&tbes, reason);
+#endif
 
     // Some Code objects may have been collected so invalidate handler cache.
     thread->isolate_group()->ForEachIsolate(
@@ -524,11 +545,11 @@
 void Heap::CollectGarbage(GCType type, GCReason reason) {
   Thread* thread = Thread::Current();
   switch (type) {
-    case kScavenge:
+    case GCType::kScavenge:
       CollectNewSpaceGarbage(thread, reason);
       break;
-    case kMarkSweep:
-    case kMarkCompact:
+    case GCType::kMarkSweep:
+    case GCType::kMarkCompact:
       CollectOldSpaceGarbage(thread, type, reason);
       break;
     default:
@@ -539,18 +560,20 @@
 void Heap::CollectGarbage(Space space) {
   Thread* thread = Thread::Current();
   if (space == kOld) {
-    CollectOldSpaceGarbage(thread, kMarkSweep, kOldSpace);
+    CollectOldSpaceGarbage(thread, GCType::kMarkSweep, GCReason::kOldSpace);
   } else {
     ASSERT(space == kNew);
-    CollectNewSpaceGarbage(thread, kNewSpace);
+    CollectNewSpaceGarbage(thread, GCReason::kNewSpace);
   }
 }
 
 void Heap::CollectMostGarbage(GCReason reason) {
   Thread* thread = Thread::Current();
   CollectNewSpaceGarbage(thread, reason);
-  CollectOldSpaceGarbage(
-      thread, reason == kLowMemory ? kMarkCompact : kMarkSweep, reason);
+  CollectOldSpaceGarbage(thread,
+                         reason == GCReason::kLowMemory ? GCType::kMarkCompact
+                                                        : GCType::kMarkSweep,
+                         reason);
 }
 
 void Heap::CollectAllGarbage(GCReason reason) {
@@ -563,10 +586,12 @@
     // If incremental marking is happening, we need to finish the GC cycle
     // and perform a follow-up GC to purge any "floating garbage" that may be
     // retained by the incremental barrier.
-    CollectOldSpaceGarbage(thread, kMarkSweep, reason);
+    CollectOldSpaceGarbage(thread, GCType::kMarkSweep, reason);
   }
-  CollectOldSpaceGarbage(
-      thread, reason == kLowMemory ? kMarkCompact : kMarkSweep, reason);
+  CollectOldSpaceGarbage(thread,
+                         reason == GCReason::kLowMemory ? GCType::kMarkCompact
+                                                        : GCType::kMarkSweep,
+                         reason);
   WaitForSweeperTasks(thread);
 }
 
@@ -589,16 +614,26 @@
     // new-space GC. This check is the concurrent-marking equivalent to the
     // new-space GC before synchronous-marking in CollectMostGarbage.
     if (last_gc_was_old_space_) {
-      CollectNewSpaceGarbage(thread, kFull);
+      CollectNewSpaceGarbage(thread, GCReason::kFull);
     }
 
-    StartConcurrentMarking(thread);
+    StartConcurrentMarking(thread, reason);
   }
 }
 
-void Heap::StartConcurrentMarking(Thread* thread) {
-  TIMELINE_FUNCTION_GC_DURATION_BASIC(thread, "StartConcurrentMarking");
+void Heap::StartConcurrentMarking(Thread* thread, GCReason reason) {
+  GcSafepointOperationScope safepoint_operation(thread);
+  RecordBeforeGC(GCType::kStartConcurrentMark, reason);
+  VMTagScope tagScope(thread, reason == GCReason::kIdle
+                                  ? VMTag::kGCIdleTagId
+                                  : VMTag::kGCOldSpaceTagId);
+  TIMELINE_FUNCTION_GC_DURATION(thread, "StartConcurrentMarking");
   old_space_.CollectGarbage(/*compact=*/false, /*finalize=*/false);
+  RecordAfterGC(GCType::kStartConcurrentMark);
+  PrintStats();
+#if defined(SUPPORT_TIMELINE)
+  PrintStatsToTimeline(&tbes, reason);
+#endif
 }
 
 void Heap::CheckFinishConcurrentMarking(Thread* thread) {
@@ -608,7 +643,7 @@
     ready = old_space_.phase() == PageSpace::kAwaitingFinalization;
   }
   if (ready) {
-    CollectOldSpaceGarbage(thread, Heap::kMarkSweep, Heap::kFinalize);
+    CollectOldSpaceGarbage(thread, GCType::kMarkSweep, GCReason::kFinalize);
   }
 }
 
@@ -621,7 +656,7 @@
     }
     if (old_space_.phase() == PageSpace::kAwaitingFinalization) {
       ml.Exit();
-      CollectOldSpaceGarbage(thread, Heap::kMarkSweep, Heap::kFinalize);
+      CollectOldSpaceGarbage(thread, GCType::kMarkSweep, GCReason::kFinalize);
       ml.Enter();
     }
   }
@@ -717,7 +752,7 @@
   }
   gc_on_nth_allocation_--;
   if (gc_on_nth_allocation_ == 0) {
-    CollectAllGarbage(kDebugging);
+    CollectAllGarbage(GCReason::kDebugging);
     gc_on_nth_allocation_ = kNoForcedGarbageCollection;
   } else {
     // Prevent generated code from using the TLAB fast path on next allocation.
@@ -825,11 +860,13 @@
 
 const char* Heap::GCTypeToString(GCType type) {
   switch (type) {
-    case kScavenge:
+    case GCType::kScavenge:
       return "Scavenge";
-    case kMarkSweep:
+    case GCType::kStartConcurrentMark:
+      return "StartCMark";
+    case GCType::kMarkSweep:
       return "MarkSweep";
-    case kMarkCompact:
+    case GCType::kMarkCompact:
       return "MarkCompact";
     default:
       UNREACHABLE();
@@ -839,25 +876,27 @@
 
 const char* Heap::GCReasonToString(GCReason gc_reason) {
   switch (gc_reason) {
-    case kNewSpace:
+    case GCReason::kNewSpace:
       return "new space";
-    case kPromotion:
+    case GCReason::kStoreBuffer:
+      return "store buffer";
+    case GCReason::kPromotion:
       return "promotion";
-    case kOldSpace:
+    case GCReason::kOldSpace:
       return "old space";
-    case kFinalize:
+    case GCReason::kFinalize:
       return "finalize";
-    case kFull:
+    case GCReason::kFull:
       return "full";
-    case kExternal:
+    case GCReason::kExternal:
       return "external";
-    case kIdle:
+    case GCReason::kIdle:
       return "idle";
-    case kLowMemory:
+    case GCReason::kLowMemory:
       return "low memory";
-    case kDebugging:
+    case GCReason::kDebugging:
       return "debugging";
-    case kSendAndExit:
+    case GCReason::kSendAndExit:
       return "send_and_exit";
     default:
       UNREACHABLE();
@@ -991,8 +1030,6 @@
   stats_.before_.old_ = old_space_.GetCurrentUsage();
   for (int i = 0; i < GCStats::kTimeEntries; i++)
     stats_.times_[i] = 0;
-  for (int i = 0; i < GCStats::kDataEntries; i++)
-    stats_.data_[i] = 0;
 }
 
 static double AvgCollectionPeriod(int64_t run_time, intptr_t collections) {
@@ -1006,7 +1043,7 @@
 void Heap::RecordAfterGC(GCType type) {
   stats_.after_.micros_ = OS::GetCurrentMonotonicMicros();
   int64_t delta = stats_.after_.micros_ - stats_.before_.micros_;
-  if (stats_.type_ == kScavenge) {
+  if (stats_.type_ == GCType::kScavenge) {
     new_space_.AddGCTime(delta);
     new_space_.IncrementCollections();
   } else {
@@ -1092,34 +1129,33 @@
   if ((FLAG_verbose_gc_hdr != 0) &&
       (((stats_.num_ - 1) % FLAG_verbose_gc_hdr) == 0)) {
     OS::PrintErr(
-        "[              |                      |     |       |      "
+        "[              |                          |     |       |      "
         "| new gen     | new gen     | new gen "
         "| old gen       | old gen       | old gen     "
-        "| sweep | safe- | roots/| stbuf/| tospc/| weaks/|               ]\n"
-        "[ GC isolate   | space (reason)       | GC# | start | time "
-        "| used (kB)   | capacity kB | external"
-        "| used (kB)     | capacity (kB) | external kB "
-        "| thread| point |marking| reset | sweep |swplrge| data          ]\n"
-        "[              |                      |     |  (s)  | (ms) "
+        "| sweep | safe- | roots/| stbuf/| tospc/| weaks/  ]\n"
+        "[ GC isolate   | space (reason)           | GC# | start | time "
+        "| used (MB)   | capacity MB | external"
+        "| used (MB)     | capacity (MB) | external MB "
+        "| thread| point |marking| reset | sweep |swplrge  ]\n"
+        "[              |                          |     |  (s)  | (ms) "
         "|before| after|before| after| b4 |aftr"
         "| before| after | before| after |before| after"
-        "| (ms)  | (ms)  | (ms)  | (ms)  | (ms)  | (ms)  |               ]\n");
+        "| (ms)  | (ms)  | (ms)  | (ms)  | (ms)  | (ms)    ]\n");
   }
 
   // clang-format off
   OS::PrintErr(
-    "[ %-13.13s, %10s(%9s), "  // GC(isolate-group), type(reason)
+    "[ %-13.13s, %11s(%12s), "  // GC(isolate-group), type(reason)
     "%4" Pd ", "  // count
     "%6.2f, "  // start time
     "%5.1f, "  // total time
-    "%5" Pd ", %5" Pd ", "  // new gen: in use before/after
-    "%5" Pd ", %5" Pd ", "  // new gen: capacity before/after
-    "%3" Pd ", %3" Pd ", "  // new gen: external before/after
-    "%6" Pd ", %6" Pd ", "  // old gen: in use before/after
-    "%6" Pd ", %6" Pd ", "  // old gen: capacity before/after
-    "%5" Pd ", %5" Pd ", "  // old gen: external before/after
+    "%5.1f, %5.1f, "  // new gen: in use before/after
+    "%5.1f, %5.1f, "   // new gen: capacity before/after
+    "%3.1f, %3.1f, "   // new gen: external before/after
+    "%6.1f, %6.1f, "   // old gen: in use before/after
+    "%6.1f, %6.1f, "   // old gen: capacity before/after
+    "%5.1f, %5.1f, "   // old gen: external before/after
     "%6.2f, %6.2f, %6.2f, %6.2f, %6.2f, %6.2f, "  // times
-    "%" Pd ", %" Pd ", %" Pd ", %" Pd ", "  // data
     "]\n",  // End with a comma to make it easier to import in spreadsheets.
     isolate_group()->source()->name,
     GCTypeToString(stats_.type_),
@@ -1128,34 +1164,30 @@
     MicrosecondsToSeconds(isolate_group_->UptimeMicros()),
     MicrosecondsToMilliseconds(stats_.after_.micros_ -
                                stats_.before_.micros_),
-    RoundWordsToKB(stats_.before_.new_.used_in_words),
-    RoundWordsToKB(stats_.after_.new_.used_in_words),
-    RoundWordsToKB(stats_.before_.new_.capacity_in_words),
-    RoundWordsToKB(stats_.after_.new_.capacity_in_words),
-    RoundWordsToKB(stats_.before_.new_.external_in_words),
-    RoundWordsToKB(stats_.after_.new_.external_in_words),
-    RoundWordsToKB(stats_.before_.old_.used_in_words),
-    RoundWordsToKB(stats_.after_.old_.used_in_words),
-    RoundWordsToKB(stats_.before_.old_.capacity_in_words),
-    RoundWordsToKB(stats_.after_.old_.capacity_in_words),
-    RoundWordsToKB(stats_.before_.old_.external_in_words),
-    RoundWordsToKB(stats_.after_.old_.external_in_words),
+    WordsToMB(stats_.before_.new_.used_in_words),
+    WordsToMB(stats_.after_.new_.used_in_words),
+    WordsToMB(stats_.before_.new_.capacity_in_words),
+    WordsToMB(stats_.after_.new_.capacity_in_words),
+    WordsToMB(stats_.before_.new_.external_in_words),
+    WordsToMB(stats_.after_.new_.external_in_words),
+    WordsToMB(stats_.before_.old_.used_in_words),
+    WordsToMB(stats_.after_.old_.used_in_words),
+    WordsToMB(stats_.before_.old_.capacity_in_words),
+    WordsToMB(stats_.after_.old_.capacity_in_words),
+    WordsToMB(stats_.before_.old_.external_in_words),
+    WordsToMB(stats_.after_.old_.external_in_words),
     MicrosecondsToMilliseconds(stats_.times_[0]),
     MicrosecondsToMilliseconds(stats_.times_[1]),
     MicrosecondsToMilliseconds(stats_.times_[2]),
     MicrosecondsToMilliseconds(stats_.times_[3]),
     MicrosecondsToMilliseconds(stats_.times_[4]),
-    MicrosecondsToMilliseconds(stats_.times_[5]),
-    stats_.data_[0],
-    stats_.data_[1],
-    stats_.data_[2],
-    stats_.data_[3]);
+    MicrosecondsToMilliseconds(stats_.times_[5]));
   // clang-format on
 #endif  // !defined(PRODUCT)
 }
 
 void Heap::PrintStatsToTimeline(TimelineEventScope* event, GCReason reason) {
-#if !defined(PRODUCT)
+#if defined(SUPPORT_TIMELINE)
   if ((event == NULL) || !event->enabled()) {
     return;
   }
@@ -1188,7 +1220,7 @@
                         RoundWordsToKB(stats_.before_.old_.external_in_words));
   event->FormatArgument(arguments + 12, "After.Old.External (kB)", "%" Pd "",
                         RoundWordsToKB(stats_.after_.old_.external_in_words));
-#endif  // !defined(PRODUCT)
+#endif  // defined(SUPPORT_TIMELINE)
 }
 
 Heap::Space Heap::SpaceForExternal(intptr_t size) const {
diff --git a/runtime/vm/heap/heap.h b/runtime/vm/heap/heap.h
index a410336..04e8a62 100644
--- a/runtime/vm/heap/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -51,25 +51,6 @@
     kNumWeakSelectors
   };
 
-  enum GCType {
-    kScavenge,
-    kMarkSweep,
-    kMarkCompact,
-  };
-
-  enum GCReason {
-    kNewSpace,     // New space is full.
-    kPromotion,    // Old space limit crossed after a scavenge.
-    kOldSpace,     // Old space limit crossed.
-    kFinalize,     // Concurrent marking finished.
-    kFull,         // Heap::CollectAllGarbage
-    kExternal,     // Dart_NewFinalizableHandle Dart_NewWeakPersistentHandle
-    kIdle,         // Dart_NotifyIdle
-    kLowMemory,    // Dart_NotifyLowMemory
-    kDebugging,    // service request, etc.
-    kSendAndExit,  // SendPort.sendAndExit
-  };
-
   // Pattern for unused new space and swept old space.
   static const uint8_t kZapByte = 0xf3;
 
@@ -136,16 +117,16 @@
   // mark-sweep treats new space as roots, a cycle between unreachable old and
   // new objects will not be collected until the new objects are promoted.
   // Verification based on heap iteration should instead use CollectAllGarbage.
-  void CollectMostGarbage(GCReason reason = kFull);
+  void CollectMostGarbage(GCReason reason = GCReason::kFull);
 
   // Collect both generations by performing an evacuation followed by a
   // mark-sweep. If incremental marking was in progress, perform another
   // mark-sweep. This function will collect all unreachable objects, including
   // those in inter-generational cycles or stored during incremental marking.
-  void CollectAllGarbage(GCReason reason = kFull);
+  void CollectAllGarbage(GCReason reason = GCReason::kFull);
 
   void CheckStartConcurrentMarking(Thread* thread, GCReason reason);
-  void StartConcurrentMarking(Thread* thread);
+  void StartConcurrentMarking(Thread* thread, GCReason reason);
   void CheckFinishConcurrentMarking(Thread* thread);
   void WaitForMarkerTasks(Thread* thread);
   void WaitForSweeperTasks(Thread* thread);
@@ -280,11 +261,6 @@
     stats_.times_[id] = micros;
   }
 
-  void RecordData(int id, intptr_t value) {
-    ASSERT((id >= 0) && (id < GCStats::kDataEntries));
-    stats_.data_[id] = value;
-  }
-
   void UpdateGlobalMaxUsed();
 
   static bool IsAllocatableInNewSpace(intptr_t size) {
@@ -331,8 +307,8 @@
    public:
     GCStats() {}
     intptr_t num_;
-    Heap::GCType type_;
-    Heap::GCReason reason_;
+    GCType type_;
+    GCReason reason_;
 
     class Data : public ValueObject {
      public:
@@ -346,12 +322,10 @@
     };
 
     enum { kTimeEntries = 6 };
-    enum { kDataEntries = 4 };
 
     Data before_;
     Data after_;
     int64_t times_[kTimeEntries];
-    intptr_t data_[kDataEntries];
 
    private:
     DISALLOW_COPY_AND_ASSIGN(GCStats);
@@ -503,7 +477,7 @@
   static void CollectNewSpace() {
     Thread* thread = Thread::Current();
     ASSERT(thread->execution_state() == Thread::kThreadInVM);
-    thread->heap()->new_space()->Scavenge();
+    thread->heap()->new_space()->Scavenge(GCReason::kDebugging);
   }
 
   // Fully collect old gen and wait for the sweeper to finish. The normal call
@@ -514,16 +488,16 @@
     Thread* thread = Thread::Current();
     ASSERT(thread->execution_state() == Thread::kThreadInVM);
     if (thread->is_marking()) {
-      thread->heap()->CollectGarbage(Heap::kMarkSweep, Heap::kDebugging);
+      thread->heap()->CollectGarbage(GCType::kMarkSweep, GCReason::kDebugging);
     }
-    thread->heap()->CollectGarbage(Heap::kMarkSweep, Heap::kDebugging);
+    thread->heap()->CollectGarbage(GCType::kMarkSweep, GCReason::kDebugging);
     WaitForGCTasks();
   }
 
   static void CollectAllGarbage() {
     Thread* thread = Thread::Current();
     ASSERT(thread->execution_state() == Thread::kThreadInVM);
-    thread->heap()->CollectAllGarbage(Heap::kDebugging);
+    thread->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
 
   static void WaitForGCTasks() {
diff --git a/runtime/vm/heap/heap_test.cc b/runtime/vm/heap/heap_test.cc
index e1f9c82..b30bf66 100644
--- a/runtime/vm/heap/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -512,11 +512,11 @@
 class HeapTestHelper {
  public:
   static void Scavenge(Thread* thread) {
-    thread->heap()->CollectNewSpaceGarbage(thread, Heap::kDebugging);
+    thread->heap()->CollectNewSpaceGarbage(thread, GCReason::kDebugging);
   }
   static void MarkSweep(Thread* thread) {
-    thread->heap()->CollectOldSpaceGarbage(thread, Heap::kMarkSweep,
-                                           Heap::kDebugging);
+    thread->heap()->CollectOldSpaceGarbage(thread, GCType::kMarkSweep,
+                                           GCReason::kDebugging);
     thread->heap()->WaitForMarkerTasks(thread);
     thread->heap()->WaitForSweeperTasks(thread);
   }
@@ -592,7 +592,6 @@
       Thread* thread = Thread::Current();
       TransitionNativeToVM transition(thread);
       StackZone zone(thread);
-      HANDLESCOPE(thread);
 
       String& string = String::Handle(String::New(TEST_MESSAGE));
       PersistentHandle* handle =
@@ -626,7 +625,6 @@
     Thread* thread = Thread::Current();
     TransitionNativeToVM transition(thread);
     StackZone zone(thread);
-    HANDLESCOPE(thread);
 
     String& string = String::Handle(String::New(TEST_MESSAGE));
 
@@ -644,7 +642,6 @@
     Thread* thread = Thread::Current();
     TransitionNativeToVM transition(thread);
     StackZone zone(thread);
-    HANDLESCOPE(thread);
 
     EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage());
   }
diff --git a/runtime/vm/heap/marker.cc b/runtime/vm/heap/marker.cc
index 74ca4cc..a2f7477 100644
--- a/runtime/vm/heap/marker.cc
+++ b/runtime/vm/heap/marker.cc
@@ -39,7 +39,9 @@
         marked_micros_(0) {
     ASSERT(thread_->isolate_group() == isolate_group);
   }
-  ~MarkingVisitorBase() {}
+  ~MarkingVisitorBase() {
+    ASSERT(delayed_weak_properties_ == WeakProperty::null());
+  }
 
   uintptr_t marked_bytes() const { return marked_bytes_; }
   int64_t marked_micros() const { return marked_micros_; }
@@ -202,26 +204,22 @@
     }
   }
 
-  void FinalizeDeferredMarking() {
-    ProcessDeferredMarking();
+  // Called when all marking is complete. Any attempt to push to the mark stack
+  // after this will trigger an error.
+  void FinalizeMarking() {
+    work_list_.Finalize();
     deferred_work_list_.Finalize();
   }
 
-  // Called when all marking is complete.
-  void Finalize() {
-    work_list_.Finalize();
-    // Clear pending weak properties.
+  void MournWeakProperties() {
     WeakPropertyPtr cur_weak = delayed_weak_properties_;
     delayed_weak_properties_ = WeakProperty::null();
-    intptr_t weak_properties_cleared = 0;
     while (cur_weak != WeakProperty::null()) {
       WeakPropertyPtr next_weak =
           cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
       cur_weak->untag()->next_ = WeakProperty::null();
       RELEASE_ASSERT(!cur_weak->untag()->key()->untag()->IsMarked());
       WeakProperty::Clear(cur_weak);
-      weak_properties_cleared++;
-      // Advance to next weak property in the queue.
       cur_weak = next_weak;
     }
   }
@@ -233,6 +231,7 @@
   void AbandonWork() {
     work_list_.AbandonWork();
     deferred_work_list_.AbandonWork();
+    delayed_weak_properties_ = WeakProperty::null();
   }
 
  private:
@@ -603,23 +602,20 @@
       } while (more_to_mark);
 
       // Phase 2: deferred marking.
-      visitor_->FinalizeDeferredMarking();
+      visitor_->ProcessDeferredMarking();
+      visitor_->FinalizeMarking();
       barrier_->Sync();
 
-      // Phase 3: Weak processing.
+      // Phase 3: Weak processing and statistics.
+      visitor_->MournWeakProperties();
       marker_->IterateWeakRoots(thread);
-      barrier_->Sync();
-
-      // Phase 4: Gather statistics from all markers.
       int64_t stop = OS::GetCurrentMonotonicMicros();
       visitor_->AddMicros(stop - start);
       if (FLAG_log_marker_tasks) {
         THR_Print("Task marked %" Pd " bytes in %" Pd64 " micros.\n",
                   visitor_->marked_bytes(), visitor_->marked_micros());
       }
-      marker_->FinalizeResultsFrom(visitor_);
-
-      delete visitor_;
+      barrier_->Sync();
     }
   }
 
@@ -694,16 +690,6 @@
   DISALLOW_COPY_AND_ASSIGN(ConcurrentMarkTask);
 };
 
-template <class MarkingVisitorType>
-void GCMarker::FinalizeResultsFrom(MarkingVisitorType* visitor) {
-  {
-    MutexLocker ml(&stats_mutex_);
-    marked_bytes_ += visitor->marked_bytes();
-    marked_micros_ += visitor->marked_micros();
-  }
-  visitor->Finalize();
-}
-
 intptr_t GCMarker::MarkedWordsPerMicro() const {
   intptr_t marked_words_per_job_micro;
   if (marked_micros_ == 0) {
@@ -799,18 +785,21 @@
       TIMELINE_FUNCTION_GC_DURATION(thread, "Mark");
       int64_t start = OS::GetCurrentMonotonicMicros();
       // Mark everything on main thread.
-      UnsyncMarkingVisitor mark(isolate_group_, page_space, &marking_stack_,
-                                &deferred_marking_stack_);
+      UnsyncMarkingVisitor visitor(isolate_group_, page_space, &marking_stack_,
+                                   &deferred_marking_stack_);
       ResetSlices();
-      IterateRoots(&mark);
-      mark.ProcessDeferredMarking();
-      mark.DrainMarkingStack();
-      mark.FinalizeDeferredMarking();
+      IterateRoots(&visitor);
+      visitor.ProcessDeferredMarking();
+      visitor.DrainMarkingStack();
+      visitor.ProcessDeferredMarking();
+      visitor.FinalizeMarking();
+      visitor.MournWeakProperties();
       IterateWeakRoots(thread);
       // All marking done; detach code, etc.
       int64_t stop = OS::GetCurrentMonotonicMicros();
-      mark.AddMicros(stop - start);
-      FinalizeResultsFrom(&mark);
+      visitor.AddMicros(stop - start);
+      marked_bytes_ += visitor.marked_bytes();
+      marked_micros_ += visitor.marked_micros();
     } else {
       ThreadBarrier barrier(num_tasks, heap_->barrier(), heap_->barrier_done());
       ResetSlices();
@@ -818,14 +807,14 @@
       RelaxedAtomic<uintptr_t> num_busy(num_tasks);
       // Phase 1: Iterate over roots and drain marking stack in tasks.
       for (intptr_t i = 0; i < num_tasks; ++i) {
-        SyncMarkingVisitor* visitor;
-        if (visitors_[i] != NULL) {
-          visitor = visitors_[i];
-          visitors_[i] = NULL;
-        } else {
+        SyncMarkingVisitor* visitor = visitors_[i];
+        // Visitors may or may not have already been created depending on
+        // whether we did some concurrent marking.
+        if (visitor == nullptr) {
           visitor =
               new SyncMarkingVisitor(isolate_group_, page_space,
                                      &marking_stack_, &deferred_marking_stack_);
+          visitors_[i] = visitor;
         }
         if (i < (num_tasks - 1)) {
           // Begin marking on a helper thread.
@@ -841,6 +830,14 @@
           barrier.Exit();
         }
       }
+
+      for (intptr_t i = 0; i < num_tasks; i++) {
+        SyncMarkingVisitor* visitor = visitors_[i];
+        marked_bytes_ += visitor->marked_bytes();
+        marked_micros_ += visitor->marked_micros();
+        delete visitor;
+        visitors_[i] = nullptr;
+      }
     }
   }
   Epilogue();
diff --git a/runtime/vm/heap/marker.h b/runtime/vm/heap/marker.h
index 6f9e309..2fde0d8 100644
--- a/runtime/vm/heap/marker.h
+++ b/runtime/vm/heap/marker.h
@@ -73,7 +73,6 @@
   intptr_t root_slices_count_;
   RelaxedAtomic<intptr_t> weak_slices_started_;
 
-  Mutex stats_mutex_;
   uintptr_t marked_bytes_;
   int64_t marked_micros_;
 
diff --git a/runtime/vm/heap/pages.cc b/runtime/vm/heap/pages.cc
index 0c8a740..f17e8e6 100644
--- a/runtime/vm/heap/pages.cc
+++ b/runtime/vm/heap/pages.cc
@@ -471,7 +471,7 @@
       Thread* thread = Thread::Current();
       if (thread->CanCollectGarbage()) {
         heap_->CheckFinishConcurrentMarking(thread);
-        heap_->CheckStartConcurrentMarking(thread, Heap::kOldSpace);
+        heap_->CheckStartConcurrentMarking(thread, GCReason::kOldSpace);
       }
     }
   }
@@ -1526,7 +1526,6 @@
   ASSERT(end >= start);
   history_.AddGarbageCollectionTime(start, end);
   const int gc_time_fraction = history_.GarbageCollectionTimeFraction();
-  heap_->RecordData(PageSpace::kGCTimeFraction, gc_time_fraction);
 
   // Assume garbage increases linearly with allocation:
   // G = kA, and estimate k from the previous cycle.
@@ -1544,7 +1543,6 @@
         1.0, garbage / static_cast<double>(allocated_since_previous_gc));
 
     const int garbage_ratio = static_cast<int>(k * 100);
-    heap_->RecordData(PageSpace::kGarbageRatio, garbage_ratio);
 
     // Define GC to be 'worthwhile' iff at least fraction t of heap is garbage.
     double t = 1.0 - desired_utilization_;
@@ -1595,10 +1593,8 @@
       }
     }
   } else {
-    heap_->RecordData(PageSpace::kGarbageRatio, 100);
     grow_heap = 0;
   }
-  heap_->RecordData(PageSpace::kPageGrowth, grow_heap);
   last_usage_ = after;
 
   intptr_t max_capacity_in_words = heap_->old_space()->max_capacity_in_words_;
@@ -1688,7 +1684,7 @@
   }
 #endif
 
-  if (FLAG_log_growth) {
+  if (FLAG_log_growth || FLAG_verbose_gc) {
     THR_Print("%s: threshold=%" Pd "kB, idle_threshold=%" Pd "kB, reason=%s\n",
               heap_->isolate_group()->source()->name,
               hard_gc_threshold_in_words_ / KBInWords,
diff --git a/runtime/vm/heap/pages.h b/runtime/vm/heap/pages.h
index 8a91944..9d039e1 100644
--- a/runtime/vm/heap/pages.h
+++ b/runtime/vm/heap/pages.h
@@ -536,11 +536,6 @@
     kResetFreeLists = 3,
     kSweepPages = 4,
     kSweepLargePages = 5,
-    // Data
-    kGarbageRatio = 0,
-    kGCTimeFraction = 1,
-    kPageGrowth = 2,
-    kAllowedGrowth = 3
   };
 
   uword TryAllocateInternal(intptr_t size,
diff --git a/runtime/vm/heap/safepoint.cc b/runtime/vm/heap/safepoint.cc
index 52da48b..c2e8d9a 100644
--- a/runtime/vm/heap/safepoint.cc
+++ b/runtime/vm/heap/safepoint.cc
@@ -63,9 +63,9 @@
     ASSERT(T->CanCollectGarbage());
     // Check if we passed the growth limit during the scope.
     if (heap->old_space()->ReachedHardThreshold()) {
-      heap->CollectGarbage(Heap::kMarkSweep, Heap::kOldSpace);
+      heap->CollectGarbage(GCType::kMarkSweep, GCReason::kOldSpace);
     } else {
-      heap->CheckStartConcurrentMarking(T, Heap::kOldSpace);
+      heap->CheckStartConcurrentMarking(T, GCReason::kOldSpace);
     }
   }
 }
diff --git a/runtime/vm/heap/scavenger.cc b/runtime/vm/heap/scavenger.cc
index d2652ba..592627b 100644
--- a/runtime/vm/heap/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -103,6 +103,18 @@
   } while (size > 0);
 }
 
+DART_FORCE_INLINE
+static uword ReadHeaderRelaxed(ObjectPtr raw_obj) {
+  return reinterpret_cast<std::atomic<uword>*>(UntaggedObject::ToAddr(raw_obj))
+      ->load(std::memory_order_relaxed);
+}
+
+DART_FORCE_INLINE
+static void WriteHeaderRelaxed(ObjectPtr raw_obj, uword header) {
+  reinterpret_cast<std::atomic<uword>*>(UntaggedObject::ToAddr(raw_obj))
+      ->store(header, std::memory_order_relaxed);
+}
+
 template <bool parallel>
 class ScavengerVisitorBase : public ObjectPointerVisitor {
  public:
@@ -121,6 +133,9 @@
         visiting_old_object_(nullptr),
         promoted_list_(promotion_stack),
         delayed_weak_properties_(WeakProperty::null()) {}
+  ~ScavengerVisitorBase() {
+    ASSERT(delayed_weak_properties_ == WeakProperty::null());
+  }
 
   virtual void VisitTypedDataViewPointers(TypedDataViewPtr view,
                                           CompressedObjectPtr* first,
@@ -151,16 +166,14 @@
     }
 
     // Validate 'this' is a typed data view.
-    const uword view_header =
-        *reinterpret_cast<uword*>(UntaggedObject::ToAddr(view));
+    const uword view_header = ReadHeaderRelaxed(view);
     ASSERT(!IsForwarding(view_header) || view->IsOldObject());
     ASSERT(IsTypedDataViewClassId(view->GetClassIdMayBeSmi()));
 
     // Validate that the backing store is not a forwarding word.
     TypedDataBasePtr td = view->untag()->typed_data();
     ASSERT(td->IsHeapObject());
-    const uword td_header =
-        *reinterpret_cast<uword*>(UntaggedObject::ToAddr(td));
+    const uword td_header = ReadHeaderRelaxed(td);
     ASSERT(!IsForwarding(td_header) || td->IsOldObject());
 
     if (!parallel) {
@@ -265,6 +278,7 @@
   void Finalize() {
     if (scavenger_->abort_) {
       promoted_list_.AbandonWork();
+      delayed_weak_properties_ = WeakProperty::null();
     } else {
       ASSERT(!HasWork());
 
@@ -352,8 +366,7 @@
     ASSERT(from_->Contains(raw_addr));
     // Read the header word of the object and determine if the object has
     // already been copied.
-    uword header = reinterpret_cast<std::atomic<uword>*>(raw_addr)->load(
-        std::memory_order_relaxed);
+    uword header = ReadHeaderRelaxed(raw_obj);
     ObjectPtr new_obj;
     if (IsForwarding(header)) {
       // Get the new location of the object.
@@ -638,15 +651,17 @@
   page_cache_mutex = new Mutex(NOT_IN_PRODUCT("page_cache_mutex"));
 }
 
-void SemiSpace::Cleanup() {
-  {
-    MutexLocker ml(page_cache_mutex);
-    ASSERT(page_cache_size >= 0);
-    ASSERT(page_cache_size <= kPageCacheCapacity);
-    while (page_cache_size > 0) {
-      delete page_cache[--page_cache_size];
-    }
+void SemiSpace::DrainCache() {
+  MutexLocker ml(page_cache_mutex);
+  ASSERT(page_cache_size >= 0);
+  ASSERT(page_cache_size <= kPageCacheCapacity);
+  while (page_cache_size > 0) {
+    delete page_cache[--page_cache_size];
   }
+}
+
+void SemiSpace::Cleanup() {
+  DrainCache();
   delete page_cache_mutex;
   page_cache_mutex = nullptr;
 }
@@ -805,17 +820,26 @@
   ASSERT(blocks_ == nullptr);
 }
 
-intptr_t Scavenger::NewSizeInWords(intptr_t old_size_in_words) const {
-  if (stats_history_.Size() == 0) {
+intptr_t Scavenger::NewSizeInWords(intptr_t old_size_in_words,
+                                   GCReason reason) const {
+  if (reason != GCReason::kNewSpace) {
+    // If we GC for a reason other than new-space being full, that's not an
+    // indication that new-space is too small.
     return old_size_in_words;
   }
-  double garbage = stats_history_.Get(0).ExpectedGarbageFraction();
-  if (garbage < (FLAG_new_gen_garbage_threshold / 100.0)) {
-    return Utils::Minimum(max_semi_capacity_in_words_,
-                          old_size_in_words * FLAG_new_gen_growth_factor);
-  } else {
-    return old_size_in_words;
+
+  if (stats_history_.Size() != 0) {
+    double garbage = stats_history_.Get(0).ExpectedGarbageFraction();
+    if (garbage < (FLAG_new_gen_garbage_threshold / 100.0)) {
+      // Too much survived last time; grow new-space in the hope that a greater
+      // fraction of objects will become unreachable before new-space becomes
+      // full.
+      return Utils::Minimum(max_semi_capacity_in_words_,
+                            old_size_in_words * FLAG_new_gen_growth_factor);
+    }
   }
+
+  return old_size_in_words;
 }
 
 class CollectStoreBufferVisitor : public ObjectPointerVisitor {
@@ -962,7 +986,7 @@
   }
 }
 
-SemiSpace* Scavenger::Prologue() {
+SemiSpace* Scavenger::Prologue(GCReason reason) {
   TIMELINE_FUNCTION_GC_DURATION(Thread::Current(), "Prologue");
 
   heap_->isolate_group()->ReleaseStoreBuffers();
@@ -984,7 +1008,7 @@
   {
     MutexLocker ml(&space_lock_);
     from = to_;
-    to_ = new SemiSpace(NewSizeInWords(from->max_capacity_in_words()));
+    to_ = new SemiSpace(NewSizeInWords(from->max_capacity_in_words(), reason));
   }
   UpdateMaxHeapCapacity();
 
@@ -1085,8 +1109,10 @@
 
   // TODO(rmacnak): Investigate collecting a history of idle period durations.
   intptr_t used_in_words = UsedInWords();
+  intptr_t external_in_words = ExternalInWords();
   // Normal reason: new space is getting full.
-  bool for_new_space = used_in_words >= idle_scavenge_threshold_in_words_;
+  bool for_new_space = (used_in_words >= idle_scavenge_threshold_in_words_) ||
+                       (external_in_words >= idle_scavenge_threshold_in_words_);
   // New-space objects are roots during old-space GC. This means that even
   // unreachable new-space objects prevent old-space objects they reference
   // from being collected during an old-space GC. Normally this is not an
@@ -1122,13 +1148,10 @@
   // Grab the deduplication sets out of the isolate's consolidated store buffer.
   StoreBuffer* store_buffer = heap_->isolate_group()->store_buffer();
   StoreBufferBlock* pending = blocks_;
-  intptr_t total_count = 0;
   while (pending != nullptr) {
     StoreBufferBlock* next = pending->next();
     // Generated code appends to store buffers; tell MemorySanitizer.
     MSAN_UNPOISON(pending, sizeof(*pending));
-    intptr_t count = pending->Count();
-    total_count += count;
     while (!pending->IsEmpty()) {
       ObjectPtr raw_object = pending->Pop();
       ASSERT(!raw_object->IsForwardingCorpse());
@@ -1146,10 +1169,6 @@
   }
   // Done iterating through old objects remembered in the store buffers.
   visitor->VisitingOldObject(nullptr);
-
-  heap_->RecordData(kStoreBufferEntries, total_count);
-  heap_->RecordData(kDataUnused1, 0);
-  heap_->RecordData(kDataUnused2, 0);
 }
 
 template <bool parallel>
@@ -1293,7 +1312,7 @@
     ASSERT(raw_key->IsNewObject());
     uword raw_addr = UntaggedObject::ToAddr(raw_key);
     ASSERT(from_->Contains(raw_addr));
-    uword header = *reinterpret_cast<uword*>(raw_addr);
+    uword header = ReadHeaderRelaxed(raw_key);
     // Reset the next pointer in the weak property.
     cur_weak->untag()->next_ = WeakProperty::null();
     if (IsForwarding(header)) {
@@ -1338,8 +1357,7 @@
   ASSERT(raw_weak->IsNewObject());
   ASSERT(raw_weak->IsWeakProperty());
 #if defined(DEBUG)
-  uword raw_addr = UntaggedObject::ToAddr(raw_weak);
-  uword header = *reinterpret_cast<uword*>(raw_addr);
+  uword header = ReadHeaderRelaxed(raw_weak);
   ASSERT(!IsForwarding(header));
 #endif  // defined(DEBUG)
   ASSERT(raw_weak->untag()->next_ ==
@@ -1356,8 +1374,7 @@
     // The fate of the weak property is determined by its key.
     ObjectPtr raw_key = raw_weak->untag()->key();
     if (raw_key->IsHeapObject() && raw_key->IsNewObject()) {
-      uword raw_addr = UntaggedObject::ToAddr(raw_key);
-      uword header = *reinterpret_cast<uword*>(raw_addr);
+      uword header = ReadHeaderRelaxed(raw_key);
       if (!IsForwarding(header)) {
         // Key is white.  Enqueue the weak property.
         EnqueueWeakProperty(raw_weak);
@@ -1562,7 +1579,7 @@
   return tail_->TryAllocateGC(size);
 }
 
-void Scavenger::Scavenge() {
+void Scavenger::Scavenge(GCReason reason) {
   int64_t start = OS::GetCurrentMonotonicMicros();
 
   // Ensure that all threads for this isolate are at a safepoint (either stopped
@@ -1601,7 +1618,7 @@
     }
     promo_candidate_words += page->promo_candidate_words();
   }
-  SemiSpace* from = Prologue();
+  SemiSpace* from = Prologue(reason);
 
   intptr_t bytes_promoted;
   if (FLAG_scavenger_tasks == 0) {
@@ -1701,20 +1718,11 @@
   TIMELINE_FUNCTION_GC_DURATION(thread, "ReverseScavenge");
 
   class ReverseFromForwardingVisitor : public ObjectVisitor {
-    uword ReadHeader(ObjectPtr raw_obj) {
-      return reinterpret_cast<std::atomic<uword>*>(
-                 UntaggedObject::ToAddr(raw_obj))
-          ->load(std::memory_order_relaxed);
-    }
-    void WriteHeader(ObjectPtr raw_obj, uword header) {
-      reinterpret_cast<std::atomic<uword>*>(UntaggedObject::ToAddr(raw_obj))
-          ->store(header, std::memory_order_relaxed);
-    }
     void VisitObject(ObjectPtr from_obj) {
-      uword from_header = ReadHeader(from_obj);
+      uword from_header = ReadHeaderRelaxed(from_obj);
       if (IsForwarding(from_header)) {
         ObjectPtr to_obj = ForwardedObj(from_header);
-        uword to_header = ReadHeader(to_obj);
+        uword to_header = ReadHeaderRelaxed(to_obj);
         intptr_t size = to_obj->untag()->HeapSize();
 
         // Reset the ages bits in case this was a promotion.
@@ -1726,7 +1734,7 @@
         from_header =
             UntaggedObject::OldAndNotMarkedBit::update(false, from_header);
 
-        WriteHeader(from_obj, from_header);
+        WriteHeaderRelaxed(from_obj, from_header);
 
         ForwardingCorpse::AsForwarder(UntaggedObject::ToAddr(to_obj), size)
             ->set_target(from_obj);
@@ -1805,7 +1813,7 @@
 }
 #endif  // !PRODUCT
 
-void Scavenger::Evacuate() {
+void Scavenger::Evacuate(GCReason reason) {
   // We need a safepoint here to prevent allocation right before or right after
   // the scavenge.
   // The former can introduce an object that we might fail to collect.
@@ -1817,7 +1825,7 @@
   // Forces the next scavenge to promote all the objects in the new space.
   early_tenure_ = true;
 
-  Scavenge();
+  Scavenge(reason);
 
   // It is possible for objects to stay in the new space
   // if the VM cannot create more pages for these objects.
diff --git a/runtime/vm/heap/scavenger.h b/runtime/vm/heap/scavenger.h
index 4b73f85..ca75d9a 100644
--- a/runtime/vm/heap/scavenger.h
+++ b/runtime/vm/heap/scavenger.h
@@ -168,6 +168,7 @@
 class SemiSpace {
  public:
   static void Init();
+  static void DrainCache();
   static void Cleanup();
   static intptr_t CachedSize();
 
@@ -276,10 +277,10 @@
   void AbandonRemainingTLABForDebugging(Thread* thread);
 
   // Collect the garbage in this scavenger.
-  void Scavenge();
+  void Scavenge(GCReason reason);
 
   // Promote all live objects.
-  void Evacuate();
+  void Evacuate(GCReason reason);
 
   int64_t UsedInWords() const {
     MutexLocker ml(&space_lock_);
@@ -365,11 +366,6 @@
     kIterateStoreBuffers = 3,
     kProcessToSpace = 4,
     kIterateWeaks = 5,
-    // Data
-    kStoreBufferEntries = 0,
-    kDataUnused1 = 1,
-    kDataUnused2 = 2,
-    kToKBAfterStoreBuffer = 3
   };
 
   uword TryAllocateFromTLAB(Thread* thread, intptr_t size) {
@@ -389,7 +385,7 @@
   }
   void TryAllocateNewTLAB(Thread* thread, intptr_t size);
 
-  SemiSpace* Prologue();
+  SemiSpace* Prologue(GCReason reason);
   intptr_t ParallelScavenge(SemiSpace* from);
   intptr_t SerialScavenge(SemiSpace* from);
   void ReverseScavenge(SemiSpace** from);
@@ -413,7 +409,7 @@
 
   void MournWeakTables();
 
-  intptr_t NewSizeInWords(intptr_t old_size_in_words) const;
+  intptr_t NewSizeInWords(intptr_t old_size_in_words, GCReason reason) const;
 
   Heap* heap_;
 
diff --git a/runtime/vm/heap/spaces.h b/runtime/vm/heap/spaces.h
index 2dc9a03..f6827aa 100644
--- a/runtime/vm/heap/spaces.h
+++ b/runtime/vm/heap/spaces.h
@@ -29,6 +29,27 @@
   }
 };
 
+enum class GCType {
+  kScavenge,
+  kStartConcurrentMark,
+  kMarkSweep,
+  kMarkCompact,
+};
+
+enum class GCReason {
+  kNewSpace,     // New space is full.
+  kStoreBuffer,  // Store buffer is too big.
+  kPromotion,    // Old space limit crossed after a scavenge.
+  kOldSpace,     // Old space limit crossed.
+  kFinalize,     // Concurrent marking finished.
+  kFull,         // Heap::CollectAllGarbage
+  kExternal,     // Dart_NewFinalizableHandle Dart_NewWeakPersistentHandle
+  kIdle,         // Dart_NotifyIdle
+  kLowMemory,    // Dart_NotifyLowMemory
+  kDebugging,    // service request, etc.
+  kSendAndExit,  // SendPort.sendAndExit
+};
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_HEAP_SPACES_H_
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 9d49ce6..c1e6cbe 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -1383,17 +1383,6 @@
       }
     }
   } else {
-#ifndef PRODUCT
-    if (!Isolate::IsSystemIsolate(I)) {
-      // Mark all the user isolates as using a simplified timeline page of
-      // Observatory. The internal isolates will be filtered out from
-      // the Timeline due to absence of this argument. We still send them in
-      // order to maintain the original behavior of the full timeline and allow
-      // the developer to download complete dump files.
-      tbes.SetNumArguments(2);
-      tbes.CopyArgument(1, "mode", "basic");
-    }
-#endif
     const Object& msg_handler = Object::Handle(
         zone, DartLibraryCalls::HandleMessage(message->dest_port(), msg));
     if (msg_handler.IsError()) {
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 21cd81c..b1e4939 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -161,7 +161,9 @@
     FLAG_use_field_guards)                                                     \
   V(PRODUCT, should_load_vmservice_library, ShouldLoadVmService,               \
     load_vmservice_library, false)                                             \
-  V(NONPRODUCT, use_osr, UseOsr, use_osr, FLAG_use_osr)
+  V(NONPRODUCT, use_osr, UseOsr, use_osr, FLAG_use_osr)                        \
+  V(NONPRODUCT, snapshot_is_dontneed_safe, SnapshotIsDontNeedSafe,             \
+    snapshot_is_dontneed_safe, false)
 
 #define BOOL_ISOLATE_FLAG_LIST_DEFAULT_GETTER(V)                               \
   V(PRODUCT, copy_parent_code, CopyParentCode, copy_parent_code, false)        \
@@ -786,7 +788,8 @@
   V(NullSafetySet)                                                             \
   V(Obfuscate)                                                                 \
   V(UseFieldGuards)                                                            \
-  V(UseOsr)
+  V(UseOsr)                                                                    \
+  V(SnapshotIsDontNeedSafe)
 
   // Isolate group specific flags.
   enum FlagBits {
@@ -1334,13 +1337,6 @@
     UpdateIsolateFlagsBit<IsKernelIsolateBit>(value);
   }
 
-  // Whether it's possible for unoptimized code to optimize immediately on entry
-  // (can happen with random or very low optimization counter thresholds)
-  bool CanOptimizeImmediately() const {
-    return FLAG_optimization_counter_threshold < 2 ||
-           FLAG_randomize_optimization_counter;
-  }
-
   const DispatchTable* dispatch_table() const {
     return group()->dispatch_table();
   }
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 9ad8617..11d116a 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -669,7 +669,7 @@
     // We use kLowMemory to force the GC to compact, which is more likely to
     // discover untracked pointers (and other issues, like incorrect class
     // table).
-    heap->CollectAllGarbage(Heap::kLowMemory);
+    heap->CollectAllGarbage(GCReason::kLowMemory);
   }
 
   // Copy the size table for isolate group & class tables for each isolate.
@@ -683,7 +683,7 @@
     // We use kLowMemory to force the GC to compact, which is more likely to
     // discover untracked pointers (and other issues, like incorrect class
     // table).
-    heap->CollectAllGarbage(Heap::kLowMemory);
+    heap->CollectAllGarbage(GCReason::kLowMemory);
   }
 
   // We synchronously load the hot-reload kernel diff (which includes changed
@@ -714,7 +714,7 @@
       // We use kLowMemory to force the GC to compact, which is more likely to
       // discover untracked pointers (and other issues, like incorrect class
       // table).
-      heap->CollectAllGarbage(Heap::kLowMemory);
+      heap->CollectAllGarbage(GCReason::kLowMemory);
     }
 
     // If we use the CFE and performed a compilation, we need to notify that
@@ -745,7 +745,7 @@
           // We use kLowMemory to force the GC to compact, which is more likely
           // to discover untracked pointers (and other issues, like incorrect
           // class table).
-          heap->CollectAllGarbage(Heap::kLowMemory);
+          heap->CollectAllGarbage(GCReason::kLowMemory);
         }
         const intptr_t count = locator.count();
         if (count > 0) {
@@ -786,7 +786,7 @@
           // We use kLowMemory to force the GC to compact, which is more likely
           // to discover untracked pointers (and other issues, like incorrect
           // class table).
-          heap->CollectAllGarbage(Heap::kLowMemory);
+          heap->CollectAllGarbage(GCReason::kLowMemory);
         }
       }
       if (discard_class_tables) {
@@ -830,6 +830,11 @@
     success = false;
   }
 
+  Array& null_array = Array::Handle(Z);
+  // Invalidate the URI mapping caches.
+  IG->object_store()->set_uri_to_resolved_uri_map(null_array);
+  IG->object_store()->set_resolved_uri_to_uri_map(null_array);
+
   // Re-queue any shutdown requests so they can inform each isolate's own thread
   // to shut down.
   if (result.IsUnwindError()) {
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 65b7bd5..46d20ec 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 73;
-static const uint32_t kMaxSupportedKernelFormatVersion = 73;
+static const uint32_t kMinSupportedKernelFormatVersion = 74;
+static const uint32_t kMaxSupportedKernelFormatVersion = 74;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
index c1df592..8926b5d 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -174,7 +174,6 @@
     Thread* T = Thread::Current();
     ASSERT(I == T->isolate());
     StackZone zone(T);
-    HANDLESCOPE(T);
     // Invoke main which will return the port to which load requests are sent.
     const Library& root_library =
         Library::Handle(Z, I->group()->object_store()->root_library());
diff --git a/runtime/vm/message_snapshot.cc b/runtime/vm/message_snapshot.cc
index ac2eef3..4733db0 100644
--- a/runtime/vm/message_snapshot.cc
+++ b/runtime/vm/message_snapshot.cc
@@ -848,7 +848,9 @@
  public:
   explicit InstanceMessageDeserializationCluster(bool is_canonical)
       : MessageDeserializationCluster("Instance", is_canonical),
-        cls_(Class::Handle()) {}
+        cls_(Class::Handle()),
+        field_stores_(GrowableObjectArray::Handle(GrowableObjectArray::New())) {
+  }
   ~InstanceMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
@@ -897,7 +899,8 @@
           field ^= field_map.At(offset >> kCompressedWordSizeLog2);
           ASSERT(!field.IsNull());
           ASSERT(field.HostOffset() == offset);
-          field.RecordStore(value);
+          field_stores_.Add(field);
+          field_stores_.Add(value);
         }
 #endif
       }
@@ -926,11 +929,21 @@
       }
       return DartLibraryCalls::RehashObjectsInDartCore(d->thread(), expandos);
     }
+
+    Field& field = Field::Handle(d->zone());
+    Object& value = Object::Handle(d->zone());
+    for (int i = 0; i < field_stores_.Length(); i += 2) {
+      field ^= field_stores_.At(i);
+      value = field_stores_.At(i + 1);
+      field.RecordStore(value);
+    }
+
     return nullptr;
   }
 
  private:
   Class& cls_;
+  GrowableObjectArray& field_stores_;
 };
 
 class TypeMessageSerializationCluster : public MessageSerializationCluster {
@@ -3110,6 +3123,8 @@
         IllegalObject(*object, chars);
       }
     }
+
+    // Keep the list in sync with the one in lib/isolate.cc
 #define ILLEGAL(type)                                                          \
   if (cid == k##type##Cid) {                                                   \
     IllegalObject(*object,                                                     \
diff --git a/runtime/vm/metrics_test.cc b/runtime/vm/metrics_test.cc
index 2881c361..2be5b71 100644
--- a/runtime/vm/metrics_test.cc
+++ b/runtime/vm/metrics_test.cc
@@ -53,7 +53,6 @@
     Thread* thread = Thread::Current();
     TransitionNativeToVM transition(thread);
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     MyMetric metric;
 
     metric.InitInstance(Isolate::Current(), "a.b.c", "foobar", Metric::kByte);
@@ -89,8 +88,8 @@
 
   // Ensure we've done new/old GCs to ensure max metrics are initialized.
   String::New("<land-in-new-space>", Heap::kNew);
-  IsolateGroup::Current()->heap()->new_space()->Scavenge();
-  IsolateGroup::Current()->heap()->CollectAllGarbage(Heap::kLowMemory);
+  IsolateGroup::Current()->heap()->new_space()->Scavenge(GCReason::kLowMemory);
+  IsolateGroup::Current()->heap()->CollectAllGarbage(GCReason::kLowMemory);
 
   // Ensure we've something live in new space.
   String::New("<land-in-new-space2>", Heap::kNew);
@@ -118,7 +117,7 @@
 class MetricsTestHelper {
  public:
   static void Scavenge(Thread* thread) {
-    thread->heap()->CollectNewSpaceGarbage(thread, Heap::kDebugging);
+    thread->heap()->CollectNewSpaceGarbage(thread, GCReason::kDebugging);
   }
 };
 
@@ -159,7 +158,7 @@
   EXPECT_STREQ("debugging", last_gcevent_reason);
 
   // This call emits 2 or 3 events.
-  IsolateGroup::Current()->heap()->CollectAllGarbage(Heap::kLowMemory);
+  IsolateGroup::Current()->heap()->CollectAllGarbage(GCReason::kLowMemory);
 
   EXPECT_GE(event_counter, 3UL);
   EXPECT_STREQ("MarkCompact", last_gcevent_type);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index d793156..e272c5c 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -3897,10 +3897,7 @@
   forwarder.set_optimized_call_site_count(0);
 
   forwarder.InheritKernelOffsetFrom(*this);
-
-  const Array& checks = Array::Handle(zone, Array::New(1));
-  checks.SetAt(0, *this);
-  forwarder.SetForwardingChecks(checks);
+  forwarder.SetForwardingTarget(*this);
 
   return forwarder.ptr();
 }
@@ -4121,10 +4118,11 @@
 }
 
 // Conventions:
-// * For throwing a NSM in a class klass we use its runtime type as receiver,
-//   i.e., klass.RareType().
-// * For throwing a NSM in a library, we just pass the null instance as
-//   receiver.
+// * For throwing a NSM in a library or top-level class (i.e., level is
+//   kTopLevel), if a method was found but was incompatible, we pass the
+//   signature of the found method as a string, otherwise the null instance.
+// * Otherwise, for throwing a NSM in a class klass we use its runtime type as
+//   receiver, i.e., klass.RareType().
 static ObjectPtr ThrowNoSuchMethod(const Instance& receiver,
                                    const String& function_name,
                                    const Array& arguments,
@@ -4134,6 +4132,8 @@
   const Smi& invocation_type =
       Smi::Handle(Smi::New(InvocationMirror::EncodeType(level, kind)));
 
+  ASSERT(!receiver.IsNull() || level == InvocationMirror::Level::kTopLevel);
+  ASSERT(level != InvocationMirror::Level::kTopLevel || receiver.IsString());
   const Array& args = Array::Handle(Array::New(7));
   args.SetAt(0, receiver);
   args.SetAt(1, function_name);
@@ -7623,16 +7623,12 @@
 
 FunctionPtr Function::ForwardingTarget() const {
   ASSERT(kind() == UntaggedFunction::kDynamicInvocationForwarder);
-  Array& checks = Array::Handle();
-  checks ^= data();
-  return Function::RawCast(checks.At(0));
+  return Function::RawCast(WeakSerializationReference::Unwrap(data()));
 }
 
-void Function::SetForwardingChecks(const Array& checks) const {
+void Function::SetForwardingTarget(const Function& target) const {
   ASSERT(kind() == UntaggedFunction::kDynamicInvocationForwarder);
-  ASSERT(checks.Length() >= 1);
-  ASSERT(Object::Handle(checks.At(0)).IsFunction());
-  set_data(checks);
+  set_data(target);
 }
 
 // This field is heavily overloaded:
@@ -7654,8 +7650,9 @@
 //   regular function:        Function for implicit closure function
 //   constructor, factory:    Function for implicit closure function
 //   ffi trampoline function: FfiTrampolineData  (Dart->C)
-//   dyn inv forwarder:       Array[0] = Function target
-//                            Array[1] = TypeArguments default type args
+//   dyn inv forwarder:       Forwarding target, a WSR pointing to it or null
+//                            (null can only occur if forwarding target was
+//                            dropped)
 void Function::set_data(const Object& value) const {
   untag()->set_data<std::memory_order_release>(value.ptr());
 }
@@ -9652,15 +9649,15 @@
 ScriptPtr Function::script() const {
   // NOTE(turnidge): If you update this function, you probably want to
   // update Class::PatchFieldsAndFunctions() at the same time.
-  const Object& data = Object::Handle(this->data());
   if (IsDynamicInvocationForwarder()) {
-    const auto& forwarding_target = Function::Handle(ForwardingTarget());
-    return forwarding_target.script();
+    const Function& target = Function::Handle(ForwardingTarget());
+    return target.IsNull() ? Script::null() : target.script();
   }
   if (IsImplicitGetterOrSetter()) {
     const auto& field = Field::Handle(accessor_field());
     return field.Script();
   }
+  Object& data = Object::Handle(this->data());
   if (data.IsArray()) {
     Object& script = Object::Handle(Array::Cast(data).At(0));
     if (script.IsScript()) {
@@ -9940,25 +9937,37 @@
 
 void Function::SaveICDataMap(
     const ZoneGrowableArray<const ICData*>& deopt_id_to_ic_data,
-    const Array& edge_counters_array) const {
+    const Array& edge_counters_array,
+    const Array& coverage_array) const {
 #if !defined(DART_PRECOMPILED_RUNTIME)
+  // Already installed nothing to do.
+  if (ic_data_array() != Array::null()) {
+    ASSERT(coverage_array.ptr() == GetCoverageArray());
+    return;
+  }
+
   // Compute number of ICData objects to save.
-  // Store edge counter array in the first slot.
-  intptr_t count = 1;
+  intptr_t count = 0;
   for (intptr_t i = 0; i < deopt_id_to_ic_data.length(); i++) {
     if (deopt_id_to_ic_data[i] != NULL) {
       count++;
     }
   }
-  const Array& array = Array::Handle(Array::New(count, Heap::kOld));
-  count = 1;
-  for (intptr_t i = 0; i < deopt_id_to_ic_data.length(); i++) {
+
+  // Compress sparse deopt_id_to_ic_data mapping into a linear sequence of
+  // ICData objects.
+  const Array& array = Array::Handle(
+      Array::New(ICDataArrayIndices::kFirstICData + count, Heap::kOld));
+  for (intptr_t i = 0, pos = ICDataArrayIndices::kFirstICData;
+       i < deopt_id_to_ic_data.length(); i++) {
     if (deopt_id_to_ic_data[i] != NULL) {
       ASSERT(i == deopt_id_to_ic_data[i]->deopt_id());
-      array.SetAt(count++, *deopt_id_to_ic_data[i]);
+      array.SetAt(pos++, *deopt_id_to_ic_data[i]);
     }
   }
-  array.SetAt(0, edge_counters_array);
+  array.SetAt(ICDataArrayIndices::kEdgeCounters, edge_counters_array);
+  // Preserve coverage_array which is stored early after graph construction.
+  array.SetAt(ICDataArrayIndices::kCoverageData, coverage_array);
   set_ic_data_array(array);
 #else   // DART_PRECOMPILED_RUNTIME
   UNREACHABLE();
@@ -9982,7 +9991,7 @@
   }
   const intptr_t saved_length = saved_ic_data.Length();
   ASSERT(saved_length > 0);
-  if (saved_length > 1) {
+  if (saved_length > ICDataArrayIndices::kFirstICData) {
     const intptr_t restored_length =
         ICData::Cast(Object::Handle(zone, saved_ic_data.At(saved_length - 1)))
             .deopt_id() +
@@ -9991,7 +10000,7 @@
     for (intptr_t i = 0; i < restored_length; i++) {
       (*deopt_id_to_ic_data)[i] = NULL;
     }
-    for (intptr_t i = 1; i < saved_length; i++) {
+    for (intptr_t i = ICDataArrayIndices::kFirstICData; i < saved_length; i++) {
       ICData& ic_data = ICData::ZoneHandle(zone);
       ic_data ^= saved_ic_data.At(i);
       if (clone_ic_data) {
@@ -10008,6 +10017,14 @@
 #endif  // DART_PRECOMPILED_RUNTIME
 }
 
+ArrayPtr Function::GetCoverageArray() const {
+  const Array& arr = Array::Handle(ic_data_array());
+  if (arr.IsNull()) {
+    return Array::null();
+  }
+  return Array::RawCast(arr.At(ICDataArrayIndices::kCoverageData));
+}
+
 void Function::set_ic_data_array(const Array& value) const {
   untag()->set_ic_data_array<std::memory_order_release>(value.ptr());
 }
@@ -10023,7 +10040,7 @@
 ICDataPtr Function::FindICData(intptr_t deopt_id) const {
   const Array& array = Array::Handle(ic_data_array());
   ICData& ic_data = ICData::Handle();
-  for (intptr_t i = 1; i < array.Length(); i++) {
+  for (intptr_t i = ICDataArrayIndices::kFirstICData; i < array.Length(); i++) {
     ic_data ^= array.At(i);
     if (ic_data.deopt_id() == deopt_id) {
       return ic_data.ptr();
@@ -10036,7 +10053,7 @@
                                     ICData::DeoptReasonId reason) {
   const Array& array = Array::Handle(ic_data_array());
   ICData& ic_data = ICData::Handle();
-  for (intptr_t i = 1; i < array.Length(); i++) {
+  for (intptr_t i = ICDataArrayIndices::kFirstICData; i < array.Length(); i++) {
     ic_data ^= array.At(i);
     if (ic_data.deopt_id() == deopt_id) {
       ic_data.AddDeoptReason(reason);
@@ -13367,10 +13384,10 @@
 
   if (getter.IsNull() || (respect_reflectable && !getter.is_reflectable())) {
     if (throw_nsm_if_absent) {
-      return ThrowNoSuchMethod(
-          AbstractType::Handle(Class::Handle(toplevel_class()).RareType()),
-          getter_name, Object::null_array(), Object::null_array(),
-          InvocationMirror::kTopLevel, InvocationMirror::kGetter);
+      return ThrowNoSuchMethod(Object::null_string(), getter_name,
+                               Object::null_array(), Object::null_array(),
+                               InvocationMirror::kTopLevel,
+                               InvocationMirror::kGetter);
     }
 
     // Fall through case: Indicate that we didn't find any function or field
@@ -13408,10 +13425,10 @@
       const Array& args = Array::Handle(Array::New(kNumArgs));
       args.SetAt(0, value);
 
-      return ThrowNoSuchMethod(
-          AbstractType::Handle(Class::Handle(toplevel_class()).RareType()),
-          internal_setter_name, args, Object::null_array(),
-          InvocationMirror::kTopLevel, InvocationMirror::kSetter);
+      return ThrowNoSuchMethod(Object::null_string(), internal_setter_name,
+                               args, Object::null_array(),
+                               InvocationMirror::kTopLevel,
+                               InvocationMirror::kSetter);
     }
     field.SetStaticValue(value);
     return value.ptr();
@@ -13431,10 +13448,9 @@
   const Array& args = Array::Handle(Array::New(kNumArgs));
   args.SetAt(0, value);
   if (setter.IsNull() || (respect_reflectable && !setter.is_reflectable())) {
-    return ThrowNoSuchMethod(
-        AbstractType::Handle(Class::Handle(toplevel_class()).RareType()),
-        internal_setter_name, args, Object::null_array(),
-        InvocationMirror::kTopLevel, InvocationMirror::kSetter);
+    return ThrowNoSuchMethod(Object::null_string(), internal_setter_name, args,
+                             Object::null_array(), InvocationMirror::kTopLevel,
+                             InvocationMirror::kSetter);
   }
 
   setter_type = setter.ParameterTypeAt(0);
@@ -13497,13 +13513,15 @@
   }
 
   if (function.IsNull() ||
-      !function.AreValidArguments(args_descriptor, nullptr) ||
       (respect_reflectable && !function.is_reflectable())) {
+    return ThrowNoSuchMethod(Object::null_string(), function_name, args,
+                             arg_names, InvocationMirror::kTopLevel,
+                             InvocationMirror::kMethod);
+  }
+  if (!function.AreValidArguments(args_descriptor, nullptr)) {
     return ThrowNoSuchMethod(
-        AbstractType::Handle(zone,
-                             Class::Handle(zone, toplevel_class()).RareType()),
-        function_name, args, arg_names, InvocationMirror::kTopLevel,
-        InvocationMirror::kMethod);
+        String::Handle(function.UserVisibleSignature()), function_name, args,
+        arg_names, InvocationMirror::kTopLevel, InvocationMirror::kMethod);
   }
   // This is a static function, so we pass an empty instantiator tav.
   ASSERT(function.is_static());
@@ -14704,8 +14722,7 @@
         break;
       }
       case compiler::ObjectPoolBuilderEntry::kImmediate:
-      case compiler::ObjectPoolBuilderEntry::kNativeFunction:
-      case compiler::ObjectPoolBuilderEntry::kNativeFunctionWrapper: {
+      case compiler::ObjectPoolBuilderEntry::kNativeFunction: {
         compiler::ObjectPoolBuilderEntry entry(RawValueAt(i), type, patchable);
         builder->AddObject(entry);
         break;
@@ -14741,8 +14758,6 @@
       } else {
         THR_Print("0x%" Px " (native function)\n", pc);
       }
-    } else if (TypeAt(i) == EntryType::kNativeFunctionWrapper) {
-      THR_Print("0x%" Px " (native function wrapper)\n", RawValueAt(i));
     } else {
       THR_Print("0x%" Px " (raw)\n", RawValueAt(i));
     }
@@ -20695,7 +20710,7 @@
 }
 
 classid_t Type::type_class_id() const {
-  return Smi::Value(untag()->type_class_id());
+  return untag()->type_class_id_;
 }
 
 ClassPtr Type::type_class() const {
@@ -21266,7 +21281,7 @@
 
 void Type::set_type_class(const Class& value) const {
   ASSERT(!value.IsNull());
-  untag()->set_type_class_id(Smi::New(value.id()));
+  set_type_class_id(value.id());
 }
 
 void Type::set_arguments(const TypeArguments& value) const {
@@ -21298,6 +21313,19 @@
   return result.ptr();
 }
 
+void Type::set_type_class_id(intptr_t id) const {
+  COMPILE_ASSERT(
+      std::is_unsigned<decltype(UntaggedType::type_class_id_)>::value);
+  ASSERT(Utils::IsUint(sizeof(untag()->type_class_id_) * kBitsPerByte, id));
+  // We should never need a Type object for a top-level class.
+  ASSERT(!ClassTable::IsTopLevelCid(id));
+  // We must allow Types with kIllegalCid type class ids, because the class
+  // used for evaluating expressions inside a instance method call context
+  // from the debugger is not registered (and thus has kIllegalCid as an id).
+  ASSERT(id == kIllegalCid || !IsInternalOnlyClassId(id));
+  StoreNonPointer(&untag()->type_class_id_, id);
+}
+
 void Type::set_type_state(uint8_t state) const {
   ASSERT(state <= UntaggedType::kFinalizedUninstantiated);
   StoreNonPointer(&untag()->type_state_, state);
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index c76665a..df0932e 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -2953,7 +2953,7 @@
   intptr_t ComputeClosureHash() const;
 
   FunctionPtr ForwardingTarget() const;
-  void SetForwardingChecks(const Array& checks) const;
+  void SetForwardingTarget(const Function& target) const;
 
   UntaggedFunction::Kind kind() const {
     return untag()->kind_tag_.Read<KindBits>();
@@ -3675,16 +3675,31 @@
   // Works with map [deopt-id] -> ICData.
   void SaveICDataMap(
       const ZoneGrowableArray<const ICData*>& deopt_id_to_ic_data,
-      const Array& edge_counters_array) const;
+      const Array& edge_counters_array,
+      const Array& coverage_array) const;
   // Uses 'ic_data_array' to populate the table 'deopt_id_to_ic_data'. Clone
   // ic_data (array and descriptor) if 'clone_ic_data' is true.
   void RestoreICDataMap(ZoneGrowableArray<const ICData*>* deopt_id_to_ic_data,
                         bool clone_ic_data) const;
 
+  // ic_data_array attached to the function stores edge counters in the
+  // first element, coverage data array in the second element and the rest
+  // are ICData objects.
+  struct ICDataArrayIndices {
+    static constexpr intptr_t kEdgeCounters = 0;
+    static constexpr intptr_t kCoverageData = 1;
+    static constexpr intptr_t kFirstICData = 2;
+  };
+
   ArrayPtr ic_data_array() const;
   void ClearICDataArray() const;
   ICDataPtr FindICData(intptr_t deopt_id) const;
 
+  // Coverage data array is a list of pairs:
+  //   element 2 * i + 0 is token position
+  //   element 2 * i + 1 is coverage hit (zero meaning code was not hit)
+  ArrayPtr GetCoverageArray() const;
+
   // Sets deopt reason in all ICData-s with given deopt_id.
   void SetDeoptReasonForAll(intptr_t deopt_id, ICData::DeoptReasonId reason);
 
@@ -5254,10 +5269,13 @@
     return PatchableBit::decode(untag()->entry_bits()[index]);
   }
 
+  static uint8_t EncodeBits(EntryType type, Patchability patchable) {
+    return PatchableBit::encode(patchable) | TypeBits::encode(type);
+  }
+
   void SetTypeAt(intptr_t index, EntryType type, Patchability patchable) const {
     ASSERT(index >= 0 && index <= Length());
-    const uint8_t bits =
-        PatchableBit::encode(patchable) | TypeBits::encode(type);
+    const uint8_t bits = EncodeBits(type, patchable);
     StoreNonPointer(&untag()->entry_bits()[index], bits);
   }
 
@@ -8414,6 +8432,10 @@
  private:
   void SetHash(intptr_t value) const;
 
+  // Takes an intptr_t since the cids of some classes are larger than will fit
+  // in ClassIdTagType. This allows us to guard against that case, instead of
+  // silently truncating the cid.
+  void set_type_class_id(intptr_t id) const;
   void set_type_state(uint8_t state) const;
   void set_nullability(Nullability value) const {
     ASSERT(!IsCanonical());
diff --git a/runtime/vm/object_graph_copy.cc b/runtime/vm/object_graph_copy.cc
index 45642c8..bb715ff 100644
--- a/runtime/vm/object_graph_copy.cc
+++ b/runtime/vm/object_graph_copy.cc
@@ -136,6 +136,7 @@
   return Object::unknown_constant().ptr();
 }
 
+// Keep in sync with runtime/lib/isolate.cc:ValidateMessageObject
 DART_FORCE_INLINE
 static bool CanShareObject(ObjectPtr obj, uword tags) {
   if ((tags & UntaggedObject::CanonicalBit::mask_in_place()) != 0) {
@@ -150,6 +151,7 @@
   if (cid == kImmutableArrayCid) return true;
   if (cid == kNeverCid) return true;
   if (cid == kSentinelCid) return true;
+  if (cid == kStackTraceCid) return true;
 #if defined(DART_PRECOMPILED_RUNTIME)
   // In JIT mode we have field guards enabled which means
   // double/float32x4/float64x2 boxes can be mutable and we therefore cannot
@@ -590,11 +592,9 @@
       // those are the only non-abstract classes (so we avoid checking more cids
       // here that cannot happen in reality)
       HANDLE_ILLEGAL_CASE(DynamicLibrary)
-      HANDLE_ILLEGAL_CASE(Pointer)
-      HANDLE_ILLEGAL_CASE(FunctionType)
       HANDLE_ILLEGAL_CASE(MirrorReference)
+      HANDLE_ILLEGAL_CASE(Pointer)
       HANDLE_ILLEGAL_CASE(ReceivePort)
-      HANDLE_ILLEGAL_CASE(StackTrace)
       HANDLE_ILLEGAL_CASE(UserTag)
       default:
         return true;
@@ -1741,7 +1741,7 @@
         // We use kLowMemory to force the GC to compact, which is more likely to
         // discover untracked pointers (and other issues, like incorrect class
         // table).
-        thread_->heap()->CollectAllGarbage(Heap::kLowMemory);
+        thread_->heap()->CollectAllGarbage(GCReason::kLowMemory);
       }
 
       // Fast copy failed due to
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index cc089f2..5ed79a5 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -29,7 +29,8 @@
     return;
   }
   ASSERT(ic_data_array_.Length() > 0);
-  edge_counters_ ^= ic_data_array_.At(0);
+  edge_counters_ ^=
+      ic_data_array_.At(Function::ICDataArrayIndices::kEdgeCounters);
   if (edge_counters_.IsNull()) {
     return;
   }
@@ -98,7 +99,7 @@
                        ICData* ic_data) {
   // ic_data_array is sorted because of how it is constructed in
   // Function::SaveICDataMap.
-  intptr_t lo = 1;
+  intptr_t lo = Function::ICDataArrayIndices::kFirstICData;
   intptr_t hi = ic_data_array.Length() - 1;
   while (lo <= hi) {
     intptr_t mid = (hi - lo + 1) / 2 + lo;
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index 1685ebf..f7fe7fe 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -722,11 +722,6 @@
           jsentry.AddProperty("kind", "NativeFunction");
           jsentry.AddProperty64("value", imm);
           break;
-        case ObjectPool::EntryType::kNativeFunctionWrapper:
-          imm = RawValueAt(i);
-          jsentry.AddProperty("kind", "NativeFunctionWrapper");
-          jsentry.AddProperty64("value", imm);
-          break;
         default:
           UNREACHABLE();
       }
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index ebb2d60..3b308c6 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -143,6 +143,9 @@
   RW(Library, _vmservice_library)                                              \
   RW(GrowableObjectArray, libraries)                                           \
   RW(Array, libraries_map)                                                     \
+  RW(Array, uri_to_resolved_uri_map)                                           \
+  RW(Array, resolved_uri_to_uri_map)                                           \
+  RW(Smi, last_libraries_count)                                                \
   RW(Array, loading_units)                                                     \
   RW(GrowableObjectArray, closure_functions)                                   \
   RW(GrowableObjectArray, pending_classes)                                     \
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index be755ef..c8cbcec 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -5473,7 +5473,7 @@
   kUint8,
   kUint16,
   kUint32,
-  kUnit64,
+  kUint64,
   kIntptr,
   kFloat,
   kDouble,
@@ -5488,7 +5488,7 @@
   Abi.wordSize32Align32: {
     NativeType.kDouble: 4,
     NativeType.kInt64: 4,
-    NativeType.kUnit64: 4
+    NativeType.kUint64: 4
   },
   Abi.wordSize32Align64: {},
 };
@@ -5498,7 +5498,7 @@
   Abi.wordSize32Align32: {
     NativeType.kDouble: 4,
     NativeType.kInt64: 4,
-    NativeType.kUnit64: 4
+    NativeType.kUint64: 4
   },
   Abi.wordSize32Align64: {},
 };
diff --git a/runtime/vm/os_thread.h b/runtime/vm/os_thread.h
index b1019e8..1f6a0e3 100644
--- a/runtime/vm/os_thread.h
+++ b/runtime/vm/os_thread.h
@@ -305,8 +305,9 @@
 
   friend class IsolateGroup;  // to access set_thread(Thread*).
   friend class OSThreadIterator;
-  friend class ThreadInterrupterWin;
   friend class ThreadInterrupterFuchsia;
+  friend class ThreadInterrupterMacOS;
+  friend class ThreadInterrupterWin;
   friend class ThreadPool;  // to access owning_thread_pool_worker_
 };
 
diff --git a/runtime/vm/os_thread_android.cc b/runtime/vm/os_thread_android.cc
index df257e3..8c09320 100644
--- a/runtime/vm/os_thread_android.cc
+++ b/runtime/vm/os_thread_android.cc
@@ -138,6 +138,7 @@
   delete data;
 
   // Set the thread name. There is 16 bytes limit on the name (including \0).
+  // pthread_setname_np ignores names that are too long rather than truncating.
   char truncated_name[16];
   snprintf(truncated_name, ARRAY_SIZE(truncated_name), "%s", name);
   pthread_setname_np(pthread_self(), truncated_name);
diff --git a/runtime/vm/os_thread_linux.cc b/runtime/vm/os_thread_linux.cc
index 167721a..409b03b 100644
--- a/runtime/vm/os_thread_linux.cc
+++ b/runtime/vm/os_thread_linux.cc
@@ -139,6 +139,7 @@
   delete data;
 
   // Set the thread name. There is 16 bytes limit on the name (including \0).
+  // pthread_setname_np ignores names that are too long rather than truncating.
   char truncated_name[16];
   snprintf(truncated_name, ARRAY_SIZE(truncated_name), "%s", name);
   pthread_setname_np(pthread_self(), truncated_name);
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index edaafe7..c82c0f9 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -1777,7 +1777,6 @@
   ASSERT(buffer != nullptr);
 
   StackZone zone(thread);
-  HANDLESCOPE(thread);
   Profile profile;
   profile.Build(thread, filter, buffer);
   profile.PrintProfileJSON(stream, include_code_samples);
diff --git a/runtime/vm/profiler_test.cc b/runtime/vm/profiler_test.cc
index 987787c..74c3027 100644
--- a/runtime/vm/profiler_test.cc
+++ b/runtime/vm/profiler_test.cc
@@ -501,7 +501,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     // Filter for the class in the time range.
     AllocationFilter filter(isolate->main_port(), class_a.id(),
@@ -531,7 +530,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id(),
                             Dart_TimelineGetMicros(), 16000);
@@ -578,7 +576,6 @@
   {
     Thread* thread = Thread::Current();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
 
     // Filter for the class in the time range.
@@ -617,7 +614,6 @@
   {
     Thread* thread = Thread::Current();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
 
     // Filter for the class in the time range.
@@ -632,7 +628,6 @@
   {
     Thread* thread = Thread::Current();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     NativeAllocationSampleFilter filter(Dart_TimelineGetMicros(), 16000);
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -678,7 +673,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -695,7 +689,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -725,7 +718,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -763,7 +755,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -783,7 +774,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -838,7 +828,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -858,7 +847,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -908,7 +896,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), double_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -921,7 +908,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), double_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -943,7 +929,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), double_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -970,7 +955,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), array_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -983,7 +967,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), array_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1005,7 +988,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), array_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1027,7 +1009,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), array_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1057,7 +1038,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), context_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1070,7 +1050,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), context_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1090,7 +1069,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), context_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1130,7 +1108,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), closure_class.id());
     filter.set_enable_vm_ticks(true);
@@ -1154,7 +1131,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), closure_class.id());
     filter.set_enable_vm_ticks(true);
@@ -1185,7 +1161,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), float32_list_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1198,7 +1173,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), float32_list_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1220,7 +1194,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), float32_list_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1233,7 +1206,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), float32_list_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1265,7 +1237,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1278,7 +1249,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1298,7 +1268,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1311,7 +1280,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1343,7 +1311,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1356,7 +1323,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1382,7 +1348,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1395,7 +1360,6 @@
 
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), one_byte_string_class.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1451,7 +1415,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1469,7 +1432,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1598,7 +1560,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1615,7 +1576,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1691,7 +1651,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1786,7 +1745,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1868,7 +1826,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -1946,7 +1903,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -2056,7 +2012,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -2151,7 +2106,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
@@ -2269,7 +2223,6 @@
     Thread* thread = Thread::Current();
     Isolate* isolate = thread->isolate();
     StackZone zone(thread);
-    HANDLESCOPE(thread);
     Profile profile;
     AllocationFilter filter(isolate->main_port(), class_a.id());
     profile.Build(thread, &filter, Profiler::sample_block_buffer());
diff --git a/runtime/vm/program_visitor.cc b/runtime/vm/program_visitor.cc
index 0a07b1e..02a5657 100644
--- a/runtime/vm/program_visitor.cc
+++ b/runtime/vm/program_visitor.cc
@@ -646,7 +646,7 @@
   class NormalizeAndDedupCompressedStackMapsVisitor
       : public CodeVisitor,
         public Dedupper<CompressedStackMaps,
-                        PointerKeyValueTrait<const CompressedStackMaps>> {
+                        PointerSetKeyValueTrait<const CompressedStackMaps>> {
    public:
     NormalizeAndDedupCompressedStackMapsVisitor(Zone* zone,
                                                 IsolateGroup* isolate_group)
@@ -1504,7 +1504,6 @@
 
 uint32_t ProgramVisitor::Hash(Thread* thread) {
   StackZone stack_zone(thread);
-  HANDLESCOPE(thread);
   Zone* zone = thread->zone();
 
   ProgramHashVisitor visitor(zone);
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index ae7d7a9..986cb2d 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -2520,15 +2520,16 @@
  private:
   RAW_HEAP_OBJECT_IMPLEMENTATION(Type);
 
-  COMPRESSED_POINTER_FIELD(SmiPtr, type_class_id)
   COMPRESSED_POINTER_FIELD(TypeArgumentsPtr, arguments)
   COMPRESSED_POINTER_FIELD(SmiPtr, hash)
   VISIT_TO(hash)
+  ClassIdTagType type_class_id_;
   uint8_t type_state_;
   uint8_t nullability_;
 
   CompressedObjectPtr* to_snapshot(Snapshot::Kind kind) { return to(); }
 
+  friend class compiler::target::UntaggedType;
   friend class CidRewriteVisitor;
   friend class UntaggedTypeArguments;
 };
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 54e4108..549dd9b 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -2797,7 +2797,7 @@
     }
   }
   if (do_gc) {
-    isolate->group()->heap()->CollectAllGarbage(Heap::kDebugging);
+    isolate->group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
 }
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
@@ -3265,7 +3265,6 @@
   Thread* thread = Thread::Current();
   Isolate* isolate = thread->isolate();
   StackZone zone(thread);
-  HANDLESCOPE(thread);
 
   // All registers have been saved below last-fp as if they were locals.
   const uword last_fp =
@@ -3337,7 +3336,6 @@
   Thread* thread = Thread::Current();
   Isolate* isolate = thread->isolate();
   StackZone zone(thread);
-  HANDLESCOPE(thread);
 
   DeoptContext* deopt_context = isolate->deopt_context();
   DartFrameIterator iterator(last_fp, thread,
diff --git a/runtime/vm/runtime_entry.h b/runtime/vm/runtime_entry.h
index 3fc3e01..99b6a76 100644
--- a/runtime/vm/runtime_entry.h
+++ b/runtime/vm/runtime_entry.h
@@ -120,7 +120,6 @@
       Isolate* isolate = thread->isolate();                                    \
       TransitionGeneratedToVM transition(thread);                              \
       StackZone zone(thread);                                                  \
-      HANDLESCOPE(thread);                                                     \
       CHECK_SIMULATOR_STACK_OVERFLOW();                                        \
       if (FLAG_deoptimize_on_runtime_call_every > 0) {                         \
         OnEveryRuntimeEntryCall(thread, "" #name, can_lazy_deopt);             \
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 1cc5a5c..a75737e 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -844,7 +844,6 @@
                         const Error& error) {
   Thread* T = Thread::Current();
   StackZone zone(T);
-  HANDLESCOPE(T);
   JSONStream js;
   js.Setup(zone.GetZone(), SendPort::Cast(reply_port).Id(), id, method_name,
            parameter_keys, parameter_values);
@@ -865,7 +864,6 @@
 
   {
     StackZone zone(T);
-    HANDLESCOPE(T);
 
     Instance& reply_port = Instance::Handle(Z);
     Instance& seq = String::Handle(Z);
@@ -3227,7 +3225,6 @@
 
   // Ensure the array and handles created below are promptly destroyed.
   StackZone zone(thread);
-  HANDLESCOPE(thread);
 
   ZoneGrowableHandlePtrArray<Object> storage(thread->zone(), limit);
   GetInstancesVisitor visitor(&storage, limit);
@@ -3278,7 +3275,6 @@
   Array& instances = Array::Handle();
   {
     StackZone zone(thread);
-    HANDLESCOPE(thread);
 
     ZoneGrowableHandlePtrArray<Object> storage(thread->zone(), 1024);
     GetInstancesVisitor visitor(&storage, kSmiMax);
@@ -3306,7 +3302,6 @@
 static void GetPorts(Thread* thread, JSONStream* js) {
   // Ensure the array and handles created below are promptly destroyed.
   StackZone zone(thread);
-  HANDLESCOPE(thread);
   const GrowableObjectArray& ports = GrowableObjectArray::Handle(
       GrowableObjectArray::RawCast(DartLibraryCalls::LookupOpenPorts()));
   JSONObject jsobj(js);
@@ -4228,7 +4223,7 @@
 
 static void CollectAllGarbage(Thread* thread, JSONStream* js) {
   auto heap = thread->isolate_group()->heap();
-  heap->CollectAllGarbage(Heap::kDebugging);
+  heap->CollectAllGarbage(GCReason::kDebugging);
   PrintSuccess(js);
 }
 
@@ -4241,12 +4236,14 @@
   auto isolate_group = thread->isolate_group();
   if (js->HasParam("gc")) {
     if (js->ParamIs("gc", "scavenge")) {
-      isolate_group->heap()->CollectGarbage(Heap::kScavenge, Heap::kDebugging);
+      isolate_group->heap()->CollectGarbage(GCType::kScavenge,
+                                            GCReason::kDebugging);
     } else if (js->ParamIs("gc", "mark-sweep")) {
-      isolate_group->heap()->CollectGarbage(Heap::kMarkSweep, Heap::kDebugging);
+      isolate_group->heap()->CollectGarbage(GCType::kMarkSweep,
+                                            GCReason::kDebugging);
     } else if (js->ParamIs("gc", "mark-compact")) {
-      isolate_group->heap()->CollectGarbage(Heap::kMarkCompact,
-                                            Heap::kDebugging);
+      isolate_group->heap()->CollectGarbage(GCType::kMarkCompact,
+                                            GCReason::kDebugging);
     } else {
       PrintInvalidParamError(js, "gc");
       return;
@@ -4887,9 +4884,15 @@
   jsobj.AddProperty("operatingSystem", OS::Name());
   jsobj.AddProperty("targetCPU", CPU::Id());
   jsobj.AddProperty("version", Version::String());
+#if defined(DART_PRECOMPILED_RUNTIME)
+  Snapshot::Kind kind = Snapshot::kFullAOT;
+#else
+  Snapshot::Kind kind = Snapshot::kFullJIT;
+#endif
+  char* features_string = Dart::FeaturesString(nullptr, true, kind);
+  jsobj.AddProperty("_features", features_string);
+  free(features_string);
   jsobj.AddProperty("_profilerMode", FLAG_profile_vm ? "VM" : "Dart");
-  jsobj.AddProperty64("_nativeZoneMemoryUsage",
-                      ApiNativeScope::current_memory_usage());
   jsobj.AddProperty64("pid", OS::ProcessId());
   jsobj.AddPropertyTimeMillis(
       "startTime", OS::GetCurrentTimeMillis() - Dart::UptimeMillis());
@@ -4945,6 +4948,159 @@
   Service::PrintJSONForVM(js, false);
 }
 
+static intptr_t ParseJSONArray(Thread* thread,
+                               const char* str,
+                               const GrowableObjectArray& elements) {
+  ASSERT(str != nullptr);
+  ASSERT(thread != nullptr);
+  Zone* zone = thread->zone();
+  intptr_t n = strlen(str);
+  if (n < 2) {
+    return -1;
+  }
+  intptr_t start = 1;
+  while (start < n) {
+    intptr_t end = start;
+    while ((str[end + 1] != ',') && (str[end + 1] != ']')) {
+      end++;
+    }
+    if (end == start) {
+      // Empty element
+      break;
+    }
+    String& element = String::Handle(
+        zone, String::FromUTF8(reinterpret_cast<const uint8_t*>(&str[start]),
+                               end - start + 1));
+    elements.Add(element);
+    start = end + 3;
+  }
+  return 0;
+}
+
+class UriMappingTraits {
+ public:
+  static const char* Name() { return "UriMappingTraits"; }
+  static bool ReportStats() { return false; }
+
+  static bool IsMatch(const Object& a, const Object& b) {
+    const String& a_str = String::Cast(a);
+    const String& b_str = String::Cast(b);
+
+    ASSERT(a_str.HasHash() && b_str.HasHash());
+    return a_str.Equals(b_str);
+  }
+
+  static uword Hash(const Object& key) { return String::Cast(key).Hash(); }
+
+  static ObjectPtr NewKey(const String& str) { return str.ptr(); }
+};
+
+typedef UnorderedHashMap<UriMappingTraits> UriMapping;
+
+static void PopulateUriMappings(Thread* thread) {
+  Zone* zone = thread->zone();
+  auto object_store = thread->isolate_group()->object_store();
+  UriMapping uri_to_resolved_uri(HashTables::New<UriMapping>(16, Heap::kOld));
+  UriMapping resolved_uri_to_uri(HashTables::New<UriMapping>(16, Heap::kOld));
+
+  const auto& libs =
+      GrowableObjectArray::Handle(zone, object_store->libraries());
+  intptr_t num_libs = libs.Length();
+
+  Library& lib = Library::Handle(zone);
+  Script& script = Script::Handle(zone);
+  Array& scripts = Array::Handle(zone);
+  String& uri = String::Handle(zone);
+  String& resolved_uri = String::Handle(zone);
+
+  for (intptr_t i = 0; i < num_libs; ++i) {
+    lib ^= libs.At(i);
+    scripts ^= lib.LoadedScripts();
+    intptr_t num_scripts = scripts.Length();
+    for (intptr_t j = 0; j < num_scripts; ++j) {
+      script ^= scripts.At(j);
+      uri ^= script.url();
+      resolved_uri ^= script.resolved_url();
+      uri_to_resolved_uri.UpdateOrInsert(uri, resolved_uri);
+      resolved_uri_to_uri.UpdateOrInsert(resolved_uri, uri);
+    }
+  }
+
+  object_store->set_uri_to_resolved_uri_map(uri_to_resolved_uri.Release());
+  object_store->set_resolved_uri_to_uri_map(resolved_uri_to_uri.Release());
+  Smi& count = Smi::Handle(zone, Smi::New(num_libs));
+  object_store->set_last_libraries_count(count);
+}
+
+static void LookupScriptUrisImpl(Thread* thread,
+                                 JSONStream* js,
+                                 bool lookup_resolved) {
+  Zone* zone = thread->zone();
+  auto object_store = thread->isolate_group()->object_store();
+
+  const auto& libs =
+      GrowableObjectArray::Handle(zone, object_store->libraries());
+  Smi& last_libraries_count =
+      Smi::Handle(zone, object_store->last_libraries_count());
+  if ((object_store->uri_to_resolved_uri_map() == Array::null()) ||
+      (object_store->resolved_uri_to_uri_map() == Array::null()) ||
+      (last_libraries_count.Value() != libs.Length())) {
+    PopulateUriMappings(thread);
+  }
+  const char* uris_arg = js->LookupParam("uris");
+  if (uris_arg == nullptr) {
+    PrintMissingParamError(js, "uris");
+    return;
+  }
+
+  const GrowableObjectArray& uris =
+      GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+  intptr_t uris_length = ParseJSONArray(thread, uris_arg, uris);
+  if (uris_length < 0) {
+    PrintInvalidParamError(js, "uris");
+    return;
+  }
+
+  UriMapping map(lookup_resolved ? object_store->uri_to_resolved_uri_map()
+                                 : object_store->resolved_uri_to_uri_map());
+  JSONObject jsobj(js);
+  jsobj.AddProperty("type", "UriList");
+
+  {
+    JSONArray uris_array(&jsobj, "uris");
+    String& uri = String::Handle(zone);
+    String& res = String::Handle(zone);
+    for (intptr_t i = 0; i < uris.Length(); ++i) {
+      uri ^= uris.At(i);
+      res ^= map.GetOrNull(uri);
+      if (res.IsNull()) {
+        uris_array.AddValueNull();
+      } else {
+        uris_array.AddValue(res.ToCString());
+      }
+    }
+  }
+  map.Release();
+}
+
+static const MethodParameter* const lookup_resolved_package_uris_params[] = {
+    ISOLATE_PARAMETER,
+    nullptr,
+};
+
+static void LookupResolvedPackageUris(Thread* thread, JSONStream* js) {
+  LookupScriptUrisImpl(thread, js, true);
+}
+
+static const MethodParameter* const lookup_package_uris_params[] = {
+    ISOLATE_PARAMETER,
+    nullptr,
+};
+
+static void LookupPackageUris(Thread* thread, JSONStream* js) {
+  LookupScriptUrisImpl(thread, js, false);
+}
+
 static const char* const exception_pause_mode_names[] = {
     "All",
     "None",
@@ -5356,6 +5512,10 @@
     get_reachable_size_params },
   { "_getRetainedSize", GetRetainedSize,
     get_retained_size_params },
+  { "lookupResolvedPackageUris", LookupResolvedPackageUris,
+    lookup_resolved_package_uris_params },
+  { "lookupPackageUris", LookupPackageUris,
+    lookup_package_uris_params },
   { "getRetainingPath", GetRetainingPath,
     get_retaining_path_params },
   { "getScripts", GetScripts,
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 6d32257..c3fe1f2 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.h
@@ -15,7 +15,7 @@
 namespace dart {
 
 #define SERVICE_PROTOCOL_MAJOR_VERSION 3
-#define SERVICE_PROTOCOL_MINOR_VERSION 51
+#define SERVICE_PROTOCOL_MINOR_VERSION 52
 
 class Array;
 class EmbedderServiceHandler;
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index 1581c44..ba4add1 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -1,8 +1,8 @@
-# Dart VM Service Protocol 3.51
+# Dart VM Service Protocol 3.52
 
 > Please post feedback to the [observatory-discuss group][discuss-list]
 
-This document describes of _version 3.51_ of the Dart VM Service Protocol. This
+This document describes of _version 3.52_ of the Dart VM Service Protocol. This
 protocol is used to communicate with a running Dart Virtual Machine.
 
 To use the Service Protocol, start the VM with the *--observe* flag.
@@ -40,6 +40,7 @@
   - [evaluateInFrame](#evaluateinframe)
   - [getAllocationProfile](#getallocationprofile)
   - [getAllocationTraces](#getallocationtraces)
+  - [getClassList](#getclasslist)
   - [getCpuSamples](#getcpusamples)
   - [getFlagList](#getflaglist)
   - [getInstances](#getinstances)
@@ -61,6 +62,8 @@
   - [getVMTimelineFlags](#getvmtimelineflags)
   - [getVMTimelineMicros](#getvmtimelinemicros)
   - [invoke](#invoke)
+  - [lookupResolvedPackageUris](#lookupresolvedpackageuris)
+  - [lookupPackageUris](#lookuppackageuris)
   - [pause](#pause)
   - [kill](#kill)
   - [registerService](#registerService)
@@ -141,7 +144,8 @@
   - [Timestamp](#timestamp)
   - [TypeArguments](#typearguments)
   - [TypeParameters](#typeparameters)[
-  - [UresolvedSourceLocation](#unresolvedsourcelocation)
+  - [UnresolvedSourceLocation](#unresolvedsourcelocation)
+  - [UriList](#urilist)
   - [Version](#version)
   - [VM](#vm)
   - [WebSocketTarget](#websockettarget)
@@ -1206,6 +1210,44 @@
 
 See [Success](#success).
 
+### lookupResolvedPackageUris
+
+```
+UriList lookupResolvedPackageUris(string isolateId, string[] uris)
+```
+
+The _lookupResolvedPackageUris_ RPC is used to convert a list of URIs to their
+resolved (or absolute) paths. For example, URIs passed to this RPC are mapped in
+the following ways:
+
+- `dart:io` -> `org-dartlang-sdk:///sdk/lib/io/io.dart`
+- `package:test/test.dart` -> `file:///$PACKAGE_INSTALLATION_DIR/lib/test.dart`
+- `file:///foo/bar/bazz.dart` -> `file:///foo/bar/bazz.dart`
+
+If a URI is not known, the corresponding entry in the [UriList] response will be
+`null`.
+
+See [UriList](#urilist).
+
+### lookupPackageUris
+
+```
+UriList lookupPackageUris(string isolateId, string[] uris)
+```
+
+The _lookupPackageUris_ RPC is used to convert a list of URIs to their
+unresolved paths. For example, URIs passed to this RPC are mapped in the
+following ways:
+
+- `org-dartlang-sdk:///sdk/lib/io/io.dart` -> `dart:io`
+- `file:///$PACKAGE_INSTALLATION_DIR/lib/test.dart` -> `package:test/test.dart`
+- `file:///foo/bar/bazz.dart` -> `file:///foo/bar/bazz.dart`
+
+If a URI is not known, the corresponding entry in the [UriList] response will be
+`null`.
+
+See [UriList](#urilist).
+
 ### registerService
 
 ```
@@ -4056,6 +4098,15 @@
 The _column_ field will only be present when the breakpoint was
 specified with a specific column number.
 
+### UriList
+
+```
+class UriList extends Response {
+  // A list of URIs.
+  (string|Null)[] uris;
+}
+```
+
 ### Version
 
 ```
@@ -4183,5 +4234,5 @@
 3.49 | Added `CpuSamples` event kind, and `cpuSamples` property to `Event`.
 3.50 | Added `returnType`, `parameters`, and `typeParameters` to `@Instance`, and `implicit` to `@Function`. Added `Parameter` type.
 3.51 | Added optional `reportLines` parameter to `getSourceReport` RPC.
-
+3.52 | Added `lookupResolvedPackageUris` and `lookupPackageUris` RPCs and `UriList` type.
 [discuss-list]: https://groups.google.com/a/dartlang.org/forum/#!forum/observatory-discuss
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc
index 418aa3a..95add31 100644
--- a/runtime/vm/service_isolate.cc
+++ b/runtime/vm/service_isolate.cc
@@ -438,7 +438,6 @@
     Thread* T = Thread::Current();
     ASSERT(I == T->isolate());
     StackZone zone(T);
-    HANDLESCOPE(T);
     // Invoke main which will set up the service port.
     const Library& root_library =
         Library::Handle(Z, I->group()->object_store()->root_library());
diff --git a/runtime/vm/signal_handler_macos.cc b/runtime/vm/signal_handler_macos.cc
index 70e5319..0e0c591 100644
--- a/runtime/vm/signal_handler_macos.cc
+++ b/runtime/vm/signal_handler_macos.cc
@@ -91,24 +91,11 @@
 }
 
 void SignalHandler::Install(SignalAction action) {
-  struct sigaction act = {};
-  act.sa_handler = NULL;
-  act.sa_sigaction = action;
-  sigemptyset(&act.sa_mask);
-  act.sa_flags = SA_RESTART | SA_SIGINFO;
-  int r = sigaction(SIGPROF, &act, NULL);
-  ASSERT(r == 0);
+  // Nothing to do on MacOS.
 }
 
 void SignalHandler::Remove() {
-  // Ignore future SIGPROF signals because by default SIGPROF will terminate
-  // the process and we may have some signals in flight.
-  struct sigaction act = {};
-  act.sa_handler = SIG_IGN;
-  sigemptyset(&act.sa_mask);
-  act.sa_flags = 0;
-  int r = sigaction(SIGPROF, &act, NULL);
-  ASSERT(r == 0);
+  // Nothing to do on MacOS.
 }
 
 }  // namespace dart
diff --git a/runtime/vm/source_report.cc b/runtime/vm/source_report.cc
index f72a72e..ede8d64 100644
--- a/runtime/vm/source_report.cc
+++ b/runtime/vm/source_report.cc
@@ -263,6 +263,21 @@
     coverage[0] = kCoverageMiss;
   }
 
+  auto update_coverage = [&](TokenPosition token_pos, bool was_executed) {
+    if (!token_pos.IsWithin(begin_pos, end_pos)) {
+      return;
+    }
+
+    const intptr_t token_offset = token_pos.Pos() - begin_pos.Pos();
+    if (was_executed) {
+      coverage[token_offset] = kCoverageHit;
+    } else {
+      if (coverage[token_offset] == kCoverageNone) {
+        coverage[token_offset] = kCoverageMiss;
+      }
+    }
+  };
+
   PcDescriptors::Iterator iter(
       descriptors,
       UntaggedPcDescriptors::kIcCall | UntaggedPcDescriptors::kUnoptStaticCall);
@@ -272,19 +287,19 @@
     const ICData* ic_data = (*ic_data_array)[iter.DeoptId()];
     if (ic_data != NULL) {
       const TokenPosition& token_pos = iter.TokenPos();
-      if (!token_pos.IsWithin(begin_pos, end_pos)) {
-        // Does not correspond to a valid source position.
-        continue;
-      }
-      intptr_t count = ic_data->AggregateCount();
-      intptr_t token_offset = token_pos.Pos() - begin_pos.Pos();
-      if (count > 0) {
-        coverage[token_offset] = kCoverageHit;
-      } else {
-        if (coverage[token_offset] == kCoverageNone) {
-          coverage[token_offset] = kCoverageMiss;
-        }
-      }
+      update_coverage(token_pos, ic_data->AggregateCount() > 0);
+    }
+  }
+
+  // Merge the coverage from coverage_array attached to the function.
+  const Array& coverage_array = Array::Handle(function.GetCoverageArray());
+  if (!coverage_array.IsNull()) {
+    for (intptr_t i = 0; i < coverage_array.Length(); i += 2) {
+      const TokenPosition token_pos = TokenPosition::Deserialize(
+          Smi::Value(Smi::RawCast(coverage_array.At(i))));
+      const bool was_executed =
+          Smi::Value(Smi::RawCast(coverage_array.At(i + 1))) != 0;
+      update_coverage(token_pos, was_executed);
     }
   }
 
diff --git a/runtime/vm/source_report_test.cc b/runtime/vm/source_report_test.cc
index 5934703..00c4c2e 100644
--- a/runtime/vm/source_report_test.cc
+++ b/runtime/vm/source_report_test.cc
@@ -339,7 +339,7 @@
 
       // One range compiled with one hit (helper0).
       "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":73,\"compiled\":true,"
-      "\"coverage\":{\"hits\":[0],\"misses\":[]}},"
+      "\"coverage\":{\"hits\":[0,56],\"misses\":[]}},"
 
       // One range not compiled (helper1).
       "{\"scriptIndex\":0,\"startPos\":75,\"endPos\":86,\"compiled\":false},"
@@ -402,7 +402,7 @@
 
       // One range compiled with one hit (helper0).
       "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":73,\"compiled\":true,"
-      "\"coverage\":{\"hits\":[0],\"misses\":[]}},"
+      "\"coverage\":{\"hits\":[0,56],\"misses\":[]}},"
 
       // Nested range compiled (nestedHelper0).
       "{\"scriptIndex\":0,\"startPos\":14,\"endPos\":31,\"compiled\":true,"
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 63ce112..ee81b99 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -109,6 +109,7 @@
   V(ExternalOneByteString, "_ExternalOneByteString")                           \
   V(ExternalTwoByteString, "_ExternalTwoByteString")                           \
   V(FallThroughError, "FallThroughError")                                      \
+  V(FfiBool, "Bool")                                                           \
   V(FfiCallback, "_FfiCallback")                                               \
   V(FfiDouble, "Double")                                                       \
   V(FfiDynamicLibrary, "DynamicLibrary")                                       \
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 8c41eee..78feea8 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -435,10 +435,7 @@
   if ((interrupt_bits & kVMInterrupt) != 0) {
     CheckForSafepoint();
     if (isolate_group()->store_buffer()->Overflowed()) {
-      if (FLAG_verbose_gc) {
-        OS::PrintErr("Scavenge scheduled by store buffer overflow.\n");
-      }
-      heap()->CollectGarbage(Heap::kNew);
+      heap()->CollectGarbage(GCType::kScavenge, GCReason::kStoreBuffer);
     }
 
 #if !defined(PRODUCT)
diff --git a/runtime/vm/thread_interrupter.cc b/runtime/vm/thread_interrupter.cc
index be990ab..978b428 100644
--- a/runtime/vm/thread_interrupter.cc
+++ b/runtime/vm/thread_interrupter.cc
@@ -66,15 +66,6 @@
 
 void ThreadInterrupter::Startup() {
   ASSERT(initialized_);
-  if (IsDebuggerAttached()) {
-    MonitorLocker shutdown_ml(monitor_);
-    shutdown_ = true;
-    if (FLAG_trace_thread_interrupter) {
-      OS::PrintErr(
-          "ThreadInterrupter disabled because a debugger is attached.\n");
-    }
-    return;
-  }
   if (FLAG_trace_thread_interrupter) {
     OS::PrintErr("ThreadInterrupter starting up.\n");
   }
diff --git a/runtime/vm/thread_interrupter.h b/runtime/vm/thread_interrupter.h
index c5d770e..8921ebe 100644
--- a/runtime/vm/thread_interrupter.h
+++ b/runtime/vm/thread_interrupter.h
@@ -102,8 +102,6 @@
   static std::atomic<intptr_t> sample_buffer_lock_;
   static std::atomic<intptr_t> sample_buffer_waiters_;
 
-  static bool IsDebuggerAttached();
-
   static bool InDeepSleep() {
     return current_wait_time_ == Monitor::kNoTimeout;
   }
diff --git a/runtime/vm/thread_interrupter_android.cc b/runtime/vm/thread_interrupter_android.cc
index dbdd331..2f8ed98 100644
--- a/runtime/vm/thread_interrupter_android.cc
+++ b/runtime/vm/thread_interrupter_android.cc
@@ -61,10 +61,6 @@
 #endif
 }  // namespace
 
-bool ThreadInterrupter::IsDebuggerAttached() {
-  return false;
-}
-
 void ThreadInterrupter::InterruptThread(OSThread* thread) {
   if (FLAG_trace_thread_interrupter) {
     OS::PrintErr("ThreadInterrupter interrupting %p\n",
diff --git a/runtime/vm/thread_interrupter_fuchsia.cc b/runtime/vm/thread_interrupter_fuchsia.cc
index b295569..235bbed 100644
--- a/runtime/vm/thread_interrupter_fuchsia.cc
+++ b/runtime/vm/thread_interrupter_fuchsia.cc
@@ -227,10 +227,6 @@
   }
 };
 
-bool ThreadInterrupter::IsDebuggerAttached() {
-  return false;
-}
-
 void ThreadInterrupter::InterruptThread(OSThread* thread) {
   if (FLAG_trace_thread_interrupter) {
     OS::PrintErr("ThreadInterrupter suspending %p\n",
diff --git a/runtime/vm/thread_interrupter_linux.cc b/runtime/vm/thread_interrupter_linux.cc
index ee623db..5d7661d 100644
--- a/runtime/vm/thread_interrupter_linux.cc
+++ b/runtime/vm/thread_interrupter_linux.cc
@@ -48,10 +48,6 @@
   }
 };
 
-bool ThreadInterrupter::IsDebuggerAttached() {
-  return false;
-}
-
 void ThreadInterrupter::InterruptThread(OSThread* thread) {
   if (FLAG_trace_thread_interrupter) {
     OS::PrintErr("ThreadInterrupter interrupting %p\n",
diff --git a/runtime/vm/thread_interrupter_macos.cc b/runtime/vm/thread_interrupter_macos.cc
index ba9ce5a..9676b53 100644
--- a/runtime/vm/thread_interrupter_macos.cc
+++ b/runtime/vm/thread_interrupter_macos.cc
@@ -5,12 +5,15 @@
 #include "platform/globals.h"
 #if defined(DART_HOST_OS_MACOS)
 
-#include <assert.h>      // NOLINT
-#include <errno.h>       // NOLINT
-#include <stdbool.h>     // NOLINT
-#include <sys/sysctl.h>  // NOLINT
-#include <sys/types.h>   // NOLINT
-#include <unistd.h>      // NOLINT
+#include <assert.h>            // NOLINT
+#include <errno.h>             // NOLINT
+#include <mach/kern_return.h>  // NOLINT
+#include <mach/mach.h>         // NOLINT
+#include <mach/thread_act.h>   // NOLINT
+#include <stdbool.h>           // NOLINT
+#include <sys/sysctl.h>        // NOLINT
+#include <sys/types.h>         // NOLINT
+#include <unistd.h>            // NOLINT
 
 #include "vm/flags.h"
 #include "vm/os.h"
@@ -24,70 +27,110 @@
 
 DECLARE_FLAG(bool, trace_thread_interrupter);
 
-// Returns true if the current process is being debugged (either
-// running under the debugger or has a debugger attached post facto).
-// Code from https://developer.apple.com/library/content/qa/qa1361/_index.html
-bool ThreadInterrupter::IsDebuggerAttached() {
-  struct kinfo_proc info;
-  // Initialize the flags so that, if sysctl fails for some bizarre
-  // reason, we get a predictable result.
-  info.kp_proc.p_flag = 0;
-  // Initialize mib, which tells sysctl the info we want, in this case
-  // we're looking for information about a specific process ID.
-  int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
-  size_t size = sizeof(info);
+#if defined(HOST_ARCH_X64)
+#define THREAD_STATE_FLAVOR x86_THREAD_STATE64
+#define THREAD_STATE_FLAVOR_SIZE x86_THREAD_STATE64_COUNT
+typedef x86_thread_state64_t thread_state_flavor_t;
+#elif defined(HOST_ARCH_ARM64)
+#define THREAD_STATE_FLAVOR ARM_THREAD_STATE64
+#define THREAD_STATE_FLAVOR_SIZE ARM_THREAD_STATE64_COUNT
+typedef arm_thread_state64_t thread_state_flavor_t;
+#elif defined(HOST_ARCH_ARM)
+#define THREAD_STATE_FLAVOR ARM_THREAD_STATE32
+#define THREAD_STATE_FLAVOR_SIZE ARM_THREAD_STATE32_COUNT
+typedef arm_thread_state32_t thread_state_flavor_t;
+#else
+#error "Unsupported architecture."
+#endif  // HOST_ARCH_...
 
-  // Call sysctl.
-  size = sizeof(info);
-  int junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
-  ASSERT(junk == 0);
-  // We're being debugged if the P_TRACED flag is set.
-  return ((info.kp_proc.p_flag & P_TRACED) != 0);
-}
-
-class ThreadInterrupterMacOS : public AllStatic {
+class ThreadInterrupterMacOS {
  public:
-  static void ThreadInterruptSignalHandler(int signal,
-                                           siginfo_t* info,
-                                           void* context_) {
-    if (signal != SIGPROF) {
-      return;
-    }
-    Thread* thread = Thread::Current();
-    if (thread == NULL) {
-      return;
-    }
-    ThreadInterrupter::SampleBufferWriterScope scope;
-    if (!scope.CanSample()) {
-      return;
-    }
-    // Extract thread state.
-    ucontext_t* context = reinterpret_cast<ucontext_t*>(context_);
-    mcontext_t mcontext = context->uc_mcontext;
-    InterruptedThreadState its;
-    its.pc = SignalHandler::GetProgramCounter(mcontext);
-    its.fp = SignalHandler::GetFramePointer(mcontext);
-    its.csp = SignalHandler::GetCStackPointer(mcontext);
-    its.dsp = SignalHandler::GetDartStackPointer(mcontext);
-    its.lr = SignalHandler::GetLinkRegister(mcontext);
-    Profiler::SampleThread(thread, its);
+  explicit ThreadInterrupterMacOS(OSThread* os_thread) : os_thread_(os_thread) {
+    ASSERT(os_thread != nullptr);
+    mach_thread_ = pthread_mach_thread_np(os_thread->id());
+    ASSERT(reinterpret_cast<void*>(mach_thread_) != nullptr);
+    res = thread_suspend(mach_thread_);
   }
+
+  void CollectSample() {
+    if (res != KERN_SUCCESS) {
+      return;
+    }
+    auto count = static_cast<mach_msg_type_number_t>(THREAD_STATE_FLAVOR_SIZE);
+    thread_state_flavor_t state;
+    kern_return_t res =
+        thread_get_state(mach_thread_, THREAD_STATE_FLAVOR,
+                         reinterpret_cast<thread_state_t>(&state), &count);
+    ASSERT(res == KERN_SUCCESS);
+    Thread* thread = static_cast<Thread*>(os_thread_->thread());
+    if (thread == nullptr) {
+      return;
+    }
+    Profiler::SampleThread(thread, ProcessState(state));
+  }
+
+  ~ThreadInterrupterMacOS() {
+    if (res != KERN_SUCCESS) {
+      return;
+    }
+    res = thread_resume(mach_thread_);
+    ASSERT(res == KERN_SUCCESS);
+  }
+
+ private:
+  static InterruptedThreadState ProcessState(thread_state_flavor_t state) {
+    InterruptedThreadState its;
+#if defined(HOST_ARCH_X64)
+    its.pc = state.__rip;
+    its.fp = state.__rbp;
+    its.csp = state.__rsp;
+    its.dsp = state.__rsp;
+    its.lr = 0;
+#elif defined(HOST_ARCH_ARM64)
+    its.pc = state.__pc;
+    its.fp = state.__fp;
+    its.csp = state.__sp;
+    its.dsp = state.__sp;
+    its.lr = state.__lr;
+#elif defined(HOST_ARCH_ARM)
+    its.pc = state.__pc;
+    its.fp = state.__r[7];
+    its.csp = state.__sp;
+    its.dsp = state.__sp;
+    its.lr = state.__lr;
+#endif  // HOST_ARCH_...
+
+#if defined(TARGET_ARCH_ARM64) && !defined(USING_SIMULATOR)
+    its.dsp = state.__x[SPREG];
+#endif
+    return its;
+  }
+
+  kern_return_t res;
+  OSThread* os_thread_;
+  mach_port_t mach_thread_;
 };
 
-void ThreadInterrupter::InterruptThread(OSThread* thread) {
+void ThreadInterrupter::InterruptThread(OSThread* os_thread) {
+  ASSERT(!OSThread::Compare(OSThread::GetCurrentThreadId(), os_thread->id()));
   if (FLAG_trace_thread_interrupter) {
-    OS::PrintErr("ThreadInterrupter interrupting %p\n", thread->id());
+    OS::PrintErr("ThreadInterrupter interrupting %p\n", os_thread->id());
   }
-  int result = pthread_kill(thread->id(), SIGPROF);
-  ASSERT((result == 0) || (result == ESRCH));
+
+  ThreadInterrupter::SampleBufferWriterScope scope;
+  if (!scope.CanSample()) {
+    return;
+  }
+  ThreadInterrupterMacOS interrupter(os_thread);
+  interrupter.CollectSample();
 }
 
 void ThreadInterrupter::InstallSignalHandler() {
-  SignalHandler::Install(&ThreadInterrupterMacOS::ThreadInterruptSignalHandler);
+  // Nothing to do on MacOS.
 }
 
 void ThreadInterrupter::RemoveSignalHandler() {
-  SignalHandler::Remove();
+  // Nothing to do on MacOS.
 }
 
 #endif  // !PRODUCT
diff --git a/runtime/vm/thread_interrupter_win.cc b/runtime/vm/thread_interrupter_win.cc
index bfbf5d1..3db5023 100644
--- a/runtime/vm/thread_interrupter_win.cc
+++ b/runtime/vm/thread_interrupter_win.cc
@@ -90,10 +90,6 @@
   }
 };
 
-bool ThreadInterrupter::IsDebuggerAttached() {
-  return false;
-}
-
 void ThreadInterrupter::InterruptThread(OSThread* thread) {
   if (FLAG_trace_thread_interrupter) {
     OS::PrintErr("ThreadInterrupter suspending %p\n",
diff --git a/runtime/vm/thread_state.cc b/runtime/vm/thread_state.cc
index 00deaf7..c3bae0c 100644
--- a/runtime/vm/thread_state.cc
+++ b/runtime/vm/thread_state.cc
@@ -9,21 +9,7 @@
 
 namespace dart {
 
-ThreadState::ThreadState(bool is_os_thread) : BaseThread(is_os_thread) {
-  // This thread should not yet own any zones. If it does, we need to make sure
-  // we've accounted for any memory it has already allocated.
-  if (zone_ == nullptr) {
-    ASSERT(current_zone_capacity_ == 0);
-  } else {
-    Zone* current = zone_;
-    uintptr_t total_zone_capacity = 0;
-    while (current != nullptr) {
-      total_zone_capacity += current->CapacityInBytes();
-      current = current->previous();
-    }
-    ASSERT(current_zone_capacity_ == total_zone_capacity);
-  }
-}
+ThreadState::ThreadState(bool is_os_thread) : BaseThread(is_os_thread) {}
 
 ThreadState::~ThreadState() {}
 
diff --git a/runtime/vm/thread_state.h b/runtime/vm/thread_state.h
index e83bc26..61c46c3 100644
--- a/runtime/vm/thread_state.h
+++ b/runtime/vm/thread_state.h
@@ -40,17 +40,6 @@
 
   bool ZoneIsOwnedByThread(Zone* zone) const;
 
-  void IncrementMemoryCapacity(uintptr_t value) {
-    current_zone_capacity_ += value;
-  }
-
-  void DecrementMemoryCapacity(uintptr_t value) {
-    ASSERT(current_zone_capacity_ >= value);
-    current_zone_capacity_ -= value;
-  }
-
-  uintptr_t current_zone_capacity() const { return current_zone_capacity_; }
-
   StackResource* top_resource() const { return top_resource_; }
   void set_top_resource(StackResource* value) { top_resource_ = value; }
   static intptr_t top_resource_offset() {
@@ -86,7 +75,6 @@
 
   OSThread* os_thread_ = nullptr;
   Zone* zone_ = nullptr;
-  uintptr_t current_zone_capacity_ = 0;
   StackResource* top_resource_ = nullptr;
   LongJumpScope* long_jump_base_ = nullptr;
 
diff --git a/runtime/vm/thread_test.cc b/runtime/vm/thread_test.cc
index 14171a6..5faa11b 100644
--- a/runtime/vm/thread_test.cc
+++ b/runtime/vm/thread_test.cc
@@ -121,7 +121,6 @@
       Thread* thread = Thread::Current();
       // Create a zone (which is also a stack resource) and exercise it a bit.
       StackZone stack_zone(thread);
-      HANDLESCOPE(thread);
       Zone* zone = thread->zone();
       EXPECT_EQ(zone, stack_zone.GetZone());
       ZoneGrowableArray<bool>* a0 = new (zone) ZoneGrowableArray<bool>(zone, 1);
@@ -255,7 +254,6 @@
     *thread_ptr_ = thread;
 
     StackZone stack_zone(thread);
-    HANDLESCOPE(thread);
     Zone* zone = thread->zone();
     EXPECT_EQ(zone, stack_zone.GetZone());
 
@@ -390,7 +388,6 @@
 
     {
       StackZone stack_zone(thread);
-      HANDLESCOPE(thread);
 
       ICData& ic_data = ICData::Handle();
       Array& arr = Array::Handle();
@@ -536,7 +533,6 @@
     for (int i = reinterpret_cast<intptr_t>(thread);; ++i) {
       StackZone stack_zone(thread);
       Zone* zone = thread->zone();
-      HANDLESCOPE(thread);
       const intptr_t kUniqueSmi = 928327281;
       Smi& smi = Smi::Handle(zone, Smi::New(kUniqueSmi));
       if ((i % 100) != 0) {
@@ -852,7 +848,6 @@
       Thread* thread = Thread::Current();
       StackZone stack_zone(thread);
       Zone* zone = stack_zone.GetZone();
-      HANDLESCOPE(thread);
       String& old_str = String::Handle(zone, String::New("old", Heap::kOld));
       isolate_->group()->heap()->CollectAllGarbage();
       EXPECT(old_str.Equals("old"));
@@ -900,7 +895,6 @@
       Thread* thread = Thread::Current();
       StackZone stack_zone(thread);
       Zone* zone = stack_zone.GetZone();
-      HANDLESCOPE(thread);
       int count = 100 * 1000;
       while (count-- > 0) {
         String::Handle(zone, String::New("abc"));
diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
index b6d1908..f4389ce 100644
--- a/runtime/vm/timeline.h
+++ b/runtime/vm/timeline.h
@@ -499,15 +499,10 @@
 
 #define TIMELINE_FUNCTION_GC_DURATION(thread, name)                            \
   TimelineBeginEndScope tbes(thread, Timeline::GetGCStream(), name);
-#define TIMELINE_FUNCTION_GC_DURATION_BASIC(thread, name)                      \
-  TIMELINE_FUNCTION_GC_DURATION(thread, name)                                  \
-  tbes.SetNumArguments(1);                                                     \
-  tbes.CopyArgument(0, "mode", "basic");
 #else
 #define TIMELINE_DURATION(thread, stream, name)
 #define TIMELINE_FUNCTION_COMPILATION_DURATION(thread, name, function)
 #define TIMELINE_FUNCTION_GC_DURATION(thread, name)
-#define TIMELINE_FUNCTION_GC_DURATION_BASIC(thread, name)
 #endif  // !PRODUCT
 
 // See |TimelineBeginEndScope|.
diff --git a/runtime/vm/timer.cc b/runtime/vm/timer.cc
index 4757a5e..894966f 100644
--- a/runtime/vm/timer.cc
+++ b/runtime/vm/timer.cc
@@ -5,5 +5,14 @@
 #include "vm/timer.h"
 #include "platform/globals.h"
 #include "vm/json_stream.h"
+#include "vm/thread.h"
 
-namespace dart {}  // namespace dart
+namespace dart {
+
+PrintTimeScope::~PrintTimeScope() {
+  timer_.Stop();
+  OS::PrintErr("%s %s\n", name_,
+               timer_.FormatElapsedHumanReadable(Thread::Current()->zone()));
+}
+
+}  // namespace dart
diff --git a/runtime/vm/timer.h b/runtime/vm/timer.h
index 8f478d5..19c11a7 100644
--- a/runtime/vm/timer.h
+++ b/runtime/vm/timer.h
@@ -198,6 +198,16 @@
   Timer* const timer_;
 };
 
+class PrintTimeScope : public ValueObject {
+ public:
+  explicit PrintTimeScope(const char* name) : name_(name) { timer_.Start(); }
+  ~PrintTimeScope();
+
+ private:
+  Timer timer_;
+  const char* name_;
+};
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_TIMER_H_
diff --git a/runtime/vm/type_testing_stubs.cc b/runtime/vm/type_testing_stubs.cc
index 5742615..6b1780f 100644
--- a/runtime/vm/type_testing_stubs.cc
+++ b/runtime/vm/type_testing_stubs.cc
@@ -996,18 +996,6 @@
   }
 }
 
-// src must contain a TypePtr. Assumes dst != src. May affect flags.
-static void LoadTypeClassId(compiler::Assembler* assembler,
-                            Register dst,
-                            Register src) {
-  ASSERT(src != dst);
-  __ EnsureHasClassIdInDEBUG(kTypeCid, src, dst);
-  __ LoadCompressedSmi(
-      dst, compiler::FieldAddress(
-               src, compiler::target::Type::type_class_id_offset()));
-  __ SmiUntag(dst);
-}
-
 void TypeTestingStubGenerator::BuildOptimizedTypeParameterArgumentValueCheck(
     compiler::Assembler* assembler,
     HierarchyInfo* hi,
@@ -1052,8 +1040,8 @@
   UnwrapAbstractType(assembler, TTSInternalRegs::kSuperTypeArgumentReg,
                      TTSInternalRegs::kScratchReg, /*is_type=*/nullptr,
                      &check_subtype_type_class_ids);
-  LoadTypeClassId(assembler, TTSInternalRegs::kScratchReg,
-                  TTSInternalRegs::kSuperTypeArgumentReg);
+  __ LoadTypeClassId(TTSInternalRegs::kScratchReg,
+                     TTSInternalRegs::kSuperTypeArgumentReg);
   __ CompareImmediate(TTSInternalRegs::kScratchReg, kDynamicCid);
   __ BranchIf(EQUAL, &is_subtype);
   __ CompareImmediate(TTSInternalRegs::kScratchReg, kVoidCid);
@@ -1090,8 +1078,8 @@
   UnwrapAbstractType(assembler, TTSInternalRegs::kSubTypeArgumentReg,
                      TTSInternalRegs::kScratchReg, /*is_type=*/nullptr,
                      check_failed);
-  LoadTypeClassId(assembler, TTSInternalRegs::kScratchReg,
-                  TTSInternalRegs::kSubTypeArgumentReg);
+  __ LoadTypeClassId(TTSInternalRegs::kScratchReg,
+                     TTSInternalRegs::kSubTypeArgumentReg);
   __ CompareImmediate(TTSInternalRegs::kScratchReg, kNeverCid);
   __ BranchIf(EQUAL, &is_subtype);
   __ CompareImmediate(TTSInternalRegs::kScratchReg, kNullCid);
@@ -1186,8 +1174,8 @@
 
   // No further checks needed for non-nullable object.
   if (!type.IsObjectType()) {
-    LoadTypeClassId(assembler, TTSInternalRegs::kScratchReg,
-                    TTSInternalRegs::kSubTypeArgumentReg);
+    __ LoadTypeClassId(TTSInternalRegs::kScratchReg,
+                       TTSInternalRegs::kSubTypeArgumentReg);
 
     const bool null_is_assignable = Instance::NullIsAssignableTo(type);
     // Check bottom types.
diff --git a/runtime/vm/v8_snapshot_writer.cc b/runtime/vm/v8_snapshot_writer.cc
index d886122..1a224df 100644
--- a/runtime/vm/v8_snapshot_writer.cc
+++ b/runtime/vm/v8_snapshot_writer.cc
@@ -42,7 +42,7 @@
   const intptr_t type_index = node_types_.Add(type);
   if (info->type != kInvalidString && info->type != type_index) {
     FATAL("Attempting to assign mismatching type %s to node %s", type,
-          info->ToCString(nullptr, zone_));
+          info->ToCString(this, zone_));
   }
   info->type = type_index;
   // Don't overwrite any existing name.
diff --git a/runtime/vm/version_in.cc b/runtime/vm/version_in.cc
index 4fe06a5..8596e4a 100644
--- a/runtime/vm/version_in.cc
+++ b/runtime/vm/version_in.cc
@@ -2,31 +2,14 @@
 // 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.
 
-#include "platform/atomic.h"
-
-#include "vm/cpu.h"
-#include "vm/os.h"
 #include "vm/version.h"
 
+#include "vm/globals.h"
+
 namespace dart {
 
-// We use acquire-release semantics to ensure initializing stores to the string
-// are visible when the string becomes visible.
-static AcqRelAtomic<const char*> formatted_version = nullptr;
-
 const char* Version::String() {
-  if (formatted_version.load() == nullptr) {
-    const char* os = OS::Name();
-    const char* arch = CPU::Id();
-    char* version_string =
-        OS::SCreate(nullptr, "%s on \"%s_%s\"", str_, os, arch);
-    const char* expect_old_is_null = nullptr;
-    if (!formatted_version.compare_exchange_strong(expect_old_is_null,
-                                                   version_string)) {
-      free(version_string);
-    }
-  }
-  return formatted_version.load();
+  return str_;
 }
 
 const char* Version::SnapshotString() {
@@ -42,7 +25,42 @@
 }
 
 const char* Version::snapshot_hash_ = "{{SNAPSHOT_HASH}}";
-const char* Version::str_ = "{{VERSION_STR}} ({{CHANNEL}}) ({{COMMIT_TIME}})";
+const char* Version::str_ =
+    "{{VERSION_STR}} ({{CHANNEL}}) ({{COMMIT_TIME}})"
+    " on \""
+#if defined(DART_HOST_OS_ANDROID)
+    "android"
+#elif defined(DART_HOST_OS_FUCHSIA)
+    "fuchsia"
+#elif defined(DART_HOST_OS_LINUX)
+    "linux"
+#elif defined(DART_HOST_OS_MACOS)
+#if DART_HOST_OS_IOS
+    "ios"
+#else
+    "macos"
+#endif
+#elif defined(DART_HOST_OS_WINDOWS)
+    "windows"
+#else
+#error Unknown OS
+#endif
+    "_"
+#if defined(USING_SIMULATOR)
+    "sim"
+#endif
+#if defined(TARGET_ARCH_IA32)
+    "ia32"
+#elif defined(TARGET_ARCH_X64)
+    "x64"
+#elif defined(TARGET_ARCH_ARM)
+    "arm"
+#elif defined(TARGET_ARCH_ARM64)
+    "arm64"
+#else
+#error Unknown arch
+#endif
+    "\"";
 const char* Version::commit_ = "{{VERSION_STR}}";
 const char* Version::git_short_hash_ = "{{GIT_HASH}}";
 
diff --git a/runtime/vm/virtual_memory.h b/runtime/vm/virtual_memory.h
index 883bc74..d25093c 100644
--- a/runtime/vm/virtual_memory.h
+++ b/runtime/vm/virtual_memory.h
@@ -46,6 +46,8 @@
   static void Protect(void* address, intptr_t size, Protection mode);
   void Protect(Protection mode) { return Protect(address(), size(), mode); }
 
+  static void DontNeed(void* address, intptr_t size);
+
   // Reserves and commits a virtual memory segment with size. If a segment of
   // the requested size cannot be allocated, NULL is returned.
   static VirtualMemory* Allocate(intptr_t size,
diff --git a/runtime/vm/virtual_memory_compressed.cc b/runtime/vm/virtual_memory_compressed.cc
index 2f39734..7706ea4 100644
--- a/runtime/vm/virtual_memory_compressed.cc
+++ b/runtime/vm/virtual_memory_compressed.cc
@@ -57,7 +57,7 @@
   // weaker property that all addresses in [base_, base_ + size_) have the same
   // same upper 32 bits, which is what we really need for compressed pointers.
   intptr_t mask = ~(kCompressedHeapAlignment - 1);
-  ASSERT((base_ & mask) == (base_ + size_ - 1 & mask));
+  ASSERT((base_ & mask) == ((base_ + size_ - 1) & mask));
   mutex_ = new Mutex(NOT_IN_PRODUCT("compressed_heap_mutex"));
 }
 
diff --git a/runtime/vm/virtual_memory_fuchsia.cc b/runtime/vm/virtual_memory_fuchsia.cc
index ee26123..149f379 100644
--- a/runtime/vm/virtual_memory_fuchsia.cc
+++ b/runtime/vm/virtual_memory_fuchsia.cc
@@ -299,6 +299,21 @@
   }
 }
 
+void VirtualMemory::DontNeed(void* address, intptr_t size) {
+  uword start_address = reinterpret_cast<uword>(address);
+  uword end_address = start_address + size;
+  uword page_address = Utils::RoundDown(start_address, PageSize());
+  zx_status_t status = zx_vmar_op_range(
+      getVmarForAddress(reinterpret_cast<uword>(address)), ZX_VMAR_OP_DONT_NEED,
+      page_address, end_address - page_address, nullptr, 0);
+  LOG_INFO("zx_vmar_op_range(DONTNEED, 0x%lx, 0x%lx)\n", page_address,
+           end_address - page_address);
+  if (status != ZX_OK) {
+    FATAL("zx_vmar_op_range(DONTNEED, 0x%lx, 0x%lx) failed: %s\n", page_address,
+          end_address - page_address, zx_status_get_string(status));
+  }
+}
+
 }  // namespace dart
 
 #endif  // defined(DART_HOST_OS_FUCHSIA)
diff --git a/runtime/vm/virtual_memory_posix.cc b/runtime/vm/virtual_memory_posix.cc
index 3191878..b2717df 100644
--- a/runtime/vm/virtual_memory_posix.cc
+++ b/runtime/vm/virtual_memory_posix.cc
@@ -560,6 +560,20 @@
            end_address - page_address, prot);
 }
 
+void VirtualMemory::DontNeed(void* address, intptr_t size) {
+  uword start_address = reinterpret_cast<uword>(address);
+  uword end_address = start_address + size;
+  uword page_address = Utils::RoundDown(start_address, PageSize());
+  if (madvise(reinterpret_cast<void*>(page_address), end_address - page_address,
+              MADV_DONTNEED) != 0) {
+    int error = errno;
+    const int kBufferSize = 1024;
+    char error_buf[kBufferSize];
+    FATAL("madvise error: %d (%s)", error,
+          Utils::StrError(error, error_buf, kBufferSize));
+  }
+}
+
 }  // namespace dart
 
 #endif  // defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_LINUX) ||     \
diff --git a/runtime/vm/virtual_memory_win.cc b/runtime/vm/virtual_memory_win.cc
index 013adf0..816ef0f 100644
--- a/runtime/vm/virtual_memory_win.cc
+++ b/runtime/vm/virtual_memory_win.cc
@@ -241,6 +241,8 @@
   }
 }
 
+void VirtualMemory::DontNeed(void* address, intptr_t size) {}
+
 }  // namespace dart
 
 #endif  // defined(DART_HOST_OS_WINDOWS)
diff --git a/runtime/vm/zone.cc b/runtime/vm/zone.cc
index 763617f..fc0fd8d 100644
--- a/runtime/vm/zone.cc
+++ b/runtime/vm/zone.cc
@@ -33,8 +33,6 @@
   // Allocate or delete individual segments.
   static Segment* New(intptr_t size, Segment* next);
   static void DeleteSegmentList(Segment* segment);
-  static void IncrementMemoryCapacity(uintptr_t size);
-  static void DecrementMemoryCapacity(uintptr_t size);
 
  private:
   Segment* next_;
@@ -107,7 +105,6 @@
 
   LSAN_REGISTER_ROOT_REGION(result, sizeof(*result));
 
-  IncrementMemoryCapacity(size);
   return result;
 }
 
@@ -115,7 +112,6 @@
   Segment* current = head;
   while (current != NULL) {
     intptr_t size = current->size();
-    DecrementMemoryCapacity(size);
     Segment* next = current->next();
     VirtualMemory* memory = current->memory();
 #ifdef DEBUG
@@ -141,38 +137,13 @@
   }
 }
 
-void Zone::Segment::IncrementMemoryCapacity(uintptr_t size) {
-  ThreadState* current_thread = ThreadState::Current();
-  if (current_thread != NULL) {
-    current_thread->IncrementMemoryCapacity(size);
-  } else if (ApiNativeScope::Current() != NULL) {
-    // If there is no current thread, we might be inside of a native scope.
-    ApiNativeScope::IncrementNativeScopeMemoryCapacity(size);
-  }
-}
-
-void Zone::Segment::DecrementMemoryCapacity(uintptr_t size) {
-  ThreadState* current_thread = ThreadState::Current();
-  if (current_thread != NULL) {
-    current_thread->DecrementMemoryCapacity(size);
-  } else if (ApiNativeScope::Current() != NULL) {
-    // If there is no current thread, we might be inside of a native scope.
-    ApiNativeScope::DecrementNativeScopeMemoryCapacity(size);
-  }
-}
-
-// TODO(bkonyi): We need to account for the initial chunk size when a new zone
-// is created within a new thread or ApiNativeScope when calculating high
-// watermarks or memory consumption.
 Zone::Zone()
     : position_(reinterpret_cast<uword>(&buffer_)),
       limit_(position_ + kInitialChunkSize),
-      head_(NULL),
-      large_segments_(NULL),
-      previous_(NULL),
+      segments_(nullptr),
+      previous_(nullptr),
       handles_() {
   ASSERT(Utils::IsAligned(position_, kAlignment));
-  Segment::IncrementMemoryCapacity(kInitialChunkSize);
 #ifdef DEBUG
   // Zap the entire initial buffer.
   memset(&buffer_, kZapUninitializedByte, kInitialChunkSize);
@@ -181,70 +152,57 @@
 
 Zone::~Zone() {
   if (FLAG_trace_zones) {
-    DumpZoneSizes();
+    Print();
   }
-  DeleteAll();
-  Segment::DecrementMemoryCapacity(kInitialChunkSize);
+  Segment::DeleteSegmentList(segments_);
 }
 
-void Zone::DeleteAll() {
+void Zone::Reset() {
   // Traverse the chained list of segments, zapping (in debug mode)
   // and freeing every zone segment.
-  if (head_ != NULL) {
-    Segment::DeleteSegmentList(head_);
-  }
-  if (large_segments_ != NULL) {
-    Segment::DeleteSegmentList(large_segments_);
-  }
-// Reset zone state.
+  Segment::DeleteSegmentList(segments_);
+  segments_ = nullptr;
+
 #ifdef DEBUG
   memset(&buffer_, kZapDeletedByte, kInitialChunkSize);
 #endif
   position_ = reinterpret_cast<uword>(&buffer_);
   limit_ = position_ + kInitialChunkSize;
+  size_ = 0;
   small_segment_capacity_ = 0;
-  head_ = NULL;
-  large_segments_ = NULL;
-  previous_ = NULL;
+  previous_ = nullptr;
   handles_.Reset();
 }
 
 uintptr_t Zone::SizeInBytes() const {
-  uintptr_t size = 0;
-  for (Segment* s = large_segments_; s != NULL; s = s->next()) {
-    size += s->size();
-  }
-  if (head_ == NULL) {
-    return size + (position_ - reinterpret_cast<uword>(&buffer_));
-  }
-  size += kInitialChunkSize;
-  for (Segment* s = head_->next(); s != NULL; s = s->next()) {
-    size += s->size();
-  }
-  return size + (position_ - head_->start());
+  return size_;
 }
 
 uintptr_t Zone::CapacityInBytes() const {
-  uintptr_t size = 0;
-  for (Segment* s = large_segments_; s != NULL; s = s->next()) {
-    size += s->size();
-  }
-  if (head_ == NULL) {
-    return size + kInitialChunkSize;
-  }
-  size += kInitialChunkSize;
-  for (Segment* s = head_; s != NULL; s = s->next()) {
+  uintptr_t size = kInitialChunkSize;
+  for (Segment* s = segments_; s != nullptr; s = s->next()) {
     size += s->size();
   }
   return size;
 }
 
+void Zone::Print() const {
+  intptr_t segment_size = CapacityInBytes();
+  intptr_t scoped_handle_size = handles_.ScopedHandlesCapacityInBytes();
+  intptr_t zone_handle_size = handles_.ZoneHandlesCapacityInBytes();
+  intptr_t total_size = segment_size + scoped_handle_size + zone_handle_size;
+  OS::PrintErr("Zone(%p, segments: %" Pd ", scoped_handles: %" Pd
+               ", zone_handles: %" Pd ", total: %" Pd ")\n",
+               this, segment_size, scoped_handle_size, zone_handle_size,
+               total_size);
+}
+
 uword Zone::AllocateExpand(intptr_t size) {
   ASSERT(size >= 0);
   if (FLAG_trace_zones) {
     OS::PrintErr("*** Expanding zone 0x%" Px "\n",
                  reinterpret_cast<intptr_t>(this));
-    DumpZoneSizes();
+    Print();
   }
   // Make sure the requested size is already properly aligned and that
   // there isn't enough room in the Zone to satisfy the request.
@@ -274,13 +232,14 @@
   ASSERT(next_size >= kSegmentSize);
 
   // Allocate another segment and chain it up.
-  head_ = Segment::New(next_size, head_);
+  segments_ = Segment::New(next_size, segments_);
   small_segment_capacity_ += next_size;
 
   // Recompute 'position' and 'limit' based on the new head segment.
-  uword result = Utils::RoundUp(head_->start(), kAlignment);
+  uword result = Utils::RoundUp(segments_->start(), kAlignment);
   position_ = result + size;
-  limit_ = head_->end();
+  limit_ = segments_->end();
+  size_ += size;
   ASSERT(position_ <= limit_);
   return result;
 }
@@ -295,10 +254,11 @@
 
   // Create a new large segment and chain it up.
   // Account for book keeping fields in size.
+  size_ += size;
   size += Utils::RoundUp(sizeof(Segment), kAlignment);
-  large_segments_ = Segment::New(size, large_segments_);
+  segments_ = Segment::New(size, segments_);
 
-  uword result = Utils::RoundUp(large_segments_->start(), kAlignment);
+  uword result = Utils::RoundUp(segments_->start(), kAlignment);
   return result;
 }
 
@@ -337,17 +297,6 @@
   return copy;
 }
 
-void Zone::DumpZoneSizes() {
-  intptr_t size = 0;
-  for (Segment* s = large_segments_; s != NULL; s = s->next()) {
-    size += s->size();
-  }
-  OS::PrintErr("***   Zone(0x%" Px
-               ") size in bytes,"
-               " Total = %" Pd " Large Segments = %" Pd "\n",
-               reinterpret_cast<intptr_t>(this), SizeInBytes(), size);
-}
-
 void Zone::VisitObjectPointers(ObjectPointerVisitor* visitor) {
   Zone* zone = this;
   while (zone != NULL) {
diff --git a/runtime/vm/zone.h b/runtime/vm/zone.h
index b30f446..5156751 100644
--- a/runtime/vm/zone.h
+++ b/runtime/vm/zone.h
@@ -60,13 +60,15 @@
   char* PrintToString(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
   char* VPrint(const char* format, va_list args);
 
-  // Compute the total size of this zone. This includes wasted space that is
-  // due to internal fragmentation in the segments.
+  // Compute the total size of allocations in this zone.
   uintptr_t SizeInBytes() const;
 
-  // Computes the amount of space used in the zone.
+  // Computes the amount of space used by the zone.
   uintptr_t CapacityInBytes() const;
 
+  // Dump the current allocated sizes in the zone object.
+  void Print() const;
+
   // Structure for managing handles allocation.
   VMHandles* handles() { return &handles_; }
 
@@ -95,7 +97,7 @@
   ~Zone();  // Delete all memory associated with the zone.
 
   // Default initial chunk size.
-  static const intptr_t kInitialChunkSize = 1 * KB;
+  static const intptr_t kInitialChunkSize = 128;
 
   // Default segment size.
   static const intptr_t kSegmentSize = 64 * KB;
@@ -119,7 +121,7 @@
   void Link(Zone* current_zone) { previous_ = current_zone; }
 
   // Delete all objects and free all memory allocated in the zone.
-  void DeleteAll();
+  void Reset();
 
   // Does not actually free any memory. Enables templated containers like
   // BaseGrowableArray to use different allocators.
@@ -134,9 +136,6 @@
 #endif
   }
 
-  // Dump the current allocated sizes in the zone object.
-  void DumpZoneSizes();
-
   // Overflow check (FATAL) for array length.
   template <class ElementType>
   static inline void CheckLength(intptr_t len);
@@ -152,14 +151,14 @@
   // implementation is in zone.cc.
   class Segment;
 
+  // Total size of all allocations in this zone.
+  intptr_t size_ = 0;
+
   // Total size of all segments in [head_].
   intptr_t small_segment_capacity_ = 0;
 
-  // The current head segment; may be NULL.
-  Segment* head_;
-
-  // List of large segments allocated in this zone; may be NULL.
-  Segment* large_segments_;
+  // List of all segments allocated in this zone; may be NULL.
+  Segment* segments_;
 
   // Used for chaining zones in order to allow unwinding of stacks.
   Zone* previous_;
@@ -243,6 +242,7 @@
   if (free_size >= size) {
     result = position_;
     position_ += size;
+    size_ += size;
   } else {
     result = AllocateExpand(size);
   }
@@ -284,6 +284,7 @@
       if (new_end <= limit_) {
         ASSERT(new_len >= old_len);
         position_ = Utils::RoundUp(new_end, kAlignment);
+        size_ += (new_end - old_end);
         return old_data;
       }
     }
diff --git a/runtime/vm/zone_test.cc b/runtime/vm/zone_test.cc
index 2f691a9..9231cda 100644
--- a/runtime/vm/zone_test.cc
+++ b/runtime/vm/zone_test.cc
@@ -165,21 +165,6 @@
   EXPECT_STREQ("Hello World!", result);
 }
 
-VM_UNIT_TEST_CASE(NativeScopeZoneAllocation) {
-  ASSERT(ApiNativeScope::Current() == NULL);
-  ASSERT(Thread::Current() == NULL);
-  EXPECT_EQ(0UL, ApiNativeScope::current_memory_usage());
-  {
-    ApiNativeScope scope;
-    EXPECT_EQ(scope.zone()->CapacityInBytes(),
-              ApiNativeScope::current_memory_usage());
-    (void)Dart_ScopeAllocate(2048);
-    EXPECT_EQ(scope.zone()->CapacityInBytes(),
-              ApiNativeScope::current_memory_usage());
-  }
-  EXPECT_EQ(0UL, ApiNativeScope::current_memory_usage());
-}
-
 #if !defined(PRODUCT)
 // Allow for pooling in the malloc implementation.
 static const int64_t kRssSlack = 20 * MB;
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index a505d5c..2b4fa76 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -36,7 +36,6 @@
 # ......dart.lib (import library for VM native extensions on Windows)
 # ......dartaotruntime or dartaotruntime.exe (executable)
 # ......dartdoc
-# ......dartfmt
 # ......dart2js
 # ......dartanalyzer
 # ......dartdevc
@@ -50,7 +49,6 @@
 # ........dartdev.dill
 # ........dartdevc.dart.snapshot
 # ........dartdoc.dart.snapshot
-# ........dartfmt.dart.snapshot
 # ........dds.dart.snapshot
 # ........frontend_server.dart.snapshot
 # ........gen_kernel.dart.snapshot (if not on ia32)
@@ -70,9 +68,9 @@
 # ......_internal/
 # ........strong.sum
 # ........dart2js_platform.dill
+# ........dart2js_platform_unsound.dill
 # ........dart2js_server_platform.dill
-# ........dart2js_platform_strong.dill
-# ........dart2js_server_platform_strong.dill
+# ........dart2js_server_platform_unsound.dill
 # ........vm_platform_strong.dill
 # ........dev_compiler/
 # ......async/
@@ -94,7 +92,6 @@
 # Scripts that go under bin/
 _platform_sdk_scripts = [
   "dartanalyzer",
-  "dartfmt",
   "pub",
 ]
 
@@ -102,7 +99,6 @@
   "dart2js",
   "dartanalyzer",
   "dartdevc",
-  "dartfmt",
   "pub",
 ]
 
@@ -128,10 +124,6 @@
     "../utils/dartdoc",
   ],
   [
-    "dartfmt",
-    "../utils/dartfmt",
-  ],
-  [
     "dds",
     "../utils/dds:dds",
   ],
@@ -521,16 +513,16 @@
   visibility = [ ":create_full_sdk" ]
   deps = [
     ":copy_libraries",
-    "../utils/compiler:compile_dart2js_nnbd_strong_platform",
     "../utils/compiler:compile_dart2js_platform",
-    "../utils/compiler:compile_dart2js_server_nnbd_strong_platform",
+    "../utils/compiler:compile_dart2js_platform_unsound",
     "../utils/compiler:compile_dart2js_server_platform",
+    "../utils/compiler:compile_dart2js_server_platform_unsound",
   ]
   sources = [
-    "$root_out_dir/dart2js_nnbd_strong_platform.dill",
     "$root_out_dir/dart2js_platform.dill",
-    "$root_out_dir/dart2js_server_nnbd_strong_platform.dill",
+    "$root_out_dir/dart2js_platform_unsound.dill",
     "$root_out_dir/dart2js_server_platform.dill",
+    "$root_out_dir/dart2js_server_platform_unsound.dill",
   ]
   outputs =
       [ "$root_out_dir/$dart_sdk_output/lib/_internal/{{source_file_part}}" ]
diff --git a/sdk/bin/dartfmt b/sdk/bin/dartfmt
deleted file mode 100755
index 442833d..0000000
--- a/sdk/bin/dartfmt
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) 2013, 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.
-
-# Run dart_style/bin/format.dart on the Dart VM. This script assumes the Dart
-# repo's directory structure.
-
-echo "Warning: 'dartfmt' is deprecated. Please use 'dart format'." 1>&2
-echo "(See https://github.com/dart-lang/dart_style/wiki/CLI-Changes.)" 1>&2
-
-function follow_links() {
-  file="$1"
-  while [ -h "$file" ]; do
-    # On Mac OS, readlink -f doesn't work.
-    file="$(readlink "$file")"
-  done
-  echo "$file"
-}
-
-# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
-PROG_NAME="$(follow_links "$BASH_SOURCE")"
-
-# Handle the case where dart-sdk/bin has been symlinked to.
-BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
-
-DART="$BIN_DIR/dart"
-
-DART_ROOT="$(cd "${SDK_DIR}/.." ; pwd -P)"
-
-DARTFMT="$DART_ROOT/third_party/pkg_tested/dart_style/bin/format.dart"
-
-exec "$DART" "--packages=$DART_ROOT/.packages" "$DARTFMT" "$@"
diff --git a/sdk/bin/dartfmt.bat b/sdk/bin/dartfmt.bat
deleted file mode 100644
index b3aceb0..0000000
--- a/sdk/bin/dartfmt.bat
+++ /dev/null
@@ -1,60 +0,0 @@
-@echo off
-REM Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-REM for details. All rights reserved. Use of this source code is governed by a
-REM BSD-style license that can be found in the LICENSE file.
-
-echo Warning: 'dartfmt' is deprecated. Please use 'dart format'. 1>&2
-echo (See https://github.com/dart-lang/dart_style/wiki/CLI-Changes.) 1>&2
-
-setlocal
-rem Handle the case where dart-sdk/bin has been symlinked to.
-set DIR_NAME_WITH_SLASH=%~dp0
-set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%%
-call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR
-rem Get rid of surrounding quotes.
-for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
-
-set DART=%BIN_DIR%\dart
-
-rem Get absolute full name for SDK_DIR.
-for %%i in ("%BIN_DIR%\..\") do set SDK_DIR=%%~fi
-
-rem Remove trailing backslash if there is one
-if %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
-
-rem Get absolute full name for DART_ROOT.
-for %%i in ("%SDK_DIR%\..\") do set DART_ROOT=%%~fi
-
-rem Remove trailing backslash if there is one
-if %DART_ROOT:~-1%==\ set DART_ROOT=%DART_ROOT:~0,-1%
-
-set DARTFMT=%DART_ROOT%\third_party\pkg_tested\dart_style\bin\format.dart
-
-"%DART%" "--packages=%DART_ROOT%\.packages" "%DARTFMT%" %*
-
-endlocal
-
-exit /b %errorlevel%
-
-rem Follow the symbolic links (junctions points) using `dir to determine the
-rem canonical path. Output with a link looks something like this
-rem
-rem 01/03/2013  10:11 PM    <JUNCTION>     abc def
-rem [c:\dart_bleeding\dart-repo.9\dart\out\ReleaseIA32\dart-sdk]
-rem
-rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename
-rem surrounded by right angle bracket and left square bracket. Once we get
-rem the filename, which is name of the link, we recursively follow that.
-:follow_links
-setlocal
-for %%i in (%1) do set result=%%~fi
-set current=
-for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
-                                             ^| %SystemRoot%\System32\find.exe ">     %~n1 [" 2^>nul`) do (
-  set current=%%i
-)
-if not "%current%"=="" call :follow_links "%current%", result
-endlocal & set %~2=%result%
-goto :eof
-
-:end
diff --git a/sdk/bin/dartfmt_sdk b/sdk/bin/dartfmt_sdk
deleted file mode 100755
index 255fb43..0000000
--- a/sdk/bin/dartfmt_sdk
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) 2015, 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.
-
-# Run dart_style/bin/format.dart on the Dart VM. This script assumes the Dart
-# SDK's directory structure.
-
-echo "Warning: 'dartfmt' is deprecated. Please use 'dart format'." 1>&2
-echo "(See https://github.com/dart-lang/dart_style/wiki/CLI-Changes.)" 1>&2
-
-function follow_links() {
-  file="$1"
-  while [ -h "$file" ]; do
-    # On Mac OS, readlink -f doesn't work.
-    file="$(readlink "$file")"
-  done
-  echo "$file"
-}
-
-# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
-PROG_NAME="$(follow_links "$BASH_SOURCE")"
-
-# Handle the case where dart-sdk/bin has been symlinked to.
-BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
-
-SNAPSHOT="$BIN_DIR/snapshots/dartfmt.dart.snapshot"
-
-# We are running the snapshot in the built SDK.
-DART="$BIN_DIR/dart"
-exec "$DART" "$SNAPSHOT" "$@"
diff --git a/sdk/bin/dartfmt_sdk.bat b/sdk/bin/dartfmt_sdk.bat
deleted file mode 100644
index 7b64864..0000000
--- a/sdk/bin/dartfmt_sdk.bat
+++ /dev/null
@@ -1,47 +0,0 @@
-@echo off
-REM Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-REM for details. All rights reserved. Use of this source code is governed by a
-REM BSD-style license that can be found in the LICENSE file.
-
-echo Warning: 'dartfmt' is deprecated. Please use 'dart format'. 1>&2
-echo (See https://github.com/dart-lang/dart_style/wiki/CLI-Changes.) 1>&2
-
-setlocal
-rem Handle the case where dart-sdk/bin has been symlinked to.
-set DIR_NAME_WITH_SLASH=%~dp0
-set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%%
-call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR
-rem Get rid of surrounding quotes.
-for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
-
-set DART=%BIN_DIR%\dart
-set SNAPSHOT=%BIN_DIR%\snapshots\dartfmt.dart.snapshot
-
-"%DART%" "%SNAPSHOT%" %*
-
-endlocal
-
-exit /b %errorlevel%
-
-rem Follow the symbolic links (junctions points) using `dir to determine the
-rem canonical path. Output with a link looks something like this
-rem
-rem 01/03/2013  10:11 PM    <JUNCTION>     abc def
-rem [c:\dart_bleeding\dart-repo.9\dart\out\ReleaseIA32\dart-sdk]
-rem
-rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename
-rem surrounded by right angle bracket and left square bracket. Once we get
-rem the filename, which is name of the link, we recursively follow that.
-:follow_links
-setlocal
-for %%i in (%1) do set result=%%~fi
-set current=
-for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
-                                             ^| %SystemRoot%\System32\find.exe ">     %~n1 ["`) do (
-  set current=%%i
-)
-if not "%current%"=="" call :follow_links "%current%", result
-endlocal & set %~2=%result%
-goto :eof
-
-:end
diff --git a/sdk/lib/_http/crypto.dart b/sdk/lib/_http/crypto.dart
index f29a15b..39ca5a8 100644
--- a/sdk/lib/_http/crypto.dart
+++ b/sdk/lib/_http/crypto.dart
@@ -5,168 +5,21 @@
 part of dart._http;
 
 class _CryptoUtils {
-  static const int PAD = 61; // '='
-  static const int CR = 13; // '\r'
-  static const int LF = 10; // '\n'
-  static const int LINE_LENGTH = 76;
-
-  static const String _encodeTable =
-      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-  static const String _encodeTableUrlSafe =
-      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
-
-  // Lookup table used for finding Base 64 alphabet index of a given byte.
-  // -2 : Outside Base 64 alphabet.
-  // -1 : '\r' or '\n'
-  //  0 : = (Padding character).
-  // >0 : Base 64 alphabet index of given byte.
-  static const List<int> _decodeTable = const [
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -2, -2, -1, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 62, -2, 62, -2, 63, //
-    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -2, -2, -2, 00, -2, -2, //
-    -2, 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, //
-    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -2, -2, -2, -2, 63, //
-    -2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, //
-    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -2, -2, -2, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, //
-    -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2
-  ];
-
-  static Random _rng = new Random.secure();
-
   static Uint8List getRandomBytes(int count) {
-    final Uint8List result = new Uint8List(count);
+    final Uint8List result = Uint8List(count);
     for (int i = 0; i < count; i++) {
-      result[i] = _rng.nextInt(0xff);
+      result[i] = Random.secure().nextInt(0xff);
     }
     return result;
   }
 
   static String bytesToHex(List<int> bytes) {
-    var result = new StringBuffer();
+    var result = StringBuffer();
     for (var part in bytes) {
       result.write('${part < 16 ? '0' : ''}${part.toRadixString(16)}');
     }
     return result.toString();
   }
-
-  static String bytesToBase64(List<int> bytes,
-      [bool urlSafe = false, bool addLineSeparator = false]) {
-    int len = bytes.length;
-    if (len == 0) {
-      return "";
-    }
-    final String lookup = urlSafe ? _encodeTableUrlSafe : _encodeTable;
-    // Size of 24 bit chunks.
-    final int remainderLength = len.remainder(3) as int;
-    final int chunkLength = len - remainderLength;
-    // Size of base output.
-    int outputLen = ((len ~/ 3) * 4) + ((remainderLength > 0) ? 4 : 0);
-    // Add extra for line separators.
-    if (addLineSeparator) {
-      outputLen += ((outputLen - 1) ~/ LINE_LENGTH) << 1;
-    }
-    List<int> out = new List<int>.filled(outputLen, 0);
-
-    // Encode 24 bit chunks.
-    int j = 0, i = 0, c = 0;
-    while (i < chunkLength) {
-      int x = ((bytes[i++] << 16) & 0xFFFFFF) |
-          ((bytes[i++] << 8) & 0xFFFFFF) |
-          bytes[i++];
-      out[j++] = lookup.codeUnitAt(x >> 18);
-      out[j++] = lookup.codeUnitAt((x >> 12) & 0x3F);
-      out[j++] = lookup.codeUnitAt((x >> 6) & 0x3F);
-      out[j++] = lookup.codeUnitAt(x & 0x3f);
-      // Add optional line separator for each 76 char output.
-      if (addLineSeparator && ++c == 19 && j < outputLen - 2) {
-        out[j++] = CR;
-        out[j++] = LF;
-        c = 0;
-      }
-    }
-
-    // If input length if not a multiple of 3, encode remaining bytes and
-    // add padding.
-    if (remainderLength == 1) {
-      int x = bytes[i];
-      out[j++] = lookup.codeUnitAt(x >> 2);
-      out[j++] = lookup.codeUnitAt((x << 4) & 0x3F);
-      out[j++] = PAD;
-      out[j++] = PAD;
-    } else if (remainderLength == 2) {
-      int x = bytes[i];
-      int y = bytes[i + 1];
-      out[j++] = lookup.codeUnitAt(x >> 2);
-      out[j++] = lookup.codeUnitAt(((x << 4) | (y >> 4)) & 0x3F);
-      out[j++] = lookup.codeUnitAt((y << 2) & 0x3F);
-      out[j++] = PAD;
-    }
-
-    return new String.fromCharCodes(out);
-  }
-
-  static List<int> base64StringToBytes(String input,
-      [bool ignoreInvalidCharacters = true]) {
-    int len = input.length;
-    if (len == 0) {
-      return new List<int>.empty();
-    }
-
-    // Count '\r', '\n' and illegal characters, For illegal characters,
-    // if [ignoreInvalidCharacters] is false, throw an exception.
-    int extrasLen = 0;
-    for (int i = 0; i < len; i++) {
-      int c = _decodeTable[input.codeUnitAt(i)];
-      if (c < 0) {
-        extrasLen++;
-        if (c == -2 && !ignoreInvalidCharacters) {
-          throw new FormatException('Invalid character: ${input[i]}');
-        }
-      }
-    }
-
-    if ((len - extrasLen) % 4 != 0) {
-      throw new FormatException('''Size of Base 64 characters in Input
-          must be a multiple of 4. Input: $input''');
-    }
-
-    // Count pad characters, ignore illegal characters at the end.
-    int padLength = 0;
-    for (int i = len - 1; i >= 0; i--) {
-      int currentCodeUnit = input.codeUnitAt(i);
-      if (_decodeTable[currentCodeUnit] > 0) break;
-      if (currentCodeUnit == PAD) padLength++;
-    }
-    int outputLen = (((len - extrasLen) * 6) >> 3) - padLength;
-    List<int> out = new List<int>.filled(outputLen, 0);
-
-    for (int i = 0, o = 0; o < outputLen;) {
-      // Accumulate 4 valid 6 bit Base 64 characters into an int.
-      int x = 0;
-      for (int j = 4; j > 0;) {
-        int c = _decodeTable[input.codeUnitAt(i++)];
-        if (c >= 0) {
-          x = ((x << 6) & 0xFFFFFF) | c;
-          j--;
-        }
-      }
-      out[o++] = x >> 16;
-      if (o < outputLen) {
-        out[o++] = (x >> 8) & 0xFF;
-        if (o < outputLen) out[o++] = x & 0xFF;
-      }
-    }
-    return out;
-  }
 }
 
 // Constants.
@@ -183,20 +36,19 @@
   final bool _bigEndianWords;
   int _lengthInBytes = 0;
   List<int> _pendingData;
-  List<int> _currentChunk;
-  List<int> _h;
+  final Uint32List _currentChunk;
+  final Uint32List _h;
   bool _digestCalled = false;
 
   _HashBase(this._chunkSizeInWords, int digestSizeInWords, this._bigEndianWords)
       : _pendingData = [],
-        _currentChunk = new List.filled(_chunkSizeInWords, 0),
-        _h = new List.filled(digestSizeInWords, 0);
+        _currentChunk = Uint32List(_chunkSizeInWords),
+        _h = Uint32List(digestSizeInWords);
 
   // Update the hasher with more data.
-  add(List<int> data) {
+  void add(List<int> data) {
     if (_digestCalled) {
-      throw new StateError(
-          'Hash update method called after digest was retrieved');
+      throw StateError('Hash update method called after digest was retrieved');
     }
     _lengthInBytes += data.length;
     _pendingData.addAll(data);
@@ -211,7 +63,7 @@
     _digestCalled = true;
     _finalizeData();
     _iterate();
-    assert(_pendingData.length == 0);
+    assert(_pendingData.isEmpty);
     return _resultAsBytes();
   }
 
@@ -220,15 +72,12 @@
     return _chunkSizeInWords * _BYTES_PER_WORD;
   }
 
-  // Create a fresh instance of this Hash.
-  newInstance();
-
   // One round of the hash computation.
-  _updateHash(List<int> m);
+  _updateHash(Uint32List m);
 
   // Helper methods.
-  _add32(x, y) => (x + y) & _MASK_32;
-  _roundUp(val, n) => (val + n - 1) & -n;
+  int _add32(int x, int y) => (x + y) & _MASK_32;
+  int _roundUp(int val, int n) => (val + n - 1) & -n;
 
   // Rotate left limiting to unsigned 32-bit values.
   int _rotl32(int val, int shift) {
@@ -247,7 +96,7 @@
   }
 
   // Converts a list of bytes to a chunk of 32-bit words.
-  _bytesToChunk(List<int> data, int dataIndex) {
+  void _bytesToChunk(List<int> data, int dataIndex) {
     assert((data.length - dataIndex) >= (_chunkSizeInWords * _BYTES_PER_WORD));
 
     for (var wordIndex = 0; wordIndex < _chunkSizeInWords; wordIndex++) {
@@ -266,7 +115,7 @@
 
   // Convert a 32-bit word to four bytes.
   List<int> _wordToBytes(int word) {
-    List<int> bytes = new List.filled(_BYTES_PER_WORD, 0);
+    List<int> bytes = List.filled(_BYTES_PER_WORD, 0);
     bytes[0] = (word >> (_bigEndianWords ? 24 : 0)) & _MASK_8;
     bytes[1] = (word >> (_bigEndianWords ? 16 : 8)) & _MASK_8;
     bytes[2] = (word >> (_bigEndianWords ? 8 : 16)) & _MASK_8;
@@ -276,7 +125,7 @@
 
   // Iterate through data updating the hash computation for each
   // chunk.
-  _iterate() {
+  void _iterate() {
     var len = _pendingData.length;
     var chunkSizeInBytes = _chunkSizeInWords * _BYTES_PER_WORD;
     if (len >= chunkSizeInBytes) {
@@ -291,7 +140,7 @@
 
   // Finalize the data. Add a 1 bit to the end of the message. Expand with
   // 0 bits and add the length of the message.
-  _finalizeData() {
+  void _finalizeData() {
     _pendingData.add(0x80);
     var contentsLength = _lengthInBytes + 9;
     var chunkSizeInBytes = _chunkSizeInWords * _BYTES_PER_WORD;
@@ -321,12 +170,7 @@
     _h[3] = 0x10325476;
   }
 
-  // Returns a new instance of this Hash.
-  _MD5 newInstance() {
-    return new _MD5();
-  }
-
-  static const _k = const [
+  static const _k = [
     0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, //
     0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, //
     0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, 0xf61e2562, 0xc040b340, //
@@ -340,7 +184,7 @@
     0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
   ];
 
-  static const _r = const [
+  static const _r = [
     7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, //
     20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, //
     16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, //
@@ -349,7 +193,7 @@
 
   // Compute one iteration of the MD5 algorithm with a chunk of
   // 16 32-bit pieces.
-  void _updateHash(List<int> m) {
+  void _updateHash(Uint32List m) {
     assert(m.length == 16);
 
     var a = _h[0];
@@ -357,8 +201,8 @@
     var c = _h[2];
     var d = _h[3];
 
-    var t0;
-    var t1;
+    int t0;
+    int t1;
 
     for (var i = 0; i < 64; i++) {
       if (i < 16) {
@@ -392,7 +236,7 @@
 
 // The SHA1 hasher is used to compute an SHA1 message digest.
 class _SHA1 extends _HashBase {
-  List<int> _w;
+  final List<int> _w;
 
   // Construct a SHA1 hasher object.
   _SHA1()
@@ -405,14 +249,9 @@
     _h[4] = 0xC3D2E1F0;
   }
 
-  // Returns a new instance of this Hash.
-  _SHA1 newInstance() {
-    return new _SHA1();
-  }
-
   // Compute one iteration of the SHA1 algorithm with a chunk of
   // 16 32-bit pieces.
-  void _updateHash(List<int> m) {
+  void _updateHash(Uint32List m) {
     assert(m.length == 16);
 
     var a = _h[0];
diff --git a/sdk/lib/_http/http.dart b/sdk/lib/_http/http.dart
index b7b1f50..b63102a 100644
--- a/sdk/lib/_http/http.dart
+++ b/sdk/lib/_http/http.dart
@@ -4,23 +4,22 @@
 
 library dart._http;
 
+import 'dart:_internal'
+    show Since, valueOfNonNullableParamWithDefault, HttpStatus;
 import 'dart:async';
 import 'dart:collection'
     show
         HashMap,
         HashSet,
-        Queue,
         ListQueue,
         LinkedList,
         LinkedListEntry,
         UnmodifiableMapView;
 import 'dart:convert';
 import 'dart:developer' hide log;
-import 'dart:_internal'
-    show Since, valueOfNonNullableParamWithDefault, HttpStatus;
+import 'dart:io';
 import 'dart:isolate' show Isolate;
 import 'dart:math';
-import 'dart:io';
 import 'dart:typed_data';
 
 part 'crypto.dart';
@@ -34,240 +33,195 @@
 part 'websocket.dart';
 part 'websocket_impl.dart';
 
-/**
- * A server that delivers content, such as web pages, using the HTTP protocol.
- *
- * The HttpServer is a [Stream] that provides [HttpRequest] objects. Each
- * HttpRequest has an associated [HttpResponse] object.
- * The server responds to a request by writing to that HttpResponse object.
- * The following example shows how to bind an HttpServer to an IPv6
- * [InternetAddress] on port 80 (the standard port for HTTP servers)
- * and how to listen for requests.
- * Port 80 is the default HTTP port. However, on most systems accessing
- * this requires super-user privileges. For local testing consider
- * using a non-reserved port (1024 and above).
- *
- *     import 'dart:io';
- *
- *     main() {
- *       HttpServer
- *           .bind(InternetAddress.anyIPv6, 80)
- *           .then((server) {
- *             server.listen((HttpRequest request) {
- *               request.response.write('Hello, world!');
- *               request.response.close();
- *             });
- *           });
- *     }
- *
- * Incomplete requests, in which all or part of the header is missing, are
- * ignored, and no exceptions or HttpRequest objects are generated for them.
- * Likewise, when writing to an HttpResponse, any [Socket] exceptions are
- * ignored and any future writes are ignored.
- *
- * The HttpRequest exposes the request headers and provides the request body,
- * if it exists, as a Stream of data. If the body is unread, it is drained
- * when the server writes to the HttpResponse or closes it.
- *
- * ## Bind with a secure HTTPS connection
- *
- * Use [bindSecure] to create an HTTPS server.
- *
- * The server presents a certificate to the client. The certificate
- * chain and the private key are set in the [SecurityContext]
- * object that is passed to [bindSecure].
- *
- *     import 'dart:io';
- *     import "dart:isolate";
- *
- *     main() {
- *       SecurityContext context = new SecurityContext();
- *       var chain =
- *           Platform.script.resolve('certificates/server_chain.pem')
- *           .toFilePath();
- *       var key =
- *           Platform.script.resolve('certificates/server_key.pem')
- *           .toFilePath();
- *       context.useCertificateChain(chain);
- *       context.usePrivateKey(key, password: 'dartdart');
- *
- *       HttpServer
- *           .bindSecure(InternetAddress.anyIPv6,
- *                       443,
- *                       context)
- *           .then((server) {
- *             server.listen((HttpRequest request) {
- *               request.response.write('Hello, world!');
- *               request.response.close();
- *             });
- *           });
- *     }
- *
- *  The certificates and keys are PEM files, which can be created and
- *  managed with the tools in OpenSSL.
- *
- * ## Connect to a server socket
- *
- * You can use the [listenOn] constructor to attach an HTTP server to
- * a [ServerSocket].
- *
- *     import 'dart:io';
- *
- *     main() {
- *       ServerSocket.bind(InternetAddress.anyIPv6, 80)
- *         .then((serverSocket) {
- *           HttpServer httpserver = new HttpServer.listenOn(serverSocket);
- *           serverSocket.listen((Socket socket) {
- *             socket.write('Hello, client.');
- *           });
- *         });
- *     }
- *
- * ## Other resources
- *
- * * HttpServer is a Stream. Refer to the [Stream] class for information
- * about the streaming qualities of an HttpServer.
- * Pausing the subscription of the stream, pauses at the OS level.
- *
- * * The [shelf](https://pub.dev/packages/shelf)
- * package on pub.dev contains a set of high-level classes that,
- * together with this class, makes it easy to provide content through HTTP
- * servers.
- */
+/// A server that delivers content, such as web pages, using the HTTP protocol.
+///
+/// Note: [HttpServer] provides low-level HTTP functionality.
+/// We recommend users evaluate the high-level APIs discussed at
+/// [Write HTTP servers](https://dart.dev/tutorials/server/httpserver) on
+/// [dart.dev](https://dart.dev/).
+///
+/// `HttpServer` is a [Stream] that provides [HttpRequest] objects. Each
+/// `HttpRequest` has an associated [HttpResponse] object.
+/// The server responds to a request by writing to that [HttpResponse] object.
+/// The following example shows how to bind an `HttpServer` to an IPv6
+/// [InternetAddress] on port 80 (the standard port for HTTP servers)
+/// and how to listen for requests.
+/// Port 80 is the default HTTP port. However, on most systems accessing
+/// this requires super-user privileges. For local testing consider
+/// using a non-reserved port (1024 and above).
+///
+/// ```dart
+/// import 'dart:io';
+///
+/// Future<void> main() async {
+///   var server = await HttpServer.bind(InternetAddress.anyIPv6, 80);
+///   await server.forEach((HttpRequest request) {
+///     request.response.write('Hello, world!');
+///     request.response.close();
+///   });
+/// }
+/// ```
+///
+/// Incomplete requests, in which all or part of the header is missing, are
+/// ignored, and no exceptions or [HttpRequest] objects are generated for them.
+/// Likewise, when writing to an [HttpResponse], any [Socket] exceptions are
+/// ignored and any future writes are ignored.
+///
+/// The [HttpRequest] exposes the request headers and provides the request body,
+/// if it exists, as a Stream of data. If the body is unread, it is drained
+/// when the server writes to the HttpResponse or closes it.
+///
+/// ## Bind with a secure HTTPS connection
+///
+/// Use [bindSecure] to create an HTTPS server.
+///
+/// The server presents a certificate to the client. The certificate
+/// chain and the private key are set in the [SecurityContext]
+/// object that is passed to [bindSecure].
+///
+/// ```dart
+/// import 'dart:io';
+///
+/// Future<void> main() async {
+///   var chain =
+///       Platform.script.resolve('certificates/server_chain.pem').toFilePath();
+///   var key = Platform.script.resolve('certificates/server_key.pem').toFilePath();
+///   var context = SecurityContext()
+///     ..useCertificateChain(chain)
+///     ..usePrivateKey(key, password: 'dartdart');
+///   var server =
+///       await HttpServer.bindSecure(InternetAddress.anyIPv6, 443, context);
+///   await server.forEach((HttpRequest request) {
+///     request.response.write('Hello, world!');
+///     request.response.close();
+///   });
+/// }
+/// ```
+///
+/// The certificates and keys are PEM files, which can be created and
+/// managed with the tools in OpenSSL.
 abstract class HttpServer implements Stream<HttpRequest> {
-  /**
-   * Gets and sets the default value of the `Server` header for all responses
-   * generated by this [HttpServer].
-   *
-   * If [serverHeader] is `null`, no `Server` header will be added to each
-   * response.
-   *
-   * The default value is `null`.
-   */
+  /// Gets and sets the default value of the `Server` header for all responses
+  /// generated by this [HttpServer].
+  ///
+  /// If [serverHeader] is `null`, no `Server` header will be added to each
+  /// response.
+  ///
+  /// The default value is `null`.
   String? serverHeader;
 
-  /**
-   * Default set of headers added to all response objects.
-   *
-   * By default the following headers are in this set:
-   *
-   *     Content-Type: text/plain; charset=utf-8
-   *     X-Frame-Options: SAMEORIGIN
-   *     X-Content-Type-Options: nosniff
-   *     X-XSS-Protection: 1; mode=block
-   *
-   * If the `Server` header is added here and the `serverHeader` is set as
-   * well then the value of `serverHeader` takes precedence.
-   */
+  /// Default set of headers added to all response objects.
+  ///
+  /// By default the following headers are in this set:
+  ///
+  ///     Content-Type: text/plain; charset=utf-8
+  ///     X-Frame-Options: SAMEORIGIN
+  ///     X-Content-Type-Options: nosniff
+  ///     X-XSS-Protection: 1; mode=block
+  ///
+  /// If the `Server` header is added here and the `serverHeader` is set as
+  /// well then the value of `serverHeader` takes precedence.
   HttpHeaders get defaultResponseHeaders;
 
-  /**
-   * Whether the [HttpServer] should compress the content, if possible.
-   *
-   * The content can only be compressed when the response is using
-   * chunked Transfer-Encoding and the incoming request has `gzip`
-   * as an accepted encoding in the Accept-Encoding header.
-   *
-   * The default value is `false` (compression disabled).
-   * To enable, set `autoCompress` to `true`.
-   */
+  /// Whether the [HttpServer] should compress the content, if possible.
+  ///
+  /// The content can only be compressed when the response is using
+  /// chunked Transfer-Encoding and the incoming request has `gzip`
+  /// as an accepted encoding in the Accept-Encoding header.
+  ///
+  /// The default value is `false` (compression disabled).
+  /// To enable, set `autoCompress` to `true`.
   bool autoCompress = false;
 
-  /**
-   * Gets or sets the timeout used for idle keep-alive connections. If no
-   * further request is seen within [idleTimeout] after the previous request was
-   * completed, the connection is dropped.
-   *
-   * Default is 120 seconds.
-   *
-   * Note that it may take up to `2 * idleTimeout` before a idle connection is
-   * aborted.
-   *
-   * To disable, set [idleTimeout] to `null`.
-   */
+  /// Gets or sets the timeout used for idle keep-alive connections. If no
+  /// further request is seen within [idleTimeout] after the previous request was
+  /// completed, the connection is dropped.
+  ///
+  /// Default is 120 seconds.
+  ///
+  /// Note that it may take up to `2 * idleTimeout` before a idle connection is
+  /// aborted.
+  ///
+  /// To disable, set [idleTimeout] to `null`.
   Duration? idleTimeout = const Duration(seconds: 120);
 
-  /**
-   * Starts listening for HTTP requests on the specified [address] and
-   * [port].
-   *
-   * The [address] can either be a [String] or an
-   * [InternetAddress]. If [address] is a [String], [bind] will
-   * perform a [InternetAddress.lookup] and use the first value in the
-   * list. To listen on the loopback adapter, which will allow only
-   * incoming connections from the local host, use the value
-   * [InternetAddress.loopbackIPv4] or
-   * [InternetAddress.loopbackIPv6]. To allow for incoming
-   * connection from the network use either one of the values
-   * [InternetAddress.anyIPv4] or [InternetAddress.anyIPv6] to
-   * bind to all interfaces or the IP address of a specific interface.
-   *
-   * If an IP version 6 (IPv6) address is used, both IP version 6
-   * (IPv6) and version 4 (IPv4) connections will be accepted. To
-   * restrict this to version 6 (IPv6) only, use [v6Only] to set
-   * version 6 only. However, if the address is
-   * [InternetAddress.loopbackIPv6], only IP version 6 (IPv6) connections
-   * will be accepted.
-   *
-   * If [port] has the value 0 an ephemeral port will be chosen by
-   * the system. The actual port used can be retrieved using the
-   * [port] getter.
-   *
-   * The optional argument [backlog] can be used to specify the listen
-   * backlog for the underlying OS listen setup. If [backlog] has the
-   * value of 0 (the default) a reasonable value will be chosen by
-   * the system.
-   *
-   * The optional argument [shared] specifies whether additional HttpServer
-   * objects can bind to the same combination of `address`, `port` and `v6Only`.
-   * If `shared` is `true` and more `HttpServer`s from this isolate or other
-   * isolates are bound to the port, then the incoming connections will be
-   * distributed among all the bound `HttpServer`s. Connections can be
-   * distributed over multiple isolates this way.
-   */
+  /// Starts listening for HTTP requests on the specified [address] and
+  /// [port].
+  ///
+  /// The [address] can either be a [String] or an
+  /// [InternetAddress]. If [address] is a [String], [bind] will
+  /// perform a [InternetAddress.lookup] and use the first value in the
+  /// list. To listen on the loopback adapter, which will allow only
+  /// incoming connections from the local host, use the value
+  /// [InternetAddress.loopbackIPv4] or
+  /// [InternetAddress.loopbackIPv6]. To allow for incoming
+  /// connection from the network use either one of the values
+  /// [InternetAddress.anyIPv4] or [InternetAddress.anyIPv6] to
+  /// bind to all interfaces or the IP address of a specific interface.
+  ///
+  /// If an IP version 6 (IPv6) address is used, both IP version 6
+  /// (IPv6) and version 4 (IPv4) connections will be accepted. To
+  /// restrict this to version 6 (IPv6) only, use [v6Only] to set
+  /// version 6 only. However, if the address is
+  /// [InternetAddress.loopbackIPv6], only IP version 6 (IPv6) connections
+  /// will be accepted.
+  ///
+  /// If [port] has the value 0 an ephemeral port will be chosen by
+  /// the system. The actual port used can be retrieved using the
+  /// [port] getter.
+  ///
+  /// The optional argument [backlog] can be used to specify the listen
+  /// backlog for the underlying OS listen setup. If [backlog] has the
+  /// value of 0 (the default) a reasonable value will be chosen by
+  /// the system.
+  ///
+  /// The optional argument [shared] specifies whether additional `HttpServer`
+  /// objects can bind to the same combination of `address`, `port` and `v6Only`.
+  /// If `shared` is `true` and more `HttpServer`s from this isolate or other
+  /// isolates are bound to the port, then the incoming connections will be
+  /// distributed among all the bound `HttpServer`s. Connections can be
+  /// distributed over multiple isolates this way.
   static Future<HttpServer> bind(address, int port,
           {int backlog = 0, bool v6Only = false, bool shared = false}) =>
       _HttpServer.bind(address, port, backlog, v6Only, shared);
 
-  /**
-   * The [address] can either be a [String] or an
-   * [InternetAddress]. If [address] is a [String], [bind] will
-   * perform a [InternetAddress.lookup] and use the first value in the
-   * list. To listen on the loopback adapter, which will allow only
-   * incoming connections from the local host, use the value
-   * [InternetAddress.loopbackIPv4] or
-   * [InternetAddress.loopbackIPv6]. To allow for incoming
-   * connection from the network use either one of the values
-   * [InternetAddress.anyIPv4] or [InternetAddress.anyIPv6] to
-   * bind to all interfaces or the IP address of a specific interface.
-   *
-   * If an IP version 6 (IPv6) address is used, both IP version 6
-   * (IPv6) and version 4 (IPv4) connections will be accepted. To
-   * restrict this to version 6 (IPv6) only, use [v6Only] to set
-   * version 6 only.
-   *
-   * If [port] has the value 0 an ephemeral port will be chosen by
-   * the system. The actual port used can be retrieved using the
-   * [port] getter.
-   *
-   * The optional argument [backlog] can be used to specify the listen
-   * backlog for the underlying OS listen setup. If [backlog] has the
-   * value of 0 (the default) a reasonable value will be chosen by
-   * the system.
-   *
-   * If [requestClientCertificate] is true, the server will
-   * request clients to authenticate with a client certificate.
-   * The server will advertise the names of trusted issuers of client
-   * certificates, getting them from a [SecurityContext], where they have been
-   * set using [SecurityContext.setClientAuthorities].
-   *
-   * The optional argument [shared] specifies whether additional HttpServer
-   * objects can bind to the same combination of `address`, `port` and `v6Only`.
-   * If `shared` is `true` and more `HttpServer`s from this isolate or other
-   * isolates are bound to the port, then the incoming connections will be
-   * distributed among all the bound `HttpServer`s. Connections can be
-   * distributed over multiple isolates this way.
-   */
+  /// The [address] can either be a [String] or an
+  /// [InternetAddress]. If [address] is a [String], [bind] will
+  /// perform a [InternetAddress.lookup] and use the first value in the
+  /// list. To listen on the loopback adapter, which will allow only
+  /// incoming connections from the local host, use the value
+  /// [InternetAddress.loopbackIPv4] or
+  /// [InternetAddress.loopbackIPv6]. To allow for incoming
+  /// connection from the network use either one of the values
+  /// [InternetAddress.anyIPv4] or [InternetAddress.anyIPv6] to
+  /// bind to all interfaces or the IP address of a specific interface.
+  ///
+  /// If an IP version 6 (IPv6) address is used, both IP version 6
+  /// (IPv6) and version 4 (IPv4) connections will be accepted. To
+  /// restrict this to version 6 (IPv6) only, use [v6Only] to set
+  /// version 6 only.
+  ///
+  /// If [port] has the value 0 an ephemeral port will be chosen by
+  /// the system. The actual port used can be retrieved using the
+  /// [port] getter.
+  ///
+  /// The optional argument [backlog] can be used to specify the listen
+  /// backlog for the underlying OS listen setup. If [backlog] has the
+  /// value of 0 (the default) a reasonable value will be chosen by
+  /// the system.
+  ///
+  /// If [requestClientCertificate] is true, the server will
+  /// request clients to authenticate with a client certificate.
+  /// The server will advertise the names of trusted issuers of client
+  /// certificates, getting them from a [SecurityContext], where they have been
+  /// set using [SecurityContext.setClientAuthorities].
+  ///
+  /// The optional argument [shared] specifies whether additional `HttpServer`
+  /// objects can bind to the same combination of `address`, `port` and `v6Only`.
+  /// If `shared` is `true` and more `HttpServer`s from this isolate or other
+  /// isolates are bound to the port, then the incoming connections will be
+  /// distributed among all the bound `HttpServer`s. Connections can be
+  /// distributed over multiple isolates this way.
 
   static Future<HttpServer> bindSecure(
           address, int port, SecurityContext context,
@@ -278,113 +232,89 @@
       _HttpServer.bindSecure(address, port, context, backlog, v6Only,
           requestClientCertificate, shared);
 
-  /**
-   * Attaches the HTTP server to an existing [ServerSocket]. When the
-   * [HttpServer] is closed, the [HttpServer] will just detach itself,
-   * closing current connections but not closing [serverSocket].
-   */
+  /// Attaches the HTTP server to an existing [ServerSocket]. When the
+  /// [HttpServer] is closed, the [HttpServer] will just detach itself,
+  /// closing current connections but not closing [serverSocket].
   factory HttpServer.listenOn(ServerSocket serverSocket) =>
-      new _HttpServer.listenOn(serverSocket);
+      _HttpServer.listenOn(serverSocket);
 
-  /**
-   * Permanently stops this [HttpServer] from listening for new
-   * connections.  This closes the [Stream] of [HttpRequest]s with a
-   * done event. The returned future completes when the server is
-   * stopped. For a server started using [bind] or [bindSecure] this
-   * means that the port listened on no longer in use.
-   *
-   * If [force] is `true`, active connections will be closed immediately.
-   */
+  /// Permanently stops this [HttpServer] from listening for new
+  /// connections.  This closes the [Stream] of [HttpRequest]s with a
+  /// done event. The returned future completes when the server is
+  /// stopped. For a server started using [bind] or [bindSecure] this
+  /// means that the port listened on no longer in use.
+  ///
+  /// If [force] is `true`, active connections will be closed immediately.
   Future close({bool force = false});
 
-  /**
-   * The port that the server is listening on.
-   *
-   * This is the actual port used when a port of zero is
-   * specified in the [bind] or [bindSecure] call.
-   */
+  /// The port that the server is listening on.
+  ///
+  /// This is the actual port used when a port of zero is
+  /// specified in the [bind] or [bindSecure] call.
   int get port;
 
-  /**
-   * The address that the server is listening on.
-   *
-   * This is the actual address used when the original address
-   * was specified as a hostname.
-   */
+  /// The address that the server is listening on.
+  ///
+  /// This is the actual address used when the original address
+  /// was specified as a hostname.
   InternetAddress get address;
 
-  /**
-   * Sets the timeout, in seconds, for sessions of this [HttpServer].
-   *
-   * The default timeout is 20 minutes.
-   */
+  /// Sets the timeout, in seconds, for sessions of this [HttpServer].
+  ///
+  /// The default timeout is 20 minutes.
   set sessionTimeout(int timeout);
 
-  /**
-   * A [HttpConnectionsInfo] object summarizing the number of
-   * current connections handled by the server.
-   */
+  /// A [HttpConnectionsInfo] object summarizing the number of
+  /// current connections handled by the server.
   HttpConnectionsInfo connectionsInfo();
 }
 
-/**
- * Summary statistics about an [HttpServer]s current socket connections.
- */
+/// Summary statistics about an [HttpServer]s current socket connections.
 class HttpConnectionsInfo {
-  /**
-   * Total number of socket connections.
-   */
+  /// Total number of socket connections.
   int total = 0;
 
-  /**
-   * Number of active connections where actual request/response
-   * processing is active.
-   */
+  /// Number of active connections where actual request/response
+  /// processing is active.
   int active = 0;
 
-  /**
-   * Number of idle connections held by clients as persistent connections.
-   */
+  /// Number of idle connections held by clients as persistent connections.
   int idle = 0;
 
-  /**
-   * Number of connections which are preparing to close.
-   *
-   * Note: These connections are also part of the [active] count as they might
-   * still be sending data to the client before finally closing.
-   */
+  /// Number of connections which are preparing to close.
+  ///
+  /// Note: These connections are also part of the [active] count as they might
+  /// still be sending data to the client before finally closing.
   int closing = 0;
 }
 
-/**
- * Headers for HTTP requests and responses.
- *
- * In some situations, headers are immutable:
- *
- * * [HttpRequest] and [HttpClientResponse] always have immutable headers.
- *
- * * [HttpResponse] and [HttpClientRequest] have immutable headers
- *   from the moment the body is written to.
- *
- * In these situations, the mutating methods throw exceptions.
- *
- * For all operations on HTTP headers the header name is
- * case-insensitive.
- *
- * To set the value of a header use the `set()` method:
- *
- *     request.headers.set(HttpHeaders.cacheControlHeader,
- *                         'max-age=3600, must-revalidate');
- *
- * To retrieve the value of a header use the `value()` method:
- *
- *     print(request.headers.value(HttpHeaders.userAgentHeader));
- *
- * An `HttpHeaders` object holds a list of values for each name
- * as the standard allows. In most cases a name holds only a single value,
- * The most common mode of operation is to use `set()` for setting a value,
- * and `value()` for retrieving a value.
- */
+/// Headers for HTTP requests and responses.
+///
+/// In some situations, headers are immutable:
+///
+/// * [HttpRequest] and [HttpClientResponse] always have immutable headers.
+///
+/// * [HttpResponse] and [HttpClientRequest] have immutable headers
+///   from the moment the body is written to.
+///
+/// In these situations, the mutating methods throw exceptions.
+///
+/// For all operations on HTTP headers the header name is
+/// case-insensitive.
+///
+/// To set the value of a header use the `set()` method:
+///
+///     request.headers.set(HttpHeaders.cacheControlHeader,
+///                         'max-age=3600, must-revalidate');
+///
+/// To retrieve the value of a header use the `value()` method:
+///
+///     print(request.headers.value(HttpHeaders.userAgentHeader));
+///
+/// An `HttpHeaders` object holds a list of values for each name
+/// as the standard allows. In most cases a name holds only a single value,
+/// The most common mode of operation is to use `set()` for setting a value,
+/// and `value()` for retrieving a value.
 abstract class HttpHeaders {
   static const acceptHeader = "accept";
   static const acceptCharsetHeader = "accept-charset";
@@ -559,7 +489,7 @@
   static const SET_COOKIE = setCookieHeader;
 
   // TODO(39783): Document this.
-  static const generalHeaders = const [
+  static const generalHeaders = [
     cacheControlHeader,
     connectionHeader,
     dateHeader,
@@ -574,7 +504,7 @@
   @Deprecated("Use generalHeaders instead")
   static const GENERAL_HEADERS = generalHeaders;
 
-  static const entityHeaders = const [
+  static const entityHeaders = [
     allowHeader,
     contentEncodingHeader,
     contentLanguageHeader,
@@ -590,7 +520,7 @@
   @Deprecated("Use entityHeaders instead")
   static const ENTITY_HEADERS = entityHeaders;
 
-  static const responseHeaders = const [
+  static const responseHeaders = [
     acceptRangesHeader,
     ageHeader,
     etagHeader,
@@ -605,7 +535,7 @@
   @Deprecated("Use responseHeaders instead")
   static const RESPONSE_HEADERS = responseHeaders;
 
-  static const requestHeaders = const [
+  static const requestHeaders = [
     acceptHeader,
     acceptCharsetHeader,
     acceptEncodingHeader,
@@ -630,207 +560,165 @@
   @Deprecated("Use requestHeaders instead")
   static const REQUEST_HEADERS = requestHeaders;
 
-  /**
-   * The date specified by the [dateHeader] header, if any.
-   */
+  /// The date specified by the [dateHeader] header, if any.
   DateTime? date;
 
-  /**
-   * The date and time specified by the [expiresHeader] header, if any.
-   */
+  /// The date and time specified by the [expiresHeader] header, if any.
   DateTime? expires;
 
-  /**
-   * The date and time specified by the [ifModifiedSinceHeader] header, if any.
-   */
+  /// The date and time specified by the [ifModifiedSinceHeader] header, if any.
   DateTime? ifModifiedSince;
 
-  /**
-   * The value of the [hostHeader] header, if any.
-   */
+  /// The value of the [hostHeader] header, if any.
   String? host;
 
-  /**
-   * The value of the port part of the [hostHeader] header, if any.
-   */
+  /// The value of the port part of the [hostHeader] header, if any.
   int? port;
 
-  /**
-   * The [ContentType] of the [contentTypeHeader] header, if any.
-   */
+  /// The [ContentType] of the [contentTypeHeader] header, if any.
   ContentType? contentType;
 
-  /**
-   * The value of the [contentLengthHeader] header, if any.
-   *
-   * The value is negative if there is no content length set.
-   */
+  /// The value of the [contentLengthHeader] header, if any.
+  ///
+  /// The value is negative if there is no content length set.
   int contentLength = -1;
 
-  /**
-   * Whether the connection is persistent (keep-alive).
-   */
+  /// Whether the connection is persistent (keep-alive).
   late bool persistentConnection;
 
-  /**
-   * Whether the connection uses chunked transfer encoding.
-   *
-   * Reflects and modifies the value of the [transferEncodingHeader] header.
-   */
+  /// Whether the connection uses chunked transfer encoding.
+  ///
+  /// Reflects and modifies the value of the [transferEncodingHeader] header.
   late bool chunkedTransferEncoding;
 
-  /**
-   * The values for the header named [name].
-   *
-   * Returns null if there is no header with the provided name,
-   * otherwise returns a new list containing the current values.
-   * Not that modifying the list does not change the header.
-   */
+  /// The values for the header named [name].
+  ///
+  /// Returns null if there is no header with the provided name,
+  /// otherwise returns a new list containing the current values.
+  /// Not that modifying the list does not change the header.
   List<String>? operator [](String name);
 
-  /**
-   * Convenience method for the value for a single valued header.
-   *
-   * The value must not have more than one value.
-   *
-   * Returns `null` if there is no header with the provided name.
-   */
+  /// Convenience method for the value for a single valued header.
+  ///
+  /// The value must not have more than one value.
+  ///
+  /// Returns `null` if there is no header with the provided name.
   String? value(String name);
 
-  /**
-   * Adds a header value.
-   *
-   * The header named [name] will have a string value derived from [value]
-   * added to its list of values.
-   *
-   * Some headers are single valued, and for these, adding a value will
-   * replace a previous value. If the [value] is a [DateTime], an
-   * HTTP date format will be applied. If the value is an [Iterable],
-   * each element will be added separately. For all other
-   * types the default [Object.toString] method will be used.
-   *
-   * Header names are converted to lower-case unless
-   * [preserveHeaderCase] is set to true. If two header names are
-   * the same when converted to lower-case, they are considered to be
-   * the same header, with one set of values.
-   *
-   * The current case of the a header name is that of the name used by
-   * the last [set] or [add] call for that header.
-   */
+  /// Adds a header value.
+  ///
+  /// The header named [name] will have a string value derived from [value]
+  /// added to its list of values.
+  ///
+  /// Some headers are single valued, and for these, adding a value will
+  /// replace a previous value. If the [value] is a [DateTime], an
+  /// HTTP date format will be applied. If the value is an [Iterable],
+  /// each element will be added separately. For all other
+  /// types the default [Object.toString] method will be used.
+  ///
+  /// Header names are converted to lower-case unless
+  /// [preserveHeaderCase] is set to true. If two header names are
+  /// the same when converted to lower-case, they are considered to be
+  /// the same header, with one set of values.
+  ///
+  /// The current case of the a header name is that of the name used by
+  /// the last [set] or [add] call for that header.
   void add(String name, Object value,
       {@Since("2.8") bool preserveHeaderCase = false});
 
-  /**
-   * Sets the header [name] to [value].
-   *
-   * Removes all existing values for the header named [name] and
-   * then [add]s [value] to it.
-   */
+  /// Sets the header [name] to [value].
+  ///
+  /// Removes all existing values for the header named [name] and
+  /// then [add]s [value] to it.
   void set(String name, Object value,
       {@Since("2.8") bool preserveHeaderCase = false});
 
-  /**
-   * Removes a specific value for a header name.
-   *
-   * Some headers have system supplied values which cannot be removed.
-   * For all other headers and values, the [value] is converted to a string
-   * in the same way as for [add], then that string value is removed from the
-   * current values of [name].
-   * If there are no remaining values for [name], the header is no longer
-   * considered present.
-   */
+  /// Removes a specific value for a header name.
+  ///
+  /// Some headers have system supplied values which cannot be removed.
+  /// For all other headers and values, the [value] is converted to a string
+  /// in the same way as for [add], then that string value is removed from the
+  /// current values of [name].
+  /// If there are no remaining values for [name], the header is no longer
+  /// considered present.
   void remove(String name, Object value);
 
-  /**
-   * Removes all values for the specified header name.
-   *
-   * Some headers have system supplied values which cannot be removed.
-   * All other values for [name] are removed.
-   * If there are no remaining values for [name], the header is no longer
-   * considered present.
-   */
+  /// Removes all values for the specified header name.
+  ///
+  /// Some headers have system supplied values which cannot be removed.
+  /// All other values for [name] are removed.
+  /// If there are no remaining values for [name], the header is no longer
+  /// considered present.
   void removeAll(String name);
 
-  /**
-   * Performs the [action] on each header.
-   *
-   * The [action] function is called with each header's name and a list
-   * of the header's values. The casing of the name string is determined by
-   * the last [add] or [set] operation for that particular header,
-   * which defaults to lower-casing the header name unless explicitly
-   * set to preserve the case.
-   */
-  void forEach(void action(String name, List<String> values));
+  /// Performs the [action] on each header.
+  ///
+  /// The [action] function is called with each header's name and a list
+  /// of the header's values. The casing of the name string is determined by
+  /// the last [add] or [set] operation for that particular header,
+  /// which defaults to lower-casing the header name unless explicitly
+  /// set to preserve the case.
+  void forEach(void Function(String name, List<String> values) action);
 
-  /**
-   * Disables folding for the header named [name] when sending the HTTP header.
-   *
-   * By default, multiple header values are folded into a
-   * single header line by separating the values with commas.
-   *
-   * The 'set-cookie' header has folding disabled by default.
-   */
+  /// Disables folding for the header named [name] when sending the HTTP header.
+  ///
+  /// By default, multiple header values are folded into a
+  /// single header line by separating the values with commas.
+  ///
+  /// The 'set-cookie' header has folding disabled by default.
   void noFolding(String name);
 
-  /**
-   * Removes all headers.
-   *
-   * Some headers have system supplied values which cannot be removed.
-   * All other header values are removed, and header names with not
-   * remaining values are no longer considered present.
-   */
+  /// Removes all headers.
+  ///
+  /// Some headers have system supplied values which cannot be removed.
+  /// All other header values are removed, and header names with not
+  /// remaining values are no longer considered present.
   void clear();
 }
 
-/**
- * Representation of a header value in the form:
- * ```plaintext
- * value; parameter1=value1; parameter2=value2
- * ```
- *
- * [HeaderValue] can be used to conveniently build and parse header
- * values on this form.
- *
- * Parameter values can be omitted, in which case the value is parsed as `null`.
- * Values can be doubled quoted to allow characters outside of the RFC 7230
- * token characters and backslash sequences can be used to represent the double
- * quote and backslash characters themselves.
- *
- * To build an "accepts" header with the value
- *
- *     text/plain; q=0.3, text/html
- *
- * use code like this:
- *
- *     HttpClientRequest request = ...;
- *     var v = new HeaderValue("text/plain", {"q": "0.3"});
- *     request.headers.add(HttpHeaders.acceptHeader, v);
- *     request.headers.add(HttpHeaders.acceptHeader, "text/html");
- *
- * To parse the header values use the [parse] static method.
- *
- *     HttpRequest request = ...;
- *     List<String> values = request.headers[HttpHeaders.acceptHeader];
- *     values.forEach((value) {
- *       HeaderValue v = HeaderValue.parse(value);
- *       // Use v.value and v.parameters
- *     });
- *
- * An instance of [HeaderValue] is immutable.
- */
+/// Representation of a header value in the form:
+/// ```plaintext
+/// value; parameter1=value1; parameter2=value2
+/// ```
+///
+/// [HeaderValue] can be used to conveniently build and parse header
+/// values on this form.
+///
+/// Parameter values can be omitted, in which case the value is parsed as `null`.
+/// Values can be doubled quoted to allow characters outside of the RFC 7230
+/// token characters and backslash sequences can be used to represent the double
+/// quote and backslash characters themselves.
+///
+/// To build an "accepts" header with the value
+///
+///     text/plain; q=0.3, text/html
+///
+/// use code like this:
+///
+///     HttpClientRequest request = ...;
+///     var v = HeaderValue("text/plain", {"q": "0.3"});
+///     request.headers.add(HttpHeaders.acceptHeader, v);
+///     request.headers.add(HttpHeaders.acceptHeader, "text/html");
+///
+/// To parse the header values use the [parse] static method.
+///
+///     HttpRequest request = ...;
+///     List<String> values = request.headers[HttpHeaders.acceptHeader];
+///     values.forEach((value) {
+///       HeaderValue v = HeaderValue.parse(value);
+///       // Use v.value and v.parameters
+///     });
+///
+/// An instance of [HeaderValue] is immutable.
 abstract class HeaderValue {
-  /**
-   * Creates a new header value object setting the value and parameters.
-   */
+  /// Creates a new header value object setting the value and parameters.
   factory HeaderValue(
       [String value = "", Map<String, String?> parameters = const {}]) {
-    return new _HeaderValue(value, parameters);
+    return _HeaderValue(value, parameters);
   }
 
-  /**
-   * Creates a new header value object from parsing a header value
-   * string with both value and optional parameters.
-   */
+  /// Creates a new header value object from parsing a header value
+  /// string with both value and optional parameters.
   static HeaderValue parse(String value,
       {String parameterSeparator = ";",
       String? valueSeparator,
@@ -841,646 +729,537 @@
         preserveBackslash: preserveBackslash);
   }
 
-  /**
-   * The value of the header.
-   */
+  /// The value of the header.
   String get value;
 
-  /**
-   * A map of parameters.
-   *
-   * This map cannot be modified.
-   */
+  /// A map of parameters.
+  ///
+  /// This map cannot be modified.
   Map<String, String?> get parameters;
 
-  /**
-   * Returns the formatted string representation in the form:
-   * ```plaintext
-   * value; parameter1=value1; parameter2=value2
-   * ```
-   */
+  /// Returns the formatted string representation in the form:
+  /// ```plaintext
+  /// value; parameter1=value1; parameter2=value2
+  /// ```
   String toString();
 }
 
+/// The [session][HttpRequest.session] of an [HttpRequest].
 abstract class HttpSession implements Map {
-  /**
-   * The id of the current session.
-   */
+  /// The id of the current session.
   String get id;
 
-  /**
-   * Destroys the session.
-   *
-   * This terminates the session and any further
-   * connections with this id will be given a new id and session.
-   */
+  /// Destroys the session.
+  ///
+  /// This terminates the session and any further
+  /// connections with this id will be given a new id and session.
   void destroy();
 
-  /**
-   * Sets a callback that will be called when the session is timed out.
-   *
-   * Calling this again will overwrite the previous value.
-   */
-  void set onTimeout(void callback());
+  /// Sets a callback that will be called when the session is timed out.
+  ///
+  /// Calling this again will overwrite the previous value.
+  void set onTimeout(void Function() callback);
 
-  /**
-   * Whether the session has not yet been sent to the client.
-   */
+  /// Whether the session has not yet been sent to the client.
   bool get isNew;
 }
 
-/**
- * A MIME/IANA media type used as the value of the
- * [HttpHeaders.contentTypeHeader] header.
- *
- * A [ContentType] is immutable.
- */
+/// A MIME/IANA media type used as the value of the
+/// [HttpHeaders.contentTypeHeader] header.
+///
+/// A [ContentType] is immutable.
 abstract class ContentType implements HeaderValue {
-  /**
-   * Content type for plain text using UTF-8 encoding.
-   *
-   *     text/plain; charset=utf-8
-   */
-  static final text = new ContentType("text", "plain", charset: "utf-8");
+  /// Content type for plain text using UTF-8 encoding.
+  ///
+  ///     text/plain; charset=utf-8
+  static final text = ContentType("text", "plain", charset: "utf-8");
   @Deprecated("Use text instead")
   static final TEXT = text;
 
-  /**
-   *  Content type for HTML using UTF-8 encoding.
-   *
-   *     text/html; charset=utf-8
-   */
-  static final html = new ContentType("text", "html", charset: "utf-8");
+  /// Content type for HTML using UTF-8 encoding.
+  ///
+  ///    text/html; charset=utf-8
+  static final html = ContentType("text", "html", charset: "utf-8");
   @Deprecated("Use html instead")
   static final HTML = html;
 
-  /**
-   *  Content type for JSON using UTF-8 encoding.
-   *
-   *     application/json; charset=utf-8
-   */
-  static final json = new ContentType("application", "json", charset: "utf-8");
+  /// Content type for JSON using UTF-8 encoding.
+  ///
+  ///    application/json; charset=utf-8
+  static final json = ContentType("application", "json", charset: "utf-8");
   @Deprecated("Use json instead")
   static final JSON = json;
 
-  /**
-   *  Content type for binary data.
-   *
-   *     application/octet-stream
-   */
-  static final binary = new ContentType("application", "octet-stream");
+  /// Content type for binary data.
+  ///
+  ///    application/octet-stream
+  static final binary = ContentType("application", "octet-stream");
   @Deprecated("Use binary instead")
   static final BINARY = binary;
 
-  /**
-   * Creates a new content type object setting the primary type and
-   * sub type. The charset and additional parameters can also be set
-   * using [charset] and [parameters]. If charset is passed and
-   * [parameters] contains charset as well the passed [charset] will
-   * override the value in parameters. Keys passed in parameters will be
-   * converted to lower case. The `charset` entry, whether passed as `charset`
-   * or in `parameters`, will have its value converted to lower-case.
-   */
+  /// Creates a new content type object setting the primary type and
+  /// sub type. The charset and additional parameters can also be set
+  /// using [charset] and [parameters]. If charset is passed and
+  /// [parameters] contains charset as well the passed [charset] will
+  /// override the value in parameters. Keys passed in parameters will be
+  /// converted to lower case. The `charset` entry, whether passed as `charset`
+  /// or in `parameters`, will have its value converted to lower-case.
   factory ContentType(String primaryType, String subType,
       {String? charset, Map<String, String?> parameters = const {}}) {
-    return new _ContentType(primaryType, subType, charset, parameters);
+    return _ContentType(primaryType, subType, charset, parameters);
   }
 
-  /**
-   * Creates a new content type object from parsing a Content-Type
-   * header value. As primary type, sub type and parameter names and
-   * values are not case sensitive all these values will be converted
-   * to lower case. Parsing this string
-   *
-   *     text/html; charset=utf-8
-   *
-   * will create a content type object with primary type "text",
-   * subtype "html" and parameter "charset" with value "utf-8".
-   * There may be more parameters supplied, but they are not recognized
-   * by this class.
-   */
+  /// Creates a new content type object from parsing a Content-Type
+  /// header value. As primary type, sub type and parameter names and
+  /// values are not case sensitive all these values will be converted
+  /// to lower case. Parsing this string
+  ///
+  ///     text/html; charset=utf-8
+  ///
+  /// will create a content type object with primary type "text",
+  /// subtype "html" and parameter "charset" with value "utf-8".
+  /// There may be more parameters supplied, but they are not recognized
+  /// by this class.
   static ContentType parse(String value) {
     return _ContentType.parse(value);
   }
 
-  /**
-   * Gets the MIME type and subtype, without any parameters.
-   *
-   * For the full content type `text/html;charset=utf-8`,
-   * the [mimeType] value is the string `text/html`.
-   */
+  /// Gets the MIME type and subtype, without any parameters.
+  ///
+  /// For the full content type `text/html;charset=utf-8`,
+  /// the [mimeType] value is the string `text/html`.
   String get mimeType;
 
-  /**
-   * Gets the primary type.
-   *
-   * For the full content type `text/html;charset=utf-8`,
-   * the [primaryType] value is the string `text`.
-   */
+  /// Gets the primary type.
+  ///
+  /// For the full content type `text/html;charset=utf-8`,
+  /// the [primaryType] value is the string `text`.
   String get primaryType;
 
-  /**
-   * Gets the subtype.
-   *
-   * For the full content type `text/html;charset=utf-8`,
-   * the [subType] value is the string `html`.
-   * May be the empty string.
-   */
+  /// Gets the subtype.
+  ///
+  /// For the full content type `text/html;charset=utf-8`,
+  /// the [subType] value is the string `html`.
+  /// May be the empty string.
   String get subType;
 
-  /**
-   * Gets the character set, if any.
-   *
-   * For the full content type `text/html;charset=utf-8`,
-   * the [charset] value is the string `utf-8`.
-   */
+  /// Gets the character set, if any.
+  ///
+  /// For the full content type `text/html;charset=utf-8`,
+  /// the [charset] value is the string `utf-8`.
   String? get charset;
 }
 
-/**
- * Representation of a cookie. For cookies received by the server as Cookie
- * header values only [name] and [value] properties will be set. When building a
- * cookie for the 'set-cookie' header in the server and when receiving cookies
- * in the client as 'set-cookie' headers all fields can be used.
- */
+/// Representation of a cookie. For cookies received by the server as Cookie
+/// header values only [name] and [value] properties will be set. When building a
+/// cookie for the 'set-cookie' header in the server and when receiving cookies
+/// in the client as 'set-cookie' headers all fields can be used.
 abstract class Cookie {
-  /**
-   * The name of the cookie.
-   *
-   * Must be a `token` as specified in RFC 6265.
-   *
-   * The allowed characters in a `token` are the visible ASCII characters,
-   * U+0021 (`!`) through U+007E (`~`), except the separator characters:
-   * `(`, `)`, `<`, `>`, `@`, `,`, `;`, `:`, `\`, `"`, `/`, `[`, `]`, `?`, `=`,
-   * `{`, and `}`.
-   */
+  /// The name of the cookie.
+  ///
+  /// Must be a `token` as specified in RFC 6265.
+  ///
+  /// The allowed characters in a `token` are the visible ASCII characters,
+  /// U+0021 (`!`) through U+007E (`~`), except the separator characters:
+  /// `(`, `)`, `<`, `>`, `@`, `,`, `;`, `:`, `\`, `"`, `/`, `[`, `]`, `?`, `=`,
+  /// `{`, and `}`.
   late String name;
 
-  /**
-   * The value of the cookie.
-   *
-   * Must be a `cookie-value` as specified in RFC 6265.
-   *
-   * The allowed characters in a cookie value are the visible ASCII characters,
-   * U+0021 (`!`) through U+007E (`~`) except the characters:
-   * `"`, `,`, `;` and `\`.
-   * Cookie values may be wrapped in a single pair of double quotes
-   * (U+0022, `"`).
-   */
+  /// The value of the cookie.
+  ///
+  /// Must be a `cookie-value` as specified in RFC 6265.
+  ///
+  /// The allowed characters in a cookie value are the visible ASCII characters,
+  /// U+0021 (`!`) through U+007E (`~`) except the characters:
+  /// `"`, `,`, `;` and `\`.
+  /// Cookie values may be wrapped in a single pair of double quotes
+  /// (U+0022, `"`).
   late String value;
 
-  /**
-   * The time at which the cookie expires.
-   */
+  /// The time at which the cookie expires.
   DateTime? expires;
 
-  /**
-   * The number of seconds until the cookie expires. A zero or negative value
-   * means the cookie has expired.
-   */
+  /// The number of seconds until the cookie expires. A zero or negative value
+  /// means the cookie has expired.
   int? maxAge;
 
-  /**
-   * The domain that the cookie applies to.
-   */
+  /// The domain that the cookie applies to.
   String? domain;
 
-  /**
-   * The path within the [domain] that the cookie applies to.
-   */
+  /// The path within the [domain] that the cookie applies to.
   String? path;
 
-  /**
-   * Whether to only send this cookie on secure connections.
-   */
+  /// Whether to only send this cookie on secure connections.
   bool secure = false;
 
-  /**
-   * Whether the cookie is only sent in the HTTP request and is not made
-   * available to client side scripts.
-   */
+  /// Whether the cookie is only sent in the HTTP request and is not made
+  /// available to client side scripts.
   bool httpOnly = false;
 
-  /**
-   * Creates a new cookie setting the name and value.
-   *
-   * [name] and [value] must be composed of valid characters according to RFC
-   * 6265.
-   *
-   * By default the value of `httpOnly` will be set to `true`.
-   */
-  factory Cookie(String name, String value) => new _Cookie(name, value);
+  /// Creates a new cookie setting the name and value.
+  ///
+  /// [name] and [value] must be composed of valid characters according to RFC
+  /// 6265.
+  ///
+  /// By default the value of `httpOnly` will be set to `true`.
+  factory Cookie(String name, String value) => _Cookie(name, value);
 
-  /**
-   * Creates a new cookie by parsing a header value from a 'set-cookie'
-   * header.
-   */
+  /// Creates a new cookie by parsing a header value from a 'set-cookie'
+  /// header.
   factory Cookie.fromSetCookieValue(String value) {
-    return new _Cookie.fromSetCookieValue(value);
+    return _Cookie.fromSetCookieValue(value);
   }
 
-  /**
-   * Returns the formatted string representation of the cookie. The
-   * string representation can be used for for setting the Cookie or
-   * 'set-cookie' headers
-   */
+  /// Returns the formatted string representation of the cookie. The
+  /// string representation can be used for setting the Cookie or
+  /// 'set-cookie' headers
   String toString();
 }
 
-/**
- * A server-side object
- * that contains the content of and information about an HTTP request.
- *
- * __Note__: Check out the
- * [http_server](https://pub.dev/packages/http_server)
- * package, which makes working with the low-level
- * dart:io HTTP server subsystem easier.
- *
- * `HttpRequest` objects are generated by an [HttpServer],
- * which listens for HTTP requests on a specific host and port.
- * For each request received, the HttpServer, which is a [Stream],
- * generates an `HttpRequest` object and adds it to the stream.
- *
- * An `HttpRequest` object delivers the body content of the request
- * as a stream of byte lists.
- * The object also contains information about the request,
- * such as the method, URI, and headers.
- *
- * In the following code, an HttpServer listens
- * for HTTP requests. When the server receives a request,
- * it uses the HttpRequest object's `method` property to dispatch requests.
- *
- *     final HOST = InternetAddress.loopbackIPv4;
- *     final PORT = 80;
- *
- *     HttpServer.bind(HOST, PORT).then((_server) {
- *       _server.listen((HttpRequest request) {
- *         switch (request.method) {
- *           case 'GET':
- *             handleGetRequest(request);
- *             break;
- *           case 'POST':
- *             ...
- *         }
- *       },
- *       onError: handleError);    // listen() failed.
- *     }).catchError(handleError);
- *
- * An HttpRequest object provides access to the associated [HttpResponse]
- * object through the response property.
- * The server writes its response to the body of the HttpResponse object.
- * For example, here's a function that responds to a request:
- *
- *     void handleGetRequest(HttpRequest req) {
- *       HttpResponse res = req.response;
- *       res.write('Received request ${req.method}: ${req.uri.path}');
- *       res.close();
- *     }
- */
+/// A server-side object
+/// that contains the content of and information about an HTTP request.
+///
+/// `HttpRequest` objects are generated by an [HttpServer],
+/// which listens for HTTP requests on a specific host and port.
+/// For each request received, the HttpServer, which is a [Stream],
+/// generates an `HttpRequest` object and adds it to the stream.
+///
+/// An `HttpRequest` object delivers the body content of the request
+/// as a stream of byte lists.
+/// The object also contains information about the request,
+/// such as the method, URI, and headers.
+///
+/// In the following code, an HttpServer listens
+/// for HTTP requests. When the server receives a request,
+/// it uses the HttpRequest object's `method` property to dispatch requests.
+///
+///     final HOST = InternetAddress.loopbackIPv4;
+///     final PORT = 80;
+///
+///     HttpServer.bind(HOST, PORT).then((_server) {
+///       _server.listen((HttpRequest request) {
+///         switch (request.method) {
+///           case 'GET':
+///             handleGetRequest(request);
+///             break;
+///           case 'POST':
+///             ...
+///         }
+///       },
+///       onError: handleError);    // listen() failed.
+///     }).catchError(handleError);
+///
+/// An HttpRequest object provides access to the associated [HttpResponse]
+/// object through the response property.
+/// The server writes its response to the body of the HttpResponse object.
+/// For example, here's a function that responds to a request:
+///
+///     void handleGetRequest(HttpRequest req) {
+///       HttpResponse res = req.response;
+///       res.write('Received request ${req.method}: ${req.uri.path}');
+///       res.close();
+///     }
 abstract class HttpRequest implements Stream<Uint8List> {
-  /**
-   * The content length of the request body.
-   *
-   * If the size of the request body is not known in advance,
-   * this value is -1.
-   */
+  /// The content length of the request body.
+  ///
+  /// If the size of the request body is not known in advance,
+  /// this value is -1.
   int get contentLength;
 
-  /**
-   * The method, such as 'GET' or 'POST', for the request.
-   */
+  /// The method, such as 'GET' or 'POST', for the request.
   String get method;
 
-  /**
-   * The URI for the request.
-   *
-   * This provides access to the
-   * path and query string for the request.
-   */
+  /// The URI for the request.
+  ///
+  /// This provides access to the
+  /// path and query string for the request.
   Uri get uri;
 
-  /**
-   * The requested URI for the request.
-   *
-   * The returned URI is reconstructed by using http-header fields, to access
-   * otherwise lost information, e.g. host and scheme.
-   *
-   * To reconstruct the scheme, first 'X-Forwarded-Proto' is checked, and then
-   * falling back to server type.
-   *
-   * To reconstruct the host, first 'X-Forwarded-Host' is checked, then 'Host'
-   * and finally calling back to server.
-   */
+  /// The requested URI for the request.
+  ///
+  /// The returned URI is reconstructed by using http-header fields, to access
+  /// otherwise lost information, e.g. host and scheme.
+  ///
+  /// To reconstruct the scheme, first 'X-Forwarded-Proto' is checked, and then
+  /// falling back to server type.
+  ///
+  /// To reconstruct the host, first 'X-Forwarded-Host' is checked, then 'Host'
+  /// and finally calling back to server.
   Uri get requestedUri;
 
-  /**
-   * The request headers.
-   *
-   * The returned [HttpHeaders] are immutable.
-   */
+  /// The request headers.
+  ///
+  /// The returned [HttpHeaders] are immutable.
   HttpHeaders get headers;
 
-  /**
-   * The cookies in the request, from the "Cookie" headers.
-   */
+  /// The cookies in the request, from the "Cookie" headers.
   List<Cookie> get cookies;
 
-  /**
-   * The persistent connection state signaled by the client.
-   */
+  /// The persistent connection state signaled by the client.
   bool get persistentConnection;
 
-  /**
-   * The client certificate of the client making the request.
-   *
-   * This value is null if the connection is not a secure TLS or SSL connection,
-   * or if the server does not request a client certificate, or if the client
-   * does not provide one.
-   */
+  /// The client certificate of the client making the request.
+  ///
+  /// This value is null if the connection is not a secure TLS or SSL connection,
+  /// or if the server does not request a client certificate, or if the client
+  /// does not provide one.
   X509Certificate? get certificate;
 
-  /**
-   * The session for the given request.
-   *
-   * If the session is being initialized by this call,
-   * [HttpSession.isNew] is true for the returned session.
-   * See [HttpServer.sessionTimeout] on how to change default timeout.
-   */
+  /// The session for the given request.
+  ///
+  /// If the session is being initialized by this call,
+  /// [HttpSession.isNew] is true for the returned session.
+  /// See [HttpServer.sessionTimeout] on how to change default timeout.
   HttpSession get session;
 
-  /**
-   * The HTTP protocol version used in the request,
-   * either "1.0" or "1.1".
-   */
+  /// The HTTP protocol version used in the request,
+  /// either "1.0" or "1.1".
   String get protocolVersion;
 
-  /**
-   * Information about the client connection.
-   *
-   * Returns `null` if the socket is not available.
-   */
+  /// Information about the client connection.
+  ///
+  /// Returns `null` if the socket is not available.
   HttpConnectionInfo? get connectionInfo;
 
-  /**
-   * The [HttpResponse] object, used for sending back the response to the
-   * client.
-   *
-   * If the [contentLength] of the body isn't 0, and the body isn't being read,
-   * any write calls on the [HttpResponse] automatically drain the request
-   * body.
-   */
+  /// The [HttpResponse] object, used for sending back the response to the
+  /// client.
+  ///
+  /// If the [contentLength] of the body isn't 0, and the body isn't being read,
+  /// any write calls on the [HttpResponse] automatically drain the request
+  /// body.
   HttpResponse get response;
 }
 
-/**
- * An HTTP response, which returns the headers and data
- * from the server to the client in response to an HTTP request.
- *
- * Every HttpRequest object provides access to the associated [HttpResponse]
- * object through the `response` property.
- * The server sends its response to the client by writing to the
- * HttpResponse object.
- *
- * ## Writing the response
- *
- * This class implements [IOSink].
- * After the header has been set up, the methods
- * from IOSink, such as `writeln()`, can be used to write
- * the body of the HTTP response.
- * Use the `close()` method to close the response and send it to the client.
- *
- *     server.listen((HttpRequest request) {
- *       request.response.write('Hello, world!');
- *       request.response.close();
- *     });
- *
- * When one of the IOSink methods is used for the
- * first time, the request header is sent. Calling any methods that
- * change the header after it is sent throws an exception.
- *
- * ## Setting the headers
- *
- * The HttpResponse object has a number of properties for setting up
- * the HTTP headers of the response.
- * When writing string data through the IOSink, the encoding used
- * is determined from the "charset" parameter of the
- * "Content-Type" header.
- *
- *     HttpResponse response = ...
- *     response.headers.contentType
- *         = new ContentType("application", "json", charset: "utf-8");
- *     response.write(...);  // Strings written will be UTF-8 encoded.
- *
- * If no charset is provided the default of ISO-8859-1 (Latin 1) will
- * be used.
- *
- *     HttpResponse response = ...
- *     response.headers.add(HttpHeaders.contentTypeHeader, "text/plain");
- *     response.write(...);  // Strings written will be ISO-8859-1 encoded.
- *
- * An exception is thrown if you use the `write()` method
- * while an unsupported content-type is set.
- */
+/// An HTTP response, which returns the headers and data
+/// from the server to the client in response to an HTTP request.
+///
+/// Every HttpRequest object provides access to the associated [HttpResponse]
+/// object through the `response` property.
+/// The server sends its response to the client by writing to the
+/// HttpResponse object.
+///
+/// ## Writing the response
+///
+/// This class implements [IOSink].
+/// After the header has been set up, the methods
+/// from IOSink, such as `writeln()`, can be used to write
+/// the body of the HTTP response.
+/// Use the `close()` method to close the response and send it to the client.
+///
+///     server.listen((HttpRequest request) {
+///       request.response.write('Hello, world!');
+///       request.response.close();
+///     });
+///
+/// When one of the IOSink methods is used for the
+/// first time, the request header is sent. Calling any methods that
+/// change the header after it is sent throws an exception.
+///
+/// ## Setting the headers
+///
+/// The HttpResponse object has a number of properties for setting up
+/// the HTTP headers of the response.
+/// When writing string data through the IOSink, the encoding used
+/// is determined from the "charset" parameter of the
+/// "Content-Type" header.
+///
+///     HttpResponse response = ...
+///     response.headers.contentType
+///         = ContentType("application", "json", charset: "utf-8");
+///     response.write(...);  // Strings written will be UTF-8 encoded.
+///
+/// If no charset is provided the default of ISO-8859-1 (Latin 1) will
+/// be used.
+///
+///     HttpResponse response = ...
+///     response.headers.add(HttpHeaders.contentTypeHeader, "text/plain");
+///     response.write(...);  // Strings written will be ISO-8859-1 encoded.
+///
+/// An exception is thrown if you use the `write()` method
+/// while an unsupported content-type is set.
 abstract class HttpResponse implements IOSink {
   // TODO(ajohnsen): Add documentation of how to pipe a file to the response.
-  /**
-   * Gets and sets the content length of the response. If the size of
-   * the response is not known in advance set the content length to
-   * -1, which is also the default if not set.
-   */
+  /// Gets and sets the content length of the response. If the size of
+  /// the response is not known in advance set the content length to
+  /// -1, which is also the default if not set.
   int contentLength = -1;
 
-  /**
-   * The status code of the response.
-   *
-   * Any integer value is accepted. For
-   * the official HTTP status codes use the fields from
-   * [HttpStatus]. If no status code is explicitly set the default
-   * value [HttpStatus.ok] is used.
-   *
-   * The status code must be set before the body is written
-   * to. Setting the status code after writing to the response body or
-   * closing the response will throw a `StateError`.
-   */
+  /// The status code of the response.
+  ///
+  /// Any integer value is accepted. For
+  /// the official HTTP status codes use the fields from
+  /// [HttpStatus]. If no status code is explicitly set the default
+  /// value [HttpStatus.ok] is used.
+  ///
+  /// The status code must be set before the body is written
+  /// to. Setting the status code after writing to the response body or
+  /// closing the response will throw a `StateError`.
   int statusCode = HttpStatus.ok;
 
-  /**
-   * The reason phrase for the response.
-   *
-   * If no reason phrase is explicitly set, a default reason phrase is provided.
-   *
-   * The reason phrase must be set before the body is written
-   * to. Setting the reason phrase after writing to the response body
-   * or closing the response will throw a [StateError].
-   */
+  /// The reason phrase for the response.
+  ///
+  /// If no reason phrase is explicitly set, a default reason phrase is provided.
+  ///
+  /// The reason phrase must be set before the body is written
+  /// to. Setting the reason phrase after writing to the response body
+  /// or closing the response will throw a [StateError].
   late String reasonPhrase;
 
-  /**
-   * Gets and sets the persistent connection state. The initial value
-   * of this property is the persistent connection state from the
-   * request.
-   */
+  /// Gets and sets the persistent connection state. The initial value
+  /// of this property is the persistent connection state from the
+  /// request.
   late bool persistentConnection;
 
-  /**
-   * Set and get the [deadline] for the response. The deadline is timed from the
-   * time it's set. Setting a new deadline will override any previous deadline.
-   * When a deadline is exceeded, the response will be closed and any further
-   * data ignored.
-   *
-   * To disable a deadline, set the [deadline] to `null`.
-   *
-   * The [deadline] is `null` by default.
-   */
+  /// Set and get the [deadline] for the response. The deadline is timed from the
+  /// time it's set. Setting a new deadline will override any previous deadline.
+  /// When a deadline is exceeded, the response will be closed and any further
+  /// data ignored.
+  ///
+  /// To disable a deadline, set the [deadline] to `null`.
+  ///
+  /// The [deadline] is `null` by default.
   Duration? deadline;
 
-  /**
-   * Gets or sets if the [HttpResponse] should buffer output.
-   *
-   * Default value is `true`.
-   *
-   * __Note__: Disabling buffering of the output can result in very poor
-   * performance, when writing many small chunks.
-   */
+  /// Gets or sets if the [HttpResponse] should buffer output.
+  ///
+  /// Default value is `true`.
+  ///
+  /// __Note__: Disabling buffering of the output can result in very poor
+  /// performance, when writing many small chunks.
   bool bufferOutput = true;
 
-  /**
-   * Returns the response headers.
-   *
-   * The response headers can be modified until the response body is
-   * written to or closed. After that they become immutable.
-   */
+  /// Returns the response headers.
+  ///
+  /// The response headers can be modified until the response body is
+  /// written to or closed. After that they become immutable.
   HttpHeaders get headers;
 
-  /**
-   * Cookies to set in the client (in the 'set-cookie' header).
-   */
+  /// Cookies to set in the client (in the 'set-cookie' header).
   List<Cookie> get cookies;
 
-  /**
-   * Respond with a redirect to [location].
-   *
-   * The URI in [location] should be absolute, but there are no checks
-   * to enforce that.
-   *
-   * By default the HTTP status code `HttpStatus.movedTemporarily`
-   * (`302`) is used for the redirect, but an alternative one can be
-   * specified using the [status] argument.
-   *
-   * This method will also call `close`, and the returned future is
-   * the future returned by `close`.
-   */
+  /// Respond with a redirect to [location].
+  ///
+  /// The URI in [location] should be absolute, but there are no checks
+  /// to enforce that.
+  ///
+  /// By default the HTTP status code `HttpStatus.movedTemporarily`
+  /// (`302`) is used for the redirect, but an alternative one can be
+  /// specified using the [status] argument.
+  ///
+  /// This method will also call `close`, and the returned future is
+  /// the future returned by `close`.
   Future redirect(Uri location, {int status = HttpStatus.movedTemporarily});
 
-  /**
-   * Detaches the underlying socket from the HTTP server. When the
-   * socket is detached the HTTP server will no longer perform any
-   * operations on it.
-   *
-   * This is normally used when a HTTP upgrade request is received
-   * and the communication should continue with a different protocol.
-   *
-   * If [writeHeaders] is `true`, the status line and [headers] will be written
-   * to the socket before it's detached. If `false`, the socket is detached
-   * immediately, without any data written to the socket. Default is `true`.
-   */
+  /// Detaches the underlying socket from the HTTP server. When the
+  /// socket is detached the HTTP server will no longer perform any
+  /// operations on it.
+  ///
+  /// This is normally used when a HTTP upgrade request is received
+  /// and the communication should continue with a different protocol.
+  ///
+  /// If [writeHeaders] is `true`, the status line and [headers] will be written
+  /// to the socket before it's detached. If `false`, the socket is detached
+  /// immediately, without any data written to the socket. Default is `true`.
   Future<Socket> detachSocket({bool writeHeaders = true});
 
-  /**
-   * Gets information about the client connection. Returns `null` if the
-   * socket is not available.
-   */
+  /// Gets information about the client connection. Returns `null` if the
+  /// socket is not available.
   HttpConnectionInfo? get connectionInfo;
 }
 
-/**
- * A client that receives content, such as web pages, from
- * a server using the HTTP protocol.
- *
- * HttpClient contains a number of methods to send an [HttpClientRequest]
- * to an Http server and receive an [HttpClientResponse] back.
- * For example, you can use the [get], [getUrl], [post], and [postUrl] methods
- * for GET and POST requests, respectively.
- *
- * ## Making a simple GET request: an example
- *
- * A `getUrl` request is a two-step process, triggered by two [Future]s.
- * When the first future completes with a [HttpClientRequest], the underlying
- * network connection has been established, but no data has been sent.
- * In the callback function for the first future, the HTTP headers and body
- * can be set on the request. Either the first write to the request object
- * or a call to [close] sends the request to the server.
- *
- * When the HTTP response is received from the server,
- * the second future, which is returned by close,
- * completes with an [HttpClientResponse] object.
- * This object provides access to the headers and body of the response.
- * The body is available as a stream implemented by HttpClientResponse.
- * If a body is present, it must be read. Otherwise, it leads to resource
- * leaks. Consider using [HttpClientResponse.drain] if the body is unused.
- *
- *     HttpClient client = new HttpClient();
- *     client.getUrl(Uri.parse("http://www.example.com/"))
- *         .then((HttpClientRequest request) {
- *           // Optionally set up headers...
- *           // Optionally write to the request object...
- *           // Then call close.
- *           ...
- *           return request.close();
- *         })
- *         .then((HttpClientResponse response) {
- *           // Process the response.
- *           ...
- *         });
- *
- * The future for [HttpClientRequest] is created by methods such as
- * [getUrl] and [open].
- *
- * ## HTTPS connections
- *
- * An HttpClient can make HTTPS requests, connecting to a server using
- * the TLS (SSL) secure networking protocol. Calling [getUrl] with an
- * https: scheme will work automatically, if the server's certificate is
- * signed by a root CA (certificate authority) on the default list of
- * well-known trusted CAs, compiled by Mozilla.
- *
- * To add a custom trusted certificate authority, or to send a client
- * certificate to servers that request one, pass a [SecurityContext] object
- * as the optional `context` argument to the `HttpClient` constructor.
- * The desired security options can be set on the [SecurityContext] object.
- *
- * ## Headers
- *
- * All HttpClient requests set the following header by default:
- *
- *     Accept-Encoding: gzip
- *
- * This allows the HTTP server to use gzip compression for the body if
- * possible. If this behavior is not desired set the
- * `Accept-Encoding` header to something else.
- * To turn off gzip compression of the response, clear this header:
- *
- *      request.headers.removeAll(HttpHeaders.acceptEncodingHeader)
- *
- * ## Closing the HttpClient
- *
- * The HttpClient supports persistent connections and caches network
- * connections to reuse them for multiple requests whenever
- * possible. This means that network connections can be kept open for
- * some time after a request has completed. Use HttpClient.close
- * to force the HttpClient object to shut down and to close the idle
- * network connections.
- *
- * ## Turning proxies on and off
- *
- * By default the HttpClient uses the proxy configuration available
- * from the environment, see [findProxyFromEnvironment]. To turn off
- * the use of proxies set the [findProxy] property to
- * `null`.
- *
- *     HttpClient client = new HttpClient();
- *     client.findProxy = null;
- */
+/// An HTTP client for communicating with an HTTP server.
+///
+/// Sends HTTP requests to an HTTP server and receives responses.
+/// Maintains state, including session cookies and other cookies,
+/// between multiple requests to the same server.
+///
+/// Note: [HttpClient] provides low-level HTTP functionality.
+/// We recommend users start with more developer-friendly and composable APIs
+/// found in [`package:http`](https://pub.dev/packages/http).
+///
+/// HttpClient contains a number of methods to send an [HttpClientRequest]
+/// to an Http server and receive an [HttpClientResponse] back.
+/// For example, you can use the [get], [getUrl], [post], and [postUrl] methods
+/// for GET and POST requests, respectively.
+///
+/// ## Making a simple GET request: an example
+///
+/// A `getUrl` request is a two-step process, triggered by two [Future]s.
+/// When the first future completes with a [HttpClientRequest], the underlying
+/// network connection has been established, but no data has been sent.
+/// In the callback function for the first future, the HTTP headers and body
+/// can be set on the request. Either the first write to the request object
+/// or a call to [close] sends the request to the server.
+///
+/// When the HTTP response is received from the server,
+/// the second future, which is returned by close,
+/// completes with an [HttpClientResponse] object.
+/// This object provides access to the headers and body of the response.
+/// The body is available as a stream implemented by `HttpClientResponse`.
+/// If a body is present, it must be read. Otherwise, it leads to resource
+/// leaks. Consider using [HttpClientResponse.drain] if the body is unused.
+///
+/// ```dart import:convert
+/// var client = HttpClient();
+/// try {
+///   HttpClientRequest request = await client.get('localhost', 80, '/file.txt');
+///   // Optionally set up headers...
+///   // Optionally write to the request object...
+///   HttpClientResponse response = await request.close();
+///   // Process the response
+///   final stringData = await response.transform(utf8.decoder).join();
+///   print(stringData);
+/// } finally {
+///   client.close();
+/// }
+/// ```
+///
+/// The future for [HttpClientRequest] is created by methods such as
+/// [getUrl] and [open].
+///
+/// ## HTTPS connections
+///
+/// An `HttpClient` can make HTTPS requests, connecting to a server using
+/// the TLS (SSL) secure networking protocol. Calling [getUrl] with an
+/// https: scheme will work automatically, if the server's certificate is
+/// signed by a root CA (certificate authority) on the default list of
+/// well-known trusted CAs, compiled by Mozilla.
+///
+/// To add a custom trusted certificate authority, or to send a client
+/// certificate to servers that request one, pass a [SecurityContext] object
+/// as the optional `context` argument to the `HttpClient` constructor.
+/// The desired security options can be set on the [SecurityContext] object.
+///
+/// ## Headers
+///
+/// All `HttpClient` requests set the following header by default:
+///
+///     Accept-Encoding: gzip
+///
+/// This allows the HTTP server to use gzip compression for the body if
+/// possible. If this behavior is not desired set the
+/// `Accept-Encoding` header to something else.
+/// To turn off gzip compression of the response, clear this header:
+///
+///      request.headers.removeAll(HttpHeaders.acceptEncodingHeader)
+///
+/// ## Closing the `HttpClient`
+///
+/// `HttpClient` supports persistent connections and caches network
+/// connections to reuse them for multiple requests whenever
+/// possible. This means that network connections can be kept open for
+/// some time after a request has completed. Use [HttpClient.close]
+/// to force the `HttpClient` object to shut down and to close the idle
+/// network connections.
+///
+/// ## Turning proxies on and off
+///
+/// By default the `HttpClient` uses the proxy configuration available
+/// from the environment, see [findProxyFromEnvironment]. To turn off
+/// the use of proxies set the [findProxy] property to `null`.
+///
+///     HttpClient client = HttpClient();
+///     client.findProxy = null;
 abstract class HttpClient {
   static const int defaultHttpPort = 80;
   @Deprecated("Use defaultHttpPort instead")
@@ -1529,44 +1308,40 @@
   /// `null`.
   Duration? connectionTimeout;
 
-  /**
-   * Gets and sets the maximum number of live connections, to a single host.
-   *
-   * Increasing this number may lower performance and take up unwanted
-   * system resources.
-   *
-   * To disable, set to `null`.
-   *
-   * Default is `null`.
-   */
+  /// Gets and sets the maximum number of live connections, to a single host.
+  ///
+  /// Increasing this number may lower performance and take up unwanted
+  /// system resources.
+  ///
+  /// To disable, set to `null`.
+  ///
+  /// Default is `null`.
   int? maxConnectionsPerHost;
 
-  /**
-   * Gets and sets whether the body of a response will be automatically
-   * uncompressed.
-   *
-   * The body of an HTTP response can be compressed. In most
-   * situations providing the un-compressed body is most
-   * convenient. Therefore the default behavior is to un-compress the
-   * body. However in some situations (e.g. implementing a transparent
-   * proxy) keeping the uncompressed stream is required.
-   *
-   * NOTE: Headers in the response are never modified. This means
-   * that when automatic un-compression is turned on the value of the
-   * header `Content-Length` will reflect the length of the original
-   * compressed body. Likewise the header `Content-Encoding` will also
-   * have the original value indicating compression.
-   *
-   * NOTE: Automatic un-compression is only performed if the
-   * `Content-Encoding` header value is `gzip`.
-   *
-   * This value affects all responses produced by this client after the
-   * value is changed.
-   *
-   * To disable, set to `false`.
-   *
-   * Default is `true`.
-   */
+  /// Gets and sets whether the body of a response will be automatically
+  /// uncompressed.
+  ///
+  /// The body of an HTTP response can be compressed. In most
+  /// situations providing the un-compressed body is most
+  /// convenient. Therefore the default behavior is to un-compress the
+  /// body. However in some situations (e.g. implementing a transparent
+  /// proxy) keeping the uncompressed stream is required.
+  ///
+  /// NOTE: Headers in the response are never modified. This means
+  /// that when automatic un-compression is turned on the value of the
+  /// header `Content-Length` will reflect the length of the original
+  /// compressed body. Likewise the header `Content-Encoding` will also
+  /// have the original value indicating compression.
+  ///
+  /// NOTE: Automatic un-compression is only performed if the
+  /// `Content-Encoding` header value is `gzip`.
+  ///
+  /// This value affects all responses produced by this client after the
+  /// value is changed.
+  ///
+  /// To disable, set to `false`.
+  ///
+  /// Default is `true`.
   bool autoUncompress = true;
 
   /// Gets and sets the default value of the `User-Agent` header for all requests
@@ -1581,275 +1356,240 @@
   factory HttpClient({SecurityContext? context}) {
     HttpOverrides? overrides = HttpOverrides.current;
     if (overrides == null) {
-      return new _HttpClient(context);
+      return _HttpClient(context);
     }
     return overrides.createHttpClient(context);
   }
 
-  /**
-   * Opens a HTTP connection.
-   *
-   * The HTTP method to use is specified in [method], the server is
-   * specified using [host] and [port], and the path (including
-   * a possible query) is specified using [path].
-   * The path may also contain a URI fragment, which will be ignored.
-   *
-   * The `Host` header for the request will be set to the value [host]:[port]
-   * (if [host] is an IP address, it will still be used in the `Host` header).
-   * This can be overridden through the [HttpClientRequest] interface before
-   * the request is sent.
-   *
-   * For additional information on the sequence of events during an
-   * HTTP transaction, and the objects returned by the futures, see
-   * the overall documentation for the class [HttpClient].
-   */
+  /// Opens a HTTP connection.
+  ///
+  /// The HTTP method to use is specified in [method], the server is
+  /// specified using [host] and [port], and the path (including
+  /// a possible query) is specified using [path].
+  /// The path may also contain a URI fragment, which will be ignored.
+  ///
+  /// The `Host` header for the request will be set to the value [host]:[port]
+  /// (if [host] is an IP address, it will still be used in the `Host` header).
+  /// This can be overridden through the [HttpClientRequest] interface before
+  /// the request is sent.
+  ///
+  /// For additional information on the sequence of events during an
+  /// HTTP transaction, and the objects returned by the futures, see
+  /// the overall documentation for the class [HttpClient].
   Future<HttpClientRequest> open(
       String method, String host, int port, String path);
 
-  /**
-   * Opens a HTTP connection.
-   *
-   * The HTTP method is specified in [method] and the URL to use in
-   * [url].
-   *
-   * The `Host` header for the request will be set to the value
-   * [Uri.host]:[Uri.port] from [url] (if `url.host` is an IP address, it will
-   * still be used in the `Host` header). This can be overridden through the
-   * [HttpClientRequest] interface before the request is sent.
-   *
-   * For additional information on the sequence of events during an
-   * HTTP transaction, and the objects returned by the futures, see
-   * the overall documentation for the class [HttpClient].
-   */
+  /// Opens a HTTP connection.
+  ///
+  /// The HTTP method is specified in [method] and the URL to use in
+  /// [url].
+  ///
+  /// The `Host` header for the request will be set to the value
+  /// [Uri.host]:[Uri.port] from [url] (if `url.host` is an IP address, it will
+  /// still be used in the `Host` header). This can be overridden through the
+  /// [HttpClientRequest] interface before the request is sent.
+  ///
+  /// For additional information on the sequence of events during an
+  /// HTTP transaction, and the objects returned by the futures, see
+  /// the overall documentation for the class [HttpClient].
   Future<HttpClientRequest> openUrl(String method, Uri url);
 
-  /**
-   * Opens a HTTP connection using the GET method.
-   *
-   * The server is specified using [host] and [port], and the path
-   * (including a possible query) is specified using
-   * [path].
-   *
-   * See [open] for details.
-   */
+  /// Opens a HTTP connection using the GET method.
+  ///
+  /// The server is specified using [host] and [port], and the path
+  /// (including a possible query) is specified using
+  /// [path].
+  ///
+  /// See [open] for details.
   Future<HttpClientRequest> get(String host, int port, String path);
 
-  /**
-   * Opens a HTTP connection using the GET method.
-   *
-   * The URL to use is specified in [url].
-   *
-   * See [openUrl] for details.
-   */
+  /// Opens a HTTP connection using the GET method.
+  ///
+  /// The URL to use is specified in [url].
+  ///
+  /// See [openUrl] for details.
   Future<HttpClientRequest> getUrl(Uri url);
 
-  /**
-   * Opens a HTTP connection using the POST method.
-   *
-   * The server is specified using [host] and [port], and the path
-   * (including a possible query) is specified using
-   * [path].
-   *
-   * See [open] for details.
-   */
+  /// Opens a HTTP connection using the POST method.
+  ///
+  /// The server is specified using [host] and [port], and the path
+  /// (including a possible query) is specified using
+  /// [path].
+  ///
+  /// See [open] for details.
   Future<HttpClientRequest> post(String host, int port, String path);
 
-  /**
-   * Opens a HTTP connection using the POST method.
-   *
-   * The URL to use is specified in [url].
-   *
-   * See [openUrl] for details.
-   */
+  /// Opens a HTTP connection using the POST method.
+  ///
+  /// The URL to use is specified in [url].
+  ///
+  /// See [openUrl] for details.
   Future<HttpClientRequest> postUrl(Uri url);
 
-  /**
-   * Opens a HTTP connection using the PUT method.
-   *
-   * The server is specified using [host] and [port], and the path
-   * (including a possible query) is specified using [path].
-   *
-   * See [open] for details.
-   */
+  /// Opens a HTTP connection using the PUT method.
+  ///
+  /// The server is specified using [host] and [port], and the path
+  /// (including a possible query) is specified using [path].
+  ///
+  /// See [open] for details.
   Future<HttpClientRequest> put(String host, int port, String path);
 
-  /**
-   * Opens a HTTP connection using the PUT method.
-   *
-   * The URL to use is specified in [url].
-   *
-   * See [openUrl] for details.
-   */
+  /// Opens a HTTP connection using the PUT method.
+  ///
+  /// The URL to use is specified in [url].
+  ///
+  /// See [openUrl] for details.
   Future<HttpClientRequest> putUrl(Uri url);
 
-  /**
-   * Opens a HTTP connection using the DELETE method.
-   *
-   * The server is specified using [host] and [port], and the path
-   * (including a possible query) is specified using [path].
-   *
-   * See [open] for details.
-   */
+  /// Opens a HTTP connection using the DELETE method.
+  ///
+  /// The server is specified using [host] and [port], and the path
+  /// (including a possible query) is specified using [path].
+  ///
+  /// See [open] for details.
   Future<HttpClientRequest> delete(String host, int port, String path);
 
-  /**
-   * Opens a HTTP connection using the DELETE method.
-   *
-   * The URL to use is specified in [url].
-   *
-   * See [openUrl] for details.
-   */
+  /// Opens a HTTP connection using the DELETE method.
+  ///
+  /// The URL to use is specified in [url].
+  ///
+  /// See [openUrl] for details.
   Future<HttpClientRequest> deleteUrl(Uri url);
 
-  /**
-   * Opens a HTTP connection using the PATCH method.
-   *
-   * The server is specified using [host] and [port], and the path
-   * (including a possible query) is specified using [path].
-   *
-   * See [open] for details.
-   */
+  /// Opens a HTTP connection using the PATCH method.
+  ///
+  /// The server is specified using [host] and [port], and the path
+  /// (including a possible query) is specified using [path].
+  ///
+  /// See [open] for details.
   Future<HttpClientRequest> patch(String host, int port, String path);
 
-  /**
-   * Opens a HTTP connection using the PATCH method.
-   *
-   * The URL to use is specified in [url].
-   *
-   * See [openUrl] for details.
-   */
+  /// Opens a HTTP connection using the PATCH method.
+  ///
+  /// The URL to use is specified in [url].
+  ///
+  /// See [openUrl] for details.
   Future<HttpClientRequest> patchUrl(Uri url);
 
-  /**
-   * Opens a HTTP connection using the HEAD method.
-   *
-   * The server is specified using [host] and [port], and the path
-   * (including a possible query) is specified using [path].
-   *
-   * See [open] for details.
-   */
+  /// Opens a HTTP connection using the HEAD method.
+  ///
+  /// The server is specified using [host] and [port], and the path
+  /// (including a possible query) is specified using [path].
+  ///
+  /// See [open] for details.
   Future<HttpClientRequest> head(String host, int port, String path);
 
-  /**
-   * Opens a HTTP connection using the HEAD method.
-   *
-   * The URL to use is specified in [url].
-   *
-   * See [openUrl] for details.
-   */
+  /// Opens a HTTP connection using the HEAD method.
+  ///
+  /// The URL to use is specified in [url].
+  ///
+  /// See [openUrl] for details.
   Future<HttpClientRequest> headUrl(Uri url);
 
-  /**
-   * Sets the function to be called when a site is requesting
-   * authentication.
-   *
-   * The URL requested, the authentication scheme and the security realm
-   * from the server are passed in the arguments [f.url], [f.scheme] and
-   * [f.realm].
-   *
-   * The function returns a [Future] which should complete when the
-   * authentication has been resolved. If credentials cannot be
-   * provided the [Future] should complete with `false`. If
-   * credentials are available the function should add these using
-   * [addCredentials] before completing the [Future] with the value
-   * `true`.
-   *
-   * If the [Future] completes with `true` the request will be retried
-   * using the updated credentials, however, the retried request will not
-   * carry the original request payload. Otherwise response processing will
-   * continue normally.
-   *
-   * If it is known that the remote server requires authentication for all
-   * requests, it is advisable to use [addCredentials] directly, or manually
-   * set the `'authorization'` header on the request to avoid the overhead
-   * of a failed request, or issues due to missing request payload on retried
-   * request.
-   */
-  void set authenticate(Future<bool> f(Uri url, String scheme, String? realm)?);
+  /// Sets the function to be called when a site is requesting
+  /// authentication.
+  ///
+  /// The URL requested, the authentication scheme and the security realm
+  /// from the server are passed in the arguments [f.url], [f.scheme] and
+  /// [f.realm].
+  ///
+  /// The function returns a [Future] which should complete when the
+  /// authentication has been resolved. If credentials cannot be
+  /// provided the [Future] should complete with `false`. If
+  /// credentials are available the function should add these using
+  /// [addCredentials] before completing the [Future] with the value
+  /// `true`.
+  ///
+  /// If the [Future] completes with `true` the request will be retried
+  /// using the updated credentials, however, the retried request will not
+  /// carry the original request payload. Otherwise response processing will
+  /// continue normally.
+  ///
+  /// If it is known that the remote server requires authentication for all
+  /// requests, it is advisable to use [addCredentials] directly, or manually
+  /// set the `'authorization'` header on the request to avoid the overhead
+  /// of a failed request, or issues due to missing request payload on retried
+  /// request.
+  void set authenticate(
+      Future<bool> Function(Uri url, String scheme, String? realm)? f);
 
-  /**
-   * Add credentials to be used for authorizing HTTP requests.
-   */
+  /// Add credentials to be used for authorizing HTTP requests.
   void addCredentials(Uri url, String realm, HttpClientCredentials credentials);
 
-  /**
-   * Sets the function used to resolve the proxy server to be used for
-   * opening a HTTP connection to the specified [url]. If this
-   * function is not set, direct connections will always be used.
-   *
-   * The string returned by [f] must be in the format used by browser
-   * PAC (proxy auto-config) scripts. That is either
-   *
-   *     "DIRECT"
-   *
-   * for using a direct connection or
-   *
-   *     "PROXY host:port"
-   *
-   * for using the proxy server `host` on port `port`.
-   *
-   * A configuration can contain several configuration elements
-   * separated by semicolons, e.g.
-   *
-   *     "PROXY host:port; PROXY host2:port2; DIRECT"
-   *
-   * The static function [findProxyFromEnvironment] on this class can
-   * be used to implement proxy server resolving based on environment
-   * variables.
-   */
-  void set findProxy(String f(Uri url)?);
+  /// Sets the function used to resolve the proxy server to be used for
+  /// opening a HTTP connection to the specified [url]. If this
+  /// function is not set, direct connections will always be used.
+  ///
+  /// The string returned by [f] must be in the format used by browser
+  /// PAC (proxy auto-config) scripts. That is either
+  ///
+  ///     "DIRECT"
+  ///
+  /// for using a direct connection or
+  ///
+  ///     "PROXY host:port"
+  ///
+  /// for using the proxy server `host` on port `port`.
+  ///
+  /// A configuration can contain several configuration elements
+  /// separated by semicolons, e.g.
+  ///
+  ///     "PROXY host:port; PROXY host2:port2; DIRECT"
+  ///
+  /// The static function [findProxyFromEnvironment] on this class can
+  /// be used to implement proxy server resolving based on environment
+  /// variables.
+  void set findProxy(String Function(Uri url)? f);
 
-  /**
-   * Function for resolving the proxy server to be used for a HTTP
-   * connection from the proxy configuration specified through
-   * environment variables.
-   *
-   * The following environment variables are taken into account:
-   *
-   *     http_proxy
-   *     https_proxy
-   *     no_proxy
-   *     HTTP_PROXY
-   *     HTTPS_PROXY
-   *     NO_PROXY
-   *
-   * [:http_proxy:] and [:HTTP_PROXY:] specify the proxy server to use for
-   * http:// urls. Use the format [:hostname:port:]. If no port is used a
-   * default of 1080 will be used. If both are set the lower case one takes
-   * precedence.
-   *
-   * [:https_proxy:] and [:HTTPS_PROXY:] specify the proxy server to use for
-   * https:// urls. Use the format [:hostname:port:]. If no port is used a
-   * default of 1080 will be used. If both are set the lower case one takes
-   * precedence.
-   *
-   * [:no_proxy:] and [:NO_PROXY:] specify a comma separated list of
-   * postfixes of hostnames for which not to use the proxy
-   * server. E.g. the value "localhost,127.0.0.1" will make requests
-   * to both "localhost" and "127.0.0.1" not use a proxy. If both are set
-   * the lower case one takes precedence.
-   *
-   * To activate this way of resolving proxies assign this function to
-   * the [findProxy] property on the [HttpClient].
-   *
-   *     HttpClient client = new HttpClient();
-   *     client.findProxy = HttpClient.findProxyFromEnvironment;
-   *
-   * If you don't want to use the system environment you can use a
-   * different one by wrapping the function.
-   *
-   *     HttpClient client = new HttpClient();
-   *     client.findProxy = (url) {
-   *       return HttpClient.findProxyFromEnvironment(
-   *           url, environment: {"http_proxy": ..., "no_proxy": ...});
-   *     }
-   *
-   * If a proxy requires authentication it is possible to configure
-   * the username and password as well. Use the format
-   * [:username:password@hostname:port:] to include the username and
-   * password. Alternatively the API [addProxyCredentials] can be used
-   * to set credentials for proxies which require authentication.
-   */
+  /// Function for resolving the proxy server to be used for a HTTP
+  /// connection from the proxy configuration specified through
+  /// environment variables.
+  ///
+  /// The following environment variables are taken into account:
+  ///
+  ///     http_proxy
+  ///     https_proxy
+  ///     no_proxy
+  ///     HTTP_PROXY
+  ///     HTTPS_PROXY
+  ///     NO_PROXY
+  ///
+  /// [:http_proxy:] and [:HTTP_PROXY:] specify the proxy server to use for
+  /// http:// urls. Use the format [:hostname:port:]. If no port is used a
+  /// default of 1080 will be used. If both are set the lower case one takes
+  /// precedence.
+  ///
+  /// [:https_proxy:] and [:HTTPS_PROXY:] specify the proxy server to use for
+  /// https:// urls. Use the format [:hostname:port:]. If no port is used a
+  /// default of 1080 will be used. If both are set the lower case one takes
+  /// precedence.
+  ///
+  /// [:no_proxy:] and [:NO_PROXY:] specify a comma separated list of
+  /// postfixes of hostnames for which not to use the proxy
+  /// server. E.g. the value "localhost,127.0.0.1" will make requests
+  /// to both "localhost" and "127.0.0.1" not use a proxy. If both are set
+  /// the lower case one takes precedence.
+  ///
+  /// To activate this way of resolving proxies assign this function to
+  /// the [findProxy] property on the [HttpClient].
+  ///
+  ///     HttpClient client = HttpClient();
+  ///     client.findProxy = HttpClient.findProxyFromEnvironment;
+  ///
+  /// If you don't want to use the system environment you can use a
+  /// different one by wrapping the function.
+  ///
+  ///     HttpClient client = HttpClient();
+  ///     client.findProxy = (url) {
+  ///       return HttpClient.findProxyFromEnvironment(
+  ///           url, environment: {"http_proxy": ..., "no_proxy": ...});
+  ///     }
+  ///
+  /// If a proxy requires authentication it is possible to configure
+  /// the username and password as well. Use the format
+  /// [:username:password@hostname:port:] to include the username and
+  /// password. Alternatively the API [addProxyCredentials] can be used
+  /// to set credentials for proxies which require authentication.
   static String findProxyFromEnvironment(Uri url,
       {Map<String, String>? environment}) {
     HttpOverrides? overrides = HttpOverrides.current;
@@ -1859,58 +1599,54 @@
     return overrides.findProxyFromEnvironment(url, environment);
   }
 
-  /**
-   * Sets the function to be called when a proxy is requesting
-   * authentication.
-   *
-   * Information on the proxy in use, the authentication scheme
-   * and the security realm for the authentication
-   * are passed in the arguments [f.host], [f.port], [f.scheme] and [f.realm].
-   *
-   * The function returns a [Future] which should complete when the
-   * authentication has been resolved. If credentials cannot be
-   * provided the [Future] should complete with `false`. If
-   * credentials are available the function should add these using
-   * [addProxyCredentials] before completing the [Future] with the value
-   * `true`.
-   *
-   * If the [Future] completes with `true` the request will be retried
-   * using the updated credentials. Otherwise response processing will
-   * continue normally.
-   */
+  /// Sets the function to be called when a proxy is requesting
+  /// authentication.
+  ///
+  /// Information on the proxy in use, the authentication scheme
+  /// and the security realm for the authentication
+  /// are passed in the arguments [f.host], [f.port], [f.scheme] and [f.realm].
+  ///
+  /// The function returns a [Future] which should complete when the
+  /// authentication has been resolved. If credentials cannot be
+  /// provided the [Future] should complete with `false`. If
+  /// credentials are available the function should add these using
+  /// [addProxyCredentials] before completing the [Future] with the value
+  /// `true`.
+  ///
+  /// If the [Future] completes with `true` the request will be retried
+  /// using the updated credentials. Otherwise response processing will
+  /// continue normally.
   void set authenticateProxy(
-      Future<bool> f(String host, int port, String scheme, String? realm)?);
+      Future<bool> Function(
+              String host, int port, String scheme, String? realm)?
+          f);
 
-  /**
-   * Add credentials to be used for authorizing HTTP proxies.
-   */
+  /// Add credentials to be used for authorizing HTTP proxies.
   void addProxyCredentials(
       String host, int port, String realm, HttpClientCredentials credentials);
 
-  /**
-   * Sets a callback that will decide whether to accept a secure connection
-   * with a server certificate that cannot be authenticated by any of our
-   * trusted root certificates.
-   *
-   * When an secure HTTP request if made, using this HttpClient, and the
-   * server returns a server certificate that cannot be authenticated, the
-   * callback is called asynchronously with the [X509Certificate] object and
-   * the server's hostname and port.  If the value of [badCertificateCallback]
-   * is `null`, the bad certificate is rejected, as if the callback
-   * returned `false`
-   *
-   * If the callback returns true, the secure connection is accepted and the
-   * [:Future<HttpClientRequest>:] that was returned from the call making the
-   * request completes with a valid HttpRequest object. If the callback returns
-   * false, the [:Future<HttpClientRequest>:] completes with an exception.
-   *
-   * If a bad certificate is received on a connection attempt, the library calls
-   * the function that was the value of badCertificateCallback at the time
-   * the request is made, even if the value of badCertificateCallback
-   * has changed since then.
-   */
+  /// Sets a callback that will decide whether to accept a secure connection
+  /// with a server certificate that cannot be authenticated by any of our
+  /// trusted root certificates.
+  ///
+  /// When an secure HTTP request if made, using this HttpClient, and the
+  /// server returns a server certificate that cannot be authenticated, the
+  /// callback is called asynchronously with the [X509Certificate] object and
+  /// the server's hostname and port.  If the value of [badCertificateCallback]
+  /// is `null`, the bad certificate is rejected, as if the callback
+  /// returned `false`
+  ///
+  /// If the callback returns true, the secure connection is accepted and the
+  /// `Future<HttpClientRequest>` that was returned from the call making the
+  /// request completes with a valid HttpRequest object. If the callback returns
+  /// false, the `Future<HttpClientRequest>` completes with an exception.
+  ///
+  /// If a bad certificate is received on a connection attempt, the library calls
+  /// the function that was the value of badCertificateCallback at the time
+  /// the request is made, even if the value of badCertificateCallback
+  /// has changed since then.
   void set badCertificateCallback(
-      bool callback(X509Certificate cert, String host, int port)?);
+      bool Function(X509Certificate cert, String host, int port)? callback);
 
   /// Shuts down the HTTP client.
   ///
@@ -1923,84 +1659,77 @@
   void close({bool force = false});
 }
 
-/**
- * HTTP request for a client connection.
- *
- * To set up a request, set the headers using the headers property
- * provided in this class and write the data to the body of the request.
- * HttpClientRequest is an [IOSink]. Use the methods from IOSink,
- * such as writeCharCode(), to write the body of the HTTP
- * request. When one of the IOSink methods is used for the first
- * time, the request header is sent. Calling any methods that
- * change the header after it is sent throws an exception.
- *
- * When writing string data through the [IOSink] the
- * encoding used is determined from the "charset" parameter of
- * the "Content-Type" header.
- *
- *     HttpClientRequest request = ...
- *     request.headers.contentType
- *         = new ContentType("application", "json", charset: "utf-8");
- *     request.write(...);  // Strings written will be UTF-8 encoded.
- *
- * If no charset is provided the default of ISO-8859-1 (Latin 1) is
- * be used.
- *
- *     HttpClientRequest request = ...
- *     request.headers.add(HttpHeaders.contentTypeHeader, "text/plain");
- *     request.write(...);  // Strings written will be ISO-8859-1 encoded.
- *
- * An exception is thrown if you use an unsupported encoding and the
- * `write()` method being used takes a string parameter.
- */
+/// HTTP request for a client connection.
+///
+/// To set up a request, set the headers using the headers property
+/// provided in this class and write the data to the body of the request.
+/// `HttpClientRequest` is an [IOSink]. Use the methods from IOSink,
+/// such as `writeCharCode()`, to write the body of the HTTP
+/// request. When one of the IOSink methods is used for the first
+/// time, the request header is sent. Calling any methods that
+/// change the header after it is sent throws an exception.
+///
+/// When writing string data through the [IOSink] the
+/// encoding used is determined from the "charset" parameter of
+/// the "Content-Type" header.
+///
+/// ```dart import:convert
+/// var client = HttpClient();
+/// HttpClientRequest request = await client.get('localhost', 80, '/file.txt');
+/// request.headers.contentType =
+///     ContentType('application', 'json', charset: 'utf-8');
+/// request.write('text content👍🎯'); // Strings written will be UTF-8 encoded.
+/// ```
+///
+/// If no charset is provided the default of ISO-8859-1 (Latin 1) is used.
+///
+/// ```dart
+/// var client = HttpClient();
+/// HttpClientRequest request = await client.get('localhost', 80, '/file.txt');
+/// request.headers.add(HttpHeaders.contentTypeHeader, "text/plain");
+/// request.write('blåbærgrød'); // Strings written will be ISO-8859-1 encoded
+/// ```
+///
+/// An exception is thrown if you use an unsupported encoding and the
+/// `write()` method being used takes a string parameter.
 abstract class HttpClientRequest implements IOSink {
-  /**
-   * The requested persistent connection state.
-   *
-   * The default value is `true`.
-   */
+  /// The requested persistent connection state.
+  ///
+  /// The default value is `true`.
   bool persistentConnection = true;
 
-  /**
-   * Whether to follow redirects automatically.
-   *
-   * Set this property to `false` if this request should not
-   * automatically follow redirects. The default is `true`.
-   *
-   * Automatic redirect will only happen for "GET" and "HEAD" requests
-   * and only for the status codes [HttpStatus.movedPermanently]
-   * (301), [HttpStatus.found] (302),
-   * [HttpStatus.movedTemporarily] (302, alias for
-   * [HttpStatus.found]), [HttpStatus.seeOther] (303),
-   * [HttpStatus.temporaryRedirect] (307) and
-   * [HttpStatus.permanentRedirect] (308). For
-   * [HttpStatus.seeOther] (303) automatic redirect will also happen
-   * for "POST" requests with the method changed to "GET" when
-   * following the redirect.
-   *
-   * All headers added to the request will be added to the redirection
-   * request(s). However, any body send with the request will not be
-   * part of the redirection request(s).
-   */
+  /// Whether to follow redirects automatically.
+  ///
+  /// Set this property to `false` if this request should not
+  /// automatically follow redirects. The default is `true`.
+  ///
+  /// Automatic redirect will only happen for "GET" and "HEAD" requests
+  /// and only for the status codes [HttpStatus.movedPermanently]
+  /// (301), [HttpStatus.found] (302),
+  /// [HttpStatus.movedTemporarily] (302, alias for
+  /// [HttpStatus.found]), [HttpStatus.seeOther] (303),
+  /// [HttpStatus.temporaryRedirect] (307) and
+  /// [HttpStatus.permanentRedirect] (308). For
+  /// [HttpStatus.seeOther] (303) automatic redirect will also happen
+  /// for "POST" requests with the method changed to "GET" when
+  /// following the redirect.
+  ///
+  /// All headers added to the request will be added to the redirection
+  /// request(s). However, any body send with the request will not be
+  /// part of the redirection request(s).
   bool followRedirects = true;
 
-  /**
-   * Set this property to the maximum number of redirects to follow
-   * when [followRedirects] is `true`. If this number is exceeded
-   * an error event will be added with a [RedirectException].
-   *
-   * The default value is 5.
-   */
+  /// Set this property to the maximum number of redirects to follow
+  /// when [followRedirects] is `true`. If this number is exceeded
+  /// an error event will be added with a [RedirectException].
+  ///
+  /// The default value is 5.
   int maxRedirects = 5;
 
-  /**
-   * The method of the request.
-   */
+  /// The method of the request.
   String get method;
 
-  /**
-   * The uri of the request.
-   */
+  /// The uri of the request.
   Uri get uri;
 
   /// Gets and sets the content length of the request.
@@ -2009,28 +1738,22 @@
   /// -1, which is also the default.
   int contentLength = -1;
 
-  /**
-   * Gets or sets if the [HttpClientRequest] should buffer output.
-   *
-   * Default value is `true`.
-   *
-   * __Note__: Disabling buffering of the output can result in very poor
-   * performance, when writing many small chunks.
-   */
+  /// Gets or sets if the [HttpClientRequest] should buffer output.
+  ///
+  /// Default value is `true`.
+  ///
+  /// __Note__: Disabling buffering of the output can result in very poor
+  /// performance, when writing many small chunks.
   bool bufferOutput = true;
 
-  /**
-   * Returns the client request headers.
-   *
-   * The client request headers can be modified until the client
-   * request body is written to or closed. After that they become
-   * immutable.
-   */
+  /// Returns the client request headers.
+  ///
+  /// The client request headers can be modified until the client
+  /// request body is written to or closed. After that they become
+  /// immutable.
   HttpHeaders get headers;
 
-  /**
-   * Cookies to present to the server (in the 'cookie' header).
-   */
+  /// Cookies to present to the server (in the 'cookie' header).
   List<Cookie> get cookies;
 
   /// A [HttpClientResponse] future that will complete once the response is
@@ -2040,9 +1763,7 @@
   /// complete with an error.
   Future<HttpClientResponse> get done;
 
-  /**
-   * Close the request for input. Returns the value of [done].
-   */
+  /// Close the request for input. Returns the value of [done].
   Future<HttpClientResponse> close();
 
   /// Gets information about the client connection.
@@ -2064,8 +1785,9 @@
   /// the request has been aborted
   ///
   /// ```dart import:async
-  /// HttpClientRequst request = ...
-  /// request.write();
+  /// var client = HttpClient();
+  /// HttpClientRequest request = await client.get('localhost', 80, '/file.txt');
+  /// request.write('request content');
   /// Timer(Duration(seconds: 1), () {
   ///   request.abort();
   /// });
@@ -2079,48 +1801,44 @@
   void abort([Object? exception, StackTrace? stackTrace]);
 }
 
-/**
- * HTTP response for a client connection.
- *
- * The body of a [HttpClientResponse] object is a
- * [Stream] of data from the server. Listen to the body to handle
- * the data and be notified when the entire body is received.
- *
- *     new HttpClient().get('localhost', 80, '/file.txt')
- *          .then((HttpClientRequest request) => request.close())
- *          .then((HttpClientResponse response) {
- *            response.transform(utf8.decoder).listen((contents) {
- *              // handle data
- *            });
- *          });
- */
+/// HTTP response for a client connection.
+///
+/// The body of a [HttpClientResponse] object is a [Stream] of data from the
+/// server. Use [Stream] methods like [`transform`][Stream.transform] and
+/// [`join`][Stream.join] to access the data.
+///
+/// ```dart import:convert
+/// var client = HttpClient();
+/// try {
+///   HttpClientRequest request = await client.get('localhost', 80, '/file.txt');
+///   HttpClientResponse response = await request.close();
+///   final stringData = await response.transform(utf8.decoder).join();
+///   print(stringData);
+/// } finally {
+///   client.close();
+/// }
+/// ```
 abstract class HttpClientResponse implements Stream<List<int>> {
-  /**
-   * Returns the status code.
-   *
-   * The status code must be set before the body is written
-   * to. Setting the status code after writing to the body will throw
-   * a `StateError`.
-   */
+  /// Returns the status code.
+  ///
+  /// The status code must be set before the body is written
+  /// to. Setting the status code after writing to the body will throw
+  /// a `StateError`.
   int get statusCode;
 
-  /**
-   * Returns the reason phrase associated with the status code.
-   *
-   * The reason phrase must be set before the body is written
-   * to. Setting the reason phrase after writing to the body will throw
-   * a `StateError`.
-   */
+  /// Returns the reason phrase associated with the status code.
+  ///
+  /// The reason phrase must be set before the body is written
+  /// to. Setting the reason phrase after writing to the body will throw
+  /// a `StateError`.
   String get reasonPhrase;
 
-  /**
-   * Returns the content length of the response body. Returns -1 if the size of
-   * the response body is not known in advance.
-   *
-   * If the content length needs to be set, it must be set before the
-   * body is written to. Setting the content length after writing to the body
-   * will throw a `StateError`.
-   */
+  /// Returns the content length of the response body. Returns -1 if the size of
+  /// the response body is not known in advance.
+  ///
+  /// If the content length needs to be set, it must be set before the
+  /// body is written to. Setting the content length after writing to the body
+  /// will throw a `StateError`.
   int get contentLength;
 
   /// The compression state of the response.
@@ -2131,82 +1849,64 @@
   @Since("2.4")
   HttpClientResponseCompressionState get compressionState;
 
-  /**
-   * Gets the persistent connection state returned by the server.
-   *
-   * If the persistent connection state needs to be set, it must be
-   * set before the body is written to. Setting the persistent connection state
-   * after writing to the body will throw a `StateError`.
-   */
+  /// Gets the persistent connection state returned by the server.
+  ///
+  /// If the persistent connection state needs to be set, it must be
+  /// set before the body is written to. Setting the persistent connection state
+  /// after writing to the body will throw a `StateError`.
   bool get persistentConnection;
 
-  /**
-   * Returns whether the status code is one of the normal redirect
-   * codes [HttpStatus.movedPermanently], [HttpStatus.found],
-   * [HttpStatus.movedTemporarily], [HttpStatus.seeOther] and
-   * [HttpStatus.temporaryRedirect].
-   */
+  /// Returns whether the status code is one of the normal redirect
+  /// codes [HttpStatus.movedPermanently], [HttpStatus.found],
+  /// [HttpStatus.movedTemporarily], [HttpStatus.seeOther] and
+  /// [HttpStatus.temporaryRedirect].
   bool get isRedirect;
 
-  /**
-   * Returns the series of redirects this connection has been through. The
-   * list will be empty if no redirects were followed. [redirects] will be
-   * updated both in the case of an automatic and a manual redirect.
-   */
+  /// Returns the series of redirects this connection has been through. The
+  /// list will be empty if no redirects were followed. [redirects] will be
+  /// updated both in the case of an automatic and a manual redirect.
   List<RedirectInfo> get redirects;
 
-  /**
-   * Redirects this connection to a new URL. The default value for
-   * [method] is the method for the current request. The default value
-   * for [url] is the value of the [HttpHeaders.locationHeader] header of
-   * the current response. All body data must have been read from the
-   * current response before calling [redirect].
-   *
-   * All headers added to the request will be added to the redirection
-   * request. However, any body sent with the request will not be
-   * part of the redirection request.
-   *
-   * If [followLoops] is set to `true`, redirect will follow the redirect,
-   * even if the URL was already visited. The default value is `false`.
-   *
-   * The method will ignore [HttpClientRequest.maxRedirects]
-   * and will always perform the redirect.
-   */
+  /// Redirects this connection to a new URL. The default value for
+  /// [method] is the method for the current request. The default value
+  /// for [url] is the value of the [HttpHeaders.locationHeader] header of
+  /// the current response. All body data must have been read from the
+  /// current response before calling [redirect].
+  ///
+  /// All headers added to the request will be added to the redirection
+  /// request. However, any body sent with the request will not be
+  /// part of the redirection request.
+  ///
+  /// If [followLoops] is set to `true`, redirect will follow the redirect,
+  /// even if the URL was already visited. The default value is `false`.
+  ///
+  /// The method will ignore [HttpClientRequest.maxRedirects]
+  /// and will always perform the redirect.
   Future<HttpClientResponse> redirect(
       [String? method, Uri? url, bool? followLoops]);
 
-  /**
-   * Returns the client response headers.
-   *
-   * The client response headers are immutable.
-   */
+  /// Returns the client response headers.
+  ///
+  /// The client response headers are immutable.
   HttpHeaders get headers;
 
-  /**
-   * Detach the underlying socket from the HTTP client. When the
-   * socket is detached the HTTP client will no longer perform any
-   * operations on it.
-   *
-   * This is normally used when a HTTP upgrade is negotiated and the
-   * communication should continue with a different protocol.
-   */
+  /// Detach the underlying socket from the HTTP client. When the
+  /// socket is detached the HTTP client will no longer perform any
+  /// operations on it.
+  ///
+  /// This is normally used when a HTTP upgrade is negotiated and the
+  /// communication should continue with a different protocol.
   Future<Socket> detachSocket();
 
-  /**
-   * Cookies set by the server (from the 'set-cookie' header).
-   */
+  /// Cookies set by the server (from the 'set-cookie' header).
   List<Cookie> get cookies;
 
-  /**
-   * Returns the certificate of the HTTPS server providing the response.
-   * Returns null if the connection is not a secure TLS or SSL connection.
-   */
+  /// Returns the certificate of the HTTPS server providing the response.
+  /// Returns null if the connection is not a secure TLS or SSL connection.
   X509Certificate? get certificate;
 
-  /**
-   * Gets information about the client connection. Returns `null` if the socket
-   * is not available.
-   */
+  /// Gets information about the client connection. Returns `null` if the socket
+  /// is not available.
   HttpConnectionInfo? get connectionInfo;
 }
 
@@ -2255,67 +1955,41 @@
 
 abstract class HttpClientCredentials {}
 
-/**
- * Represents credentials for basic authentication.
- */
+/// Represents credentials for basic authentication.
 abstract class HttpClientBasicCredentials extends HttpClientCredentials {
   factory HttpClientBasicCredentials(String username, String password) =>
-      new _HttpClientBasicCredentials(username, password);
+      _HttpClientBasicCredentials(username, password);
 }
 
-/**
- * Represents credentials for digest authentication. Digest
- * authentication is only supported for servers using the MD5
- * algorithm and quality of protection (qop) of either "none" or
- * "auth".
- */
+/// Represents credentials for digest authentication. Digest
+/// authentication is only supported for servers using the MD5
+/// algorithm and quality of protection (qop) of either "none" or
+/// "auth".
 abstract class HttpClientDigestCredentials extends HttpClientCredentials {
   factory HttpClientDigestCredentials(String username, String password) =>
-      new _HttpClientDigestCredentials(username, password);
+      _HttpClientDigestCredentials(username, password);
 }
 
-/**
- * Information about an [HttpRequest], [HttpResponse], [HttpClientRequest], or
- * [HttpClientResponse] connection.
- */
+/// Information about an [HttpRequest], [HttpResponse], [HttpClientRequest], or
+/// [HttpClientResponse] connection.
 abstract class HttpConnectionInfo {
   InternetAddress get remoteAddress;
   int get remotePort;
   int get localPort;
 }
 
-/**
- * Redirect information.
- */
+/// Redirect information.
 abstract class RedirectInfo {
-  /**
-   * Returns the status code used for the redirect.
-   */
+  /// Returns the status code used for the redirect.
   int get statusCode;
 
-  /**
-   * Returns the method used for the redirect.
-   */
+  /// Returns the method used for the redirect.
   String get method;
 
-  /**
-   * Returns the location for the redirect.
-   */
+  /// Returns the location for the redirect.
   Uri get location;
 }
 
-/**
- * When detaching a socket from either the [:HttpServer:] or the
- * [:HttpClient:] due to a HTTP connection upgrade there might be
- * unparsed data already read from the socket. This unparsed data
- * together with the detached socket is returned in an instance of
- * this class.
- */
-abstract class DetachedSocket {
-  Socket get socket;
-  List<int> get unparsedData;
-}
-
 class HttpException implements IOException {
   final String message;
   final Uri? uri;
@@ -2323,7 +1997,7 @@
   const HttpException(this.message, {this.uri});
 
   String toString() {
-    var b = new StringBuffer()
+    var b = StringBuffer()
       ..write('HttpException: ')
       ..write(message);
     var uri = this.uri;
diff --git a/sdk/lib/_http/http_date.dart b/sdk/lib/_http/http_date.dart
index 5fd2f34..df8d643 100644
--- a/sdk/lib/_http/http_date.dart
+++ b/sdk/lib/_http/http_date.dart
@@ -4,10 +4,8 @@
 
 part of dart._http;
 
-/**
- * Utility functions for working with dates with HTTP specific date
- * formats.
- */
+/// Utility functions for working with dates with HTTP specific date
+/// formats.
 class HttpDate {
   // From RFC-2616 section "3.3.1 Full Date",
   // http://tools.ietf.org/html/rfc2616#section-3.3.1
@@ -32,14 +30,12 @@
   //              | "May" | "Jun" | "Jul" | "Aug"
   //              | "Sep" | "Oct" | "Nov" | "Dec"
 
-  /**
-   * Format a date according to
-   * [RFC-1123](http://tools.ietf.org/html/rfc1123 "RFC-1123"),
-   * e.g. `Thu, 1 Jan 1970 00:00:00 GMT`.
-   */
+  /// Format a date according to
+  /// [RFC-1123](http://tools.ietf.org/html/rfc1123 "RFC-1123"),
+  /// e.g. `Thu, 1 Jan 1970 00:00:00 GMT`.
   static String format(DateTime date) {
-    const List wkday = const ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
-    const List month = const [
+    const List wkday = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
+    const List month = [
       "Jan",
       "Feb",
       "Mar",
@@ -55,7 +51,7 @@
     ];
 
     DateTime d = date.toUtc();
-    StringBuffer sb = new StringBuffer()
+    StringBuffer sb = StringBuffer()
       ..write(wkday[d.weekday - 1])
       ..write(", ")
       ..write(d.day <= 9 ? "0" : "")
@@ -74,24 +70,22 @@
     return sb.toString();
   }
 
-  /**
-   * Parse a date string in either of the formats
-   * [RFC-1123](http://tools.ietf.org/html/rfc1123 "RFC-1123"),
-   * [RFC-850](http://tools.ietf.org/html/rfc850 "RFC-850") or
-   * ANSI C's asctime() format. These formats are listed here.
-   *
-   *     Thu, 1 Jan 1970 00:00:00 GMT
-   *     Thursday, 1-Jan-1970 00:00:00 GMT
-   *     Thu Jan  1 00:00:00 1970
-   *
-   * For more information see [RFC-2616 section
-   * 3.1.1](http://tools.ietf.org/html/rfc2616#section-3.3.1
-   * "RFC-2616 section 3.1.1").
-   */
+  /// Parse a date string in either of the formats
+  /// [RFC-1123](http://tools.ietf.org/html/rfc1123 "RFC-1123"),
+  /// [RFC-850](http://tools.ietf.org/html/rfc850 "RFC-850") or
+  /// ANSI C's asctime() format. These formats are listed here.
+  ///
+  ///     Thu, 1 Jan 1970 00:00:00 GMT
+  ///     Thursday, 1-Jan-1970 00:00:00 GMT
+  ///     Thu Jan  1 00:00:00 1970
+  ///
+  /// For more information see [RFC-2616 section
+  /// 3.1.1](http://tools.ietf.org/html/rfc2616#section-3.3.1
+  /// "RFC-2616 section 3.1.1").
   static DateTime parse(String date) {
     final int SP = 32;
-    const List wkdays = const ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
-    const List weekdays = const [
+    const List wkdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
+    const List weekdays = [
       "Monday",
       "Tuesday",
       "Wednesday",
@@ -100,7 +94,7 @@
       "Saturday",
       "Sunday"
     ];
-    const List months = const [
+    const List months = [
       "Jan",
       "Feb",
       "Mar",
@@ -124,11 +118,11 @@
 
     void expect(String s) {
       if (date.length - index < s.length) {
-        throw new HttpException("Invalid HTTP date $date");
+        throw HttpException("Invalid HTTP date $date");
       }
       String tmp = date.substring(index, index + s.length);
       if (tmp != s) {
-        throw new HttpException("Invalid HTTP date $date");
+        throw HttpException("Invalid HTTP date $date");
       }
       index += s.length;
     }
@@ -139,7 +133,7 @@
       int pos = date.indexOf(",", index);
       if (pos == -1) {
         int pos = date.indexOf(" ", index);
-        if (pos == -1) throw new HttpException("Invalid HTTP date $date");
+        if (pos == -1) throw HttpException("Invalid HTTP date $date");
         tmp = date.substring(index, pos);
         index = pos + 1;
         weekday = wkdays.indexOf(tmp);
@@ -158,22 +152,22 @@
           return formatRfc850;
         }
       }
-      throw new HttpException("Invalid HTTP date $date");
+      throw HttpException("Invalid HTTP date $date");
     }
 
     int expectMonth(String separator) {
       int pos = date.indexOf(separator, index);
-      if (pos - index != 3) throw new HttpException("Invalid HTTP date $date");
+      if (pos - index != 3) throw HttpException("Invalid HTTP date $date");
       tmp = date.substring(index, pos);
       index = pos + 1;
       int month = months.indexOf(tmp);
       if (month != -1) return month;
-      throw new HttpException("Invalid HTTP date $date");
+      throw HttpException("Invalid HTTP date $date");
     }
 
     int expectNum(String separator) {
       int pos;
-      if (separator.length > 0) {
+      if (separator.isNotEmpty) {
         pos = date.indexOf(separator, index);
       } else {
         pos = date.length;
@@ -184,13 +178,13 @@
         int value = int.parse(tmp);
         return value;
       } on FormatException {
-        throw new HttpException("Invalid HTTP date $date");
+        throw HttpException("Invalid HTTP date $date");
       }
     }
 
     void expectEnd() {
       if (index != date.length) {
-        throw new HttpException("Invalid HTTP date $date");
+        throw HttpException("Invalid HTTP date $date");
       }
     }
 
@@ -220,12 +214,12 @@
       expect("GMT");
     }
     expectEnd();
-    return new DateTime.utc(year, month + 1, day, hours, minutes, seconds, 0);
+    return DateTime.utc(year, month + 1, day, hours, minutes, seconds, 0);
   }
 
   // Parse a cookie date string.
   static DateTime _parseCookieDate(String date) {
-    const List monthsLowerCase = const [
+    const List monthsLowerCase = [
       "jan",
       "feb",
       "mar",
@@ -243,7 +237,7 @@
     int position = 0;
 
     Never error() {
-      throw new HttpException("Invalid cookie date $date");
+      throw HttpException("Invalid cookie date $date");
     }
 
     bool isEnd() => position == date.length;
@@ -287,7 +281,7 @@
       return int.parse(s.substring(0, index));
     }
 
-    var tokens = [];
+    var tokens = <String>[];
     while (!isEnd()) {
       while (!isEnd() && isDelimiter(date[position])) position++;
       int start = position;
@@ -302,7 +296,7 @@
     String? yearStr;
 
     for (var token in tokens) {
-      if (token.length < 1) continue;
+      if (token.isEmpty) continue;
       if (timeStr == null &&
           token.length >= 5 &&
           isDigit(token[0]) &&
@@ -347,6 +341,6 @@
     if (minute > 59) error();
     if (second > 59) error();
 
-    return new DateTime.utc(year, month, dayOfMonth, hour, minute, second, 0);
+    return DateTime.utc(year, month, dayOfMonth, hour, minute, second, 0);
   }
 }
diff --git a/sdk/lib/_http/http_headers.dart b/sdk/lib/_http/http_headers.dart
index 09e5748..2ccf23a 100644
--- a/sdk/lib/_http/http_headers.dart
+++ b/sdk/lib/_http/http_headers.dart
@@ -24,7 +24,7 @@
   _HttpHeaders(this.protocolVersion,
       {int defaultPortForScheme = HttpClient.defaultHttpPort,
       _HttpHeaders? initialHeaders})
-      : _headers = new HashMap<String, List<String>>(),
+      : _headers = HashMap<String, List<String>>(),
         _defaultPortForScheme = defaultPortForScheme {
     if (initialHeaders != null) {
       initialHeaders._headers.forEach((name, value) => _headers[name] = value);
@@ -48,7 +48,7 @@
     if (values == null) return null;
     assert(values.isNotEmpty);
     if (values.length > 1) {
-      throw new HttpException("More than one value for header $name");
+      throw HttpException("More than one value for header $name");
     }
     return values[0];
   }
@@ -99,7 +99,7 @@
     List<String>? values = _headers[name];
     if (values != null) {
       values.remove(_valueToString(value));
-      if (values.length == 0) {
+      if (values.isEmpty) {
         _headers.remove(name);
         _originalHeaderNames?.remove(name);
       }
@@ -116,7 +116,7 @@
     _originalHeaderNames?.remove(name);
   }
 
-  void forEach(void action(String name, List<String> values)) {
+  void forEach(void Function(String name, List<String> values) action) {
     _headers.forEach((String name, List<String> values) {
       String originalName = _originalHeaderName(name);
       action(originalName, values);
@@ -139,7 +139,7 @@
         remove(HttpHeaders.connectionHeader, "close");
       } else {
         if (_contentLength < 0) {
-          throw new HttpException(
+          throw HttpException(
               "Trying to set 'Connection: Keep-Alive' on HTTP 1.0 headers with "
               "no ContentLength");
         }
@@ -162,7 +162,7 @@
     if (protocolVersion == "1.0" &&
         persistentConnection &&
         contentLength == -1) {
-      throw new HttpException(
+      throw HttpException(
           "Trying to clear ContentLength on HTTP 1.0 headers with "
           "'Connection: Keep-Alive' set");
     }
@@ -184,7 +184,7 @@
   void set chunkedTransferEncoding(bool chunkedTransferEncoding) {
     _checkMutable();
     if (chunkedTransferEncoding && protocolVersion == "1.0") {
-      throw new HttpException(
+      throw HttpException(
           "Trying to set 'Transfer-Encoding: Chunked' on HTTP 1.0 headers");
     }
     if (chunkedTransferEncoding == _chunkedTransferEncoding) return;
@@ -377,7 +377,7 @@
     } else if (value is String) {
       contentLength = int.parse(value);
     } else {
-      throw new HttpException("Unexpected type for header named $name");
+      throw HttpException("Unexpected type for header named $name");
     }
   }
 
@@ -395,7 +395,7 @@
     } else if (value is String) {
       _set(HttpHeaders.dateHeader, value);
     } else {
-      throw new HttpException("Unexpected type for header named $name");
+      throw HttpException("Unexpected type for header named $name");
     }
   }
 
@@ -405,7 +405,7 @@
     } else if (value is String) {
       _set(HttpHeaders.expiresHeader, value);
     } else {
-      throw new HttpException("Unexpected type for header named $name");
+      throw HttpException("Unexpected type for header named $name");
     }
   }
 
@@ -415,7 +415,7 @@
     } else if (value is String) {
       _set(HttpHeaders.ifModifiedSinceHeader, value);
     } else {
-      throw new HttpException("Unexpected type for header named $name");
+      throw HttpException("Unexpected type for header named $name");
     }
   }
 
@@ -448,11 +448,11 @@
       }
       _set(HttpHeaders.hostHeader, value);
     } else {
-      throw new HttpException("Unexpected type for header named $name");
+      throw HttpException("Unexpected type for header named $name");
     }
   }
 
-  void _addConnection(String name, value) {
+  void _addConnection(String name, String value) {
     var lowerCaseValue = value.toLowerCase();
     if (lowerCaseValue == 'close') {
       _persistentConnection = false;
@@ -487,7 +487,7 @@
   }
 
   void _checkMutable() {
-    if (!_mutable) throw new HttpException("HTTP headers are not mutable");
+    if (!_mutable) throw HttpException("HTTP headers are not mutable");
   }
 
   void _updateHostHeader() {
@@ -548,17 +548,22 @@
   }
 
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     _headers.forEach((String name, List<String> values) {
       String originalName = _originalHeaderName(name);
-      sb..write(originalName)..write(": ");
+      sb
+        ..write(originalName)
+        ..write(": ");
       bool fold = _foldHeader(name);
       for (int i = 0; i < values.length; i++) {
         if (i > 0) {
           if (fold) {
             sb.write(", ");
           } else {
-            sb..write("\n")..write(originalName)..write(": ");
+            sb
+              ..write("\n")
+              ..write(originalName)
+              ..write(": ");
           }
         }
         sb.write(values[i]);
@@ -620,7 +625,7 @@
         skipWS();
         String value = parseValue();
         try {
-          cookies.add(new _Cookie(name, value));
+          cookies.add(_Cookie(name, value));
         } catch (_) {
           // Skip it, invalid cookie data.
         }
@@ -635,7 +640,9 @@
 
     List<String>? values = _headers[HttpHeaders.cookieHeader];
     if (values != null) {
-      values.forEach((headerValue) => parseCookieString(headerValue));
+      for (var headerValue in values) {
+        parseCookieString(headerValue);
+      }
     }
     return cookies;
   }
@@ -643,7 +650,7 @@
   static String _validateField(String field) {
     for (var i = 0; i < field.length; i++) {
       if (!_HttpParser._isTokenChar(field.codeUnitAt(i))) {
-        throw new FormatException(
+        throw FormatException(
             "Invalid HTTP header field name: ${json.encode(field)}", field, i);
       }
     }
@@ -652,9 +659,9 @@
 
   static Object _validateValue(Object value) {
     if (value is! String) return value;
-    for (var i = 0; i < (value as String).length; i++) {
-      if (!_HttpParser._isValueChar((value as String).codeUnitAt(i))) {
-        throw new FormatException(
+    for (var i = 0; i < (value).length; i++) {
+      if (!_HttpParser._isValueChar((value).codeUnitAt(i))) {
+        throw FormatException(
             "Invalid HTTP header field value: ${json.encode(value)}", value, i);
       }
     }
@@ -675,7 +682,7 @@
     // TODO(40614): Remove once non-nullability is sound.
     Map<String, String?>? nullableParameters = parameters;
     if (nullableParameters != null && nullableParameters.isNotEmpty) {
-      _parameters = new HashMap<String, String?>.from(nullableParameters);
+      _parameters = HashMap<String, String?>.from(nullableParameters);
     }
   }
 
@@ -684,7 +691,7 @@
       String? valueSeparator,
       bool preserveBackslash = false}) {
     // Parse the string.
-    var result = new _HeaderValue();
+    var result = _HeaderValue();
     result._parse(value, parameterSeparator, valueSeparator, preserveBackslash);
     return result;
   }
@@ -701,12 +708,10 @@
     if (token.isEmpty) {
       return false;
     }
-    final delimiters = "\"(),/:;<=>?@[\]{}";
+    final delimiters = "\"(),/:;<=>?@[]{}";
     for (int i = 0; i < token.length; i++) {
       int codeUnit = token.codeUnitAt(i);
-      if (codeUnit <= 32 ||
-          codeUnit >= 127 ||
-          delimiters.indexOf(token[i]) >= 0) {
+      if (codeUnit <= 32 || codeUnit >= 127 || delimiters.contains(token[i])) {
         return false;
       }
     }
@@ -714,12 +719,14 @@
   }
 
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write(_value);
-    var parameters = this._parameters;
-    if (parameters != null && parameters.length > 0) {
+    var parameters = _parameters;
+    if (parameters != null && parameters.isNotEmpty) {
       parameters.forEach((String name, String? value) {
-        sb..write("; ")..write(name);
+        sb
+          ..write("; ")
+          ..write(name);
         if (value != null) {
           sb.write("=");
           if (_isToken(value)) {
@@ -737,7 +744,9 @@
                 start = i;
               }
             }
-            sb..write(value.substring(start))..write('"');
+            sb
+              ..write(value.substring(start))
+              ..write('"');
           }
         }
       });
@@ -773,7 +782,7 @@
 
     void expect(String expected) {
       if (done() || s[index] != expected) {
-        throw new HttpException("Failed to parse header value");
+        throw HttpException("Failed to parse header value");
       }
       index++;
     }
@@ -806,13 +815,13 @@
       String parseParameterValue() {
         if (!done() && s[index] == "\"") {
           // Parse quoted value.
-          StringBuffer sb = new StringBuffer();
+          StringBuffer sb = StringBuffer();
           index++;
           while (!done()) {
             var char = s[index];
             if (char == "\\") {
               if (index + 1 == s.length) {
-                throw new HttpException("Failed to parse header value");
+                throw HttpException("Failed to parse header value");
               }
               if (preserveBackslash && s[index + 1] != "\"") {
                 sb.write(char);
@@ -826,7 +835,7 @@
             sb.write(char);
             index++;
           }
-          throw new HttpException("Failed to parse header value");
+          throw HttpException("Failed to parse header value");
         } else {
           // Parse non-quoted value.
           return parseValue();
@@ -901,7 +910,7 @@
   _ContentType._();
 
   static _ContentType parse(String value) {
-    var result = new _ContentType._();
+    var result = _ContentType._();
     result._parse(value, ";", null, false);
     int index = result._value.indexOf("/");
     if (index == -1 || index == (result._value.length - 1)) {
@@ -1033,8 +1042,8 @@
     }
 
     _name = _validateName(parseName());
-    if (done() || _name.length == 0) {
-      throw new HttpException("Failed to parse header value [$s]");
+    if (done() || _name.isEmpty) {
+      throw HttpException("Failed to parse header value [$s]");
     }
     index++; // Skip the = character.
     _value = _validateValue(parseValue());
@@ -1044,20 +1053,31 @@
   }
 
   String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb..write(_name)..write("=")..write(_value);
+    StringBuffer sb = StringBuffer();
+    sb
+      ..write(_name)
+      ..write("=")
+      ..write(_value);
     var expires = this.expires;
     if (expires != null) {
-      sb..write("; Expires=")..write(HttpDate.format(expires));
+      sb
+        ..write("; Expires=")
+        ..write(HttpDate.format(expires));
     }
     if (maxAge != null) {
-      sb..write("; Max-Age=")..write(maxAge);
+      sb
+        ..write("; Max-Age=")
+        ..write(maxAge);
     }
     if (domain != null) {
-      sb..write("; Domain=")..write(domain);
+      sb
+        ..write("; Domain=")
+        ..write(domain);
     }
     if (path != null) {
-      sb..write("; Path=")..write(path);
+      sb
+        ..write("; Path=")
+        ..write(path);
     }
     if (secure) sb.write("; Secure");
     if (httpOnly) sb.write("; HttpOnly");
@@ -1065,7 +1085,7 @@
   }
 
   static String _validateName(String newName) {
-    const separators = const [
+    const separators = [
       "(",
       ")",
       "<",
@@ -1084,13 +1104,13 @@
       "{",
       "}"
     ];
-    if (newName == null) throw new ArgumentError.notNull("name");
+    if (newName == null) throw ArgumentError.notNull("name");
     for (int i = 0; i < newName.length; i++) {
       int codeUnit = newName.codeUnitAt(i);
       if (codeUnit <= 32 ||
           codeUnit >= 127 ||
-          separators.indexOf(newName[i]) >= 0) {
-        throw new FormatException(
+          separators.contains(newName[i])) {
+        throw FormatException(
             "Invalid character in cookie name, code unit: '$codeUnit'",
             newName,
             i);
@@ -1100,7 +1120,7 @@
   }
 
   static String _validateValue(String newValue) {
-    if (newValue == null) throw new ArgumentError.notNull("value");
+    if (newValue == null) throw ArgumentError.notNull("value");
     // Per RFC 6265, consider surrounding "" as part of the value, but otherwise
     // double quotes are not allowed.
     int start = 0;
@@ -1119,7 +1139,7 @@
           (codeUnit >= 0x2D && codeUnit <= 0x3A) ||
           (codeUnit >= 0x3C && codeUnit <= 0x5B) ||
           (codeUnit >= 0x5D && codeUnit <= 0x7E))) {
-        throw new FormatException(
+        throw FormatException(
             "Invalid character in cookie value, code unit: '$codeUnit'",
             newValue,
             i);
diff --git a/sdk/lib/_http/http_impl.dart b/sdk/lib/_http/http_impl.dart
index 6845f45..6c9c786 100644
--- a/sdk/lib/_http/http_impl.dart
+++ b/sdk/lib/_http/http_impl.dart
@@ -7,7 +7,7 @@
 abstract class HttpProfiler {
   static const _kType = 'HttpProfile';
 
-  static Map<int, _HttpProfileData> _profile = {};
+  static final Map<int, _HttpProfileData> _profile = {};
 
   static _HttpProfileData startRequest(
     String method,
@@ -96,21 +96,22 @@
     _updated();
   }
 
-  Map formatHeaders(r) {
-    final headers = <String, List<String>>{};
-    r.headers.forEach((name, values) {
-      headers[name] = values;
+  Map formatHeaders(HttpHeaders headers) {
+    final newHeaders = <String, List<String>>{};
+    headers.forEach((name, values) {
+      newHeaders[name] = values;
     });
-    return headers;
+    return newHeaders;
   }
 
-  Map? formatConnectionInfo(r) => r.connectionInfo == null
-      ? null
-      : {
-          'localPort': r.connectionInfo?.localPort,
-          'remoteAddress': r.connectionInfo?.remoteAddress.address,
-          'remotePort': r.connectionInfo?.remotePort,
-        };
+  Map? formatConnectionInfo(HttpConnectionInfo? connectionInfo) =>
+      connectionInfo == null
+          ? null
+          : {
+              'localPort': connectionInfo.localPort,
+              'remoteAddress': connectionInfo.remoteAddress.address,
+              'remotePort': connectionInfo.remotePort,
+            };
 
   void finishRequest({
     required HttpClientRequest request,
@@ -121,8 +122,8 @@
     requestDetails = <String, dynamic>{
       // TODO(bkonyi): consider exposing certificate information?
       // 'certificate': response.certificate,
-      'headers': formatHeaders(request),
-      'connectionInfo': formatConnectionInfo(request),
+      'headers': formatHeaders(request.headers),
+      'connectionInfo': formatConnectionInfo(request.connectionInfo),
       'contentLength': request.contentLength,
       'cookies': [
         for (final cookie in request.cookies) cookie.toString(),
@@ -153,9 +154,9 @@
     }
 
     responseDetails = <String, dynamic>{
-      'headers': formatHeaders(response),
+      'headers': formatHeaders(response.headers),
       'compressionState': response.compressionState.toString(),
-      'connectionInfo': formatConnectionInfo(response),
+      'connectionInfo': formatConnectionInfo(response.connectionInfo),
       'contentLength': response.contentLength,
       'cookies': [
         for (final cookie in response.cookies) cookie.toString(),
@@ -281,7 +282,7 @@
   int get lastUpdateTime => _lastUpdateTime;
   int _lastUpdateTime = 0;
 
-  TimelineTask _timeline;
+  final TimelineTask _timeline;
   late TimelineTask _responseTimeline;
 }
 
@@ -313,7 +314,7 @@
   // Start with 1024 bytes.
   static const int _INIT_SIZE = 1024;
 
-  static final _emptyList = new Uint8List(0);
+  static final _emptyList = Uint8List(0);
 
   int _length = 0;
   Uint8List _buffer;
@@ -321,7 +322,7 @@
   _CopyingBytesBuilder([int initialCapacity = 0])
       : _buffer = (initialCapacity <= 0)
             ? _emptyList
-            : new Uint8List(_pow2roundup(initialCapacity));
+            : Uint8List(_pow2roundup(initialCapacity));
 
   void add(List<int> bytes) {
     int bytesLength = bytes.length;
@@ -361,23 +362,22 @@
     } else {
       newSize = _pow2roundup(newSize);
     }
-    var newBuffer = new Uint8List(newSize);
+    var newBuffer = Uint8List(newSize);
     newBuffer.setRange(0, _buffer.length, _buffer);
     _buffer = newBuffer;
   }
 
   Uint8List takeBytes() {
     if (_length == 0) return _emptyList;
-    var buffer =
-        new Uint8List.view(_buffer.buffer, _buffer.offsetInBytes, _length);
+    var buffer = Uint8List.view(_buffer.buffer, _buffer.offsetInBytes, _length);
     clear();
     return buffer;
   }
 
   Uint8List toBytes() {
     if (_length == 0) return _emptyList;
-    return new Uint8List.fromList(
-        new Uint8List.view(_buffer.buffer, _buffer.offsetInBytes, _length));
+    return Uint8List.fromList(
+        Uint8List.view(_buffer.buffer, _buffer.offsetInBytes, _length));
   }
 
   int get length => _length;
@@ -405,12 +405,12 @@
 
 const int _OUTGOING_BUFFER_SIZE = 8 * 1024;
 
-typedef void _BytesConsumer(List<int> bytes);
+typedef _BytesConsumer = void Function(List<int> bytes);
 
 class _HttpIncoming extends Stream<Uint8List> {
   final int _transferLength;
-  final Completer _dataCompleter = new Completer();
-  Stream<Uint8List> _stream;
+  final _dataCompleter = Completer<bool>();
+  final Stream<Uint8List> _stream;
 
   bool fullBodyRead = false;
 
@@ -436,17 +436,17 @@
 
   _HttpIncoming(this.headers, this._transferLength, this._stream);
 
-  StreamSubscription<Uint8List> listen(void onData(Uint8List event)?,
-      {Function? onError, void onDone()?, bool? cancelOnError}) {
+  StreamSubscription<Uint8List> listen(void Function(Uint8List event)? onData,
+      {Function? onError, void Function()? onDone, bool? cancelOnError}) {
     hasSubscriber = true;
     return _stream.handleError((error) {
-      throw new HttpException(error.message, uri: uri);
+      throw HttpException(error.message, uri: uri);
     }).listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
 
   // Is completed once all data have been received.
-  Future get dataDone => _dataCompleter.future;
+  Future<bool> get dataDone => _dataCompleter.future;
 
   void close(bool closing) {
     fullBodyRead = true;
@@ -519,8 +519,8 @@
     }
   }
 
-  StreamSubscription<Uint8List> listen(void onData(Uint8List event)?,
-      {Function? onError, void onDone()?, bool? cancelOnError}) {
+  StreamSubscription<Uint8List> listen(void Function(Uint8List event)? onData,
+      {Function? onError, void Function()? onDone, bool? cancelOnError}) {
     return _incoming.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
@@ -621,7 +621,7 @@
     List<String>? values = headers[HttpHeaders.setCookieHeader];
     if (values != null) {
       for (var value in values) {
-        cookies.add(new Cookie.fromSetCookieValue(value));
+        cookies.add(Cookie.fromSetCookieValue(value));
       }
     }
     _cookies = cookies;
@@ -654,15 +654,15 @@
     if (url == null) {
       String? location = headers.value(HttpHeaders.locationHeader);
       if (location == null) {
-        throw new StateError("Response has no Location header for redirect");
+        throw StateError("Response has no Location header for redirect");
       }
       url = Uri.parse(location);
     }
     if (followLoops != true) {
       for (var redirect in redirects) {
         if (redirect.location == url) {
-          return new Future.error(
-              new RedirectException("Redirect loop detected", redirects));
+          return Future.error(
+              RedirectException("Redirect loop detected", redirects));
         }
       }
     }
@@ -670,21 +670,21 @@
         ._openUrlFromRequest(method, url, _httpRequest)
         .then((request) {
       request._responseRedirects
-        ..addAll(this.redirects)
-        ..add(new _RedirectInfo(statusCode, method!, url!));
+        ..addAll(redirects)
+        ..add(_RedirectInfo(statusCode, method!, url!));
       return request.close();
     });
   }
 
-  StreamSubscription<Uint8List> listen(void onData(Uint8List event)?,
-      {Function? onError, void onDone()?, bool? cancelOnError}) {
+  StreamSubscription<Uint8List> listen(void Function(Uint8List event)? onData,
+      {Function? onError, void Function()? onDone, bool? cancelOnError}) {
     if (_incoming.upgraded) {
       _profileData?.finishResponseWithError('Connection was upgraded');
       // If upgraded, the connection is already 'removed' form the client.
       // Since listening to upgraded data is 'bogus', simply close and
       // return empty stream subscription.
       _httpRequest._httpClientConnection.destroy();
-      return new Stream<Uint8List>.empty().listen(null, onDone: onDone);
+      return Stream<Uint8List>.empty().listen(null, onDone: onDone);
     }
     Stream<Uint8List> stream = _incoming;
     if (compressionState == HttpClientResponseCompressionState.decompressed) {
@@ -781,7 +781,7 @@
       if (proxyAuth) {
         var authenticateProxy = _httpClient._authenticateProxy;
         if (authenticateProxy == null) {
-          return new Future.value(false);
+          return Future.value(false);
         }
         var proxy = _httpRequest._proxy;
         if (!proxy.isDirect) {
@@ -791,7 +791,7 @@
       }
       var authenticate = _httpClient._authenticate;
       if (authenticate == null) {
-        return new Future.value(false);
+        return Future.value(false);
       }
       return authenticate(_httpRequest.uri, scheme.toString(), realm);
     }
@@ -801,7 +801,7 @@
     _HeaderValue header =
         _HeaderValue.parse(challenge[0], parameterSeparator: ",");
     _AuthenticationScheme scheme =
-        new _AuthenticationScheme.fromString(header.value);
+        _AuthenticationScheme.fromString(header.value);
     String? realm = header.parameters["realm"];
 
     // See if any matching credentials are available.
@@ -890,7 +890,7 @@
 
 class _StreamSinkImpl<T> implements StreamSink<T> {
   final StreamConsumer<T> _target;
-  final _doneCompleter = new Completer<void>();
+  final _doneCompleter = Completer<void>();
   StreamController<T>? _controllerInstance;
   Completer? _controllerCompleter;
   bool _isClosed = false;
@@ -915,7 +915,7 @@
 
   Future addStream(Stream<T> stream) {
     if (_isBound) {
-      throw new StateError("StreamSink is already bound to a stream");
+      throw StateError("StreamSink is already bound to a stream");
     }
     _isBound = true;
     if (_hasError) return done;
@@ -935,10 +935,10 @@
 
   Future flush() {
     if (_isBound) {
-      throw new StateError("StreamSink is bound to a stream");
+      throw StateError("StreamSink is bound to a stream");
     }
     var controller = _controllerInstance;
-    if (controller == null) return new Future.value(this);
+    if (controller == null) return Future.value(this);
     // Adding an empty stream-controller will return a future that will complete
     // when all data is done.
     _isBound = true;
@@ -951,7 +951,7 @@
 
   Future close() {
     if (_isBound) {
-      throw new StateError("StreamSink is bound to a stream");
+      throw StateError("StreamSink is bound to a stream");
     }
     if (!_isClosed) {
       _isClosed = true;
@@ -986,14 +986,14 @@
 
   StreamController<T> get _controller {
     if (_isBound) {
-      throw new StateError("StreamSink is bound to a stream");
+      throw StateError("StreamSink is bound to a stream");
     }
     if (_isClosed) {
-      throw new StateError("StreamSink is closed");
+      throw StateError("StreamSink is closed");
     }
     if (_controllerInstance == null) {
-      _controllerInstance = new StreamController<T>(sync: true);
-      _controllerCompleter = new Completer();
+      _controllerInstance = StreamController<T>(sync: true);
+      _controllerCompleter = Completer();
       _target.addStream(_controller.stream).then((_) {
         if (_isBound) {
           // A new stream takes over - forward values to that stream.
@@ -1034,7 +1034,7 @@
 
   void set encoding(Encoding value) {
     if (!_encodingMutable) {
-      throw new StateError("IOSink encoding is not mutable");
+      throw StateError("IOSink encoding is not mutable");
     }
     _encoding = value;
   }
@@ -1072,7 +1072,7 @@
   }
 
   void writeCharCode(int charCode) {
-    write(new String.fromCharCode(charCode));
+    write(String.fromCharCode(charCode));
   }
 }
 
@@ -1092,7 +1092,7 @@
       _HttpProfileData? profileData,
       {_HttpHeaders? initialHeaders})
       : _uri = uri,
-        headers = new _HttpHeaders(protocolVersion,
+        headers = _HttpHeaders(protocolVersion,
             defaultPortForScheme: uri.scheme == 'https'
                 ? HttpClient.defaultHttpsPort
                 : HttpClient.defaultHttpPort,
@@ -1115,7 +1115,7 @@
 
   bool get bufferOutput => _bufferOutput;
   void set bufferOutput(bool bufferOutput) {
-    if (_outgoing.headersWritten) throw new StateError("Header already sent");
+    if (_outgoing.headersWritten) throw StateError("Header already sent");
     _bufferOutput = bufferOutput;
   }
 
@@ -1134,7 +1134,7 @@
   }
 
   void add(List<int> data) {
-    if (data.length == 0) return;
+    if (data.isEmpty) return;
     _profileData?.appendRequestData(Uint8List.fromList(data));
     super.add(data);
   }
@@ -1186,25 +1186,25 @@
 
   int get statusCode => _statusCode;
   void set statusCode(int statusCode) {
-    if (_outgoing.headersWritten) throw new StateError("Header already sent");
+    if (_outgoing.headersWritten) throw StateError("Header already sent");
     _statusCode = statusCode;
   }
 
   String get reasonPhrase => _findReasonPhrase(statusCode);
   void set reasonPhrase(String reasonPhrase) {
-    if (_outgoing.headersWritten) throw new StateError("Header already sent");
+    if (_outgoing.headersWritten) throw StateError("Header already sent");
     _reasonPhrase = reasonPhrase;
   }
 
   Future redirect(Uri location, {int status = HttpStatus.movedTemporarily}) {
-    if (_outgoing.headersWritten) throw new StateError("Header already sent");
+    if (_outgoing.headersWritten) throw StateError("Header already sent");
     statusCode = status;
     headers.set(HttpHeaders.locationHeader, location.toString());
     return close();
   }
 
   Future<Socket> detachSocket({bool writeHeaders = true}) {
-    if (_outgoing.headersWritten) throw new StateError("Headers already sent");
+    if (_outgoing.headersWritten) throw StateError("Headers already sent");
     deadline = null; // Be sure to stop any deadline.
     var future = _httpRequest!._httpConnection.detachSocket();
     if (writeHeaders) {
@@ -1233,13 +1233,13 @@
     _deadline = d;
 
     if (d == null) return;
-    _deadlineTimer = new Timer(d, () {
+    _deadlineTimer = Timer(d, () {
       _httpRequest!._httpConnection.destroy();
     });
   }
 
   void _writeHeader() {
-    BytesBuilder buffer = new _CopyingBytesBuilder(_OUTGOING_BUFFER_SIZE);
+    BytesBuilder buffer = _CopyingBytesBuilder(_OUTGOING_BUFFER_SIZE);
 
     // Write status line.
     if (headers.protocolVersion == "1.1") {
@@ -1270,7 +1270,7 @@
         }
       }
       if (!found) {
-        var cookie = new Cookie(_DART_SESSION_ID, session.id);
+        var cookie = Cookie(_DART_SESSION_ID, session.id);
         cookies.add(cookie
           ..httpOnly = true
           ..path = "/");
@@ -1393,10 +1393,9 @@
   // The HttpClient this request belongs to.
   final _HttpClient _httpClient;
   final _HttpClientConnection _httpClientConnection;
-  final _HttpProfileData? _profileData;
 
   final Completer<HttpClientResponse> _responseCompleter =
-      new Completer<HttpClientResponse>();
+      Completer<HttpClientResponse>();
 
   final _Proxy _proxy;
 
@@ -1407,20 +1406,19 @@
 
   int _maxRedirects = 5;
 
-  List<RedirectInfo> _responseRedirects = [];
+  final List<RedirectInfo> _responseRedirects = [];
 
   bool _aborted = false;
 
   _HttpClientRequest(
     _HttpOutgoing outgoing,
-    Uri uri,
+    this.uri,
     this.method,
     this._proxy,
     this._httpClient,
     this._httpClientConnection,
-    this._profileData,
-  )   : uri = uri,
-        super(uri, "1.1", outgoing, _profileData) {
+    _HttpProfileData? _profileData,
+  ) : super(uri, "1.1", outgoing, _profileData) {
     _profileData?.requestEvent('Request sent');
     // GET and HEAD have 'content-length: 0' by default.
     if (method == "GET" || method == "HEAD") {
@@ -1453,13 +1451,13 @@
 
   int get maxRedirects => _maxRedirects;
   void set maxRedirects(int maxRedirects) {
-    if (_outgoing.headersWritten) throw new StateError("Request already sent");
+    if (_outgoing.headersWritten) throw StateError("Request already sent");
     _maxRedirects = maxRedirects;
   }
 
   bool get followRedirects => _followRedirects;
   void set followRedirects(bool followRedirects) {
-    if (_outgoing.headersWritten) throw new StateError("Request already sent");
+    if (_outgoing.headersWritten) throw StateError("Request already sent");
     _followRedirects = followRedirects;
   }
 
@@ -1482,8 +1480,8 @@
       } else {
         // End with exception, too many redirects.
         future = response.drain().then<HttpClientResponse>((_) {
-          return new Future<HttpClientResponse>.error(new RedirectException(
-              "Redirect limit exceeded", response.redirects));
+          return Future<HttpClientResponse>.error(
+              RedirectException("Redirect limit exceeded", response.redirects));
         });
       }
     } else if (response._shouldAuthenticateProxy) {
@@ -1491,7 +1489,7 @@
     } else if (response._shouldAuthenticate) {
       future = response._authenticate(false);
     } else {
-      future = new Future<HttpClientResponse>.value(response);
+      future = Future<HttpClientResponse>.value(response);
     }
     future.then((v) {
       if (!_responseCompleter.isCompleted) {
@@ -1517,7 +1515,7 @@
       String result = uri.path;
       if (result.isEmpty) result = "/";
       if (uri.hasQuery) {
-        result = "${result}?${uri.query}";
+        result = "$result?${uri.query}";
       }
       return result;
     }
@@ -1541,7 +1539,7 @@
   }
 
   void add(List<int> data) {
-    if (data.length == 0 || _aborted) return;
+    if (data.isEmpty || _aborted) return;
     super.add(data);
   }
 
@@ -1555,7 +1553,7 @@
       _outgoing.setHeader(Uint8List(0), 0);
       return;
     }
-    BytesBuilder buffer = new _CopyingBytesBuilder(_OUTGOING_BUFFER_SIZE);
+    BytesBuilder buffer = _CopyingBytesBuilder(_OUTGOING_BUFFER_SIZE);
 
     // Write the request method.
     buffer.add(method.codeUnits);
@@ -1569,11 +1567,14 @@
     buffer.addByte(_CharCode.LF);
 
     // Add the cookies to the headers.
-    if (!cookies.isEmpty) {
-      StringBuffer sb = new StringBuffer();
+    if (cookies.isNotEmpty) {
+      StringBuffer sb = StringBuffer();
       for (int i = 0; i < cookies.length; i++) {
         if (i > 0) sb.write("; ");
-        sb..write(cookies[i].name)..write("=")..write(cookies[i].value);
+        sb
+          ..write(cookies[i].name)
+          ..write("=")
+          ..write(cookies[i].value);
       }
       headers.add(HttpHeaders.cookieHeader, sb.toString());
     }
@@ -1614,7 +1615,7 @@
 
   void addSlice(List<int> chunk, int start, int end, bool isLast) {
     if (chunk is Uint8List) {
-      _consume(new Uint8List.view(
+      _consume(Uint8List.view(
           chunk.buffer, chunk.offsetInBytes + start, end - start));
     } else {
       _consume(chunk.sublist(start, end - start));
@@ -1633,7 +1634,7 @@
 // Most notable is the GZip compression, that uses a double-buffering system,
 // one before gzip (_gzipBuffer) and one after (_buffer).
 class _HttpOutgoing implements StreamConsumer<List<int>> {
-  static const List<int> _footerAndChunk0Length = const [
+  static const List<int> _footerAndChunk0Length = [
     _CharCode.CR,
     _CharCode.LF,
     0x30,
@@ -1643,7 +1644,7 @@
     _CharCode.LF
   ];
 
-  static const List<int> _chunk0Length = const [
+  static const List<int> _chunk0Length = [
     0x30,
     _CharCode.CR,
     _CharCode.LF,
@@ -1651,7 +1652,7 @@
     _CharCode.LF
   ];
 
-  final Completer<Socket> _doneCompleter = new Completer<Socket>();
+  final Completer<Socket> _doneCompleter = Completer<Socket>();
   final Socket socket;
 
   bool ignoreBody = false;
@@ -1736,7 +1737,7 @@
   Future addStream(Stream<List<int>> stream) {
     if (_socketError) {
       stream.listen(null).cancel();
-      return new Future.value(outbound);
+      return Future.value(outbound);
     }
     if (ignoreBody) {
       stream.drain().catchError((_) {});
@@ -1749,11 +1750,11 @@
     // Use new stream so we are able to pause (see below listen). The
     // alternative is to use stream.extand, but that won't give us a way of
     // pausing.
-    var controller = new StreamController<List<int>>(sync: true);
+    var controller = StreamController<List<int>>(sync: true);
 
     void onData(List<int> data) {
       if (_socketError) return;
-      if (data.length == 0) return;
+      if (data.isEmpty) return;
       if (chunked) {
         if (_gzip) {
           _gzipAdd = controller.add;
@@ -1768,11 +1769,11 @@
         if (contentLength != null) {
           _bytesWritten += data.length;
           if (_bytesWritten > contentLength) {
-            controller.addError(new HttpException(
-                "Content size exceeds specified contentLength. "
-                "$_bytesWritten bytes written while expected "
-                "$contentLength. "
-                "[${new String.fromCharCodes(data)}]"));
+            controller.addError(
+                HttpException("Content size exceeds specified contentLength. "
+                    "$_bytesWritten bytes written while expected "
+                    "$contentLength. "
+                    "[${String.fromCharCodes(data)}]"));
             return;
           }
         }
@@ -1818,8 +1819,8 @@
     var outbound = this.outbound!;
     // If we earlier saw an error, return immediate. The notification to
     // _Http*Connection is already done.
-    if (_socketError) return new Future.value(outbound);
-    if (outbound._isConnectionClosed) return new Future.value(outbound);
+    if (_socketError) return Future.value(outbound);
+    if (outbound._isConnectionClosed) return Future.value(outbound);
     if (!headersWritten && !ignoreBody) {
       if (outbound.headers.contentLength == -1) {
         // If no body was written, ignoreBody is false (it's not a HEAD
@@ -1828,25 +1829,25 @@
         outbound.headers.chunkedTransferEncoding = false;
         outbound.headers.contentLength = 0;
       } else if (outbound.headers.contentLength > 0) {
-        var error = new HttpException(
+        var error = HttpException(
             "No content even though contentLength was specified to be "
             "greater than 0: ${outbound.headers.contentLength}.",
             uri: outbound._uri);
         _doneCompleter.completeError(error);
-        return _closeFuture = new Future.error(error);
+        return _closeFuture = Future.error(error);
       }
     }
     // If contentLength was specified, validate it.
     var contentLength = this.contentLength;
     if (contentLength != null) {
       if (_bytesWritten < contentLength) {
-        var error = new HttpException(
+        var error = HttpException(
             "Content size below specified contentLength. "
             " $_bytesWritten bytes written but expected "
             "$contentLength.",
             uri: outbound._uri);
         _doneCompleter.completeError(error);
-        return _closeFuture = new Future.error(error);
+        return _closeFuture = Future.error(error);
       }
     }
 
@@ -1857,7 +1858,7 @@
         if (_gzip) {
           _gzipAdd = socket.add;
           if (_gzipBufferLength > 0) {
-            _gzipSink!.add(new Uint8List.view(_gzipBuffer!.buffer,
+            _gzipSink!.add(Uint8List.view(_gzipBuffer!.buffer,
                 _gzipBuffer!.offsetInBytes, _gzipBufferLength));
           }
           _gzipBuffer = null;
@@ -1868,8 +1869,8 @@
       }
       // Add any remaining data in the buffer.
       if (_length > 0) {
-        socket.add(new Uint8List.view(
-            _buffer!.buffer, _buffer!.offsetInBytes, _length));
+        socket.add(
+            Uint8List.view(_buffer!.buffer, _buffer!.offsetInBytes, _length));
       }
       // Clear references, for better GC.
       _buffer = null;
@@ -1907,10 +1908,10 @@
   void set gzip(bool value) {
     _gzip = value;
     if (value) {
-      _gzipBuffer = new Uint8List(_OUTGOING_BUFFER_SIZE);
+      _gzipBuffer = Uint8List(_OUTGOING_BUFFER_SIZE);
       assert(_gzipSink == null);
-      _gzipSink = new ZLibEncoder(gzip: true)
-          .startChunkedConversion(new _HttpGZipSink((data) {
+      _gzipSink =
+          ZLibEncoder(gzip: true).startChunkedConversion(_HttpGZipSink((data) {
         // We are closing down prematurely, due to an error. Discard.
         if (_gzipAdd == null) return;
         _addChunk(_chunkHeader(data.length), _gzipAdd!);
@@ -1924,7 +1925,7 @@
       (error is SocketException || error is TlsException) &&
       outbound is HttpResponse;
 
-  void _addGZipChunk(List<int> chunk, void add(List<int> data)) {
+  void _addGZipChunk(List<int> chunk, void Function(List<int> data) add) {
     var bufferOutput = outbound!.bufferOutput;
     if (!bufferOutput) {
       add(chunk);
@@ -1932,9 +1933,9 @@
     }
     var gzipBuffer = _gzipBuffer!;
     if (chunk.length > gzipBuffer.length - _gzipBufferLength) {
-      add(new Uint8List.view(
+      add(Uint8List.view(
           gzipBuffer.buffer, gzipBuffer.offsetInBytes, _gzipBufferLength));
-      _gzipBuffer = new Uint8List(_OUTGOING_BUFFER_SIZE);
+      _gzipBuffer = Uint8List(_OUTGOING_BUFFER_SIZE);
       _gzipBufferLength = 0;
     }
     if (chunk.length > _OUTGOING_BUFFER_SIZE) {
@@ -1947,14 +1948,13 @@
     }
   }
 
-  void _addChunk(List<int> chunk, void add(List<int> data)) {
+  void _addChunk(List<int> chunk, void Function(List<int> data) add) {
     var bufferOutput = outbound!.bufferOutput;
     if (!bufferOutput) {
       if (_buffer != null) {
         // If _buffer is not null, we have not written the header yet. Write
         // it now.
-        add(new Uint8List.view(
-            _buffer!.buffer, _buffer!.offsetInBytes, _length));
+        add(Uint8List.view(_buffer!.buffer, _buffer!.offsetInBytes, _length));
         _buffer = null;
         _length = 0;
       }
@@ -1962,8 +1962,8 @@
       return;
     }
     if (chunk.length > _buffer!.length - _length) {
-      add(new Uint8List.view(_buffer!.buffer, _buffer!.offsetInBytes, _length));
-      _buffer = new Uint8List(_OUTGOING_BUFFER_SIZE);
+      add(Uint8List.view(_buffer!.buffer, _buffer!.offsetInBytes, _length));
+      _buffer = Uint8List(_OUTGOING_BUFFER_SIZE);
       _length = 0;
     }
     if (chunk.length > _OUTGOING_BUFFER_SIZE) {
@@ -1975,7 +1975,7 @@
   }
 
   List<int> _chunkHeader(int length) {
-    const hexDigits = const [
+    const hexDigits = [
       0x30,
       0x31,
       0x32,
@@ -2004,7 +2004,7 @@
       size++;
       len >>= 4;
     }
-    var footerAndHeader = new Uint8List(size + 2);
+    var footerAndHeader = Uint8List(size + 2);
     if (_pendingChunkedFooter == 2) {
       footerAndHeader[0] = _CharCode.CR;
       footerAndHeader[1] = _CharCode.LF;
@@ -2038,7 +2038,7 @@
 
   _HttpClientConnection(this.key, this._socket, this._httpClient,
       [this._proxyTunnel = false, this._context])
-      : _httpParser = new _HttpParser.responseParser() {
+      : _httpParser = _HttpParser.responseParser() {
     _httpParser.listenToStream(_socket);
 
     // Set up handlers on the parser here, so we are sure to get 'onDone' from
@@ -2049,7 +2049,7 @@
       _subscription!.pause();
       // We assume the response is not here, until we have send the request.
       if (_nextResponseCompleter == null) {
-        throw new HttpException(
+        throw HttpException(
             "Unexpected response (unsolicited response without request).",
             uri: _currentUri);
       }
@@ -2063,7 +2063,7 @@
           _subscription!.resume();
         }).catchError((dynamic error, StackTrace stackTrace) {
           _nextResponseCompleter!.completeError(
-              new HttpException(error.message, uri: _currentUri), stackTrace);
+              HttpException(error.message, uri: _currentUri), stackTrace);
           _nextResponseCompleter = null;
         });
       } else {
@@ -2072,10 +2072,10 @@
       }
     }, onError: (dynamic error, StackTrace stackTrace) {
       _nextResponseCompleter?.completeError(
-          new HttpException(error.message, uri: _currentUri), stackTrace);
+          HttpException(error.message, uri: _currentUri), stackTrace);
       _nextResponseCompleter = null;
     }, onDone: () {
-      _nextResponseCompleter?.completeError(new HttpException(
+      _nextResponseCompleter?.completeError(HttpException(
           "Connection closed before response was received",
           uri: _currentUri));
       _nextResponseCompleter = null;
@@ -2086,8 +2086,7 @@
   _HttpClientRequest send(Uri uri, int port, String method, _Proxy proxy,
       _HttpProfileData? profileData) {
     if (closed) {
-      throw new HttpException("Socket closed before request was sent",
-          uri: uri);
+      throw HttpException("Socket closed before request was sent", uri: uri);
     }
     _currentUri = uri;
     // Start with pausing the parser.
@@ -2098,10 +2097,10 @@
     }
     _ProxyCredentials? proxyCreds; // Credentials used to authorize proxy.
     _SiteCredentials? creds; // Credentials used to authorize this request.
-    var outgoing = new _HttpOutgoing(_socket);
+    var outgoing = _HttpOutgoing(_socket);
 
     // Create new request object, wrapping the outgoing connection.
-    var request = new _HttpClientRequest(
+    var request = _HttpClientRequest(
         outgoing, uri, method, proxy, _httpClient, this, profileData);
     // For the Host header an IPv6 address must be enclosed in []'s.
     var host = uri.host;
@@ -2116,19 +2115,19 @@
     if (proxy.isAuthenticated) {
       // If the proxy configuration contains user information use that
       // for proxy basic authorization.
-      String auth = _CryptoUtils.bytesToBase64(
-          utf8.encode("${proxy.username}:${proxy.password}"));
+      String auth =
+          base64Encode(utf8.encode("${proxy.username}:${proxy.password}"));
       request.headers.set(HttpHeaders.proxyAuthorizationHeader, "Basic $auth");
-    } else if (!proxy.isDirect && _httpClient._proxyCredentials.length > 0) {
+    } else if (!proxy.isDirect && _httpClient._proxyCredentials.isNotEmpty) {
       proxyCreds = _httpClient._findProxyCredentials(proxy);
       if (proxyCreds != null) {
         proxyCreds.authorize(request);
       }
     }
-    if (uri.userInfo != null && !uri.userInfo.isEmpty) {
+    if (uri.userInfo != null && uri.userInfo.isNotEmpty) {
       // If the URL contains user information use that for basic
       // authorization.
-      String auth = _CryptoUtils.bytesToBase64(utf8.encode(uri.userInfo));
+      String auth = base64Encode(utf8.encode(uri.userInfo));
       request.headers.set(HttpHeaders.authorizationHeader, "Basic $auth");
     } else {
       // Look for credentials.
@@ -2146,7 +2145,7 @@
       profileData?.finishRequest(request: request);
 
       // Request sent, set up response completer.
-      var nextResponseCompleter = new Completer<_HttpIncoming>();
+      var nextResponseCompleter = Completer<_HttpIncoming>();
       _nextResponseCompleter = nextResponseCompleter;
 
       // Listen for response.
@@ -2203,7 +2202,7 @@
           // If we see a state error, we failed to get the 'first'
           // element.
           .catchError((error) {
-        throw new HttpException("Connection closed before data was received",
+        throw HttpException("Connection closed before data was received",
             uri: uri);
       }, test: (error) => error is StateError).catchError((error, stackTrace) {
         // We are done with the socket.
@@ -2222,8 +2221,8 @@
   }
 
   Future<Socket> detachSocket() {
-    return _streamFuture!.then(
-        (_) => new _DetachedSocket(_socket, _httpParser.detachIncoming()));
+    return _streamFuture!
+        .then((_) => _DetachedSocket(_socket, _httpParser.detachIncoming()));
   }
 
   void destroy() {
@@ -2258,7 +2257,7 @@
       String host,
       int port,
       _Proxy proxy,
-      bool callback(X509Certificate certificate),
+      bool Function(X509Certificate certificate) callback,
       _HttpProfileData? profileData) {
     final method = "CONNECT";
     final uri = Uri(host: host, port: port);
@@ -2279,8 +2278,8 @@
     if (proxy.isAuthenticated) {
       // If the proxy configuration contains user information use that
       // for proxy basic authorization.
-      String auth = _CryptoUtils.bytesToBase64(
-          utf8.encode("${proxy.username}:${proxy.password}"));
+      String auth =
+          base64Encode(utf8.encode("${proxy.username}:${proxy.password}"));
       request.headers.set(HttpHeaders.proxyAuthorizationHeader, "Basic $auth");
     }
     return request.close().then((response) {
@@ -2288,7 +2287,7 @@
         final error = "Proxy failed to establish tunnel "
             "(${response.statusCode} ${response.reasonPhrase})";
         profileData?.requestEvent(error);
-        throw new HttpException(error, uri: request.uri);
+        throw HttpException(error, uri: request.uri);
       }
       var socket = (response as _HttpClientResponse)
           ._httpRequest
@@ -2299,7 +2298,7 @@
     }).then((secureSocket) {
       String key = _HttpClientConnection.makeKey(true, host, port);
       profileData?.requestEvent('Proxy tunnel established');
-      return new _HttpClientConnection(
+      return _HttpClientConnection(
           key, secureSocket, request._httpClient, true);
     });
   }
@@ -2317,7 +2316,7 @@
 
   void startTimer() {
     assert(_idleTimer == null);
-    _idleTimer = new Timer(_httpClient.idleTimeout, () {
+    _idleTimer = Timer(_httpClient.idleTimeout, () {
       _idleTimer = null;
       close();
     });
@@ -2338,10 +2337,10 @@
   final int port;
   final bool isSecure;
   final SecurityContext? context;
-  final Set<_HttpClientConnection> _idle = new HashSet();
-  final Set<_HttpClientConnection> _active = new HashSet();
-  final Set<ConnectionTask> _socketTasks = new HashSet();
-  final Queue _pending = new ListQueue();
+  final Set<_HttpClientConnection> _idle = HashSet();
+  final Set<_HttpClientConnection> _active = HashSet();
+  final Set<ConnectionTask> _socketTasks = HashSet();
+  final _pending = ListQueue<void Function()>();
   int _connecting = 0;
 
   _ConnectionTarget(
@@ -2415,12 +2414,12 @@
     if (hasIdle) {
       var connection = takeIdle();
       client._connectionsChanged();
-      return new Future.value(new _ConnectionInfo(connection, proxy));
+      return Future.value(_ConnectionInfo(connection, proxy));
     }
     var maxConnectionsPerHost = client.maxConnectionsPerHost;
     if (maxConnectionsPerHost != null &&
         _active.length + _connecting >= maxConnectionsPerHost) {
-      var completer = new Completer<_ConnectionInfo>();
+      var completer = Completer<_ConnectionInfo>();
       _pending.add(() {
         completer
             .complete(connect(uriHost, uriPort, proxy, client, profileData));
@@ -2452,7 +2451,7 @@
           socket.setOption(SocketOption.tcpNoDelay, true);
         }
         var connection =
-            new _HttpClientConnection(key, socket, client, false, context);
+            _HttpClientConnection(key, socket, client, false, context);
         if (isSecure && !proxy.isDirect) {
           connection._dispose = true;
           return connection
@@ -2462,12 +2461,12 @@
                 ._getConnectionTarget(uriHost, uriPort, true)
                 .addNewActive(tunnel);
             _socketTasks.remove(task);
-            return new _ConnectionInfo(tunnel, proxy);
+            return _ConnectionInfo(tunnel, proxy);
           });
         } else {
           addNewActive(connection);
           _socketTasks.remove(task);
-          return new _ConnectionInfo(connection, proxy);
+          return _ConnectionInfo(connection, proxy);
         }
       }, onError: (error) {
         // When there is a timeout, there is a race in which the connectionTask
@@ -2481,8 +2480,8 @@
           _socketTasks.remove(task);
           task.cancel();
           throw SocketException(
-              "HTTP connection timed out after ${connectionTimeout}, "
-              "host: ${host}, port: ${port}");
+              "HTTP connection timed out after $connectionTimeout, "
+              "host: $host, port: $port");
         }
         _socketTasks.remove(task);
         _checkPending();
@@ -2495,13 +2494,14 @@
   }
 }
 
-typedef bool BadCertificateCallback(X509Certificate cr, String host, int port);
+typedef BadCertificateCallback = bool Function(
+    X509Certificate cr, String host, int port);
 
 class _HttpClient implements HttpClient {
   bool _closing = false;
   bool _closingForcefully = false;
   final Map<String, _ConnectionTarget> _connectionTargets =
-      new HashMap<String, _ConnectionTarget>();
+      HashMap<String, _ConnectionTarget>();
   final List<_Credentials> _credentials = [];
   final List<_ProxyCredentials> _proxyCredentials = [];
   final SecurityContext? _context;
@@ -2536,7 +2536,7 @@
   }
 
   set badCertificateCallback(
-      bool callback(X509Certificate cert, String host, int port)?) {
+      bool Function(X509Certificate cert, String host, int port)? callback) {
     _badCertificateCallback = callback;
   }
 
@@ -2560,8 +2560,8 @@
       query = path.substring(queryStart + 1, fragmentStart);
       path = path.substring(0, queryStart);
     }
-    Uri uri = new Uri(
-        scheme: "http", host: host, port: port, path: path, query: query);
+    Uri uri =
+        Uri(scheme: "http", host: host, port: port, path: path, query: query);
     return _openUrl(method, uri);
   }
 
@@ -2607,27 +2607,30 @@
         !force || !_connectionTargets.values.any((s) => s._active.isNotEmpty));
   }
 
-  set authenticate(Future<bool> f(Uri url, String scheme, String? realm)?) {
+  set authenticate(
+      Future<bool> Function(Uri url, String scheme, String? realm)? f) {
     _authenticate = f;
   }
 
   void addCredentials(Uri url, String realm, HttpClientCredentials cr) {
     _credentials
-        .add(new _SiteCredentials(url, realm, cr as _HttpClientCredentials));
+        .add(_SiteCredentials(url, realm, cr as _HttpClientCredentials));
   }
 
   set authenticateProxy(
-      Future<bool> f(String host, int port, String scheme, String? realm)?) {
+      Future<bool> Function(
+              String host, int port, String scheme, String? realm)?
+          f) {
     _authenticateProxy = f;
   }
 
   void addProxyCredentials(
       String host, int port, String realm, HttpClientCredentials cr) {
     _proxyCredentials.add(
-        new _ProxyCredentials(host, port, realm, cr as _HttpClientCredentials));
+        _ProxyCredentials(host, port, realm, cr as _HttpClientCredentials));
   }
 
-  set findProxy(String f(Uri uri)?) => _findProxy = f;
+  set findProxy(String Function(Uri uri)? f) => _findProxy = f;
 
   static void _startRequestTimelineEvent(
       TimelineTask? timeline, String method, Uri uri) {
@@ -2649,21 +2652,20 @@
 
   Future<_HttpClientRequest> _openUrl(String method, Uri uri) {
     if (_closing) {
-      throw new StateError("Client is closed");
+      throw StateError("Client is closed");
     }
 
     // Ignore any fragments on the request URI.
     uri = uri.removeFragment();
 
     if (method == null) {
-      throw new ArgumentError(method);
+      throw ArgumentError(method);
     }
     if (method != "CONNECT") {
       if (uri.host.isEmpty) {
-        throw new ArgumentError("No host specified in URI $uri");
+        throw ArgumentError("No host specified in URI $uri");
       } else if (uri.scheme != "http" && uri.scheme != "https") {
-        throw new ArgumentError(
-            "Unsupported scheme '${uri.scheme}' in URI $uri");
+        throw ArgumentError("Unsupported scheme '${uri.scheme}' in URI $uri");
       }
     }
 
@@ -2683,9 +2685,9 @@
       // TODO(sgjesse): Keep a map of these as normally only a few
       // configuration strings will be used.
       try {
-        proxyConf = new _ProxyConfiguration(findProxy(uri));
+        proxyConf = _ProxyConfiguration(findProxy(uri));
       } catch (error, stackTrace) {
-        return new Future.error(error, stackTrace);
+        return Future.error(error, stackTrace);
       }
     }
     _HttpProfileData? profileData;
@@ -2784,7 +2786,7 @@
   _ConnectionTarget _getConnectionTarget(String host, int port, bool isSecure) {
     String key = _HttpClientConnection.makeKey(isSecure, host, port);
     return _connectionTargets.putIfAbsent(key, () {
-      return new _ConnectionTarget(key, host, port, isSecure, _context);
+      return _ConnectionTarget(key, host, port, isSecure, _context);
     });
   }
 
@@ -2798,7 +2800,7 @@
     Iterator<_Proxy> proxies = proxyConf.proxies.iterator;
 
     Future<_ConnectionInfo> connect(error, stackTrace) {
-      if (!proxies.moveNext()) return new Future.error(error, stackTrace);
+      if (!proxies.moveNext()) return Future.error(error, stackTrace);
       _Proxy proxy = proxies.current;
       String host = proxy.isDirect ? uriHost : proxy.host!;
       int port = proxy.isDirect ? uriPort : proxy.port!;
@@ -2808,7 +2810,7 @@
           .catchError(connect);
     }
 
-    return connect(new HttpException("No proxies given"), StackTrace.current);
+    return connect(HttpException("No proxies given"), StackTrace.current);
   }
 
   _SiteCredentials? _findCredentials(Uri url, [_AuthenticationScheme? scheme]) {
@@ -2884,13 +2886,13 @@
         var pos = option.lastIndexOf(":");
         if (option.indexOf("]") > pos) option = "$option:1080";
       } else {
-        if (option.indexOf(":") == -1) option = "$option:1080";
+        if (!option.contains(":")) option = "$option:1080";
       }
       return "PROXY $option";
     }
 
     // Default to using the process current environment.
-    if (environment == null) environment = _platformEnvironmentCache;
+    environment ??= _platformEnvironmentCache;
 
     String? proxyCfg;
 
@@ -2916,7 +2918,8 @@
     return "DIRECT";
   }
 
-  static Map<String, String> _platformEnvironmentCache = Platform.environment;
+  static final Map<String, String> _platformEnvironmentCache =
+      Platform.environment;
 }
 
 class _HttpConnection extends LinkedListEntry<_HttpConnection>
@@ -2927,8 +2930,8 @@
   static const _DETACHED = 3;
 
   // Use HashMap, as we don't need to keep order.
-  static Map<int, _HttpConnection> _connections =
-      new HashMap<int, _HttpConnection>();
+  static final Map<int, _HttpConnection> _connections =
+      HashMap<int, _HttpConnection>();
 
   final /*_ServerSocket*/ _socket;
   final _HttpServer _httpServer;
@@ -2939,7 +2942,7 @@
   Future? _streamFuture;
 
   _HttpConnection(this._socket, this._httpServer)
-      : _httpParser = new _HttpParser.requestParser() {
+      : _httpParser = _HttpParser.requestParser() {
     _connections[_serviceId] = this;
     _httpParser.listenToStream(_socket);
     _subscription = _httpParser.listen((incoming) {
@@ -2952,8 +2955,8 @@
       // stream paused until the request has been send.
       _subscription!.pause();
       _state = _ACTIVE;
-      var outgoing = new _HttpOutgoing(_socket);
-      var response = new _HttpResponse(
+      var outgoing = _HttpOutgoing(_socket);
+      var response = _HttpResponse(
           incoming.uri!,
           incoming.headers.protocolVersion,
           outgoing,
@@ -2963,7 +2966,7 @@
       if (incoming.statusCode == HttpStatus.badRequest) {
         response.statusCode = HttpStatus.badRequest;
       }
-      var request = new _HttpRequest(response, incoming, _httpServer, this);
+      var request = _HttpRequest(response, incoming, _httpServer, this);
       _streamFuture = outgoing.done.then((_) {
         response.deadline = null;
         if (_state == _DETACHED) return;
@@ -3020,7 +3023,7 @@
 
     return _streamFuture!.then((_) {
       _connections.remove(_serviceId);
-      return new _DetachedSocket(_socket, detachedIncoming);
+      return _DetachedSocket(_socket, detachedIncoming);
     });
   }
 
@@ -3083,7 +3086,7 @@
     with _ServiceObject
     implements HttpServer {
   // Use default Map so we keep order.
-  static Map<int, _HttpServer> _servers = new Map<int, _HttpServer>();
+  static final Map<int, _HttpServer> _servers = <int, _HttpServer>{};
 
   String? serverHeader;
   final HttpHeaders defaultResponseHeaders = _initDefaultResponseHeaders();
@@ -3097,7 +3100,7 @@
     return ServerSocket.bind(address, port,
             backlog: backlog, v6Only: v6Only, shared: shared)
         .then<HttpServer>((socket) {
-      return new _HttpServer._(socket, true);
+      return _HttpServer._(socket, true);
     });
   }
 
@@ -3115,12 +3118,12 @@
             requestClientCertificate: requestClientCertificate,
             shared: shared)
         .then<HttpServer>((socket) {
-      return new _HttpServer._(socket, true);
+      return _HttpServer._(socket, true);
     });
   }
 
   _HttpServer._(this._serverSocket, this._closeServer)
-      : _controller = new StreamController<HttpRequest>(sync: true) {
+      : _controller = StreamController<HttpRequest>(sync: true) {
     _controller.onCancel = close;
     idleTimeout = const Duration(seconds: 120);
     _servers[_serviceId] = this;
@@ -3128,14 +3131,14 @@
 
   _HttpServer.listenOn(this._serverSocket)
       : _closeServer = false,
-        _controller = new StreamController<HttpRequest>(sync: true) {
+        _controller = StreamController<HttpRequest>(sync: true) {
     _controller.onCancel = close;
     idleTimeout = const Duration(seconds: 120);
     _servers[_serviceId] = this;
   }
 
   static HttpHeaders _initDefaultResponseHeaders() {
-    var defaultResponseHeaders = new _HttpHeaders('1.1');
+    var defaultResponseHeaders = _HttpHeaders('1.1');
     defaultResponseHeaders.contentType = ContentType.text;
     defaultResponseHeaders.set('X-Frame-Options', 'SAMEORIGIN');
     defaultResponseHeaders.set('X-Content-Type-Options', 'nosniff');
@@ -3153,7 +3156,7 @@
     }
     _idleTimeout = duration;
     if (duration != null) {
-      _idleTimer = new Timer.periodic(duration, (_) {
+      _idleTimer = Timer.periodic(duration, (_) {
         for (var idle in _idleConnections.toList()) {
           if (idle.isMarkedIdle) {
             idle.destroy();
@@ -3165,14 +3168,17 @@
     }
   }
 
-  StreamSubscription<HttpRequest> listen(void onData(HttpRequest event)?,
-      {Function? onError, void onDone()?, bool? cancelOnError}) {
+  StreamSubscription<HttpRequest> listen(
+      void Function(HttpRequest event)? onData,
+      {Function? onError,
+      void Function()? onDone,
+      bool? cancelOnError}) {
     _serverSocket.listen((Socket socket) {
       if (socket.address.type != InternetAddressType.unix) {
         socket.setOption(SocketOption.tcpNoDelay, true);
       }
       // Accept the client connection.
-      _HttpConnection connection = new _HttpConnection(socket, this);
+      _HttpConnection connection = _HttpConnection(socket, this);
       _idleConnections.add(connection);
     }, onError: (error, stackTrace) {
       // Ignore HandshakeExceptions as they are bound to a single request,
@@ -3191,7 +3197,7 @@
     if (_serverSocket != null && _closeServer) {
       result = _serverSocket.close();
     } else {
-      result = new Future.value();
+      result = Future.value();
     }
     idleTimeout = null;
     if (force) {
@@ -3220,12 +3226,12 @@
   }
 
   int get port {
-    if (closed) throw new HttpException("HttpServer is not bound to a socket");
+    if (closed) throw HttpException("HttpServer is not bound to a socket");
     return _serverSocket.port;
   }
 
   InternetAddress get address {
-    if (closed) throw new HttpException("HttpServer is not bound to a socket");
+    if (closed) throw HttpException("HttpServer is not bound to a socket");
     return _serverSocket.address;
   }
 
@@ -3262,20 +3268,20 @@
       _sessionManagerInstance ??= _HttpSessionManager();
 
   HttpConnectionsInfo connectionsInfo() {
-    HttpConnectionsInfo result = new HttpConnectionsInfo();
+    HttpConnectionsInfo result = HttpConnectionsInfo();
     result.total = _activeConnections.length + _idleConnections.length;
-    _activeConnections.forEach((_HttpConnection conn) {
+    for (var conn in _activeConnections) {
       if (conn._isActive) {
         result.active++;
       } else {
         assert(conn._isClosing);
         result.closing++;
       }
-    });
-    _idleConnections.forEach((_HttpConnection conn) {
+    }
+    for (var conn in _idleConnections) {
       result.idle++;
       assert(conn._isIdle);
-    });
+    }
     return result;
   }
 
@@ -3322,10 +3328,10 @@
 
   // Set of currently connected clients.
   final LinkedList<_HttpConnection> _activeConnections =
-      new LinkedList<_HttpConnection>();
+      LinkedList<_HttpConnection>();
   final LinkedList<_HttpConnection> _idleConnections =
-      new LinkedList<_HttpConnection>();
-  StreamController<HttpRequest> _controller;
+      LinkedList<_HttpConnection>();
+  final StreamController<HttpRequest> _controller;
 }
 
 class _ProxyConfiguration {
@@ -3334,12 +3340,12 @@
 
   _ProxyConfiguration(String configuration) : proxies = <_Proxy>[] {
     if (configuration == null) {
-      throw new HttpException("Invalid proxy configuration $configuration");
+      throw HttpException("Invalid proxy configuration $configuration");
     }
     List<String> list = configuration.split(";");
-    list.forEach((String proxy) {
+    for (var proxy in list) {
       proxy = proxy.trim();
-      if (!proxy.isEmpty) {
+      if (proxy.isNotEmpty) {
         if (proxy.startsWith(PROXY_PREFIX)) {
           String? username;
           String? password;
@@ -3352,8 +3358,7 @@
             proxy = proxy.substring(at + 1).trim();
             int colon = userinfo.indexOf(":");
             if (colon == -1 || colon == 0 || colon == proxy.length - 1) {
-              throw new HttpException(
-                  "Invalid proxy configuration $configuration");
+              throw HttpException("Invalid proxy configuration $configuration");
             }
             username = userinfo.substring(0, colon).trim();
             password = userinfo.substring(colon + 1).trim();
@@ -3361,8 +3366,7 @@
           // Look for proxy host and port.
           int colon = proxy.lastIndexOf(":");
           if (colon == -1 || colon == 0 || colon == proxy.length - 1) {
-            throw new HttpException(
-                "Invalid proxy configuration $configuration");
+            throw HttpException("Invalid proxy configuration $configuration");
           }
           String host = proxy.substring(0, colon).trim();
           if (host.startsWith("[") && host.endsWith("]")) {
@@ -3372,22 +3376,21 @@
           int port;
           try {
             port = int.parse(portString);
-          } on FormatException catch (e) {
-            throw new HttpException(
-                "Invalid proxy configuration $configuration, "
+          } on FormatException {
+            throw HttpException("Invalid proxy configuration $configuration, "
                 "invalid port '$portString'");
           }
-          proxies.add(new _Proxy(host, port, username, password));
+          proxies.add(_Proxy(host, port, username, password));
         } else if (proxy.trim() == DIRECT_PREFIX) {
-          proxies.add(new _Proxy.direct());
+          proxies.add(_Proxy.direct());
         } else {
-          throw new HttpException("Invalid proxy configuration $configuration");
+          throw HttpException("Invalid proxy configuration $configuration");
         }
       }
-    });
+    }
   }
 
-  const _ProxyConfiguration.direct() : proxies = const [const _Proxy.direct()];
+  const _ProxyConfiguration.direct() : proxies = const [_Proxy.direct()];
 
   final List<_Proxy> proxies;
 }
@@ -3434,8 +3437,8 @@
 
   _DetachedSocket(this._socket, this._incoming);
 
-  StreamSubscription<Uint8List> listen(void onData(Uint8List event)?,
-      {Function? onError, void onDone()?, bool? cancelOnError}) {
+  StreamSubscription<Uint8List> listen(void Function(Uint8List event)? onData,
+      {Function? onError, void Function()? onDone, bool? cancelOnError}) {
     return _incoming.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
@@ -3511,9 +3514,9 @@
 class _AuthenticationScheme {
   final int _scheme;
 
-  static const UNKNOWN = const _AuthenticationScheme(-1);
-  static const BASIC = const _AuthenticationScheme(0);
-  static const DIGEST = const _AuthenticationScheme(1);
+  static const UNKNOWN = _AuthenticationScheme(-1);
+  static const BASIC = _AuthenticationScheme(0);
+  static const DIGEST = _AuthenticationScheme(1);
 
   const _AuthenticationScheme(this._scheme);
 
@@ -3551,7 +3554,7 @@
       // http://tools.ietf.org/html/draft-reschke-basicauth-enc-06. For
       // now always use UTF-8 encoding.
       var creds = credentials as _HttpClientDigestCredentials;
-      var hasher = new _MD5()
+      var hasher = _MD5()
         ..add(utf8.encode(creds.username))
         ..add([_CharCode.COLON])
         ..add(realm.codeUnits)
@@ -3637,8 +3640,7 @@
     // Proxy-Authenticate headers, see
     // http://tools.ietf.org/html/draft-reschke-basicauth-enc-06. For
     // now always use UTF-8 encoding.
-    String auth =
-        _CryptoUtils.bytesToBase64(utf8.encode("$username:$password"));
+    String auth = base64Encode(utf8.encode("$username:$password"));
     return "Basic $auth";
   }
 
@@ -3662,7 +3664,7 @@
 
   String authorization(_Credentials credentials, _HttpClientRequest request) {
     String requestUri = request._requestUri();
-    _MD5 hasher = new _MD5()
+    _MD5 hasher = _MD5()
       ..add(request.method.codeUnits)
       ..add([_CharCode.COLON])
       ..add(requestUri.codeUnits);
@@ -3671,7 +3673,7 @@
     bool isAuth = false;
     String cnonce = "";
     String nc = "";
-    hasher = new _MD5()
+    hasher = _MD5()
       ..add(credentials.ha1!.codeUnits)
       ..add([_CharCode.COLON]);
     if (credentials.qop == "auth") {
@@ -3698,7 +3700,7 @@
     }
     var response = _CryptoUtils.bytesToHex(hasher.close());
 
-    StringBuffer buffer = new StringBuffer()
+    StringBuffer buffer = StringBuffer()
       ..write('Digest ')
       ..write('username="$username"')
       ..write(', realm="${credentials.realm}"')
diff --git a/sdk/lib/_http/http_parser.dart b/sdk/lib/_http/http_parser.dart
index 060291c..0a8bba4 100644
--- a/sdk/lib/_http/http_parser.dart
+++ b/sdk/lib/_http/http_parser.dart
@@ -7,18 +7,18 @@
 // Global constants.
 class _Const {
   // Bytes for "HTTP".
-  static const HTTP = const [72, 84, 84, 80];
+  static const HTTP = [72, 84, 84, 80];
   // Bytes for "HTTP/1.".
-  static const HTTP1DOT = const [72, 84, 84, 80, 47, 49, 46];
+  static const HTTP1DOT = [72, 84, 84, 80, 47, 49, 46];
   // Bytes for "HTTP/1.0".
-  static const HTTP10 = const [72, 84, 84, 80, 47, 49, 46, 48];
+  static const HTTP10 = [72, 84, 84, 80, 47, 49, 46, 48];
   // Bytes for "HTTP/1.1".
-  static const HTTP11 = const [72, 84, 84, 80, 47, 49, 46, 49];
+  static const HTTP11 = [72, 84, 84, 80, 47, 49, 46, 49];
 
   static const bool T = true;
   static const bool F = false;
   // Loopup-map for the following characters: '()<>@,;:\\"/[]?={} \t'.
-  static const SEPARATOR_MAP = const [
+  static const SEPARATOR_MAP = [
     F, F, F, F, F, F, F, F, F, T, F, F, F, F, F, F, F, F, F, F, F, F, F, F, //
     F, F, F, F, F, F, F, F, T, F, T, F, F, F, F, F, T, T, F, F, T, F, F, T, //
     F, F, F, F, F, F, F, F, F, F, T, T, T, T, T, T, T, F, F, F, F, F, F, F, //
@@ -39,15 +39,12 @@
   static const int LF = 10;
   static const int CR = 13;
   static const int SP = 32;
-  static const int AMPERSAND = 38;
   static const int COMMA = 44;
-  static const int DASH = 45;
   static const int SLASH = 47;
   static const int ZERO = 48;
   static const int ONE = 49;
   static const int COLON = 58;
   static const int SEMI_COLON = 59;
-  static const int EQUAL = 61;
 }
 
 // States of the HTTP parser state machine.
@@ -99,19 +96,17 @@
   static const int RESPONSE = 0;
 }
 
-/**
- * The _HttpDetachedStreamSubscription takes a subscription and some extra data,
- * and makes it possible to "inject" the data in from of other data events
- * from the subscription.
- *
- * It does so by overriding pause/resume, so that once the
- * _HttpDetachedStreamSubscription is resumed, it'll deliver the data before
- * resuming the underlaying subscription.
- */
+/// The _HttpDetachedStreamSubscription takes a subscription and some extra data,
+/// and makes it possible to "inject" the data in from of other data events
+/// from the subscription.
+///
+/// It does so by overriding pause/resume, so that once the
+/// _HttpDetachedStreamSubscription is resumed, it'll deliver the data before
+/// resuming the underlying subscription.
 class _HttpDetachedStreamSubscription implements StreamSubscription<Uint8List> {
-  StreamSubscription<Uint8List> _subscription;
+  final StreamSubscription<Uint8List> _subscription;
   Uint8List? _injectData;
-  Function? _userOnData;
+  void Function(Uint8List data)? _userOnData;
   bool _isCanceled = false;
   bool _scheduled = false;
   int _pauseCount = 1;
@@ -130,12 +125,12 @@
     return _subscription.cancel();
   }
 
-  void onData(void handleData(Uint8List data)?) {
+  void onData(void Function(Uint8List data)? handleData) {
     _userOnData = handleData;
     _subscription.onData(handleData);
   }
 
-  void onDone(void handleDone()?) {
+  void onDone(void Function()? handleDone) {
     _subscription.onDone(handleDone);
   }
 
@@ -170,7 +165,7 @@
     scheduleMicrotask(() {
       _scheduled = false;
       if (_pauseCount > 0 || _isCanceled) return;
-      var data = _injectData;
+      var data = _injectData!;
       _injectData = null;
       // To ensure that 'subscription.isPaused' is false, we resume the
       // subscription here. This is fine as potential events are delayed.
@@ -186,8 +181,8 @@
 
   _HttpDetachedIncoming(this.subscription, this.bufferedData);
 
-  StreamSubscription<Uint8List> listen(void onData(Uint8List event)?,
-      {Function? onError, void onDone()?, bool? cancelOnError}) {
+  StreamSubscription<Uint8List> listen(void Function(Uint8List event)? onData,
+      {Function? onError, void Function()? onDone, bool? cancelOnError}) {
     var subscription = this.subscription;
     if (subscription != null) {
       subscription
@@ -197,37 +192,34 @@
       if (bufferedData == null) {
         return subscription..resume();
       }
-      return new _HttpDetachedStreamSubscription(
-          subscription, bufferedData, onData)
+      return _HttpDetachedStreamSubscription(subscription, bufferedData, onData)
         ..resume();
     } else {
       // TODO(26379): add test for this branch.
-      return new Stream<Uint8List>.fromIterable([bufferedData!]).listen(onData,
+      return Stream<Uint8List>.fromIterable([bufferedData!]).listen(onData,
           onError: onError, onDone: onDone, cancelOnError: cancelOnError);
     }
   }
 }
 
-/**
- * HTTP parser which parses the data stream given to [consume].
- *
- * If an HTTP parser error occurs, the parser will signal an error to either
- * the current _HttpIncoming or the _parser itself.
- *
- * The connection upgrades (e.g. switching from HTTP/1.1 to the
- * WebSocket protocol) is handled in a special way. If connection
- * upgrade is specified in the headers, then on the callback to
- * [:responseStart:] the [:upgrade:] property on the [:HttpParser:]
- * object will be [:true:] indicating that from now on the protocol is
- * not HTTP anymore and no more callbacks will happen, that is
- * [:dataReceived:] and [:dataEnd:] are not called in this case as
- * there is no more HTTP data. After the upgrade the method
- * [:readUnparsedData:] can be used to read any remaining bytes in the
- * HTTP parser which are part of the protocol the connection is
- * upgrading to. These bytes cannot be processed by the HTTP parser
- * and should be handled according to whatever protocol is being
- * upgraded to.
- */
+/// HTTP parser which parses the data stream given to [consume].
+///
+/// If an HTTP parser error occurs, the parser will signal an error to either
+/// the current _HttpIncoming or the _parser itself.
+///
+/// The connection upgrades (e.g. switching from HTTP/1.1 to the
+/// WebSocket protocol) is handled in a special way. If connection
+/// upgrade is specified in the headers, then on the callback to
+/// [:responseStart:] the [:upgrade:] property on the [:HttpParser:]
+/// object will be [:true:] indicating that from now on the protocol is
+/// not HTTP anymore and no more callbacks will happen, that is
+/// [:dataReceived:] and [:dataEnd:] are not called in this case as
+/// there is no more HTTP data. After the upgrade the method
+/// [:readUnparsedData:] can be used to read any remaining bytes in the
+/// HTTP parser which are part of the protocol the connection is
+/// upgrading to. These bytes cannot be processed by the HTTP parser
+/// and should be handled according to whatever protocol is being
+/// upgraded to.
 class _HttpParser extends Stream<_HttpIncoming> {
   // State.
   bool _parserCalled = false;
@@ -265,7 +257,7 @@
   _HttpHeaders? _headers;
 
   // The limit for parsing chunk size
-  int _chunkSizeLimit = 0x7FFFFFFF;
+  static const _chunkSizeLimit = 0x7FFFFFFF;
 
   // The current incoming connection.
   _HttpIncoming? _incoming;
@@ -276,15 +268,15 @@
   StreamController<Uint8List>? _bodyController;
 
   factory _HttpParser.requestParser() {
-    return new _HttpParser._(true);
+    return _HttpParser._(true);
   }
 
   factory _HttpParser.responseParser() {
-    return new _HttpParser._(false);
+    return _HttpParser._(false);
   }
 
   _HttpParser._(this._requestParser)
-      : _controller = new StreamController<_HttpIncoming>(sync: true) {
+      : _controller = StreamController<_HttpIncoming>(sync: true) {
     _controller
       ..onListen = () {
         _paused = false;
@@ -303,8 +295,11 @@
     _reset();
   }
 
-  StreamSubscription<_HttpIncoming> listen(void onData(_HttpIncoming event)?,
-      {Function? onError, void onDone()?, bool? cancelOnError}) {
+  StreamSubscription<_HttpIncoming> listen(
+      void Function(_HttpIncoming event)? onData,
+      {Function? onError,
+      void Function()? onDone,
+      bool? cancelOnError}) {
     return _controller.stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
@@ -372,11 +367,11 @@
     }
     var incoming = _createIncoming(_transferLength);
     if (_requestParser) {
-      incoming.method = new String.fromCharCodes(_method);
-      incoming.uri = Uri.parse(new String.fromCharCodes(_uriOrReasonPhrase));
+      incoming.method = String.fromCharCodes(_method);
+      incoming.uri = Uri.parse(String.fromCharCodes(_uriOrReasonPhrase));
     } else {
       incoming.statusCode = _statusCode;
-      incoming.reasonPhrase = new String.fromCharCodes(_uriOrReasonPhrase);
+      incoming.reasonPhrase = String.fromCharCodes(_uriOrReasonPhrase);
     }
     _method.clear();
     _uriOrReasonPhrase.clear();
@@ -539,7 +534,7 @@
 
         case _State.REQUEST_LINE_URI:
           if (byte == _CharCode.SP) {
-            if (_uriOrReasonPhrase.length == 0) {
+            if (_uriOrReasonPhrase.isEmpty) {
               throw HttpException("Invalid request, empty URI");
             }
             _state = _State.REQUEST_LINE_HTTP_VERSION;
@@ -632,7 +627,7 @@
           break;
 
         case _State.HEADER_START:
-          _headers = new _HttpHeaders(version!);
+          _headers = _HttpHeaders(version!);
           if (byte == _CharCode.CR) {
             _state = _State.HEADER_ENDING;
           } else if (byte == _CharCode.LF) {
@@ -687,12 +682,12 @@
           if (byte == _CharCode.SP || byte == _CharCode.HT) {
             _state = _State.HEADER_VALUE_START;
           } else {
-            String headerField = new String.fromCharCodes(_headerField);
-            String headerValue = new String.fromCharCodes(_headerValue);
+            String headerField = String.fromCharCodes(_headerField);
+            String headerValue = String.fromCharCodes(_headerValue);
             const errorIfBothText = "Both Content-Length and Transfer-Encoding "
                 "are specified, at most one is allowed";
             if (headerField == HttpHeaders.contentLengthHeader) {
-              // Content Length header should not have more than one occurance
+              // Content Length header should not have more than one occurrence
               // or coexist with Transfer Encoding header.
               if (_contentLength) {
                 throw HttpException("The Content-Length header occurred "
@@ -777,7 +772,7 @@
             _state = _State.CHUNK_SIZE_EXTENSION;
           } else {
             int value = _expectHexDigit(byte);
-            // Checks whether (_remaingingContent * 16 + value) overflows.
+            // Checks whether (_remainingContent * 16 + value) overflows.
             if (_remainingContent > _chunkSizeLimit >> 4) {
               throw HttpException('Chunk size overflows the integer');
             }
@@ -829,7 +824,7 @@
           // Always present the data as a view. This way we can handle all
           // cases like this, and the user will not experience different data
           // typed (which could lead to polymorphic user code).
-          Uint8List data = new Uint8List.view(
+          Uint8List data = Uint8List.view(
               buffer.buffer, buffer.offsetInBytes + _index, dataAvailable);
           _bodyController!.add(data);
           if (_remainingContent != -1) {
@@ -953,7 +948,7 @@
   _HttpDetachedIncoming detachIncoming() {
     // Simulate detached by marking as upgraded.
     _state = _State.UPGRADED;
-    return new _HttpDetachedIncoming(_socketSubscription, readUnparsedData());
+    return _HttpDetachedIncoming(_socketSubscription, readUnparsedData());
   }
 
   Uint8List? readUnparsedData() {
@@ -1099,7 +1094,6 @@
 
       default:
         throw UnsupportedError("Unexpected state: $_state");
-        break;
     }
     throw HttpException(
         "$method exceeds the $_headerTotalSizeLimit size limit");
@@ -1109,10 +1103,9 @@
     assert(_incoming == null);
     assert(_bodyController == null);
     assert(!_bodyPaused);
-    var controller =
-        _bodyController = new StreamController<Uint8List>(sync: true);
-    var incoming = _incoming =
-        new _HttpIncoming(_headers!, transferLength, controller.stream);
+    var controller = _bodyController = StreamController<Uint8List>(sync: true);
+    var incoming =
+        _incoming = _HttpIncoming(_headers!, transferLength, controller.stream);
     controller
       ..onListen = () {
         if (incoming != _incoming) return;
diff --git a/sdk/lib/_http/http_session.dart b/sdk/lib/_http/http_session.dart
index 407192a..edf811f 100644
--- a/sdk/lib/_http/http_session.dart
+++ b/sdk/lib/_http/http_session.dart
@@ -13,16 +13,16 @@
   bool _destroyed = false;
   bool _isNew = true;
   DateTime _lastSeen;
-  Function? _timeoutCallback;
-  _HttpSessionManager _sessionManager;
+  void Function()? _timeoutCallback;
+  final _HttpSessionManager _sessionManager;
   // Pointers in timeout queue.
   _HttpSession? _prev;
   _HttpSession? _next;
   final String id;
 
-  final Map _data = new HashMap();
+  final Map _data = HashMap();
 
-  _HttpSession(this._sessionManager, this.id) : _lastSeen = new DateTime.now();
+  _HttpSession(this._sessionManager, this.id) : _lastSeen = DateTime.now();
 
   void destroy() {
     assert(!_destroyed);
@@ -34,7 +34,7 @@
   // Mark the session as seen. This will reset the timeout and move the node to
   // the end of the timeout queue.
   void _markSeen() {
-    _lastSeen = new DateTime.now();
+    _lastSeen = DateTime.now();
     _sessionManager._bumpToEnd(this);
   }
 
@@ -42,7 +42,7 @@
 
   bool get isNew => _isNew;
 
-  void set onTimeout(void callback()?) {
+  void set onTimeout(void Function()? callback) {
     _timeoutCallback = callback;
   }
 
@@ -79,7 +79,7 @@
   }
 
   Map<K, V> cast<K, V>() => _data.cast<K, V>();
-  update(key, update(value), {ifAbsent()?}) =>
+  update(key, update(value), {Function()? ifAbsent}) =>
       _data.update(key, update, ifAbsent: ifAbsent);
 
   void updateAll(update(key, value)) {
@@ -101,7 +101,7 @@
 //  * In a map, mapping from ID to HttpSession.
 //  * In a linked list, used as a timeout queue.
 class _HttpSessionManager {
-  Map<String, _HttpSession> _sessions;
+  final Map<String, _HttpSession> _sessions;
   int _sessionTimeout = 20 * 60; // 20 mins.
   _HttpSession? _head;
   _HttpSession? _tail;
@@ -124,7 +124,7 @@
     while (_sessions.containsKey(id)) {
       id = createSessionId();
     }
-    var session = _sessions[id] = new _HttpSession(this, id);
+    var session = _sessions[id] = _HttpSession(this, id);
     _addToTimeoutQueue(session);
     return session;
   }
@@ -187,9 +187,9 @@
     assert(_timer == null);
     var head = _head;
     if (head != null) {
-      int seconds = new DateTime.now().difference(head.lastSeen).inSeconds;
-      _timer = new Timer(
-          new Duration(seconds: _sessionTimeout - seconds), _timerTimeout);
+      int seconds = DateTime.now().difference(head.lastSeen).inSeconds;
+      _timer =
+          Timer(Duration(seconds: _sessionTimeout - seconds), _timerTimeout);
     }
   }
 
diff --git a/sdk/lib/_http/overrides.dart b/sdk/lib/_http/overrides.dart
index 1fcc81d..021a978 100644
--- a/sdk/lib/_http/overrides.dart
+++ b/sdk/lib/_http/overrides.dart
@@ -4,7 +4,7 @@
 
 part of dart._http;
 
-final _httpOverridesToken = new Object();
+final _httpOverridesToken = Object();
 
 const _asyncRunZoned = runZoned;
 
@@ -13,20 +13,22 @@
 /// that construct a mock implementation. The implementation in this base class
 /// defaults to the actual [HttpClient] implementation. For example:
 ///
-/// ```dart
+/// ```dart import:io
+/// // An implementation of the HttpClient interface
 /// class MyHttpClient implements HttpClient {
-///   ...
-///   // An implementation of the HttpClient interface
-///   ...
+///   MyHttpClient(SecurityContext? c);
+///
+///   @override
+///   noSuchMethod(Invocation invocation) {
+///     // your implementation here
+///   }
 /// }
 ///
-/// main() {
+/// void main() {
 ///   HttpOverrides.runZoned(() {
-///     ...
 ///     // Operations will use MyHttpClient instead of the real HttpClient
 ///     // implementation whenever HttpClient is used.
-///     ...
-///   }, createHttpClient: (SecurityContext c) => new MyHttpClient(c));
+///   }, createHttpClient: (SecurityContext? c) => MyHttpClient(c));
 /// }
 /// ```
 abstract class HttpOverrides {
@@ -46,12 +48,12 @@
   }
 
   /// Runs [body] in a fresh [Zone] using the provided overrides.
-  static R runZoned<R>(R body(),
+  static R runZoned<R>(R Function() body,
       {HttpClient Function(SecurityContext?)? createHttpClient,
       String Function(Uri uri, Map<String, String>? environment)?
           findProxyFromEnvironment}) {
     HttpOverrides overrides =
-        new _HttpOverridesScope(createHttpClient, findProxyFromEnvironment);
+        _HttpOverridesScope(createHttpClient, findProxyFromEnvironment);
     return _asyncRunZoned<R>(body,
         zoneValues: {_httpOverridesToken: overrides});
   }
@@ -60,7 +62,7 @@
   ///
   /// Note that [overrides] should be an instance of a class that extends
   /// [HttpOverrides].
-  static R runWithHttpOverrides<R>(R body(), HttpOverrides overrides) {
+  static R runWithHttpOverrides<R>(R Function() body, HttpOverrides overrides) {
     return _asyncRunZoned<R>(body,
         zoneValues: {_httpOverridesToken: overrides});
   }
@@ -70,7 +72,7 @@
   /// When this override is installed, this function overrides the behavior of
   /// `new HttpClient`.
   HttpClient createHttpClient(SecurityContext? context) {
-    return new _HttpClient(context);
+    return _HttpClient(context);
   }
 
   /// Resolves the proxy server to be used for HTTP connections.
diff --git a/sdk/lib/_http/websocket.dart b/sdk/lib/_http/websocket.dart
index 4b9bbff..9503ae3 100644
--- a/sdk/lib/_http/websocket.dart
+++ b/sdk/lib/_http/websocket.dart
@@ -4,9 +4,7 @@
 
 part of dart._http;
 
-/**
- * WebSocket status codes used when closing a WebSocket connection.
- */
+/// WebSocket status codes used when closing a WebSocket connection.
 abstract class WebSocketStatus {
   static const int normalClosure = 1000;
   static const int goingAway = 1001;
@@ -69,8 +67,7 @@
   /// * `serverNoContextTakeover`: false
   /// * `clientMaxWindowBits`: null (default maximal window size of 15 bits)
   /// * `serverMaxWindowBits`: null (default maximal window size of 15 bits)
-  static const CompressionOptions compressionDefault =
-      const CompressionOptions();
+  static const CompressionOptions compressionDefault = CompressionOptions();
   @Deprecated("Use compressionDefault instead")
   static const CompressionOptions DEFAULT = compressionDefault;
 
@@ -79,7 +76,7 @@
   /// Disables compression when used as compression configuration for a
   /// [WebSocket].
   static const CompressionOptions compressionOff =
-      const CompressionOptions(enabled: false);
+      CompressionOptions(enabled: false);
   @Deprecated("Use compressionOff instead")
   static const CompressionOptions OFF = compressionOff;
 
@@ -132,17 +129,17 @@
   /// negotiated max window bits.
   _CompressionMaxWindowBits _createServerResponseHeader(
       HeaderValue? requested) {
-    var info = new _CompressionMaxWindowBits("", 0);
+    var info = _CompressionMaxWindowBits("", 0);
 
     String? part = requested?.parameters[_serverMaxWindowBits];
     if (part != null) {
       if (part.length >= 2 && part.startsWith('0')) {
-        throw new ArgumentError("Illegal 0 padding on value.");
+        throw ArgumentError("Illegal 0 padding on value.");
       } else {
         int mwb = serverMaxWindowBits ??
             int.tryParse(part) ??
             _WebSocketImpl.DEFAULT_WINDOW_BITS;
-        info.headerValue = "; server_max_window_bits=${mwb}";
+        info.headerValue = "; server_max_window_bits=$mwb";
         info.maxWindowBits = mwb;
       }
     } else {
@@ -185,7 +182,7 @@
   /// [_CompressionMaxWindowBits] object with the response headers and
   /// negotiated `maxWindowBits` value.
   _CompressionMaxWindowBits _createHeader([HeaderValue? requested]) {
-    var info = new _CompressionMaxWindowBits("", 0);
+    var info = _CompressionMaxWindowBits("", 0);
     if (!enabled) {
       return info;
     }
@@ -194,15 +191,13 @@
 
     if (clientNoContextTakeover &&
         (requested == null ||
-            (requested != null &&
-                requested.parameters.containsKey(_clientNoContextTakeover)))) {
+            (requested.parameters.containsKey(_clientNoContextTakeover)))) {
       info.headerValue += "; client_no_context_takeover";
     }
 
     if (serverNoContextTakeover &&
         (requested == null ||
-            (requested != null &&
-                requested.parameters.containsKey(_serverNoContextTakeover)))) {
+            (requested.parameters.containsKey(_serverNoContextTakeover)))) {
       info.headerValue += "; server_no_context_takeover";
     }
 
@@ -217,100 +212,89 @@
   }
 }
 
-/**
- * The [WebSocketTransformer] provides the ability to upgrade a
- * [HttpRequest] to a [WebSocket] connection. It supports both
- * upgrading a single [HttpRequest] and upgrading a stream of
- * [HttpRequest]s.
- *
- * To upgrade a single [HttpRequest] use the static [upgrade] method.
- *
- *     HttpServer server;
- *     server.listen((request) {
- *       if (...) {
- *         WebSocketTransformer.upgrade(request).then((websocket) {
- *           ...
- *         });
- *       } else {
- *         // Do normal HTTP request processing.
- *       }
- *     });
- *
- * To transform a stream of [HttpRequest] events as it implements a
- * stream transformer that transforms a stream of HttpRequest into a
- * stream of WebSockets by upgrading each HttpRequest from the HTTP or
- * HTTPS server, to the WebSocket protocol.
- *
- *     server.transform(new WebSocketTransformer()).listen((webSocket) => ...);
- *
- * This transformer strives to implement WebSockets as specified by RFC6455.
- */
+/// The [WebSocketTransformer] provides the ability to upgrade a
+/// [HttpRequest] to a [WebSocket] connection. It supports both
+/// upgrading a single [HttpRequest] and upgrading a stream of
+/// [HttpRequest]s.
+///
+/// To upgrade a single [HttpRequest] use the static [upgrade] method.
+///
+///     HttpServer server;
+///     server.listen((request) {
+///       if (...) {
+///         WebSocketTransformer.upgrade(request).then((websocket) {
+///           ...
+///         });
+///       } else {
+///         // Do normal HTTP request processing.
+///       }
+///     });
+///
+/// To transform a stream of [HttpRequest] events as it implements a
+/// stream transformer that transforms a stream of HttpRequest into a
+/// stream of WebSockets by upgrading each HttpRequest from the HTTP or
+/// HTTPS server, to the WebSocket protocol.
+///
+///     server.transform(new WebSocketTransformer()).listen((webSocket) => ...);
+///
+/// This transformer strives to implement WebSockets as specified by RFC6455.
 abstract class WebSocketTransformer
     implements StreamTransformer<HttpRequest, WebSocket> {
-  /**
-   * Create a new [WebSocketTransformer].
-   *
-   * If [protocolSelector] is provided, [protocolSelector] will be called to
-   * select what protocol to use, if any were provided by the client.
-   * [protocolSelector] is should return either a [String] or a [Future]
-   * completing with a [String]. The [String] must exist in the list of
-   * protocols.
-   *
-   * If [compression] is provided, the [WebSocket] created will be configured
-   * to negotiate with the specified [CompressionOptions]. If none is specified
-   * then the [WebSocket] will be created with the default [CompressionOptions].
-   */
+  /// Create a new [WebSocketTransformer].
+  ///
+  /// If [protocolSelector] is provided, [protocolSelector] will be called to
+  /// select what protocol to use, if any were provided by the client.
+  /// [protocolSelector] is should return either a [String] or a [Future]
+  /// completing with a [String]. The [String] must exist in the list of
+  /// protocols.
+  ///
+  /// If [compression] is provided, the [WebSocket] created will be configured
+  /// to negotiate with the specified [CompressionOptions]. If none is specified
+  /// then the [WebSocket] will be created with the default [CompressionOptions].
   factory WebSocketTransformer(
-      {/*String|Future<String>*/ protocolSelector(List<String> protocols)?,
+      {/*String|Future<String>*/ Function(List<String> protocols)?
+          protocolSelector,
       CompressionOptions compression = CompressionOptions.compressionDefault}) {
-    return new _WebSocketTransformerImpl(protocolSelector, compression);
+    return _WebSocketTransformerImpl(protocolSelector, compression);
   }
 
-  /**
-   * Upgrades a [HttpRequest] to a [WebSocket] connection. If the
-   * request is not a valid WebSocket upgrade request an HTTP response
-   * with status code 500 will be returned. Otherwise the returned
-   * future will complete with the [WebSocket] when the upgrade process
-   * is complete.
-   *
-   * If [protocolSelector] is provided, [protocolSelector] will be called to
-   * select what protocol to use, if any were provided by the client.
-   * [protocolSelector] is should return either a [String] or a [Future]
-   * completing with a [String]. The [String] must exist in the list of
-   * protocols.
-   *
-   * If [compression] is provided, the [WebSocket] created will be configured
-   * to negotiate with the specified [CompressionOptions]. If none is specified
-   * then the [WebSocket] will be created with the default [CompressionOptions].
-   */
+  /// Upgrades a [HttpRequest] to a [WebSocket] connection. If the
+  /// request is not a valid WebSocket upgrade request an HTTP response
+  /// with status code 500 will be returned. Otherwise the returned
+  /// future will complete with the [WebSocket] when the upgrade process
+  /// is complete.
+  ///
+  /// If [protocolSelector] is provided, [protocolSelector] will be called to
+  /// select what protocol to use, if any were provided by the client.
+  /// [protocolSelector] is should return either a [String] or a [Future]
+  /// completing with a [String]. The [String] must exist in the list of
+  /// protocols.
+  ///
+  /// If [compression] is provided, the [WebSocket] created will be configured
+  /// to negotiate with the specified [CompressionOptions]. If none is specified
+  /// then the [WebSocket] will be created with the default [CompressionOptions].
   static Future<WebSocket> upgrade(HttpRequest request,
-      {protocolSelector(List<String> protocols)?,
+      {Function(List<String> protocols)? protocolSelector,
       CompressionOptions compression = CompressionOptions.compressionDefault}) {
     return _WebSocketTransformerImpl._upgrade(
         request, protocolSelector, compression);
   }
 
-  /**
-   * Checks whether the request is a valid WebSocket upgrade request.
-   */
+  /// Checks whether the request is a valid WebSocket upgrade request.
   static bool isUpgradeRequest(HttpRequest request) {
     return _WebSocketTransformerImpl._isUpgradeRequest(request);
   }
 }
 
-/**
- * A two-way HTTP communication object for client or server applications.
- *
- * The stream exposes the messages received. A text message will be of type
- * `String` and a binary message will be of type `List<int>`.
- */
+/// A two-way HTTP communication object for client or server applications.
+///
+/// The stream exposes the messages received. A text message will be of type
+/// `String` and a binary message will be of type `List<int>`.
 abstract class WebSocket
     implements
         Stream<dynamic /*String|List<int>*/ >,
         StreamSink<dynamic /*String|List<int>*/ > {
-  /**
-   * Possible states of the connection.
-   */
+  /// Possible states of the connection.
   static const int connecting = 0;
   static const int open = 1;
   static const int closing = 2;
@@ -325,52 +309,48 @@
   @Deprecated("Use closed instead")
   static const int CLOSED = closed;
 
-  /**
-   * The interval between ping signals.
-   *
-   * A ping message is sent every [pingInterval], starting at the first
-   * [pingInterval] after a new value has been assigned or a pong message has
-   * been received. If a ping message is not answered by a pong message from the
-   * peer, the `WebSocket` is assumed disconnected and the connection is closed
-   * with a [WebSocketStatus.goingAway] close code. When a ping signal is sent,
-   * the pong message must be received within [pingInterval].
-   *
-   * There are never two outstanding pings at any given time, and the next ping
-   * timer starts when the pong is received.
-   *
-   * Set the [pingInterval] to `null` to disable sending ping messages.
-   *
-   * The default value is `null`.
-   */
+  /// The interval between ping signals.
+  ///
+  /// A ping message is sent every [pingInterval], starting at the first
+  /// [pingInterval] after a new value has been assigned or a pong message has
+  /// been received. If a ping message is not answered by a pong message from the
+  /// peer, the `WebSocket` is assumed disconnected and the connection is closed
+  /// with a [WebSocketStatus.goingAway] close code. When a ping signal is sent,
+  /// the pong message must be received within [pingInterval].
+  ///
+  /// There are never two outstanding pings at any given time, and the next ping
+  /// timer starts when the pong is received.
+  ///
+  /// Set the [pingInterval] to `null` to disable sending ping messages.
+  ///
+  /// The default value is `null`.
   Duration? pingInterval;
 
-  /**
-   * Create a new WebSocket connection. The URL supplied in [url]
-   * must use the scheme `ws` or `wss`.
-   *
-   * The [protocols] argument is specifying the subprotocols the
-   * client is willing to speak.
-   *
-   * The [headers] argument is specifying additional HTTP headers for
-   * setting up the connection. This would typically be the `Origin`
-   * header and potentially cookies. The keys of the map are the header
-   * fields and the values are either String or List<String>.
-   *
-   * If [headers] is provided, there are a number of headers
-   * which are controlled by the WebSocket connection process. These
-   * headers are:
-   *
-   *   - `connection`
-   *   - `sec-websocket-key`
-   *   - `sec-websocket-protocol`
-   *   - `sec-websocket-version`
-   *   - `upgrade`
-   *
-   * If any of these are passed in the `headers` map they will be ignored.
-   *
-   * If the `url` contains user information this will be passed as basic
-   * authentication when setting up the connection.
-   */
+  /// Create a new WebSocket connection. The URL supplied in [url]
+  /// must use the scheme `ws` or `wss`.
+  ///
+  /// The [protocols] argument is specifying the subprotocols the
+  /// client is willing to speak.
+  ///
+  /// The [headers] argument is specifying additional HTTP headers for
+  /// setting up the connection. This would typically be the `Origin`
+  /// header and potentially cookies. The keys of the map are the header
+  /// fields and the values are either String or List<String>.
+  ///
+  /// If [headers] is provided, there are a number of headers
+  /// which are controlled by the WebSocket connection process. These
+  /// headers are:
+  ///
+  ///   - `connection`
+  ///   - `sec-websocket-key`
+  ///   - `sec-websocket-protocol`
+  ///   - `sec-websocket-version`
+  ///   - `upgrade`
+  ///
+  /// If any of these are passed in the `headers` map they will be ignored.
+  ///
+  /// If the `url` contains user information this will be passed as basic
+  /// authentication when setting up the connection.
   static Future<WebSocket> connect(String url,
           {Iterable<String>? protocols,
           Map<String, dynamic>? headers,
@@ -384,106 +364,82 @@
       ' instead of `extends` if implementing this abstract class.')
   WebSocket();
 
-  /**
-   * Creates a WebSocket from an already-upgraded socket.
-   *
-   * The initial WebSocket handshake must have occurred prior to this call. A
-   * WebSocket client can automatically perform the handshake using
-   * [WebSocket.connect], while a server can do so using
-   * [WebSocketTransformer.upgrade]. To manually upgrade an [HttpRequest],
-   * [HttpResponse.detachSocket] may be called.
-   *
-   * [protocol] should be the protocol negotiated by this handshake, if any.
-   *
-   * [serverSide] must be passed explicitly. If it's `false`, the WebSocket will
-   * act as the client and mask the messages it sends. If it's `true`, it will
-   * act as the server and will not mask its messages.
-   *
-   * If [compression] is provided, the [WebSocket] created will be configured
-   * to negotiate with the specified [CompressionOptions]. If none is specified
-   * then the [WebSocket] will be created with the default [CompressionOptions].
-   */
+  /// Creates a WebSocket from an already-upgraded socket.
+  ///
+  /// The initial WebSocket handshake must have occurred prior to this call. A
+  /// WebSocket client can automatically perform the handshake using
+  /// [WebSocket.connect], while a server can do so using
+  /// [WebSocketTransformer.upgrade]. To manually upgrade an [HttpRequest],
+  /// [HttpResponse.detachSocket] may be called.
+  ///
+  /// [protocol] should be the protocol negotiated by this handshake, if any.
+  ///
+  /// [serverSide] must be passed explicitly. If it's `false`, the WebSocket will
+  /// act as the client and mask the messages it sends. If it's `true`, it will
+  /// act as the server and will not mask its messages.
+  ///
+  /// If [compression] is provided, the [WebSocket] created will be configured
+  /// to negotiate with the specified [CompressionOptions]. If none is specified
+  /// then the [WebSocket] will be created with the default [CompressionOptions].
   factory WebSocket.fromUpgradedSocket(Socket socket,
       {String? protocol,
       bool? serverSide,
       CompressionOptions compression = CompressionOptions.compressionDefault}) {
     if (serverSide == null) {
-      throw new ArgumentError("The serverSide argument must be passed "
+      throw ArgumentError("The serverSide argument must be passed "
           "explicitly to WebSocket.fromUpgradedSocket.");
     }
-    return new _WebSocketImpl._fromSocket(
+    return _WebSocketImpl._fromSocket(
         socket, protocol, compression, serverSide);
   }
 
-  /**
-   * Returns the current state of the connection.
-   */
+  /// Returns the current state of the connection.
   int get readyState;
 
-  /**
-   * The extensions property is initially the empty string. After the
-   * WebSocket connection is established this string reflects the
-   * extensions used by the server.
-   */
+  /// The extensions property is initially the empty string. After the
+  /// WebSocket connection is established this string reflects the
+  /// extensions used by the server.
   String get extensions;
 
-  /**
-   * The protocol property is initially the empty string. After the
-   * WebSocket connection is established the value is the subprotocol
-   * selected by the server. If no subprotocol is negotiated the
-   * value will remain [:null:].
-   */
+  /// The protocol property is initially the empty string. After the
+  /// WebSocket connection is established the value is the subprotocol
+  /// selected by the server. If no subprotocol is negotiated the
+  /// value will remain [:null:].
   String? get protocol;
 
-  /**
-   * The close code set when the WebSocket connection is closed. If
-   * there is no close code available this property will be [:null:]
-   */
+  /// The close code set when the WebSocket connection is closed. If
+  /// there is no close code available this property will be [:null:]
   int? get closeCode;
 
-  /**
-   * The close reason set when the WebSocket connection is closed. If
-   * there is no close reason available this property will be [:null:]
-   */
+  /// The close reason set when the WebSocket connection is closed. If
+  /// there is no close reason available this property will be [:null:]
   String? get closeReason;
 
-  /**
-   * Closes the WebSocket connection. Set the optional [code] and [reason]
-   * arguments to send close information to the remote peer. If they are
-   * omitted, the peer will see [WebSocketStatus.noStatusReceived] code
-   * with no reason.
-   */
+  /// Closes the WebSocket connection. Set the optional [code] and [reason]
+  /// arguments to send close information to the remote peer. If they are
+  /// omitted, the peer will see [WebSocketStatus.noStatusReceived] code
+  /// with no reason.
   Future close([int? code, String? reason]);
 
-  /**
-   * Sends data on the WebSocket connection. The data in [data] must
-   * be either a `String`, or a `List<int>` holding bytes.
-   */
+  /// Sends data on the WebSocket connection. The data in [data] must
+  /// be either a `String`, or a `List<int>` holding bytes.
   void add(/*String|List<int>*/ data);
 
-  /**
-   * Sends data from a stream on WebSocket connection. Each data event from
-   * [stream] will be send as a single WebSocket frame. The data from [stream]
-   * must be either `String`s, or `List<int>`s holding bytes.
-   */
+  /// Sends data from a stream on WebSocket connection. Each data event from
+  /// [stream] will be send as a single WebSocket frame. The data from [stream]
+  /// must be either `String`s, or `List<int>`s holding bytes.
   Future addStream(Stream stream);
 
-  /**
-   * Sends a text message with the text represented by [bytes].
-   *
-   * The [bytes] should be valid UTF-8 encoded Unicode characters. If they are
-   * not, the receiving end will close the connection.
-   */
+  /// Sends a text message with the text represented by [bytes].
+  ///
+  /// The [bytes] should be valid UTF-8 encoded Unicode characters. If they are
+  /// not, the receiving end will close the connection.
   void addUtf8Text(List<int> bytes);
 
-  /**
-   * Gets the user agent used for WebSocket connections.
-   */
+  /// Gets the user agent used for WebSocket connections.
   static String? get userAgent => _WebSocketImpl.userAgent;
 
-  /**
-   * Sets the user agent to use for WebSocket connections.
-   */
+  /// Sets the user agent to use for WebSocket connections.
   static set userAgent(String? userAgent) {
     _WebSocketImpl.userAgent = userAgent;
   }
diff --git a/sdk/lib/_http/websocket_impl.dart b/sdk/lib/_http/websocket_impl.dart
index fe2c5a7..c7126c2 100644
--- a/sdk/lib/_http/websocket_impl.dart
+++ b/sdk/lib/_http/websocket_impl.dart
@@ -41,11 +41,9 @@
   _EncodedString(this.bytes);
 }
 
-/**
- *  Stores the header and integer value derived from negotiation of
- *  client_max_window_bits and server_max_window_bits. headerValue will be
- *  set in the Websocket response headers.
- */
+/// Stores the header and integer value derived from negotiation of
+/// client_max_window_bits and server_max_window_bits. headerValue will be
+/// set in the Websocket response headers.
 class _CompressionMaxWindowBits {
   String headerValue;
   int maxWindowBits;
@@ -53,15 +51,13 @@
   String toString() => headerValue;
 }
 
-/**
- * The web socket protocol transformer handles the protocol byte stream
- * which is supplied through the `handleData`. As the protocol is processed,
- * it'll output frame data as either a List<int> or String.
- *
- * Important information about usage: Be sure you use cancelOnError, so the
- * socket will be closed when the processor encounter an error. Not using it
- * will lead to undefined behaviour.
- */
+/// The web socket protocol transformer handles the protocol byte stream
+/// which is supplied through the `handleData`. As the protocol is processed,
+/// it'll output frame data as either a List<int> or String.
+///
+/// Important information about usage: Be sure you use cancelOnError, so the
+/// socket will be closed when the processor encounter an error. Not using it
+/// will lead to undefined behaviour.
 class _WebSocketProtocolTransformer extends StreamTransformerBase<List<int>,
         dynamic /*List<int>|_WebSocketPing|_WebSocketPong*/ >
     implements EventSink<List<int>> {
@@ -89,23 +85,23 @@
   int _remainingPayloadBytes = -1;
   int _unmaskingIndex = 0;
   int _currentMessageType = _WebSocketMessageType.NONE;
-  int closeCode = WebSocketStatus.NO_STATUS_RECEIVED;
+  int closeCode = WebSocketStatus.noStatusReceived;
   String closeReason = "";
 
   EventSink<dynamic /*List<int>|_WebSocketPing|_WebSocketPong*/ >? _eventSink;
 
   final bool _serverSide;
   final Uint8List _maskingBytes = Uint8List(4);
-  final BytesBuilder _payload = new BytesBuilder(copy: false);
+  final BytesBuilder _payload = BytesBuilder(copy: false);
 
-  _WebSocketPerMessageDeflate? _deflate;
+  final _WebSocketPerMessageDeflate? _deflate;
   _WebSocketProtocolTransformer([this._serverSide = false, this._deflate]);
 
   Stream<dynamic /*List<int>|_WebSocketPing|_WebSocketPong*/ > bind(
       Stream<List<int>> stream) {
-    return new Stream.eventTransformed(stream, (EventSink eventSink) {
+    return Stream.eventTransformed(stream, (EventSink eventSink) {
       if (_eventSink != null) {
-        throw new StateError("WebSocket transformer already used.");
+        throw StateError("WebSocket transformer already used.");
       }
       _eventSink = eventSink;
       return this;
@@ -122,18 +118,16 @@
     _eventSink!.close();
   }
 
-  /**
-   * Process data received from the underlying communication channel.
-   */
+  /// Process data received from the underlying communication channel.
   void add(List<int> bytes) {
-    var buffer = bytes is Uint8List ? bytes : new Uint8List.fromList(bytes);
+    var buffer = bytes is Uint8List ? bytes : Uint8List.fromList(bytes);
     int index = 0;
     int lastIndex = buffer.length;
     if (_state == CLOSED) {
-      throw new WebSocketException("Data on closed connection");
+      throw WebSocketException("Data on closed connection");
     }
     if (_state == FAILURE) {
-      throw new WebSocketException("Data on failed connection");
+      throw WebSocketException("Data on failed connection");
     }
     while ((index < lastIndex) && _state != CLOSED && _state != FAILURE) {
       int byte = buffer[index];
@@ -143,7 +137,7 @@
 
           if ((byte & (RSV2 | RSV3)) != 0) {
             // The RSV2, RSV3 bits must both be zero.
-            throw new WebSocketException("Protocol error");
+            throw WebSocketException("Protocol error");
           }
 
           _opcode = (byte & OPCODE);
@@ -159,29 +153,29 @@
           if (_opcode <= _WebSocketOpcode.BINARY) {
             if (_opcode == _WebSocketOpcode.CONTINUATION) {
               if (_currentMessageType == _WebSocketMessageType.NONE) {
-                throw new WebSocketException("Protocol error");
+                throw WebSocketException("Protocol error");
               }
             } else {
               assert(_opcode == _WebSocketOpcode.TEXT ||
                   _opcode == _WebSocketOpcode.BINARY);
               if (_currentMessageType != _WebSocketMessageType.NONE) {
-                throw new WebSocketException("Protocol error");
+                throw WebSocketException("Protocol error");
               }
               _currentMessageType = _opcode;
             }
           } else if (_opcode >= _WebSocketOpcode.CLOSE &&
               _opcode <= _WebSocketOpcode.PONG) {
             // Control frames cannot be fragmented.
-            if (!_fin) throw new WebSocketException("Protocol error");
+            if (!_fin) throw WebSocketException("Protocol error");
           } else {
-            throw new WebSocketException("Protocol error");
+            throw WebSocketException("Protocol error");
           }
           _state = LEN_FIRST;
         } else if (_state == LEN_FIRST) {
           _masked = (byte & 0x80) != 0;
           _len = byte & 0x7F;
           if (_isControlFrame() && _len > 125) {
-            throw new WebSocketException("Protocol error");
+            throw WebSocketException("Protocol error");
           }
           if (_len == 126) {
             _len = 0;
@@ -219,7 +213,7 @@
             _unmask(index, payloadLength, buffer);
           }
           // Control frame and data frame share _payloads.
-          _payload.add(new Uint8List.view(
+          _payload.add(Uint8List.view(
               buffer.buffer, buffer.offsetInBytes + index, payloadLength));
           index += payloadLength;
           if (_isControlFrame()) {
@@ -227,7 +221,7 @@
           } else {
             if (_currentMessageType != _WebSocketMessageType.TEXT &&
                 _currentMessageType != _WebSocketMessageType.BINARY) {
-              throw new WebSocketException("Protocol error");
+              throw WebSocketException("Protocol error");
             }
             if (_remainingPayloadBytes == 0) _messageFrameEnd();
           }
@@ -261,8 +255,8 @@
         for (int i = 3; i >= 0; i--) {
           mask = (mask << 8) | _maskingBytes[(_unmaskingIndex + i) & 3];
         }
-        Int32x4 blockMask = new Int32x4(mask, mask, mask, mask);
-        Int32x4List blockBuffer = new Int32x4List.view(
+        Int32x4 blockMask = Int32x4(mask, mask, mask, mask);
+        Int32x4List blockBuffer = Int32x4List.view(
             buffer.buffer, buffer.offsetInBytes + index, blockCount);
         for (int i = 0; i < blockBuffer.length; i++) {
           blockBuffer[i] ^= blockMask;
@@ -282,12 +276,12 @@
   void _lengthDone() {
     if (_masked) {
       if (!_serverSide) {
-        throw new WebSocketException("Received masked frame from server");
+        throw WebSocketException("Received masked frame from server");
       }
       _state = MASK;
     } else {
       if (_serverSide) {
-        throw new WebSocketException("Received unmasked frame from client");
+        throw WebSocketException("Received unmasked frame from client");
       }
       _remainingPayloadBytes = _len;
       _startPayload();
@@ -310,10 +304,10 @@
             _eventSink!.close();
             break;
           case _WebSocketOpcode.PING:
-            _eventSink!.add(new _WebSocketPing());
+            _eventSink!.add(_WebSocketPing());
             break;
           case _WebSocketOpcode.PONG:
-            _eventSink!.add(new _WebSocketPong());
+            _eventSink!.add(_WebSocketPong());
             break;
         }
         _prepareForNextFrame();
@@ -351,13 +345,13 @@
       case _WebSocketOpcode.CLOSE:
         closeCode = WebSocketStatus.noStatusReceived;
         var payload = _payload.takeBytes();
-        if (payload.length > 0) {
+        if (payload.isNotEmpty) {
           if (payload.length == 1) {
-            throw new WebSocketException("Protocol error");
+            throw WebSocketException("Protocol error");
           }
           closeCode = payload[0] << 8 | payload[1];
           if (closeCode == WebSocketStatus.noStatusReceived) {
-            throw new WebSocketException("Protocol error");
+            throw WebSocketException("Protocol error");
           }
           if (payload.length > 2) {
             closeReason = utf8.decode(payload.sublist(2));
@@ -368,11 +362,11 @@
         break;
 
       case _WebSocketOpcode.PING:
-        _eventSink!.add(new _WebSocketPing(_payload.takeBytes()));
+        _eventSink!.add(_WebSocketPing(_payload.takeBytes()));
         break;
 
       case _WebSocketOpcode.PONG:
-        _eventSink!.add(new _WebSocketPong(_payload.takeBytes()));
+        _eventSink!.add(_WebSocketPong(_payload.takeBytes()));
         break;
     }
     _prepareForNextFrame();
@@ -398,21 +392,22 @@
 
 class _WebSocketPing {
   final List<int>? payload;
-  _WebSocketPing([this.payload = null]);
+  _WebSocketPing([this.payload]);
 }
 
 class _WebSocketPong {
   final List<int>? payload;
-  _WebSocketPong([this.payload = null]);
+  _WebSocketPong([this.payload]);
 }
 
-typedef /*String|Future<String>*/ _ProtocolSelector(List<String> protocols);
+typedef /*String|Future<String>*/ _ProtocolSelector = Function(
+    List<String> protocols);
 
 class _WebSocketTransformerImpl
     extends StreamTransformerBase<HttpRequest, WebSocket>
     implements WebSocketTransformer {
   final StreamController<WebSocket> _controller =
-      new StreamController<WebSocket>(sync: true);
+      StreamController<WebSocket>(sync: true);
   final _ProtocolSelector? _protocolSelector;
   final CompressionOptions _compression;
 
@@ -455,8 +450,8 @@
       response
         ..statusCode = HttpStatus.badRequest
         ..close();
-      return new Future.error(
-          new WebSocketException("Invalid WebSocket upgrade request"));
+      return Future.error(
+          WebSocketException("Invalid WebSocket upgrade request"));
     }
 
     Future<WebSocket> upgrade(String? protocol) {
@@ -466,9 +461,9 @@
         ..headers.add(HttpHeaders.connectionHeader, "Upgrade")
         ..headers.add(HttpHeaders.upgradeHeader, "websocket");
       String key = request.headers.value("Sec-WebSocket-Key")!;
-      _SHA1 sha1 = new _SHA1();
+      _SHA1 sha1 = _SHA1();
       sha1.add("$key$_webSocketGUID".codeUnits);
-      String accept = _CryptoUtils.bytesToBase64(sha1.close());
+      String accept = base64Encode(sha1.close());
       response.headers.add("Sec-WebSocket-Accept", accept);
       if (protocol != null) {
         response.headers.add("Sec-WebSocket-Protocol", protocol);
@@ -478,7 +473,7 @@
 
       response.headers.contentLength = 0;
       return response.detachSocket().then<WebSocket>((socket) =>
-          new _WebSocketImpl._fromSocket(
+          _WebSocketImpl._fromSocket(
               socket, protocol, compression, true, deflate));
     }
 
@@ -488,10 +483,10 @@
       // consisting of multiple protocols. To unify all of them, first join
       // the lists with ', ' and then tokenize.
       var tokenizedProtocols = _tokenizeFieldValue(protocols.join(', '));
-      return new Future<String>(() => protocolSelector(tokenizedProtocols))
+      return Future<String>(() => protocolSelector(tokenizedProtocols))
           .then<String>((protocol) {
-        if (tokenizedProtocols.indexOf(protocol) < 0) {
-          throw new WebSocketException(
+        if (!tokenizedProtocols.contains(protocol)) {
+          throw WebSocketException(
               "Selected protocol is not in the list of available protocols");
         }
         return protocol;
@@ -523,7 +518,7 @@
       var clientNoContextTakeover =
           (hv.parameters.containsKey(_clientNoContextTakeover) &&
               compression.clientNoContextTakeover);
-      var deflate = new _WebSocketPerMessageDeflate(
+      var deflate = _WebSocketPerMessageDeflate(
           serverNoContextTakeover: serverNoContextTakeover,
           clientNoContextTakeover: clientNoContextTakeover,
           serverMaxWindowBits: info.maxWindowBits,
@@ -585,11 +580,11 @@
       this.clientNoContextTakeover = false,
       this.serverSide = false});
 
-  RawZLibFilter _ensureDecoder() => decoder ??= new RawZLibFilter.inflateFilter(
+  RawZLibFilter _ensureDecoder() => decoder ??= RawZLibFilter.inflateFilter(
       windowBits: serverSide ? clientMaxWindowBits : serverMaxWindowBits,
       raw: true);
 
-  RawZLibFilter _ensureEncoder() => encoder ??= new RawZLibFilter.deflateFilter(
+  RawZLibFilter _ensureEncoder() => encoder ??= RawZLibFilter.deflateFilter(
       windowBits: serverSide ? serverMaxWindowBits : clientMaxWindowBits,
       raw: true);
 
@@ -601,8 +596,7 @@
     data.addAll(const [0x00, 0x00, 0xff, 0xff]);
 
     decoder.process(data, 0, data.length);
-    final result = new BytesBuilder();
-    List<int> out;
+    final result = BytesBuilder();
 
     while (true) {
       final out = decoder.processed();
@@ -626,11 +620,11 @@
     if (msg is! Uint8List) {
       for (var i = 0; i < msg.length; i++) {
         if (msg[i] < 0 || 255 < msg[i]) {
-          throw new ArgumentError("List element is not a byte value "
+          throw ArgumentError("List element is not a byte value "
               "(value ${msg[i]} at index $i)");
         }
       }
-      buffer = new Uint8List.fromList(msg);
+      buffer = Uint8List.fromList(msg);
     } else {
       buffer = msg;
     }
@@ -657,7 +651,7 @@
     // then an empty uncompressed deflate block is used for this purpose. The
     // 0x00 block has the BFINAL header bit set to 0 and the BTYPE header set to
     // 00 along with 5 bits of padding. This block decodes to zero bytes.
-    if (result.length == 0) {
+    if (result.isEmpty) {
       return [0x00];
     }
 
@@ -671,16 +665,16 @@
   final _WebSocketImpl webSocket;
   EventSink<List<int>>? _eventSink;
 
-  _WebSocketPerMessageDeflate? _deflateHelper;
+  final _WebSocketPerMessageDeflate? _deflateHelper;
 
   _WebSocketOutgoingTransformer(this.webSocket)
       : _deflateHelper = webSocket._deflate;
 
   Stream<List<int>> bind(Stream stream) {
-    return new Stream<List<int>>.eventTransformed(stream,
+    return Stream<List<int>>.eventTransformed(stream,
         (EventSink<List<int>> eventSink) {
       if (_eventSink != null) {
-        throw new StateError("WebSocket transformer already used");
+        throw StateError("WebSocket transformer already used");
       }
       _eventSink = eventSink;
       return this;
@@ -710,7 +704,7 @@
         opcode = _WebSocketOpcode.TEXT;
         messageData = message.bytes;
       } else {
-        throw new ArgumentError(message);
+        throw ArgumentError(message);
       }
       var deflateHelper = _deflateHelper;
       if (deflateHelper != null) {
@@ -768,7 +762,7 @@
     } else if (dataLength > 125) {
       headerSize += 2;
     }
-    Uint8List header = new Uint8List(headerSize);
+    Uint8List header = Uint8List(headerSize);
     int index = 0;
 
     // Set FIN and opcode.
@@ -803,12 +797,12 @@
           list = data;
         } else {
           if (data is Uint8List) {
-            list = new Uint8List.fromList(data);
+            list = Uint8List.fromList(data);
           } else {
-            list = new Uint8List(data.length);
+            list = Uint8List(data.length);
             for (int i = 0; i < data.length; i++) {
               if (data[i] < 0 || 255 < data[i]) {
-                throw new ArgumentError("List element is not a byte value "
+                throw ArgumentError("List element is not a byte value "
                     "(value ${data[i]} at index $i)");
               }
               list[i] = data[i];
@@ -823,9 +817,9 @@
           for (int i = 3; i >= 0; i--) {
             mask = (mask << 8) | maskBytes[i];
           }
-          Int32x4 blockMask = new Int32x4(mask, mask, mask, mask);
+          Int32x4 blockMask = Int32x4(mask, mask, mask, mask);
           Int32x4List blockBuffer =
-              new Int32x4List.view(list.buffer, list.offsetInBytes, blockCount);
+              Int32x4List.view(list.buffer, list.offsetInBytes, blockCount);
           for (int i = 0; i < blockBuffer.length; i++) {
             blockBuffer[i] ^= blockMask;
           }
@@ -853,7 +847,7 @@
   StreamSubscription? _subscription;
   bool _issuedPause = false;
   bool _closed = false;
-  Completer _closeCompleter = new Completer<WebSocket>();
+  final Completer _closeCompleter = Completer<WebSocket>();
   Completer? _completer;
 
   _WebSocketConsumer(this.webSocket, this.socket);
@@ -891,13 +885,13 @@
   StreamController _ensureController() {
     var controller = _controller;
     if (controller != null) return controller;
-    controller = _controller = new StreamController(
+    controller = _controller = StreamController(
         sync: true,
         onPause: _onPause,
         onResume: _onResume,
         onCancel: _onListen);
-    var stream = controller.stream
-        .transform(new _WebSocketOutgoingTransformer(webSocket));
+    var stream =
+        controller.stream.transform(_WebSocketOutgoingTransformer(webSocket));
     socket.addStream(stream).then((_) {
       _done();
       _closeCompleter.complete(webSocket);
@@ -931,10 +925,10 @@
   Future addStream(Stream stream) {
     if (_closed) {
       stream.listen(null).cancel();
-      return new Future.value(webSocket);
+      return Future.value(webSocket);
     }
     _ensureController();
-    var completer = _completer = new Completer();
+    var completer = _completer = Completer();
     var subscription = _subscription = stream.listen((data) {
       _controller!.add(data);
     }, onDone: _done, onError: _done, cancelOnError: true);
@@ -970,7 +964,7 @@
 
 class _WebSocketImpl extends Stream with _ServiceObject implements WebSocket {
   // Use default Map so we keep order.
-  static Map<int, _WebSocketImpl> _webSockets = new Map<int, _WebSocketImpl>();
+  static final Map<int, _WebSocketImpl> _webSockets = <int, _WebSocketImpl>{};
   static const int DEFAULT_WINDOW_BITS = 15;
   static const String PER_MESSAGE_DEFLATE = "permessage-deflate";
 
@@ -995,7 +989,7 @@
   Timer? _closeTimer;
   _WebSocketPerMessageDeflate? _deflate;
 
-  static final HttpClient _httpClient = new HttpClient();
+  static final HttpClient _httpClient = HttpClient();
 
   static Future<WebSocket> connect(
       String url, Iterable<String>? protocols, Map<String, dynamic>? headers,
@@ -1003,20 +997,20 @@
       HttpClient? customClient}) {
     Uri uri = Uri.parse(url);
     if (uri.scheme != "ws" && uri.scheme != "wss") {
-      throw new WebSocketException("Unsupported URL scheme '${uri.scheme}'");
+      throw WebSocketException("Unsupported URL scheme '${uri.scheme}'");
     }
 
-    Random random = new Random();
+    Random random = Random();
     // Generate 16 random bytes.
-    Uint8List nonceData = new Uint8List(16);
+    Uint8List nonceData = Uint8List(16);
     for (int i = 0; i < 16; i++) {
       nonceData[i] = random.nextInt(256);
     }
-    String nonce = _CryptoUtils.bytesToBase64(nonceData);
+    String nonce = base64Encode(nonceData);
 
     final callerStackTrace = StackTrace.current;
 
-    uri = new Uri(
+    uri = Uri(
         scheme: uri.scheme == "wss" ? "https" : "http",
         userInfo: uri.userInfo,
         host: uri.host,
@@ -1025,10 +1019,10 @@
         query: uri.query,
         fragment: uri.fragment);
     return (customClient ?? _httpClient).openUrl("GET", uri).then((request) {
-      if (uri.userInfo != null && !uri.userInfo.isEmpty) {
+      if (uri.userInfo != null && uri.userInfo.isNotEmpty) {
         // If the URL contains user information use that for basic
         // authorization.
-        String auth = _CryptoUtils.bytesToBase64(utf8.encode(uri.userInfo));
+        String auth = base64Encode(utf8.encode(uri.userInfo));
         request.headers.set(HttpHeaders.authorizationHeader, "Basic $auth");
       }
       if (headers != null) {
@@ -1058,7 +1052,7 @@
           socket.destroy();
         });
         return Future<WebSocket>.error(
-            new WebSocketException(message), callerStackTrace);
+            WebSocketException(message), callerStackTrace);
       }
 
       var connectionHeader = response.headers[HttpHeaders.connectionHeader];
@@ -1074,10 +1068,10 @@
         return error(
             "Response did not contain a 'Sec-WebSocket-Accept' header");
       }
-      _SHA1 sha1 = new _SHA1();
+      _SHA1 sha1 = _SHA1();
       sha1.add("$nonce$_webSocketGUID".codeUnits);
       List<int> expectedAccept = sha1.close();
-      List<int> receivedAccept = _CryptoUtils.base64StringToBytes(accept);
+      List<int> receivedAccept = base64Decode(accept);
       if (expectedAccept.length != receivedAccept.length) {
         return error(
             "Response header 'Sec-WebSocket-Accept' is the wrong length");
@@ -1093,7 +1087,7 @@
           negotiateClientCompression(response, compression);
 
       return response.detachSocket().then<WebSocket>((socket) =>
-          new _WebSocketImpl._fromSocket(
+          _WebSocketImpl._fromSocket(
               socket, protocol, compression, false, deflate));
     });
   }
@@ -1120,7 +1114,7 @@
         return int.tryParse(o) ?? DEFAULT_WINDOW_BITS;
       }
 
-      return new _WebSocketPerMessageDeflate(
+      return _WebSocketPerMessageDeflate(
           clientMaxWindowBits: getWindowBits(_clientMaxWindowBits),
           serverMaxWindowBits: getWindowBits(_serverMaxWindowBits),
           clientNoContextTakeover: clientNoContextTakeover,
@@ -1133,16 +1127,16 @@
   _WebSocketImpl._fromSocket(
       this._socket, this.protocol, CompressionOptions compression,
       [this._serverSide = false, _WebSocketPerMessageDeflate? deflate])
-      : _controller = new StreamController(sync: true) {
-    _consumer = new _WebSocketConsumer(this, _socket);
-    _sink = new _StreamSinkImpl(_consumer);
+      : _controller = StreamController(sync: true) {
+    _consumer = _WebSocketConsumer(this, _socket);
+    _sink = _StreamSinkImpl(_consumer);
     _readyState = WebSocket.open;
     _deflate = deflate;
 
-    var transformer = new _WebSocketProtocolTransformer(_serverSide, deflate);
+    var transformer = _WebSocketProtocolTransformer(_serverSide, deflate);
     var subscription = _subscription = transformer.bind(_socket).listen((data) {
       if (data is _WebSocketPing) {
-        if (!_writeClosed) _consumer.add(new _WebSocketPong(data.payload));
+        if (!_writeClosed) _consumer.add(_WebSocketPong(data.payload));
       } else if (data is _WebSocketPong) {
         // Simply set pingInterval, as it'll cancel any timers.
         pingInterval = _pingInterval;
@@ -1190,7 +1184,7 @@
   }
 
   StreamSubscription listen(void onData(message)?,
-      {Function? onError, void onDone()?, bool? cancelOnError}) {
+      {Function? onError, void Function()? onDone, bool? cancelOnError}) {
     return _controller.stream.listen(onData,
         onError: onError, onDone: onDone, cancelOnError: cancelOnError);
   }
@@ -1204,10 +1198,10 @@
 
     if (interval == null) return;
 
-    _pingTimer = new Timer(interval, () {
+    _pingTimer = Timer(interval, () {
       if (_writeClosed) return;
-      _consumer.add(new _WebSocketPing());
-      _pingTimer = new Timer(interval, () {
+      _consumer.add(_WebSocketPing());
+      _pingTimer = Timer(interval, () {
         _closeTimer?.cancel();
         // No pong received.
         _close(WebSocketStatus.goingAway);
@@ -1231,7 +1225,7 @@
   void addUtf8Text(List<int> bytes) {
     // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(bytes, "bytes");
-    _sink.add(new _EncodedString(bytes));
+    _sink.add(_EncodedString(bytes));
   }
 
   void addError(Object error, [StackTrace? stackTrace]) {
@@ -1243,7 +1237,7 @@
 
   Future close([int? code, String? reason]) {
     if (_isReservedStatusCode(code)) {
-      throw new WebSocketException("Reserved status code $code");
+      throw WebSocketException("Reserved status code $code");
     }
     if (_outCloseCode == null) {
       _outCloseCode = code;
@@ -1258,17 +1252,14 @@
       if (!_controller.hasListener && _subscription != null) {
         _controller.stream.drain().catchError((_) => {});
       }
-      if (_closeTimer == null) {
-        // When closing the web-socket, we no longer accept data.
-        _closeTimer = new Timer(const Duration(seconds: 5), () {
-          // Reuse code and reason from the local close.
-          _closeCode = _outCloseCode;
-          _closeReason = _outCloseReason;
-          _subscription?.cancel();
-          _controller.close();
-          _webSockets.remove(_serviceId);
-        });
-      }
+      _closeTimer ??= Timer(const Duration(seconds: 5), () {
+        // Reuse code and reason from the local close.
+        _closeCode = _outCloseCode;
+        _closeReason = _outCloseReason;
+        _subscription?.cancel();
+        _controller.close();
+        _webSockets.remove(_serviceId);
+      });
     }
     return _sink.close();
   }
diff --git a/sdk/lib/_internal/fix_data.yaml b/sdk/lib/_internal/fix_data.yaml
index 7f87843..98ccd55 100644
--- a/sdk/lib/_internal/fix_data.yaml
+++ b/sdk/lib/_internal/fix_data.yaml
@@ -1307,56 +1307,6 @@
       - kind: 'rename'
         newName: 'gzip'
 
-  - title: "Rename to 'read'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'READ'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'read'
-
-  - title: "Rename to 'write'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'WRITE'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'write'
-
-  - title: "Rename to 'append'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'APPEND'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'append'
-
-  - title: "Rename to 'writeOnly'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'WRITE_ONLY'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'writeOnly'
-
-  - title: "Rename to 'writeOnlyAppend'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'WRITE_ONLY_APPEND'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'writeOnlyAppend'
-
   - title: "Rename to 'shared'"
     date: 2021-09-20
     element:
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
index 882f10c..4960213 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
@@ -502,6 +502,48 @@
 }
 
 @patch
+class SocketControlMessage {
+  @patch
+  factory SocketControlMessage.fromHandles(List<ResourceHandle> handles) {
+    throw UnsupportedError("SocketControlMessage constructor");
+  }
+}
+
+@patch
+class ResourceHandle {
+  @patch
+  factory ResourceHandle.fromFile(RandomAccessFile file) {
+    throw UnsupportedError("ResourceHandle.fromFile constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromSocket(Socket socket) {
+    throw UnsupportedError("ResourceHandle.fromSocket constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromRawSocket(RawSocket rawSocket) {
+    throw UnsupportedError("ResourceHandle.fromRawSocket constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromRawDatagramSocket(
+      RawDatagramSocket rawDatagramSocket) {
+    throw UnsupportedError("ResourceHandle.fromRawDatagramSocket constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromStdin(Stdin stdin) {
+    throw UnsupportedError("ResourceHandle.fromStdin constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromStdout(Stdout stdout) {
+    throw UnsupportedError("ResourceHandle.fromStdout constructor");
+  }
+}
+
+@patch
 class SecureSocket {
   @patch
   factory SecureSocket._(RawSecureSocket rawSocket) {
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/math_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/math_patch.dart
index 288f66e..fe52156 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/math_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/math_patch.dart
@@ -67,14 +67,14 @@
 
 @patch
 class Random {
-  static Random? _secureRandom;
+  static final Random _secureRandom = _JSSecureRandom();
 
   @patch
   factory Random([int? seed]) =>
       (seed == null) ? const _JSRandom() : _Random(seed);
 
   @patch
-  factory Random.secure() => _secureRandom ??= _JSSecureRandom();
+  factory Random.secure() => _secureRandom;
 }
 
 class _JSRandom implements Random {
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
index c92852f..9904b5c 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
@@ -1188,40 +1188,47 @@
 
 /// Returns true if [ft1] <: [ft2].
 @notNull
-bool _isFunctionSubtype(ft1, ft2, @notNull bool strictMode) =>
-    JS<bool>('!', '''(() => {
-  let ret1 = $ft1.returnType;
-  let ret2 = $ft2.returnType;
+bool _isFunctionSubtype(@notNull FunctionType ft1, @notNull FunctionType ft2,
+    @notNull bool strictMode) {
+  var ret1 = ft1.returnType;
+  var ret2 = ft2.returnType;
 
-  let args1 = $ft1.args;
-  let args2 = $ft2.args;
+  var args1 = ft1.args;
+  var args1Length = JS<int>('!', '#.length', args1);
+  var args2 = ft2.args;
+  var args2Length = JS<int>('!', '#.length', args2);
 
-  if (args1.length > args2.length) {
+  if (args1Length > args2Length) {
     return false;
   }
 
-  for (let i = 0; i < args1.length; ++i) {
-    if (!$_isSubtype(args2[i], args1[i], strictMode)) {
+  for (var i = 0; i < args1Length; ++i) {
+    if (!_isSubtype(
+        JS('!', '#[#]', args2, i), JS('!', '#[#]', args1, i), strictMode)) {
       return false;
     }
   }
 
-  let optionals1 = $ft1.optionals;
-  let optionals2 = $ft2.optionals;
+  var optionals1 = ft1.optionals;
+  var optionals1Length = JS<int>('!', '#.length', optionals1);
+  var optionals2 = ft2.optionals;
+  var optionals2Length = JS<int>('!', '#.length', optionals2);
 
-  if (args1.length + optionals1.length < args2.length + optionals2.length) {
+  if (args1Length + optionals1Length < args2Length + optionals2Length) {
     return false;
   }
 
-  let j = 0;
-  for (let i = args1.length; i < args2.length; ++i, ++j) {
-    if (!$_isSubtype(args2[i], optionals1[j], strictMode)) {
+  var j = 0;
+  for (var i = args1Length; i < args2Length; ++i, ++j) {
+    if (!_isSubtype(JS('!', '#[#]', args2, i), JS('!', '#[#]', optionals1, j),
+        strictMode)) {
       return false;
     }
   }
 
-  for (let i = 0; i < optionals2.length; ++i, ++j) {
-    if (!$_isSubtype(optionals2[i], optionals1[j], strictMode)) {
+  for (var i = 0; i < optionals2Length; ++i, ++j) {
+    if (!_isSubtype(JS('!', '#[#]', optionals2, i),
+        JS('!', '#[#]', optionals1, j), strictMode)) {
       return false;
     }
   }
@@ -1232,53 +1239,56 @@
   //    in the superclass.
   // 3) With strict null checking disabled, we treat required named params as
   //    optional named params.
-  let named1 = $ft1.named;
-  let requiredNamed1 = $ft1.requiredNamed;
-  let named2 = $ft2.named;
-  let requiredNamed2 = $ft2.requiredNamed;
+  var named1 = ft1.named;
+  var requiredNamed1 = ft1.requiredNamed;
+  var named2 = ft2.named;
+  var requiredNamed2 = ft2.requiredNamed;
   if (!strictMode) {
     // In weak mode, treat required named params as optional named params.
-    named1 = Object.assign({}, named1, requiredNamed1);
-    named2 = Object.assign({}, named2, requiredNamed2);
-    requiredNamed1 = {};
-    requiredNamed2 = {};
+    named1 = JS('!', 'Object.assign({}, #, #)', named1, requiredNamed1);
+    named2 = JS('!', 'Object.assign({}, #, #)', named2, requiredNamed2);
+    requiredNamed1 = JS('!', '{}');
+    requiredNamed2 = JS('!', '{}');
   }
 
-  let names = $getOwnPropertyNames(requiredNamed1);
-  for (let i = 0; i < names.length; ++i) {
-    let name = names[i];
-    let n2 = requiredNamed2[name];
-    if (n2 === void 0) {
+  var names = getOwnPropertyNames(requiredNamed1);
+  var namesLength = JS<int>('!', '#.length', names);
+  for (var i = 0; i < namesLength; ++i) {
+    var name = JS('!', '#[#]', names, i);
+    var n2 = JS('!', '#[#]', requiredNamed2, name);
+    if (JS<bool>('!', '# === void 0', n2)) {
       return false;
     }
   }
-  names = $getOwnPropertyNames(named2);
-  for (let i = 0; i < names.length; ++i) {
-    let name = names[i];
-    let n1 = named1[name];
-    let n2 = named2[name];
-    if (n1 === void 0) {
+  names = getOwnPropertyNames(named2);
+  namesLength = JS<int>('!', '#.length', names);
+  for (var i = 0; i < namesLength; ++i) {
+    var name = JS('!', '#[#]', names, i);
+    var n1 = JS('!', '#[#]', named1, name);
+    var n2 = JS('!', '#[#]', named2, name);
+    if (JS<bool>('!', '# === void 0', n1)) {
       return false;
     }
-    if (!$_isSubtype(n2, n1, strictMode)) {
+    if (!_isSubtype(n2, n1, strictMode)) {
       return false;
     }
   }
-  names = $getOwnPropertyNames(requiredNamed2);
-  for (let i = 0; i < names.length; ++i) {
-    let name = names[i];
-    let n1 = named1[name] || requiredNamed1[name];
-    let n2 = requiredNamed2[name];
-    if (n1 === void 0) {
+  names = getOwnPropertyNames(requiredNamed2);
+  namesLength = JS<int>('!', '#.length', names);
+  for (var i = 0; i < namesLength; ++i) {
+    var name = JS('!', '#[#]', names, i);
+    var n1 = JS('!', '#[#] || #[#]', named1, name, requiredNamed1, name);
+    var n2 = JS('!', '#[#]', requiredNamed2, name);
+    if (JS<bool>('!', '# === void 0', n1)) {
       return false;
     }
-    if (!$_isSubtype(n2, n1, strictMode)) {
+    if (!_isSubtype(n2, n1, strictMode)) {
       return false;
     }
   }
 
-  return $_isSubtype(ret1, ret2, strictMode);
-})()''');
+  return _isSubtype(ret1, ret2, strictMode);
+}
 
 /// Number of generic function type variables encountered so far during a
 /// subtype check.
@@ -1603,7 +1613,8 @@
   }
 
   // Handle non-generic functions.
-  return _isFunctionSubtype(t1, t2, strictMode);
+  return _isFunctionSubtype(JS<FunctionType>('!', '#', t1),
+      JS<FunctionType>('!', '#', t2), strictMode);
 }
 
 @notNull
diff --git a/sdk/lib/_internal/js_dev_runtime/private/debugger.dart b/sdk/lib/_internal/js_dev_runtime/private/debugger.dart
index 1f9e933..467e012 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/debugger.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/debugger.dart
@@ -924,23 +924,9 @@
     // implemented interfaces, and methods.
     var ret = LinkedHashSet<NameValuePair>();
 
-    var staticProperties = Set<NameValuePair>();
-    var staticMethods = Set<NameValuePair>();
-    // Static fields and properties.
-    addPropertiesFromSignature(
-        dart.getStaticFields(type), staticProperties, type, false);
-    addPropertiesFromSignature(
-        dart.getStaticGetters(type), staticProperties, type, false);
-    // static methods.
-    addPropertiesFromSignature(
-        dart.getStaticMethods(type), staticMethods, type, false);
-
-    if (staticProperties.isNotEmpty || staticMethods.isNotEmpty) {
-      ret
-        ..add(NameValuePair(value: '[[Static members]]', hideName: true))
-        ..addAll(sortProperties(staticProperties))
-        ..addAll(sortProperties(staticMethods));
-    }
+    // Static fields, getters, setters, and methods signatures were removed
+    // from the runtime representation because they are not needed. At this
+    // time there is no intention to support them in this custom formatter.
 
     // instance methods.
     var instanceMethods = Set<NameValuePair>();
diff --git a/sdk/lib/_internal/js_runtime/lib/io_patch.dart b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
index 2ee566b..6a88d0f 100644
--- a/sdk/lib/_internal/js_runtime/lib/io_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
@@ -502,6 +502,48 @@
 }
 
 @patch
+class SocketControlMessage {
+  @patch
+  factory SocketControlMessage.fromHandles(List<ResourceHandle> handles) {
+    throw UnsupportedError("SocketControlMessage constructor");
+  }
+}
+
+@patch
+class ResourceHandle {
+  @patch
+  factory ResourceHandle.fromFile(RandomAccessFile file) {
+    throw UnsupportedError("ResourceHandle.fromFile constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromSocket(Socket socket) {
+    throw UnsupportedError("ResourceHandle.fromSocket constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromRawSocket(RawSocket rawSocket) {
+    throw UnsupportedError("ResourceHandle.fromRawSocket constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromRawDatagramSocket(
+      RawDatagramSocket rawDatagramSocket) {
+    throw UnsupportedError("ResourceHandle.fromRawDatagramSocket constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromStdin(Stdin stdin) {
+    throw UnsupportedError("ResourceHandle.fromStdin constructor");
+  }
+
+  @patch
+  factory ResourceHandle.fromStdout(Stdout stdout) {
+    throw UnsupportedError("ResourceHandle.fromStdout constructor");
+  }
+}
+
+@patch
 class SecureSocket {
   @patch
   factory SecureSocket._(RawSecureSocket rawSocket) {
diff --git a/sdk/lib/_internal/js_runtime/lib/math_patch.dart b/sdk/lib/_internal/js_runtime/lib/math_patch.dart
index 585f4c5..64236b3 100644
--- a/sdk/lib/_internal/js_runtime/lib/math_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/math_patch.dart
@@ -63,14 +63,14 @@
 
 @patch
 class Random {
-  static Random? _secureRandom;
+  static final Random _secureRandom = _JSSecureRandom();
 
   @patch
   factory Random([int? seed]) =>
-      (seed == null) ? const _JSRandom() : new _Random(seed);
+      (seed == null) ? const _JSRandom() : _Random(seed);
 
   @patch
-  factory Random.secure() => _secureRandom ??= _JSSecureRandom();
+  factory Random.secure() => _secureRandom;
 }
 
 class _JSRandom implements Random {
diff --git a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
index b0482a8..49845a2 100644
--- a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
+++ b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
@@ -139,10 +139,6 @@
       categories: "Client",
       maturity: Maturity.WEB_STABLE,
       platforms: DART2JS_PLATFORM),
-  "web_sql": const LibraryInfo("web_sql/dart2js/web_sql_dart2js.dart",
-      categories: "Client",
-      maturity: Maturity.WEB_STABLE,
-      platforms: DART2JS_PLATFORM),
   "_internal": const LibraryInfo("internal/internal.dart",
       categories: "",
       documented: false,
diff --git a/sdk/lib/_internal/vm/bin/builtin.dart b/sdk/lib/_internal/vm/bin/builtin.dart
index b5263e0..e39fa7f 100644
--- a/sdk/lib/_internal/vm/bin/builtin.dart
+++ b/sdk/lib/_internal/vm/bin/builtin.dart
@@ -4,7 +4,6 @@
 
 library builtin;
 
-// NOTE: Do not import 'dart:io' in builtin.
 import 'dart:async';
 import 'dart:collection' hide LinkedList, LinkedListEntry;
 import 'dart:_internal' hide Symbol;
diff --git a/sdk/lib/_internal/vm/bin/file_patch.dart b/sdk/lib/_internal/vm/bin/file_patch.dart
index b95e71a..8768d7a 100644
--- a/sdk/lib/_internal/vm/bin/file_patch.dart
+++ b/sdk/lib/_internal/vm/bin/file_patch.dart
@@ -79,9 +79,10 @@
 
   @pragma("vm:external-name", "File_SetPointer")
   external void _setPointer(int pointer);
-
   @pragma("vm:external-name", "File_GetPointer")
   external int getPointer();
+  @pragma("vm:external-name", "File_GetFD")
+  external int get fd;
   @pragma("vm:external-name", "File_Close")
   external int close();
   @pragma("vm:external-name", "File_ReadByte")
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index c330ed8..8ce0776 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -740,7 +740,16 @@
           connectionResult = socket.nativeCreateUnixDomainConnect(
               address.address, _Namespace._namespace);
         } else {
-          assert(source.type == InternetAddressType.unix);
+          if (source.type != InternetAddressType.unix) {
+            return SocketException(
+                // Use the same error message as used on Linux for better
+                // searchability...
+                "Address family not supported by protocol family, "
+                // ...and then add some details.
+                "sourceAddress.type must be ${InternetAddressType.unix} but was "
+                "${source.type}",
+                address: address);
+          }
           connectionResult = socket.nativeCreateUnixDomainBindConnect(
               address.address, source.address, _Namespace._namespace);
         }
@@ -753,6 +762,17 @@
           connectionResult = socket.nativeCreateConnect(
               address_._in_addr, port, address_._scope_id);
         } else {
+          if (source.type != InternetAddressType.IPv4 &&
+              source.type != InternetAddressType.IPv6) {
+            return SocketException(
+                // Use the same error message as used on Linux for better
+                // searchability...
+                "Address family not supported by protocol family, "
+                // ...and then add some details.
+                "sourceAddress.type must be ${InternetAddressType.IPv4} or "
+                "${InternetAddressType.IPv6} but was ${source.type}",
+                address: address);
+          }
           connectionResult = socket.nativeCreateBindConnect(
               address_._in_addr, port, source._in_addr, address_._scope_id);
         }
@@ -773,6 +793,8 @@
           return createError(
               connectionResult, "Connection failed", address, port);
         }
+      } else if (connectionResult is SocketException) {
+        return connectionResult;
       } else if (connectionResult is Error) {
         return connectionResult;
       }
@@ -1081,6 +1103,43 @@
     }
   }
 
+  SocketMessage? readMessage([int? count]) {
+    if (count != null && count <= 0) {
+      throw ArgumentError("Illegal length $count");
+    }
+    if (isClosing || isClosed) return null;
+    try {
+      final bytesCount = count ?? nativeAvailable();
+      // Returned messagesData is a list of triples (level, type, uint8list)
+      // followed by uint8list with raw data.
+      // This is kept at this level to minimize dart api use in native method.
+      final List<dynamic> messagesData = nativeReceiveMessage(bytesCount);
+      final messages = <SocketControlMessage>[];
+      if (messagesData.isNotEmpty) {
+        final triplesCount = (messagesData.length - 1) / 3;
+        assert((triplesCount * 3) == (messagesData.length - 1));
+        for (int i = 0; i < triplesCount; i++) {
+          final message = _SocketControlMessageImpl(
+              messagesData[i * 3] as int,
+              messagesData[i * 3 + 1] as int,
+              messagesData[i * 3 + 2] as Uint8List);
+          messages.add(message);
+        }
+      }
+      final socketMessage = SocketMessage(
+          messagesData[messagesData.length - 1] as Uint8List, messages);
+      available = nativeAvailable();
+      if (!const bool.fromEnvironment("dart.vm.product")) {
+        _SocketProfile.collectStatistic(
+            nativeGetSocketId(), _SocketProfileType.readBytes, bytesCount);
+      }
+      return socketMessage;
+    } catch (e, st) {
+      reportError(e, st, "Read failed");
+      return null;
+    }
+  }
+
   static int _fixOffset(int? offset) => offset ?? 0;
 
   int write(List<int> buffer, int offset, int? bytes) {
@@ -1149,6 +1208,44 @@
     }
   }
 
+  int sendMessage(List<int> buffer, int offset, int? bytes,
+      List<SocketControlMessage> controlMessages) {
+    if (offset < 0) throw new RangeError.value(offset);
+    if (bytes != null) {
+      if (bytes < 0) throw new RangeError.value(bytes);
+    } else {
+      bytes = buffer.length - offset;
+    }
+    if ((offset + bytes) > buffer.length) {
+      throw new RangeError.value(offset + bytes);
+    }
+    if (isClosing || isClosed) return 0;
+    try {
+      _BufferAndStart bufferAndStart =
+          _ensureFastAndSerializableByteData(buffer, offset, bytes);
+      if (!const bool.fromEnvironment("dart.vm.product")) {
+        _SocketProfile.collectStatistic(
+            nativeGetSocketId(),
+            _SocketProfileType.writeBytes,
+            bufferAndStart.buffer.length - bufferAndStart.start);
+      }
+      // list of triples <level, type, data> arranged to minimize dart api
+      // use in native method.
+      List<dynamic> messages = <dynamic>[];
+      for (SocketControlMessage controlMessage in controlMessages) {
+        messages.add(controlMessage.level);
+        messages.add(controlMessage.type);
+        messages.add(controlMessage.data);
+      }
+
+      return nativeSendMessage(
+          bufferAndStart.buffer, bufferAndStart.start, bytes, messages);
+    } catch (e, st) {
+      scheduleMicrotask(() => reportError(e, st, "SendMessage failed"));
+      return 0;
+    }
+  }
+
   _NativeSocket? accept() {
     // Don't issue accept if we're closing.
     if (isClosing || isClosed) return null;
@@ -1540,11 +1637,16 @@
   external Uint8List? nativeRead(int len);
   @pragma("vm:external-name", "Socket_RecvFrom")
   external Datagram? nativeRecvFrom();
+  @pragma("vm:external-name", "Socket_ReceiveMessage")
+  external List<dynamic> nativeReceiveMessage(int len);
   @pragma("vm:external-name", "Socket_WriteList")
   external int nativeWrite(List<int> buffer, int offset, int bytes);
   @pragma("vm:external-name", "Socket_SendTo")
   external int nativeSendTo(
       List<int> buffer, int offset, int bytes, Uint8List address, int port);
+  @pragma("vm:external-name", "Socket_SendMessage")
+  external nativeSendMessage(
+      List<int> buffer, int offset, int bytes, List<dynamic> controlMessages);
   @pragma("vm:external-name", "Socket_CreateConnect")
   external nativeCreateConnect(Uint8List addr, int port, int scope_id);
   @pragma("vm:external-name", "Socket_CreateUnixDomainConnect")
@@ -1574,6 +1676,8 @@
   external List nativeGetRemotePeer();
   @pragma("vm:external-name", "Socket_GetSocketId")
   external int nativeGetSocketId();
+  @pragma("vm:external-name", "Socket_GetFD")
+  external int get fd;
   @pragma("vm:external-name", "Socket_GetError")
   external OSError nativeGetError();
   @pragma("vm:external-name", "Socket_GetOption")
@@ -1785,9 +1889,17 @@
     }
   }
 
+  SocketMessage? readMessage([int? count]) {
+    return _socket.readMessage(count);
+  }
+
   int write(List<int> buffer, [int offset = 0, int? count]) =>
       _socket.write(buffer, offset, count);
 
+  int sendMessage(List<SocketControlMessage> controlMessages, List<int> data,
+          [int offset = 0, int? count]) =>
+      _socket.sendMessage(data, offset, count, controlMessages);
+
   Future<RawSocket> close() => _socket.close().then<RawSocket>((_) {
         if (!const bool.fromEnvironment("dart.vm.product")) {
           _SocketProfile.collectStatistic(
@@ -2411,3 +2523,103 @@
       _InternetAddress(InternetAddressType._from(type), address, null, in_addr),
       port);
 }
+
+@patch
+class ResourceHandle {
+  factory ResourceHandle.fromFile(RandomAccessFile file) {
+    int fd = (file as _RandomAccessFile).fd;
+    return _ResourceHandleImpl(fd);
+  }
+
+  factory ResourceHandle.fromSocket(Socket socket) {
+    final _socket = socket as _Socket;
+    if (_socket._raw == null) {
+      throw ArgumentError("Socket is closed");
+    }
+    final _RawSocket raw = _socket._raw! as _RawSocket;
+    final _NativeSocket nativeSocket = raw._socket;
+    int fd = nativeSocket.fd;
+    return _ResourceHandleImpl(fd);
+  }
+
+  factory ResourceHandle.fromRawSocket(RawSocket socket) {
+    final _RawSocket raw = socket as _RawSocket;
+    final _NativeSocket nativeSocket = raw._socket;
+    int fd = nativeSocket.fd;
+    return _ResourceHandleImpl(fd);
+  }
+
+  factory ResourceHandle.fromRawDatagramSocket(RawDatagramSocket socket) {
+    final _RawDatagramSocket raw = socket as _RawDatagramSocket;
+    final _NativeSocket nativeSocket = socket._socket;
+    int fd = nativeSocket.fd;
+    return _ResourceHandleImpl(fd);
+  }
+
+  factory ResourceHandle.fromStdin(Stdin stdin) {
+    return _ResourceHandleImpl(stdin._fd);
+  }
+
+  factory ResourceHandle.fromStdout(Stdout stdout) {
+    return _ResourceHandleImpl(stdout._fd);
+  }
+}
+
+@pragma("vm:entry-point")
+class _ResourceHandleImpl implements ResourceHandle {
+  @pragma("vm:entry-point")
+  int _handle; // file descriptor on linux
+  @pragma("vm:entry-point")
+  _ResourceHandleImpl(this._handle);
+
+  @pragma("vm:external-name", "ResourceHandleImpl_toFile")
+  external RandomAccessFile toFile();
+  @pragma("vm:external-name", "ResourceHandleImpl_toSocket")
+  external Socket toSocket();
+  @pragma("vm:external-name", "ResourceHandleImpl_toRawSocket")
+  external List<dynamic> _toRawSocket();
+
+  RawSocket toRawSocket() {
+    List<dynamic> list = _toRawSocket();
+    InternetAddressType type = InternetAddressType._from(list[0] as int);
+    String hostname = list[1] as String;
+    Uint8List rawAddr = list[2] as Uint8List;
+    int fd = list[3] as int;
+    InternetAddress internetAddress = type == InternetAddressType.unix
+        ? _InternetAddress.fromString(hostname, type: InternetAddressType.unix)
+        : _InternetAddress(type, hostname, null, rawAddr);
+    final nativeSocket = _NativeSocket.normal(internetAddress);
+    nativeSocket.nativeSetSocketId(fd, _NativeSocket.typeInternalSocket);
+    return _RawSocket(nativeSocket);
+  }
+
+  @pragma("vm:external-name", "ResourceHandleImpl_toRawDatagramSocket")
+  external RawDatagramSocket toRawDatagramSocket();
+
+  @pragma("vm:entry-point")
+  static final _ResourceHandleImpl _sentinel = _ResourceHandleImpl(-1);
+}
+
+@patch
+class SocketControlMessage {
+  factory SocketControlMessage.fromHandles(List<ResourceHandle> handles)
+      native "SocketControlMessage_fromHandles";
+}
+
+@pragma("vm:entry-point")
+class _SocketControlMessageImpl implements SocketControlMessage {
+  @pragma("vm:entry-point")
+  final int level;
+  @pragma("vm:entry-point")
+  final int type;
+  @pragma("vm:entry-point")
+  final Uint8List data;
+
+  @pragma("vm:entry-point")
+  _SocketControlMessageImpl(this.level, this.type, this.data);
+
+  @pragma("vm:external-name", "SocketControlMessageImpl_extractHandles")
+  external List<ResourceHandle> extractHandles();
+
+  static final _sentinel = _SocketControlMessageImpl(0, 0, Uint8List(0));
+}
diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart
index 096f7ef..14fbf46 100644
--- a/sdk/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk/lib/_internal/vm/lib/compact_hash.dart
@@ -24,15 +24,15 @@
   // least one unoccupied entry.
   // NOTE: When maps are deserialized, their _index and _hashMask is regenerated
   // eagerly by _regenerateIndex.
-  Uint32List _index = _initialIndex;
+  Uint32List _index = _uninitializedIndex;
 
   // Cached in-place mask for the hash pattern component.
-  int _hashMask = 0;
+  int _hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
 
   // Fixed-length list of keys (set) or key/value at even/odd indices (map).
   //
   // Can be either a mutable or immutable list.
-  List _data = _initialData;
+  List _data = _uninitializedData;
 
   // Length of _data that is used (i.e., keys + values for a map).
   int _usedData = 0;
@@ -126,12 +126,15 @@
 // TODO(koda): Consider moving field comments to _HashFieldBase.
 abstract class _HashBase implements _HashVMBase {
   // The number of bits used for each component is determined by table size.
-  // The length of _index is twice the number of entries in _data, and both
-  // are doubled when _data is full. Thus, _index will have a max load factor
-  // of 1/2, which enables one more bit to be used for the hash.
+  // If initialized, the length of _index is (at least) twice the number of
+  // entries in _data, and both are doubled when _data is full. Thus, _index
+  // will have a max load factor of 1/2, which enables one more bit to be used
+  // for the hash.
   // TODO(koda): Consider growing _data by factor sqrt(2), twice as often.
   static const int _INITIAL_INDEX_BITS = 2;
   static const int _INITIAL_INDEX_SIZE = 1 << (_INITIAL_INDEX_BITS + 1);
+  static const int _UNINITIALIZED_INDEX_SIZE = 1;
+  static const int _UNINITIALIZED_HASH_MASK = 0;
 
   // Unused and deleted entries are marked by 0 and 1, respectively.
   static const int _UNUSED_PAIR = 0;
@@ -142,6 +145,11 @@
   // as unsigned words.
   // Keep consistent with IndexSizeToHashMask in runtime/vm/object.h.
   static int _indexSizeToHashMask(int indexSize) {
+    assert(indexSize >= _INITIAL_INDEX_SIZE ||
+        indexSize == _UNINITIALIZED_INDEX_SIZE);
+    if (indexSize == _UNINITIALIZED_INDEX_SIZE) {
+      return _UNINITIALIZED_HASH_MASK;
+    }
     int indexBits = indexSize.bitLength - 2;
     return internal.has63BitSmis
         ? (1 << (32 - indexBits)) - 1
@@ -203,11 +211,11 @@
   bool _equals(e1, e2) => e1 == e2;
 }
 
-final _initialIndex = new Uint32List(1);
+final _uninitializedIndex = new Uint32List(_HashBase._UNINITIALIZED_INDEX_SIZE);
 // Note: not const. Const arrays are made immutable by having a different class
 // than regular arrays that throws on element assignment. We want the data field
 // in maps and sets to be monomorphic.
-final _initialData = new List.filled(0, null);
+final _uninitializedData = new List.filled(0, null);
 
 // VM-internalized implementation of a default-constructed LinkedHashMap.
 @pragma("vm:entry-point")
@@ -219,9 +227,9 @@
         _OperatorEqualsAndHashCode
     implements LinkedHashMap<K, V> {
   _InternalLinkedHashMap() {
-    _index = _initialIndex;
-    _hashMask = 0;
-    _data = _initialData;
+    _index = _uninitializedIndex;
+    _hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
+    _data = _uninitializedData;
     _usedData = 0;
     _deletedKeys = 0;
   }
@@ -324,7 +332,11 @@
 
   void clear() {
     if (!isEmpty) {
-      _init(_HashBase._INITIAL_INDEX_SIZE, _hashMask, null, 0);
+      _index = _uninitializedIndex;
+      _hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
+      _data = _uninitializedData;
+      _usedData = 0;
+      _deletedKeys = 0;
     }
   }
 
@@ -354,8 +366,9 @@
 
   // This method is called by [_rehashObjects] (see above).
   void _regenerateIndex() {
-    _index = _data.length == 0 ? _initialIndex : new Uint32List(_data.length);
-    assert(_hashMask == 0);
+    _index =
+        _data.length == 0 ? _uninitializedIndex : new Uint32List(_data.length);
+    assert(_hashMask == _HashBase._UNINITIALIZED_HASH_MASK);
     _hashMask = _HashBase._indexSizeToHashMask(_index.length);
     final int tmpUsed = _usedData;
     _usedData = 0;
@@ -655,7 +668,11 @@
 
   void clear() {
     if (!isEmpty) {
-      _init(_HashBase._INITIAL_INDEX_SIZE, _hashMask, null, 0);
+      _index = _uninitializedIndex;
+      _hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
+      _data = _uninitializedData;
+      _usedData = 0;
+      _deletedKeys = 0;
     }
   }
 
@@ -773,8 +790,10 @@
 
   // This method is called by [_rehashObjects] (see above).
   void _regenerateIndex() {
-    _index = _data.length == 0 ? _initialIndex : new Uint32List(_data.length);
-    assert(_hashMask == 0);
+    final size =
+        _roundUpToPowerOfTwo(max(_data.length, _HashBase._INITIAL_INDEX_SIZE));
+    _index = _data.length == 0 ? _uninitializedIndex : new Uint32List(size);
+    assert(_hashMask == _HashBase._UNINITIALIZED_HASH_MASK);
     _hashMask = _HashBase._indexSizeToHashMask(_index.length);
     _rehash();
   }
@@ -790,9 +809,9 @@
         _OperatorEqualsAndHashCode
     implements LinkedHashSet<E> {
   _CompactLinkedHashSet() {
-    _index = _initialIndex;
-    _hashMask = 0;
-    _data = _initialData;
+    _index = _uninitializedIndex;
+    _hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
+    _data = _uninitializedData;
     _usedData = 0;
     _deletedKeys = 0;
   }
diff --git a/sdk/lib/_internal/vm/lib/date_patch.dart b/sdk/lib/_internal/vm/lib/date_patch.dart
index eec2bf5..249399a 100644
--- a/sdk/lib/_internal/vm/lib/date_patch.dart
+++ b/sdk/lib/_internal/vm/lib/date_patch.dart
@@ -39,7 +39,8 @@
   DateTime.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch,
       {bool isUtc: false})
       : this._withValue(
-            millisecondsSinceEpoch * Duration.microsecondsPerMillisecond,
+            _validateMilliseconds(millisecondsSinceEpoch) *
+                Duration.microsecondsPerMillisecond,
             isUtc: isUtc);
 
   @patch
@@ -58,6 +59,13 @@
     if (isUtc == null) throw new ArgumentError();
   }
 
+  static int _validateMilliseconds(int millisecondsSinceEpoch) =>
+      RangeError.checkValueInInterval(
+          millisecondsSinceEpoch,
+          -_maxMillisecondsSinceEpoch,
+          _maxMillisecondsSinceEpoch,
+          "millisecondsSinceEpoch");
+
   @patch
   DateTime._now()
       : isUtc = false,
diff --git a/sdk/lib/_internal/vm/lib/ffi_native_type_patch.dart b/sdk/lib/_internal/vm/lib/ffi_native_type_patch.dart
index cc7831b..426a170 100644
--- a/sdk/lib/_internal/vm/lib/ffi_native_type_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_native_type_patch.dart
@@ -69,6 +69,10 @@
 
 @patch
 @pragma("vm:entry-point")
+abstract class Bool extends NativeType {}
+
+@patch
+@pragma("vm:entry-point")
 abstract class Void extends NativeType {}
 
 @patch
diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart
index b3faeab..3f7276b 100644
--- a/sdk/lib/_internal/vm/lib/ffi_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart
@@ -313,6 +313,15 @@
 external void _storePointer<S extends NativeType>(
     Object typedDataBase, int offsetInBytes, Pointer<S> value);
 
+bool _loadBool(Object typedDataBase, int offsetInBytes) =>
+    _loadUint8(typedDataBase, offsetInBytes) != 0;
+
+void _storeBool(Object typedDataBase, int offsetInBytes, bool value) =>
+    _storeUint8(typedDataBase, offsetInBytes, value ? 1 : 0);
+
+Pointer<Bool> _elementAtBool(Pointer<Bool> pointer, int index) =>
+    Pointer.fromAddress(pointer.address + 1 * index);
+
 Pointer<Int8> _elementAtInt8(Pointer<Int8> pointer, int index) =>
     Pointer.fromAddress(pointer.address + 1 * index);
 
@@ -548,6 +557,20 @@
   Float64List asTypedList(int elements) => _asExternalTypedData(this, elements);
 }
 
+extension BoolPointer on Pointer<Bool> {
+  @patch
+  bool get value => _loadBool(this, 0);
+
+  @patch
+  set value(bool value) => _storeBool(this, 0, value);
+
+  @patch
+  bool operator [](int index) => _loadBool(this, index);
+
+  @patch
+  operator []=(int index, bool value) => _storeBool(this, index, value);
+}
+
 extension Int8Array on Array<Int8> {
   @patch
   int operator [](int index) {
@@ -702,6 +725,20 @@
   }
 }
 
+extension BoolArray on Array<Bool> {
+  @patch
+  bool operator [](int index) {
+    _checkIndex(index);
+    return _loadBool(_typedDataBase, index);
+  }
+
+  @patch
+  operator []=(int index, bool value) {
+    _checkIndex(index);
+    return _storeBool(_typedDataBase, index, value);
+  }
+}
+
 //
 // End of generated code.
 //
diff --git a/sdk/lib/_internal/vm/lib/math_patch.dart b/sdk/lib/_internal/vm/lib/math_patch.dart
index cc1c7c0..270bbbc 100644
--- a/sdk/lib/_internal/vm/lib/math_patch.dart
+++ b/sdk/lib/_internal/vm/lib/math_patch.dart
@@ -206,6 +206,8 @@
 // TODO(iposva): Handle patch methods within a patch class correctly.
 @patch
 class Random {
+  static final Random _secureRandom = _SecureRandom();
+
   @patch
   factory Random([int? seed]) {
     var state = _Random._setupSeed((seed == null) ? _Random._nextSeed() : seed);
@@ -218,9 +220,7 @@
   }
 
   @patch
-  factory Random.secure() {
-    return new _SecureRandom();
-  }
+  factory Random.secure() => _secureRandom;
 }
 
 class _Random implements Random {
diff --git a/sdk/lib/_internal/vm/lib/string_patch.dart b/sdk/lib/_internal/vm/lib/string_patch.dart
index 66e3dcd..c62a03a 100644
--- a/sdk/lib/_internal/vm/lib/string_patch.dart
+++ b/sdk/lib/_internal/vm/lib/string_patch.dart
@@ -640,7 +640,7 @@
     if (replacement == null) throw new ArgumentError.notNull("replacement");
 
     int startIndex = 0;
-    // String fragments that replace the the prefix [this] up to [startIndex].
+    // String fragments that replace the prefix [this] up to [startIndex].
     List matches = [];
     int length = 0; // Length of all fragments.
     int replacementLength = replacement.length;
diff --git a/sdk/lib/async/async.dart b/sdk/lib/async/async.dart
index 00b7fc6..0b16dae 100644
--- a/sdk/lib/async/async.dart
+++ b/sdk/lib/async/async.dart
@@ -73,7 +73,7 @@
 /// Another common use of streams is for user-generated events
 /// in a web app: The following code listens for mouse clicks on a button.
 /// ```dart import:html
-/// querySelector('#myButton').onClick.forEach((_) => print('Click.'));
+/// querySelector('#myButton')!.onClick.forEach((_) => print('Click.'));
 /// ```
 /// ## Other resources
 ///
diff --git a/sdk/lib/async/deferred_load.dart b/sdk/lib/async/deferred_load.dart
index 81d9f80..98dda08 100644
--- a/sdk/lib/async/deferred_load.dart
+++ b/sdk/lib/async/deferred_load.dart
@@ -6,9 +6,8 @@
 
 /// Indicates that loading of [libraryName] is deferred.
 ///
-/// This class is obsolete. Instead use the syntax:
-/// ```dart
-/// import "library.dart" deferred as prefix;
+/// This class is obsolete. Instead prefer the `deferred as` import directive
+/// syntax.
 /// ```
 @Deprecated("Dart sdk v. 1.8")
 class DeferredLibrary {
diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart
index c587536..2283ba7 100644
--- a/sdk/lib/async/future.dart
+++ b/sdk/lib/async/future.dart
@@ -60,7 +60,7 @@
 /// To perform an asynchronous computation, you use an `async` function
 /// which always produces a future.
 /// Inside such an asynchronous function, you can use the `await` operation
-/// to delay execution until another asyncronous computation has a result.
+/// to delay execution until another asynchronous computation has a result.
 /// While execution of the awaiting function is delayed,
 /// the program is not blocked, and can continue doing other things.
 ///
@@ -742,7 +742,7 @@
   ///   return this.then((v) {
   ///     var f2 = action();
   ///     if (f2 is Future) return f2.then((_) => v);
-  ///     return v
+  ///     return v;
   ///   }, onError: (e) {
   ///     var f2 = action();
   ///     if (f2 is Future) return f2.then((_) { throw e; });
diff --git a/sdk/lib/async/future_impl.dart b/sdk/lib/async/future_impl.dart
index d005f24..52664b3 100644
--- a/sdk/lib/async/future_impl.dart
+++ b/sdk/lib/async/future_impl.dart
@@ -243,7 +243,7 @@
 
   /// The future has been completed with an error result.
   ///
-  /// [_resultOrListeners] contains an [AsyncEror]
+  /// [_resultOrListeners] contains an [AsyncError]
   /// holding the error and stack trace.
   static const int _stateError = 16;
 
diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart
index 3f12cb3..679c4ef 100644
--- a/sdk/lib/async/stream.dart
+++ b/sdk/lib/async/stream.dart
@@ -2019,7 +2019,7 @@
   /// they are used in streams that can be listened to multiple times.
   ///
   /// ```dart
-  /// StreamController<String> controller = StreamController.broadcast()
+  /// StreamController<String> controller = StreamController.broadcast();
   /// controller.onListen = () {
   ///   scheduleMicrotask(() {
   ///     controller.addError("Bad");
diff --git a/sdk/lib/async/zone.dart b/sdk/lib/async/zone.dart
index 8d4bdf9..e206152 100644
--- a/sdk/lib/async/zone.dart
+++ b/sdk/lib/async/zone.dart
@@ -817,7 +817,7 @@
   /// Equivalent to:
   /// ```dart
   /// ZoneCallback registered = this.registerUnaryCallback(callback);
-  /// return (arg) => thin.runUnary(registered, arg);
+  /// return (arg) => this.runUnary(registered, arg);
   /// ```
   ZoneUnaryCallback<R, T> bindUnaryCallback<R, T>(R callback(T argument));
 
@@ -827,7 +827,7 @@
   /// Equivalent to:
   /// ```dart
   /// ZoneCallback registered = registerBinaryCallback(callback);
-  /// return (arg1, arg2) => thin.runBinary(registered, arg1, arg2);
+  /// return (arg1, arg2) => this.runBinary(registered, arg1, arg2);
   /// ```
   ZoneBinaryCallback<R, T1, T2> bindBinaryCallback<R, T1, T2>(
       R callback(T1 argument1, T2 argument2));
diff --git a/sdk/lib/cli/cli.dart b/sdk/lib/cli/cli.dart
index 223dd68..f43efeb 100644
--- a/sdk/lib/cli/cli.dart
+++ b/sdk/lib/cli/cli.dart
@@ -2,8 +2,14 @@
 // 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.
 
+/// Utilities for building CLI apps.
+///
+/// ## Deprecation notice
+///
+/// The functionality of this library is incomplete and may be removed in a
+/// later version. See [waitFor] for details.
+///
 /// {@category VM}
-/// {@nodoc}
 @Deprecated(
     "The functionality of this library is incomplete and may be removed in a later version")
 library dart.cli;
diff --git a/sdk/lib/cli/wait_for.dart b/sdk/lib/cli/wait_for.dart
index 29e5386..2aa8ff8 100644
--- a/sdk/lib/cli/wait_for.dart
+++ b/sdk/lib/cli/wait_for.dart
@@ -69,7 +69,32 @@
  * Suspends the stack, runs microtasks, and handles incoming events until
  * [future] completes.
  *
- * WARNING: EXPERIMENTAL. USE AT YOUR OWN RISK.
+ * ## Deprecation notice
+ *
+ * The `waitFor` feature is deprecated.
+ * The feature was intended to solve a particular problem for existing code,
+ * a problem introduced by a breaking change to the platform libraries.
+ * The `waitFor` function is not suitable for general use.
+ * The feature has shortcomings that can affect other code
+ * running in the same isolate, including:
+ *  * A function call that looks synchronous may cause other asynchronous
+ *    events to run before it returns.
+ *    This is something synchronous code can usually assume not to happen,
+ *    and some code may have been written to take advantage of that
+ *    assumed behavior. Such code can fail in unexpected ways.
+ *  * Multiple nested calls to `waitFor` may block each other
+ *    since the most recent call always needs to complete
+ *    before any other call can complete.
+ *    Judicious use of `waitFor` is necessary to avoid unexpected deadlocks
+ *    which wouldn't happen if using `await` instead.
+ *    If more than one library in the same program is using `waitFor`,
+ *    then it's hard to avoid or control whether such blocking will happen.
+ *
+ * The feature is not actively maintained.
+ * It will remain as-is to support the original problem it was added to solve,
+ * at least until that problem can be solved in some other way.
+ * 
+ * ## Call semantics
  *
  * This call does the following:
  * - While [future] is not completed:
@@ -111,30 +136,6 @@
  * Please be aware that nesting calls to [waitFor] can lead to deadlock if
  * subsequent calls block waiting for a condition that is only satisfied when
  * an earlier call returns.
- *
- * **NOTICE**
- * The `waitFor` feature is deprecated.
- * The feature was intended to solve a particular problem for existing code,
- * a problem introduced by a breaking change to the platform libraries.
- * The `waitFor` function is not suitable for general use.
- * The feature has shortcomings that can affect other code
- * running in the same isolate, including:
- *  * A function call that looks synchronous may cause other asynchronous
- *    events to run before it returns.
- *    This is something synchronous code can usually assume not to happen,
- *    and some code may have been written to take advantage of that
- *    assumed behavior. Such code can fail in unexpected ways.
- *  * Multiple nested calls to `waitFor` may block each other
- *    since the most recent call always needs to complete
- *    before any other call can complete.
- *    Judicious use of `waitFor` is necessary to avoid unexpected deadlocks
- *    which wouldn't happen if using `await` instead.
- *    If more than one library in the same program is using `waitFor`,
- *    then it's hard to avoid or control whether such blocking will happen.
- *
- * The feature is not actively maintained.
- * It will remain as-is to support the original problem it was added to solve,
- * at least until that problem can be solved in some other way.
  */
 @Deprecated(
     "This functionality is incomplete and may be removed in a later version")
diff --git a/sdk/lib/collection/hash_map.dart b/sdk/lib/collection/hash_map.dart
index c9c9d8e..5aa9504 100644
--- a/sdk/lib/collection/hash_map.dart
+++ b/sdk/lib/collection/hash_map.dart
@@ -54,7 +54,7 @@
   /// [K] instance.
   ///
   /// Example:
-  /// ```dart
+  /// ```dart template:expression
   /// HashMap<int,int>(equals: (int a, int b) => (b - a) % 5 == 0,
   ///                  hashCode: (int e) => e % 5)
   /// ```
@@ -89,8 +89,7 @@
   ///
   /// Effectively a shorthand for:
   /// ```dart
-  /// HashMap<K, V>(equals: identical,
-  ///               hashCode: identityHashCode)
+  /// HashMap<K, V>(equals: identical, hashCode: identityHashCode)
   /// ```
   external factory HashMap.identity();
 
diff --git a/sdk/lib/collection/hash_set.dart b/sdk/lib/collection/hash_set.dart
index 075627f..ee8fed0 100644
--- a/sdk/lib/collection/hash_set.dart
+++ b/sdk/lib/collection/hash_set.dart
@@ -45,7 +45,7 @@
   ///
   /// If [isValidKey] is omitted, it defaults to testing if the object is an
   /// [E] instance. That means that:
-  /// ```dart
+  /// ```dart template:expression
   /// HashSet<int>(equals: (int e1, int e2) => (e1 - e2) % 5 == 0,
   ///              hashCode: (int e) => e % 5)
   /// ```
@@ -70,8 +70,7 @@
   ///
   /// Effectively a shorthand for:
   /// ```dart
-  /// HashSet<E>(equals: identical,
-  ///                hashCode: identityHashCode)
+  /// HashSet<E>(equals: identical, hashCode: identityHashCode)
   /// ```
   external factory HashSet.identity();
 
diff --git a/sdk/lib/collection/linked_hash_map.dart b/sdk/lib/collection/linked_hash_map.dart
index 872248e..cfab8f3 100644
--- a/sdk/lib/collection/linked_hash_map.dart
+++ b/sdk/lib/collection/linked_hash_map.dart
@@ -39,7 +39,7 @@
   /// [K] instance.
   ///
   /// Example:
-  /// ```dart
+  /// ```dart template:expression
   /// LinkedHashMap<int,int>(equals: (int a, int b) => (b - a) % 5 == 0,
   ///                        hashCode: (int e) => e % 5)
   /// ```
@@ -72,7 +72,7 @@
   /// Creates an insertion-ordered identity-based map.
   ///
   /// Effectively a shorthand for:
-  /// ```dart
+  /// ```dart template:expression
   /// LinkedHashMap<K, V>(equals: identical,
   ///                     hashCode: identityHashCode)
   /// ```
diff --git a/sdk/lib/collection/linked_hash_set.dart b/sdk/lib/collection/linked_hash_set.dart
index a27a89b..43d9a52 100644
--- a/sdk/lib/collection/linked_hash_set.dart
+++ b/sdk/lib/collection/linked_hash_set.dart
@@ -52,7 +52,7 @@
   ///
   /// If [isValidKey] is omitted, it defaults to testing if the object is an
   /// [E] instance. That means that:
-  /// ```dart
+  /// ```dart template:expression
   /// LinkedHashSet<int>(equals: (int e1, int e2) => (e1 - e2) % 5 == 0,
   ///                    hashCode: (int e) => e % 5)
   /// ```
@@ -77,8 +77,7 @@
   ///
   /// Effectively a shorthand for:
   /// ```dart
-  /// LinkedHashSet<E>(equals: identical,
-  ///                      hashCode: identityHashCode)
+  /// LinkedHashSet<E>(equals: identical, hashCode: identityHashCode)
   /// ```
   external factory LinkedHashSet.identity();
 
diff --git a/sdk/lib/convert/convert.dart b/sdk/lib/convert/convert.dart
index b1a1cea..de5aa6f 100644
--- a/sdk/lib/convert/convert.dart
+++ b/sdk/lib/convert/convert.dart
@@ -35,12 +35,13 @@
 /// The second is an instance of [LineSplitter],
 /// which splits the data on newline boundaries.
 /// ```dart import:io
+/// const showLineNumbers = true;
 /// var lineNumber = 1;
 /// var stream = File('quotes.txt').openRead();
 ///
 /// stream.transform(utf8.decoder)
 ///       .transform(const LineSplitter())
-///       .listen((line) {
+///       .forEach((line) {
 ///         if (showLineNumbers) {
 ///           stdout.write('${lineNumber++} ');
 ///         }
diff --git a/sdk/lib/core/annotations.dart b/sdk/lib/core/annotations.dart
index dcfa5e0..4b7140b 100644
--- a/sdk/lib/core/annotations.dart
+++ b/sdk/lib/core/annotations.dart
@@ -159,7 +159,7 @@
 ///
 /// For example:
 ///
-/// ```dart
+/// ```dart template:none
 /// @pragma('Tool:pragma-name', [param1, param2, ...])
 /// class Foo { }
 ///
diff --git a/sdk/lib/core/bigint.dart b/sdk/lib/core/bigint.dart
index c905d3b50..63f9198 100644
--- a/sdk/lib/core/bigint.dart
+++ b/sdk/lib/core/bigint.dart
@@ -4,10 +4,18 @@
 
 part of dart.core;
 
-/// An arbitrarily large integer.
+/// An arbitrarily large integer value.
+///
+/// Big integers are signed and can have an arbitrary number of
+/// significant digits, only limited by memory.
 abstract class BigInt implements Comparable<BigInt> {
+  /// A big integer with the numerical value 0.
   external static BigInt get zero;
+
+  /// A big integer with the numerical value 1.
   external static BigInt get one;
+
+  /// A big integer with the numerical value 2.
   external static BigInt get two;
 
   /// Parses [source] as a, possibly signed, integer literal and returns its
@@ -54,19 +62,31 @@
   /// for zero, which is its own negation.
   BigInt operator -();
 
-  /// Addition operator.
+  /// Adds [other] to this big integer.
+  ///
+  /// The result is again a big integer.
   BigInt operator +(BigInt other);
 
-  /// Subtraction operator.
+  /// Subtracts [other] from this big integer.
+  ///
+  /// The result is again a big integer.
   BigInt operator -(BigInt other);
 
-  /// Multiplication operator.
+  /// Multiplies [other] by this big integer.
+  ///
+  /// The result is again a big integer.
   BigInt operator *(BigInt other);
 
-  /// Division operator.
+  /// Double division operator.
+  ///
+  /// Matching the similar operator on [int],
+  /// this operation first performs [toDouble] on both this big integer
+  /// and [other], then does [double.operator/] on those values and
+  /// returns the result.
+  /// The initial [toDouble] conversion may lose precision.
   double operator /(BigInt other);
 
-  /// Truncating division operator.
+  /// Truncating integer division operator.
   ///
   /// Performs a truncating integer division, where the remainder is discarded.
   ///
@@ -162,16 +182,16 @@
   /// This maps any integer `x` to `-x - 1`.
   BigInt operator ~();
 
-  /// Relational less than operator.
+  /// Whether this big integer is numerically smaller than [other].
   bool operator <(BigInt other);
 
-  /// Relational less than or equal operator.
+  /// Whether [other] is numerically greater than this big integer.
   bool operator <=(BigInt other);
 
-  /// Relational greater than operator.
+  /// Whether this big integer is numerically greater than [other].
   bool operator >(BigInt other);
 
-  /// Relational greater than or equal operator.
+  /// Whether [other] is numerically smaller than this big integer.
   bool operator >=(BigInt other);
 
   /// Compares this to `other`.
@@ -190,7 +210,7 @@
   /// add one, i.e. use `x.bitLength + 1`.
   ///
   /// ```dart
-  /// x.bitLength == (-x-1).bitLength
+  /// x.bitLength == (-x-1).bitLength;
   ///
   /// BigInt.from(3).bitLength == 2;   // 00000011
   /// BigInt.from(2).bitLength == 2;   // 00000010
@@ -291,10 +311,10 @@
   /// var big15 = BigInt.from(15);
   /// var big16 = BigInt.from(16);
   /// var big239 = BigInt.from(239);
-  ///                                      V--sign bit-V
-  /// big16.toSigned(5) == -big16   //  00010000 -> 11110000
-  /// big239.toSigned(5) == big15   //  11101111 -> 00001111
-  ///                                      ^           ^
+  ///                                //     V--sign bit-V
+  /// big16.toSigned(5) == -big16;   //  00010000 -> 11110000
+  /// big239.toSigned(5) == big15;   //  11101111 -> 00001111
+  ///                                //     ^           ^
   /// ```
   ///
   /// This operation can be used to simulate arithmetic from low level languages.
diff --git a/sdk/lib/core/bool.dart b/sdk/lib/core/bool.dart
index 491ce16..a8c22c5 100644
--- a/sdk/lib/core/bool.dart
+++ b/sdk/lib/core/bool.dart
@@ -20,7 +20,7 @@
   /// the result is the [defaultValue].
   ///
   /// The result is the same as would be returned by:
-  /// ```dart
+  /// ```dart template:expression
   /// (const String.fromEnvironment(name) == "true")
   ///     ? true
   ///     : (const String.fromEnvironment(name) == "false")
diff --git a/sdk/lib/core/date_time.dart b/sdk/lib/core/date_time.dart
index a3377cd..2281fd8 100644
--- a/sdk/lib/core/date_time.dart
+++ b/sdk/lib/core/date_time.dart
@@ -264,7 +264,7 @@
   /// them as overflows into the next larger component.
   /// For example, "2020-01-42" will be parsed as 2020-02-11, because
   /// the last valid date in that month is 2020-01-31, so 42 days is
-  /// interprted as 31 days of that month plus 11 days into the next month.
+  /// interpreted as 31 days of that month plus 11 days into the next month.
   ///
   /// To detect and reject invalid component values, use
   /// [DateFormat.parseStrict](https://pub.dev/documentation/intl/latest/intl/DateFormat/parseStrict.html)
@@ -472,7 +472,7 @@
   /// Returns [this] if it is already in the local time zone.
   /// Otherwise this method is equivalent to:
   ///
-  /// ```dart
+  /// ```dart template:expression
   /// DateTime.fromMicrosecondsSinceEpoch(microsecondsSinceEpoch,
   ///                                     isUtc: false)
   /// ```
@@ -488,7 +488,7 @@
   /// Returns [this] if it is already in UTC.
   /// Otherwise this method is equivalent to:
   ///
-  /// ```dart
+  /// ```dart template:expression
   /// DateTime.fromMicrosecondsSinceEpoch(microsecondsSinceEpoch,
   ///                                     isUtc: true)
   /// ```
diff --git a/sdk/lib/core/double.dart b/sdk/lib/core/double.dart
index 29d36db..2bf8104 100644
--- a/sdk/lib/core/double.dart
+++ b/sdk/lib/core/double.dart
@@ -160,7 +160,7 @@
   /// and no `onError` is provided.
   ///
   /// Examples of accepted strings:
-  /// ```dart
+  /// ```
   /// "3.14"
   /// "  3.14 \xA0"
   /// "0."
diff --git a/sdk/lib/core/duration.dart b/sdk/lib/core/duration.dart
index 5303bbe..1e6b729 100644
--- a/sdk/lib/core/duration.dart
+++ b/sdk/lib/core/duration.dart
@@ -29,6 +29,7 @@
 /// This means that individual parts can be larger than the next-bigger unit.
 /// For example, [inMinutes] can be greater than 59.
 /// ```dart
+/// const fastestMarathon = const Duration(hours: 2, minutes: 3, seconds: 2);
 /// assert(fastestMarathon.inMinutes == 123);
 /// ```
 /// All individual parts are allowed to be negative.
diff --git a/sdk/lib/core/exceptions.dart b/sdk/lib/core/exceptions.dart
index 5904ec5..889c991 100644
--- a/sdk/lib/core/exceptions.dart
+++ b/sdk/lib/core/exceptions.dart
@@ -166,8 +166,11 @@
 
 // Exception thrown when doing integer division with a zero divisor.
 // TODO(30743): Should be removed, and division by zero should just throw an
-// [ArgumentError].
-class IntegerDivisionByZeroException implements Exception {
+// [UnsupportedError].
+@Deprecated("Use UnsupportedError instead")
+class IntegerDivisionByZeroException implements Exception, UnsupportedError {
+  String? get message => "Division resulted in non-finite value";
+  StackTrace? get stackTrace => null;
   @pragma("vm:entry-point")
   const IntegerDivisionByZeroException();
   String toString() => "IntegerDivisionByZeroException";
diff --git a/sdk/lib/core/int.dart b/sdk/lib/core/int.dart
index f8f5a1b..ccf2775 100644
--- a/sdk/lib/core/int.dart
+++ b/sdk/lib/core/int.dart
@@ -24,7 +24,7 @@
   /// Returns the integer value of the given environment declaration [name].
   ///
   /// The result is the same as would be returned by:
-  /// ```dart
+  /// ```dart template:expression
   /// int.tryParse(const String.fromEnvironment(name, defaultValue: ""))
   ///     ?? defaultValue
   /// ```
@@ -161,7 +161,7 @@
   /// To find the number of bits needed to store the value as a signed value,
   /// add one, i.e. use `x.bitLength + 1`.
   /// ```dart
-  /// x.bitLength == (-x-1).bitLength
+  /// x.bitLength == (-x-1).bitLength;
   ///
   /// 3.bitLength == 2;     // 00000011
   /// 2.bitLength == 2;     // 00000010
@@ -201,10 +201,10 @@
   /// returned value has the same bit value in all positions higher than [width].
   ///
   /// ```dart
-  ///                                V--sign bit-V
-  /// 16.toSigned(5) == -16   //  00010000 -> 11110000
-  /// 239.toSigned(5) == 15   //  11101111 -> 00001111
-  ///                                ^           ^
+  ///                          //     V--sign bit-V
+  /// 16.toSigned(5) == -16;   //  00010000 -> 11110000
+  /// 239.toSigned(5) == 15;   //  11101111 -> 00001111
+  ///                          //     ^           ^
   /// ```
   /// This operation can be used to simulate arithmetic from low level languages.
   /// For example, to increment an 8 bit signed quantity:
@@ -312,7 +312,10 @@
   /// Example:
   /// ```dart
   /// var value = int.tryParse(text);
-  /// if (value == null) ... handle the problem
+  /// if (value == null) {
+  ///   // handle the problem
+  ///   // ...
+  /// }
   /// ```
   ///
   /// The [onError] parameter is deprecated and will be removed.
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index 8ac4701..1c51340 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -690,7 +690,6 @@
   /// ```dart
   /// var words = ['fee', 'fi', 'fo', 'fum'];
   /// var map = words.asMap();  // {0: fee, 1: fi, 2: fo, 3: fum}
-  /// map[0] + map[1];   // 'feefi';
   /// map.keys.toList(); // [0, 1, 2, 3]
   /// ```
   Map<int, E> asMap();
diff --git a/sdk/lib/core/num.dart b/sdk/lib/core/num.dart
index 74dfd78..eab5eb9 100644
--- a/sdk/lib/core/num.dart
+++ b/sdk/lib/core/num.dart
@@ -142,11 +142,19 @@
 
   /// Truncating division operator.
   ///
-  /// If either operand is a [double] then the result of the truncating division
-  /// `a ~/ b` is equivalent to `(a / b).truncate().toInt()`.
+  /// Performs truncating division of this number by [other].
+  /// Truncating division is division where a fractional result
+  /// is converted to an integer by rounding towards zero.
   ///
-  /// If both operands are [int]s then `a ~/ b` performs the truncating
-  /// integer division.
+  /// If both operands are [int]s then [other] must not be zero.
+  /// Then `a ~/ b` corresponds to `a.remainder(b)`
+  /// such that `a == (a ~/ b) * b + a.remainder(b)`.
+  ///
+  /// If either operand is a [double] then the other operand is converted
+  /// to a double before performing the division and truncation of the result.
+  /// Then `a ~/ b` is equivalent to `(a / b).truncate()`.
+  /// This means that the intermediate result of the double division
+  /// must be a finite integer (not an infinity or [double.nan]).
   int operator ~/(num other);
 
   /// The negation of this value.
@@ -214,7 +222,7 @@
   /// a finite double or an infinite double ([double.infinity]
   /// or [double.negativeInfinity]).
   ///
-  /// All numbers satisfy exacly one of of [isInfinite], [isFinite]
+  /// All numbers satisfy exactly one of [isInfinite], [isFinite]
   /// and `isNaN`.
   bool get isNaN;
 
@@ -229,7 +237,7 @@
   ///
   /// Only satisfied by [double.infinity] and [double.negativeInfinity].
   ///
-  /// All numbers satisfy exacly one of of `isInfinite`, [isFinite]
+  /// All numbers satisfy exactly one of `isInfinite`, [isFinite]
   /// and [isNaN].
   bool get isInfinite;
 
@@ -238,7 +246,7 @@
   /// The only non-finite numbers are NaN values, positive infinity, and
   /// negative infinity. All integers are finite.
   ///
-  /// All numbers satisfy exacly one of of [isInfinite], `isFinite`
+  /// All numbers satisfy exactly one of [isInfinite], `isFinite`
   /// and [isNaN].
   bool get isFinite;
 
@@ -296,7 +304,7 @@
 
   /// The least integer no smaller than `this`.
   ///
-  /// Rounds fractional values towards positive infinitiy.
+  /// Rounds fractional values towards positive infinity.
   ///
   /// The number must be finite (see [isFinite]).
   ///
diff --git a/sdk/lib/core/object.dart b/sdk/lib/core/object.dart
index 4e01a55..522774d 100644
--- a/sdk/lib/core/object.dart
+++ b/sdk/lib/core/object.dart
@@ -90,7 +90,7 @@
   /// Some classes have a default textual representation,
   /// often paired with a static `parse` function (like [int.parse]).
   /// These classes will provide the textual representation as
-  /// their string represetion.
+  /// their string representation.
   ///
   /// Other classes have no meaningful textual representation
   /// that a program will care about.
@@ -497,11 +497,11 @@
   /// }
   /// ```
   ///
-  /// The computed value will be be consistent when the function is called
+  /// The computed value will be consistent when the function is called
   /// again with objects that have the same hash codes in the same order
   /// during an execution of a single program.
   ///
-  /// The hash value generated by this function is *not* guranteed to be stable
+  /// The hash value generated by this function is *not* guaranteed to be stable
   /// over different runs of the same program,
   /// or between code run in different isolates of the same program.
   /// The exact algorithm used may differ between different platforms,
@@ -535,12 +535,12 @@
   /// }
   /// ```
   ///
-  /// The computed value will be be consistent when the function is called
+  /// The computed value will be consistent when the function is called
   /// again with objects that have the same hash codes
   /// during an execution of a single program,
   /// even if the objects are not necessarily in the same order,
   ///
-  /// The hash value generated by this function is *not* guranteed to be stable
+  /// The hash value generated by this function is *not* guaranteed to be stable
   /// over different runs of the same program.
   /// The exact algorithm used may differ between different platforms,
   /// or between different versions of the platform libraries,
diff --git a/sdk/lib/core/pattern.dart b/sdk/lib/core/pattern.dart
index 0926b5c..23b4445 100644
--- a/sdk/lib/core/pattern.dart
+++ b/sdk/lib/core/pattern.dart
@@ -50,7 +50,7 @@
 /// }
 /// ```
 /// The output of the example is:
-/// ```dart
+/// ```
 /// Parse
 /// my
 /// string
diff --git a/sdk/lib/core/string.dart b/sdk/lib/core/string.dart
index d856ac2..ca31986 100644
--- a/sdk/lib/core/string.dart
+++ b/sdk/lib/core/string.dart
@@ -49,13 +49,13 @@
 /// You can use `${}` to interpolate the value of Dart expressions
 /// within strings. The curly braces can be omitted when evaluating identifiers:
 /// ```dart
-/// string = 'dartlang';
+/// var string = 'dartlang';
 /// '$string has ${string.length} letters'; // 'dartlang has 8 letters'
 /// ```
 /// A string is represented by a sequence of Unicode UTF-16 code units
 /// accessible through the [codeUnitAt] or the [codeUnits] members:
 /// ```dart
-/// string = 'Dart';
+/// var string = 'Dart';
 /// string.codeUnitAt(0); // 68
 /// string.codeUnits;     // [68, 97, 114, 116]
 /// ```
@@ -559,17 +559,18 @@
   /// ```dart
   /// var string = "Pub";
   /// string.split("");                       // ["P", "u", "b"]
+  ///
   /// // Same as:
   /// [for (var unit in string.codeUnits)
-  ///     String.fromCharCode(unit)]          // ["P", "u", "b"]
+  ///     String.fromCharCode(unit)];         // ["P", "u", "b"]
   /// ```
   ///
   /// Splitting happens at UTF-16 code unit boundaries,
   /// and not at rune (Unicode code point) boundaries:
   /// ```dart
   /// // String made up of two code units, but one rune.
-  /// string = '\u{1D11E}';
-  /// string.split('')  // ["\ud834", "\udd1e"] - 2 unpaired surrogate values
+  /// var string = '\u{1D11E}';
+  /// string.split('');  // ["\ud834", "\udd1e"] - 2 unpaired surrogate values
   /// ```
   /// To get a list of strings containing the individual runes of a string,
   /// you should not use split.
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index 2f955df..3e24c54 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -3134,7 +3134,7 @@
   /// That is always either -1 or 4, depending on whether `_text` includes the
   /// `data:` scheme or not.
   ///
-  /// The first speparator ends the mime type. We don't bother with finding
+  /// The first separator ends the mime type. We don't bother with finding
   /// the '/' inside the mime type.
   ///
   /// Each two separators after that marks a parameter key and value.
@@ -3390,7 +3390,7 @@
   /// If the value contain non-ASCII percent escapes, they are decoded as UTF-8.
   ///
   /// Example:
-  /// ```dart
+  /// ```
   /// data:text/plain;charset=utf-8,Hello%20World!
   /// ```
   /// This data URI has the media type `text/plain;charset=utf-8`, which is the
diff --git a/sdk/lib/ffi/dynamic_library.dart b/sdk/lib/ffi/dynamic_library.dart
index 737f28c..3f740d5 100644
--- a/sdk/lib/ffi/dynamic_library.dart
+++ b/sdk/lib/ffi/dynamic_library.dart
@@ -77,9 +77,9 @@
   /// ```
   ///
   /// ```dart
-  /// DynamicLibrary dylib;
-  /// final add = dylib.lookupFunction<Int32 Function(Int32, Int32),
-  ///                                  int Function(int, int)>('add');
+  /// DynamicLibrary dylib = DynamicLibrary.executable();
+  /// final add = dylib.lookupFunction<Int32 Function(Int32, Int32), int Function(int, int)>(
+  ///         'add');
   /// ```
   external F lookupFunction<T extends Function, F extends Function>(
       String symbolName,
diff --git a/sdk/lib/ffi/ffi.dart b/sdk/lib/ffi/ffi.dart
index 3e2dd21..fa98c88 100644
--- a/sdk/lib/ffi/ffi.dart
+++ b/sdk/lib/ffi/ffi.dart
@@ -561,6 +561,20 @@
   external Float64List asTypedList(int length);
 }
 
+/// Extension on [Pointer] specialized for the type argument [Bool].
+extension BoolPointer on Pointer<Bool> {
+  /// The bool at [address].
+  external bool get value;
+
+  external void set value(bool value);
+
+  /// The bool at `address + index`.
+  external bool operator [](int index);
+
+  /// The bool at `address + index`.
+  external void operator []=(int index, bool value);
+}
+
 /// Bounds checking indexing methods on [Array]s of [Int8].
 extension Int8Array on Array<Int8> {
   external int operator [](int index);
@@ -638,6 +652,13 @@
   external void operator []=(int index, double value);
 }
 
+/// Bounds checking indexing methods on [Array]s of [Bool].
+extension BoolArray on Array<Bool> {
+  external bool operator [](int index);
+
+  external void operator []=(int index, bool value);
+}
+
 //
 // End of generated code.
 //
@@ -805,7 +826,7 @@
 /// Annotation to be used for marking an external function as FFI native.
 ///
 /// Example:
-///```dart
+///```dart template:none
 /// @FfiNative<Int64 Function(Int64, Int64)>("FfiNative_Sum", isLeaf:true)
 /// external int sum(int a, int b);
 ///```
diff --git a/sdk/lib/ffi/native_type.dart b/sdk/lib/ffi/native_type.dart
index 31e4b72..217a68a 100644
--- a/sdk/lib/ffi/native_type.dart
+++ b/sdk/lib/ffi/native_type.dart
@@ -122,6 +122,14 @@
   const Double();
 }
 
+/// Represents a native bool in C.
+///
+/// [Bool] is not constructible in the Dart code and serves purely as marker
+/// in type signatures.
+class Bool extends NativeType {
+  const Bool();
+}
+
 /// Represents a void type in C.
 ///
 /// [Void] is not constructible in the Dart code and serves purely as marker in
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 59b3461..0a3a46e 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -31,7 +31,6 @@
 import 'dart:web_audio' show AudioBuffer, AudioTrack, AudioTrackList;
 import 'dart:web_gl' as gl;
 import 'dart:web_gl' show RenderingContext, RenderingContext2;
-import 'dart:web_sql';
 import 'dart:_foreign_helper' show JS, JS_INTERCEPTOR_CONSTANT;
 import 'dart:js_util' as js_util;
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9212,13 +9211,6 @@
 
 // WARNING: Do not edit - generated code.
 
-typedef void DatabaseCallback(SqlDatabase database);
-// Copyright (c) 2012, 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.
-
-// WARNING: Do not edit - generated code.
-
 typedef void DecodeErrorCallback(DomException error);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -12997,7 +12989,7 @@
   }
 
   @pragma('dart2js:tryInline')
-  void setAttribute(String name, String value) {
+  void setAttribute(String name, Object value) {
     // TODO(41258): Delete these assertions after forcing strong mode.
     // Protect [name] against string conversion to "null" or "undefined".
     assert(name != null, 'Attribute name cannot be null');
@@ -13006,7 +12998,7 @@
   }
 
   @pragma('dart2js:tryInline')
-  void setAttributeNS(String? namespaceURI, String name, String value) {
+  void setAttributeNS(String? namespaceURI, String name, Object value) {
     // TODO(41258): Delete these assertions after forcing strong mode.
     // Protect [name] against string conversion to "null" or "undefined".
     assert(name != null, 'Attribute name cannot be null');
@@ -13335,7 +13327,7 @@
   /**
    * Scrolls this element into view.
    *
-   * Only one of of the alignment options may be specified at a time.
+   * Only one of the alignment options may be specified at a time.
    *
    * If no options are specified then this will attempt to scroll the minimum
    * amount needed to bring the element into view.
@@ -14860,10 +14852,10 @@
   void _scrollTo_3(num? x, y) native;
 
   @JSName('setAttribute')
-  void _setAttribute(String name, String value) native;
+  void _setAttribute(String name, Object value) native;
 
   @JSName('setAttributeNS')
-  void _setAttributeNS(String? namespaceURI, String name, String value) native;
+  void _setAttributeNS(String? namespaceURI, String name, Object value) native;
 
   void setPointerCapture(int pointerId) native;
 
@@ -18336,7 +18328,7 @@
   /**
    * Specify the desired `url`, and `method` to use in making the request.
    *
-   * By default the request is done asyncronously, with no user or password
+   * By default the request is done asynchronously, with no user or password
    * authentication information. If `async` is false, the request will be sent
    * synchronously.
    *
@@ -32982,16 +32974,6 @@
   @JSName('moveTo')
   void _moveTo(int x, int y) native;
 
-  @JSName('openDatabase')
-
-  /// *Deprecated.*
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Creates('SqlDatabase')
-  SqlDatabase _openDatabase(
-      String name, String version, String displayName, int estimatedSize,
-      [DatabaseCallback? creationCallback]) native;
-
   void postMessage(/*any*/ message, String targetOrigin,
       [List<Object>? transfer]) {
     if (transfer != null) {
@@ -33679,26 +33661,6 @@
     _moveTo(p.x.toInt(), p.y.toInt());
   }
 
-  @JSName('openDatabase')
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Creates('SqlDatabase')
-  @deprecated
-  SqlDatabase openDatabase(
-      String name, String version, String displayName, int estimatedSize,
-      [DatabaseCallback? creationCallback]) {
-    var db;
-    if (creationCallback == null)
-      db = _openDatabase(name, version, displayName, estimatedSize);
-    else
-      db = _openDatabase(
-          name, version, displayName, estimatedSize, creationCallback);
-
-    applyExtension('Database', db);
-
-    return db;
-  }
-
   int get pageXOffset => JS<num>('num', '#.pageXOffset', this).round();
 
   int get pageYOffset => JS<num>('num', '#.pageYOffset', this).round();
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index e7fd45a..fbe663b 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -644,7 +644,7 @@
 ///
 /// Example:
 ///
-/// ```dart
+/// ```dart template:none
 /// class Two<A, B> {}
 ///
 /// print(extractTypeArguments<List>(<int>[], <T>() => new Set<T>()));
@@ -658,7 +658,7 @@
 /// The type argument T is important to choose which specific type parameter
 /// list in [instance]'s type hierarchy is being extracted. Consider:
 ///
-/// ```dart
+/// ```dart template:none
 /// class A<T> {}
 /// class B<T> {}
 ///
diff --git a/sdk/lib/io/file.dart b/sdk/lib/io/file.dart
index 05ecf7a..4f352ce 100644
--- a/sdk/lib/io/file.dart
+++ b/sdk/lib/io/file.dart
@@ -657,7 +657,7 @@
 
   /// Reads bytes into an existing [buffer].
   ///
-  /// Reads bytes and writes then into the the range of [buffer]
+  /// Reads bytes and writes then into the range of [buffer]
   /// from [start] to [end].
   /// The [start] must be non-negative and no greater than [buffer].length.
   /// If [end] is omitted, it defaults to [buffer].length.
@@ -670,7 +670,7 @@
 
   /// Synchronously reads into an existing [buffer].
   ///
-  /// Reads bytes and writes then into the the range of [buffer]
+  /// Reads bytes and writes then into the range of [buffer]
   /// from [start] to [end].
   /// The [start] must be non-negative and no greater than [buffer].length.
   /// If [end] is omitted, it defaults to [buffer].length.
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
index 696273b..b8361d0 100644
--- a/sdk/lib/io/file_impl.dart
+++ b/sdk/lib/io/file_impl.dart
@@ -647,6 +647,7 @@
   external factory _RandomAccessFileOps(int pointer);
 
   int getPointer();
+  int get fd;
   int close();
   readByte();
   read(int bytes);
@@ -661,6 +662,7 @@
   lock(int lock, int start, int end);
 }
 
+@pragma("vm:entry-point")
 class _RandomAccessFile implements RandomAccessFile {
   static bool _connectedResourceHandler = false;
 
@@ -671,6 +673,7 @@
   late _FileResourceInfo _resourceInfo;
   _RandomAccessFileOps _ops;
 
+  @pragma("vm:entry-point")
   _RandomAccessFile(int pointer, this.path)
       : _ops = new _RandomAccessFileOps(pointer) {
     _resourceInfo = new _FileResourceInfo(this);
@@ -1051,6 +1054,8 @@
 
   bool closed = false;
 
+  int get fd => _ops.fd;
+
   // WARNING:
   // Calling this function will increase the reference count on the native
   // object that implements the file operations. It should only be called to
diff --git a/sdk/lib/io/io.dart b/sdk/lib/io/io.dart
index 4cad26d..dbecc26 100644
--- a/sdk/lib/io/io.dart
+++ b/sdk/lib/io/io.dart
@@ -62,16 +62,17 @@
 /// ```
 /// ## HttpServer and HttpClient
 ///
-/// The classes [HttpServer] and [HttpClient]
-/// provide HTTP server and HTTP client functionality.
+/// The classes [HttpClient] and [HttpServer] provide low-level HTTP
+/// functionality.
 ///
-/// The [HttpServer] class provides the basic functionality for
-/// implementing an HTTP server.
-/// For some higher-level building-blocks, we recommend that you try
-/// the [shelf](https://pub.dev/packages/shelf)
-/// pub package, which contains
-/// a set of high-level classes that, together with the [HttpServer] class
-/// in this library, make it easier to implement HTTP servers.
+/// Instead of using these classes directly, consider using more
+/// developer-friendly and composable APIs found in packages.
+///
+/// For HTTP clients, look at [`package:http`](https://pub.dev/packages/http).
+///
+/// For HTTP servers, look at
+/// [Write HTTP servers](https://dart.dev/tutorials/server/httpserver) on
+/// [dart.dev](https://dart.dev/).
 ///
 /// ## Process
 ///
@@ -184,7 +185,7 @@
 /// To read text synchronously from the command line
 /// (the program blocks waiting for user to type information):
 /// ```dart
-/// String inputText = stdin.readLineSync();
+/// String? inputText = stdin.readLineSync();
 /// ```
 /// {@category VM}
 library dart.io;
diff --git a/sdk/lib/io/platform.dart b/sdk/lib/io/platform.dart
index bca141d..06dd98f 100644
--- a/sdk/lib/io/platform.dart
+++ b/sdk/lib/io/platform.dart
@@ -115,6 +115,14 @@
   static String get operatingSystemVersion => _operatingSystemVersion;
 
   /// The local hostname for the system.
+  ///
+  /// For example:
+  ///   "mycomputer.corp.example.com"
+  ///   "mycomputer"
+  ///
+  /// Uses the platform
+  /// [`gethostname`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/gethostname.html)
+  /// implementation.
   static String get localHostname => _localHostname;
 
   /// Whether the operating system is a version of
diff --git a/sdk/lib/io/process.dart b/sdk/lib/io/process.dart
index 81bf8e0..453f333 100644
--- a/sdk/lib/io/process.dart
+++ b/sdk/lib/io/process.dart
@@ -232,7 +232,7 @@
 /// import 'dart:io';
 ///
 /// main() async {
-///   var process = Process.start('ls', ['-l']);
+///   var process = await Process.start('ls', ['-l']);
 ///   var exitCode = await process.exitCode;
 ///   print('exit code: $exitCode');
 /// }
diff --git a/sdk/lib/io/secure_socket.dart b/sdk/lib/io/secure_socket.dart
index 32222b5..6150653 100644
--- a/sdk/lib/io/secure_socket.dart
+++ b/sdk/lib/io/secure_socket.dart
@@ -669,6 +669,10 @@
     return result;
   }
 
+  SocketMessage? readMessage([int? count]) {
+    throw UnsupportedError("Message-passing not supported by secure sockets");
+  }
+
   static int _fixOffset(int? offset) => offset ?? 0;
 
   // Write the data to the socket, and schedule the filter to encrypt it.
@@ -699,6 +703,11 @@
     return written;
   }
 
+  int sendMessage(List<SocketControlMessage> controlMessages, List<int> data,
+      [int offset = 0, int? count]) {
+    throw UnsupportedError("Message-passing not supported by secure sockets");
+  }
+
   X509Certificate? get peerCertificate => _secureFilter!.peerCertificate;
 
   String? get selectedProtocol => _selectedProtocol;
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index ab2ecf5..26cb3ef 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -615,6 +615,23 @@
   /// is returned.
   Uint8List? read([int? len]);
 
+  /// Reads a message containing up to [count] bytes from the socket.
+  ///
+  /// This function differs from [read] in that it will also return any
+  /// [SocketControlMessage] that have been sent.
+  ///
+  /// This function is non-blocking and will only return data
+  /// if data is available.
+  /// The number of bytes read can be less then [count] if fewer bytes are
+  /// available for immediate reading.
+  /// Length of data buffer in [SocketMessage] indicates number of bytes read.
+  ///
+  /// Returns `null` if no data is available.
+  ///
+  /// Unsupported by [RawSecureSocket].
+  @Since("2.15")
+  SocketMessage? readMessage([int? count]);
+
   /// Writes up to [count] bytes of the buffer from [offset] buffer offset to
   /// the socket.
   ///
@@ -626,6 +643,35 @@
   /// `buffer.length - offset`.
   int write(List<int> buffer, [int offset = 0, int? count]);
 
+  /// Writes socket control messages and data bytes to the socket.
+  ///
+  /// Writes [controlMessages] and up to [count] bytes of [data],
+  /// starting at [offset], to the socket. If [count] is not provided,
+  /// as many bytes as possible are written. Use [write] instead if no control
+  /// messages are required to be sent.
+  ///
+  /// When sent control messages are received, they are retained until the
+  /// next call to [readMessage], where all currently available control messages
+  /// are provided as part of the returned [SocketMessage].
+  /// Calling [read] will read only data bytes, and will not affect control
+  /// messages.
+  ///
+  /// The [count] must be positive (greater than zero).
+  ///
+  /// Returns the number of bytes written, which cannot be greater than
+  /// [count], nor greater than `data.length - offset`.
+  /// Return value of zero indicates that control messages were not sent.
+  ///
+  /// This function is non-blocking and will only write data
+  /// if buffer space is available in the socket.
+  ///
+  /// Throws an [OSError] if message could not be sent out.
+  ///
+  /// Unsupported by [RawSecureSocket].
+  @Since("2.15")
+  int sendMessage(List<SocketControlMessage> controlMessages, List<int> data,
+      [int offset = 0, int? count]);
+
   /// The port used by this socket.
   ///
   /// Throws a [SocketException] if the socket is closed.
@@ -825,6 +871,125 @@
   Datagram(this.data, this.address, this.port);
 }
 
+/// A wrappper around OS resource handle so it can be passed via Socket
+/// as part of [SocketMessage].
+abstract class ResourceHandle {
+  /// Creates wrapper around opened file.
+  external factory ResourceHandle.fromFile(RandomAccessFile file);
+
+  /// Creates wrapper around opened socket.
+  external factory ResourceHandle.fromSocket(Socket socket);
+
+  /// Creates wrapper around opened raw socket.
+  external factory ResourceHandle.fromRawSocket(RawSocket socket);
+
+  /// Creates wrapper around opened raw datagram socket.
+  external factory ResourceHandle.fromRawDatagramSocket(
+      RawDatagramSocket socket);
+
+  /// Creates wrapper around current stdin.
+  external factory ResourceHandle.fromStdin(Stdin stdin);
+
+  /// Creates wrapper around current stdout.
+  external factory ResourceHandle.fromStdout(Stdout stdout);
+
+  /// Extracts opened file from resource handle.
+  ///
+  /// This can also be used when receiving stdin and stdout handles.
+  ///
+  /// If this resource handle is not a file or stdio handle, the behavior of the
+  /// returned [RandomAccessFile] is completely unspecified.
+  /// Be very careful to avoid using a handle incorrectly.
+  RandomAccessFile toFile();
+
+  /// Extracts opened socket from resource handle.
+  ///
+  /// If this resource handle is not a socket handle, the behavior of the
+  /// returned [Socket] is completely unspecified.
+  /// Be very careful to avoid using a handle incorrectly.
+  Socket toSocket();
+
+  /// Extracts opened raw socket from resource handle.
+  ///
+  /// If this resource handle is not a socket handle, the behavior of the
+  /// returned [RawSocket] is completely unspecified.
+  /// Be very careful to avoid using a handle incorrectly.
+  RawSocket toRawSocket();
+
+  /// Extracts opened raw datagram socket from resource handle.
+  ///
+  /// If this resource handle is not a datagram socket handle, the behavior of
+  /// the returned [RawDatagramSocket] is completely unspecified.
+  /// Be very careful to avoid using a handle incorrectly.
+  RawDatagramSocket toRawDatagramSocket();
+}
+
+/// Control message part of the [SocketMessage] received by a call to
+/// [RawSocket.readMessage].
+///
+/// Control messages could carry different information including
+/// [ResourceHandle]. If [ResourceHandle]s are availabe as part of this message,
+/// they can be extracted via [extractHandles].
+abstract class SocketControlMessage {
+  /// Creates a control message containing the provided [handles].
+  ///
+  /// This is used by the sender when it sends handles across the socket.
+  /// Receiver can extract the handles from the message using [extractHandles].
+  external factory SocketControlMessage.fromHandles(
+      List<ResourceHandle> handles);
+
+  /// Extracts the list of handles embedded in this message.
+  ///
+  /// This method must only be used to extract handles from messages
+  /// received on a socket. It must not be used on a socket control
+  /// message that is created locally, and has not been sent using
+  /// [RawSocket.sendMessage].
+  ///
+  /// This method must only be called once.
+  /// Calling it multiple times may cause duplicated handles with unspecified
+  /// behavior.
+  List<ResourceHandle> extractHandles();
+
+  /// A platform specific value used to determine the kind of control message.
+  ///
+  /// Together with [type], these two integers identify the kind of control
+  /// message in a platform specific way.
+  /// For example, on Linux certain combinations of these values indicate
+  /// that this is a control message that carries [ResourceHandle]s.
+  int get level;
+
+  /// A platform specific value used to determine the kind of control message.
+  ///
+  /// Together with [level], these two integers identify the kind of control
+  /// message in a platform specific way.
+  /// For example, on Linux certain combinations of these values indicate
+  /// that this is a control message that carries [ResourceHandle]s.
+  int get type;
+
+  /// Actual bytes that were passed as part of the control message by the
+  /// underlying platform.
+  ///
+  /// The bytes are interpreted differently depending on the [level] and
+  /// [type]. These actual bytes can be used to inspect and interpret
+  /// non-handle-carrying messages.
+  Uint8List get data;
+}
+
+/// A socket message received by a [RawDatagramSocket].
+///
+/// A socket message consists of [data] bytes and [controlMessages].
+class SocketMessage {
+  /// The actual bytes of the message.
+  final Uint8List data;
+
+  /// The control messages sent as part of this socket message.
+  ///
+  /// This list can be empty.
+  final List<SocketControlMessage> controlMessages;
+
+  SocketMessage(this.data, this.controlMessages);
+}
+
 /// An unbuffered interface to a UDP socket.
 ///
 /// The raw datagram socket delivers the datagrams in the same chunks as the
diff --git a/sdk/lib/io/sync_socket.dart b/sdk/lib/io/sync_socket.dart
index c5296df..6feb625 100644
--- a/sdk/lib/io/sync_socket.dart
+++ b/sdk/lib/io/sync_socket.dart
@@ -36,7 +36,7 @@
 
   /// Reads bytes into an existing [buffer].
   ///
-  /// Reads bytes and writes then into the the range of [buffer]
+  /// Reads bytes and writes then into the range of [buffer]
   /// from [start] to [end].
   /// The [start] must be non-negative and no greater than [buffer].length.
   /// If [end] is omitted, it defaults to [buffer].length.
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index fc47a29..d439fd4 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -7,6 +7,10 @@
 /// but don't share memory,
 /// communicating only via messages.
 ///
+/// *NOTE*: The `dart:isolate` library is currently only supported by the
+/// [Dart Native](https://dart.dev/overview#platform) platform.
+
+///
 /// To use this library in your code:
 /// ```dart
 /// import 'dart:isolate';
@@ -556,11 +560,12 @@
 
   /// Terminates the current isolate synchronously.
   ///
-  /// This operations is potentially dangerous and should be used judiciously.
-  /// The isolate stops operating *immediately*. It throws if optional [message]
-  /// does not adhere to the limitation on what can be send from one isolate to
-  /// another. It also throws if a [finalMessagePort] is associated with an
-  /// isolate spawned outside of current isolate group, spawned via [spawnUri].
+  /// This operation is potentially dangerous and should be used judiciously.
+  /// The isolate stops operating *immediately*. It throws if the optional
+  /// [message] does not adhere to the limitations on what can be sent from one
+  /// isolate to another. It also throws if a [finalMessagePort] is associated
+  /// with an isolate spawned outside of current isolate group, spawned via
+  /// [spawnUri].
   ///
   /// If successful, a call to this method does not return. Pending `finally`
   /// blocks are not executed, control flow will not go back to the event loop,
@@ -574,10 +579,13 @@
   /// the current isolate. The isolate terminates immediately after
   /// that [SendPort.send] call returns.
   ///
-  /// (If the port is a native port, one provided by [ReceivePort.sendPort]
-  /// or [RawReceivePort.sendPort], the system may be able to send this final
+  /// If the port is a native port -- one provided by [ReceivePort.sendPort] or
+  /// [RawReceivePort.sendPort] -- the system may be able to send this final
   /// message more efficiently than normal port communication between live
-  /// isolates.)
+  /// isolates. In these cases this final message object graph will be
+  /// reassigned to the receiving isolate without copying. Further, the
+  /// receiving isolate will in most cases be able to receive the message
+  /// in constant time.
   external static Never exit([SendPort? finalMessagePort, Object? message]);
 }
 
@@ -607,9 +615,7 @@
   /// In the special circumstances when two isolates share the same code and are
   /// running in the same process (e.g. isolates created via [Isolate.spawn]),
   /// it is also possible to send object instances (which would be copied in the
-  /// process). This is currently only supported by the
-  /// [Dart Native](https://dart.dev/platforms#dart-native-vm-jit-and-aot)
-  /// platform.
+  /// process).
   ///
   /// The send happens immediately and doesn't block.  The corresponding receive
   /// port can receive the message as soon as its isolate's event loop is ready
diff --git a/sdk/lib/js/_js_annotations.dart b/sdk/lib/js/_js_annotations.dart
index c188214..b110632 100644
--- a/sdk/lib/js/_js_annotations.dart
+++ b/sdk/lib/js/_js_annotations.dart
@@ -18,4 +18,10 @@
   const _Anonymous();
 }
 
-const _Anonymous anonymous = const _Anonymous();
+// class _StaticInterop {
+//   const _StaticInterop();
+// }
+
+const _Anonymous anonymous = _Anonymous();
+
+// const _StaticInterop staticInterop = _StaticInterop();
diff --git a/sdk/lib/js_util/js_util.dart b/sdk/lib/js_util/js_util.dart
index bfe6cf3..7842a32 100644
--- a/sdk/lib/js_util/js_util.dart
+++ b/sdk/lib/js_util/js_util.dart
@@ -64,65 +64,63 @@
   return _convert(data)!;
 }
 
-dynamic newObject() => JS('=Object', '{}');
+T newObject<T>() => JS('=Object', '{}');
 
 bool hasProperty(Object o, Object name) => JS('bool', '# in #', name, o);
 
-// A CFE transformation will optimize all calls to `getProperty`.
-dynamic getProperty(Object o, Object name) =>
-    JS('Object|Null', '#[#]', o, name);
+T getProperty<T>(Object o, Object name) => JS('Object|Null', '#[#]', o, name);
 
 // A CFE transformation may optimize calls to `setProperty`, when [value] is
 // statically known to be a non-function.
-dynamic setProperty(Object o, Object name, Object? value) {
+T setProperty<T>(Object o, Object name, T? value) {
   assertInterop(value);
   return JS('', '#[#]=#', o, name, value);
 }
 
 /// Unchecked version of setProperty, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _setPropertyUnchecked(Object o, Object name, Object? value) {
+T _setPropertyUnchecked<T>(Object o, Object name, T? value) {
   return JS('', '#[#]=#', o, name, value);
 }
 
 // A CFE transformation may optimize calls to `callMethod` when [args] is a
 // a list literal or const list containing at most 4 values, all of which are
 // statically known to be non-functions.
-dynamic callMethod(Object o, String method, List<Object?> args) {
+T callMethod<T>(Object o, String method, List<Object?> args) {
   assertInteropArgs(args);
   return JS('Object|Null', '#[#].apply(#, #)', o, method, o, args);
 }
 
 /// Unchecked version for 0 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callMethodUnchecked0(Object o, String method) {
+T _callMethodUnchecked0<T>(Object o, String method) {
   return JS('Object|Null', '#[#]()', o, method);
 }
 
 /// Unchecked version for 1 argument, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callMethodUnchecked1(Object o, String method, Object? arg1) {
+T _callMethodUnchecked1<T>(Object o, String method, Object? arg1) {
   return JS('Object|Null', '#[#](#)', o, method, arg1);
 }
 
 /// Unchecked version for 2 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callMethodUnchecked2(
+T _callMethodUnchecked2<T>(
     Object o, String method, Object? arg1, Object? arg2) {
   return JS('Object|Null', '#[#](#, #)', o, method, arg1, arg2);
 }
 
 /// Unchecked version for 3 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callMethodUnchecked3(
+T _callMethodUnchecked3<T>(
     Object o, String method, Object? arg1, Object? arg2, Object? arg3) {
   return JS('Object|Null', '#[#](#, #, #)', o, method, arg1, arg2, arg3);
 }
 
 /// Unchecked version for 4 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callMethodUnchecked4(Object o, String method, Object? arg1,
-    Object? arg2, Object? arg3, Object? arg4) {
+T _callMethodUnchecked4<T>(Object o, String method, Object? arg1, Object? arg2,
+    Object? arg3, Object? arg4) {
   return JS(
       'Object|Null', '#[#](#, #, #, #)', o, method, arg1, arg2, arg3, arg4);
 }
@@ -134,7 +132,7 @@
 bool instanceof(Object? o, Object type) =>
     JS('bool', '# instanceof #', o, type);
 
-dynamic callConstructor(Object constr, List<Object?>? arguments) {
+T callConstructor<T>(Object constr, List<Object?>? arguments) {
   if (arguments == null) {
     return JS('Object', 'new #()', constr);
   } else {
@@ -197,32 +195,32 @@
 
 /// Unchecked version for 0 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callConstructorUnchecked0(Object constr) {
+T _callConstructorUnchecked0<T>(Object constr) {
   return JS('Object', 'new #()', constr);
 }
 
 /// Unchecked version for 1 argument, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callConstructorUnchecked1(Object constr, Object? arg1) {
+T _callConstructorUnchecked1<T>(Object constr, Object? arg1) {
   return JS('Object', 'new #(#)', constr, arg1);
 }
 
 /// Unchecked version for 2 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callConstructorUnchecked2(Object constr, Object? arg1, Object? arg2) {
+T _callConstructorUnchecked2<T>(Object constr, Object? arg1, Object? arg2) {
   return JS('Object', 'new #(#, #)', constr, arg1, arg2);
 }
 
 /// Unchecked version for 3 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callConstructorUnchecked3(
+T _callConstructorUnchecked3<T>(
     Object constr, Object? arg1, Object? arg2, Object? arg3) {
   return JS('Object', 'new #(#, #, #)', constr, arg1, arg2, arg3);
 }
 
 /// Unchecked version for 4 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-dynamic _callConstructorUnchecked4(
+T _callConstructorUnchecked4<T>(
     Object constr, Object? arg1, Object? arg2, Object? arg3, Object? arg4) {
   return JS('Object', 'new #(#, #, #, #)', constr, arg1, arg2, arg3, arg4);
 }
@@ -247,7 +245,7 @@
 
 /// Converts a JavaScript Promise to a Dart [Future].
 ///
-/// ```dart
+/// ```dart template:none
 /// @JS()
 /// external Promise<num> get threePromise; // Resolves to 3
 ///
diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json
index 2ca5b70..c59dc6f 100644
--- a/sdk/lib/libraries.json
+++ b/sdk/lib/libraries.json
@@ -231,9 +231,6 @@
       "web_gl": {
         "uri": "web_gl/dart2js/web_gl_dart2js.dart"
       },
-      "web_sql": {
-        "uri": "web_sql/dart2js/web_sql_dart2js.dart"
-      },
       "_dart2js_runtime_metrics": {
         "uri": "_internal/js_runtime/lib/dart2js_runtime_metrics.dart"
       },
@@ -476,10 +473,7 @@
       },
       "web_gl": {
         "uri": "web_gl/dart2js/web_gl_dart2js.dart"
-      },
-      "web_sql": {
-        "uri": "web_sql/dart2js/web_sql_dart2js.dart"
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/sdk/lib/libraries.yaml b/sdk/lib/libraries.yaml
index 1066ab0..812487a 100644
--- a/sdk/lib/libraries.yaml
+++ b/sdk/lib/libraries.yaml
@@ -229,9 +229,6 @@
     web_gl:
       uri: "web_gl/dart2js/web_gl_dart2js.dart"
 
-    web_sql:
-      uri: "web_sql/dart2js/web_sql_dart2js.dart"
-
     _dart2js_runtime_metrics:
       uri: "_internal/js_runtime/lib/dart2js_runtime_metrics.dart"
 
@@ -470,6 +467,3 @@
 
       web_gl:
         uri: "web_gl/dart2js/web_gl_dart2js.dart"
-
-      web_sql:
-        uri: "web_sql/dart2js/web_sql_dart2js.dart"
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 7c9e1b7..94cd7c1 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -23,8 +23,6 @@
 Language/Libraries_and_Scripts/Scripts/top_level_main_t06: SkipByDesign # Uses dart:io.
 Language/Libraries_and_Scripts/Scripts/top_level_syntax_t01: SkipByDesign # Non-JS-interop external members are not supported
 Language/Libraries_and_Scripts/top_level_syntax_t01: SkipByDesign # Non-JS-interop external members are not supported
-Language/Metadata/before*: SkipByDesign # dart:mirrors not supported https://github.com/dart-lang/co19/issues/523.
-Language/Metadata/syntax_t10: SkipByDesign # dart:mirrors is not supported
 Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: SkipByDesign # binary '~' produces different results in JavaScript and Dart
 LanguageFeatures/Abstract-external-fields/static_analysis_external_A01_t01: SkipByDesign # Non-JS-interop external members are not supported
 LanguageFeatures/Abstract-external-fields/static_analysis_external_A01_t02: SkipByDesign # Non-JS-interop external members are not supported
diff --git a/tests/co19/co19-dartdevc.status b/tests/co19/co19-dartdevc.status
index 683bc51..7e761f2 100644
--- a/tests/co19/co19-dartdevc.status
+++ b/tests/co19/co19-dartdevc.status
@@ -21,8 +21,6 @@
 Language/Libraries_and_Scripts/Scripts/top_level_main_t06: SkipByDesign # Uses dart:io.
 Language/Libraries_and_Scripts/Scripts/top_level_syntax_t01: SkipByDesign # External variables are not supported
 Language/Libraries_and_Scripts/top_level_syntax_t01: SkipByDesign # External variables are not supported
-Language/Metadata/before*: SkipByDesign # dart:mirrors not supported https://github.com/dart-lang/co19/issues/523
-Language/Metadata/syntax_t10: SkipByDesign # dart:mirrors is not supported
 Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: SkipByDesign # binary '~' produces different results in JavaScript and Dart
 LanguageFeatures/Abstract-external-fields/static_analysis_external_A01_t01: SkipByDesign # External variables are not supported
 LanguageFeatures/Abstract-external-fields/static_analysis_external_A01_t02: SkipByDesign # External variables are not supported
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 92bf7b5..09b27c9 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -3,7 +3,6 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $runtime == dart_precompiled ]
-Language/Metadata/syntax_t10: SkipByDesign # dart:mirrors is not supported
 LibTest/io/RawDatagramSocket/join_A01_t01: Skip # https://github.com/dart-lang/co19/issues/195
 LibTest/io/RawDatagramSocket/join_A01_t02: Skip # https://github.com/dart-lang/co19/issues/195
 LibTest/io/RawDatagramSocket/join_A02_t01: Skip # https://github.com/dart-lang/co19/issues/195
diff --git a/tests/co19_2/co19_2-co19.status b/tests/co19_2/co19_2-co19.status
index f8609dc..03f0c27 100644
--- a/tests/co19_2/co19_2-co19.status
+++ b/tests/co19_2/co19_2-co19.status
@@ -8,8 +8,126 @@
 Language/Generics/typedef_A08_t02: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
 Language/Generics/typedef_A08_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
 Language/Generics/typedef_A08_t04: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l1_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l2_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/class/static/class_typedef_l2_t07: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t04: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t05: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t08: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t09: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l1_t10: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t01: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t02: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t04: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t06: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t07: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t08: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t09: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t10: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t11: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t12: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t13: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t14: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t15: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t16: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t17: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t18: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t19: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_01_t20: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t01: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t06: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t07: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t08: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t09: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t10: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t11: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t14: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t15: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t16: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t17: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t18: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t19: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_02_t20: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t02: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t04: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t06: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t07: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t08: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t09: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t12: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t13: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t14: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t15: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t16: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t17: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t18: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t19: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_03_t20: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t01: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t02: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t04: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t06: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t07: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t08: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t09: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t10: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t11: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t12: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t13: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t14: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t15: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t16: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t17: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t18: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t19: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_04_t20: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t01: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t02: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t04: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t06: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t07: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t08: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t09: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t10: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t11: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t12: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t13: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t14: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t15: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t16: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t17: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t18: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t19: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_05_t20: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t01: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t02: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t06: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t07: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t08: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t09: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t10: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t11: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t12: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t13: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t14: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t15: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t16: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t17: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t18: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t19: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_l2_06_t20: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t03: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t07: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t09: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t11: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t13: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t15: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t17: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
+LanguageFeatures/Instantiate-to-bound/typedef/static/typedef_typedef_l1_t19: SkipByDesign # https://github.com/dart-lang/sdk/issues/46483
 LibTest/io/RawDatagramSocket/*: Skip # https://github.com/dart-lang/co19/issues/195
-
-[ $compiler == dart2js || $compiler == dartdevk ]
-Language/Libraries_and_Scripts/Scripts/top_level_main_t01: SkipByDesign # Uses dart:io.
-Language/Libraries_and_Scripts/Scripts/top_level_main_t06: SkipByDesign # Uses dart:io.
diff --git a/tests/co19_2/co19_2-dart2js.status b/tests/co19_2/co19_2-dart2js.status
index 29cbe78..c5d8002 100644
--- a/tests/co19_2/co19_2-dart2js.status
+++ b/tests/co19_2/co19_2-dart2js.status
@@ -15,9 +15,10 @@
 Language/Expressions/Object_Identity/object_t02: SkipByDesign # https://github.com/dart-lang/sdk/issues/42222#issuecomment-640431711
 Language/Expressions/Spawning_an_Isolate/new_isolate_t01: SkipByDesign
 Language/Functions/External_Functions/not_connected_to_a_body_t01: SkipByDesign # Non-JS-interop external members are not supported
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: SkipByDesign # Uses dart:io.
+Language/Libraries_and_Scripts/Scripts/top_level_main_t06: SkipByDesign # Uses dart:io.
 Language/Libraries_and_Scripts/Scripts/top_level_syntax_t01: SkipByDesign # Non-JS-interop external members are not supported
 Language/Libraries_and_Scripts/top_level_syntax_t01: SkipByDesign # Non-JS-interop external members are not supported
-Language/Metadata/before*: SkipByDesign # dart:mirrors not supported https://github.com/dart-lang/co19/issues/523.
 Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: SkipByDesign # binary '~' produces different results in JavaScript and Dart
 LibTest/core/DateTime/DateTime.fromMicrosecondsSinceEpoch_A01_t01: SkipByDesign # microseconds are not supported in JavaScript
 LibTest/core/DateTime/microsecond_A01_t01: SkipByDesign # microseconds are not supported in JavaScript
@@ -31,7 +32,8 @@
 LibTest/core/int/parse_A01_t02: SkipByDesign # big integers cannot be represented in JavaScript
 LibTest/core/int/remainder_A01_t03: SkipByDesign # Division by zero is not an error in JavaScript
 LibTest/io/*: SkipByDesign # dart:io not supported.
-LibTest/isolate/*: SkipByDesign # dart:isolate not supported.
+LibTest/isolate/*: SkipByDesign # dart:isolate not supported
+LibTest/mirrors/*: SkipByDesign # dart:mirrors not supported
 LibTest/typed_data/ByteBuffer/asInt64List_A01_t01: SkipByDesign # Int64List not supported on the web
 LibTest/typed_data/ByteBuffer/asInt64List_A02_t01: SkipByDesign # Int64List not supported on the web
 LibTest/typed_data/ByteBuffer/asInt64List_A03_t01: SkipByDesign # Int64List not supported on the web
diff --git a/tests/co19_2/co19_2-dartdevc.status b/tests/co19_2/co19_2-dartdevc.status
index 13e01d6..d927051 100644
--- a/tests/co19_2/co19_2-dartdevc.status
+++ b/tests/co19_2/co19_2-dartdevc.status
@@ -66,9 +66,10 @@
 Language/Expressions/Object_Identity/object_t02: SkipByDesign # https://github.com/dart-lang/sdk/issues/42222#issuecomment-640431711
 Language/Expressions/Spawning_an_Isolate/new_isolate_t01: SkipByDesign # dart:isolate not supported.
 Language/Functions/External_Functions/not_connected_to_a_body_t01: SkipByDesign # External variables are not supported
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: SkipByDesign # Uses dart:io.
+Language/Libraries_and_Scripts/Scripts/top_level_main_t06: SkipByDesign # Uses dart:io.
 Language/Libraries_and_Scripts/Scripts/top_level_syntax_t01: SkipByDesign # External variables are not supported
 Language/Libraries_and_Scripts/top_level_syntax_t01: SkipByDesign # External variables are not supported
-Language/Metadata/before*: SkipByDesign # dart:mirrors not supported https://github.com/dart-lang/co19/issues/523.
 Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: SkipByDesign # binary '~' produces different results in JavaScript and Dart
 Language/Types/Interface_Types/subtype_t27: SkipSlow
 Language/Types/Interface_Types/subtype_t28: SkipSlow
@@ -102,8 +103,9 @@
 LibTest/html/IFrameElement/focus_A01_t01: SkipSlow
 LibTest/html/IFrameElement/onMouseWheel_A01_t01: SkipSlow
 LibTest/html/IFrameElement/onTransitionEnd_A01_t01: SkipSlow
-LibTest/io/*: SkipByDesign # dart:io not supported.
-LibTest/isolate/*: SkipByDesign # dart:isolate not supported.
+LibTest/io/*: SkipByDesign # dart:io not supported
+LibTest/isolate/*: SkipByDesign # dart:isolate not supported
+LibTest/mirrors/*: SkipByDesign # dart:mirrors not supported
 LibTest/typed_data/ByteBuffer/asInt64List_A01_t01: SkipByDesign # Int64List not supported on the web
 LibTest/typed_data/ByteBuffer/asInt64List_A02_t01: SkipByDesign # Int64List not supported on the web
 LibTest/typed_data/ByteBuffer/asInt64List_A03_t01: SkipByDesign # Int64List not supported on the web
diff --git a/tests/corelib/date_time_test.dart b/tests/corelib/date_time_test.dart
index e782ca5..21859ef 100644
--- a/tests/corelib/date_time_test.dart
+++ b/tests/corelib/date_time_test.dart
@@ -1188,6 +1188,34 @@
   Expect.equals("-010000-01-01T23:49:59.989979Z", d.toIso8601String());
 }
 
+void testRegression46966() {
+  // See http://dartbug.com/46966
+  // The constructor allowed numbers larger than 100_000_000 days
+  // from epoch, contrary to documentation (and web behavior).
+
+  // Maximally allowed milliseconds on either side of epoch
+  // (±100 000 000 days).
+  var maxMilliseconds = 100000000 * 24 * 60 * 60 * 1000;
+  var maxDate = DateTime.fromMillisecondsSinceEpoch(maxMilliseconds);
+  var minDate = DateTime.fromMillisecondsSinceEpoch(-maxMilliseconds);
+
+  // Throws if greater.
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(maxMilliseconds + 1));
+  Expect.throws(
+      () => DateTime.fromMillisecondsSinceEpoch(-maxMilliseconds - 1));
+
+  // But also if much greater.
+  // The badMin value overflows 64-bits when multiplied by 1000.
+  var badMin = 0x20c49ba5e353f8;
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMin));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMin));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMin + 1));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMin - 1));
+  var badMax = double.maxFinite.toInt(); // 2^63-1 on VM, max double on JS.
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMax));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMax - 1));
+}
+
 void main() {
   testNow();
   testMillisecondsSinceEpoch();
@@ -1203,4 +1231,5 @@
   testWeekday();
   testToStrings();
   testIsoString();
+  testRegression46966();
 }
diff --git a/tests/corelib/duration_test.dart b/tests/corelib/duration_test.dart
index 1f8c543..7080723 100644
--- a/tests/corelib/duration_test.dart
+++ b/tests/corelib/duration_test.dart
@@ -205,7 +205,7 @@
   Expect.equals(-3600000000, d.inMicroseconds);
   d = d1 * 0;
   Expect.equals(0, d.inMicroseconds);
-  Expect.throws(() => d1 ~/ 0, (e) => e is IntegerDivisionByZeroException);
+  Expect.throws(() => d1 ~/ 0, (e) => e is UnsupportedError);
 
   d = new Duration(microseconds: 0);
   Expect.isTrue(d < new Duration(microseconds: 1));
diff --git a/tests/corelib_2/date_time_test.dart b/tests/corelib_2/date_time_test.dart
index 798fc3a..09bbecd 100644
--- a/tests/corelib_2/date_time_test.dart
+++ b/tests/corelib_2/date_time_test.dart
@@ -1190,6 +1190,34 @@
   Expect.equals("-010000-01-01T23:49:59.989979Z", d.toIso8601String());
 }
 
+void testRegression46966() {
+  // See http://dartbug.com/46966
+  // The constructor allowed numbers larger than 100_000_000 days
+  // from epoch, contrary to documentation (and web behavior).
+
+  // Maximally allowed milliseconds on either side of epoch
+  // (±100 000 000 days).
+  var maxMilliseconds = 100000000 * 24 * 60 * 60 * 1000;
+  var maxDate = DateTime.fromMillisecondsSinceEpoch(maxMilliseconds);
+  var minDate = DateTime.fromMillisecondsSinceEpoch(-maxMilliseconds);
+
+  // Throws if greater.
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(maxMilliseconds + 1));
+  Expect.throws(
+      () => DateTime.fromMillisecondsSinceEpoch(-maxMilliseconds - 1));
+
+  // But also if much greater.
+  // The badMin value overflows 64-bits when multiplied by 1000.
+  var badMin = 0x20c49ba5e353f8;
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMin));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMin));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMin + 1));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMin - 1));
+  var badMax = double.maxFinite.toInt(); // 2^63-1 on VM, max double on JS.
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMax));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMax - 1));
+}
+
 void main() {
   testNow();
   testMillisecondsSinceEpoch();
@@ -1205,4 +1233,5 @@
   testWeekday();
   testToStrings();
   testIsoString();
+  testRegression46966();
 }
diff --git a/tests/corelib_2/duration_test.dart b/tests/corelib_2/duration_test.dart
index 1e5c5a3..fb80464 100644
--- a/tests/corelib_2/duration_test.dart
+++ b/tests/corelib_2/duration_test.dart
@@ -207,7 +207,7 @@
   Expect.equals(-3600000000, d.inMicroseconds);
   d = d1 * 0;
   Expect.equals(0, d.inMicroseconds);
-  Expect.throws(() => d1 ~/ 0, (e) => e is IntegerDivisionByZeroException);
+  Expect.throws(() => d1 ~/ 0, (e) => e is UnsupportedError);
 
   d = new Duration(microseconds: 0);
   Expect.isTrue(d < new Duration(microseconds: 1));
diff --git a/tests/ffi/bool_test.dart b/tests/ffi/bool_test.dart
new file mode 100644
index 0000000..19f5594
--- /dev/null
+++ b/tests/ffi/bool_test.dart
@@ -0,0 +1,89 @@
+// Copyright (c) 2021, 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.
+//
+// Dart test program for testing dart:ffi bools.
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+import 'function_structs_by_value_generated_compounds.dart';
+
+void main() {
+  testSizeOf();
+  testStoreLoad();
+  testStoreLoadIndexed();
+  testStruct();
+  testStruct2();
+  testInlineArray();
+}
+
+void testSizeOf() {
+  Expect.equals(1, sizeOf<Bool>());
+}
+
+void testStoreLoad() {
+  final p = calloc<Bool>();
+  p.value = true;
+  Expect.equals(true, p.value);
+  p.value = false;
+  Expect.equals(false, p.value);
+  calloc.free(p);
+}
+
+void testStoreLoadIndexed() {
+  final p = calloc<Bool>(2);
+  p[0] = true;
+  p[1] = false;
+  Expect.equals(true, p[0]);
+  Expect.equals(false, p[1]);
+  calloc.free(p);
+}
+
+void testStruct() {
+  final p = calloc<Struct1ByteBool>();
+  p.ref.a0 = true;
+  Expect.equals(true, p.ref.a0);
+  p.ref.a0 = false;
+  Expect.equals(false, p.ref.a0);
+  calloc.free(p);
+}
+
+void testStruct2() {
+  final p = calloc<Struct10BytesHomogeneousBool>();
+  p.ref.a0 = true;
+  p.ref.a1 = false;
+  p.ref.a2 = true;
+  p.ref.a3 = false;
+  p.ref.a4 = true;
+  p.ref.a5 = false;
+  p.ref.a6 = true;
+  p.ref.a7 = false;
+  p.ref.a8 = true;
+  p.ref.a9 = false;
+  Expect.equals(true, p.ref.a0);
+  Expect.equals(false, p.ref.a1);
+  Expect.equals(true, p.ref.a2);
+  Expect.equals(false, p.ref.a3);
+  Expect.equals(true, p.ref.a4);
+  Expect.equals(false, p.ref.a5);
+  Expect.equals(true, p.ref.a6);
+  Expect.equals(false, p.ref.a7);
+  Expect.equals(true, p.ref.a8);
+  Expect.equals(false, p.ref.a9);
+  calloc.free(p);
+}
+
+void testInlineArray() {
+  final p = calloc<Struct10BytesInlineArrayBool>();
+  final array = p.ref.a0;
+  for (int i = 0; i < 10; i++) {
+    array[i] = i % 2 == 0;
+  }
+  for (int i = 0; i < 10; i++) {
+    Expect.equals(i % 2 == 0, array[i]);
+  }
+  calloc.free(p);
+}
diff --git a/tests/ffi/ffi_native_test.dart b/tests/ffi/ffi_native_test.dart
index 074e236..2874007 100644
--- a/tests/ffi/ffi_native_test.dart
+++ b/tests/ffi/ffi_native_test.dart
@@ -6,6 +6,7 @@
 // with type arguments isn't supported in that version of Dart.
 
 import 'dart:ffi';
+import 'dart:nativewrappers';
 
 // Error: FFI leaf call must not have Handle return type.
 @FfiNative<Handle Function()>("foo", isLeaf: true) //# 01: compile-time error
@@ -20,11 +21,48 @@
   @FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr')
   external static int returnIntPtrStatic(int x);
 
-  // Error: FfiNative annotations can only be used on static functions.
-  @FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr') //# 03: compile-time error
-  external int returnIntPtrMethod(int x); //# 03: compile-time error
+  // Error: Missing receiver in FfiNative annotation.
+  @FfiNative<Void Function(IntPtr)>('doesntmatter') //# 03: compile-time error
+  external void badMissingReceiver(int v); //# 03: compile-time error
+
+  // Error: Class doesn't extend NativeFieldWrapperClass1 - can't be converted
+  // to Pointer.
+  @FfiNative<Void Function(Pointer<Void>, IntPtr)>(//# 04: compile-time error
+      'doesntmatter') //# 04: compile-time error
+  external void badHasReceiverPointer(int v); //# 04: compile-time error
+
+  @FfiNative<Void Function(Handle, IntPtr)>('doesntmatter')
+  external void goodHasReceiverHandle(int v);
 }
 
+class NativeClassy extends NativeFieldWrapperClass1 {
+  @FfiNative<IntPtr Function(IntPtr)>('ReturnIntPtr')
+  external static int returnIntPtrStatic(int x);
+
+  // Error: Missing receiver in FfiNative annotation.
+  @FfiNative<Void Function(IntPtr)>('doesntmatter') //# 05: compile-time error
+  external void badMissingReceiver(int v); //# 05: compile-time error
+
+  @FfiNative<Void Function(Pointer<Void>, IntPtr)>('doesntmatter')
+  external void goodHasReceiverPointer(int v);
+
+  @FfiNative<Void Function(Handle, IntPtr)>('doesntmatter')
+  external void goodHasReceiverHandle(int v);
+}
+
+// Error: Too many FfiNative parameters.
+@FfiNative<Handle Function(IntPtr, IntPtr)>(//# 06: compile-time error
+    'doesntmatter') //# 06: compile-time error
+external Object badTooManyFfiParameter(int v); //# 06: compile-time error
+
+// Error: Too few FfiNative parameters.
+@FfiNative<Handle Function(IntPtr)>('doesntmatter') //# 07: compile-time error
+external Object badTooFewFfiParameter(int v, int v2); //# 07: compile-time error
+
+// Error: FfiNatives must be marked external (and by extension have no body).
+@FfiNative<Void Function()>('doesntmatter') //# 08: compile-time error
+void mustBeMarkedExternal() {} //# 08: compile-time error
+
 // Regression test: Ensure same-name FfiNative functions don't collide in the
 // top-level namespace, but instead live under their parent (Library, Class).
 class A {
@@ -37,4 +75,24 @@
   external static void foo();
 }
 
+class DoesNotExtend implements NativeFieldWrapperClass1 {
+  // Error: Receiver type can't be converted to Pointer since it doesn't extend
+  // NativeFieldWrapperClass1.
+  @FfiNative<IntPtr Function(Pointer<Void>, Handle)>(//# 09: compile-time error
+      'doesntmatter') //# 09: compile-time error
+  external int bad1(DoesNotExtend obj); //# 09: compile-time error
+
+  // Error: Parameter type can't be converted to Pointer since it doesn't extend
+  // NativeFieldWrapperClass1.
+  @FfiNative<IntPtr Function(Handle, Pointer<Void>)>(//# 10: compile-time error
+      'doesntmatter') //# 10: compile-time error
+  external int bad2(DoesNotExtend obj); //# 10: compile-time error
+
+  // Error: Parameter type can't be converted to Pointer since it doesn't extend
+  // NativeFieldWrapperClass1.
+  @FfiNative<IntPtr Function(Pointer<Void>)>(//# 11: compile-time error
+      'doesntmatter') //# 11: compile-time error
+  external static int bad3(DoesNotExtend obj); //# 11: compile-time error
+}
+
 void main() {/* Intentionally empty: Compile-time error tests. */}
diff --git a/tests/ffi/function_callbacks_structs_by_value_generated_test.dart b/tests/ffi/function_callbacks_structs_by_value_generated_test.dart
index a7c9590..232b7a5 100644
--- a/tests/ffi/function_callbacks_structs_by_value_generated_test.dart
+++ b/tests/ffi/function_callbacks_structs_by_value_generated_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -17,8 +18,12 @@
 
 import 'callback_tests_utils.dart';
 
-// Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'dylib_utils.dart';
+
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   testCases.forEach((t) {
@@ -346,6 +351,21 @@
           passUnion16BytesNestedFloatx10, 0.0),
       passUnion16BytesNestedFloatx10AfterCallback),
   CallbackTest.withCheck(
+      "PassUint8Boolx9Struct10BytesHomogeneousBoolBool",
+      Pointer.fromFunction<PassUint8Boolx9Struct10BytesHomogeneousBoolBoolType>(
+          passUint8Boolx9Struct10BytesHomogeneousBoolBool, 0),
+      passUint8Boolx9Struct10BytesHomogeneousBoolBoolAfterCallback),
+  CallbackTest.withCheck(
+      "PassUint8Boolx9Struct10BytesInlineArrayBoolBool",
+      Pointer.fromFunction<PassUint8Boolx9Struct10BytesInlineArrayBoolBoolType>(
+          passUint8Boolx9Struct10BytesInlineArrayBoolBool, 0),
+      passUint8Boolx9Struct10BytesInlineArrayBoolBoolAfterCallback),
+  CallbackTest.withCheck(
+      "PassUint8Struct1ByteBool",
+      Pointer.fromFunction<PassUint8Struct1ByteBoolType>(
+          passUint8Struct1ByteBool, false),
+      passUint8Struct1ByteBoolAfterCallback),
+  CallbackTest.withCheck(
       "ReturnStruct1ByteInt",
       Pointer.fromFunction<ReturnStruct1ByteIntType>(returnStruct1ByteInt),
       returnStruct1ByteIntAfterCallback),
@@ -7578,6 +7598,299 @@
   Expect.approxEquals(10.0, result);
 }
 
+typedef PassUint8Boolx9Struct10BytesHomogeneousBoolBoolType = Int32 Function(
+    Uint8,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Struct10BytesHomogeneousBool,
+    Bool);
+
+// Global variables to be able to test inputs after callback returned.
+int passUint8Boolx9Struct10BytesHomogeneousBoolBool_a0 = 0;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a1 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a2 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a3 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a4 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a5 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a6 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a7 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a8 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a9 = false;
+Struct10BytesHomogeneousBool
+    passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10 =
+    Pointer<Struct10BytesHomogeneousBool>.fromAddress(0).ref;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a11 = false;
+
+// Result variable also global, so we can delete it after the callback.
+int passUint8Boolx9Struct10BytesHomogeneousBoolBoolResult = 0;
+
+int passUint8Boolx9Struct10BytesHomogeneousBoolBoolCalculateResult() {
+  int result = 0;
+
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a1 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a2 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a3 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a4 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a5 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a6 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a7 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a8 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a9 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a0 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a1 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a2 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a3 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a4 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a5 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a6 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a7 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a8 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a9 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a11 ? 1 : 0;
+
+  passUint8Boolx9Struct10BytesHomogeneousBoolBoolResult = result;
+
+  return result;
+}
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+int passUint8Boolx9Struct10BytesHomogeneousBoolBool(
+    int a0,
+    bool a1,
+    bool a2,
+    bool a3,
+    bool a4,
+    bool a5,
+    bool a6,
+    bool a7,
+    bool a8,
+    bool a9,
+    Struct10BytesHomogeneousBool a10,
+    bool a11) {
+  print(
+      "passUint8Boolx9Struct10BytesHomogeneousBoolBool(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11})");
+
+  // In legacy mode, possibly return null.
+
+  // In both nnbd and legacy mode, possibly throw.
+  if (a0 == 42 || a0 == 84) {
+    print("throwing!");
+    throw Exception(
+        "PassUint8Boolx9Struct10BytesHomogeneousBoolBool throwing on purpose!");
+  }
+
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a0 = a0;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a1 = a1;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a2 = a2;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a3 = a3;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a4 = a4;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a5 = a5;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a6 = a6;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a7 = a7;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a8 = a8;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a9 = a9;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10 = a10;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a11 = a11;
+
+  final result =
+      passUint8Boolx9Struct10BytesHomogeneousBoolBoolCalculateResult();
+
+  print("result = $result");
+
+  return result;
+}
+
+void passUint8Boolx9Struct10BytesHomogeneousBoolBoolAfterCallback() {
+  final result =
+      passUint8Boolx9Struct10BytesHomogeneousBoolBoolCalculateResult();
+
+  print("after callback result = $result");
+
+  Expect.equals(11, result);
+}
+
+typedef PassUint8Boolx9Struct10BytesInlineArrayBoolBoolType = Int32 Function(
+    Uint8,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Struct10BytesInlineArrayBool,
+    Bool);
+
+// Global variables to be able to test inputs after callback returned.
+int passUint8Boolx9Struct10BytesInlineArrayBoolBool_a0 = 0;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a1 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a2 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a3 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a4 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a5 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a6 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a7 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a8 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a9 = false;
+Struct10BytesInlineArrayBool
+    passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10 =
+    Pointer<Struct10BytesInlineArrayBool>.fromAddress(0).ref;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a11 = false;
+
+// Result variable also global, so we can delete it after the callback.
+int passUint8Boolx9Struct10BytesInlineArrayBoolBoolResult = 0;
+
+int passUint8Boolx9Struct10BytesInlineArrayBoolBoolCalculateResult() {
+  int result = 0;
+
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a1 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a2 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a3 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a4 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a5 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a6 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a7 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a8 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a9 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[0] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[1] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[2] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[3] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[4] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[5] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[6] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[7] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[8] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[9] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a11 ? 1 : 0;
+
+  passUint8Boolx9Struct10BytesInlineArrayBoolBoolResult = result;
+
+  return result;
+}
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+int passUint8Boolx9Struct10BytesInlineArrayBoolBool(
+    int a0,
+    bool a1,
+    bool a2,
+    bool a3,
+    bool a4,
+    bool a5,
+    bool a6,
+    bool a7,
+    bool a8,
+    bool a9,
+    Struct10BytesInlineArrayBool a10,
+    bool a11) {
+  print(
+      "passUint8Boolx9Struct10BytesInlineArrayBoolBool(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11})");
+
+  // In legacy mode, possibly return null.
+
+  // In both nnbd and legacy mode, possibly throw.
+  if (a0 == 42 || a0 == 84) {
+    print("throwing!");
+    throw Exception(
+        "PassUint8Boolx9Struct10BytesInlineArrayBoolBool throwing on purpose!");
+  }
+
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a0 = a0;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a1 = a1;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a2 = a2;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a3 = a3;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a4 = a4;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a5 = a5;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a6 = a6;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a7 = a7;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a8 = a8;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a9 = a9;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10 = a10;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a11 = a11;
+
+  final result =
+      passUint8Boolx9Struct10BytesInlineArrayBoolBoolCalculateResult();
+
+  print("result = $result");
+
+  return result;
+}
+
+void passUint8Boolx9Struct10BytesInlineArrayBoolBoolAfterCallback() {
+  final result =
+      passUint8Boolx9Struct10BytesInlineArrayBoolBoolCalculateResult();
+
+  print("after callback result = $result");
+
+  Expect.equals(11, result);
+}
+
+typedef PassUint8Struct1ByteBoolType = Bool Function(Uint8, Struct1ByteBool);
+
+// Global variables to be able to test inputs after callback returned.
+int passUint8Struct1ByteBool_a0 = 0;
+Struct1ByteBool passUint8Struct1ByteBool_a1 =
+    Pointer<Struct1ByteBool>.fromAddress(0).ref;
+
+// Result variable also global, so we can delete it after the callback.
+bool passUint8Struct1ByteBoolResult = false;
+
+bool passUint8Struct1ByteBoolCalculateResult() {
+  int result = 0;
+
+  result += passUint8Struct1ByteBool_a0;
+  result += passUint8Struct1ByteBool_a1.a0 ? 1 : 0;
+
+  passUint8Struct1ByteBoolResult = result % 2 != 0;
+
+  return result % 2 != 0;
+}
+
+/// Returning a bool.
+bool passUint8Struct1ByteBool(int a0, Struct1ByteBool a1) {
+  print("passUint8Struct1ByteBool(${a0}, ${a1})");
+
+  // In legacy mode, possibly return null.
+
+  // In both nnbd and legacy mode, possibly throw.
+  if (a0 == 42 || a0 == 84) {
+    print("throwing!");
+    throw Exception("PassUint8Struct1ByteBool throwing on purpose!");
+  }
+
+  passUint8Struct1ByteBool_a0 = a0;
+  passUint8Struct1ByteBool_a1 = a1;
+
+  final result = passUint8Struct1ByteBoolCalculateResult();
+
+  print("result = $result");
+
+  return result;
+}
+
+void passUint8Struct1ByteBoolAfterCallback() {
+  final result = passUint8Struct1ByteBoolCalculateResult();
+
+  print("after callback result = $result");
+
+  Expect.equals(1 % 2 != 0, result);
+}
+
 typedef ReturnStruct1ByteIntType = Struct1ByteInt Function(Int8);
 
 // Global variables to be able to test inputs after callback returned.
diff --git a/tests/ffi/function_callbacks_structs_by_value_test.dart b/tests/ffi/function_callbacks_structs_by_value_test.dart
index be78dc5..f14ce1f 100644
--- a/tests/ffi/function_callbacks_structs_by_value_test.dart
+++ b/tests/ffi/function_callbacks_structs_by_value_test.dart
@@ -11,8 +11,12 @@
 import "package:expect/expect.dart";
 import "package:ffi/ffi.dart";
 
+import 'dylib_utils.dart';
+
 // Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   for (int i = 0; i < 10; i++) {
diff --git a/tests/ffi/function_structs_by_value_generated_compounds.dart b/tests/ffi/function_structs_by_value_generated_compounds.dart
new file mode 100644
index 0000000..2f41b75
--- /dev/null
+++ b/tests/ffi/function_structs_by_value_generated_compounds.dart
@@ -0,0 +1,1259 @@
+// Copyright (c) 2021, 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.
+//
+// This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
+
+import 'dart:ffi';
+
+class Struct1ByteBool extends Struct {
+  @Bool()
+  external bool a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct1ByteInt extends Struct {
+  @Int8()
+  external int a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct3BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint8()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct3BytesInt2ByteAligned extends Struct {
+  @Int16()
+  external int a0;
+
+  @Int8()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct4BytesHomogeneousInt16 extends Struct {
+  @Int16()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct4BytesFloat extends Struct {
+  @Float()
+  external double a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct7BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint8()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  @Uint8()
+  external int a3;
+
+  @Uint8()
+  external int a4;
+
+  @Uint8()
+  external int a5;
+
+  @Uint8()
+  external int a6;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
+}
+
+class Struct7BytesInt4ByteAligned extends Struct {
+  @Int32()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesInt extends Struct {
+  @Int16()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  @Int32()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesHomogeneousFloat extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesFloat extends Struct {
+  @Double()
+  external double a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct8BytesMixed extends Struct {
+  @Float()
+  external double a0;
+
+  @Int16()
+  external int a1;
+
+  @Int16()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct9BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint8()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  @Uint8()
+  external int a3;
+
+  @Uint8()
+  external int a4;
+
+  @Uint8()
+  external int a5;
+
+  @Uint8()
+  external int a6;
+
+  @Uint8()
+  external int a7;
+
+  @Uint8()
+  external int a8;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})";
+}
+
+class Struct9BytesInt4Or8ByteAligned extends Struct {
+  @Int64()
+  external int a0;
+
+  @Int8()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct10BytesHomogeneousBool extends Struct {
+  @Bool()
+  external bool a0;
+
+  @Bool()
+  external bool a1;
+
+  @Bool()
+  external bool a2;
+
+  @Bool()
+  external bool a3;
+
+  @Bool()
+  external bool a4;
+
+  @Bool()
+  external bool a5;
+
+  @Bool()
+  external bool a6;
+
+  @Bool()
+  external bool a7;
+
+  @Bool()
+  external bool a8;
+
+  @Bool()
+  external bool a9;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})";
+}
+
+class Struct12BytesHomogeneousFloat extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  @Float()
+  external double a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct16BytesHomogeneousFloat extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  @Float()
+  external double a2;
+
+  @Float()
+  external double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct16BytesMixed extends Struct {
+  @Double()
+  external double a0;
+
+  @Int64()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct16BytesMixed2 extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  @Float()
+  external double a2;
+
+  @Int32()
+  external int a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct17BytesInt extends Struct {
+  @Int64()
+  external int a0;
+
+  @Int64()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct19BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint8()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  @Uint8()
+  external int a3;
+
+  @Uint8()
+  external int a4;
+
+  @Uint8()
+  external int a5;
+
+  @Uint8()
+  external int a6;
+
+  @Uint8()
+  external int a7;
+
+  @Uint8()
+  external int a8;
+
+  @Uint8()
+  external int a9;
+
+  @Uint8()
+  external int a10;
+
+  @Uint8()
+  external int a11;
+
+  @Uint8()
+  external int a12;
+
+  @Uint8()
+  external int a13;
+
+  @Uint8()
+  external int a14;
+
+  @Uint8()
+  external int a15;
+
+  @Uint8()
+  external int a16;
+
+  @Uint8()
+  external int a17;
+
+  @Uint8()
+  external int a18;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18})";
+}
+
+class Struct20BytesHomogeneousInt32 extends Struct {
+  @Int32()
+  external int a0;
+
+  @Int32()
+  external int a1;
+
+  @Int32()
+  external int a2;
+
+  @Int32()
+  external int a3;
+
+  @Int32()
+  external int a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct20BytesHomogeneousFloat extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  @Float()
+  external double a2;
+
+  @Float()
+  external double a3;
+
+  @Float()
+  external double a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct32BytesHomogeneousDouble extends Struct {
+  @Double()
+  external double a0;
+
+  @Double()
+  external double a1;
+
+  @Double()
+  external double a2;
+
+  @Double()
+  external double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct40BytesHomogeneousDouble extends Struct {
+  @Double()
+  external double a0;
+
+  @Double()
+  external double a1;
+
+  @Double()
+  external double a2;
+
+  @Double()
+  external double a3;
+
+  @Double()
+  external double a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct1024BytesHomogeneousUint64 extends Struct {
+  @Uint64()
+  external int a0;
+
+  @Uint64()
+  external int a1;
+
+  @Uint64()
+  external int a2;
+
+  @Uint64()
+  external int a3;
+
+  @Uint64()
+  external int a4;
+
+  @Uint64()
+  external int a5;
+
+  @Uint64()
+  external int a6;
+
+  @Uint64()
+  external int a7;
+
+  @Uint64()
+  external int a8;
+
+  @Uint64()
+  external int a9;
+
+  @Uint64()
+  external int a10;
+
+  @Uint64()
+  external int a11;
+
+  @Uint64()
+  external int a12;
+
+  @Uint64()
+  external int a13;
+
+  @Uint64()
+  external int a14;
+
+  @Uint64()
+  external int a15;
+
+  @Uint64()
+  external int a16;
+
+  @Uint64()
+  external int a17;
+
+  @Uint64()
+  external int a18;
+
+  @Uint64()
+  external int a19;
+
+  @Uint64()
+  external int a20;
+
+  @Uint64()
+  external int a21;
+
+  @Uint64()
+  external int a22;
+
+  @Uint64()
+  external int a23;
+
+  @Uint64()
+  external int a24;
+
+  @Uint64()
+  external int a25;
+
+  @Uint64()
+  external int a26;
+
+  @Uint64()
+  external int a27;
+
+  @Uint64()
+  external int a28;
+
+  @Uint64()
+  external int a29;
+
+  @Uint64()
+  external int a30;
+
+  @Uint64()
+  external int a31;
+
+  @Uint64()
+  external int a32;
+
+  @Uint64()
+  external int a33;
+
+  @Uint64()
+  external int a34;
+
+  @Uint64()
+  external int a35;
+
+  @Uint64()
+  external int a36;
+
+  @Uint64()
+  external int a37;
+
+  @Uint64()
+  external int a38;
+
+  @Uint64()
+  external int a39;
+
+  @Uint64()
+  external int a40;
+
+  @Uint64()
+  external int a41;
+
+  @Uint64()
+  external int a42;
+
+  @Uint64()
+  external int a43;
+
+  @Uint64()
+  external int a44;
+
+  @Uint64()
+  external int a45;
+
+  @Uint64()
+  external int a46;
+
+  @Uint64()
+  external int a47;
+
+  @Uint64()
+  external int a48;
+
+  @Uint64()
+  external int a49;
+
+  @Uint64()
+  external int a50;
+
+  @Uint64()
+  external int a51;
+
+  @Uint64()
+  external int a52;
+
+  @Uint64()
+  external int a53;
+
+  @Uint64()
+  external int a54;
+
+  @Uint64()
+  external int a55;
+
+  @Uint64()
+  external int a56;
+
+  @Uint64()
+  external int a57;
+
+  @Uint64()
+  external int a58;
+
+  @Uint64()
+  external int a59;
+
+  @Uint64()
+  external int a60;
+
+  @Uint64()
+  external int a61;
+
+  @Uint64()
+  external int a62;
+
+  @Uint64()
+  external int a63;
+
+  @Uint64()
+  external int a64;
+
+  @Uint64()
+  external int a65;
+
+  @Uint64()
+  external int a66;
+
+  @Uint64()
+  external int a67;
+
+  @Uint64()
+  external int a68;
+
+  @Uint64()
+  external int a69;
+
+  @Uint64()
+  external int a70;
+
+  @Uint64()
+  external int a71;
+
+  @Uint64()
+  external int a72;
+
+  @Uint64()
+  external int a73;
+
+  @Uint64()
+  external int a74;
+
+  @Uint64()
+  external int a75;
+
+  @Uint64()
+  external int a76;
+
+  @Uint64()
+  external int a77;
+
+  @Uint64()
+  external int a78;
+
+  @Uint64()
+  external int a79;
+
+  @Uint64()
+  external int a80;
+
+  @Uint64()
+  external int a81;
+
+  @Uint64()
+  external int a82;
+
+  @Uint64()
+  external int a83;
+
+  @Uint64()
+  external int a84;
+
+  @Uint64()
+  external int a85;
+
+  @Uint64()
+  external int a86;
+
+  @Uint64()
+  external int a87;
+
+  @Uint64()
+  external int a88;
+
+  @Uint64()
+  external int a89;
+
+  @Uint64()
+  external int a90;
+
+  @Uint64()
+  external int a91;
+
+  @Uint64()
+  external int a92;
+
+  @Uint64()
+  external int a93;
+
+  @Uint64()
+  external int a94;
+
+  @Uint64()
+  external int a95;
+
+  @Uint64()
+  external int a96;
+
+  @Uint64()
+  external int a97;
+
+  @Uint64()
+  external int a98;
+
+  @Uint64()
+  external int a99;
+
+  @Uint64()
+  external int a100;
+
+  @Uint64()
+  external int a101;
+
+  @Uint64()
+  external int a102;
+
+  @Uint64()
+  external int a103;
+
+  @Uint64()
+  external int a104;
+
+  @Uint64()
+  external int a105;
+
+  @Uint64()
+  external int a106;
+
+  @Uint64()
+  external int a107;
+
+  @Uint64()
+  external int a108;
+
+  @Uint64()
+  external int a109;
+
+  @Uint64()
+  external int a110;
+
+  @Uint64()
+  external int a111;
+
+  @Uint64()
+  external int a112;
+
+  @Uint64()
+  external int a113;
+
+  @Uint64()
+  external int a114;
+
+  @Uint64()
+  external int a115;
+
+  @Uint64()
+  external int a116;
+
+  @Uint64()
+  external int a117;
+
+  @Uint64()
+  external int a118;
+
+  @Uint64()
+  external int a119;
+
+  @Uint64()
+  external int a120;
+
+  @Uint64()
+  external int a121;
+
+  @Uint64()
+  external int a122;
+
+  @Uint64()
+  external int a123;
+
+  @Uint64()
+  external int a124;
+
+  @Uint64()
+  external int a125;
+
+  @Uint64()
+  external int a126;
+
+  @Uint64()
+  external int a127;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18}, ${a19}, ${a20}, ${a21}, ${a22}, ${a23}, ${a24}, ${a25}, ${a26}, ${a27}, ${a28}, ${a29}, ${a30}, ${a31}, ${a32}, ${a33}, ${a34}, ${a35}, ${a36}, ${a37}, ${a38}, ${a39}, ${a40}, ${a41}, ${a42}, ${a43}, ${a44}, ${a45}, ${a46}, ${a47}, ${a48}, ${a49}, ${a50}, ${a51}, ${a52}, ${a53}, ${a54}, ${a55}, ${a56}, ${a57}, ${a58}, ${a59}, ${a60}, ${a61}, ${a62}, ${a63}, ${a64}, ${a65}, ${a66}, ${a67}, ${a68}, ${a69}, ${a70}, ${a71}, ${a72}, ${a73}, ${a74}, ${a75}, ${a76}, ${a77}, ${a78}, ${a79}, ${a80}, ${a81}, ${a82}, ${a83}, ${a84}, ${a85}, ${a86}, ${a87}, ${a88}, ${a89}, ${a90}, ${a91}, ${a92}, ${a93}, ${a94}, ${a95}, ${a96}, ${a97}, ${a98}, ${a99}, ${a100}, ${a101}, ${a102}, ${a103}, ${a104}, ${a105}, ${a106}, ${a107}, ${a108}, ${a109}, ${a110}, ${a111}, ${a112}, ${a113}, ${a114}, ${a115}, ${a116}, ${a117}, ${a118}, ${a119}, ${a120}, ${a121}, ${a122}, ${a123}, ${a124}, ${a125}, ${a126}, ${a127})";
+}
+
+class StructAlignmentInt16 extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class StructAlignmentInt32 extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int32()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class StructAlignmentInt64 extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int64()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesNestedInt extends Struct {
+  external Struct4BytesHomogeneousInt16 a0;
+
+  external Struct4BytesHomogeneousInt16 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedFloat extends Struct {
+  external Struct4BytesFloat a0;
+
+  external Struct4BytesFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedFloat2 extends Struct {
+  external Struct4BytesFloat a0;
+
+  @Float()
+  external double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedMixed extends Struct {
+  external Struct4BytesHomogeneousInt16 a0;
+
+  external Struct4BytesFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct16BytesNestedInt extends Struct {
+  external Struct8BytesNestedInt a0;
+
+  external Struct8BytesNestedInt a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct32BytesNestedInt extends Struct {
+  external Struct16BytesNestedInt a0;
+
+  external Struct16BytesNestedInt a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt16 extends Struct {
+  external StructAlignmentInt16 a0;
+
+  external StructAlignmentInt16 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt32 extends Struct {
+  external StructAlignmentInt32 a0;
+
+  external StructAlignmentInt32 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt64 extends Struct {
+  external StructAlignmentInt64 a0;
+
+  external StructAlignmentInt64 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIrregularBig extends Struct {
+  @Uint16()
+  external int a0;
+
+  external Struct8BytesNestedMixed a1;
+
+  @Uint16()
+  external int a2;
+
+  external Struct8BytesNestedFloat2 a3;
+
+  @Uint16()
+  external int a4;
+
+  external Struct8BytesNestedFloat a5;
+
+  @Uint16()
+  external int a6;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
+}
+
+class StructNestedIrregularBigger extends Struct {
+  external StructNestedIrregularBig a0;
+
+  external Struct8BytesNestedMixed a1;
+
+  @Float()
+  external double a2;
+
+  @Double()
+  external double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class StructNestedIrregularEvenBigger extends Struct {
+  @Uint64()
+  external int a0;
+
+  external StructNestedIrregularBigger a1;
+
+  external StructNestedIrregularBigger a2;
+
+  @Double()
+  external double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct8BytesInlineArrayInt extends Struct {
+  @Array(8)
+  external Array<Uint8> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 8; i0 += 1) a0[i0]]})";
+}
+
+class Struct10BytesInlineArrayBool extends Struct {
+  @Array(10)
+  external Array<Bool> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 10; i0 += 1) a0[i0]]})";
+}
+
+class StructInlineArrayIrregular extends Struct {
+  @Array(2)
+  external Array<Struct3BytesInt2ByteAligned> a0;
+
+  @Uint8()
+  external int a1;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]}, ${a1})";
+}
+
+class StructInlineArray100Bytes extends Struct {
+  @Array(100)
+  external Array<Uint8> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 100; i0 += 1) a0[i0]]})";
+}
+
+class StructInlineArrayBig extends Struct {
+  @Uint32()
+  external int a0;
+
+  @Uint32()
+  external int a1;
+
+  @Array(4000)
+  external Array<Uint8> a2;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${[for (var i0 = 0; i0 < 4000; i0 += 1) a2[i0]]})";
+}
+
+class StructStruct16BytesHomogeneousFloat2 extends Struct {
+  external Struct4BytesFloat a0;
+
+  @Array(2)
+  external Array<Struct4BytesFloat> a1;
+
+  @Float()
+  external double a2;
+
+  String toString() =>
+      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
+}
+
+class StructStruct32BytesHomogeneousDouble2 extends Struct {
+  external Struct8BytesFloat a0;
+
+  @Array(2)
+  external Array<Struct8BytesFloat> a1;
+
+  @Double()
+  external double a2;
+
+  String toString() =>
+      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
+}
+
+class StructStruct16BytesMixed3 extends Struct {
+  external Struct4BytesFloat a0;
+
+  @Array(1)
+  external Array<Struct8BytesMixed> a1;
+
+  @Array(2)
+  external Array<Int16> a2;
+
+  String toString() => "(${a0}, ${[
+        for (var i0 = 0; i0 < 1; i0 += 1) a1[i0]
+      ]}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a2[i0]]})";
+}
+
+class Struct8BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2, 2)
+  external Array<Array<Array<Uint8>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [for (var i2 = 0; i2 < 2; i2 += 1) a0[i0][i1][i2]]
+          ]
+      ]})";
+}
+
+class Struct32BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2, 2, 2, 2)
+  external Array<Array<Array<Array<Array<Uint8>>>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [
+                for (var i2 = 0; i2 < 2; i2 += 1)
+                  [
+                    for (var i3 = 0; i3 < 2; i3 += 1)
+                      [for (var i4 = 0; i4 < 2; i4 += 1) a0[i0][i1][i2][i3][i4]]
+                  ]
+              ]
+          ]
+      ]})";
+}
+
+class Struct64BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array.multi([2, 2, 2, 2, 2, 2])
+  external Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [
+                for (var i2 = 0; i2 < 2; i2 += 1)
+                  [
+                    for (var i3 = 0; i3 < 2; i3 += 1)
+                      [
+                        for (var i4 = 0; i4 < 2; i4 += 1)
+                          [
+                            for (var i5 = 0; i5 < 2; i5 += 1)
+                              a0[i0][i1][i2][i3][i4][i5]
+                          ]
+                      ]
+                  ]
+              ]
+          ]
+      ]})";
+}
+
+class Struct4BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2)
+  external Array<Array<Struct1ByteInt>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [for (var i1 = 0; i1 < 2; i1 += 1) a0[i0][i1]]
+      ]})";
+}
+
+@Packed(1)
+class Struct3BytesPackedInt extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+@Packed(1)
+class Struct3BytesPackedIntMembersAligned extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+@Packed(1)
+class Struct5BytesPackedMixed extends Struct {
+  @Float()
+  external double a0;
+
+  @Uint8()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedAlignmentStruct5BytesPackedMixed extends Struct {
+  @Uint8()
+  external int a0;
+
+  external Struct5BytesPackedMixed a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct6BytesInlineArrayInt extends Struct {
+  @Array(2)
+  external Array<Struct3BytesPackedIntMembersAligned> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]})";
+}
+
+@Packed(1)
+class Struct8BytesPackedInt extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint32()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  @Uint8()
+  external int a3;
+
+  @Uint8()
+  external int a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+@Packed(1)
+class Struct9BytesPackedMixed extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Double()
+  external double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct15BytesInlineArrayMixed extends Struct {
+  @Array(3)
+  external Array<Struct5BytesPackedMixed> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 3; i0 += 1) a0[i0]]})";
+}
+
+class Union4BytesMixed extends Union {
+  @Uint32()
+  external int a0;
+
+  @Float()
+  external double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union8BytesNestedFloat extends Union {
+  @Double()
+  external double a0;
+
+  external Struct8BytesHomogeneousFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union9BytesNestedInt extends Union {
+  external Struct8BytesInt a0;
+
+  external Struct9BytesHomogeneousUint8 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union16BytesNestedInlineArrayFloat extends Union {
+  @Array(4)
+  external Array<Float> a0;
+
+  external Struct16BytesHomogeneousFloat a1;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 4; i0 += 1) a0[i0]]}, ${a1})";
+}
+
+class Union16BytesNestedFloat extends Union {
+  external Struct8BytesHomogeneousFloat a0;
+
+  external Struct12BytesHomogeneousFloat a1;
+
+  external Struct16BytesHomogeneousFloat a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
diff --git a/tests/ffi/function_structs_by_value_generated_leaf_test.dart b/tests/ffi/function_structs_by_value_generated_leaf_test.dart
new file mode 100644
index 0000000..2067463
--- /dev/null
+++ b/tests/ffi/function_structs_by_value_generated_leaf_test.dart
@@ -0,0 +1,7849 @@
+// Copyright (c) 2021, 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.
+//
+// This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
+//
+// SharedObjects=ffi_test_functions
+// VMOptions=
+// VMOptions=--deterministic --optimization-counter-threshold=5
+// VMOptions=--use-slow-path
+// VMOptions=--use-slow-path --stacktrace-every=100
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+import 'dylib_utils.dart';
+
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+void main() {
+  for (int i = 0; i < 10; ++i) {
+    testPassStruct1ByteIntx10Leaf();
+    testPassStruct3BytesHomogeneousUint8x10Leaf();
+    testPassStruct3BytesInt2ByteAlignedx10Leaf();
+    testPassStruct4BytesHomogeneousInt16x10Leaf();
+    testPassStruct7BytesHomogeneousUint8x10Leaf();
+    testPassStruct7BytesInt4ByteAlignedx10Leaf();
+    testPassStruct8BytesIntx10Leaf();
+    testPassStruct8BytesHomogeneousFloatx10Leaf();
+    testPassStruct8BytesMixedx10Leaf();
+    testPassStruct9BytesHomogeneousUint8x10Leaf();
+    testPassStruct9BytesInt4Or8ByteAlignedx10Leaf();
+    testPassStruct12BytesHomogeneousFloatx6Leaf();
+    testPassStruct16BytesHomogeneousFloatx5Leaf();
+    testPassStruct16BytesMixedx10Leaf();
+    testPassStruct16BytesMixed2x10Leaf();
+    testPassStruct17BytesIntx10Leaf();
+    testPassStruct19BytesHomogeneousUint8x10Leaf();
+    testPassStruct20BytesHomogeneousInt32x10Leaf();
+    testPassStruct20BytesHomogeneousFloatLeaf();
+    testPassStruct32BytesHomogeneousDoublex5Leaf();
+    testPassStruct40BytesHomogeneousDoubleLeaf();
+    testPassStruct1024BytesHomogeneousUint64Leaf();
+    testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf();
+    testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf();
+    testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf();
+    testPassDoublex6Struct16BytesMixedx4Int32Leaf();
+    testPassInt32x4Struct16BytesMixedx4DoubleLeaf();
+    testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf();
+    testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf();
+    testPassStructAlignmentInt16Leaf();
+    testPassStructAlignmentInt32Leaf();
+    testPassStructAlignmentInt64Leaf();
+    testPassStruct8BytesNestedIntx10Leaf();
+    testPassStruct8BytesNestedFloatx10Leaf();
+    testPassStruct8BytesNestedFloat2x10Leaf();
+    testPassStruct8BytesNestedMixedx10Leaf();
+    testPassStruct16BytesNestedIntx2Leaf();
+    testPassStruct32BytesNestedIntx2Leaf();
+    testPassStructNestedIntStructAlignmentInt16Leaf();
+    testPassStructNestedIntStructAlignmentInt32Leaf();
+    testPassStructNestedIntStructAlignmentInt64Leaf();
+    testPassStructNestedIrregularEvenBiggerx4Leaf();
+    testPassStruct8BytesInlineArrayIntx4Leaf();
+    testPassStructInlineArrayIrregularx4Leaf();
+    testPassStructInlineArray100BytesLeaf();
+    testPassStructStruct16BytesHomogeneousFloat2x5Leaf();
+    testPassStructStruct32BytesHomogeneousDouble2x5Leaf();
+    testPassStructStruct16BytesMixed3x10Leaf();
+    testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf();
+    testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf();
+    testPassStruct3BytesPackedIntx10Leaf();
+    testPassStruct8BytesPackedIntx10Leaf();
+    testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf();
+    testPassStruct5BytesPackedMixedLeaf();
+    testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf();
+    testPassStruct6BytesInlineArrayIntLeaf();
+    testPassStruct15BytesInlineArrayMixedLeaf();
+    testPassUnion4BytesMixedx10Leaf();
+    testPassUnion8BytesNestedFloatx10Leaf();
+    testPassUnion9BytesNestedIntx10Leaf();
+    testPassUnion16BytesNestedInlineArrayFloatx10Leaf();
+    testPassUnion16BytesNestedFloatx10Leaf();
+    testPassUint8Boolx9Struct10BytesHomogeneousBoolBoolLeaf();
+    testPassUint8Boolx9Struct10BytesInlineArrayBoolBoolLeaf();
+    testPassUint8Struct1ByteBoolLeaf();
+    testReturnStruct1ByteIntLeaf();
+    testReturnStruct3BytesHomogeneousUint8Leaf();
+    testReturnStruct3BytesInt2ByteAlignedLeaf();
+    testReturnStruct4BytesHomogeneousInt16Leaf();
+    testReturnStruct7BytesHomogeneousUint8Leaf();
+    testReturnStruct7BytesInt4ByteAlignedLeaf();
+    testReturnStruct8BytesIntLeaf();
+    testReturnStruct8BytesHomogeneousFloatLeaf();
+    testReturnStruct8BytesMixedLeaf();
+    testReturnStruct9BytesHomogeneousUint8Leaf();
+    testReturnStruct9BytesInt4Or8ByteAlignedLeaf();
+    testReturnStruct12BytesHomogeneousFloatLeaf();
+    testReturnStruct16BytesHomogeneousFloatLeaf();
+    testReturnStruct16BytesMixedLeaf();
+    testReturnStruct16BytesMixed2Leaf();
+    testReturnStruct17BytesIntLeaf();
+    testReturnStruct19BytesHomogeneousUint8Leaf();
+    testReturnStruct20BytesHomogeneousInt32Leaf();
+    testReturnStruct20BytesHomogeneousFloatLeaf();
+    testReturnStruct32BytesHomogeneousDoubleLeaf();
+    testReturnStruct40BytesHomogeneousDoubleLeaf();
+    testReturnStruct1024BytesHomogeneousUint64Leaf();
+    testReturnStruct3BytesPackedIntLeaf();
+    testReturnStruct8BytesPackedIntLeaf();
+    testReturnStruct9BytesPackedMixedLeaf();
+    testReturnUnion4BytesMixedLeaf();
+    testReturnUnion8BytesNestedFloatLeaf();
+    testReturnUnion9BytesNestedIntLeaf();
+    testReturnUnion16BytesNestedFloatLeaf();
+    testReturnStructArgumentStruct1ByteIntLeaf();
+    testReturnStructArgumentInt32x8Struct1ByteIntLeaf();
+    testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf();
+    testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf();
+    testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf();
+    testReturnStructArgumentStruct8BytesInlineArrayIntLeaf();
+    testReturnStructArgumentStructStruct16BytesHomogeneousLeaf();
+    testReturnStructArgumentStructStruct32BytesHomogeneousLeaf();
+    testReturnStructArgumentStructStruct16BytesMixed3Leaf();
+    testReturnStructAlignmentInt16Leaf();
+    testReturnStructAlignmentInt32Leaf();
+    testReturnStructAlignmentInt64Leaf();
+    testReturnStruct8BytesNestedIntLeaf();
+    testReturnStruct8BytesNestedFloatLeaf();
+    testReturnStruct8BytesNestedFloat2Leaf();
+    testReturnStruct8BytesNestedMixedLeaf();
+    testReturnStruct16BytesNestedIntLeaf();
+    testReturnStruct32BytesNestedIntLeaf();
+    testReturnStructNestedIntStructAlignmentInt16Leaf();
+    testReturnStructNestedIntStructAlignmentInt32Leaf();
+    testReturnStructNestedIntStructAlignmentInt64Leaf();
+    testReturnStructNestedIrregularEvenBiggerLeaf();
+  }
+}
+
+final passStruct1ByteIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt),
+    int Function(
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt)>("PassStruct1ByteIntx10", isLeaf: true);
+
+/// Smallest struct with data.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct1ByteIntx10Leaf() {
+  final a0Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a1.a0 = 2;
+  a2.a0 = -3;
+  a3.a0 = 4;
+  a4.a0 = -5;
+  a5.a0 = 6;
+  a6.a0 = -7;
+  a7.a0 = 8;
+  a8.a0 = -9;
+  a9.a0 = 10;
+
+  final result =
+      passStruct1ByteIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(5, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct3BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8),
+        int Function(
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8)>(
+    "PassStruct3BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Not a multiple of word size, not a power of two.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct3BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a1.a0 = 4;
+  a1.a1 = 5;
+  a1.a2 = 6;
+  a2.a0 = 7;
+  a2.a1 = 8;
+  a2.a2 = 9;
+  a3.a0 = 10;
+  a3.a1 = 11;
+  a3.a2 = 12;
+  a4.a0 = 13;
+  a4.a1 = 14;
+  a4.a2 = 15;
+  a5.a0 = 16;
+  a5.a1 = 17;
+  a5.a2 = 18;
+  a6.a0 = 19;
+  a6.a1 = 20;
+  a6.a2 = 21;
+  a7.a0 = 22;
+  a7.a1 = 23;
+  a7.a2 = 24;
+  a8.a0 = 25;
+  a8.a1 = 26;
+  a8.a2 = 27;
+  a9.a0 = 28;
+  a9.a1 = 29;
+  a9.a2 = 30;
+
+  final result = passStruct3BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(465, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct3BytesInt2ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned),
+        int Function(
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned)>("PassStruct3BytesInt2ByteAlignedx10",
+    isLeaf: true);
+
+/// Not a multiple of word size, not a power of two.
+/// With alignment rules taken into account size is 4 bytes.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct3BytesInt2ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct3BytesInt2ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct4BytesHomogeneousInt16x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16),
+        int Function(
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16)>(
+    "PassStruct4BytesHomogeneousInt16x10",
+    isLeaf: true);
+
+/// Exactly word size on 32-bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct4BytesHomogeneousInt16x10Leaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct4BytesHomogeneousInt16x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct7BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8),
+        int Function(
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8)>(
+    "PassStruct7BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Sub word size on 64 bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct7BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a1.a0 = 8;
+  a1.a1 = 9;
+  a1.a2 = 10;
+  a1.a3 = 11;
+  a1.a4 = 12;
+  a1.a5 = 13;
+  a1.a6 = 14;
+  a2.a0 = 15;
+  a2.a1 = 16;
+  a2.a2 = 17;
+  a2.a3 = 18;
+  a2.a4 = 19;
+  a2.a5 = 20;
+  a2.a6 = 21;
+  a3.a0 = 22;
+  a3.a1 = 23;
+  a3.a2 = 24;
+  a3.a3 = 25;
+  a3.a4 = 26;
+  a3.a5 = 27;
+  a3.a6 = 28;
+  a4.a0 = 29;
+  a4.a1 = 30;
+  a4.a2 = 31;
+  a4.a3 = 32;
+  a4.a4 = 33;
+  a4.a5 = 34;
+  a4.a6 = 35;
+  a5.a0 = 36;
+  a5.a1 = 37;
+  a5.a2 = 38;
+  a5.a3 = 39;
+  a5.a4 = 40;
+  a5.a5 = 41;
+  a5.a6 = 42;
+  a6.a0 = 43;
+  a6.a1 = 44;
+  a6.a2 = 45;
+  a6.a3 = 46;
+  a6.a4 = 47;
+  a6.a5 = 48;
+  a6.a6 = 49;
+  a7.a0 = 50;
+  a7.a1 = 51;
+  a7.a2 = 52;
+  a7.a3 = 53;
+  a7.a4 = 54;
+  a7.a5 = 55;
+  a7.a6 = 56;
+  a8.a0 = 57;
+  a8.a1 = 58;
+  a8.a2 = 59;
+  a8.a3 = 60;
+  a8.a4 = 61;
+  a8.a5 = 62;
+  a8.a6 = 63;
+  a9.a0 = 64;
+  a9.a1 = 65;
+  a9.a2 = 66;
+  a9.a3 = 67;
+  a9.a4 = 68;
+  a9.a5 = 69;
+  a9.a6 = 70;
+
+  final result = passStruct7BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(2485, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct7BytesInt4ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned),
+        int Function(
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned)>("PassStruct7BytesInt4ByteAlignedx10",
+    isLeaf: true);
+
+/// Sub word size on 64 bit architectures.
+/// With alignment rules taken into account size is 8 bytes.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct7BytesInt4ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result = passStruct7BytesInt4ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt),
+    int Function(
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt)>("PassStruct8BytesIntx10", isLeaf: true);
+
+/// Exactly word size struct on 64bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct8BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesHomogeneousFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat),
+        double Function(
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat)>(
+    "PassStruct8BytesHomogeneousFloatx10",
+    isLeaf: true);
+
+/// Arguments passed in FP registers as long as they fit.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesHomogeneousFloatx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a1.a0 = -3.0;
+  a1.a1 = 4.0;
+  a2.a0 = -5.0;
+  a2.a1 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a4.a0 = -9.0;
+  a4.a1 = 10.0;
+  a5.a0 = -11.0;
+  a5.a1 = 12.0;
+  a6.a0 = -13.0;
+  a6.a1 = 14.0;
+  a7.a0 = -15.0;
+  a7.a1 = 16.0;
+  a8.a0 = -17.0;
+  a8.a1 = 18.0;
+  a9.a0 = -19.0;
+  a9.a1 = 20.0;
+
+  final result = passStruct8BytesHomogeneousFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Float Function(
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed),
+    double Function(
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed)>("PassStruct8BytesMixedx10", isLeaf: true);
+
+/// On x64, arguments go in int registers because it is not only float.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4.0;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7.0;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10.0;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13.0;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16.0;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19.0;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22.0;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25.0;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28.0;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct8BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8),
+        int Function(
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8)>(
+    "PassStruct9BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Argument is a single byte over a multiple of word size.
+/// 10 struct arguments will exhaust available registers.
+/// Struct only has 1-byte aligned fields to test struct alignment itself.
+/// Tests upper bytes in the integer registers that are partly filled.
+/// Tests stack alignment of non word size stack arguments.
+void testPassStruct9BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a1.a0 = 10;
+  a1.a1 = 11;
+  a1.a2 = 12;
+  a1.a3 = 13;
+  a1.a4 = 14;
+  a1.a5 = 15;
+  a1.a6 = 16;
+  a1.a7 = 17;
+  a1.a8 = 18;
+  a2.a0 = 19;
+  a2.a1 = 20;
+  a2.a2 = 21;
+  a2.a3 = 22;
+  a2.a4 = 23;
+  a2.a5 = 24;
+  a2.a6 = 25;
+  a2.a7 = 26;
+  a2.a8 = 27;
+  a3.a0 = 28;
+  a3.a1 = 29;
+  a3.a2 = 30;
+  a3.a3 = 31;
+  a3.a4 = 32;
+  a3.a5 = 33;
+  a3.a6 = 34;
+  a3.a7 = 35;
+  a3.a8 = 36;
+  a4.a0 = 37;
+  a4.a1 = 38;
+  a4.a2 = 39;
+  a4.a3 = 40;
+  a4.a4 = 41;
+  a4.a5 = 42;
+  a4.a6 = 43;
+  a4.a7 = 44;
+  a4.a8 = 45;
+  a5.a0 = 46;
+  a5.a1 = 47;
+  a5.a2 = 48;
+  a5.a3 = 49;
+  a5.a4 = 50;
+  a5.a5 = 51;
+  a5.a6 = 52;
+  a5.a7 = 53;
+  a5.a8 = 54;
+  a6.a0 = 55;
+  a6.a1 = 56;
+  a6.a2 = 57;
+  a6.a3 = 58;
+  a6.a4 = 59;
+  a6.a5 = 60;
+  a6.a6 = 61;
+  a6.a7 = 62;
+  a6.a8 = 63;
+  a7.a0 = 64;
+  a7.a1 = 65;
+  a7.a2 = 66;
+  a7.a3 = 67;
+  a7.a4 = 68;
+  a7.a5 = 69;
+  a7.a6 = 70;
+  a7.a7 = 71;
+  a7.a8 = 72;
+  a8.a0 = 73;
+  a8.a1 = 74;
+  a8.a2 = 75;
+  a8.a3 = 76;
+  a8.a4 = 77;
+  a8.a5 = 78;
+  a8.a6 = 79;
+  a8.a7 = 80;
+  a8.a8 = 81;
+  a9.a0 = 82;
+  a9.a1 = 83;
+  a9.a2 = 84;
+  a9.a3 = 85;
+  a9.a4 = 86;
+  a9.a5 = 87;
+  a9.a6 = 88;
+  a9.a7 = 89;
+  a9.a8 = 90;
+
+  final result = passStruct9BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(4095, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesInt4Or8ByteAlignedx10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned),
+            int Function(
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned)>(
+        "PassStruct9BytesInt4Or8ByteAlignedx10",
+        isLeaf: true);
+
+/// Argument is a single byte over a multiple of word size.
+/// With alignment rules taken into account size is 12 or 16 bytes.
+/// 10 struct arguments will exhaust available registers.
+///
+void testPassStruct9BytesInt4Or8ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct9BytesInt4Or8ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct12BytesHomogeneousFloatx6Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat),
+        double Function(
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat)>(
+    "PassStruct12BytesHomogeneousFloatx6",
+    isLeaf: true);
+
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// Struct arguments will exhaust available registers, and leave some empty.
+/// The last argument is to test whether arguments are backfilled.
+void testPassStruct12BytesHomogeneousFloatx6Leaf() {
+  final a0Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a5 = a5Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a1.a0 = 4.0;
+  a1.a1 = -5.0;
+  a1.a2 = 6.0;
+  a2.a0 = -7.0;
+  a2.a1 = 8.0;
+  a2.a2 = -9.0;
+  a3.a0 = 10.0;
+  a3.a1 = -11.0;
+  a3.a2 = 12.0;
+  a4.a0 = -13.0;
+  a4.a1 = 14.0;
+  a4.a2 = -15.0;
+  a5.a0 = 16.0;
+  a5.a1 = -17.0;
+  a5.a2 = 18.0;
+
+  final result =
+      passStruct12BytesHomogeneousFloatx6Leaf(a0, a1, a2, a3, a4, a5);
+
+  print("result = $result");
+
+  Expect.approxEquals(9.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+}
+
+final passStruct16BytesHomogeneousFloatx5Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat),
+        double Function(
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat)>(
+    "PassStruct16BytesHomogeneousFloatx5",
+    isLeaf: true);
+
+/// On Linux x64 argument is transferred on stack because it is over 16 bytes.
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStruct16BytesHomogeneousFloatx5Leaf() {
+  final a0Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a4 = a4Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8.0;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12.0;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16.0;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20.0;
+
+  final result = passStruct16BytesHomogeneousFloatx5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStruct16BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed),
+    double Function(
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed)>("PassStruct16BytesMixedx10", isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 8 byte aligned.
+void testPassStruct16BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+  a1.a0 = -3.0;
+  a1.a1 = 4;
+  a2.a0 = -5.0;
+  a2.a1 = 6;
+  a3.a0 = -7.0;
+  a3.a1 = 8;
+  a4.a0 = -9.0;
+  a4.a1 = 10;
+  a5.a0 = -11.0;
+  a5.a1 = 12;
+  a6.a0 = -13.0;
+  a6.a1 = 14;
+  a7.a0 = -15.0;
+  a7.a1 = 16;
+  a8.a0 = -17.0;
+  a8.a1 = 18;
+  a9.a0 = -19.0;
+  a9.a1 = 20;
+
+  final result =
+      passStruct16BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct16BytesMixed2x10Leaf = ffiTestFunctions.lookupFunction<
+    Float Function(
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2),
+    double Function(
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2)>("PassStruct16BytesMixed2x10", isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 4 byte aligned.
+void testPassStruct16BytesMixed2x10Leaf() {
+  final a0Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20;
+  a5.a0 = -21.0;
+  a5.a1 = 22.0;
+  a5.a2 = -23.0;
+  a5.a3 = 24;
+  a6.a0 = -25.0;
+  a6.a1 = 26.0;
+  a6.a2 = -27.0;
+  a6.a3 = 28;
+  a7.a0 = -29.0;
+  a7.a1 = 30.0;
+  a7.a2 = -31.0;
+  a7.a3 = 32;
+  a8.a0 = -33.0;
+  a8.a1 = 34.0;
+  a8.a2 = -35.0;
+  a8.a3 = 36;
+  a9.a0 = -37.0;
+  a9.a1 = 38.0;
+  a9.a2 = -39.0;
+  a9.a3 = 40;
+
+  final result =
+      passStruct16BytesMixed2x10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(20.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct17BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt),
+    int Function(
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt)>("PassStruct17BytesIntx10", isLeaf: true);
+
+/// Arguments are passed as pointer to copy on arm64.
+/// Tests that the memory allocated for copies are rounded up to word size.
+void testPassStruct17BytesIntx10Leaf() {
+  final a0Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct17BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct19BytesHomogeneousUint8x10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8),
+            int Function(
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8)>(
+        "PassStruct19BytesHomogeneousUint8x10",
+        isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is extended to the right size.
+///
+void testPassStruct19BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a0.a9 = 10;
+  a0.a10 = 11;
+  a0.a11 = 12;
+  a0.a12 = 13;
+  a0.a13 = 14;
+  a0.a14 = 15;
+  a0.a15 = 16;
+  a0.a16 = 17;
+  a0.a17 = 18;
+  a0.a18 = 19;
+  a1.a0 = 20;
+  a1.a1 = 21;
+  a1.a2 = 22;
+  a1.a3 = 23;
+  a1.a4 = 24;
+  a1.a5 = 25;
+  a1.a6 = 26;
+  a1.a7 = 27;
+  a1.a8 = 28;
+  a1.a9 = 29;
+  a1.a10 = 30;
+  a1.a11 = 31;
+  a1.a12 = 32;
+  a1.a13 = 33;
+  a1.a14 = 34;
+  a1.a15 = 35;
+  a1.a16 = 36;
+  a1.a17 = 37;
+  a1.a18 = 38;
+  a2.a0 = 39;
+  a2.a1 = 40;
+  a2.a2 = 41;
+  a2.a3 = 42;
+  a2.a4 = 43;
+  a2.a5 = 44;
+  a2.a6 = 45;
+  a2.a7 = 46;
+  a2.a8 = 47;
+  a2.a9 = 48;
+  a2.a10 = 49;
+  a2.a11 = 50;
+  a2.a12 = 51;
+  a2.a13 = 52;
+  a2.a14 = 53;
+  a2.a15 = 54;
+  a2.a16 = 55;
+  a2.a17 = 56;
+  a2.a18 = 57;
+  a3.a0 = 58;
+  a3.a1 = 59;
+  a3.a2 = 60;
+  a3.a3 = 61;
+  a3.a4 = 62;
+  a3.a5 = 63;
+  a3.a6 = 64;
+  a3.a7 = 65;
+  a3.a8 = 66;
+  a3.a9 = 67;
+  a3.a10 = 68;
+  a3.a11 = 69;
+  a3.a12 = 70;
+  a3.a13 = 71;
+  a3.a14 = 72;
+  a3.a15 = 73;
+  a3.a16 = 74;
+  a3.a17 = 75;
+  a3.a18 = 76;
+  a4.a0 = 77;
+  a4.a1 = 78;
+  a4.a2 = 79;
+  a4.a3 = 80;
+  a4.a4 = 81;
+  a4.a5 = 82;
+  a4.a6 = 83;
+  a4.a7 = 84;
+  a4.a8 = 85;
+  a4.a9 = 86;
+  a4.a10 = 87;
+  a4.a11 = 88;
+  a4.a12 = 89;
+  a4.a13 = 90;
+  a4.a14 = 91;
+  a4.a15 = 92;
+  a4.a16 = 93;
+  a4.a17 = 94;
+  a4.a18 = 95;
+  a5.a0 = 96;
+  a5.a1 = 97;
+  a5.a2 = 98;
+  a5.a3 = 99;
+  a5.a4 = 100;
+  a5.a5 = 101;
+  a5.a6 = 102;
+  a5.a7 = 103;
+  a5.a8 = 104;
+  a5.a9 = 105;
+  a5.a10 = 106;
+  a5.a11 = 107;
+  a5.a12 = 108;
+  a5.a13 = 109;
+  a5.a14 = 110;
+  a5.a15 = 111;
+  a5.a16 = 112;
+  a5.a17 = 113;
+  a5.a18 = 114;
+  a6.a0 = 115;
+  a6.a1 = 116;
+  a6.a2 = 117;
+  a6.a3 = 118;
+  a6.a4 = 119;
+  a6.a5 = 120;
+  a6.a6 = 121;
+  a6.a7 = 122;
+  a6.a8 = 123;
+  a6.a9 = 124;
+  a6.a10 = 125;
+  a6.a11 = 126;
+  a6.a12 = 127;
+  a6.a13 = 128;
+  a6.a14 = 129;
+  a6.a15 = 130;
+  a6.a16 = 131;
+  a6.a17 = 132;
+  a6.a18 = 133;
+  a7.a0 = 134;
+  a7.a1 = 135;
+  a7.a2 = 136;
+  a7.a3 = 137;
+  a7.a4 = 138;
+  a7.a5 = 139;
+  a7.a6 = 140;
+  a7.a7 = 141;
+  a7.a8 = 142;
+  a7.a9 = 143;
+  a7.a10 = 144;
+  a7.a11 = 145;
+  a7.a12 = 146;
+  a7.a13 = 147;
+  a7.a14 = 148;
+  a7.a15 = 149;
+  a7.a16 = 150;
+  a7.a17 = 151;
+  a7.a18 = 152;
+  a8.a0 = 153;
+  a8.a1 = 154;
+  a8.a2 = 155;
+  a8.a3 = 156;
+  a8.a4 = 157;
+  a8.a5 = 158;
+  a8.a6 = 159;
+  a8.a7 = 160;
+  a8.a8 = 161;
+  a8.a9 = 162;
+  a8.a10 = 163;
+  a8.a11 = 164;
+  a8.a12 = 165;
+  a8.a13 = 166;
+  a8.a14 = 167;
+  a8.a15 = 168;
+  a8.a16 = 169;
+  a8.a17 = 170;
+  a8.a18 = 171;
+  a9.a0 = 172;
+  a9.a1 = 173;
+  a9.a2 = 174;
+  a9.a3 = 175;
+  a9.a4 = 176;
+  a9.a5 = 177;
+  a9.a6 = 178;
+  a9.a7 = 179;
+  a9.a8 = 180;
+  a9.a9 = 181;
+  a9.a10 = 182;
+  a9.a11 = 183;
+  a9.a12 = 184;
+  a9.a13 = 185;
+  a9.a14 = 186;
+  a9.a15 = 187;
+  a9.a16 = 188;
+  a9.a17 = 189;
+  a9.a18 = 190;
+
+  final result = passStruct19BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(18145, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct20BytesHomogeneousInt32x10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int32 Function(
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32),
+            int Function(
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32)>(
+        "PassStruct20BytesHomogeneousInt32x10",
+        isLeaf: true);
+
+/// Argument too big to go into integer registers on arm64.
+/// The arguments are passed as pointers to copies.
+/// The amount of arguments exhausts the number of integer registers, such that
+/// pointers to copies are also passed on the stack.
+void testPassStruct20BytesHomogeneousInt32x10Leaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a0.a3 = 4;
+  a0.a4 = -5;
+  a1.a0 = 6;
+  a1.a1 = -7;
+  a1.a2 = 8;
+  a1.a3 = -9;
+  a1.a4 = 10;
+  a2.a0 = -11;
+  a2.a1 = 12;
+  a2.a2 = -13;
+  a2.a3 = 14;
+  a2.a4 = -15;
+  a3.a0 = 16;
+  a3.a1 = -17;
+  a3.a2 = 18;
+  a3.a3 = -19;
+  a3.a4 = 20;
+  a4.a0 = -21;
+  a4.a1 = 22;
+  a4.a2 = -23;
+  a4.a3 = 24;
+  a4.a4 = -25;
+  a5.a0 = 26;
+  a5.a1 = -27;
+  a5.a2 = 28;
+  a5.a3 = -29;
+  a5.a4 = 30;
+  a6.a0 = -31;
+  a6.a1 = 32;
+  a6.a2 = -33;
+  a6.a3 = 34;
+  a6.a4 = -35;
+  a7.a0 = 36;
+  a7.a1 = -37;
+  a7.a2 = 38;
+  a7.a3 = -39;
+  a7.a4 = 40;
+  a8.a0 = -41;
+  a8.a1 = 42;
+  a8.a2 = -43;
+  a8.a3 = 44;
+  a8.a4 = -45;
+  a9.a0 = 46;
+  a9.a1 = -47;
+  a9.a2 = 48;
+  a9.a3 = -49;
+  a9.a4 = 50;
+
+  final result = passStruct20BytesHomogeneousInt32x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(25, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+        Float Function(Struct20BytesHomogeneousFloat),
+        double Function(Struct20BytesHomogeneousFloat)>(
+    "PassStruct20BytesHomogeneousFloat",
+    isLeaf: true);
+
+/// Argument too big to go into FPU registers in hardfp and arm64.
+void testPassStruct20BytesHomogeneousFloatLeaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousFloat>();
+  final Struct20BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+
+  final result = passStruct20BytesHomogeneousFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(-3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct32BytesHomogeneousDoublex5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble),
+            double Function(
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble)>(
+        "PassStruct32BytesHomogeneousDoublex5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStruct32BytesHomogeneousDoublex5Leaf() {
+  final a0Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a4 = a4Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8.0;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12.0;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16.0;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20.0;
+
+  final result = passStruct32BytesHomogeneousDoublex5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStruct40BytesHomogeneousDoubleLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct40BytesHomogeneousDouble),
+        double Function(Struct40BytesHomogeneousDouble)>(
+    "PassStruct40BytesHomogeneousDouble",
+    isLeaf: true);
+
+/// Argument too big to go into FPU registers in arm64.
+void testPassStruct40BytesHomogeneousDoubleLeaf() {
+  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
+  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+
+  final result = passStruct40BytesHomogeneousDoubleLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(-3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct1024BytesHomogeneousUint64Leaf =
+    ffiTestFunctions.lookupFunction<
+            Uint64 Function(Struct1024BytesHomogeneousUint64),
+            int Function(Struct1024BytesHomogeneousUint64)>(
+        "PassStruct1024BytesHomogeneousUint64",
+        isLeaf: true);
+
+/// Test 1kb struct.
+void testPassStruct1024BytesHomogeneousUint64Leaf() {
+  final a0Pointer = calloc<Struct1024BytesHomogeneousUint64>();
+  final Struct1024BytesHomogeneousUint64 a0 = a0Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a0.a9 = 10;
+  a0.a10 = 11;
+  a0.a11 = 12;
+  a0.a12 = 13;
+  a0.a13 = 14;
+  a0.a14 = 15;
+  a0.a15 = 16;
+  a0.a16 = 17;
+  a0.a17 = 18;
+  a0.a18 = 19;
+  a0.a19 = 20;
+  a0.a20 = 21;
+  a0.a21 = 22;
+  a0.a22 = 23;
+  a0.a23 = 24;
+  a0.a24 = 25;
+  a0.a25 = 26;
+  a0.a26 = 27;
+  a0.a27 = 28;
+  a0.a28 = 29;
+  a0.a29 = 30;
+  a0.a30 = 31;
+  a0.a31 = 32;
+  a0.a32 = 33;
+  a0.a33 = 34;
+  a0.a34 = 35;
+  a0.a35 = 36;
+  a0.a36 = 37;
+  a0.a37 = 38;
+  a0.a38 = 39;
+  a0.a39 = 40;
+  a0.a40 = 41;
+  a0.a41 = 42;
+  a0.a42 = 43;
+  a0.a43 = 44;
+  a0.a44 = 45;
+  a0.a45 = 46;
+  a0.a46 = 47;
+  a0.a47 = 48;
+  a0.a48 = 49;
+  a0.a49 = 50;
+  a0.a50 = 51;
+  a0.a51 = 52;
+  a0.a52 = 53;
+  a0.a53 = 54;
+  a0.a54 = 55;
+  a0.a55 = 56;
+  a0.a56 = 57;
+  a0.a57 = 58;
+  a0.a58 = 59;
+  a0.a59 = 60;
+  a0.a60 = 61;
+  a0.a61 = 62;
+  a0.a62 = 63;
+  a0.a63 = 64;
+  a0.a64 = 65;
+  a0.a65 = 66;
+  a0.a66 = 67;
+  a0.a67 = 68;
+  a0.a68 = 69;
+  a0.a69 = 70;
+  a0.a70 = 71;
+  a0.a71 = 72;
+  a0.a72 = 73;
+  a0.a73 = 74;
+  a0.a74 = 75;
+  a0.a75 = 76;
+  a0.a76 = 77;
+  a0.a77 = 78;
+  a0.a78 = 79;
+  a0.a79 = 80;
+  a0.a80 = 81;
+  a0.a81 = 82;
+  a0.a82 = 83;
+  a0.a83 = 84;
+  a0.a84 = 85;
+  a0.a85 = 86;
+  a0.a86 = 87;
+  a0.a87 = 88;
+  a0.a88 = 89;
+  a0.a89 = 90;
+  a0.a90 = 91;
+  a0.a91 = 92;
+  a0.a92 = 93;
+  a0.a93 = 94;
+  a0.a94 = 95;
+  a0.a95 = 96;
+  a0.a96 = 97;
+  a0.a97 = 98;
+  a0.a98 = 99;
+  a0.a99 = 100;
+  a0.a100 = 101;
+  a0.a101 = 102;
+  a0.a102 = 103;
+  a0.a103 = 104;
+  a0.a104 = 105;
+  a0.a105 = 106;
+  a0.a106 = 107;
+  a0.a107 = 108;
+  a0.a108 = 109;
+  a0.a109 = 110;
+  a0.a110 = 111;
+  a0.a111 = 112;
+  a0.a112 = 113;
+  a0.a113 = 114;
+  a0.a114 = 115;
+  a0.a115 = 116;
+  a0.a116 = 117;
+  a0.a117 = 118;
+  a0.a118 = 119;
+  a0.a119 = 120;
+  a0.a120 = 121;
+  a0.a121 = 122;
+  a0.a122 = 123;
+  a0.a123 = 124;
+  a0.a124 = 125;
+  a0.a125 = 126;
+  a0.a126 = 127;
+  a0.a127 = 128;
+
+  final result = passStruct1024BytesHomogeneousUint64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(8256, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf =
+    ffiTestFunctions.lookupFunction<
+            Float Function(
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float),
+            double Function(
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double)>("PassFloatStruct16BytesHomogeneousFloatFloatStruct1",
+        isLeaf: true);
+
+/// Tests the alignment of structs in FPU registers and backfilling.
+void testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf() {
+  double a0;
+  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
+  double a2;
+  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
+  double a4;
+  final a5Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a5 = a5Pointer.ref;
+  double a6;
+  final a7Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1.0;
+  a1.a0 = 2.0;
+  a1.a1 = -3.0;
+  a1.a2 = 4.0;
+  a1.a3 = -5.0;
+  a2 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a3.a2 = -9.0;
+  a3.a3 = 10.0;
+  a4 = -11.0;
+  a5.a0 = 12.0;
+  a5.a1 = -13.0;
+  a5.a2 = 14.0;
+  a5.a3 = -15.0;
+  a6 = 16.0;
+  a7.a0 = -17.0;
+  a7.a1 = 18.0;
+  a7.a2 = -19.0;
+  a7.a3 = 20.0;
+  a8 = -21.0;
+
+  final result = passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-11.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float),
+            double Function(
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double)>("PassFloatStruct32BytesHomogeneousDoubleFloatStruct",
+        isLeaf: true);
+
+/// Tests the alignment of structs in FPU registers and backfilling.
+void testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf() {
+  double a0;
+  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
+  double a2;
+  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
+  double a4;
+  final a5Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a5 = a5Pointer.ref;
+  double a6;
+  final a7Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1.0;
+  a1.a0 = 2.0;
+  a1.a1 = -3.0;
+  a1.a2 = 4.0;
+  a1.a3 = -5.0;
+  a2 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a3.a2 = -9.0;
+  a3.a3 = 10.0;
+  a4 = -11.0;
+  a5.a0 = 12.0;
+  a5.a1 = -13.0;
+  a5.a2 = 14.0;
+  a5.a3 = -15.0;
+  a6 = 16.0;
+  a7.a0 = -17.0;
+  a7.a1 = 18.0;
+  a7.a2 = -19.0;
+  a7.a3 = 20.0;
+  a8 = -21.0;
+
+  final result = passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-11.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(Int8, Struct16BytesMixed, Int8, Struct16BytesMixed,
+                Int8, Struct16BytesMixed, Int8, Struct16BytesMixed, Int8),
+            double Function(
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int)>("PassInt8Struct16BytesMixedInt8Struct16BytesMixedIn",
+        isLeaf: true);
+
+/// Tests the alignment of structs in integers registers and on the stack.
+/// Arm32 aligns this struct at 8.
+/// Also, arm32 allocates the second struct partially in registers, partially
+/// on stack.
+/// Test backfilling of integer registers.
+void testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a1 = a1Pointer.ref;
+  int a2;
+  final a3Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a3 = a3Pointer.ref;
+  int a4;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  int a6;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  int a8;
+
+  a0 = -1;
+  a1.a0 = 2.0;
+  a1.a1 = -3;
+  a2 = 4;
+  a3.a0 = -5.0;
+  a3.a1 = 6;
+  a4 = -7;
+  a5.a0 = 8.0;
+  a5.a1 = -9;
+  a6 = 10;
+  a7.a0 = -11.0;
+  a7.a1 = 12;
+  a8 = -13;
+
+  final result = passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-7.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passDoublex6Struct16BytesMixedx4Int32Leaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Int32),
+        double Function(
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            int)>("PassDoublex6Struct16BytesMixedx4Int32", isLeaf: true);
+
+/// On Linux x64, it will exhaust xmm registers first, after 6 doubles and 2
+/// structs. The rest of the structs will go on the stack.
+/// The int will be backfilled into the int register.
+void testPassDoublex6Struct16BytesMixedx4Int32Leaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+  double a5;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a9 = a9Pointer.ref;
+  int a10;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+  a5 = 6.0;
+  a6.a0 = -7.0;
+  a6.a1 = 8;
+  a7.a0 = -9.0;
+  a7.a1 = 10;
+  a8.a0 = -11.0;
+  a8.a1 = 12;
+  a9.a0 = -13.0;
+  a9.a1 = 14;
+  a10 = -15;
+
+  final result = passDoublex6Struct16BytesMixedx4Int32Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
+
+  print("result = $result");
+
+  Expect.approxEquals(-8.0, result);
+
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passInt32x4Struct16BytesMixedx4DoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(Int32, Int32, Int32, Int32, Struct16BytesMixed,
+            Struct16BytesMixed, Struct16BytesMixed, Struct16BytesMixed, Double),
+        double Function(
+            int,
+            int,
+            int,
+            int,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            double)>("PassInt32x4Struct16BytesMixedx4Double", isLeaf: true);
+
+/// On Linux x64, it will exhaust int registers first.
+/// The rest of the structs will go on the stack.
+/// The double will be backfilled into the xmm register.
+void testPassInt32x4Struct16BytesMixedx4DoubleLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  final a4Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4.a0 = -5.0;
+  a4.a1 = 6;
+  a5.a0 = -7.0;
+  a5.a1 = 8;
+  a6.a0 = -9.0;
+  a6.a1 = 10;
+  a7.a0 = -11.0;
+  a7.a1 = 12;
+  a8 = -13.0;
+
+  final result = passInt32x4Struct16BytesMixedx4DoubleLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-7.0, result);
+
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(Struct40BytesHomogeneousDouble,
+                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat),
+            double Function(Struct40BytesHomogeneousDouble,
+                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat)>(
+        "PassStruct40BytesHomogeneousDoubleStruct4BytesHomo",
+        isLeaf: true);
+
+/// On various architectures, first struct is allocated on stack.
+/// Check that the other two arguments are allocated on registers.
+void testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf() {
+  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
+  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+  a1.a0 = 6;
+  a1.a1 = -7;
+  a2.a0 = 8.0;
+  a2.a1 = -9.0;
+
+  final result =
+      passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(-5.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+}
+
+final passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Int64,
+            Int8,
+            Struct1ByteInt,
+            Int64,
+            Int8,
+            Struct4BytesHomogeneousInt16,
+            Int64,
+            Int8,
+            Struct8BytesInt,
+            Int64,
+            Int8,
+            Struct8BytesHomogeneousFloat,
+            Int64,
+            Int8,
+            Struct8BytesMixed,
+            Int64,
+            Int8,
+            StructAlignmentInt16,
+            Int64,
+            Int8,
+            StructAlignmentInt32,
+            Int64,
+            Int8,
+            StructAlignmentInt64),
+        double Function(
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            int,
+            int,
+            Struct1ByteInt,
+            int,
+            int,
+            Struct4BytesHomogeneousInt16,
+            int,
+            int,
+            Struct8BytesInt,
+            int,
+            int,
+            Struct8BytesHomogeneousFloat,
+            int,
+            int,
+            Struct8BytesMixed,
+            int,
+            int,
+            StructAlignmentInt16,
+            int,
+            int,
+            StructAlignmentInt32,
+            int,
+            int,
+            StructAlignmentInt64)>("PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  double a8;
+  double a9;
+  double a10;
+  double a11;
+  double a12;
+  double a13;
+  double a14;
+  double a15;
+  int a16;
+  int a17;
+  final a18Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a18 = a18Pointer.ref;
+  int a19;
+  int a20;
+  final a21Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a21 = a21Pointer.ref;
+  int a22;
+  int a23;
+  final a24Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a24 = a24Pointer.ref;
+  int a25;
+  int a26;
+  final a27Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a27 = a27Pointer.ref;
+  int a28;
+  int a29;
+  final a30Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a30 = a30Pointer.ref;
+  int a31;
+  int a32;
+  final a33Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a33 = a33Pointer.ref;
+  int a34;
+  int a35;
+  final a36Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a36 = a36Pointer.ref;
+  int a37;
+  int a38;
+  final a39Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a39 = a39Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8 = -9.0;
+  a9 = 10.0;
+  a10 = -11.0;
+  a11 = 12.0;
+  a12 = -13.0;
+  a13 = 14.0;
+  a14 = -15.0;
+  a15 = 16.0;
+  a16 = -17;
+  a17 = 18;
+  a18.a0 = -19;
+  a19 = 20;
+  a20 = -21;
+  a21.a0 = 22;
+  a21.a1 = -23;
+  a22 = 24;
+  a23 = -25;
+  a24.a0 = 26;
+  a24.a1 = -27;
+  a24.a2 = 28;
+  a25 = -29;
+  a26 = 30;
+  a27.a0 = -31.0;
+  a27.a1 = 32.0;
+  a28 = -33;
+  a29 = 34;
+  a30.a0 = -35.0;
+  a30.a1 = 36;
+  a30.a2 = -37;
+  a31 = 38;
+  a32 = -39;
+  a33.a0 = 40;
+  a33.a1 = -41;
+  a33.a2 = 42;
+  a34 = -43;
+  a35 = 44;
+  a36.a0 = -45;
+  a36.a1 = 46;
+  a36.a2 = -47;
+  a37 = 48;
+  a38 = -49;
+  a39.a0 = 50;
+  a39.a1 = -51;
+  a39.a2 = 52;
+
+  final result = passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf(
+      a0,
+      a1,
+      a2,
+      a3,
+      a4,
+      a5,
+      a6,
+      a7,
+      a8,
+      a9,
+      a10,
+      a11,
+      a12,
+      a13,
+      a14,
+      a15,
+      a16,
+      a17,
+      a18,
+      a19,
+      a20,
+      a21,
+      a22,
+      a23,
+      a24,
+      a25,
+      a26,
+      a27,
+      a28,
+      a29,
+      a30,
+      a31,
+      a32,
+      a33,
+      a34,
+      a35,
+      a36,
+      a37,
+      a38,
+      a39);
+
+  print("result = $result");
+
+  Expect.approxEquals(26.0, result);
+
+  calloc.free(a18Pointer);
+  calloc.free(a21Pointer);
+  calloc.free(a24Pointer);
+  calloc.free(a27Pointer);
+  calloc.free(a30Pointer);
+  calloc.free(a33Pointer);
+  calloc.free(a36Pointer);
+  calloc.free(a39Pointer);
+}
+
+final passStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt16),
+    int Function(
+        StructAlignmentInt16)>("PassStructAlignmentInt16", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testPassStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt16Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt32),
+    int Function(
+        StructAlignmentInt32)>("PassStructAlignmentInt32", isLeaf: true);
+
+/// Test alignment and padding of 32 byte int within struct.
+void testPassStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt64),
+    int Function(
+        StructAlignmentInt64)>("PassStructAlignmentInt64", isLeaf: true);
+
+/// Test alignment and padding of 64 byte int within struct.
+void testPassStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct8BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt),
+    int Function(
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt)>("PassStruct8BytesNestedIntx10", isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust registers on all platforms.
+void testPassStruct8BytesNestedIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3;
+  a0.a1.a1 = 4;
+  a1.a0.a0 = -5;
+  a1.a0.a1 = 6;
+  a1.a1.a0 = -7;
+  a1.a1.a1 = 8;
+  a2.a0.a0 = -9;
+  a2.a0.a1 = 10;
+  a2.a1.a0 = -11;
+  a2.a1.a1 = 12;
+  a3.a0.a0 = -13;
+  a3.a0.a1 = 14;
+  a3.a1.a0 = -15;
+  a3.a1.a1 = 16;
+  a4.a0.a0 = -17;
+  a4.a0.a1 = 18;
+  a4.a1.a0 = -19;
+  a4.a1.a1 = 20;
+  a5.a0.a0 = -21;
+  a5.a0.a1 = 22;
+  a5.a1.a0 = -23;
+  a5.a1.a1 = 24;
+  a6.a0.a0 = -25;
+  a6.a0.a1 = 26;
+  a6.a1.a0 = -27;
+  a6.a1.a1 = 28;
+  a7.a0.a0 = -29;
+  a7.a0.a1 = 30;
+  a7.a1.a0 = -31;
+  a7.a1.a1 = 32;
+  a8.a0.a0 = -33;
+  a8.a0.a1 = 34;
+  a8.a1.a0 = -35;
+  a8.a1.a1 = 36;
+  a9.a0.a0 = -37;
+  a9.a0.a1 = 38;
+  a9.a1.a0 = -39;
+  a9.a1.a1 = 40;
+
+  final result =
+      passStruct8BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(20, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat),
+        double Function(
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat)>("PassStruct8BytesNestedFloatx10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust fpu registers on all platforms.
+void testPassStruct8BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1.a0 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a1.a0 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a1.a0 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a1.a0 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a1.a0 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a1.a0 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a1.a0 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a1.a0 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a1.a0 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a1.a0 = 20.0;
+
+  final result = passStruct8BytesNestedFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedFloat2x10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2),
+        double Function(
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2)>("PassStruct8BytesNestedFloat2x10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust fpu registers on all platforms.
+/// The nesting is irregular, testing homogenous float rules on arm and arm64,
+/// and the fpu register usage on x64.
+void testPassStruct8BytesNestedFloat2x10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a1 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a1 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a1 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a1 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a1 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a1 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a1 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a1 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a1 = 20.0;
+
+  final result = passStruct8BytesNestedFloat2x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedMixedx10Leaf = ffiTestFunctions.lookupFunction<
+        Double Function(
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed),
+        double Function(
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed)>("PassStruct8BytesNestedMixedx10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust all registers on all platforms.
+void testPassStruct8BytesNestedMixedx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3.0;
+  a1.a0.a0 = 4;
+  a1.a0.a1 = -5;
+  a1.a1.a0 = 6.0;
+  a2.a0.a0 = -7;
+  a2.a0.a1 = 8;
+  a2.a1.a0 = -9.0;
+  a3.a0.a0 = 10;
+  a3.a0.a1 = -11;
+  a3.a1.a0 = 12.0;
+  a4.a0.a0 = -13;
+  a4.a0.a1 = 14;
+  a4.a1.a0 = -15.0;
+  a5.a0.a0 = 16;
+  a5.a0.a1 = -17;
+  a5.a1.a0 = 18.0;
+  a6.a0.a0 = -19;
+  a6.a0.a1 = 20;
+  a6.a1.a0 = -21.0;
+  a7.a0.a0 = 22;
+  a7.a0.a1 = -23;
+  a7.a1.a0 = 24.0;
+  a8.a0.a0 = -25;
+  a8.a0.a1 = 26;
+  a8.a1.a0 = -27.0;
+  a9.a0.a0 = 28;
+  a9.a0.a1 = -29;
+  a9.a1.a0 = 30.0;
+
+  final result = passStruct8BytesNestedMixedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct16BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(Struct16BytesNestedInt, Struct16BytesNestedInt),
+    int Function(Struct16BytesNestedInt,
+        Struct16BytesNestedInt)>("PassStruct16BytesNestedIntx2", isLeaf: true);
+
+/// Deeper nested struct to test recursive member access.
+void testPassStruct16BytesNestedIntx2Leaf() {
+  final a0Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0 = -1;
+  a0.a0.a0.a1 = 2;
+  a0.a0.a1.a0 = -3;
+  a0.a0.a1.a1 = 4;
+  a0.a1.a0.a0 = -5;
+  a0.a1.a0.a1 = 6;
+  a0.a1.a1.a0 = -7;
+  a0.a1.a1.a1 = 8;
+  a1.a0.a0.a0 = -9;
+  a1.a0.a0.a1 = 10;
+  a1.a0.a1.a0 = -11;
+  a1.a0.a1.a1 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15;
+  a1.a1.a1.a1 = 16;
+
+  final result = passStruct16BytesNestedIntx2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(8, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final passStruct32BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(Struct32BytesNestedInt, Struct32BytesNestedInt),
+    int Function(Struct32BytesNestedInt,
+        Struct32BytesNestedInt)>("PassStruct32BytesNestedIntx2", isLeaf: true);
+
+/// Even deeper nested struct to test recursive member access.
+void testPassStruct32BytesNestedIntx2Leaf() {
+  final a0Pointer = calloc<Struct32BytesNestedInt>();
+  final Struct32BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct32BytesNestedInt>();
+  final Struct32BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0.a0 = -1;
+  a0.a0.a0.a0.a1 = 2;
+  a0.a0.a0.a1.a0 = -3;
+  a0.a0.a0.a1.a1 = 4;
+  a0.a0.a1.a0.a0 = -5;
+  a0.a0.a1.a0.a1 = 6;
+  a0.a0.a1.a1.a0 = -7;
+  a0.a0.a1.a1.a1 = 8;
+  a0.a1.a0.a0.a0 = -9;
+  a0.a1.a0.a0.a1 = 10;
+  a0.a1.a0.a1.a0 = -11;
+  a0.a1.a0.a1.a1 = 12;
+  a0.a1.a1.a0.a0 = -13;
+  a0.a1.a1.a0.a1 = 14;
+  a0.a1.a1.a1.a0 = -15;
+  a0.a1.a1.a1.a1 = 16;
+  a1.a0.a0.a0.a0 = -17;
+  a1.a0.a0.a0.a1 = 18;
+  a1.a0.a0.a1.a0 = -19;
+  a1.a0.a0.a1.a1 = 20;
+  a1.a0.a1.a0.a0 = -21;
+  a1.a0.a1.a0.a1 = 22;
+  a1.a0.a1.a1.a0 = -23;
+  a1.a0.a1.a1.a1 = 24;
+  a1.a1.a0.a0.a0 = -25;
+  a1.a1.a0.a0.a1 = 26;
+  a1.a1.a0.a1.a0 = -27;
+  a1.a1.a0.a1.a1 = 28;
+  a1.a1.a1.a0.a0 = -29;
+  a1.a1.a1.a0.a1 = 30;
+  a1.a1.a1.a1.a0 = -31;
+  a1.a1.a1.a1.a1 = 32;
+
+  final result = passStruct32BytesNestedIntx2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(16, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt16Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt16),
+            int Function(StructNestedIntStructAlignmentInt16)>(
+        "PassStructNestedIntStructAlignmentInt16",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 16 byte int.
+void testPassStructNestedIntStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt16>();
+  final StructNestedIntStructAlignmentInt16 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt16Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt32Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt32),
+            int Function(StructNestedIntStructAlignmentInt32)>(
+        "PassStructNestedIntStructAlignmentInt32",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 32 byte int.
+void testPassStructNestedIntStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt32>();
+  final StructNestedIntStructAlignmentInt32 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt64Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt64),
+            int Function(StructNestedIntStructAlignmentInt64)>(
+        "PassStructNestedIntStructAlignmentInt64",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 64 byte int.
+void testPassStructNestedIntStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt64>();
+  final StructNestedIntStructAlignmentInt64 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIrregularEvenBiggerx4Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger),
+            double Function(
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger)>(
+        "PassStructNestedIrregularEvenBiggerx4",
+        isLeaf: true);
+
+/// Return big irregular struct as smoke test.
+void testPassStructNestedIrregularEvenBiggerx4Leaf() {
+  final a0Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a3 = a3Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1.a0.a0 = 2;
+  a0.a1.a0.a1.a0.a0 = -3;
+  a0.a1.a0.a1.a0.a1 = 4;
+  a0.a1.a0.a1.a1.a0 = -5.0;
+  a0.a1.a0.a2 = 6;
+  a0.a1.a0.a3.a0.a0 = -7.0;
+  a0.a1.a0.a3.a1 = 8.0;
+  a0.a1.a0.a4 = 9;
+  a0.a1.a0.a5.a0.a0 = 10.0;
+  a0.a1.a0.a5.a1.a0 = -11.0;
+  a0.a1.a0.a6 = 12;
+  a0.a1.a1.a0.a0 = -13;
+  a0.a1.a1.a0.a1 = 14;
+  a0.a1.a1.a1.a0 = -15.0;
+  a0.a1.a2 = 16.0;
+  a0.a1.a3 = -17.0;
+  a0.a2.a0.a0 = 18;
+  a0.a2.a0.a1.a0.a0 = -19;
+  a0.a2.a0.a1.a0.a1 = 20;
+  a0.a2.a0.a1.a1.a0 = -21.0;
+  a0.a2.a0.a2 = 22;
+  a0.a2.a0.a3.a0.a0 = -23.0;
+  a0.a2.a0.a3.a1 = 24.0;
+  a0.a2.a0.a4 = 25;
+  a0.a2.a0.a5.a0.a0 = 26.0;
+  a0.a2.a0.a5.a1.a0 = -27.0;
+  a0.a2.a0.a6 = 28;
+  a0.a2.a1.a0.a0 = -29;
+  a0.a2.a1.a0.a1 = 30;
+  a0.a2.a1.a1.a0 = -31.0;
+  a0.a2.a2 = 32.0;
+  a0.a2.a3 = -33.0;
+  a0.a3 = 34.0;
+  a1.a0 = 35;
+  a1.a1.a0.a0 = 36;
+  a1.a1.a0.a1.a0.a0 = -37;
+  a1.a1.a0.a1.a0.a1 = 38;
+  a1.a1.a0.a1.a1.a0 = -39.0;
+  a1.a1.a0.a2 = 40;
+  a1.a1.a0.a3.a0.a0 = -41.0;
+  a1.a1.a0.a3.a1 = 42.0;
+  a1.a1.a0.a4 = 43;
+  a1.a1.a0.a5.a0.a0 = 44.0;
+  a1.a1.a0.a5.a1.a0 = -45.0;
+  a1.a1.a0.a6 = 46;
+  a1.a1.a1.a0.a0 = -47;
+  a1.a1.a1.a0.a1 = 48;
+  a1.a1.a1.a1.a0 = -49.0;
+  a1.a1.a2 = 50.0;
+  a1.a1.a3 = -51.0;
+  a1.a2.a0.a0 = 52;
+  a1.a2.a0.a1.a0.a0 = -53;
+  a1.a2.a0.a1.a0.a1 = 54;
+  a1.a2.a0.a1.a1.a0 = -55.0;
+  a1.a2.a0.a2 = 56;
+  a1.a2.a0.a3.a0.a0 = -57.0;
+  a1.a2.a0.a3.a1 = 58.0;
+  a1.a2.a0.a4 = 59;
+  a1.a2.a0.a5.a0.a0 = 60.0;
+  a1.a2.a0.a5.a1.a0 = -61.0;
+  a1.a2.a0.a6 = 62;
+  a1.a2.a1.a0.a0 = -63;
+  a1.a2.a1.a0.a1 = 64;
+  a1.a2.a1.a1.a0 = -65.0;
+  a1.a2.a2 = 66.0;
+  a1.a2.a3 = -67.0;
+  a1.a3 = 68.0;
+  a2.a0 = 69;
+  a2.a1.a0.a0 = 70;
+  a2.a1.a0.a1.a0.a0 = -71;
+  a2.a1.a0.a1.a0.a1 = 72;
+  a2.a1.a0.a1.a1.a0 = -73.0;
+  a2.a1.a0.a2 = 74;
+  a2.a1.a0.a3.a0.a0 = -75.0;
+  a2.a1.a0.a3.a1 = 76.0;
+  a2.a1.a0.a4 = 77;
+  a2.a1.a0.a5.a0.a0 = 78.0;
+  a2.a1.a0.a5.a1.a0 = -79.0;
+  a2.a1.a0.a6 = 80;
+  a2.a1.a1.a0.a0 = -81;
+  a2.a1.a1.a0.a1 = 82;
+  a2.a1.a1.a1.a0 = -83.0;
+  a2.a1.a2 = 84.0;
+  a2.a1.a3 = -85.0;
+  a2.a2.a0.a0 = 86;
+  a2.a2.a0.a1.a0.a0 = -87;
+  a2.a2.a0.a1.a0.a1 = 88;
+  a2.a2.a0.a1.a1.a0 = -89.0;
+  a2.a2.a0.a2 = 90;
+  a2.a2.a0.a3.a0.a0 = -91.0;
+  a2.a2.a0.a3.a1 = 92.0;
+  a2.a2.a0.a4 = 93;
+  a2.a2.a0.a5.a0.a0 = 94.0;
+  a2.a2.a0.a5.a1.a0 = -95.0;
+  a2.a2.a0.a6 = 96;
+  a2.a2.a1.a0.a0 = -97;
+  a2.a2.a1.a0.a1 = 98;
+  a2.a2.a1.a1.a0 = -99.0;
+  a2.a2.a2 = 100.0;
+  a2.a2.a3 = -101.0;
+  a2.a3 = 102.0;
+  a3.a0 = 103;
+  a3.a1.a0.a0 = 104;
+  a3.a1.a0.a1.a0.a0 = -105;
+  a3.a1.a0.a1.a0.a1 = 106;
+  a3.a1.a0.a1.a1.a0 = -107.0;
+  a3.a1.a0.a2 = 108;
+  a3.a1.a0.a3.a0.a0 = -109.0;
+  a3.a1.a0.a3.a1 = 110.0;
+  a3.a1.a0.a4 = 111;
+  a3.a1.a0.a5.a0.a0 = 112.0;
+  a3.a1.a0.a5.a1.a0 = -113.0;
+  a3.a1.a0.a6 = 114;
+  a3.a1.a1.a0.a0 = -115;
+  a3.a1.a1.a0.a1 = 116;
+  a3.a1.a1.a1.a0 = -117.0;
+  a3.a1.a2 = 118.0;
+  a3.a1.a3 = -119.0;
+  a3.a2.a0.a0 = 120;
+  a3.a2.a0.a1.a0.a0 = -121;
+  a3.a2.a0.a1.a0.a1 = 122;
+  a3.a2.a0.a1.a1.a0 = -123.0;
+  a3.a2.a0.a2 = 124;
+  a3.a2.a0.a3.a0.a0 = -125.0;
+  a3.a2.a0.a3.a1 = 126.0;
+  a3.a2.a0.a4 = 127;
+  a3.a2.a0.a5.a0.a0 = 128.0;
+  a3.a2.a0.a5.a1.a0 = -129.0;
+  a3.a2.a0.a6 = 130;
+  a3.a2.a1.a0.a0 = -131;
+  a3.a2.a1.a0.a1 = 132;
+  a3.a2.a1.a1.a0 = -133.0;
+  a3.a2.a2 = 134.0;
+  a3.a2.a3 = -135.0;
+  a3.a3 = 136.0;
+
+  final result = passStructNestedIrregularEvenBiggerx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(1572.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStruct8BytesInlineArrayIntx4Leaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt),
+        int Function(
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt)>("PassStruct8BytesInlineArrayIntx4",
+    isLeaf: true);
+
+/// Simple struct with inline array.
+void testPassStruct8BytesInlineArrayIntx4Leaf() {
+  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a3 = a3Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+  a1.a0[0] = 9;
+  a1.a0[1] = 10;
+  a1.a0[2] = 11;
+  a1.a0[3] = 12;
+  a1.a0[4] = 13;
+  a1.a0[5] = 14;
+  a1.a0[6] = 15;
+  a1.a0[7] = 16;
+  a2.a0[0] = 17;
+  a2.a0[1] = 18;
+  a2.a0[2] = 19;
+  a2.a0[3] = 20;
+  a2.a0[4] = 21;
+  a2.a0[5] = 22;
+  a2.a0[6] = 23;
+  a2.a0[7] = 24;
+  a3.a0[0] = 25;
+  a3.a0[1] = 26;
+  a3.a0[2] = 27;
+  a3.a0[3] = 28;
+  a3.a0[4] = 29;
+  a3.a0[5] = 30;
+  a3.a0[6] = 31;
+  a3.a0[7] = 32;
+
+  final result = passStruct8BytesInlineArrayIntx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(528, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStructInlineArrayIrregularx4Leaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(StructInlineArrayIrregular, StructInlineArrayIrregular,
+            StructInlineArrayIrregular, StructInlineArrayIrregular),
+        int Function(
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular)>("PassStructInlineArrayIrregularx4",
+    isLeaf: true);
+
+/// Irregular struct with inline array.
+void testPassStructInlineArrayIrregularx4Leaf() {
+  final a0Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a3 = a3Pointer.ref;
+
+  a0.a0[0].a0 = -1;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3;
+  a0.a0[1].a1 = 4;
+  a0.a1 = 5;
+  a1.a0[0].a0 = 6;
+  a1.a0[0].a1 = -7;
+  a1.a0[1].a0 = 8;
+  a1.a0[1].a1 = -9;
+  a1.a1 = 10;
+  a2.a0[0].a0 = -11;
+  a2.a0[0].a1 = 12;
+  a2.a0[1].a0 = -13;
+  a2.a0[1].a1 = 14;
+  a2.a1 = 15;
+  a3.a0[0].a0 = 16;
+  a3.a0[0].a1 = -17;
+  a3.a0[1].a0 = 18;
+  a3.a0[1].a1 = -19;
+  a3.a1 = 20;
+
+  final result = passStructInlineArrayIrregularx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(50, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStructInlineArray100BytesLeaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(StructInlineArray100Bytes),
+        int Function(StructInlineArray100Bytes)>(
+    "PassStructInlineArray100Bytes",
+    isLeaf: true);
+
+/// Regular larger struct with inline array.
+void testPassStructInlineArray100BytesLeaf() {
+  final a0Pointer = calloc<StructInlineArray100Bytes>();
+  final StructInlineArray100Bytes a0 = a0Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+  a0.a0[8] = 9;
+  a0.a0[9] = 10;
+  a0.a0[10] = 11;
+  a0.a0[11] = 12;
+  a0.a0[12] = 13;
+  a0.a0[13] = 14;
+  a0.a0[14] = 15;
+  a0.a0[15] = 16;
+  a0.a0[16] = 17;
+  a0.a0[17] = 18;
+  a0.a0[18] = 19;
+  a0.a0[19] = 20;
+  a0.a0[20] = 21;
+  a0.a0[21] = 22;
+  a0.a0[22] = 23;
+  a0.a0[23] = 24;
+  a0.a0[24] = 25;
+  a0.a0[25] = 26;
+  a0.a0[26] = 27;
+  a0.a0[27] = 28;
+  a0.a0[28] = 29;
+  a0.a0[29] = 30;
+  a0.a0[30] = 31;
+  a0.a0[31] = 32;
+  a0.a0[32] = 33;
+  a0.a0[33] = 34;
+  a0.a0[34] = 35;
+  a0.a0[35] = 36;
+  a0.a0[36] = 37;
+  a0.a0[37] = 38;
+  a0.a0[38] = 39;
+  a0.a0[39] = 40;
+  a0.a0[40] = 41;
+  a0.a0[41] = 42;
+  a0.a0[42] = 43;
+  a0.a0[43] = 44;
+  a0.a0[44] = 45;
+  a0.a0[45] = 46;
+  a0.a0[46] = 47;
+  a0.a0[47] = 48;
+  a0.a0[48] = 49;
+  a0.a0[49] = 50;
+  a0.a0[50] = 51;
+  a0.a0[51] = 52;
+  a0.a0[52] = 53;
+  a0.a0[53] = 54;
+  a0.a0[54] = 55;
+  a0.a0[55] = 56;
+  a0.a0[56] = 57;
+  a0.a0[57] = 58;
+  a0.a0[58] = 59;
+  a0.a0[59] = 60;
+  a0.a0[60] = 61;
+  a0.a0[61] = 62;
+  a0.a0[62] = 63;
+  a0.a0[63] = 64;
+  a0.a0[64] = 65;
+  a0.a0[65] = 66;
+  a0.a0[66] = 67;
+  a0.a0[67] = 68;
+  a0.a0[68] = 69;
+  a0.a0[69] = 70;
+  a0.a0[70] = 71;
+  a0.a0[71] = 72;
+  a0.a0[72] = 73;
+  a0.a0[73] = 74;
+  a0.a0[74] = 75;
+  a0.a0[75] = 76;
+  a0.a0[76] = 77;
+  a0.a0[77] = 78;
+  a0.a0[78] = 79;
+  a0.a0[79] = 80;
+  a0.a0[80] = 81;
+  a0.a0[81] = 82;
+  a0.a0[82] = 83;
+  a0.a0[83] = 84;
+  a0.a0[84] = 85;
+  a0.a0[85] = 86;
+  a0.a0[86] = 87;
+  a0.a0[87] = 88;
+  a0.a0[88] = 89;
+  a0.a0[89] = 90;
+  a0.a0[90] = 91;
+  a0.a0[91] = 92;
+  a0.a0[92] = 93;
+  a0.a0[93] = 94;
+  a0.a0[94] = 95;
+  a0.a0[95] = 96;
+  a0.a0[96] = 97;
+  a0.a0[97] = 98;
+  a0.a0[98] = 99;
+  a0.a0[99] = 100;
+
+  final result = passStructInlineArray100BytesLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(5050, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructStruct16BytesHomogeneousFloat2x5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Float Function(
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2),
+            double Function(
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2)>(
+        "PassStructStruct16BytesHomogeneousFloat2x5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStructStruct16BytesHomogeneousFloat2x5Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a4 = a4Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+  a1.a0.a0 = -5.0;
+  a1.a1[0].a0 = 6.0;
+  a1.a1[1].a0 = -7.0;
+  a1.a2 = 8.0;
+  a2.a0.a0 = -9.0;
+  a2.a1[0].a0 = 10.0;
+  a2.a1[1].a0 = -11.0;
+  a2.a2 = 12.0;
+  a3.a0.a0 = -13.0;
+  a3.a1[0].a0 = 14.0;
+  a3.a1[1].a0 = -15.0;
+  a3.a2 = 16.0;
+  a4.a0.a0 = -17.0;
+  a4.a1[0].a0 = 18.0;
+  a4.a1[1].a0 = -19.0;
+  a4.a2 = 20.0;
+
+  final result =
+      passStructStruct16BytesHomogeneousFloat2x5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStructStruct32BytesHomogeneousDouble2x5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2),
+            double Function(
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2)>(
+        "PassStructStruct32BytesHomogeneousDouble2x5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStructStruct32BytesHomogeneousDouble2x5Leaf() {
+  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a4 = a4Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+  a1.a0.a0 = -5.0;
+  a1.a1[0].a0 = 6.0;
+  a1.a1[1].a0 = -7.0;
+  a1.a2 = 8.0;
+  a2.a0.a0 = -9.0;
+  a2.a1[0].a0 = 10.0;
+  a2.a1[1].a0 = -11.0;
+  a2.a2 = 12.0;
+  a3.a0.a0 = -13.0;
+  a3.a1[0].a0 = 14.0;
+  a3.a1[1].a0 = -15.0;
+  a3.a2 = 16.0;
+  a4.a0.a0 = -17.0;
+  a4.a1[0].a0 = 18.0;
+  a4.a1[1].a0 = -19.0;
+  a4.a2 = 20.0;
+
+  final result =
+      passStructStruct32BytesHomogeneousDouble2x5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStructStruct16BytesMixed3x10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3),
+        double Function(
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3)>("PassStructStruct16BytesMixed3x10",
+    isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 4 byte aligned.
+void testPassStructStruct16BytesMixed3x10Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[0].a1 = -3;
+  a0.a1[0].a2 = 4;
+  a0.a2[0] = -5;
+  a0.a2[1] = 6;
+  a1.a0.a0 = -7.0;
+  a1.a1[0].a0 = 8.0;
+  a1.a1[0].a1 = -9;
+  a1.a1[0].a2 = 10;
+  a1.a2[0] = -11;
+  a1.a2[1] = 12;
+  a2.a0.a0 = -13.0;
+  a2.a1[0].a0 = 14.0;
+  a2.a1[0].a1 = -15;
+  a2.a1[0].a2 = 16;
+  a2.a2[0] = -17;
+  a2.a2[1] = 18;
+  a3.a0.a0 = -19.0;
+  a3.a1[0].a0 = 20.0;
+  a3.a1[0].a1 = -21;
+  a3.a1[0].a2 = 22;
+  a3.a2[0] = -23;
+  a3.a2[1] = 24;
+  a4.a0.a0 = -25.0;
+  a4.a1[0].a0 = 26.0;
+  a4.a1[0].a1 = -27;
+  a4.a1[0].a2 = 28;
+  a4.a2[0] = -29;
+  a4.a2[1] = 30;
+  a5.a0.a0 = -31.0;
+  a5.a1[0].a0 = 32.0;
+  a5.a1[0].a1 = -33;
+  a5.a1[0].a2 = 34;
+  a5.a2[0] = -35;
+  a5.a2[1] = 36;
+  a6.a0.a0 = -37.0;
+  a6.a1[0].a0 = 38.0;
+  a6.a1[0].a1 = -39;
+  a6.a1[0].a2 = 40;
+  a6.a2[0] = -41;
+  a6.a2[1] = 42;
+  a7.a0.a0 = -43.0;
+  a7.a1[0].a0 = 44.0;
+  a7.a1[0].a1 = -45;
+  a7.a1[0].a2 = 46;
+  a7.a2[0] = -47;
+  a7.a2[1] = 48;
+  a8.a0.a0 = -49.0;
+  a8.a1[0].a0 = 50.0;
+  a8.a1[0].a1 = -51;
+  a8.a1[0].a2 = 52;
+  a8.a2[0] = -53;
+  a8.a2[1] = 54;
+  a9.a0.a0 = -55.0;
+  a9.a1[0].a0 = 56.0;
+  a9.a1[0].a1 = -57;
+  a9.a1[0].a2 = 58;
+  a9.a2[0] = -59;
+  a9.a2[1] = 60;
+
+  final result = passStructStruct16BytesMixed3x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(30.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUint8Struct32BytesInlineArrayMultiDimensionalILeaf =
+    ffiTestFunctions.lookupFunction<
+            Uint32 Function(
+                Uint8,
+                Struct32BytesInlineArrayMultiDimensionalInt,
+                Uint8,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                Uint8,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                Uint8),
+            int Function(
+                int,
+                Struct32BytesInlineArrayMultiDimensionalInt,
+                int,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                int,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                int)>("PassUint8Struct32BytesInlineArrayMultiDimensionalI",
+        isLeaf: true);
+
+/// Test multi dimensional inline array struct as argument.
+void testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct32BytesInlineArrayMultiDimensionalInt>();
+  final Struct32BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
+  int a2;
+  final a3Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
+  final Struct8BytesInlineArrayMultiDimensionalInt a3 = a3Pointer.ref;
+  int a4;
+  final a5Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
+  final Struct8BytesInlineArrayMultiDimensionalInt a5 = a5Pointer.ref;
+  int a6;
+
+  a0 = 1;
+  a1.a0[0][0][0][0][0] = 2;
+  a1.a0[0][0][0][0][1] = 3;
+  a1.a0[0][0][0][1][0] = 4;
+  a1.a0[0][0][0][1][1] = 5;
+  a1.a0[0][0][1][0][0] = 6;
+  a1.a0[0][0][1][0][1] = 7;
+  a1.a0[0][0][1][1][0] = 8;
+  a1.a0[0][0][1][1][1] = 9;
+  a1.a0[0][1][0][0][0] = 10;
+  a1.a0[0][1][0][0][1] = 11;
+  a1.a0[0][1][0][1][0] = 12;
+  a1.a0[0][1][0][1][1] = 13;
+  a1.a0[0][1][1][0][0] = 14;
+  a1.a0[0][1][1][0][1] = 15;
+  a1.a0[0][1][1][1][0] = 16;
+  a1.a0[0][1][1][1][1] = 17;
+  a1.a0[1][0][0][0][0] = 18;
+  a1.a0[1][0][0][0][1] = 19;
+  a1.a0[1][0][0][1][0] = 20;
+  a1.a0[1][0][0][1][1] = 21;
+  a1.a0[1][0][1][0][0] = 22;
+  a1.a0[1][0][1][0][1] = 23;
+  a1.a0[1][0][1][1][0] = 24;
+  a1.a0[1][0][1][1][1] = 25;
+  a1.a0[1][1][0][0][0] = 26;
+  a1.a0[1][1][0][0][1] = 27;
+  a1.a0[1][1][0][1][0] = 28;
+  a1.a0[1][1][0][1][1] = 29;
+  a1.a0[1][1][1][0][0] = 30;
+  a1.a0[1][1][1][0][1] = 31;
+  a1.a0[1][1][1][1][0] = 32;
+  a1.a0[1][1][1][1][1] = 33;
+  a2 = 34;
+  a3.a0[0][0][0] = 35;
+  a3.a0[0][0][1] = 36;
+  a3.a0[0][1][0] = 37;
+  a3.a0[0][1][1] = 38;
+  a3.a0[1][0][0] = 39;
+  a3.a0[1][0][1] = 40;
+  a3.a0[1][1][0] = 41;
+  a3.a0[1][1][1] = 42;
+  a4 = 43;
+  a5.a0[0][0][0] = 44;
+  a5.a0[0][0][1] = 45;
+  a5.a0[0][1][0] = 46;
+  a5.a0[0][1][1] = 47;
+  a5.a0[1][0][0] = 48;
+  a5.a0[1][0][1] = 49;
+  a5.a0[1][1][0] = 50;
+  a5.a0[1][1][1] = 51;
+  a6 = 52;
+
+  final result = passUint8Struct32BytesInlineArrayMultiDimensionalILeaf(
+      a0, a1, a2, a3, a4, a5, a6);
+
+  print("result = $result");
+
+  Expect.equals(1378, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+}
+
+final passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf =
+    ffiTestFunctions.lookupFunction<
+            Uint32 Function(
+                Uint8, Struct4BytesInlineArrayMultiDimensionalInt, Uint8),
+            int Function(int, Struct4BytesInlineArrayMultiDimensionalInt, int)>(
+        "PassUint8Struct4BytesInlineArrayMultiDimensionalIn",
+        isLeaf: true);
+
+/// Test struct in multi dimensional inline array.
+void testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct4BytesInlineArrayMultiDimensionalInt>();
+  final Struct4BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
+  int a2;
+
+  a0 = 1;
+  a1.a0[0][0].a0 = 2;
+  a1.a0[0][1].a0 = -3;
+  a1.a0[1][0].a0 = 4;
+  a1.a0[1][1].a0 = -5;
+  a2 = 6;
+
+  final result =
+      passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(5, result);
+
+  calloc.free(a1Pointer);
+}
+
+final passStruct3BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt),
+    int Function(
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt)>("PassStruct3BytesPackedIntx10", isLeaf: true);
+
+/// Small struct with mis-aligned member.
+void testPassStruct3BytesPackedIntx10Leaf() {
+  final a0Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result =
+      passStruct3BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt),
+    int Function(
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt)>("PassStruct8BytesPackedIntx10", isLeaf: true);
+
+/// Struct with mis-aligned member.
+void testPassStruct8BytesPackedIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a1.a0 = 6;
+  a1.a1 = 7;
+  a1.a2 = 8;
+  a1.a3 = 9;
+  a1.a4 = 10;
+  a2.a0 = 11;
+  a2.a1 = 12;
+  a2.a2 = 13;
+  a2.a3 = 14;
+  a2.a4 = 15;
+  a3.a0 = 16;
+  a3.a1 = 17;
+  a3.a2 = 18;
+  a3.a3 = 19;
+  a3.a4 = 20;
+  a4.a0 = 21;
+  a4.a1 = 22;
+  a4.a2 = 23;
+  a4.a3 = 24;
+  a4.a4 = 25;
+  a5.a0 = 26;
+  a5.a1 = 27;
+  a5.a2 = 28;
+  a5.a3 = 29;
+  a5.a4 = 30;
+  a6.a0 = 31;
+  a6.a1 = 32;
+  a6.a2 = 33;
+  a6.a3 = 34;
+  a6.a4 = 35;
+  a7.a0 = 36;
+  a7.a1 = 37;
+  a7.a2 = 38;
+  a7.a3 = 39;
+  a7.a4 = 40;
+  a8.a0 = 41;
+  a8.a1 = 42;
+  a8.a2 = 43;
+  a8.a3 = 44;
+  a8.a4 = 45;
+  a9.a0 = 46;
+  a9.a1 = 47;
+  a9.a2 = 48;
+  a9.a3 = 49;
+  a9.a4 = 50;
+
+  final result =
+      passStruct8BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(1275, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesPackedMixedx10DoubleInt32x2Leaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Double,
+            Int32,
+            Int32),
+        double Function(
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            double,
+            int,
+            int)>("PassStruct9BytesPackedMixedx10DoubleInt32x2", isLeaf: true);
+
+/// Struct with mis-aligned member.
+/// Tests backfilling of CPU and FPU registers.
+void testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf() {
+  final a0Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a9 = a9Pointer.ref;
+  double a10;
+  int a11;
+  int a12;
+
+  a0.a0 = 1;
+  a0.a1 = 2.0;
+  a1.a0 = 3;
+  a1.a1 = 4.0;
+  a2.a0 = 5;
+  a2.a1 = 6.0;
+  a3.a0 = 7;
+  a3.a1 = 8.0;
+  a4.a0 = 9;
+  a4.a1 = 10.0;
+  a5.a0 = 11;
+  a5.a1 = 12.0;
+  a6.a0 = 13;
+  a6.a1 = 14.0;
+  a7.a0 = 15;
+  a7.a1 = 16.0;
+  a8.a0 = 17;
+  a8.a1 = 18.0;
+  a9.a0 = 19;
+  a9.a1 = 20.0;
+  a10 = -21.0;
+  a11 = 22;
+  a12 = -23;
+
+  final result = passStruct9BytesPackedMixedx10DoubleInt32x2Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
+
+  print("result = $result");
+
+  Expect.approxEquals(188.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct5BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Double Function(Struct5BytesPackedMixed),
+    double Function(
+        Struct5BytesPackedMixed)>("PassStruct5BytesPackedMixed", isLeaf: true);
+
+/// This packed struct happens to have only aligned members.
+void testPassStruct5BytesPackedMixedLeaf() {
+  final a0Pointer = calloc<Struct5BytesPackedMixed>();
+  final Struct5BytesPackedMixed a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+
+  final result = passStruct5BytesPackedMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(1.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedAlignmentStruct5BytesPackedMixedLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(StructNestedAlignmentStruct5BytesPackedMixed),
+            double Function(StructNestedAlignmentStruct5BytesPackedMixed)>(
+        "PassStructNestedAlignmentStruct5BytesPackedMixed",
+        isLeaf: true);
+
+/// Check alignment of packed struct in non-packed struct.
+void testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf() {
+  final a0Pointer = calloc<StructNestedAlignmentStruct5BytesPackedMixed>();
+  final StructNestedAlignmentStruct5BytesPackedMixed a0 = a0Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1.a0 = 2.0;
+  a0.a1.a1 = 3;
+
+  final result = passStructNestedAlignmentStruct5BytesPackedMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(6.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct6BytesInlineArrayIntLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct6BytesInlineArrayInt),
+        double Function(Struct6BytesInlineArrayInt)>(
+    "PassStruct6BytesInlineArrayInt",
+    isLeaf: true);
+
+/// Check alignment of packed struct array in non-packed struct.
+void testPassStruct6BytesInlineArrayIntLeaf() {
+  final a0Pointer = calloc<Struct6BytesInlineArrayInt>();
+  final Struct6BytesInlineArrayInt a0 = a0Pointer.ref;
+
+  a0.a0[0].a0 = -1;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3;
+  a0.a0[1].a1 = 4;
+
+  final result = passStruct6BytesInlineArrayIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(2.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct15BytesInlineArrayMixedLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct15BytesInlineArrayMixed),
+        double Function(Struct15BytesInlineArrayMixed)>(
+    "PassStruct15BytesInlineArrayMixed",
+    isLeaf: true);
+
+/// Check alignment of packed struct array in non-packed struct.
+void testPassStruct15BytesInlineArrayMixedLeaf() {
+  final a0Pointer = calloc<Struct15BytesInlineArrayMixed>();
+  final Struct15BytesInlineArrayMixed a0 = a0Pointer.ref;
+
+  a0.a0[0].a0 = -1.0;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3.0;
+  a0.a0[1].a1 = 4;
+  a0.a0[2].a0 = -5.0;
+  a0.a0[2].a1 = 6;
+
+  final result = passStruct15BytesInlineArrayMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passUnion4BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed),
+    double Function(
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed)>("PassUnion4BytesMixedx10", isLeaf: true);
+
+/// Check placement of mixed integer/float union.
+void testPassUnion4BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a1.a0 = 2;
+  a2.a0 = 3;
+  a3.a0 = 4;
+  a4.a0 = 5;
+  a5.a0 = 6;
+  a6.a0 = 7;
+  a7.a0 = 8;
+  a8.a0 = 9;
+  a9.a0 = 10;
+
+  final result =
+      passUnion4BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(55.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat),
+    double Function(
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat)>("PassUnion8BytesNestedFloatx10", isLeaf: true);
+
+/// Check placement of mixed floats union.
+void testPassUnion8BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a1.a0 = 2.0;
+  a2.a0 = -3.0;
+  a3.a0 = 4.0;
+  a4.a0 = -5.0;
+  a5.a0 = 6.0;
+  a6.a0 = -7.0;
+  a7.a0 = 8.0;
+  a8.a0 = -9.0;
+  a9.a0 = 10.0;
+
+  final result =
+      passUnion8BytesNestedFloatx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(5.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion9BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt),
+    double Function(
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt)>("PassUnion9BytesNestedIntx10", isLeaf: true);
+
+/// Mixed-size union argument.
+void testPassUnion9BytesNestedIntx10Leaf() {
+  final a0Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a1.a0.a0 = 4;
+  a1.a0.a1 = -5;
+  a1.a0.a2 = 6;
+  a2.a0.a0 = -7;
+  a2.a0.a1 = 8;
+  a2.a0.a2 = -9;
+  a3.a0.a0 = 10;
+  a3.a0.a1 = -11;
+  a3.a0.a2 = 12;
+  a4.a0.a0 = -13;
+  a4.a0.a1 = 14;
+  a4.a0.a2 = -15;
+  a5.a0.a0 = 16;
+  a5.a0.a1 = -17;
+  a5.a0.a2 = 18;
+  a6.a0.a0 = -19;
+  a6.a0.a1 = 20;
+  a6.a0.a2 = -21;
+  a7.a0.a0 = 22;
+  a7.a0.a1 = -23;
+  a7.a0.a2 = 24;
+  a8.a0.a0 = -25;
+  a8.a0.a1 = 26;
+  a8.a0.a2 = -27;
+  a9.a0.a0 = 28;
+  a9.a0.a1 = -29;
+  a9.a0.a2 = 30;
+
+  final result =
+      passUnion9BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion16BytesNestedInlineArrayFloatx10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat),
+            double Function(
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat)>(
+        "PassUnion16BytesNestedInlineArrayFloatx10",
+        isLeaf: true);
+
+/// Union with homogenous floats.
+void testPassUnion16BytesNestedInlineArrayFloatx10Leaf() {
+  final a0Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a9 = a9Pointer.ref;
+
+  a0.a0[0] = -1.0;
+  a0.a0[1] = 2.0;
+  a0.a0[2] = -3.0;
+  a0.a0[3] = 4.0;
+  a1.a0[0] = -5.0;
+  a1.a0[1] = 6.0;
+  a1.a0[2] = -7.0;
+  a1.a0[3] = 8.0;
+  a2.a0[0] = -9.0;
+  a2.a0[1] = 10.0;
+  a2.a0[2] = -11.0;
+  a2.a0[3] = 12.0;
+  a3.a0[0] = -13.0;
+  a3.a0[1] = 14.0;
+  a3.a0[2] = -15.0;
+  a3.a0[3] = 16.0;
+  a4.a0[0] = -17.0;
+  a4.a0[1] = 18.0;
+  a4.a0[2] = -19.0;
+  a4.a0[3] = 20.0;
+  a5.a0[0] = -21.0;
+  a5.a0[1] = 22.0;
+  a5.a0[2] = -23.0;
+  a5.a0[3] = 24.0;
+  a6.a0[0] = -25.0;
+  a6.a0[1] = 26.0;
+  a6.a0[2] = -27.0;
+  a6.a0[3] = 28.0;
+  a7.a0[0] = -29.0;
+  a7.a0[1] = 30.0;
+  a7.a0[2] = -31.0;
+  a7.a0[3] = 32.0;
+  a8.a0[0] = -33.0;
+  a8.a0[1] = 34.0;
+  a8.a0[2] = -35.0;
+  a8.a0[3] = 36.0;
+  a9.a0[0] = -37.0;
+  a9.a0[1] = 38.0;
+  a9.a0[2] = -39.0;
+  a9.a0[3] = 40.0;
+
+  final result = passUnion16BytesNestedInlineArrayFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(20.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion16BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Double Function(
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat),
+        double Function(
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat)>("PassUnion16BytesNestedFloatx10",
+    isLeaf: true);
+
+/// Union with homogenous floats.
+void testPassUnion16BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a0.a1 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a0.a1 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a0.a1 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a0.a1 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a0.a1 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a0.a1 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a0.a1 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a0.a1 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a0.a1 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a0.a1 = 20.0;
+
+  final result = passUnion16BytesNestedFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUint8Boolx9Struct10BytesHomogeneousBoolBoolLeaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Int32 Function(Uint8, Bool, Bool, Bool, Bool, Bool, Bool, Bool,
+                    Bool, Bool, Struct10BytesHomogeneousBool, Bool),
+                int Function(
+                    int,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    Struct10BytesHomogeneousBool,
+                    bool)>("PassUint8Boolx9Struct10BytesHomogeneousBoolBool",
+            isLeaf: true);
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+void testPassUint8Boolx9Struct10BytesHomogeneousBoolBoolLeaf() {
+  int a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  final a10Pointer = calloc<Struct10BytesHomogeneousBool>();
+  final Struct10BytesHomogeneousBool a10 = a10Pointer.ref;
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0 = true;
+  a10.a1 = false;
+  a10.a2 = true;
+  a10.a3 = false;
+  a10.a4 = true;
+  a10.a5 = false;
+  a10.a6 = true;
+  a10.a7 = false;
+  a10.a8 = true;
+  a10.a9 = false;
+  a11 = true;
+
+  final result = passUint8Boolx9Struct10BytesHomogeneousBoolBoolLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  print("result = $result");
+
+  Expect.equals(11, result);
+
+  calloc.free(a10Pointer);
+}
+
+final passUint8Boolx9Struct10BytesInlineArrayBoolBoolLeaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Int32 Function(Uint8, Bool, Bool, Bool, Bool, Bool, Bool, Bool,
+                    Bool, Bool, Struct10BytesInlineArrayBool, Bool),
+                int Function(
+                    int,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    Struct10BytesInlineArrayBool,
+                    bool)>("PassUint8Boolx9Struct10BytesInlineArrayBoolBool",
+            isLeaf: true);
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+void testPassUint8Boolx9Struct10BytesInlineArrayBoolBoolLeaf() {
+  int a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  final a10Pointer = calloc<Struct10BytesInlineArrayBool>();
+  final Struct10BytesInlineArrayBool a10 = a10Pointer.ref;
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0[0] = true;
+  a10.a0[1] = false;
+  a10.a0[2] = true;
+  a10.a0[3] = false;
+  a10.a0[4] = true;
+  a10.a0[5] = false;
+  a10.a0[6] = true;
+  a10.a0[7] = false;
+  a10.a0[8] = true;
+  a10.a0[9] = false;
+  a11 = true;
+
+  final result = passUint8Boolx9Struct10BytesInlineArrayBoolBoolLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  print("result = $result");
+
+  Expect.equals(11, result);
+
+  calloc.free(a10Pointer);
+}
+
+final passUint8Struct1ByteBoolLeaf = ffiTestFunctions.lookupFunction<
+    Bool Function(Uint8, Struct1ByteBool),
+    bool Function(
+        int, Struct1ByteBool)>("PassUint8Struct1ByteBool", isLeaf: true);
+
+/// Returning a bool.
+void testPassUint8Struct1ByteBoolLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct1ByteBool>();
+  final Struct1ByteBool a1 = a1Pointer.ref;
+
+  a0 = 1;
+  a1.a0 = false;
+
+  final result = passUint8Struct1ByteBoolLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(1 % 2 != 0, result);
+
+  calloc.free(a1Pointer);
+}
+
+final returnStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct1ByteInt Function(Int8),
+    Struct1ByteInt Function(int)>("ReturnStruct1ByteInt", isLeaf: true);
+
+/// Smallest struct with data.
+void testReturnStruct1ByteIntLeaf() {
+  int a0;
+
+  a0 = -1;
+
+  final result = returnStruct1ByteIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+}
+
+final returnStruct3BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8),
+    Struct3BytesHomogeneousUint8 Function(
+        int, int, int)>("ReturnStruct3BytesHomogeneousUint8", isLeaf: true);
+
+/// Smaller than word size return value on all architectures.
+void testReturnStruct3BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+
+  final result = returnStruct3BytesHomogeneousUint8Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct3BytesInt2ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesInt2ByteAligned Function(Int16, Int8),
+    Struct3BytesInt2ByteAligned Function(
+        int, int)>("ReturnStruct3BytesInt2ByteAligned", isLeaf: true);
+
+/// Smaller than word size return value on all architectures.
+/// With alignment rules taken into account size is 4 bytes.
+void testReturnStruct3BytesInt2ByteAlignedLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct3BytesInt2ByteAlignedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct4BytesHomogeneousInt16Leaf = ffiTestFunctions.lookupFunction<
+    Struct4BytesHomogeneousInt16 Function(Int16, Int16),
+    Struct4BytesHomogeneousInt16 Function(
+        int, int)>("ReturnStruct4BytesHomogeneousInt16", isLeaf: true);
+
+/// Word size return value on 32 bit architectures..
+void testReturnStruct4BytesHomogeneousInt16Leaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct4BytesHomogeneousInt16Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct7BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct7BytesHomogeneousUint8 Function(
+        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
+    Struct7BytesHomogeneousUint8 Function(int, int, int, int, int, int,
+        int)>("ReturnStruct7BytesHomogeneousUint8", isLeaf: true);
+
+/// Non-wordsize return value.
+void testReturnStruct7BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+
+  final result =
+      returnStruct7BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5, a6);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+}
+
+final returnStruct7BytesInt4ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
+    Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8),
+    Struct7BytesInt4ByteAligned Function(
+        int, int, int)>("ReturnStruct7BytesInt4ByteAligned", isLeaf: true);
+
+/// Non-wordsize return value.
+/// With alignment rules taken into account size is 8 bytes.
+void testReturnStruct7BytesInt4ByteAlignedLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct7BytesInt4ByteAlignedLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesInt Function(Int16, Int16, Int32),
+    Struct8BytesInt Function(
+        int, int, int)>("ReturnStruct8BytesInt", isLeaf: true);
+
+/// Return value in integer registers on many architectures.
+void testReturnStruct8BytesIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct8BytesIntLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesHomogeneousFloat Function(Float, Float),
+    Struct8BytesHomogeneousFloat Function(
+        double, double)>("ReturnStruct8BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FP registers on many architectures.
+void testReturnStruct8BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+
+  a0 = -1.0;
+  a1 = 2.0;
+
+  final result = returnStruct8BytesHomogeneousFloatLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+}
+
+final returnStruct8BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesMixed Function(Float, Int16, Int16),
+    Struct8BytesMixed Function(
+        double, int, int)>("ReturnStruct8BytesMixed", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+void testReturnStruct8BytesMixedLeaf() {
+  double a0;
+  int a1;
+  int a2;
+
+  a0 = -1.0;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct8BytesMixedLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct9BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct9BytesHomogeneousUint8 Function(
+        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
+    Struct9BytesHomogeneousUint8 Function(int, int, int, int, int, int, int,
+        int, int)>("ReturnStruct9BytesHomogeneousUint8", isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is the right size and that
+/// dart:ffi trampolines do not write outside this size.
+void testReturnStruct9BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+
+  final result = returnStruct9BytesHomogeneousUint8Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+}
+
+final returnStruct9BytesInt4Or8ByteAlignedLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct9BytesInt4Or8ByteAligned Function(Int64, Int8),
+        Struct9BytesInt4Or8ByteAligned Function(
+            int, int)>("ReturnStruct9BytesInt4Or8ByteAligned", isLeaf: true);
+
+/// Return value in two integer registers on x64.
+/// With alignment rules taken into account size is 12 or 16 bytes.
+void testReturnStruct9BytesInt4Or8ByteAlignedLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct9BytesInt4Or8ByteAlignedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct12BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct12BytesHomogeneousFloat Function(Float, Float, Float),
+    Struct12BytesHomogeneousFloat Function(double, double,
+        double)>("ReturnStruct12BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FPU registers, but does not use all registers on arm hardfp
+/// and arm64.
+void testReturnStruct12BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+
+  final result = returnStruct12BytesHomogeneousFloatLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+}
+
+final returnStruct16BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float),
+    Struct16BytesHomogeneousFloat Function(double, double, double,
+        double)>("ReturnStruct16BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FPU registers on arm hardfp and arm64.
+void testReturnStruct16BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+
+  final result = returnStruct16BytesHomogeneousFloatLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+}
+
+final returnStruct16BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesMixed Function(Double, Int64),
+    Struct16BytesMixed Function(
+        double, int)>("ReturnStruct16BytesMixed", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+void testReturnStruct16BytesMixedLeaf() {
+  double a0;
+  int a1;
+
+  a0 = -1.0;
+  a1 = 2;
+
+  final result = returnStruct16BytesMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct16BytesMixed2Leaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesMixed2 Function(Float, Float, Float, Int32),
+    Struct16BytesMixed2 Function(double, double, double,
+        int)>("ReturnStruct16BytesMixed2", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+/// The integer register contains half float half int.
+void testReturnStruct16BytesMixed2Leaf() {
+  double a0;
+  double a1;
+  double a2;
+  int a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4;
+
+  final result = returnStruct16BytesMixed2Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+}
+
+final returnStruct17BytesIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct17BytesInt Function(Int64, Int64, Int8),
+    Struct17BytesInt Function(
+        int, int, int)>("ReturnStruct17BytesInt", isLeaf: true);
+
+/// Rerturn value returned in preallocated space passed by pointer on most ABIs.
+/// Is non word size on purpose, to test that structs are rounded up to word size
+/// on all ABIs.
+void testReturnStruct17BytesIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct17BytesIntLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct19BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct19BytesHomogeneousUint8 Function(
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8),
+    Struct19BytesHomogeneousUint8 Function(
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int)>("ReturnStruct19BytesHomogeneousUint8", isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is the right size and that
+/// dart:ffi trampolines do not write outside this size.
+void testReturnStruct19BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+  int a9;
+  int a10;
+  int a11;
+  int a12;
+  int a13;
+  int a14;
+  int a15;
+  int a16;
+  int a17;
+  int a18;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+  a9 = 10;
+  a10 = 11;
+  a11 = 12;
+  a12 = 13;
+  a13 = 14;
+  a14 = 15;
+  a15 = 16;
+  a16 = 17;
+  a17 = 18;
+  a18 = 19;
+
+  final result = returnStruct19BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5,
+      a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+  Expect.equals(a9, result.a9);
+  Expect.equals(a10, result.a10);
+  Expect.equals(a11, result.a11);
+  Expect.equals(a12, result.a12);
+  Expect.equals(a13, result.a13);
+  Expect.equals(a14, result.a14);
+  Expect.equals(a15, result.a15);
+  Expect.equals(a16, result.a16);
+  Expect.equals(a17, result.a17);
+  Expect.equals(a18, result.a18);
+}
+
+final returnStruct20BytesHomogeneousInt32Leaf = ffiTestFunctions.lookupFunction<
+    Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32, Int32),
+    Struct20BytesHomogeneousInt32 Function(int, int, int, int,
+        int)>("ReturnStruct20BytesHomogeneousInt32", isLeaf: true);
+
+/// Return value too big to go in cpu registers on arm64.
+void testReturnStruct20BytesHomogeneousInt32Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+
+  final result = returnStruct20BytesHomogeneousInt32Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+}
+
+final returnStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float, Float),
+    Struct20BytesHomogeneousFloat Function(double, double, double, double,
+        double)>("ReturnStruct20BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
+void testReturnStruct20BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+
+  final result = returnStruct20BytesHomogeneousFloatLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+  Expect.approxEquals(a4, result.a4);
+}
+
+final returnStruct32BytesHomogeneousDoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct32BytesHomogeneousDouble Function(Double, Double, Double, Double),
+        Struct32BytesHomogeneousDouble Function(double, double, double,
+            double)>("ReturnStruct32BytesHomogeneousDouble", isLeaf: true);
+
+/// Return value in FPU registers on arm64.
+void testReturnStruct32BytesHomogeneousDoubleLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+
+  final result = returnStruct32BytesHomogeneousDoubleLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+}
+
+final returnStruct40BytesHomogeneousDoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct40BytesHomogeneousDouble Function(
+            Double, Double, Double, Double, Double),
+        Struct40BytesHomogeneousDouble Function(double, double, double, double,
+            double)>("ReturnStruct40BytesHomogeneousDouble", isLeaf: true);
+
+/// Return value too big to go in FPU registers on arm64.
+void testReturnStruct40BytesHomogeneousDoubleLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+
+  final result = returnStruct40BytesHomogeneousDoubleLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+  Expect.approxEquals(a4, result.a4);
+}
+
+final returnStruct1024BytesHomogeneousUint64Leaf =
+    ffiTestFunctions.lookupFunction<
+        Struct1024BytesHomogeneousUint64 Function(
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64),
+        Struct1024BytesHomogeneousUint64 Function(
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int)>("ReturnStruct1024BytesHomogeneousUint64", isLeaf: true);
+
+/// Test 1kb struct.
+void testReturnStruct1024BytesHomogeneousUint64Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+  int a9;
+  int a10;
+  int a11;
+  int a12;
+  int a13;
+  int a14;
+  int a15;
+  int a16;
+  int a17;
+  int a18;
+  int a19;
+  int a20;
+  int a21;
+  int a22;
+  int a23;
+  int a24;
+  int a25;
+  int a26;
+  int a27;
+  int a28;
+  int a29;
+  int a30;
+  int a31;
+  int a32;
+  int a33;
+  int a34;
+  int a35;
+  int a36;
+  int a37;
+  int a38;
+  int a39;
+  int a40;
+  int a41;
+  int a42;
+  int a43;
+  int a44;
+  int a45;
+  int a46;
+  int a47;
+  int a48;
+  int a49;
+  int a50;
+  int a51;
+  int a52;
+  int a53;
+  int a54;
+  int a55;
+  int a56;
+  int a57;
+  int a58;
+  int a59;
+  int a60;
+  int a61;
+  int a62;
+  int a63;
+  int a64;
+  int a65;
+  int a66;
+  int a67;
+  int a68;
+  int a69;
+  int a70;
+  int a71;
+  int a72;
+  int a73;
+  int a74;
+  int a75;
+  int a76;
+  int a77;
+  int a78;
+  int a79;
+  int a80;
+  int a81;
+  int a82;
+  int a83;
+  int a84;
+  int a85;
+  int a86;
+  int a87;
+  int a88;
+  int a89;
+  int a90;
+  int a91;
+  int a92;
+  int a93;
+  int a94;
+  int a95;
+  int a96;
+  int a97;
+  int a98;
+  int a99;
+  int a100;
+  int a101;
+  int a102;
+  int a103;
+  int a104;
+  int a105;
+  int a106;
+  int a107;
+  int a108;
+  int a109;
+  int a110;
+  int a111;
+  int a112;
+  int a113;
+  int a114;
+  int a115;
+  int a116;
+  int a117;
+  int a118;
+  int a119;
+  int a120;
+  int a121;
+  int a122;
+  int a123;
+  int a124;
+  int a125;
+  int a126;
+  int a127;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+  a9 = 10;
+  a10 = 11;
+  a11 = 12;
+  a12 = 13;
+  a13 = 14;
+  a14 = 15;
+  a15 = 16;
+  a16 = 17;
+  a17 = 18;
+  a18 = 19;
+  a19 = 20;
+  a20 = 21;
+  a21 = 22;
+  a22 = 23;
+  a23 = 24;
+  a24 = 25;
+  a25 = 26;
+  a26 = 27;
+  a27 = 28;
+  a28 = 29;
+  a29 = 30;
+  a30 = 31;
+  a31 = 32;
+  a32 = 33;
+  a33 = 34;
+  a34 = 35;
+  a35 = 36;
+  a36 = 37;
+  a37 = 38;
+  a38 = 39;
+  a39 = 40;
+  a40 = 41;
+  a41 = 42;
+  a42 = 43;
+  a43 = 44;
+  a44 = 45;
+  a45 = 46;
+  a46 = 47;
+  a47 = 48;
+  a48 = 49;
+  a49 = 50;
+  a50 = 51;
+  a51 = 52;
+  a52 = 53;
+  a53 = 54;
+  a54 = 55;
+  a55 = 56;
+  a56 = 57;
+  a57 = 58;
+  a58 = 59;
+  a59 = 60;
+  a60 = 61;
+  a61 = 62;
+  a62 = 63;
+  a63 = 64;
+  a64 = 65;
+  a65 = 66;
+  a66 = 67;
+  a67 = 68;
+  a68 = 69;
+  a69 = 70;
+  a70 = 71;
+  a71 = 72;
+  a72 = 73;
+  a73 = 74;
+  a74 = 75;
+  a75 = 76;
+  a76 = 77;
+  a77 = 78;
+  a78 = 79;
+  a79 = 80;
+  a80 = 81;
+  a81 = 82;
+  a82 = 83;
+  a83 = 84;
+  a84 = 85;
+  a85 = 86;
+  a86 = 87;
+  a87 = 88;
+  a88 = 89;
+  a89 = 90;
+  a90 = 91;
+  a91 = 92;
+  a92 = 93;
+  a93 = 94;
+  a94 = 95;
+  a95 = 96;
+  a96 = 97;
+  a97 = 98;
+  a98 = 99;
+  a99 = 100;
+  a100 = 101;
+  a101 = 102;
+  a102 = 103;
+  a103 = 104;
+  a104 = 105;
+  a105 = 106;
+  a106 = 107;
+  a107 = 108;
+  a108 = 109;
+  a109 = 110;
+  a110 = 111;
+  a111 = 112;
+  a112 = 113;
+  a113 = 114;
+  a114 = 115;
+  a115 = 116;
+  a116 = 117;
+  a117 = 118;
+  a118 = 119;
+  a119 = 120;
+  a120 = 121;
+  a121 = 122;
+  a122 = 123;
+  a123 = 124;
+  a124 = 125;
+  a125 = 126;
+  a126 = 127;
+  a127 = 128;
+
+  final result = returnStruct1024BytesHomogeneousUint64Leaf(
+      a0,
+      a1,
+      a2,
+      a3,
+      a4,
+      a5,
+      a6,
+      a7,
+      a8,
+      a9,
+      a10,
+      a11,
+      a12,
+      a13,
+      a14,
+      a15,
+      a16,
+      a17,
+      a18,
+      a19,
+      a20,
+      a21,
+      a22,
+      a23,
+      a24,
+      a25,
+      a26,
+      a27,
+      a28,
+      a29,
+      a30,
+      a31,
+      a32,
+      a33,
+      a34,
+      a35,
+      a36,
+      a37,
+      a38,
+      a39,
+      a40,
+      a41,
+      a42,
+      a43,
+      a44,
+      a45,
+      a46,
+      a47,
+      a48,
+      a49,
+      a50,
+      a51,
+      a52,
+      a53,
+      a54,
+      a55,
+      a56,
+      a57,
+      a58,
+      a59,
+      a60,
+      a61,
+      a62,
+      a63,
+      a64,
+      a65,
+      a66,
+      a67,
+      a68,
+      a69,
+      a70,
+      a71,
+      a72,
+      a73,
+      a74,
+      a75,
+      a76,
+      a77,
+      a78,
+      a79,
+      a80,
+      a81,
+      a82,
+      a83,
+      a84,
+      a85,
+      a86,
+      a87,
+      a88,
+      a89,
+      a90,
+      a91,
+      a92,
+      a93,
+      a94,
+      a95,
+      a96,
+      a97,
+      a98,
+      a99,
+      a100,
+      a101,
+      a102,
+      a103,
+      a104,
+      a105,
+      a106,
+      a107,
+      a108,
+      a109,
+      a110,
+      a111,
+      a112,
+      a113,
+      a114,
+      a115,
+      a116,
+      a117,
+      a118,
+      a119,
+      a120,
+      a121,
+      a122,
+      a123,
+      a124,
+      a125,
+      a126,
+      a127);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+  Expect.equals(a9, result.a9);
+  Expect.equals(a10, result.a10);
+  Expect.equals(a11, result.a11);
+  Expect.equals(a12, result.a12);
+  Expect.equals(a13, result.a13);
+  Expect.equals(a14, result.a14);
+  Expect.equals(a15, result.a15);
+  Expect.equals(a16, result.a16);
+  Expect.equals(a17, result.a17);
+  Expect.equals(a18, result.a18);
+  Expect.equals(a19, result.a19);
+  Expect.equals(a20, result.a20);
+  Expect.equals(a21, result.a21);
+  Expect.equals(a22, result.a22);
+  Expect.equals(a23, result.a23);
+  Expect.equals(a24, result.a24);
+  Expect.equals(a25, result.a25);
+  Expect.equals(a26, result.a26);
+  Expect.equals(a27, result.a27);
+  Expect.equals(a28, result.a28);
+  Expect.equals(a29, result.a29);
+  Expect.equals(a30, result.a30);
+  Expect.equals(a31, result.a31);
+  Expect.equals(a32, result.a32);
+  Expect.equals(a33, result.a33);
+  Expect.equals(a34, result.a34);
+  Expect.equals(a35, result.a35);
+  Expect.equals(a36, result.a36);
+  Expect.equals(a37, result.a37);
+  Expect.equals(a38, result.a38);
+  Expect.equals(a39, result.a39);
+  Expect.equals(a40, result.a40);
+  Expect.equals(a41, result.a41);
+  Expect.equals(a42, result.a42);
+  Expect.equals(a43, result.a43);
+  Expect.equals(a44, result.a44);
+  Expect.equals(a45, result.a45);
+  Expect.equals(a46, result.a46);
+  Expect.equals(a47, result.a47);
+  Expect.equals(a48, result.a48);
+  Expect.equals(a49, result.a49);
+  Expect.equals(a50, result.a50);
+  Expect.equals(a51, result.a51);
+  Expect.equals(a52, result.a52);
+  Expect.equals(a53, result.a53);
+  Expect.equals(a54, result.a54);
+  Expect.equals(a55, result.a55);
+  Expect.equals(a56, result.a56);
+  Expect.equals(a57, result.a57);
+  Expect.equals(a58, result.a58);
+  Expect.equals(a59, result.a59);
+  Expect.equals(a60, result.a60);
+  Expect.equals(a61, result.a61);
+  Expect.equals(a62, result.a62);
+  Expect.equals(a63, result.a63);
+  Expect.equals(a64, result.a64);
+  Expect.equals(a65, result.a65);
+  Expect.equals(a66, result.a66);
+  Expect.equals(a67, result.a67);
+  Expect.equals(a68, result.a68);
+  Expect.equals(a69, result.a69);
+  Expect.equals(a70, result.a70);
+  Expect.equals(a71, result.a71);
+  Expect.equals(a72, result.a72);
+  Expect.equals(a73, result.a73);
+  Expect.equals(a74, result.a74);
+  Expect.equals(a75, result.a75);
+  Expect.equals(a76, result.a76);
+  Expect.equals(a77, result.a77);
+  Expect.equals(a78, result.a78);
+  Expect.equals(a79, result.a79);
+  Expect.equals(a80, result.a80);
+  Expect.equals(a81, result.a81);
+  Expect.equals(a82, result.a82);
+  Expect.equals(a83, result.a83);
+  Expect.equals(a84, result.a84);
+  Expect.equals(a85, result.a85);
+  Expect.equals(a86, result.a86);
+  Expect.equals(a87, result.a87);
+  Expect.equals(a88, result.a88);
+  Expect.equals(a89, result.a89);
+  Expect.equals(a90, result.a90);
+  Expect.equals(a91, result.a91);
+  Expect.equals(a92, result.a92);
+  Expect.equals(a93, result.a93);
+  Expect.equals(a94, result.a94);
+  Expect.equals(a95, result.a95);
+  Expect.equals(a96, result.a96);
+  Expect.equals(a97, result.a97);
+  Expect.equals(a98, result.a98);
+  Expect.equals(a99, result.a99);
+  Expect.equals(a100, result.a100);
+  Expect.equals(a101, result.a101);
+  Expect.equals(a102, result.a102);
+  Expect.equals(a103, result.a103);
+  Expect.equals(a104, result.a104);
+  Expect.equals(a105, result.a105);
+  Expect.equals(a106, result.a106);
+  Expect.equals(a107, result.a107);
+  Expect.equals(a108, result.a108);
+  Expect.equals(a109, result.a109);
+  Expect.equals(a110, result.a110);
+  Expect.equals(a111, result.a111);
+  Expect.equals(a112, result.a112);
+  Expect.equals(a113, result.a113);
+  Expect.equals(a114, result.a114);
+  Expect.equals(a115, result.a115);
+  Expect.equals(a116, result.a116);
+  Expect.equals(a117, result.a117);
+  Expect.equals(a118, result.a118);
+  Expect.equals(a119, result.a119);
+  Expect.equals(a120, result.a120);
+  Expect.equals(a121, result.a121);
+  Expect.equals(a122, result.a122);
+  Expect.equals(a123, result.a123);
+  Expect.equals(a124, result.a124);
+  Expect.equals(a125, result.a125);
+  Expect.equals(a126, result.a126);
+  Expect.equals(a127, result.a127);
+}
+
+final returnStruct3BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesPackedInt Function(Int8, Int16),
+    Struct3BytesPackedInt Function(
+        int, int)>("ReturnStruct3BytesPackedInt", isLeaf: true);
+
+/// Small struct with mis-aligned member.
+void testReturnStruct3BytesPackedIntLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct3BytesPackedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct8BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8),
+    Struct8BytesPackedInt Function(
+        int, int, int, int, int)>("ReturnStruct8BytesPackedInt", isLeaf: true);
+
+/// Struct with mis-aligned member.
+void testReturnStruct8BytesPackedIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+
+  final result = returnStruct8BytesPackedIntLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+}
+
+final returnStruct9BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct9BytesPackedMixed Function(Uint8, Double),
+    Struct9BytesPackedMixed Function(
+        int, double)>("ReturnStruct9BytesPackedMixed", isLeaf: true);
+
+/// Struct with mis-aligned member.
+/// Tests backfilling of CPU and FPU registers.
+void testReturnStruct9BytesPackedMixedLeaf() {
+  int a0;
+  double a1;
+
+  a0 = 1;
+  a1 = 2.0;
+
+  final result = returnStruct9BytesPackedMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+}
+
+final returnUnion4BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Union4BytesMixed Function(Uint32),
+    Union4BytesMixed Function(int)>("ReturnUnion4BytesMixed", isLeaf: true);
+
+/// Returning a mixed integer/float union.
+void testReturnUnion4BytesMixedLeaf() {
+  int a0;
+
+  a0 = 1;
+
+  final result = returnUnion4BytesMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+}
+
+final returnUnion8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+    Union8BytesNestedFloat Function(Double),
+    Union8BytesNestedFloat Function(
+        double)>("ReturnUnion8BytesNestedFloat", isLeaf: true);
+
+/// Returning a floating point only union.
+void testReturnUnion8BytesNestedFloatLeaf() {
+  double a0;
+
+  a0 = -1.0;
+
+  final result = returnUnion8BytesNestedFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+}
+
+final returnUnion9BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Union9BytesNestedInt Function(Struct8BytesInt),
+    Union9BytesNestedInt Function(
+        Struct8BytesInt)>("ReturnUnion9BytesNestedInt", isLeaf: true);
+
+/// Returning a mixed-size union.
+void testReturnUnion9BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = returnUnion9BytesNestedIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnUnion16BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat),
+        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>(
+    "ReturnUnion16BytesNestedFloat",
+    isLeaf: true);
+
+/// Returning union with homogenous floats.
+void testReturnUnion16BytesNestedFloatLeaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+
+  final result = returnUnion16BytesNestedFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a0.a1, result.a0.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct1ByteInt Function(Struct1ByteInt),
+    Struct1ByteInt Function(
+        Struct1ByteInt)>("ReturnStructArgumentStruct1ByteInt", isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed in int registers in most ABIs.
+void testReturnStructArgumentStruct1ByteIntLeaf() {
+  final a0Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+
+  final result = returnStructArgumentStruct1ByteIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentInt32x8Struct1ByteIntLeaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Struct1ByteInt Function(Int32, Int32, Int32, Int32, Int32, Int32,
+                    Int32, Int32, Struct1ByteInt),
+                Struct1ByteInt Function(
+                    int, int, int, int, int, int, int, int, Struct1ByteInt)>(
+            "ReturnStructArgumentInt32x8Struct1ByteInt",
+            isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed on stack on all ABIs.
+void testReturnStructArgumentInt32x8Struct1ByteIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  final a8Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a8 = a8Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8.a0 = -9;
+
+  final result = returnStructArgumentInt32x8Struct1ByteIntLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a8.a0, result.a0);
+
+  calloc.free(a8Pointer);
+}
+
+final returnStructArgumentStruct8BytesHomogeneousFloatLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct8BytesHomogeneousFloat Function(Struct8BytesHomogeneousFloat),
+            Struct8BytesHomogeneousFloat Function(
+                Struct8BytesHomogeneousFloat)>(
+        "ReturnStructArgumentStruct8BytesHomogeneousFloat",
+        isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed in float registers in most ABIs.
+void testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+
+  final result = returnStructArgumentStruct8BytesHomogeneousFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0);
+  Expect.approxEquals(a0.a1, result.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStruct20BytesHomogeneousInt32Leaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Struct20BytesHomogeneousInt32 Function(
+                    Struct20BytesHomogeneousInt32),
+                Struct20BytesHomogeneousInt32 Function(
+                    Struct20BytesHomogeneousInt32)>(
+            "ReturnStructArgumentStruct20BytesHomogeneousInt32",
+            isLeaf: true);
+
+/// On arm64, both argument and return value are passed in by pointer.
+void testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a0.a3 = 4;
+  a0.a4 = -5;
+
+  final result = returnStructArgumentStruct20BytesHomogeneousInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0);
+  Expect.equals(a0.a1, result.a1);
+  Expect.equals(a0.a2, result.a2);
+  Expect.equals(a0.a3, result.a3);
+  Expect.equals(a0.a4, result.a4);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32,
+                Int32, Int32, Int32, Int32, Struct20BytesHomogeneousInt32),
+            Struct20BytesHomogeneousInt32 Function(int, int, int, int, int, int,
+                int, int, Struct20BytesHomogeneousInt32)>(
+        "ReturnStructArgumentInt32x8Struct20BytesHomogeneou",
+        isLeaf: true);
+
+/// On arm64, both argument and return value are passed in by pointer.
+/// Ints exhaust registers, so that pointer is passed on stack.
+void testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8.a0 = -9;
+  a8.a1 = 10;
+  a8.a2 = -11;
+  a8.a3 = 12;
+  a8.a4 = -13;
+
+  final result = returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a8.a0, result.a0);
+  Expect.equals(a8.a1, result.a1);
+  Expect.equals(a8.a2, result.a2);
+  Expect.equals(a8.a3, result.a3);
+  Expect.equals(a8.a4, result.a4);
+
+  calloc.free(a8Pointer);
+}
+
+final returnStructArgumentStruct8BytesInlineArrayIntLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt),
+            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt)>(
+        "ReturnStructArgumentStruct8BytesInlineArrayInt",
+        isLeaf: true);
+
+/// Test returning struct with inline array.
+void testReturnStructArgumentStruct8BytesInlineArrayIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+
+  final result = returnStructArgumentStruct8BytesInlineArrayIntLeaf(a0);
+
+  print("result = $result");
+
+  for (int i = 0; i < 8; i++) {
+    Expect.equals(a0.a0[i], result.a0[i]);
+  }
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct16BytesHomogeneousLeaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct16BytesHomogeneousFloat2 Function(
+                StructStruct16BytesHomogeneousFloat2),
+            StructStruct16BytesHomogeneousFloat2 Function(
+                StructStruct16BytesHomogeneousFloat2)>(
+        "ReturnStructArgumentStructStruct16BytesHomogeneous",
+        isLeaf: true);
+
+/// Return value in FPU registers on arm hardfp and arm64.
+void testReturnStructArgumentStructStruct16BytesHomogeneousLeaf() {
+  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+
+  final result = returnStructArgumentStructStruct16BytesHomogeneousLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 2; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+  }
+  Expect.approxEquals(a0.a2, result.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct32BytesHomogeneousLeaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct32BytesHomogeneousDouble2 Function(
+                StructStruct32BytesHomogeneousDouble2),
+            StructStruct32BytesHomogeneousDouble2 Function(
+                StructStruct32BytesHomogeneousDouble2)>(
+        "ReturnStructArgumentStructStruct32BytesHomogeneous",
+        isLeaf: true);
+
+/// Return value in FPU registers on arm64.
+void testReturnStructArgumentStructStruct32BytesHomogeneousLeaf() {
+  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+
+  final result = returnStructArgumentStructStruct32BytesHomogeneousLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 2; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+  }
+  Expect.approxEquals(a0.a2, result.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct16BytesMixed3Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3),
+            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3)>(
+        "ReturnStructArgumentStructStruct16BytesMixed3",
+        isLeaf: true);
+
+/// On x64 Linux, return value is split over FP and int registers.
+void testReturnStructArgumentStructStruct16BytesMixed3Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[0].a1 = -3;
+  a0.a1[0].a2 = 4;
+  a0.a2[0] = -5;
+  a0.a2[1] = 6;
+
+  final result = returnStructArgumentStructStruct16BytesMixed3Leaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 1; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+    Expect.equals(a0.a1[i].a1, result.a1[i].a1);
+    Expect.equals(a0.a1[i].a2, result.a1[i].a2);
+  }
+  for (int i = 0; i < 2; i++) {
+    Expect.equals(a0.a2[i], result.a2[i]);
+  }
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt16 Function(Int8, Int16, Int8),
+    StructAlignmentInt16 Function(
+        int, int, int)>("ReturnStructAlignmentInt16", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testReturnStructAlignmentInt16Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt16Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt32 Function(Int8, Int32, Int8),
+    StructAlignmentInt32 Function(
+        int, int, int)>("ReturnStructAlignmentInt32", isLeaf: true);
+
+/// Test alignment and padding of 32 byte int within struct.
+void testReturnStructAlignmentInt32Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt32Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt64 Function(Int8, Int64, Int8),
+    StructAlignmentInt64 Function(
+        int, int, int)>("ReturnStructAlignmentInt64", isLeaf: true);
+
+/// Test alignment and padding of 64 byte int within struct.
+void testReturnStructAlignmentInt64Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt64Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+        Struct8BytesNestedInt Function(
+            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16),
+        Struct8BytesNestedInt Function(
+            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16)>(
+    "ReturnStruct8BytesNestedInt",
+    isLeaf: true);
+
+/// Simple nested struct.
+void testReturnStruct8BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+
+  final result = returnStruct8BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedFloat Function(Struct4BytesFloat, Struct4BytesFloat),
+    Struct8BytesNestedFloat Function(Struct4BytesFloat,
+        Struct4BytesFloat)>("ReturnStruct8BytesNestedFloat", isLeaf: true);
+
+/// Simple nested struct with floats.
+void testReturnStruct8BytesNestedFloatLeaf() {
+  final a0Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a1 = a1Pointer.ref;
+
+  a0.a0 = -1.0;
+  a1.a0 = 2.0;
+
+  final result = returnStruct8BytesNestedFloatLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a1.a0, result.a1.a0);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct8BytesNestedFloat2Leaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedFloat2 Function(Struct4BytesFloat, Float),
+    Struct8BytesNestedFloat2 Function(Struct4BytesFloat,
+        double)>("ReturnStruct8BytesNestedFloat2", isLeaf: true);
+
+/// The nesting is irregular, testing homogenous float rules on arm and arm64,
+/// and the fpu register usage on x64.
+void testReturnStruct8BytesNestedFloat2Leaf() {
+  final a0Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a0 = a0Pointer.ref;
+  double a1;
+
+  a0.a0 = -1.0;
+  a1 = 2.0;
+
+  final result = returnStruct8BytesNestedFloat2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a1, result.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStruct8BytesNestedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedMixed Function(
+        Struct4BytesHomogeneousInt16, Struct4BytesFloat),
+    Struct8BytesNestedMixed Function(Struct4BytesHomogeneousInt16,
+        Struct4BytesFloat)>("ReturnStruct8BytesNestedMixed", isLeaf: true);
+
+/// Simple nested struct with mixed members.
+void testReturnStruct8BytesNestedMixedLeaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3.0;
+
+  final result = returnStruct8BytesNestedMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.approxEquals(a1.a0, result.a1.a0);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct16BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesNestedInt Function(
+        Struct8BytesNestedInt, Struct8BytesNestedInt),
+    Struct16BytesNestedInt Function(Struct8BytesNestedInt,
+        Struct8BytesNestedInt)>("ReturnStruct16BytesNestedInt", isLeaf: true);
+
+/// Deeper nested struct to test recursive member access.
+void testReturnStruct16BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3;
+  a0.a1.a1 = 4;
+  a1.a0.a0 = -5;
+  a1.a0.a1 = 6;
+  a1.a1.a0 = -7;
+  a1.a1.a1 = 8;
+
+  final result = returnStruct16BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0.a0, result.a0.a0.a0);
+  Expect.equals(a0.a0.a1, result.a0.a0.a1);
+  Expect.equals(a0.a1.a0, result.a0.a1.a0);
+  Expect.equals(a0.a1.a1, result.a0.a1.a1);
+  Expect.equals(a1.a0.a0, result.a1.a0.a0);
+  Expect.equals(a1.a0.a1, result.a1.a0.a1);
+  Expect.equals(a1.a1.a0, result.a1.a1.a0);
+  Expect.equals(a1.a1.a1, result.a1.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct32BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct32BytesNestedInt Function(
+        Struct16BytesNestedInt, Struct16BytesNestedInt),
+    Struct32BytesNestedInt Function(Struct16BytesNestedInt,
+        Struct16BytesNestedInt)>("ReturnStruct32BytesNestedInt", isLeaf: true);
+
+/// Even deeper nested struct to test recursive member access.
+void testReturnStruct32BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0 = -1;
+  a0.a0.a0.a1 = 2;
+  a0.a0.a1.a0 = -3;
+  a0.a0.a1.a1 = 4;
+  a0.a1.a0.a0 = -5;
+  a0.a1.a0.a1 = 6;
+  a0.a1.a1.a0 = -7;
+  a0.a1.a1.a1 = 8;
+  a1.a0.a0.a0 = -9;
+  a1.a0.a0.a1 = 10;
+  a1.a0.a1.a0 = -11;
+  a1.a0.a1.a1 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15;
+  a1.a1.a1.a1 = 16;
+
+  final result = returnStruct32BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0.a0.a0, result.a0.a0.a0.a0);
+  Expect.equals(a0.a0.a0.a1, result.a0.a0.a0.a1);
+  Expect.equals(a0.a0.a1.a0, result.a0.a0.a1.a0);
+  Expect.equals(a0.a0.a1.a1, result.a0.a0.a1.a1);
+  Expect.equals(a0.a1.a0.a0, result.a0.a1.a0.a0);
+  Expect.equals(a0.a1.a0.a1, result.a0.a1.a0.a1);
+  Expect.equals(a0.a1.a1.a0, result.a0.a1.a1.a0);
+  Expect.equals(a0.a1.a1.a1, result.a0.a1.a1.a1);
+  Expect.equals(a1.a0.a0.a0, result.a1.a0.a0.a0);
+  Expect.equals(a1.a0.a0.a1, result.a1.a0.a0.a1);
+  Expect.equals(a1.a0.a1.a0, result.a1.a0.a1.a0);
+  Expect.equals(a1.a0.a1.a1, result.a1.a0.a1.a1);
+  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
+  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
+  Expect.equals(a1.a1.a1.a0, result.a1.a1.a1.a0);
+  Expect.equals(a1.a1.a1.a1, result.a1.a1.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt16Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt16 Function(
+                StructAlignmentInt16, StructAlignmentInt16),
+            StructNestedIntStructAlignmentInt16 Function(
+                StructAlignmentInt16, StructAlignmentInt16)>(
+        "ReturnStructNestedIntStructAlignmentInt16",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 16 byte int.
+void testReturnStructNestedIntStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt16Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt32Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt32 Function(
+                StructAlignmentInt32, StructAlignmentInt32),
+            StructNestedIntStructAlignmentInt32 Function(
+                StructAlignmentInt32, StructAlignmentInt32)>(
+        "ReturnStructNestedIntStructAlignmentInt32",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 32 byte int.
+void testReturnStructNestedIntStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt32Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt64Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt64 Function(
+                StructAlignmentInt64, StructAlignmentInt64),
+            StructNestedIntStructAlignmentInt64 Function(
+                StructAlignmentInt64, StructAlignmentInt64)>(
+        "ReturnStructNestedIntStructAlignmentInt64",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 64 byte int.
+void testReturnStructNestedIntStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt64Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIrregularEvenBiggerLeaf =
+    ffiTestFunctions.lookupFunction<
+        StructNestedIrregularEvenBigger Function(Uint64,
+            StructNestedIrregularBigger, StructNestedIrregularBigger, Double),
+        StructNestedIrregularEvenBigger Function(
+            int,
+            StructNestedIrregularBigger,
+            StructNestedIrregularBigger,
+            double)>("ReturnStructNestedIrregularEvenBigger", isLeaf: true);
+
+/// Return big irregular struct as smoke test.
+void testReturnStructNestedIrregularEvenBiggerLeaf() {
+  int a0;
+  final a1Pointer = calloc<StructNestedIrregularBigger>();
+  final StructNestedIrregularBigger a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructNestedIrregularBigger>();
+  final StructNestedIrregularBigger a2 = a2Pointer.ref;
+  double a3;
+
+  a0 = 1;
+  a1.a0.a0 = 2;
+  a1.a0.a1.a0.a0 = -3;
+  a1.a0.a1.a0.a1 = 4;
+  a1.a0.a1.a1.a0 = -5.0;
+  a1.a0.a2 = 6;
+  a1.a0.a3.a0.a0 = -7.0;
+  a1.a0.a3.a1 = 8.0;
+  a1.a0.a4 = 9;
+  a1.a0.a5.a0.a0 = 10.0;
+  a1.a0.a5.a1.a0 = -11.0;
+  a1.a0.a6 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15.0;
+  a1.a2 = 16.0;
+  a1.a3 = -17.0;
+  a2.a0.a0 = 18;
+  a2.a0.a1.a0.a0 = -19;
+  a2.a0.a1.a0.a1 = 20;
+  a2.a0.a1.a1.a0 = -21.0;
+  a2.a0.a2 = 22;
+  a2.a0.a3.a0.a0 = -23.0;
+  a2.a0.a3.a1 = 24.0;
+  a2.a0.a4 = 25;
+  a2.a0.a5.a0.a0 = 26.0;
+  a2.a0.a5.a1.a0 = -27.0;
+  a2.a0.a6 = 28;
+  a2.a1.a0.a0 = -29;
+  a2.a1.a0.a1 = 30;
+  a2.a1.a1.a0 = -31.0;
+  a2.a2 = 32.0;
+  a2.a3 = -33.0;
+  a3 = 34.0;
+
+  final result = returnStructNestedIrregularEvenBiggerLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1.a0.a0, result.a1.a0.a0);
+  Expect.equals(a1.a0.a1.a0.a0, result.a1.a0.a1.a0.a0);
+  Expect.equals(a1.a0.a1.a0.a1, result.a1.a0.a1.a0.a1);
+  Expect.approxEquals(a1.a0.a1.a1.a0, result.a1.a0.a1.a1.a0);
+  Expect.equals(a1.a0.a2, result.a1.a0.a2);
+  Expect.approxEquals(a1.a0.a3.a0.a0, result.a1.a0.a3.a0.a0);
+  Expect.approxEquals(a1.a0.a3.a1, result.a1.a0.a3.a1);
+  Expect.equals(a1.a0.a4, result.a1.a0.a4);
+  Expect.approxEquals(a1.a0.a5.a0.a0, result.a1.a0.a5.a0.a0);
+  Expect.approxEquals(a1.a0.a5.a1.a0, result.a1.a0.a5.a1.a0);
+  Expect.equals(a1.a0.a6, result.a1.a0.a6);
+  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
+  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
+  Expect.approxEquals(a1.a1.a1.a0, result.a1.a1.a1.a0);
+  Expect.approxEquals(a1.a2, result.a1.a2);
+  Expect.approxEquals(a1.a3, result.a1.a3);
+  Expect.equals(a2.a0.a0, result.a2.a0.a0);
+  Expect.equals(a2.a0.a1.a0.a0, result.a2.a0.a1.a0.a0);
+  Expect.equals(a2.a0.a1.a0.a1, result.a2.a0.a1.a0.a1);
+  Expect.approxEquals(a2.a0.a1.a1.a0, result.a2.a0.a1.a1.a0);
+  Expect.equals(a2.a0.a2, result.a2.a0.a2);
+  Expect.approxEquals(a2.a0.a3.a0.a0, result.a2.a0.a3.a0.a0);
+  Expect.approxEquals(a2.a0.a3.a1, result.a2.a0.a3.a1);
+  Expect.equals(a2.a0.a4, result.a2.a0.a4);
+  Expect.approxEquals(a2.a0.a5.a0.a0, result.a2.a0.a5.a0.a0);
+  Expect.approxEquals(a2.a0.a5.a1.a0, result.a2.a0.a5.a1.a0);
+  Expect.equals(a2.a0.a6, result.a2.a0.a6);
+  Expect.equals(a2.a1.a0.a0, result.a2.a1.a0.a0);
+  Expect.equals(a2.a1.a0.a1, result.a2.a1.a0.a1);
+  Expect.approxEquals(a2.a1.a1.a0, result.a2.a1.a1.a0);
+  Expect.approxEquals(a2.a2, result.a2.a2);
+  Expect.approxEquals(a2.a3, result.a2.a3);
+  Expect.approxEquals(a3, result.a3);
+
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+}
diff --git a/tests/ffi/function_structs_by_value_generated_test.dart b/tests/ffi/function_structs_by_value_generated_test.dart
index 9504081..463118d 100644
--- a/tests/ffi/function_structs_by_value_generated_test.dart
+++ b/tests/ffi/function_structs_by_value_generated_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -17,6 +18,9 @@
 
 import 'dylib_utils.dart';
 
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
 final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 void main() {
   for (int i = 0; i < 10; ++i) {
@@ -82,6 +86,9 @@
     testPassUnion9BytesNestedIntx10();
     testPassUnion16BytesNestedInlineArrayFloatx10();
     testPassUnion16BytesNestedFloatx10();
+    testPassUint8Boolx9Struct10BytesHomogeneousBoolBool();
+    testPassUint8Boolx9Struct10BytesInlineArrayBoolBool();
+    testPassUint8Struct1ByteBool();
     testReturnStruct1ByteInt();
     testReturnStruct3BytesHomogeneousUint8();
     testReturnStruct3BytesInt2ByteAligned();
@@ -133,1324 +140,9 @@
     testReturnStructNestedIntStructAlignmentInt32();
     testReturnStructNestedIntStructAlignmentInt64();
     testReturnStructNestedIrregularEvenBigger();
-    testPassStruct1ByteIntx10Leaf();
-    testPassStruct3BytesHomogeneousUint8x10Leaf();
-    testPassStruct3BytesInt2ByteAlignedx10Leaf();
-    testPassStruct4BytesHomogeneousInt16x10Leaf();
-    testPassStruct7BytesHomogeneousUint8x10Leaf();
-    testPassStruct7BytesInt4ByteAlignedx10Leaf();
-    testPassStruct8BytesIntx10Leaf();
-    testPassStruct8BytesHomogeneousFloatx10Leaf();
-    testPassStruct8BytesMixedx10Leaf();
-    testPassStruct9BytesHomogeneousUint8x10Leaf();
-    testPassStruct9BytesInt4Or8ByteAlignedx10Leaf();
-    testPassStruct12BytesHomogeneousFloatx6Leaf();
-    testPassStruct16BytesHomogeneousFloatx5Leaf();
-    testPassStruct16BytesMixedx10Leaf();
-    testPassStruct16BytesMixed2x10Leaf();
-    testPassStruct17BytesIntx10Leaf();
-    testPassStruct19BytesHomogeneousUint8x10Leaf();
-    testPassStruct20BytesHomogeneousInt32x10Leaf();
-    testPassStruct20BytesHomogeneousFloatLeaf();
-    testPassStruct32BytesHomogeneousDoublex5Leaf();
-    testPassStruct40BytesHomogeneousDoubleLeaf();
-    testPassStruct1024BytesHomogeneousUint64Leaf();
-    testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf();
-    testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf();
-    testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf();
-    testPassDoublex6Struct16BytesMixedx4Int32Leaf();
-    testPassInt32x4Struct16BytesMixedx4DoubleLeaf();
-    testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf();
-    testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf();
-    testPassStructAlignmentInt16Leaf();
-    testPassStructAlignmentInt32Leaf();
-    testPassStructAlignmentInt64Leaf();
-    testPassStruct8BytesNestedIntx10Leaf();
-    testPassStruct8BytesNestedFloatx10Leaf();
-    testPassStruct8BytesNestedFloat2x10Leaf();
-    testPassStruct8BytesNestedMixedx10Leaf();
-    testPassStruct16BytesNestedIntx2Leaf();
-    testPassStruct32BytesNestedIntx2Leaf();
-    testPassStructNestedIntStructAlignmentInt16Leaf();
-    testPassStructNestedIntStructAlignmentInt32Leaf();
-    testPassStructNestedIntStructAlignmentInt64Leaf();
-    testPassStructNestedIrregularEvenBiggerx4Leaf();
-    testPassStruct8BytesInlineArrayIntx4Leaf();
-    testPassStructInlineArrayIrregularx4Leaf();
-    testPassStructInlineArray100BytesLeaf();
-    testPassStructStruct16BytesHomogeneousFloat2x5Leaf();
-    testPassStructStruct32BytesHomogeneousDouble2x5Leaf();
-    testPassStructStruct16BytesMixed3x10Leaf();
-    testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf();
-    testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf();
-    testPassStruct3BytesPackedIntx10Leaf();
-    testPassStruct8BytesPackedIntx10Leaf();
-    testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf();
-    testPassStruct5BytesPackedMixedLeaf();
-    testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf();
-    testPassStruct6BytesInlineArrayIntLeaf();
-    testPassStruct15BytesInlineArrayMixedLeaf();
-    testPassUnion4BytesMixedx10Leaf();
-    testPassUnion8BytesNestedFloatx10Leaf();
-    testPassUnion9BytesNestedIntx10Leaf();
-    testPassUnion16BytesNestedInlineArrayFloatx10Leaf();
-    testPassUnion16BytesNestedFloatx10Leaf();
-    testReturnStruct1ByteIntLeaf();
-    testReturnStruct3BytesHomogeneousUint8Leaf();
-    testReturnStruct3BytesInt2ByteAlignedLeaf();
-    testReturnStruct4BytesHomogeneousInt16Leaf();
-    testReturnStruct7BytesHomogeneousUint8Leaf();
-    testReturnStruct7BytesInt4ByteAlignedLeaf();
-    testReturnStruct8BytesIntLeaf();
-    testReturnStruct8BytesHomogeneousFloatLeaf();
-    testReturnStruct8BytesMixedLeaf();
-    testReturnStruct9BytesHomogeneousUint8Leaf();
-    testReturnStruct9BytesInt4Or8ByteAlignedLeaf();
-    testReturnStruct12BytesHomogeneousFloatLeaf();
-    testReturnStruct16BytesHomogeneousFloatLeaf();
-    testReturnStruct16BytesMixedLeaf();
-    testReturnStruct16BytesMixed2Leaf();
-    testReturnStruct17BytesIntLeaf();
-    testReturnStruct19BytesHomogeneousUint8Leaf();
-    testReturnStruct20BytesHomogeneousInt32Leaf();
-    testReturnStruct20BytesHomogeneousFloatLeaf();
-    testReturnStruct32BytesHomogeneousDoubleLeaf();
-    testReturnStruct40BytesHomogeneousDoubleLeaf();
-    testReturnStruct1024BytesHomogeneousUint64Leaf();
-    testReturnStruct3BytesPackedIntLeaf();
-    testReturnStruct8BytesPackedIntLeaf();
-    testReturnStruct9BytesPackedMixedLeaf();
-    testReturnUnion4BytesMixedLeaf();
-    testReturnUnion8BytesNestedFloatLeaf();
-    testReturnUnion9BytesNestedIntLeaf();
-    testReturnUnion16BytesNestedFloatLeaf();
-    testReturnStructArgumentStruct1ByteIntLeaf();
-    testReturnStructArgumentInt32x8Struct1ByteIntLeaf();
-    testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf();
-    testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf();
-    testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf();
-    testReturnStructArgumentStruct8BytesInlineArrayIntLeaf();
-    testReturnStructArgumentStructStruct16BytesHomogeneousLeaf();
-    testReturnStructArgumentStructStruct32BytesHomogeneousLeaf();
-    testReturnStructArgumentStructStruct16BytesMixed3Leaf();
-    testReturnStructAlignmentInt16Leaf();
-    testReturnStructAlignmentInt32Leaf();
-    testReturnStructAlignmentInt64Leaf();
-    testReturnStruct8BytesNestedIntLeaf();
-    testReturnStruct8BytesNestedFloatLeaf();
-    testReturnStruct8BytesNestedFloat2Leaf();
-    testReturnStruct8BytesNestedMixedLeaf();
-    testReturnStruct16BytesNestedIntLeaf();
-    testReturnStruct32BytesNestedIntLeaf();
-    testReturnStructNestedIntStructAlignmentInt16Leaf();
-    testReturnStructNestedIntStructAlignmentInt32Leaf();
-    testReturnStructNestedIntStructAlignmentInt64Leaf();
-    testReturnStructNestedIrregularEvenBiggerLeaf();
   }
 }
 
-class Struct1ByteInt extends Struct {
-  @Int8()
-  external int a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct3BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint8()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct3BytesInt2ByteAligned extends Struct {
-  @Int16()
-  external int a0;
-
-  @Int8()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct4BytesHomogeneousInt16 extends Struct {
-  @Int16()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct4BytesFloat extends Struct {
-  @Float()
-  external double a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct7BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint8()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  @Uint8()
-  external int a3;
-
-  @Uint8()
-  external int a4;
-
-  @Uint8()
-  external int a5;
-
-  @Uint8()
-  external int a6;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
-}
-
-class Struct7BytesInt4ByteAligned extends Struct {
-  @Int32()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesInt extends Struct {
-  @Int16()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  @Int32()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesHomogeneousFloat extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesFloat extends Struct {
-  @Double()
-  external double a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct8BytesMixed extends Struct {
-  @Float()
-  external double a0;
-
-  @Int16()
-  external int a1;
-
-  @Int16()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct9BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint8()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  @Uint8()
-  external int a3;
-
-  @Uint8()
-  external int a4;
-
-  @Uint8()
-  external int a5;
-
-  @Uint8()
-  external int a6;
-
-  @Uint8()
-  external int a7;
-
-  @Uint8()
-  external int a8;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})";
-}
-
-class Struct9BytesInt4Or8ByteAligned extends Struct {
-  @Int64()
-  external int a0;
-
-  @Int8()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct12BytesHomogeneousFloat extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  @Float()
-  external double a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct16BytesHomogeneousFloat extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  @Float()
-  external double a2;
-
-  @Float()
-  external double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct16BytesMixed extends Struct {
-  @Double()
-  external double a0;
-
-  @Int64()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct16BytesMixed2 extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  @Float()
-  external double a2;
-
-  @Int32()
-  external int a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct17BytesInt extends Struct {
-  @Int64()
-  external int a0;
-
-  @Int64()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct19BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint8()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  @Uint8()
-  external int a3;
-
-  @Uint8()
-  external int a4;
-
-  @Uint8()
-  external int a5;
-
-  @Uint8()
-  external int a6;
-
-  @Uint8()
-  external int a7;
-
-  @Uint8()
-  external int a8;
-
-  @Uint8()
-  external int a9;
-
-  @Uint8()
-  external int a10;
-
-  @Uint8()
-  external int a11;
-
-  @Uint8()
-  external int a12;
-
-  @Uint8()
-  external int a13;
-
-  @Uint8()
-  external int a14;
-
-  @Uint8()
-  external int a15;
-
-  @Uint8()
-  external int a16;
-
-  @Uint8()
-  external int a17;
-
-  @Uint8()
-  external int a18;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18})";
-}
-
-class Struct20BytesHomogeneousInt32 extends Struct {
-  @Int32()
-  external int a0;
-
-  @Int32()
-  external int a1;
-
-  @Int32()
-  external int a2;
-
-  @Int32()
-  external int a3;
-
-  @Int32()
-  external int a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct20BytesHomogeneousFloat extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  @Float()
-  external double a2;
-
-  @Float()
-  external double a3;
-
-  @Float()
-  external double a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct32BytesHomogeneousDouble extends Struct {
-  @Double()
-  external double a0;
-
-  @Double()
-  external double a1;
-
-  @Double()
-  external double a2;
-
-  @Double()
-  external double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct40BytesHomogeneousDouble extends Struct {
-  @Double()
-  external double a0;
-
-  @Double()
-  external double a1;
-
-  @Double()
-  external double a2;
-
-  @Double()
-  external double a3;
-
-  @Double()
-  external double a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct1024BytesHomogeneousUint64 extends Struct {
-  @Uint64()
-  external int a0;
-
-  @Uint64()
-  external int a1;
-
-  @Uint64()
-  external int a2;
-
-  @Uint64()
-  external int a3;
-
-  @Uint64()
-  external int a4;
-
-  @Uint64()
-  external int a5;
-
-  @Uint64()
-  external int a6;
-
-  @Uint64()
-  external int a7;
-
-  @Uint64()
-  external int a8;
-
-  @Uint64()
-  external int a9;
-
-  @Uint64()
-  external int a10;
-
-  @Uint64()
-  external int a11;
-
-  @Uint64()
-  external int a12;
-
-  @Uint64()
-  external int a13;
-
-  @Uint64()
-  external int a14;
-
-  @Uint64()
-  external int a15;
-
-  @Uint64()
-  external int a16;
-
-  @Uint64()
-  external int a17;
-
-  @Uint64()
-  external int a18;
-
-  @Uint64()
-  external int a19;
-
-  @Uint64()
-  external int a20;
-
-  @Uint64()
-  external int a21;
-
-  @Uint64()
-  external int a22;
-
-  @Uint64()
-  external int a23;
-
-  @Uint64()
-  external int a24;
-
-  @Uint64()
-  external int a25;
-
-  @Uint64()
-  external int a26;
-
-  @Uint64()
-  external int a27;
-
-  @Uint64()
-  external int a28;
-
-  @Uint64()
-  external int a29;
-
-  @Uint64()
-  external int a30;
-
-  @Uint64()
-  external int a31;
-
-  @Uint64()
-  external int a32;
-
-  @Uint64()
-  external int a33;
-
-  @Uint64()
-  external int a34;
-
-  @Uint64()
-  external int a35;
-
-  @Uint64()
-  external int a36;
-
-  @Uint64()
-  external int a37;
-
-  @Uint64()
-  external int a38;
-
-  @Uint64()
-  external int a39;
-
-  @Uint64()
-  external int a40;
-
-  @Uint64()
-  external int a41;
-
-  @Uint64()
-  external int a42;
-
-  @Uint64()
-  external int a43;
-
-  @Uint64()
-  external int a44;
-
-  @Uint64()
-  external int a45;
-
-  @Uint64()
-  external int a46;
-
-  @Uint64()
-  external int a47;
-
-  @Uint64()
-  external int a48;
-
-  @Uint64()
-  external int a49;
-
-  @Uint64()
-  external int a50;
-
-  @Uint64()
-  external int a51;
-
-  @Uint64()
-  external int a52;
-
-  @Uint64()
-  external int a53;
-
-  @Uint64()
-  external int a54;
-
-  @Uint64()
-  external int a55;
-
-  @Uint64()
-  external int a56;
-
-  @Uint64()
-  external int a57;
-
-  @Uint64()
-  external int a58;
-
-  @Uint64()
-  external int a59;
-
-  @Uint64()
-  external int a60;
-
-  @Uint64()
-  external int a61;
-
-  @Uint64()
-  external int a62;
-
-  @Uint64()
-  external int a63;
-
-  @Uint64()
-  external int a64;
-
-  @Uint64()
-  external int a65;
-
-  @Uint64()
-  external int a66;
-
-  @Uint64()
-  external int a67;
-
-  @Uint64()
-  external int a68;
-
-  @Uint64()
-  external int a69;
-
-  @Uint64()
-  external int a70;
-
-  @Uint64()
-  external int a71;
-
-  @Uint64()
-  external int a72;
-
-  @Uint64()
-  external int a73;
-
-  @Uint64()
-  external int a74;
-
-  @Uint64()
-  external int a75;
-
-  @Uint64()
-  external int a76;
-
-  @Uint64()
-  external int a77;
-
-  @Uint64()
-  external int a78;
-
-  @Uint64()
-  external int a79;
-
-  @Uint64()
-  external int a80;
-
-  @Uint64()
-  external int a81;
-
-  @Uint64()
-  external int a82;
-
-  @Uint64()
-  external int a83;
-
-  @Uint64()
-  external int a84;
-
-  @Uint64()
-  external int a85;
-
-  @Uint64()
-  external int a86;
-
-  @Uint64()
-  external int a87;
-
-  @Uint64()
-  external int a88;
-
-  @Uint64()
-  external int a89;
-
-  @Uint64()
-  external int a90;
-
-  @Uint64()
-  external int a91;
-
-  @Uint64()
-  external int a92;
-
-  @Uint64()
-  external int a93;
-
-  @Uint64()
-  external int a94;
-
-  @Uint64()
-  external int a95;
-
-  @Uint64()
-  external int a96;
-
-  @Uint64()
-  external int a97;
-
-  @Uint64()
-  external int a98;
-
-  @Uint64()
-  external int a99;
-
-  @Uint64()
-  external int a100;
-
-  @Uint64()
-  external int a101;
-
-  @Uint64()
-  external int a102;
-
-  @Uint64()
-  external int a103;
-
-  @Uint64()
-  external int a104;
-
-  @Uint64()
-  external int a105;
-
-  @Uint64()
-  external int a106;
-
-  @Uint64()
-  external int a107;
-
-  @Uint64()
-  external int a108;
-
-  @Uint64()
-  external int a109;
-
-  @Uint64()
-  external int a110;
-
-  @Uint64()
-  external int a111;
-
-  @Uint64()
-  external int a112;
-
-  @Uint64()
-  external int a113;
-
-  @Uint64()
-  external int a114;
-
-  @Uint64()
-  external int a115;
-
-  @Uint64()
-  external int a116;
-
-  @Uint64()
-  external int a117;
-
-  @Uint64()
-  external int a118;
-
-  @Uint64()
-  external int a119;
-
-  @Uint64()
-  external int a120;
-
-  @Uint64()
-  external int a121;
-
-  @Uint64()
-  external int a122;
-
-  @Uint64()
-  external int a123;
-
-  @Uint64()
-  external int a124;
-
-  @Uint64()
-  external int a125;
-
-  @Uint64()
-  external int a126;
-
-  @Uint64()
-  external int a127;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18}, ${a19}, ${a20}, ${a21}, ${a22}, ${a23}, ${a24}, ${a25}, ${a26}, ${a27}, ${a28}, ${a29}, ${a30}, ${a31}, ${a32}, ${a33}, ${a34}, ${a35}, ${a36}, ${a37}, ${a38}, ${a39}, ${a40}, ${a41}, ${a42}, ${a43}, ${a44}, ${a45}, ${a46}, ${a47}, ${a48}, ${a49}, ${a50}, ${a51}, ${a52}, ${a53}, ${a54}, ${a55}, ${a56}, ${a57}, ${a58}, ${a59}, ${a60}, ${a61}, ${a62}, ${a63}, ${a64}, ${a65}, ${a66}, ${a67}, ${a68}, ${a69}, ${a70}, ${a71}, ${a72}, ${a73}, ${a74}, ${a75}, ${a76}, ${a77}, ${a78}, ${a79}, ${a80}, ${a81}, ${a82}, ${a83}, ${a84}, ${a85}, ${a86}, ${a87}, ${a88}, ${a89}, ${a90}, ${a91}, ${a92}, ${a93}, ${a94}, ${a95}, ${a96}, ${a97}, ${a98}, ${a99}, ${a100}, ${a101}, ${a102}, ${a103}, ${a104}, ${a105}, ${a106}, ${a107}, ${a108}, ${a109}, ${a110}, ${a111}, ${a112}, ${a113}, ${a114}, ${a115}, ${a116}, ${a117}, ${a118}, ${a119}, ${a120}, ${a121}, ${a122}, ${a123}, ${a124}, ${a125}, ${a126}, ${a127})";
-}
-
-class StructAlignmentInt16 extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class StructAlignmentInt32 extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int32()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class StructAlignmentInt64 extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int64()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesNestedInt extends Struct {
-  external Struct4BytesHomogeneousInt16 a0;
-
-  external Struct4BytesHomogeneousInt16 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedFloat extends Struct {
-  external Struct4BytesFloat a0;
-
-  external Struct4BytesFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedFloat2 extends Struct {
-  external Struct4BytesFloat a0;
-
-  @Float()
-  external double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedMixed extends Struct {
-  external Struct4BytesHomogeneousInt16 a0;
-
-  external Struct4BytesFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct16BytesNestedInt extends Struct {
-  external Struct8BytesNestedInt a0;
-
-  external Struct8BytesNestedInt a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct32BytesNestedInt extends Struct {
-  external Struct16BytesNestedInt a0;
-
-  external Struct16BytesNestedInt a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt16 extends Struct {
-  external StructAlignmentInt16 a0;
-
-  external StructAlignmentInt16 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt32 extends Struct {
-  external StructAlignmentInt32 a0;
-
-  external StructAlignmentInt32 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt64 extends Struct {
-  external StructAlignmentInt64 a0;
-
-  external StructAlignmentInt64 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIrregularBig extends Struct {
-  @Uint16()
-  external int a0;
-
-  external Struct8BytesNestedMixed a1;
-
-  @Uint16()
-  external int a2;
-
-  external Struct8BytesNestedFloat2 a3;
-
-  @Uint16()
-  external int a4;
-
-  external Struct8BytesNestedFloat a5;
-
-  @Uint16()
-  external int a6;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
-}
-
-class StructNestedIrregularBigger extends Struct {
-  external StructNestedIrregularBig a0;
-
-  external Struct8BytesNestedMixed a1;
-
-  @Float()
-  external double a2;
-
-  @Double()
-  external double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class StructNestedIrregularEvenBigger extends Struct {
-  @Uint64()
-  external int a0;
-
-  external StructNestedIrregularBigger a1;
-
-  external StructNestedIrregularBigger a2;
-
-  @Double()
-  external double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct8BytesInlineArrayInt extends Struct {
-  @Array(8)
-  external Array<Uint8> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 8; i0 += 1) a0[i0]]})";
-}
-
-class StructInlineArrayIrregular extends Struct {
-  @Array(2)
-  external Array<Struct3BytesInt2ByteAligned> a0;
-
-  @Uint8()
-  external int a1;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]}, ${a1})";
-}
-
-class StructInlineArray100Bytes extends Struct {
-  @Array(100)
-  external Array<Uint8> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 100; i0 += 1) a0[i0]]})";
-}
-
-class StructInlineArrayBig extends Struct {
-  @Uint32()
-  external int a0;
-
-  @Uint32()
-  external int a1;
-
-  @Array(4000)
-  external Array<Uint8> a2;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${[for (var i0 = 0; i0 < 4000; i0 += 1) a2[i0]]})";
-}
-
-class StructStruct16BytesHomogeneousFloat2 extends Struct {
-  external Struct4BytesFloat a0;
-
-  @Array(2)
-  external Array<Struct4BytesFloat> a1;
-
-  @Float()
-  external double a2;
-
-  String toString() =>
-      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
-}
-
-class StructStruct32BytesHomogeneousDouble2 extends Struct {
-  external Struct8BytesFloat a0;
-
-  @Array(2)
-  external Array<Struct8BytesFloat> a1;
-
-  @Double()
-  external double a2;
-
-  String toString() =>
-      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
-}
-
-class StructStruct16BytesMixed3 extends Struct {
-  external Struct4BytesFloat a0;
-
-  @Array(1)
-  external Array<Struct8BytesMixed> a1;
-
-  @Array(2)
-  external Array<Int16> a2;
-
-  String toString() => "(${a0}, ${[
-        for (var i0 = 0; i0 < 1; i0 += 1) a1[i0]
-      ]}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a2[i0]]})";
-}
-
-class Struct8BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2, 2)
-  external Array<Array<Array<Uint8>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [for (var i2 = 0; i2 < 2; i2 += 1) a0[i0][i1][i2]]
-          ]
-      ]})";
-}
-
-class Struct32BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2, 2, 2, 2)
-  external Array<Array<Array<Array<Array<Uint8>>>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [
-                for (var i2 = 0; i2 < 2; i2 += 1)
-                  [
-                    for (var i3 = 0; i3 < 2; i3 += 1)
-                      [for (var i4 = 0; i4 < 2; i4 += 1) a0[i0][i1][i2][i3][i4]]
-                  ]
-              ]
-          ]
-      ]})";
-}
-
-class Struct64BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array.multi([2, 2, 2, 2, 2, 2])
-  external Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [
-                for (var i2 = 0; i2 < 2; i2 += 1)
-                  [
-                    for (var i3 = 0; i3 < 2; i3 += 1)
-                      [
-                        for (var i4 = 0; i4 < 2; i4 += 1)
-                          [
-                            for (var i5 = 0; i5 < 2; i5 += 1)
-                              a0[i0][i1][i2][i3][i4][i5]
-                          ]
-                      ]
-                  ]
-              ]
-          ]
-      ]})";
-}
-
-class Struct4BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2)
-  external Array<Array<Struct1ByteInt>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [for (var i1 = 0; i1 < 2; i1 += 1) a0[i0][i1]]
-      ]})";
-}
-
-@Packed(1)
-class Struct3BytesPackedInt extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-@Packed(1)
-class Struct3BytesPackedIntMembersAligned extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-@Packed(1)
-class Struct5BytesPackedMixed extends Struct {
-  @Float()
-  external double a0;
-
-  @Uint8()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedAlignmentStruct5BytesPackedMixed extends Struct {
-  @Uint8()
-  external int a0;
-
-  external Struct5BytesPackedMixed a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct6BytesInlineArrayInt extends Struct {
-  @Array(2)
-  external Array<Struct3BytesPackedIntMembersAligned> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]})";
-}
-
-@Packed(1)
-class Struct8BytesPackedInt extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint32()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  @Uint8()
-  external int a3;
-
-  @Uint8()
-  external int a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-@Packed(1)
-class Struct9BytesPackedMixed extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Double()
-  external double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct15BytesInlineArrayMixed extends Struct {
-  @Array(3)
-  external Array<Struct5BytesPackedMixed> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 3; i0 += 1) a0[i0]]})";
-}
-
-class Union4BytesMixed extends Union {
-  @Uint32()
-  external int a0;
-
-  @Float()
-  external double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union8BytesNestedFloat extends Union {
-  @Double()
-  external double a0;
-
-  external Struct8BytesHomogeneousFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union9BytesNestedInt extends Union {
-  external Struct8BytesInt a0;
-
-  external Struct9BytesHomogeneousUint8 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union16BytesNestedInlineArrayFloat extends Union {
-  @Array(4)
-  external Array<Float> a0;
-
-  external Struct16BytesHomogeneousFloat a1;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 4; i0 += 1) a0[i0]]}, ${a1})";
-}
-
-class Union16BytesNestedFloat extends Union {
-  external Struct8BytesHomogeneousFloat a0;
-
-  external Struct12BytesHomogeneousFloat a1;
-
-  external Struct16BytesHomogeneousFloat a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
 final passStruct1ByteIntx10 = ffiTestFunctions.lookupFunction<
     Int64 Function(
         Struct1ByteInt,
@@ -6535,6 +5227,164 @@
   calloc.free(a9Pointer);
 }
 
+final passUint8Boolx9Struct10BytesHomogeneousBoolBool =
+    ffiTestFunctions.lookupFunction<
+        Int32 Function(Uint8, Bool, Bool, Bool, Bool, Bool, Bool, Bool, Bool,
+            Bool, Struct10BytesHomogeneousBool, Bool),
+        int Function(
+            int,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            Struct10BytesHomogeneousBool,
+            bool)>("PassUint8Boolx9Struct10BytesHomogeneousBoolBool");
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+void testPassUint8Boolx9Struct10BytesHomogeneousBoolBool() {
+  int a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  final a10Pointer = calloc<Struct10BytesHomogeneousBool>();
+  final Struct10BytesHomogeneousBool a10 = a10Pointer.ref;
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0 = true;
+  a10.a1 = false;
+  a10.a2 = true;
+  a10.a3 = false;
+  a10.a4 = true;
+  a10.a5 = false;
+  a10.a6 = true;
+  a10.a7 = false;
+  a10.a8 = true;
+  a10.a9 = false;
+  a11 = true;
+
+  final result = passUint8Boolx9Struct10BytesHomogeneousBoolBool(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  print("result = $result");
+
+  Expect.equals(11, result);
+
+  calloc.free(a10Pointer);
+}
+
+final passUint8Boolx9Struct10BytesInlineArrayBoolBool =
+    ffiTestFunctions.lookupFunction<
+        Int32 Function(Uint8, Bool, Bool, Bool, Bool, Bool, Bool, Bool, Bool,
+            Bool, Struct10BytesInlineArrayBool, Bool),
+        int Function(
+            int,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            Struct10BytesInlineArrayBool,
+            bool)>("PassUint8Boolx9Struct10BytesInlineArrayBoolBool");
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+void testPassUint8Boolx9Struct10BytesInlineArrayBoolBool() {
+  int a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  final a10Pointer = calloc<Struct10BytesInlineArrayBool>();
+  final Struct10BytesInlineArrayBool a10 = a10Pointer.ref;
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0[0] = true;
+  a10.a0[1] = false;
+  a10.a0[2] = true;
+  a10.a0[3] = false;
+  a10.a0[4] = true;
+  a10.a0[5] = false;
+  a10.a0[6] = true;
+  a10.a0[7] = false;
+  a10.a0[8] = true;
+  a10.a0[9] = false;
+  a11 = true;
+
+  final result = passUint8Boolx9Struct10BytesInlineArrayBoolBool(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  print("result = $result");
+
+  Expect.equals(11, result);
+
+  calloc.free(a10Pointer);
+}
+
+final passUint8Struct1ByteBool = ffiTestFunctions.lookupFunction<
+    Bool Function(Uint8, Struct1ByteBool),
+    bool Function(int, Struct1ByteBool)>("PassUint8Struct1ByteBool");
+
+/// Returning a bool.
+void testPassUint8Struct1ByteBool() {
+  int a0;
+  final a1Pointer = calloc<Struct1ByteBool>();
+  final Struct1ByteBool a1 = a1Pointer.ref;
+
+  a0 = 1;
+  a1.a0 = false;
+
+  final result = passUint8Struct1ByteBool(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(1 % 2 != 0, result);
+
+  calloc.free(a1Pointer);
+}
+
 final returnStruct1ByteInt = ffiTestFunctions.lookupFunction<
     Struct1ByteInt Function(Int8),
     Struct1ByteInt Function(int)>("ReturnStruct1ByteInt");
@@ -8887,7545 +7737,3 @@
   calloc.free(a1Pointer);
   calloc.free(a2Pointer);
 }
-
-final passStruct1ByteIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt),
-    int Function(
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt)>("PassStruct1ByteIntx10", isLeaf: true);
-
-/// Smallest struct with data.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct1ByteIntx10Leaf() {
-  final a0Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a1.a0 = 2;
-  a2.a0 = -3;
-  a3.a0 = 4;
-  a4.a0 = -5;
-  a5.a0 = 6;
-  a6.a0 = -7;
-  a7.a0 = 8;
-  a8.a0 = -9;
-  a9.a0 = 10;
-
-  final result =
-      passStruct1ByteIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(5, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct3BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8),
-        int Function(
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8)>(
-    "PassStruct3BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Not a multiple of word size, not a power of two.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct3BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a1.a0 = 4;
-  a1.a1 = 5;
-  a1.a2 = 6;
-  a2.a0 = 7;
-  a2.a1 = 8;
-  a2.a2 = 9;
-  a3.a0 = 10;
-  a3.a1 = 11;
-  a3.a2 = 12;
-  a4.a0 = 13;
-  a4.a1 = 14;
-  a4.a2 = 15;
-  a5.a0 = 16;
-  a5.a1 = 17;
-  a5.a2 = 18;
-  a6.a0 = 19;
-  a6.a1 = 20;
-  a6.a2 = 21;
-  a7.a0 = 22;
-  a7.a1 = 23;
-  a7.a2 = 24;
-  a8.a0 = 25;
-  a8.a1 = 26;
-  a8.a2 = 27;
-  a9.a0 = 28;
-  a9.a1 = 29;
-  a9.a2 = 30;
-
-  final result = passStruct3BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(465, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct3BytesInt2ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned),
-        int Function(
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned)>("PassStruct3BytesInt2ByteAlignedx10",
-    isLeaf: true);
-
-/// Not a multiple of word size, not a power of two.
-/// With alignment rules taken into account size is 4 bytes.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct3BytesInt2ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct3BytesInt2ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct4BytesHomogeneousInt16x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16),
-        int Function(
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16)>(
-    "PassStruct4BytesHomogeneousInt16x10",
-    isLeaf: true);
-
-/// Exactly word size on 32-bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct4BytesHomogeneousInt16x10Leaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct4BytesHomogeneousInt16x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct7BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8),
-        int Function(
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8)>(
-    "PassStruct7BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Sub word size on 64 bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct7BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a1.a0 = 8;
-  a1.a1 = 9;
-  a1.a2 = 10;
-  a1.a3 = 11;
-  a1.a4 = 12;
-  a1.a5 = 13;
-  a1.a6 = 14;
-  a2.a0 = 15;
-  a2.a1 = 16;
-  a2.a2 = 17;
-  a2.a3 = 18;
-  a2.a4 = 19;
-  a2.a5 = 20;
-  a2.a6 = 21;
-  a3.a0 = 22;
-  a3.a1 = 23;
-  a3.a2 = 24;
-  a3.a3 = 25;
-  a3.a4 = 26;
-  a3.a5 = 27;
-  a3.a6 = 28;
-  a4.a0 = 29;
-  a4.a1 = 30;
-  a4.a2 = 31;
-  a4.a3 = 32;
-  a4.a4 = 33;
-  a4.a5 = 34;
-  a4.a6 = 35;
-  a5.a0 = 36;
-  a5.a1 = 37;
-  a5.a2 = 38;
-  a5.a3 = 39;
-  a5.a4 = 40;
-  a5.a5 = 41;
-  a5.a6 = 42;
-  a6.a0 = 43;
-  a6.a1 = 44;
-  a6.a2 = 45;
-  a6.a3 = 46;
-  a6.a4 = 47;
-  a6.a5 = 48;
-  a6.a6 = 49;
-  a7.a0 = 50;
-  a7.a1 = 51;
-  a7.a2 = 52;
-  a7.a3 = 53;
-  a7.a4 = 54;
-  a7.a5 = 55;
-  a7.a6 = 56;
-  a8.a0 = 57;
-  a8.a1 = 58;
-  a8.a2 = 59;
-  a8.a3 = 60;
-  a8.a4 = 61;
-  a8.a5 = 62;
-  a8.a6 = 63;
-  a9.a0 = 64;
-  a9.a1 = 65;
-  a9.a2 = 66;
-  a9.a3 = 67;
-  a9.a4 = 68;
-  a9.a5 = 69;
-  a9.a6 = 70;
-
-  final result = passStruct7BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(2485, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct7BytesInt4ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned),
-        int Function(
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned)>("PassStruct7BytesInt4ByteAlignedx10",
-    isLeaf: true);
-
-/// Sub word size on 64 bit architectures.
-/// With alignment rules taken into account size is 8 bytes.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct7BytesInt4ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result = passStruct7BytesInt4ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt),
-    int Function(
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt)>("PassStruct8BytesIntx10", isLeaf: true);
-
-/// Exactly word size struct on 64bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct8BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesHomogeneousFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat),
-        double Function(
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat)>(
-    "PassStruct8BytesHomogeneousFloatx10",
-    isLeaf: true);
-
-/// Arguments passed in FP registers as long as they fit.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesHomogeneousFloatx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a1.a0 = -3.0;
-  a1.a1 = 4.0;
-  a2.a0 = -5.0;
-  a2.a1 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a4.a0 = -9.0;
-  a4.a1 = 10.0;
-  a5.a0 = -11.0;
-  a5.a1 = 12.0;
-  a6.a0 = -13.0;
-  a6.a1 = 14.0;
-  a7.a0 = -15.0;
-  a7.a1 = 16.0;
-  a8.a0 = -17.0;
-  a8.a1 = 18.0;
-  a9.a0 = -19.0;
-  a9.a1 = 20.0;
-
-  final result = passStruct8BytesHomogeneousFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Float Function(
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed),
-    double Function(
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed)>("PassStruct8BytesMixedx10", isLeaf: true);
-
-/// On x64, arguments go in int registers because it is not only float.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4.0;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7.0;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10.0;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13.0;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16.0;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19.0;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22.0;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25.0;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28.0;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct8BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8),
-        int Function(
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8)>(
-    "PassStruct9BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Argument is a single byte over a multiple of word size.
-/// 10 struct arguments will exhaust available registers.
-/// Struct only has 1-byte aligned fields to test struct alignment itself.
-/// Tests upper bytes in the integer registers that are partly filled.
-/// Tests stack alignment of non word size stack arguments.
-void testPassStruct9BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a1.a0 = 10;
-  a1.a1 = 11;
-  a1.a2 = 12;
-  a1.a3 = 13;
-  a1.a4 = 14;
-  a1.a5 = 15;
-  a1.a6 = 16;
-  a1.a7 = 17;
-  a1.a8 = 18;
-  a2.a0 = 19;
-  a2.a1 = 20;
-  a2.a2 = 21;
-  a2.a3 = 22;
-  a2.a4 = 23;
-  a2.a5 = 24;
-  a2.a6 = 25;
-  a2.a7 = 26;
-  a2.a8 = 27;
-  a3.a0 = 28;
-  a3.a1 = 29;
-  a3.a2 = 30;
-  a3.a3 = 31;
-  a3.a4 = 32;
-  a3.a5 = 33;
-  a3.a6 = 34;
-  a3.a7 = 35;
-  a3.a8 = 36;
-  a4.a0 = 37;
-  a4.a1 = 38;
-  a4.a2 = 39;
-  a4.a3 = 40;
-  a4.a4 = 41;
-  a4.a5 = 42;
-  a4.a6 = 43;
-  a4.a7 = 44;
-  a4.a8 = 45;
-  a5.a0 = 46;
-  a5.a1 = 47;
-  a5.a2 = 48;
-  a5.a3 = 49;
-  a5.a4 = 50;
-  a5.a5 = 51;
-  a5.a6 = 52;
-  a5.a7 = 53;
-  a5.a8 = 54;
-  a6.a0 = 55;
-  a6.a1 = 56;
-  a6.a2 = 57;
-  a6.a3 = 58;
-  a6.a4 = 59;
-  a6.a5 = 60;
-  a6.a6 = 61;
-  a6.a7 = 62;
-  a6.a8 = 63;
-  a7.a0 = 64;
-  a7.a1 = 65;
-  a7.a2 = 66;
-  a7.a3 = 67;
-  a7.a4 = 68;
-  a7.a5 = 69;
-  a7.a6 = 70;
-  a7.a7 = 71;
-  a7.a8 = 72;
-  a8.a0 = 73;
-  a8.a1 = 74;
-  a8.a2 = 75;
-  a8.a3 = 76;
-  a8.a4 = 77;
-  a8.a5 = 78;
-  a8.a6 = 79;
-  a8.a7 = 80;
-  a8.a8 = 81;
-  a9.a0 = 82;
-  a9.a1 = 83;
-  a9.a2 = 84;
-  a9.a3 = 85;
-  a9.a4 = 86;
-  a9.a5 = 87;
-  a9.a6 = 88;
-  a9.a7 = 89;
-  a9.a8 = 90;
-
-  final result = passStruct9BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(4095, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesInt4Or8ByteAlignedx10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned),
-            int Function(
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned)>(
-        "PassStruct9BytesInt4Or8ByteAlignedx10",
-        isLeaf: true);
-
-/// Argument is a single byte over a multiple of word size.
-/// With alignment rules taken into account size is 12 or 16 bytes.
-/// 10 struct arguments will exhaust available registers.
-///
-void testPassStruct9BytesInt4Or8ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct9BytesInt4Or8ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct12BytesHomogeneousFloatx6Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat),
-        double Function(
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat)>(
-    "PassStruct12BytesHomogeneousFloatx6",
-    isLeaf: true);
-
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// Struct arguments will exhaust available registers, and leave some empty.
-/// The last argument is to test whether arguments are backfilled.
-void testPassStruct12BytesHomogeneousFloatx6Leaf() {
-  final a0Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a5 = a5Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a1.a0 = 4.0;
-  a1.a1 = -5.0;
-  a1.a2 = 6.0;
-  a2.a0 = -7.0;
-  a2.a1 = 8.0;
-  a2.a2 = -9.0;
-  a3.a0 = 10.0;
-  a3.a1 = -11.0;
-  a3.a2 = 12.0;
-  a4.a0 = -13.0;
-  a4.a1 = 14.0;
-  a4.a2 = -15.0;
-  a5.a0 = 16.0;
-  a5.a1 = -17.0;
-  a5.a2 = 18.0;
-
-  final result =
-      passStruct12BytesHomogeneousFloatx6Leaf(a0, a1, a2, a3, a4, a5);
-
-  print("result = $result");
-
-  Expect.approxEquals(9.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-}
-
-final passStruct16BytesHomogeneousFloatx5Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat),
-        double Function(
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat)>(
-    "PassStruct16BytesHomogeneousFloatx5",
-    isLeaf: true);
-
-/// On Linux x64 argument is transferred on stack because it is over 16 bytes.
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStruct16BytesHomogeneousFloatx5Leaf() {
-  final a0Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a4 = a4Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8.0;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12.0;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16.0;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20.0;
-
-  final result = passStruct16BytesHomogeneousFloatx5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStruct16BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed),
-    double Function(
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed)>("PassStruct16BytesMixedx10", isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 8 byte aligned.
-void testPassStruct16BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-  a1.a0 = -3.0;
-  a1.a1 = 4;
-  a2.a0 = -5.0;
-  a2.a1 = 6;
-  a3.a0 = -7.0;
-  a3.a1 = 8;
-  a4.a0 = -9.0;
-  a4.a1 = 10;
-  a5.a0 = -11.0;
-  a5.a1 = 12;
-  a6.a0 = -13.0;
-  a6.a1 = 14;
-  a7.a0 = -15.0;
-  a7.a1 = 16;
-  a8.a0 = -17.0;
-  a8.a1 = 18;
-  a9.a0 = -19.0;
-  a9.a1 = 20;
-
-  final result =
-      passStruct16BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct16BytesMixed2x10Leaf = ffiTestFunctions.lookupFunction<
-    Float Function(
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2),
-    double Function(
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2)>("PassStruct16BytesMixed2x10", isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 4 byte aligned.
-void testPassStruct16BytesMixed2x10Leaf() {
-  final a0Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20;
-  a5.a0 = -21.0;
-  a5.a1 = 22.0;
-  a5.a2 = -23.0;
-  a5.a3 = 24;
-  a6.a0 = -25.0;
-  a6.a1 = 26.0;
-  a6.a2 = -27.0;
-  a6.a3 = 28;
-  a7.a0 = -29.0;
-  a7.a1 = 30.0;
-  a7.a2 = -31.0;
-  a7.a3 = 32;
-  a8.a0 = -33.0;
-  a8.a1 = 34.0;
-  a8.a2 = -35.0;
-  a8.a3 = 36;
-  a9.a0 = -37.0;
-  a9.a1 = 38.0;
-  a9.a2 = -39.0;
-  a9.a3 = 40;
-
-  final result =
-      passStruct16BytesMixed2x10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(20.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct17BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt),
-    int Function(
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt)>("PassStruct17BytesIntx10", isLeaf: true);
-
-/// Arguments are passed as pointer to copy on arm64.
-/// Tests that the memory allocated for copies are rounded up to word size.
-void testPassStruct17BytesIntx10Leaf() {
-  final a0Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct17BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct19BytesHomogeneousUint8x10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8),
-            int Function(
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8)>(
-        "PassStruct19BytesHomogeneousUint8x10",
-        isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is extended to the right size.
-///
-void testPassStruct19BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a0.a9 = 10;
-  a0.a10 = 11;
-  a0.a11 = 12;
-  a0.a12 = 13;
-  a0.a13 = 14;
-  a0.a14 = 15;
-  a0.a15 = 16;
-  a0.a16 = 17;
-  a0.a17 = 18;
-  a0.a18 = 19;
-  a1.a0 = 20;
-  a1.a1 = 21;
-  a1.a2 = 22;
-  a1.a3 = 23;
-  a1.a4 = 24;
-  a1.a5 = 25;
-  a1.a6 = 26;
-  a1.a7 = 27;
-  a1.a8 = 28;
-  a1.a9 = 29;
-  a1.a10 = 30;
-  a1.a11 = 31;
-  a1.a12 = 32;
-  a1.a13 = 33;
-  a1.a14 = 34;
-  a1.a15 = 35;
-  a1.a16 = 36;
-  a1.a17 = 37;
-  a1.a18 = 38;
-  a2.a0 = 39;
-  a2.a1 = 40;
-  a2.a2 = 41;
-  a2.a3 = 42;
-  a2.a4 = 43;
-  a2.a5 = 44;
-  a2.a6 = 45;
-  a2.a7 = 46;
-  a2.a8 = 47;
-  a2.a9 = 48;
-  a2.a10 = 49;
-  a2.a11 = 50;
-  a2.a12 = 51;
-  a2.a13 = 52;
-  a2.a14 = 53;
-  a2.a15 = 54;
-  a2.a16 = 55;
-  a2.a17 = 56;
-  a2.a18 = 57;
-  a3.a0 = 58;
-  a3.a1 = 59;
-  a3.a2 = 60;
-  a3.a3 = 61;
-  a3.a4 = 62;
-  a3.a5 = 63;
-  a3.a6 = 64;
-  a3.a7 = 65;
-  a3.a8 = 66;
-  a3.a9 = 67;
-  a3.a10 = 68;
-  a3.a11 = 69;
-  a3.a12 = 70;
-  a3.a13 = 71;
-  a3.a14 = 72;
-  a3.a15 = 73;
-  a3.a16 = 74;
-  a3.a17 = 75;
-  a3.a18 = 76;
-  a4.a0 = 77;
-  a4.a1 = 78;
-  a4.a2 = 79;
-  a4.a3 = 80;
-  a4.a4 = 81;
-  a4.a5 = 82;
-  a4.a6 = 83;
-  a4.a7 = 84;
-  a4.a8 = 85;
-  a4.a9 = 86;
-  a4.a10 = 87;
-  a4.a11 = 88;
-  a4.a12 = 89;
-  a4.a13 = 90;
-  a4.a14 = 91;
-  a4.a15 = 92;
-  a4.a16 = 93;
-  a4.a17 = 94;
-  a4.a18 = 95;
-  a5.a0 = 96;
-  a5.a1 = 97;
-  a5.a2 = 98;
-  a5.a3 = 99;
-  a5.a4 = 100;
-  a5.a5 = 101;
-  a5.a6 = 102;
-  a5.a7 = 103;
-  a5.a8 = 104;
-  a5.a9 = 105;
-  a5.a10 = 106;
-  a5.a11 = 107;
-  a5.a12 = 108;
-  a5.a13 = 109;
-  a5.a14 = 110;
-  a5.a15 = 111;
-  a5.a16 = 112;
-  a5.a17 = 113;
-  a5.a18 = 114;
-  a6.a0 = 115;
-  a6.a1 = 116;
-  a6.a2 = 117;
-  a6.a3 = 118;
-  a6.a4 = 119;
-  a6.a5 = 120;
-  a6.a6 = 121;
-  a6.a7 = 122;
-  a6.a8 = 123;
-  a6.a9 = 124;
-  a6.a10 = 125;
-  a6.a11 = 126;
-  a6.a12 = 127;
-  a6.a13 = 128;
-  a6.a14 = 129;
-  a6.a15 = 130;
-  a6.a16 = 131;
-  a6.a17 = 132;
-  a6.a18 = 133;
-  a7.a0 = 134;
-  a7.a1 = 135;
-  a7.a2 = 136;
-  a7.a3 = 137;
-  a7.a4 = 138;
-  a7.a5 = 139;
-  a7.a6 = 140;
-  a7.a7 = 141;
-  a7.a8 = 142;
-  a7.a9 = 143;
-  a7.a10 = 144;
-  a7.a11 = 145;
-  a7.a12 = 146;
-  a7.a13 = 147;
-  a7.a14 = 148;
-  a7.a15 = 149;
-  a7.a16 = 150;
-  a7.a17 = 151;
-  a7.a18 = 152;
-  a8.a0 = 153;
-  a8.a1 = 154;
-  a8.a2 = 155;
-  a8.a3 = 156;
-  a8.a4 = 157;
-  a8.a5 = 158;
-  a8.a6 = 159;
-  a8.a7 = 160;
-  a8.a8 = 161;
-  a8.a9 = 162;
-  a8.a10 = 163;
-  a8.a11 = 164;
-  a8.a12 = 165;
-  a8.a13 = 166;
-  a8.a14 = 167;
-  a8.a15 = 168;
-  a8.a16 = 169;
-  a8.a17 = 170;
-  a8.a18 = 171;
-  a9.a0 = 172;
-  a9.a1 = 173;
-  a9.a2 = 174;
-  a9.a3 = 175;
-  a9.a4 = 176;
-  a9.a5 = 177;
-  a9.a6 = 178;
-  a9.a7 = 179;
-  a9.a8 = 180;
-  a9.a9 = 181;
-  a9.a10 = 182;
-  a9.a11 = 183;
-  a9.a12 = 184;
-  a9.a13 = 185;
-  a9.a14 = 186;
-  a9.a15 = 187;
-  a9.a16 = 188;
-  a9.a17 = 189;
-  a9.a18 = 190;
-
-  final result = passStruct19BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(18145, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct20BytesHomogeneousInt32x10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int32 Function(
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32),
-            int Function(
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32)>(
-        "PassStruct20BytesHomogeneousInt32x10",
-        isLeaf: true);
-
-/// Argument too big to go into integer registers on arm64.
-/// The arguments are passed as pointers to copies.
-/// The amount of arguments exhausts the number of integer registers, such that
-/// pointers to copies are also passed on the stack.
-void testPassStruct20BytesHomogeneousInt32x10Leaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a0.a3 = 4;
-  a0.a4 = -5;
-  a1.a0 = 6;
-  a1.a1 = -7;
-  a1.a2 = 8;
-  a1.a3 = -9;
-  a1.a4 = 10;
-  a2.a0 = -11;
-  a2.a1 = 12;
-  a2.a2 = -13;
-  a2.a3 = 14;
-  a2.a4 = -15;
-  a3.a0 = 16;
-  a3.a1 = -17;
-  a3.a2 = 18;
-  a3.a3 = -19;
-  a3.a4 = 20;
-  a4.a0 = -21;
-  a4.a1 = 22;
-  a4.a2 = -23;
-  a4.a3 = 24;
-  a4.a4 = -25;
-  a5.a0 = 26;
-  a5.a1 = -27;
-  a5.a2 = 28;
-  a5.a3 = -29;
-  a5.a4 = 30;
-  a6.a0 = -31;
-  a6.a1 = 32;
-  a6.a2 = -33;
-  a6.a3 = 34;
-  a6.a4 = -35;
-  a7.a0 = 36;
-  a7.a1 = -37;
-  a7.a2 = 38;
-  a7.a3 = -39;
-  a7.a4 = 40;
-  a8.a0 = -41;
-  a8.a1 = 42;
-  a8.a2 = -43;
-  a8.a3 = 44;
-  a8.a4 = -45;
-  a9.a0 = 46;
-  a9.a1 = -47;
-  a9.a2 = 48;
-  a9.a3 = -49;
-  a9.a4 = 50;
-
-  final result = passStruct20BytesHomogeneousInt32x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(25, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-        Float Function(Struct20BytesHomogeneousFloat),
-        double Function(Struct20BytesHomogeneousFloat)>(
-    "PassStruct20BytesHomogeneousFloat",
-    isLeaf: true);
-
-/// Argument too big to go into FPU registers in hardfp and arm64.
-void testPassStruct20BytesHomogeneousFloatLeaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousFloat>();
-  final Struct20BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-
-  final result = passStruct20BytesHomogeneousFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(-3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct32BytesHomogeneousDoublex5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble),
-            double Function(
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble)>(
-        "PassStruct32BytesHomogeneousDoublex5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStruct32BytesHomogeneousDoublex5Leaf() {
-  final a0Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a4 = a4Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8.0;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12.0;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16.0;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20.0;
-
-  final result = passStruct32BytesHomogeneousDoublex5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStruct40BytesHomogeneousDoubleLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct40BytesHomogeneousDouble),
-        double Function(Struct40BytesHomogeneousDouble)>(
-    "PassStruct40BytesHomogeneousDouble",
-    isLeaf: true);
-
-/// Argument too big to go into FPU registers in arm64.
-void testPassStruct40BytesHomogeneousDoubleLeaf() {
-  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
-  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-
-  final result = passStruct40BytesHomogeneousDoubleLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(-3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct1024BytesHomogeneousUint64Leaf =
-    ffiTestFunctions.lookupFunction<
-            Uint64 Function(Struct1024BytesHomogeneousUint64),
-            int Function(Struct1024BytesHomogeneousUint64)>(
-        "PassStruct1024BytesHomogeneousUint64",
-        isLeaf: true);
-
-/// Test 1kb struct.
-void testPassStruct1024BytesHomogeneousUint64Leaf() {
-  final a0Pointer = calloc<Struct1024BytesHomogeneousUint64>();
-  final Struct1024BytesHomogeneousUint64 a0 = a0Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a0.a9 = 10;
-  a0.a10 = 11;
-  a0.a11 = 12;
-  a0.a12 = 13;
-  a0.a13 = 14;
-  a0.a14 = 15;
-  a0.a15 = 16;
-  a0.a16 = 17;
-  a0.a17 = 18;
-  a0.a18 = 19;
-  a0.a19 = 20;
-  a0.a20 = 21;
-  a0.a21 = 22;
-  a0.a22 = 23;
-  a0.a23 = 24;
-  a0.a24 = 25;
-  a0.a25 = 26;
-  a0.a26 = 27;
-  a0.a27 = 28;
-  a0.a28 = 29;
-  a0.a29 = 30;
-  a0.a30 = 31;
-  a0.a31 = 32;
-  a0.a32 = 33;
-  a0.a33 = 34;
-  a0.a34 = 35;
-  a0.a35 = 36;
-  a0.a36 = 37;
-  a0.a37 = 38;
-  a0.a38 = 39;
-  a0.a39 = 40;
-  a0.a40 = 41;
-  a0.a41 = 42;
-  a0.a42 = 43;
-  a0.a43 = 44;
-  a0.a44 = 45;
-  a0.a45 = 46;
-  a0.a46 = 47;
-  a0.a47 = 48;
-  a0.a48 = 49;
-  a0.a49 = 50;
-  a0.a50 = 51;
-  a0.a51 = 52;
-  a0.a52 = 53;
-  a0.a53 = 54;
-  a0.a54 = 55;
-  a0.a55 = 56;
-  a0.a56 = 57;
-  a0.a57 = 58;
-  a0.a58 = 59;
-  a0.a59 = 60;
-  a0.a60 = 61;
-  a0.a61 = 62;
-  a0.a62 = 63;
-  a0.a63 = 64;
-  a0.a64 = 65;
-  a0.a65 = 66;
-  a0.a66 = 67;
-  a0.a67 = 68;
-  a0.a68 = 69;
-  a0.a69 = 70;
-  a0.a70 = 71;
-  a0.a71 = 72;
-  a0.a72 = 73;
-  a0.a73 = 74;
-  a0.a74 = 75;
-  a0.a75 = 76;
-  a0.a76 = 77;
-  a0.a77 = 78;
-  a0.a78 = 79;
-  a0.a79 = 80;
-  a0.a80 = 81;
-  a0.a81 = 82;
-  a0.a82 = 83;
-  a0.a83 = 84;
-  a0.a84 = 85;
-  a0.a85 = 86;
-  a0.a86 = 87;
-  a0.a87 = 88;
-  a0.a88 = 89;
-  a0.a89 = 90;
-  a0.a90 = 91;
-  a0.a91 = 92;
-  a0.a92 = 93;
-  a0.a93 = 94;
-  a0.a94 = 95;
-  a0.a95 = 96;
-  a0.a96 = 97;
-  a0.a97 = 98;
-  a0.a98 = 99;
-  a0.a99 = 100;
-  a0.a100 = 101;
-  a0.a101 = 102;
-  a0.a102 = 103;
-  a0.a103 = 104;
-  a0.a104 = 105;
-  a0.a105 = 106;
-  a0.a106 = 107;
-  a0.a107 = 108;
-  a0.a108 = 109;
-  a0.a109 = 110;
-  a0.a110 = 111;
-  a0.a111 = 112;
-  a0.a112 = 113;
-  a0.a113 = 114;
-  a0.a114 = 115;
-  a0.a115 = 116;
-  a0.a116 = 117;
-  a0.a117 = 118;
-  a0.a118 = 119;
-  a0.a119 = 120;
-  a0.a120 = 121;
-  a0.a121 = 122;
-  a0.a122 = 123;
-  a0.a123 = 124;
-  a0.a124 = 125;
-  a0.a125 = 126;
-  a0.a126 = 127;
-  a0.a127 = 128;
-
-  final result = passStruct1024BytesHomogeneousUint64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(8256, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf =
-    ffiTestFunctions.lookupFunction<
-            Float Function(
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float),
-            double Function(
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double)>("PassFloatStruct16BytesHomogeneousFloatFloatStruct1",
-        isLeaf: true);
-
-/// Tests the alignment of structs in FPU registers and backfilling.
-void testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf() {
-  double a0;
-  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
-  double a2;
-  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
-  double a4;
-  final a5Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a5 = a5Pointer.ref;
-  double a6;
-  final a7Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1.0;
-  a1.a0 = 2.0;
-  a1.a1 = -3.0;
-  a1.a2 = 4.0;
-  a1.a3 = -5.0;
-  a2 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a3.a2 = -9.0;
-  a3.a3 = 10.0;
-  a4 = -11.0;
-  a5.a0 = 12.0;
-  a5.a1 = -13.0;
-  a5.a2 = 14.0;
-  a5.a3 = -15.0;
-  a6 = 16.0;
-  a7.a0 = -17.0;
-  a7.a1 = 18.0;
-  a7.a2 = -19.0;
-  a7.a3 = 20.0;
-  a8 = -21.0;
-
-  final result = passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-11.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float),
-            double Function(
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double)>("PassFloatStruct32BytesHomogeneousDoubleFloatStruct",
-        isLeaf: true);
-
-/// Tests the alignment of structs in FPU registers and backfilling.
-void testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf() {
-  double a0;
-  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
-  double a2;
-  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
-  double a4;
-  final a5Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a5 = a5Pointer.ref;
-  double a6;
-  final a7Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1.0;
-  a1.a0 = 2.0;
-  a1.a1 = -3.0;
-  a1.a2 = 4.0;
-  a1.a3 = -5.0;
-  a2 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a3.a2 = -9.0;
-  a3.a3 = 10.0;
-  a4 = -11.0;
-  a5.a0 = 12.0;
-  a5.a1 = -13.0;
-  a5.a2 = 14.0;
-  a5.a3 = -15.0;
-  a6 = 16.0;
-  a7.a0 = -17.0;
-  a7.a1 = 18.0;
-  a7.a2 = -19.0;
-  a7.a3 = 20.0;
-  a8 = -21.0;
-
-  final result = passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-11.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(Int8, Struct16BytesMixed, Int8, Struct16BytesMixed,
-                Int8, Struct16BytesMixed, Int8, Struct16BytesMixed, Int8),
-            double Function(
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int)>("PassInt8Struct16BytesMixedInt8Struct16BytesMixedIn",
-        isLeaf: true);
-
-/// Tests the alignment of structs in integers registers and on the stack.
-/// Arm32 aligns this struct at 8.
-/// Also, arm32 allocates the second struct partially in registers, partially
-/// on stack.
-/// Test backfilling of integer registers.
-void testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a1 = a1Pointer.ref;
-  int a2;
-  final a3Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a3 = a3Pointer.ref;
-  int a4;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  int a6;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  int a8;
-
-  a0 = -1;
-  a1.a0 = 2.0;
-  a1.a1 = -3;
-  a2 = 4;
-  a3.a0 = -5.0;
-  a3.a1 = 6;
-  a4 = -7;
-  a5.a0 = 8.0;
-  a5.a1 = -9;
-  a6 = 10;
-  a7.a0 = -11.0;
-  a7.a1 = 12;
-  a8 = -13;
-
-  final result = passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-7.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passDoublex6Struct16BytesMixedx4Int32Leaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Int32),
-        double Function(
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            int)>("PassDoublex6Struct16BytesMixedx4Int32", isLeaf: true);
-
-/// On Linux x64, it will exhaust xmm registers first, after 6 doubles and 2
-/// structs. The rest of the structs will go on the stack.
-/// The int will be backfilled into the int register.
-void testPassDoublex6Struct16BytesMixedx4Int32Leaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-  double a5;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a9 = a9Pointer.ref;
-  int a10;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-  a5 = 6.0;
-  a6.a0 = -7.0;
-  a6.a1 = 8;
-  a7.a0 = -9.0;
-  a7.a1 = 10;
-  a8.a0 = -11.0;
-  a8.a1 = 12;
-  a9.a0 = -13.0;
-  a9.a1 = 14;
-  a10 = -15;
-
-  final result = passDoublex6Struct16BytesMixedx4Int32Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
-
-  print("result = $result");
-
-  Expect.approxEquals(-8.0, result);
-
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passInt32x4Struct16BytesMixedx4DoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(Int32, Int32, Int32, Int32, Struct16BytesMixed,
-            Struct16BytesMixed, Struct16BytesMixed, Struct16BytesMixed, Double),
-        double Function(
-            int,
-            int,
-            int,
-            int,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            double)>("PassInt32x4Struct16BytesMixedx4Double", isLeaf: true);
-
-/// On Linux x64, it will exhaust int registers first.
-/// The rest of the structs will go on the stack.
-/// The double will be backfilled into the xmm register.
-void testPassInt32x4Struct16BytesMixedx4DoubleLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  final a4Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4.a0 = -5.0;
-  a4.a1 = 6;
-  a5.a0 = -7.0;
-  a5.a1 = 8;
-  a6.a0 = -9.0;
-  a6.a1 = 10;
-  a7.a0 = -11.0;
-  a7.a1 = 12;
-  a8 = -13.0;
-
-  final result = passInt32x4Struct16BytesMixedx4DoubleLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-7.0, result);
-
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(Struct40BytesHomogeneousDouble,
-                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat),
-            double Function(Struct40BytesHomogeneousDouble,
-                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat)>(
-        "PassStruct40BytesHomogeneousDoubleStruct4BytesHomo",
-        isLeaf: true);
-
-/// On various architectures, first struct is allocated on stack.
-/// Check that the other two arguments are allocated on registers.
-void testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf() {
-  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
-  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-  a1.a0 = 6;
-  a1.a1 = -7;
-  a2.a0 = 8.0;
-  a2.a1 = -9.0;
-
-  final result =
-      passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(-5.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-}
-
-final passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Int64,
-            Int8,
-            Struct1ByteInt,
-            Int64,
-            Int8,
-            Struct4BytesHomogeneousInt16,
-            Int64,
-            Int8,
-            Struct8BytesInt,
-            Int64,
-            Int8,
-            Struct8BytesHomogeneousFloat,
-            Int64,
-            Int8,
-            Struct8BytesMixed,
-            Int64,
-            Int8,
-            StructAlignmentInt16,
-            Int64,
-            Int8,
-            StructAlignmentInt32,
-            Int64,
-            Int8,
-            StructAlignmentInt64),
-        double Function(
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            int,
-            int,
-            Struct1ByteInt,
-            int,
-            int,
-            Struct4BytesHomogeneousInt16,
-            int,
-            int,
-            Struct8BytesInt,
-            int,
-            int,
-            Struct8BytesHomogeneousFloat,
-            int,
-            int,
-            Struct8BytesMixed,
-            int,
-            int,
-            StructAlignmentInt16,
-            int,
-            int,
-            StructAlignmentInt32,
-            int,
-            int,
-            StructAlignmentInt64)>("PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  double a8;
-  double a9;
-  double a10;
-  double a11;
-  double a12;
-  double a13;
-  double a14;
-  double a15;
-  int a16;
-  int a17;
-  final a18Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a18 = a18Pointer.ref;
-  int a19;
-  int a20;
-  final a21Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a21 = a21Pointer.ref;
-  int a22;
-  int a23;
-  final a24Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a24 = a24Pointer.ref;
-  int a25;
-  int a26;
-  final a27Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a27 = a27Pointer.ref;
-  int a28;
-  int a29;
-  final a30Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a30 = a30Pointer.ref;
-  int a31;
-  int a32;
-  final a33Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a33 = a33Pointer.ref;
-  int a34;
-  int a35;
-  final a36Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a36 = a36Pointer.ref;
-  int a37;
-  int a38;
-  final a39Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a39 = a39Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8 = -9.0;
-  a9 = 10.0;
-  a10 = -11.0;
-  a11 = 12.0;
-  a12 = -13.0;
-  a13 = 14.0;
-  a14 = -15.0;
-  a15 = 16.0;
-  a16 = -17;
-  a17 = 18;
-  a18.a0 = -19;
-  a19 = 20;
-  a20 = -21;
-  a21.a0 = 22;
-  a21.a1 = -23;
-  a22 = 24;
-  a23 = -25;
-  a24.a0 = 26;
-  a24.a1 = -27;
-  a24.a2 = 28;
-  a25 = -29;
-  a26 = 30;
-  a27.a0 = -31.0;
-  a27.a1 = 32.0;
-  a28 = -33;
-  a29 = 34;
-  a30.a0 = -35.0;
-  a30.a1 = 36;
-  a30.a2 = -37;
-  a31 = 38;
-  a32 = -39;
-  a33.a0 = 40;
-  a33.a1 = -41;
-  a33.a2 = 42;
-  a34 = -43;
-  a35 = 44;
-  a36.a0 = -45;
-  a36.a1 = 46;
-  a36.a2 = -47;
-  a37 = 48;
-  a38 = -49;
-  a39.a0 = 50;
-  a39.a1 = -51;
-  a39.a2 = 52;
-
-  final result = passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf(
-      a0,
-      a1,
-      a2,
-      a3,
-      a4,
-      a5,
-      a6,
-      a7,
-      a8,
-      a9,
-      a10,
-      a11,
-      a12,
-      a13,
-      a14,
-      a15,
-      a16,
-      a17,
-      a18,
-      a19,
-      a20,
-      a21,
-      a22,
-      a23,
-      a24,
-      a25,
-      a26,
-      a27,
-      a28,
-      a29,
-      a30,
-      a31,
-      a32,
-      a33,
-      a34,
-      a35,
-      a36,
-      a37,
-      a38,
-      a39);
-
-  print("result = $result");
-
-  Expect.approxEquals(26.0, result);
-
-  calloc.free(a18Pointer);
-  calloc.free(a21Pointer);
-  calloc.free(a24Pointer);
-  calloc.free(a27Pointer);
-  calloc.free(a30Pointer);
-  calloc.free(a33Pointer);
-  calloc.free(a36Pointer);
-  calloc.free(a39Pointer);
-}
-
-final passStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt16),
-    int Function(
-        StructAlignmentInt16)>("PassStructAlignmentInt16", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testPassStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt16Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt32),
-    int Function(
-        StructAlignmentInt32)>("PassStructAlignmentInt32", isLeaf: true);
-
-/// Test alignment and padding of 32 byte int within struct.
-void testPassStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt64),
-    int Function(
-        StructAlignmentInt64)>("PassStructAlignmentInt64", isLeaf: true);
-
-/// Test alignment and padding of 64 byte int within struct.
-void testPassStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct8BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt),
-    int Function(
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt)>("PassStruct8BytesNestedIntx10", isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust registers on all platforms.
-void testPassStruct8BytesNestedIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3;
-  a0.a1.a1 = 4;
-  a1.a0.a0 = -5;
-  a1.a0.a1 = 6;
-  a1.a1.a0 = -7;
-  a1.a1.a1 = 8;
-  a2.a0.a0 = -9;
-  a2.a0.a1 = 10;
-  a2.a1.a0 = -11;
-  a2.a1.a1 = 12;
-  a3.a0.a0 = -13;
-  a3.a0.a1 = 14;
-  a3.a1.a0 = -15;
-  a3.a1.a1 = 16;
-  a4.a0.a0 = -17;
-  a4.a0.a1 = 18;
-  a4.a1.a0 = -19;
-  a4.a1.a1 = 20;
-  a5.a0.a0 = -21;
-  a5.a0.a1 = 22;
-  a5.a1.a0 = -23;
-  a5.a1.a1 = 24;
-  a6.a0.a0 = -25;
-  a6.a0.a1 = 26;
-  a6.a1.a0 = -27;
-  a6.a1.a1 = 28;
-  a7.a0.a0 = -29;
-  a7.a0.a1 = 30;
-  a7.a1.a0 = -31;
-  a7.a1.a1 = 32;
-  a8.a0.a0 = -33;
-  a8.a0.a1 = 34;
-  a8.a1.a0 = -35;
-  a8.a1.a1 = 36;
-  a9.a0.a0 = -37;
-  a9.a0.a1 = 38;
-  a9.a1.a0 = -39;
-  a9.a1.a1 = 40;
-
-  final result =
-      passStruct8BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(20, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat),
-        double Function(
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat)>("PassStruct8BytesNestedFloatx10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust fpu registers on all platforms.
-void testPassStruct8BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1.a0 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a1.a0 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a1.a0 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a1.a0 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a1.a0 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a1.a0 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a1.a0 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a1.a0 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a1.a0 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a1.a0 = 20.0;
-
-  final result = passStruct8BytesNestedFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedFloat2x10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2),
-        double Function(
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2)>("PassStruct8BytesNestedFloat2x10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust fpu registers on all platforms.
-/// The nesting is irregular, testing homogenous float rules on arm and arm64,
-/// and the fpu register usage on x64.
-void testPassStruct8BytesNestedFloat2x10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a1 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a1 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a1 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a1 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a1 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a1 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a1 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a1 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a1 = 20.0;
-
-  final result = passStruct8BytesNestedFloat2x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedMixedx10Leaf = ffiTestFunctions.lookupFunction<
-        Double Function(
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed),
-        double Function(
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed)>("PassStruct8BytesNestedMixedx10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust all registers on all platforms.
-void testPassStruct8BytesNestedMixedx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3.0;
-  a1.a0.a0 = 4;
-  a1.a0.a1 = -5;
-  a1.a1.a0 = 6.0;
-  a2.a0.a0 = -7;
-  a2.a0.a1 = 8;
-  a2.a1.a0 = -9.0;
-  a3.a0.a0 = 10;
-  a3.a0.a1 = -11;
-  a3.a1.a0 = 12.0;
-  a4.a0.a0 = -13;
-  a4.a0.a1 = 14;
-  a4.a1.a0 = -15.0;
-  a5.a0.a0 = 16;
-  a5.a0.a1 = -17;
-  a5.a1.a0 = 18.0;
-  a6.a0.a0 = -19;
-  a6.a0.a1 = 20;
-  a6.a1.a0 = -21.0;
-  a7.a0.a0 = 22;
-  a7.a0.a1 = -23;
-  a7.a1.a0 = 24.0;
-  a8.a0.a0 = -25;
-  a8.a0.a1 = 26;
-  a8.a1.a0 = -27.0;
-  a9.a0.a0 = 28;
-  a9.a0.a1 = -29;
-  a9.a1.a0 = 30.0;
-
-  final result = passStruct8BytesNestedMixedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct16BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(Struct16BytesNestedInt, Struct16BytesNestedInt),
-    int Function(Struct16BytesNestedInt,
-        Struct16BytesNestedInt)>("PassStruct16BytesNestedIntx2", isLeaf: true);
-
-/// Deeper nested struct to test recursive member access.
-void testPassStruct16BytesNestedIntx2Leaf() {
-  final a0Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0 = -1;
-  a0.a0.a0.a1 = 2;
-  a0.a0.a1.a0 = -3;
-  a0.a0.a1.a1 = 4;
-  a0.a1.a0.a0 = -5;
-  a0.a1.a0.a1 = 6;
-  a0.a1.a1.a0 = -7;
-  a0.a1.a1.a1 = 8;
-  a1.a0.a0.a0 = -9;
-  a1.a0.a0.a1 = 10;
-  a1.a0.a1.a0 = -11;
-  a1.a0.a1.a1 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15;
-  a1.a1.a1.a1 = 16;
-
-  final result = passStruct16BytesNestedIntx2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(8, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final passStruct32BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(Struct32BytesNestedInt, Struct32BytesNestedInt),
-    int Function(Struct32BytesNestedInt,
-        Struct32BytesNestedInt)>("PassStruct32BytesNestedIntx2", isLeaf: true);
-
-/// Even deeper nested struct to test recursive member access.
-void testPassStruct32BytesNestedIntx2Leaf() {
-  final a0Pointer = calloc<Struct32BytesNestedInt>();
-  final Struct32BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct32BytesNestedInt>();
-  final Struct32BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0.a0 = -1;
-  a0.a0.a0.a0.a1 = 2;
-  a0.a0.a0.a1.a0 = -3;
-  a0.a0.a0.a1.a1 = 4;
-  a0.a0.a1.a0.a0 = -5;
-  a0.a0.a1.a0.a1 = 6;
-  a0.a0.a1.a1.a0 = -7;
-  a0.a0.a1.a1.a1 = 8;
-  a0.a1.a0.a0.a0 = -9;
-  a0.a1.a0.a0.a1 = 10;
-  a0.a1.a0.a1.a0 = -11;
-  a0.a1.a0.a1.a1 = 12;
-  a0.a1.a1.a0.a0 = -13;
-  a0.a1.a1.a0.a1 = 14;
-  a0.a1.a1.a1.a0 = -15;
-  a0.a1.a1.a1.a1 = 16;
-  a1.a0.a0.a0.a0 = -17;
-  a1.a0.a0.a0.a1 = 18;
-  a1.a0.a0.a1.a0 = -19;
-  a1.a0.a0.a1.a1 = 20;
-  a1.a0.a1.a0.a0 = -21;
-  a1.a0.a1.a0.a1 = 22;
-  a1.a0.a1.a1.a0 = -23;
-  a1.a0.a1.a1.a1 = 24;
-  a1.a1.a0.a0.a0 = -25;
-  a1.a1.a0.a0.a1 = 26;
-  a1.a1.a0.a1.a0 = -27;
-  a1.a1.a0.a1.a1 = 28;
-  a1.a1.a1.a0.a0 = -29;
-  a1.a1.a1.a0.a1 = 30;
-  a1.a1.a1.a1.a0 = -31;
-  a1.a1.a1.a1.a1 = 32;
-
-  final result = passStruct32BytesNestedIntx2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(16, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt16Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt16),
-            int Function(StructNestedIntStructAlignmentInt16)>(
-        "PassStructNestedIntStructAlignmentInt16",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 16 byte int.
-void testPassStructNestedIntStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt16>();
-  final StructNestedIntStructAlignmentInt16 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt16Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt32Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt32),
-            int Function(StructNestedIntStructAlignmentInt32)>(
-        "PassStructNestedIntStructAlignmentInt32",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 32 byte int.
-void testPassStructNestedIntStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt32>();
-  final StructNestedIntStructAlignmentInt32 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt64Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt64),
-            int Function(StructNestedIntStructAlignmentInt64)>(
-        "PassStructNestedIntStructAlignmentInt64",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 64 byte int.
-void testPassStructNestedIntStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt64>();
-  final StructNestedIntStructAlignmentInt64 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIrregularEvenBiggerx4Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger),
-            double Function(
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger)>(
-        "PassStructNestedIrregularEvenBiggerx4",
-        isLeaf: true);
-
-/// Return big irregular struct as smoke test.
-void testPassStructNestedIrregularEvenBiggerx4Leaf() {
-  final a0Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a3 = a3Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1.a0.a0 = 2;
-  a0.a1.a0.a1.a0.a0 = -3;
-  a0.a1.a0.a1.a0.a1 = 4;
-  a0.a1.a0.a1.a1.a0 = -5.0;
-  a0.a1.a0.a2 = 6;
-  a0.a1.a0.a3.a0.a0 = -7.0;
-  a0.a1.a0.a3.a1 = 8.0;
-  a0.a1.a0.a4 = 9;
-  a0.a1.a0.a5.a0.a0 = 10.0;
-  a0.a1.a0.a5.a1.a0 = -11.0;
-  a0.a1.a0.a6 = 12;
-  a0.a1.a1.a0.a0 = -13;
-  a0.a1.a1.a0.a1 = 14;
-  a0.a1.a1.a1.a0 = -15.0;
-  a0.a1.a2 = 16.0;
-  a0.a1.a3 = -17.0;
-  a0.a2.a0.a0 = 18;
-  a0.a2.a0.a1.a0.a0 = -19;
-  a0.a2.a0.a1.a0.a1 = 20;
-  a0.a2.a0.a1.a1.a0 = -21.0;
-  a0.a2.a0.a2 = 22;
-  a0.a2.a0.a3.a0.a0 = -23.0;
-  a0.a2.a0.a3.a1 = 24.0;
-  a0.a2.a0.a4 = 25;
-  a0.a2.a0.a5.a0.a0 = 26.0;
-  a0.a2.a0.a5.a1.a0 = -27.0;
-  a0.a2.a0.a6 = 28;
-  a0.a2.a1.a0.a0 = -29;
-  a0.a2.a1.a0.a1 = 30;
-  a0.a2.a1.a1.a0 = -31.0;
-  a0.a2.a2 = 32.0;
-  a0.a2.a3 = -33.0;
-  a0.a3 = 34.0;
-  a1.a0 = 35;
-  a1.a1.a0.a0 = 36;
-  a1.a1.a0.a1.a0.a0 = -37;
-  a1.a1.a0.a1.a0.a1 = 38;
-  a1.a1.a0.a1.a1.a0 = -39.0;
-  a1.a1.a0.a2 = 40;
-  a1.a1.a0.a3.a0.a0 = -41.0;
-  a1.a1.a0.a3.a1 = 42.0;
-  a1.a1.a0.a4 = 43;
-  a1.a1.a0.a5.a0.a0 = 44.0;
-  a1.a1.a0.a5.a1.a0 = -45.0;
-  a1.a1.a0.a6 = 46;
-  a1.a1.a1.a0.a0 = -47;
-  a1.a1.a1.a0.a1 = 48;
-  a1.a1.a1.a1.a0 = -49.0;
-  a1.a1.a2 = 50.0;
-  a1.a1.a3 = -51.0;
-  a1.a2.a0.a0 = 52;
-  a1.a2.a0.a1.a0.a0 = -53;
-  a1.a2.a0.a1.a0.a1 = 54;
-  a1.a2.a0.a1.a1.a0 = -55.0;
-  a1.a2.a0.a2 = 56;
-  a1.a2.a0.a3.a0.a0 = -57.0;
-  a1.a2.a0.a3.a1 = 58.0;
-  a1.a2.a0.a4 = 59;
-  a1.a2.a0.a5.a0.a0 = 60.0;
-  a1.a2.a0.a5.a1.a0 = -61.0;
-  a1.a2.a0.a6 = 62;
-  a1.a2.a1.a0.a0 = -63;
-  a1.a2.a1.a0.a1 = 64;
-  a1.a2.a1.a1.a0 = -65.0;
-  a1.a2.a2 = 66.0;
-  a1.a2.a3 = -67.0;
-  a1.a3 = 68.0;
-  a2.a0 = 69;
-  a2.a1.a0.a0 = 70;
-  a2.a1.a0.a1.a0.a0 = -71;
-  a2.a1.a0.a1.a0.a1 = 72;
-  a2.a1.a0.a1.a1.a0 = -73.0;
-  a2.a1.a0.a2 = 74;
-  a2.a1.a0.a3.a0.a0 = -75.0;
-  a2.a1.a0.a3.a1 = 76.0;
-  a2.a1.a0.a4 = 77;
-  a2.a1.a0.a5.a0.a0 = 78.0;
-  a2.a1.a0.a5.a1.a0 = -79.0;
-  a2.a1.a0.a6 = 80;
-  a2.a1.a1.a0.a0 = -81;
-  a2.a1.a1.a0.a1 = 82;
-  a2.a1.a1.a1.a0 = -83.0;
-  a2.a1.a2 = 84.0;
-  a2.a1.a3 = -85.0;
-  a2.a2.a0.a0 = 86;
-  a2.a2.a0.a1.a0.a0 = -87;
-  a2.a2.a0.a1.a0.a1 = 88;
-  a2.a2.a0.a1.a1.a0 = -89.0;
-  a2.a2.a0.a2 = 90;
-  a2.a2.a0.a3.a0.a0 = -91.0;
-  a2.a2.a0.a3.a1 = 92.0;
-  a2.a2.a0.a4 = 93;
-  a2.a2.a0.a5.a0.a0 = 94.0;
-  a2.a2.a0.a5.a1.a0 = -95.0;
-  a2.a2.a0.a6 = 96;
-  a2.a2.a1.a0.a0 = -97;
-  a2.a2.a1.a0.a1 = 98;
-  a2.a2.a1.a1.a0 = -99.0;
-  a2.a2.a2 = 100.0;
-  a2.a2.a3 = -101.0;
-  a2.a3 = 102.0;
-  a3.a0 = 103;
-  a3.a1.a0.a0 = 104;
-  a3.a1.a0.a1.a0.a0 = -105;
-  a3.a1.a0.a1.a0.a1 = 106;
-  a3.a1.a0.a1.a1.a0 = -107.0;
-  a3.a1.a0.a2 = 108;
-  a3.a1.a0.a3.a0.a0 = -109.0;
-  a3.a1.a0.a3.a1 = 110.0;
-  a3.a1.a0.a4 = 111;
-  a3.a1.a0.a5.a0.a0 = 112.0;
-  a3.a1.a0.a5.a1.a0 = -113.0;
-  a3.a1.a0.a6 = 114;
-  a3.a1.a1.a0.a0 = -115;
-  a3.a1.a1.a0.a1 = 116;
-  a3.a1.a1.a1.a0 = -117.0;
-  a3.a1.a2 = 118.0;
-  a3.a1.a3 = -119.0;
-  a3.a2.a0.a0 = 120;
-  a3.a2.a0.a1.a0.a0 = -121;
-  a3.a2.a0.a1.a0.a1 = 122;
-  a3.a2.a0.a1.a1.a0 = -123.0;
-  a3.a2.a0.a2 = 124;
-  a3.a2.a0.a3.a0.a0 = -125.0;
-  a3.a2.a0.a3.a1 = 126.0;
-  a3.a2.a0.a4 = 127;
-  a3.a2.a0.a5.a0.a0 = 128.0;
-  a3.a2.a0.a5.a1.a0 = -129.0;
-  a3.a2.a0.a6 = 130;
-  a3.a2.a1.a0.a0 = -131;
-  a3.a2.a1.a0.a1 = 132;
-  a3.a2.a1.a1.a0 = -133.0;
-  a3.a2.a2 = 134.0;
-  a3.a2.a3 = -135.0;
-  a3.a3 = 136.0;
-
-  final result = passStructNestedIrregularEvenBiggerx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(1572.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStruct8BytesInlineArrayIntx4Leaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt),
-        int Function(
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt)>("PassStruct8BytesInlineArrayIntx4",
-    isLeaf: true);
-
-/// Simple struct with inline array.
-void testPassStruct8BytesInlineArrayIntx4Leaf() {
-  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a3 = a3Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-  a1.a0[0] = 9;
-  a1.a0[1] = 10;
-  a1.a0[2] = 11;
-  a1.a0[3] = 12;
-  a1.a0[4] = 13;
-  a1.a0[5] = 14;
-  a1.a0[6] = 15;
-  a1.a0[7] = 16;
-  a2.a0[0] = 17;
-  a2.a0[1] = 18;
-  a2.a0[2] = 19;
-  a2.a0[3] = 20;
-  a2.a0[4] = 21;
-  a2.a0[5] = 22;
-  a2.a0[6] = 23;
-  a2.a0[7] = 24;
-  a3.a0[0] = 25;
-  a3.a0[1] = 26;
-  a3.a0[2] = 27;
-  a3.a0[3] = 28;
-  a3.a0[4] = 29;
-  a3.a0[5] = 30;
-  a3.a0[6] = 31;
-  a3.a0[7] = 32;
-
-  final result = passStruct8BytesInlineArrayIntx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(528, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStructInlineArrayIrregularx4Leaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(StructInlineArrayIrregular, StructInlineArrayIrregular,
-            StructInlineArrayIrregular, StructInlineArrayIrregular),
-        int Function(
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular)>("PassStructInlineArrayIrregularx4",
-    isLeaf: true);
-
-/// Irregular struct with inline array.
-void testPassStructInlineArrayIrregularx4Leaf() {
-  final a0Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a3 = a3Pointer.ref;
-
-  a0.a0[0].a0 = -1;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3;
-  a0.a0[1].a1 = 4;
-  a0.a1 = 5;
-  a1.a0[0].a0 = 6;
-  a1.a0[0].a1 = -7;
-  a1.a0[1].a0 = 8;
-  a1.a0[1].a1 = -9;
-  a1.a1 = 10;
-  a2.a0[0].a0 = -11;
-  a2.a0[0].a1 = 12;
-  a2.a0[1].a0 = -13;
-  a2.a0[1].a1 = 14;
-  a2.a1 = 15;
-  a3.a0[0].a0 = 16;
-  a3.a0[0].a1 = -17;
-  a3.a0[1].a0 = 18;
-  a3.a0[1].a1 = -19;
-  a3.a1 = 20;
-
-  final result = passStructInlineArrayIrregularx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(50, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStructInlineArray100BytesLeaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(StructInlineArray100Bytes),
-        int Function(StructInlineArray100Bytes)>(
-    "PassStructInlineArray100Bytes",
-    isLeaf: true);
-
-/// Regular larger struct with inline array.
-void testPassStructInlineArray100BytesLeaf() {
-  final a0Pointer = calloc<StructInlineArray100Bytes>();
-  final StructInlineArray100Bytes a0 = a0Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-  a0.a0[8] = 9;
-  a0.a0[9] = 10;
-  a0.a0[10] = 11;
-  a0.a0[11] = 12;
-  a0.a0[12] = 13;
-  a0.a0[13] = 14;
-  a0.a0[14] = 15;
-  a0.a0[15] = 16;
-  a0.a0[16] = 17;
-  a0.a0[17] = 18;
-  a0.a0[18] = 19;
-  a0.a0[19] = 20;
-  a0.a0[20] = 21;
-  a0.a0[21] = 22;
-  a0.a0[22] = 23;
-  a0.a0[23] = 24;
-  a0.a0[24] = 25;
-  a0.a0[25] = 26;
-  a0.a0[26] = 27;
-  a0.a0[27] = 28;
-  a0.a0[28] = 29;
-  a0.a0[29] = 30;
-  a0.a0[30] = 31;
-  a0.a0[31] = 32;
-  a0.a0[32] = 33;
-  a0.a0[33] = 34;
-  a0.a0[34] = 35;
-  a0.a0[35] = 36;
-  a0.a0[36] = 37;
-  a0.a0[37] = 38;
-  a0.a0[38] = 39;
-  a0.a0[39] = 40;
-  a0.a0[40] = 41;
-  a0.a0[41] = 42;
-  a0.a0[42] = 43;
-  a0.a0[43] = 44;
-  a0.a0[44] = 45;
-  a0.a0[45] = 46;
-  a0.a0[46] = 47;
-  a0.a0[47] = 48;
-  a0.a0[48] = 49;
-  a0.a0[49] = 50;
-  a0.a0[50] = 51;
-  a0.a0[51] = 52;
-  a0.a0[52] = 53;
-  a0.a0[53] = 54;
-  a0.a0[54] = 55;
-  a0.a0[55] = 56;
-  a0.a0[56] = 57;
-  a0.a0[57] = 58;
-  a0.a0[58] = 59;
-  a0.a0[59] = 60;
-  a0.a0[60] = 61;
-  a0.a0[61] = 62;
-  a0.a0[62] = 63;
-  a0.a0[63] = 64;
-  a0.a0[64] = 65;
-  a0.a0[65] = 66;
-  a0.a0[66] = 67;
-  a0.a0[67] = 68;
-  a0.a0[68] = 69;
-  a0.a0[69] = 70;
-  a0.a0[70] = 71;
-  a0.a0[71] = 72;
-  a0.a0[72] = 73;
-  a0.a0[73] = 74;
-  a0.a0[74] = 75;
-  a0.a0[75] = 76;
-  a0.a0[76] = 77;
-  a0.a0[77] = 78;
-  a0.a0[78] = 79;
-  a0.a0[79] = 80;
-  a0.a0[80] = 81;
-  a0.a0[81] = 82;
-  a0.a0[82] = 83;
-  a0.a0[83] = 84;
-  a0.a0[84] = 85;
-  a0.a0[85] = 86;
-  a0.a0[86] = 87;
-  a0.a0[87] = 88;
-  a0.a0[88] = 89;
-  a0.a0[89] = 90;
-  a0.a0[90] = 91;
-  a0.a0[91] = 92;
-  a0.a0[92] = 93;
-  a0.a0[93] = 94;
-  a0.a0[94] = 95;
-  a0.a0[95] = 96;
-  a0.a0[96] = 97;
-  a0.a0[97] = 98;
-  a0.a0[98] = 99;
-  a0.a0[99] = 100;
-
-  final result = passStructInlineArray100BytesLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(5050, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructStruct16BytesHomogeneousFloat2x5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Float Function(
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2),
-            double Function(
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2)>(
-        "PassStructStruct16BytesHomogeneousFloat2x5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStructStruct16BytesHomogeneousFloat2x5Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a4 = a4Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-  a1.a0.a0 = -5.0;
-  a1.a1[0].a0 = 6.0;
-  a1.a1[1].a0 = -7.0;
-  a1.a2 = 8.0;
-  a2.a0.a0 = -9.0;
-  a2.a1[0].a0 = 10.0;
-  a2.a1[1].a0 = -11.0;
-  a2.a2 = 12.0;
-  a3.a0.a0 = -13.0;
-  a3.a1[0].a0 = 14.0;
-  a3.a1[1].a0 = -15.0;
-  a3.a2 = 16.0;
-  a4.a0.a0 = -17.0;
-  a4.a1[0].a0 = 18.0;
-  a4.a1[1].a0 = -19.0;
-  a4.a2 = 20.0;
-
-  final result =
-      passStructStruct16BytesHomogeneousFloat2x5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStructStruct32BytesHomogeneousDouble2x5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2),
-            double Function(
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2)>(
-        "PassStructStruct32BytesHomogeneousDouble2x5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStructStruct32BytesHomogeneousDouble2x5Leaf() {
-  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a4 = a4Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-  a1.a0.a0 = -5.0;
-  a1.a1[0].a0 = 6.0;
-  a1.a1[1].a0 = -7.0;
-  a1.a2 = 8.0;
-  a2.a0.a0 = -9.0;
-  a2.a1[0].a0 = 10.0;
-  a2.a1[1].a0 = -11.0;
-  a2.a2 = 12.0;
-  a3.a0.a0 = -13.0;
-  a3.a1[0].a0 = 14.0;
-  a3.a1[1].a0 = -15.0;
-  a3.a2 = 16.0;
-  a4.a0.a0 = -17.0;
-  a4.a1[0].a0 = 18.0;
-  a4.a1[1].a0 = -19.0;
-  a4.a2 = 20.0;
-
-  final result =
-      passStructStruct32BytesHomogeneousDouble2x5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStructStruct16BytesMixed3x10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3),
-        double Function(
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3)>("PassStructStruct16BytesMixed3x10",
-    isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 4 byte aligned.
-void testPassStructStruct16BytesMixed3x10Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[0].a1 = -3;
-  a0.a1[0].a2 = 4;
-  a0.a2[0] = -5;
-  a0.a2[1] = 6;
-  a1.a0.a0 = -7.0;
-  a1.a1[0].a0 = 8.0;
-  a1.a1[0].a1 = -9;
-  a1.a1[0].a2 = 10;
-  a1.a2[0] = -11;
-  a1.a2[1] = 12;
-  a2.a0.a0 = -13.0;
-  a2.a1[0].a0 = 14.0;
-  a2.a1[0].a1 = -15;
-  a2.a1[0].a2 = 16;
-  a2.a2[0] = -17;
-  a2.a2[1] = 18;
-  a3.a0.a0 = -19.0;
-  a3.a1[0].a0 = 20.0;
-  a3.a1[0].a1 = -21;
-  a3.a1[0].a2 = 22;
-  a3.a2[0] = -23;
-  a3.a2[1] = 24;
-  a4.a0.a0 = -25.0;
-  a4.a1[0].a0 = 26.0;
-  a4.a1[0].a1 = -27;
-  a4.a1[0].a2 = 28;
-  a4.a2[0] = -29;
-  a4.a2[1] = 30;
-  a5.a0.a0 = -31.0;
-  a5.a1[0].a0 = 32.0;
-  a5.a1[0].a1 = -33;
-  a5.a1[0].a2 = 34;
-  a5.a2[0] = -35;
-  a5.a2[1] = 36;
-  a6.a0.a0 = -37.0;
-  a6.a1[0].a0 = 38.0;
-  a6.a1[0].a1 = -39;
-  a6.a1[0].a2 = 40;
-  a6.a2[0] = -41;
-  a6.a2[1] = 42;
-  a7.a0.a0 = -43.0;
-  a7.a1[0].a0 = 44.0;
-  a7.a1[0].a1 = -45;
-  a7.a1[0].a2 = 46;
-  a7.a2[0] = -47;
-  a7.a2[1] = 48;
-  a8.a0.a0 = -49.0;
-  a8.a1[0].a0 = 50.0;
-  a8.a1[0].a1 = -51;
-  a8.a1[0].a2 = 52;
-  a8.a2[0] = -53;
-  a8.a2[1] = 54;
-  a9.a0.a0 = -55.0;
-  a9.a1[0].a0 = 56.0;
-  a9.a1[0].a1 = -57;
-  a9.a1[0].a2 = 58;
-  a9.a2[0] = -59;
-  a9.a2[1] = 60;
-
-  final result = passStructStruct16BytesMixed3x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(30.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUint8Struct32BytesInlineArrayMultiDimensionalILeaf =
-    ffiTestFunctions.lookupFunction<
-            Uint32 Function(
-                Uint8,
-                Struct32BytesInlineArrayMultiDimensionalInt,
-                Uint8,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                Uint8,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                Uint8),
-            int Function(
-                int,
-                Struct32BytesInlineArrayMultiDimensionalInt,
-                int,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                int,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                int)>("PassUint8Struct32BytesInlineArrayMultiDimensionalI",
-        isLeaf: true);
-
-/// Test multi dimensional inline array struct as argument.
-void testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct32BytesInlineArrayMultiDimensionalInt>();
-  final Struct32BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
-  int a2;
-  final a3Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
-  final Struct8BytesInlineArrayMultiDimensionalInt a3 = a3Pointer.ref;
-  int a4;
-  final a5Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
-  final Struct8BytesInlineArrayMultiDimensionalInt a5 = a5Pointer.ref;
-  int a6;
-
-  a0 = 1;
-  a1.a0[0][0][0][0][0] = 2;
-  a1.a0[0][0][0][0][1] = 3;
-  a1.a0[0][0][0][1][0] = 4;
-  a1.a0[0][0][0][1][1] = 5;
-  a1.a0[0][0][1][0][0] = 6;
-  a1.a0[0][0][1][0][1] = 7;
-  a1.a0[0][0][1][1][0] = 8;
-  a1.a0[0][0][1][1][1] = 9;
-  a1.a0[0][1][0][0][0] = 10;
-  a1.a0[0][1][0][0][1] = 11;
-  a1.a0[0][1][0][1][0] = 12;
-  a1.a0[0][1][0][1][1] = 13;
-  a1.a0[0][1][1][0][0] = 14;
-  a1.a0[0][1][1][0][1] = 15;
-  a1.a0[0][1][1][1][0] = 16;
-  a1.a0[0][1][1][1][1] = 17;
-  a1.a0[1][0][0][0][0] = 18;
-  a1.a0[1][0][0][0][1] = 19;
-  a1.a0[1][0][0][1][0] = 20;
-  a1.a0[1][0][0][1][1] = 21;
-  a1.a0[1][0][1][0][0] = 22;
-  a1.a0[1][0][1][0][1] = 23;
-  a1.a0[1][0][1][1][0] = 24;
-  a1.a0[1][0][1][1][1] = 25;
-  a1.a0[1][1][0][0][0] = 26;
-  a1.a0[1][1][0][0][1] = 27;
-  a1.a0[1][1][0][1][0] = 28;
-  a1.a0[1][1][0][1][1] = 29;
-  a1.a0[1][1][1][0][0] = 30;
-  a1.a0[1][1][1][0][1] = 31;
-  a1.a0[1][1][1][1][0] = 32;
-  a1.a0[1][1][1][1][1] = 33;
-  a2 = 34;
-  a3.a0[0][0][0] = 35;
-  a3.a0[0][0][1] = 36;
-  a3.a0[0][1][0] = 37;
-  a3.a0[0][1][1] = 38;
-  a3.a0[1][0][0] = 39;
-  a3.a0[1][0][1] = 40;
-  a3.a0[1][1][0] = 41;
-  a3.a0[1][1][1] = 42;
-  a4 = 43;
-  a5.a0[0][0][0] = 44;
-  a5.a0[0][0][1] = 45;
-  a5.a0[0][1][0] = 46;
-  a5.a0[0][1][1] = 47;
-  a5.a0[1][0][0] = 48;
-  a5.a0[1][0][1] = 49;
-  a5.a0[1][1][0] = 50;
-  a5.a0[1][1][1] = 51;
-  a6 = 52;
-
-  final result = passUint8Struct32BytesInlineArrayMultiDimensionalILeaf(
-      a0, a1, a2, a3, a4, a5, a6);
-
-  print("result = $result");
-
-  Expect.equals(1378, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-}
-
-final passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf =
-    ffiTestFunctions.lookupFunction<
-            Uint32 Function(
-                Uint8, Struct4BytesInlineArrayMultiDimensionalInt, Uint8),
-            int Function(int, Struct4BytesInlineArrayMultiDimensionalInt, int)>(
-        "PassUint8Struct4BytesInlineArrayMultiDimensionalIn",
-        isLeaf: true);
-
-/// Test struct in multi dimensional inline array.
-void testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct4BytesInlineArrayMultiDimensionalInt>();
-  final Struct4BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
-  int a2;
-
-  a0 = 1;
-  a1.a0[0][0].a0 = 2;
-  a1.a0[0][1].a0 = -3;
-  a1.a0[1][0].a0 = 4;
-  a1.a0[1][1].a0 = -5;
-  a2 = 6;
-
-  final result =
-      passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(5, result);
-
-  calloc.free(a1Pointer);
-}
-
-final passStruct3BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt),
-    int Function(
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt)>("PassStruct3BytesPackedIntx10", isLeaf: true);
-
-/// Small struct with mis-aligned member.
-void testPassStruct3BytesPackedIntx10Leaf() {
-  final a0Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result =
-      passStruct3BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt),
-    int Function(
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt)>("PassStruct8BytesPackedIntx10", isLeaf: true);
-
-/// Struct with mis-aligned member.
-void testPassStruct8BytesPackedIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a1.a0 = 6;
-  a1.a1 = 7;
-  a1.a2 = 8;
-  a1.a3 = 9;
-  a1.a4 = 10;
-  a2.a0 = 11;
-  a2.a1 = 12;
-  a2.a2 = 13;
-  a2.a3 = 14;
-  a2.a4 = 15;
-  a3.a0 = 16;
-  a3.a1 = 17;
-  a3.a2 = 18;
-  a3.a3 = 19;
-  a3.a4 = 20;
-  a4.a0 = 21;
-  a4.a1 = 22;
-  a4.a2 = 23;
-  a4.a3 = 24;
-  a4.a4 = 25;
-  a5.a0 = 26;
-  a5.a1 = 27;
-  a5.a2 = 28;
-  a5.a3 = 29;
-  a5.a4 = 30;
-  a6.a0 = 31;
-  a6.a1 = 32;
-  a6.a2 = 33;
-  a6.a3 = 34;
-  a6.a4 = 35;
-  a7.a0 = 36;
-  a7.a1 = 37;
-  a7.a2 = 38;
-  a7.a3 = 39;
-  a7.a4 = 40;
-  a8.a0 = 41;
-  a8.a1 = 42;
-  a8.a2 = 43;
-  a8.a3 = 44;
-  a8.a4 = 45;
-  a9.a0 = 46;
-  a9.a1 = 47;
-  a9.a2 = 48;
-  a9.a3 = 49;
-  a9.a4 = 50;
-
-  final result =
-      passStruct8BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(1275, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesPackedMixedx10DoubleInt32x2Leaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Double,
-            Int32,
-            Int32),
-        double Function(
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            double,
-            int,
-            int)>("PassStruct9BytesPackedMixedx10DoubleInt32x2", isLeaf: true);
-
-/// Struct with mis-aligned member.
-/// Tests backfilling of CPU and FPU registers.
-void testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf() {
-  final a0Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a9 = a9Pointer.ref;
-  double a10;
-  int a11;
-  int a12;
-
-  a0.a0 = 1;
-  a0.a1 = 2.0;
-  a1.a0 = 3;
-  a1.a1 = 4.0;
-  a2.a0 = 5;
-  a2.a1 = 6.0;
-  a3.a0 = 7;
-  a3.a1 = 8.0;
-  a4.a0 = 9;
-  a4.a1 = 10.0;
-  a5.a0 = 11;
-  a5.a1 = 12.0;
-  a6.a0 = 13;
-  a6.a1 = 14.0;
-  a7.a0 = 15;
-  a7.a1 = 16.0;
-  a8.a0 = 17;
-  a8.a1 = 18.0;
-  a9.a0 = 19;
-  a9.a1 = 20.0;
-  a10 = -21.0;
-  a11 = 22;
-  a12 = -23;
-
-  final result = passStruct9BytesPackedMixedx10DoubleInt32x2Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
-
-  print("result = $result");
-
-  Expect.approxEquals(188.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct5BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Double Function(Struct5BytesPackedMixed),
-    double Function(
-        Struct5BytesPackedMixed)>("PassStruct5BytesPackedMixed", isLeaf: true);
-
-/// This packed struct happens to have only aligned members.
-void testPassStruct5BytesPackedMixedLeaf() {
-  final a0Pointer = calloc<Struct5BytesPackedMixed>();
-  final Struct5BytesPackedMixed a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-
-  final result = passStruct5BytesPackedMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(1.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedAlignmentStruct5BytesPackedMixedLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(StructNestedAlignmentStruct5BytesPackedMixed),
-            double Function(StructNestedAlignmentStruct5BytesPackedMixed)>(
-        "PassStructNestedAlignmentStruct5BytesPackedMixed",
-        isLeaf: true);
-
-/// Check alignment of packed struct in non-packed struct.
-void testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf() {
-  final a0Pointer = calloc<StructNestedAlignmentStruct5BytesPackedMixed>();
-  final StructNestedAlignmentStruct5BytesPackedMixed a0 = a0Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1.a0 = 2.0;
-  a0.a1.a1 = 3;
-
-  final result = passStructNestedAlignmentStruct5BytesPackedMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(6.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct6BytesInlineArrayIntLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct6BytesInlineArrayInt),
-        double Function(Struct6BytesInlineArrayInt)>(
-    "PassStruct6BytesInlineArrayInt",
-    isLeaf: true);
-
-/// Check alignment of packed struct array in non-packed struct.
-void testPassStruct6BytesInlineArrayIntLeaf() {
-  final a0Pointer = calloc<Struct6BytesInlineArrayInt>();
-  final Struct6BytesInlineArrayInt a0 = a0Pointer.ref;
-
-  a0.a0[0].a0 = -1;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3;
-  a0.a0[1].a1 = 4;
-
-  final result = passStruct6BytesInlineArrayIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(2.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct15BytesInlineArrayMixedLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct15BytesInlineArrayMixed),
-        double Function(Struct15BytesInlineArrayMixed)>(
-    "PassStruct15BytesInlineArrayMixed",
-    isLeaf: true);
-
-/// Check alignment of packed struct array in non-packed struct.
-void testPassStruct15BytesInlineArrayMixedLeaf() {
-  final a0Pointer = calloc<Struct15BytesInlineArrayMixed>();
-  final Struct15BytesInlineArrayMixed a0 = a0Pointer.ref;
-
-  a0.a0[0].a0 = -1.0;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3.0;
-  a0.a0[1].a1 = 4;
-  a0.a0[2].a0 = -5.0;
-  a0.a0[2].a1 = 6;
-
-  final result = passStruct15BytesInlineArrayMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passUnion4BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed),
-    double Function(
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed)>("PassUnion4BytesMixedx10", isLeaf: true);
-
-/// Check placement of mixed integer/float union.
-void testPassUnion4BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a1.a0 = 2;
-  a2.a0 = 3;
-  a3.a0 = 4;
-  a4.a0 = 5;
-  a5.a0 = 6;
-  a6.a0 = 7;
-  a7.a0 = 8;
-  a8.a0 = 9;
-  a9.a0 = 10;
-
-  final result =
-      passUnion4BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(55.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat),
-    double Function(
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat)>("PassUnion8BytesNestedFloatx10", isLeaf: true);
-
-/// Check placement of mixed floats union.
-void testPassUnion8BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a1.a0 = 2.0;
-  a2.a0 = -3.0;
-  a3.a0 = 4.0;
-  a4.a0 = -5.0;
-  a5.a0 = 6.0;
-  a6.a0 = -7.0;
-  a7.a0 = 8.0;
-  a8.a0 = -9.0;
-  a9.a0 = 10.0;
-
-  final result =
-      passUnion8BytesNestedFloatx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(5.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion9BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt),
-    double Function(
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt)>("PassUnion9BytesNestedIntx10", isLeaf: true);
-
-/// Mixed-size union argument.
-void testPassUnion9BytesNestedIntx10Leaf() {
-  final a0Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a1.a0.a0 = 4;
-  a1.a0.a1 = -5;
-  a1.a0.a2 = 6;
-  a2.a0.a0 = -7;
-  a2.a0.a1 = 8;
-  a2.a0.a2 = -9;
-  a3.a0.a0 = 10;
-  a3.a0.a1 = -11;
-  a3.a0.a2 = 12;
-  a4.a0.a0 = -13;
-  a4.a0.a1 = 14;
-  a4.a0.a2 = -15;
-  a5.a0.a0 = 16;
-  a5.a0.a1 = -17;
-  a5.a0.a2 = 18;
-  a6.a0.a0 = -19;
-  a6.a0.a1 = 20;
-  a6.a0.a2 = -21;
-  a7.a0.a0 = 22;
-  a7.a0.a1 = -23;
-  a7.a0.a2 = 24;
-  a8.a0.a0 = -25;
-  a8.a0.a1 = 26;
-  a8.a0.a2 = -27;
-  a9.a0.a0 = 28;
-  a9.a0.a1 = -29;
-  a9.a0.a2 = 30;
-
-  final result =
-      passUnion9BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion16BytesNestedInlineArrayFloatx10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat),
-            double Function(
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat)>(
-        "PassUnion16BytesNestedInlineArrayFloatx10",
-        isLeaf: true);
-
-/// Union with homogenous floats.
-void testPassUnion16BytesNestedInlineArrayFloatx10Leaf() {
-  final a0Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a9 = a9Pointer.ref;
-
-  a0.a0[0] = -1.0;
-  a0.a0[1] = 2.0;
-  a0.a0[2] = -3.0;
-  a0.a0[3] = 4.0;
-  a1.a0[0] = -5.0;
-  a1.a0[1] = 6.0;
-  a1.a0[2] = -7.0;
-  a1.a0[3] = 8.0;
-  a2.a0[0] = -9.0;
-  a2.a0[1] = 10.0;
-  a2.a0[2] = -11.0;
-  a2.a0[3] = 12.0;
-  a3.a0[0] = -13.0;
-  a3.a0[1] = 14.0;
-  a3.a0[2] = -15.0;
-  a3.a0[3] = 16.0;
-  a4.a0[0] = -17.0;
-  a4.a0[1] = 18.0;
-  a4.a0[2] = -19.0;
-  a4.a0[3] = 20.0;
-  a5.a0[0] = -21.0;
-  a5.a0[1] = 22.0;
-  a5.a0[2] = -23.0;
-  a5.a0[3] = 24.0;
-  a6.a0[0] = -25.0;
-  a6.a0[1] = 26.0;
-  a6.a0[2] = -27.0;
-  a6.a0[3] = 28.0;
-  a7.a0[0] = -29.0;
-  a7.a0[1] = 30.0;
-  a7.a0[2] = -31.0;
-  a7.a0[3] = 32.0;
-  a8.a0[0] = -33.0;
-  a8.a0[1] = 34.0;
-  a8.a0[2] = -35.0;
-  a8.a0[3] = 36.0;
-  a9.a0[0] = -37.0;
-  a9.a0[1] = 38.0;
-  a9.a0[2] = -39.0;
-  a9.a0[3] = 40.0;
-
-  final result = passUnion16BytesNestedInlineArrayFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(20.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion16BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Double Function(
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat),
-        double Function(
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat)>("PassUnion16BytesNestedFloatx10",
-    isLeaf: true);
-
-/// Union with homogenous floats.
-void testPassUnion16BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a0.a1 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a0.a1 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a0.a1 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a0.a1 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a0.a1 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a0.a1 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a0.a1 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a0.a1 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a0.a1 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a0.a1 = 20.0;
-
-  final result = passUnion16BytesNestedFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final returnStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct1ByteInt Function(Int8),
-    Struct1ByteInt Function(int)>("ReturnStruct1ByteInt", isLeaf: true);
-
-/// Smallest struct with data.
-void testReturnStruct1ByteIntLeaf() {
-  int a0;
-
-  a0 = -1;
-
-  final result = returnStruct1ByteIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-}
-
-final returnStruct3BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8),
-    Struct3BytesHomogeneousUint8 Function(
-        int, int, int)>("ReturnStruct3BytesHomogeneousUint8", isLeaf: true);
-
-/// Smaller than word size return value on all architectures.
-void testReturnStruct3BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-
-  final result = returnStruct3BytesHomogeneousUint8Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct3BytesInt2ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesInt2ByteAligned Function(Int16, Int8),
-    Struct3BytesInt2ByteAligned Function(
-        int, int)>("ReturnStruct3BytesInt2ByteAligned", isLeaf: true);
-
-/// Smaller than word size return value on all architectures.
-/// With alignment rules taken into account size is 4 bytes.
-void testReturnStruct3BytesInt2ByteAlignedLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct3BytesInt2ByteAlignedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct4BytesHomogeneousInt16Leaf = ffiTestFunctions.lookupFunction<
-    Struct4BytesHomogeneousInt16 Function(Int16, Int16),
-    Struct4BytesHomogeneousInt16 Function(
-        int, int)>("ReturnStruct4BytesHomogeneousInt16", isLeaf: true);
-
-/// Word size return value on 32 bit architectures..
-void testReturnStruct4BytesHomogeneousInt16Leaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct4BytesHomogeneousInt16Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct7BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct7BytesHomogeneousUint8 Function(
-        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
-    Struct7BytesHomogeneousUint8 Function(int, int, int, int, int, int,
-        int)>("ReturnStruct7BytesHomogeneousUint8", isLeaf: true);
-
-/// Non-wordsize return value.
-void testReturnStruct7BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-
-  final result =
-      returnStruct7BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5, a6);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-}
-
-final returnStruct7BytesInt4ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
-    Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8),
-    Struct7BytesInt4ByteAligned Function(
-        int, int, int)>("ReturnStruct7BytesInt4ByteAligned", isLeaf: true);
-
-/// Non-wordsize return value.
-/// With alignment rules taken into account size is 8 bytes.
-void testReturnStruct7BytesInt4ByteAlignedLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct7BytesInt4ByteAlignedLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesInt Function(Int16, Int16, Int32),
-    Struct8BytesInt Function(
-        int, int, int)>("ReturnStruct8BytesInt", isLeaf: true);
-
-/// Return value in integer registers on many architectures.
-void testReturnStruct8BytesIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct8BytesIntLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesHomogeneousFloat Function(Float, Float),
-    Struct8BytesHomogeneousFloat Function(
-        double, double)>("ReturnStruct8BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FP registers on many architectures.
-void testReturnStruct8BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-
-  a0 = -1.0;
-  a1 = 2.0;
-
-  final result = returnStruct8BytesHomogeneousFloatLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-}
-
-final returnStruct8BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesMixed Function(Float, Int16, Int16),
-    Struct8BytesMixed Function(
-        double, int, int)>("ReturnStruct8BytesMixed", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-void testReturnStruct8BytesMixedLeaf() {
-  double a0;
-  int a1;
-  int a2;
-
-  a0 = -1.0;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct8BytesMixedLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct9BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct9BytesHomogeneousUint8 Function(
-        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
-    Struct9BytesHomogeneousUint8 Function(int, int, int, int, int, int, int,
-        int, int)>("ReturnStruct9BytesHomogeneousUint8", isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is the right size and that
-/// dart:ffi trampolines do not write outside this size.
-void testReturnStruct9BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-
-  final result = returnStruct9BytesHomogeneousUint8Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-}
-
-final returnStruct9BytesInt4Or8ByteAlignedLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct9BytesInt4Or8ByteAligned Function(Int64, Int8),
-        Struct9BytesInt4Or8ByteAligned Function(
-            int, int)>("ReturnStruct9BytesInt4Or8ByteAligned", isLeaf: true);
-
-/// Return value in two integer registers on x64.
-/// With alignment rules taken into account size is 12 or 16 bytes.
-void testReturnStruct9BytesInt4Or8ByteAlignedLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct9BytesInt4Or8ByteAlignedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct12BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct12BytesHomogeneousFloat Function(Float, Float, Float),
-    Struct12BytesHomogeneousFloat Function(double, double,
-        double)>("ReturnStruct12BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FPU registers, but does not use all registers on arm hardfp
-/// and arm64.
-void testReturnStruct12BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-
-  final result = returnStruct12BytesHomogeneousFloatLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-}
-
-final returnStruct16BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float),
-    Struct16BytesHomogeneousFloat Function(double, double, double,
-        double)>("ReturnStruct16BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FPU registers on arm hardfp and arm64.
-void testReturnStruct16BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-
-  final result = returnStruct16BytesHomogeneousFloatLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-}
-
-final returnStruct16BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesMixed Function(Double, Int64),
-    Struct16BytesMixed Function(
-        double, int)>("ReturnStruct16BytesMixed", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-void testReturnStruct16BytesMixedLeaf() {
-  double a0;
-  int a1;
-
-  a0 = -1.0;
-  a1 = 2;
-
-  final result = returnStruct16BytesMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct16BytesMixed2Leaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesMixed2 Function(Float, Float, Float, Int32),
-    Struct16BytesMixed2 Function(double, double, double,
-        int)>("ReturnStruct16BytesMixed2", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-/// The integer register contains half float half int.
-void testReturnStruct16BytesMixed2Leaf() {
-  double a0;
-  double a1;
-  double a2;
-  int a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4;
-
-  final result = returnStruct16BytesMixed2Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-}
-
-final returnStruct17BytesIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct17BytesInt Function(Int64, Int64, Int8),
-    Struct17BytesInt Function(
-        int, int, int)>("ReturnStruct17BytesInt", isLeaf: true);
-
-/// Rerturn value returned in preallocated space passed by pointer on most ABIs.
-/// Is non word size on purpose, to test that structs are rounded up to word size
-/// on all ABIs.
-void testReturnStruct17BytesIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct17BytesIntLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct19BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct19BytesHomogeneousUint8 Function(
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8),
-    Struct19BytesHomogeneousUint8 Function(
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int)>("ReturnStruct19BytesHomogeneousUint8", isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is the right size and that
-/// dart:ffi trampolines do not write outside this size.
-void testReturnStruct19BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-  int a9;
-  int a10;
-  int a11;
-  int a12;
-  int a13;
-  int a14;
-  int a15;
-  int a16;
-  int a17;
-  int a18;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-  a9 = 10;
-  a10 = 11;
-  a11 = 12;
-  a12 = 13;
-  a13 = 14;
-  a14 = 15;
-  a15 = 16;
-  a16 = 17;
-  a17 = 18;
-  a18 = 19;
-
-  final result = returnStruct19BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5,
-      a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-  Expect.equals(a9, result.a9);
-  Expect.equals(a10, result.a10);
-  Expect.equals(a11, result.a11);
-  Expect.equals(a12, result.a12);
-  Expect.equals(a13, result.a13);
-  Expect.equals(a14, result.a14);
-  Expect.equals(a15, result.a15);
-  Expect.equals(a16, result.a16);
-  Expect.equals(a17, result.a17);
-  Expect.equals(a18, result.a18);
-}
-
-final returnStruct20BytesHomogeneousInt32Leaf = ffiTestFunctions.lookupFunction<
-    Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32, Int32),
-    Struct20BytesHomogeneousInt32 Function(int, int, int, int,
-        int)>("ReturnStruct20BytesHomogeneousInt32", isLeaf: true);
-
-/// Return value too big to go in cpu registers on arm64.
-void testReturnStruct20BytesHomogeneousInt32Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-
-  final result = returnStruct20BytesHomogeneousInt32Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-}
-
-final returnStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float, Float),
-    Struct20BytesHomogeneousFloat Function(double, double, double, double,
-        double)>("ReturnStruct20BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
-void testReturnStruct20BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-
-  final result = returnStruct20BytesHomogeneousFloatLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-  Expect.approxEquals(a4, result.a4);
-}
-
-final returnStruct32BytesHomogeneousDoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct32BytesHomogeneousDouble Function(Double, Double, Double, Double),
-        Struct32BytesHomogeneousDouble Function(double, double, double,
-            double)>("ReturnStruct32BytesHomogeneousDouble", isLeaf: true);
-
-/// Return value in FPU registers on arm64.
-void testReturnStruct32BytesHomogeneousDoubleLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-
-  final result = returnStruct32BytesHomogeneousDoubleLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-}
-
-final returnStruct40BytesHomogeneousDoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct40BytesHomogeneousDouble Function(
-            Double, Double, Double, Double, Double),
-        Struct40BytesHomogeneousDouble Function(double, double, double, double,
-            double)>("ReturnStruct40BytesHomogeneousDouble", isLeaf: true);
-
-/// Return value too big to go in FPU registers on arm64.
-void testReturnStruct40BytesHomogeneousDoubleLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-
-  final result = returnStruct40BytesHomogeneousDoubleLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-  Expect.approxEquals(a4, result.a4);
-}
-
-final returnStruct1024BytesHomogeneousUint64Leaf =
-    ffiTestFunctions.lookupFunction<
-        Struct1024BytesHomogeneousUint64 Function(
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64),
-        Struct1024BytesHomogeneousUint64 Function(
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int)>("ReturnStruct1024BytesHomogeneousUint64", isLeaf: true);
-
-/// Test 1kb struct.
-void testReturnStruct1024BytesHomogeneousUint64Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-  int a9;
-  int a10;
-  int a11;
-  int a12;
-  int a13;
-  int a14;
-  int a15;
-  int a16;
-  int a17;
-  int a18;
-  int a19;
-  int a20;
-  int a21;
-  int a22;
-  int a23;
-  int a24;
-  int a25;
-  int a26;
-  int a27;
-  int a28;
-  int a29;
-  int a30;
-  int a31;
-  int a32;
-  int a33;
-  int a34;
-  int a35;
-  int a36;
-  int a37;
-  int a38;
-  int a39;
-  int a40;
-  int a41;
-  int a42;
-  int a43;
-  int a44;
-  int a45;
-  int a46;
-  int a47;
-  int a48;
-  int a49;
-  int a50;
-  int a51;
-  int a52;
-  int a53;
-  int a54;
-  int a55;
-  int a56;
-  int a57;
-  int a58;
-  int a59;
-  int a60;
-  int a61;
-  int a62;
-  int a63;
-  int a64;
-  int a65;
-  int a66;
-  int a67;
-  int a68;
-  int a69;
-  int a70;
-  int a71;
-  int a72;
-  int a73;
-  int a74;
-  int a75;
-  int a76;
-  int a77;
-  int a78;
-  int a79;
-  int a80;
-  int a81;
-  int a82;
-  int a83;
-  int a84;
-  int a85;
-  int a86;
-  int a87;
-  int a88;
-  int a89;
-  int a90;
-  int a91;
-  int a92;
-  int a93;
-  int a94;
-  int a95;
-  int a96;
-  int a97;
-  int a98;
-  int a99;
-  int a100;
-  int a101;
-  int a102;
-  int a103;
-  int a104;
-  int a105;
-  int a106;
-  int a107;
-  int a108;
-  int a109;
-  int a110;
-  int a111;
-  int a112;
-  int a113;
-  int a114;
-  int a115;
-  int a116;
-  int a117;
-  int a118;
-  int a119;
-  int a120;
-  int a121;
-  int a122;
-  int a123;
-  int a124;
-  int a125;
-  int a126;
-  int a127;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-  a9 = 10;
-  a10 = 11;
-  a11 = 12;
-  a12 = 13;
-  a13 = 14;
-  a14 = 15;
-  a15 = 16;
-  a16 = 17;
-  a17 = 18;
-  a18 = 19;
-  a19 = 20;
-  a20 = 21;
-  a21 = 22;
-  a22 = 23;
-  a23 = 24;
-  a24 = 25;
-  a25 = 26;
-  a26 = 27;
-  a27 = 28;
-  a28 = 29;
-  a29 = 30;
-  a30 = 31;
-  a31 = 32;
-  a32 = 33;
-  a33 = 34;
-  a34 = 35;
-  a35 = 36;
-  a36 = 37;
-  a37 = 38;
-  a38 = 39;
-  a39 = 40;
-  a40 = 41;
-  a41 = 42;
-  a42 = 43;
-  a43 = 44;
-  a44 = 45;
-  a45 = 46;
-  a46 = 47;
-  a47 = 48;
-  a48 = 49;
-  a49 = 50;
-  a50 = 51;
-  a51 = 52;
-  a52 = 53;
-  a53 = 54;
-  a54 = 55;
-  a55 = 56;
-  a56 = 57;
-  a57 = 58;
-  a58 = 59;
-  a59 = 60;
-  a60 = 61;
-  a61 = 62;
-  a62 = 63;
-  a63 = 64;
-  a64 = 65;
-  a65 = 66;
-  a66 = 67;
-  a67 = 68;
-  a68 = 69;
-  a69 = 70;
-  a70 = 71;
-  a71 = 72;
-  a72 = 73;
-  a73 = 74;
-  a74 = 75;
-  a75 = 76;
-  a76 = 77;
-  a77 = 78;
-  a78 = 79;
-  a79 = 80;
-  a80 = 81;
-  a81 = 82;
-  a82 = 83;
-  a83 = 84;
-  a84 = 85;
-  a85 = 86;
-  a86 = 87;
-  a87 = 88;
-  a88 = 89;
-  a89 = 90;
-  a90 = 91;
-  a91 = 92;
-  a92 = 93;
-  a93 = 94;
-  a94 = 95;
-  a95 = 96;
-  a96 = 97;
-  a97 = 98;
-  a98 = 99;
-  a99 = 100;
-  a100 = 101;
-  a101 = 102;
-  a102 = 103;
-  a103 = 104;
-  a104 = 105;
-  a105 = 106;
-  a106 = 107;
-  a107 = 108;
-  a108 = 109;
-  a109 = 110;
-  a110 = 111;
-  a111 = 112;
-  a112 = 113;
-  a113 = 114;
-  a114 = 115;
-  a115 = 116;
-  a116 = 117;
-  a117 = 118;
-  a118 = 119;
-  a119 = 120;
-  a120 = 121;
-  a121 = 122;
-  a122 = 123;
-  a123 = 124;
-  a124 = 125;
-  a125 = 126;
-  a126 = 127;
-  a127 = 128;
-
-  final result = returnStruct1024BytesHomogeneousUint64Leaf(
-      a0,
-      a1,
-      a2,
-      a3,
-      a4,
-      a5,
-      a6,
-      a7,
-      a8,
-      a9,
-      a10,
-      a11,
-      a12,
-      a13,
-      a14,
-      a15,
-      a16,
-      a17,
-      a18,
-      a19,
-      a20,
-      a21,
-      a22,
-      a23,
-      a24,
-      a25,
-      a26,
-      a27,
-      a28,
-      a29,
-      a30,
-      a31,
-      a32,
-      a33,
-      a34,
-      a35,
-      a36,
-      a37,
-      a38,
-      a39,
-      a40,
-      a41,
-      a42,
-      a43,
-      a44,
-      a45,
-      a46,
-      a47,
-      a48,
-      a49,
-      a50,
-      a51,
-      a52,
-      a53,
-      a54,
-      a55,
-      a56,
-      a57,
-      a58,
-      a59,
-      a60,
-      a61,
-      a62,
-      a63,
-      a64,
-      a65,
-      a66,
-      a67,
-      a68,
-      a69,
-      a70,
-      a71,
-      a72,
-      a73,
-      a74,
-      a75,
-      a76,
-      a77,
-      a78,
-      a79,
-      a80,
-      a81,
-      a82,
-      a83,
-      a84,
-      a85,
-      a86,
-      a87,
-      a88,
-      a89,
-      a90,
-      a91,
-      a92,
-      a93,
-      a94,
-      a95,
-      a96,
-      a97,
-      a98,
-      a99,
-      a100,
-      a101,
-      a102,
-      a103,
-      a104,
-      a105,
-      a106,
-      a107,
-      a108,
-      a109,
-      a110,
-      a111,
-      a112,
-      a113,
-      a114,
-      a115,
-      a116,
-      a117,
-      a118,
-      a119,
-      a120,
-      a121,
-      a122,
-      a123,
-      a124,
-      a125,
-      a126,
-      a127);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-  Expect.equals(a9, result.a9);
-  Expect.equals(a10, result.a10);
-  Expect.equals(a11, result.a11);
-  Expect.equals(a12, result.a12);
-  Expect.equals(a13, result.a13);
-  Expect.equals(a14, result.a14);
-  Expect.equals(a15, result.a15);
-  Expect.equals(a16, result.a16);
-  Expect.equals(a17, result.a17);
-  Expect.equals(a18, result.a18);
-  Expect.equals(a19, result.a19);
-  Expect.equals(a20, result.a20);
-  Expect.equals(a21, result.a21);
-  Expect.equals(a22, result.a22);
-  Expect.equals(a23, result.a23);
-  Expect.equals(a24, result.a24);
-  Expect.equals(a25, result.a25);
-  Expect.equals(a26, result.a26);
-  Expect.equals(a27, result.a27);
-  Expect.equals(a28, result.a28);
-  Expect.equals(a29, result.a29);
-  Expect.equals(a30, result.a30);
-  Expect.equals(a31, result.a31);
-  Expect.equals(a32, result.a32);
-  Expect.equals(a33, result.a33);
-  Expect.equals(a34, result.a34);
-  Expect.equals(a35, result.a35);
-  Expect.equals(a36, result.a36);
-  Expect.equals(a37, result.a37);
-  Expect.equals(a38, result.a38);
-  Expect.equals(a39, result.a39);
-  Expect.equals(a40, result.a40);
-  Expect.equals(a41, result.a41);
-  Expect.equals(a42, result.a42);
-  Expect.equals(a43, result.a43);
-  Expect.equals(a44, result.a44);
-  Expect.equals(a45, result.a45);
-  Expect.equals(a46, result.a46);
-  Expect.equals(a47, result.a47);
-  Expect.equals(a48, result.a48);
-  Expect.equals(a49, result.a49);
-  Expect.equals(a50, result.a50);
-  Expect.equals(a51, result.a51);
-  Expect.equals(a52, result.a52);
-  Expect.equals(a53, result.a53);
-  Expect.equals(a54, result.a54);
-  Expect.equals(a55, result.a55);
-  Expect.equals(a56, result.a56);
-  Expect.equals(a57, result.a57);
-  Expect.equals(a58, result.a58);
-  Expect.equals(a59, result.a59);
-  Expect.equals(a60, result.a60);
-  Expect.equals(a61, result.a61);
-  Expect.equals(a62, result.a62);
-  Expect.equals(a63, result.a63);
-  Expect.equals(a64, result.a64);
-  Expect.equals(a65, result.a65);
-  Expect.equals(a66, result.a66);
-  Expect.equals(a67, result.a67);
-  Expect.equals(a68, result.a68);
-  Expect.equals(a69, result.a69);
-  Expect.equals(a70, result.a70);
-  Expect.equals(a71, result.a71);
-  Expect.equals(a72, result.a72);
-  Expect.equals(a73, result.a73);
-  Expect.equals(a74, result.a74);
-  Expect.equals(a75, result.a75);
-  Expect.equals(a76, result.a76);
-  Expect.equals(a77, result.a77);
-  Expect.equals(a78, result.a78);
-  Expect.equals(a79, result.a79);
-  Expect.equals(a80, result.a80);
-  Expect.equals(a81, result.a81);
-  Expect.equals(a82, result.a82);
-  Expect.equals(a83, result.a83);
-  Expect.equals(a84, result.a84);
-  Expect.equals(a85, result.a85);
-  Expect.equals(a86, result.a86);
-  Expect.equals(a87, result.a87);
-  Expect.equals(a88, result.a88);
-  Expect.equals(a89, result.a89);
-  Expect.equals(a90, result.a90);
-  Expect.equals(a91, result.a91);
-  Expect.equals(a92, result.a92);
-  Expect.equals(a93, result.a93);
-  Expect.equals(a94, result.a94);
-  Expect.equals(a95, result.a95);
-  Expect.equals(a96, result.a96);
-  Expect.equals(a97, result.a97);
-  Expect.equals(a98, result.a98);
-  Expect.equals(a99, result.a99);
-  Expect.equals(a100, result.a100);
-  Expect.equals(a101, result.a101);
-  Expect.equals(a102, result.a102);
-  Expect.equals(a103, result.a103);
-  Expect.equals(a104, result.a104);
-  Expect.equals(a105, result.a105);
-  Expect.equals(a106, result.a106);
-  Expect.equals(a107, result.a107);
-  Expect.equals(a108, result.a108);
-  Expect.equals(a109, result.a109);
-  Expect.equals(a110, result.a110);
-  Expect.equals(a111, result.a111);
-  Expect.equals(a112, result.a112);
-  Expect.equals(a113, result.a113);
-  Expect.equals(a114, result.a114);
-  Expect.equals(a115, result.a115);
-  Expect.equals(a116, result.a116);
-  Expect.equals(a117, result.a117);
-  Expect.equals(a118, result.a118);
-  Expect.equals(a119, result.a119);
-  Expect.equals(a120, result.a120);
-  Expect.equals(a121, result.a121);
-  Expect.equals(a122, result.a122);
-  Expect.equals(a123, result.a123);
-  Expect.equals(a124, result.a124);
-  Expect.equals(a125, result.a125);
-  Expect.equals(a126, result.a126);
-  Expect.equals(a127, result.a127);
-}
-
-final returnStruct3BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesPackedInt Function(Int8, Int16),
-    Struct3BytesPackedInt Function(
-        int, int)>("ReturnStruct3BytesPackedInt", isLeaf: true);
-
-/// Small struct with mis-aligned member.
-void testReturnStruct3BytesPackedIntLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct3BytesPackedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct8BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8),
-    Struct8BytesPackedInt Function(
-        int, int, int, int, int)>("ReturnStruct8BytesPackedInt", isLeaf: true);
-
-/// Struct with mis-aligned member.
-void testReturnStruct8BytesPackedIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-
-  final result = returnStruct8BytesPackedIntLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-}
-
-final returnStruct9BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct9BytesPackedMixed Function(Uint8, Double),
-    Struct9BytesPackedMixed Function(
-        int, double)>("ReturnStruct9BytesPackedMixed", isLeaf: true);
-
-/// Struct with mis-aligned member.
-/// Tests backfilling of CPU and FPU registers.
-void testReturnStruct9BytesPackedMixedLeaf() {
-  int a0;
-  double a1;
-
-  a0 = 1;
-  a1 = 2.0;
-
-  final result = returnStruct9BytesPackedMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-}
-
-final returnUnion4BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Union4BytesMixed Function(Uint32),
-    Union4BytesMixed Function(int)>("ReturnUnion4BytesMixed", isLeaf: true);
-
-/// Returning a mixed integer/float union.
-void testReturnUnion4BytesMixedLeaf() {
-  int a0;
-
-  a0 = 1;
-
-  final result = returnUnion4BytesMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-}
-
-final returnUnion8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-    Union8BytesNestedFloat Function(Double),
-    Union8BytesNestedFloat Function(
-        double)>("ReturnUnion8BytesNestedFloat", isLeaf: true);
-
-/// Returning a floating point only union.
-void testReturnUnion8BytesNestedFloatLeaf() {
-  double a0;
-
-  a0 = -1.0;
-
-  final result = returnUnion8BytesNestedFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-}
-
-final returnUnion9BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Union9BytesNestedInt Function(Struct8BytesInt),
-    Union9BytesNestedInt Function(
-        Struct8BytesInt)>("ReturnUnion9BytesNestedInt", isLeaf: true);
-
-/// Returning a mixed-size union.
-void testReturnUnion9BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = returnUnion9BytesNestedIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnUnion16BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat),
-        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>(
-    "ReturnUnion16BytesNestedFloat",
-    isLeaf: true);
-
-/// Returning union with homogenous floats.
-void testReturnUnion16BytesNestedFloatLeaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-
-  final result = returnUnion16BytesNestedFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a0.a1, result.a0.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct1ByteInt Function(Struct1ByteInt),
-    Struct1ByteInt Function(
-        Struct1ByteInt)>("ReturnStructArgumentStruct1ByteInt", isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed in int registers in most ABIs.
-void testReturnStructArgumentStruct1ByteIntLeaf() {
-  final a0Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-
-  final result = returnStructArgumentStruct1ByteIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentInt32x8Struct1ByteIntLeaf =
-    ffiTestFunctions
-        .lookupFunction<
-                Struct1ByteInt Function(Int32, Int32, Int32, Int32, Int32, Int32,
-                    Int32, Int32, Struct1ByteInt),
-                Struct1ByteInt Function(
-                    int, int, int, int, int, int, int, int, Struct1ByteInt)>(
-            "ReturnStructArgumentInt32x8Struct1ByteInt",
-            isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed on stack on all ABIs.
-void testReturnStructArgumentInt32x8Struct1ByteIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  final a8Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a8 = a8Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8.a0 = -9;
-
-  final result = returnStructArgumentInt32x8Struct1ByteIntLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a8.a0, result.a0);
-
-  calloc.free(a8Pointer);
-}
-
-final returnStructArgumentStruct8BytesHomogeneousFloatLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct8BytesHomogeneousFloat Function(Struct8BytesHomogeneousFloat),
-            Struct8BytesHomogeneousFloat Function(
-                Struct8BytesHomogeneousFloat)>(
-        "ReturnStructArgumentStruct8BytesHomogeneousFloat",
-        isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed in float registers in most ABIs.
-void testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-
-  final result = returnStructArgumentStruct8BytesHomogeneousFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0);
-  Expect.approxEquals(a0.a1, result.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStruct20BytesHomogeneousInt32Leaf =
-    ffiTestFunctions
-        .lookupFunction<
-                Struct20BytesHomogeneousInt32 Function(
-                    Struct20BytesHomogeneousInt32),
-                Struct20BytesHomogeneousInt32 Function(
-                    Struct20BytesHomogeneousInt32)>(
-            "ReturnStructArgumentStruct20BytesHomogeneousInt32",
-            isLeaf: true);
-
-/// On arm64, both argument and return value are passed in by pointer.
-void testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a0.a3 = 4;
-  a0.a4 = -5;
-
-  final result = returnStructArgumentStruct20BytesHomogeneousInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0);
-  Expect.equals(a0.a1, result.a1);
-  Expect.equals(a0.a2, result.a2);
-  Expect.equals(a0.a3, result.a3);
-  Expect.equals(a0.a4, result.a4);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32,
-                Int32, Int32, Int32, Int32, Struct20BytesHomogeneousInt32),
-            Struct20BytesHomogeneousInt32 Function(int, int, int, int, int, int,
-                int, int, Struct20BytesHomogeneousInt32)>(
-        "ReturnStructArgumentInt32x8Struct20BytesHomogeneou",
-        isLeaf: true);
-
-/// On arm64, both argument and return value are passed in by pointer.
-/// Ints exhaust registers, so that pointer is passed on stack.
-void testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8.a0 = -9;
-  a8.a1 = 10;
-  a8.a2 = -11;
-  a8.a3 = 12;
-  a8.a4 = -13;
-
-  final result = returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a8.a0, result.a0);
-  Expect.equals(a8.a1, result.a1);
-  Expect.equals(a8.a2, result.a2);
-  Expect.equals(a8.a3, result.a3);
-  Expect.equals(a8.a4, result.a4);
-
-  calloc.free(a8Pointer);
-}
-
-final returnStructArgumentStruct8BytesInlineArrayIntLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt),
-            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt)>(
-        "ReturnStructArgumentStruct8BytesInlineArrayInt",
-        isLeaf: true);
-
-/// Test returning struct with inline array.
-void testReturnStructArgumentStruct8BytesInlineArrayIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-
-  final result = returnStructArgumentStruct8BytesInlineArrayIntLeaf(a0);
-
-  print("result = $result");
-
-  for (int i = 0; i < 8; i++) {
-    Expect.equals(a0.a0[i], result.a0[i]);
-  }
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct16BytesHomogeneousLeaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct16BytesHomogeneousFloat2 Function(
-                StructStruct16BytesHomogeneousFloat2),
-            StructStruct16BytesHomogeneousFloat2 Function(
-                StructStruct16BytesHomogeneousFloat2)>(
-        "ReturnStructArgumentStructStruct16BytesHomogeneous",
-        isLeaf: true);
-
-/// Return value in FPU registers on arm hardfp and arm64.
-void testReturnStructArgumentStructStruct16BytesHomogeneousLeaf() {
-  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-
-  final result = returnStructArgumentStructStruct16BytesHomogeneousLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 2; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-  }
-  Expect.approxEquals(a0.a2, result.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct32BytesHomogeneousLeaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct32BytesHomogeneousDouble2 Function(
-                StructStruct32BytesHomogeneousDouble2),
-            StructStruct32BytesHomogeneousDouble2 Function(
-                StructStruct32BytesHomogeneousDouble2)>(
-        "ReturnStructArgumentStructStruct32BytesHomogeneous",
-        isLeaf: true);
-
-/// Return value in FPU registers on arm64.
-void testReturnStructArgumentStructStruct32BytesHomogeneousLeaf() {
-  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-
-  final result = returnStructArgumentStructStruct32BytesHomogeneousLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 2; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-  }
-  Expect.approxEquals(a0.a2, result.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct16BytesMixed3Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3),
-            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3)>(
-        "ReturnStructArgumentStructStruct16BytesMixed3",
-        isLeaf: true);
-
-/// On x64 Linux, return value is split over FP and int registers.
-void testReturnStructArgumentStructStruct16BytesMixed3Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[0].a1 = -3;
-  a0.a1[0].a2 = 4;
-  a0.a2[0] = -5;
-  a0.a2[1] = 6;
-
-  final result = returnStructArgumentStructStruct16BytesMixed3Leaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 1; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-    Expect.equals(a0.a1[i].a1, result.a1[i].a1);
-    Expect.equals(a0.a1[i].a2, result.a1[i].a2);
-  }
-  for (int i = 0; i < 2; i++) {
-    Expect.equals(a0.a2[i], result.a2[i]);
-  }
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt16 Function(Int8, Int16, Int8),
-    StructAlignmentInt16 Function(
-        int, int, int)>("ReturnStructAlignmentInt16", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testReturnStructAlignmentInt16Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt16Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt32 Function(Int8, Int32, Int8),
-    StructAlignmentInt32 Function(
-        int, int, int)>("ReturnStructAlignmentInt32", isLeaf: true);
-
-/// Test alignment and padding of 32 byte int within struct.
-void testReturnStructAlignmentInt32Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt32Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt64 Function(Int8, Int64, Int8),
-    StructAlignmentInt64 Function(
-        int, int, int)>("ReturnStructAlignmentInt64", isLeaf: true);
-
-/// Test alignment and padding of 64 byte int within struct.
-void testReturnStructAlignmentInt64Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt64Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-        Struct8BytesNestedInt Function(
-            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16),
-        Struct8BytesNestedInt Function(
-            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16)>(
-    "ReturnStruct8BytesNestedInt",
-    isLeaf: true);
-
-/// Simple nested struct.
-void testReturnStruct8BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-
-  final result = returnStruct8BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedFloat Function(Struct4BytesFloat, Struct4BytesFloat),
-    Struct8BytesNestedFloat Function(Struct4BytesFloat,
-        Struct4BytesFloat)>("ReturnStruct8BytesNestedFloat", isLeaf: true);
-
-/// Simple nested struct with floats.
-void testReturnStruct8BytesNestedFloatLeaf() {
-  final a0Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a1 = a1Pointer.ref;
-
-  a0.a0 = -1.0;
-  a1.a0 = 2.0;
-
-  final result = returnStruct8BytesNestedFloatLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a1.a0, result.a1.a0);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct8BytesNestedFloat2Leaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedFloat2 Function(Struct4BytesFloat, Float),
-    Struct8BytesNestedFloat2 Function(Struct4BytesFloat,
-        double)>("ReturnStruct8BytesNestedFloat2", isLeaf: true);
-
-/// The nesting is irregular, testing homogenous float rules on arm and arm64,
-/// and the fpu register usage on x64.
-void testReturnStruct8BytesNestedFloat2Leaf() {
-  final a0Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a0 = a0Pointer.ref;
-  double a1;
-
-  a0.a0 = -1.0;
-  a1 = 2.0;
-
-  final result = returnStruct8BytesNestedFloat2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a1, result.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStruct8BytesNestedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedMixed Function(
-        Struct4BytesHomogeneousInt16, Struct4BytesFloat),
-    Struct8BytesNestedMixed Function(Struct4BytesHomogeneousInt16,
-        Struct4BytesFloat)>("ReturnStruct8BytesNestedMixed", isLeaf: true);
-
-/// Simple nested struct with mixed members.
-void testReturnStruct8BytesNestedMixedLeaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3.0;
-
-  final result = returnStruct8BytesNestedMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.approxEquals(a1.a0, result.a1.a0);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct16BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesNestedInt Function(
-        Struct8BytesNestedInt, Struct8BytesNestedInt),
-    Struct16BytesNestedInt Function(Struct8BytesNestedInt,
-        Struct8BytesNestedInt)>("ReturnStruct16BytesNestedInt", isLeaf: true);
-
-/// Deeper nested struct to test recursive member access.
-void testReturnStruct16BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3;
-  a0.a1.a1 = 4;
-  a1.a0.a0 = -5;
-  a1.a0.a1 = 6;
-  a1.a1.a0 = -7;
-  a1.a1.a1 = 8;
-
-  final result = returnStruct16BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0.a0, result.a0.a0.a0);
-  Expect.equals(a0.a0.a1, result.a0.a0.a1);
-  Expect.equals(a0.a1.a0, result.a0.a1.a0);
-  Expect.equals(a0.a1.a1, result.a0.a1.a1);
-  Expect.equals(a1.a0.a0, result.a1.a0.a0);
-  Expect.equals(a1.a0.a1, result.a1.a0.a1);
-  Expect.equals(a1.a1.a0, result.a1.a1.a0);
-  Expect.equals(a1.a1.a1, result.a1.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct32BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct32BytesNestedInt Function(
-        Struct16BytesNestedInt, Struct16BytesNestedInt),
-    Struct32BytesNestedInt Function(Struct16BytesNestedInt,
-        Struct16BytesNestedInt)>("ReturnStruct32BytesNestedInt", isLeaf: true);
-
-/// Even deeper nested struct to test recursive member access.
-void testReturnStruct32BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0 = -1;
-  a0.a0.a0.a1 = 2;
-  a0.a0.a1.a0 = -3;
-  a0.a0.a1.a1 = 4;
-  a0.a1.a0.a0 = -5;
-  a0.a1.a0.a1 = 6;
-  a0.a1.a1.a0 = -7;
-  a0.a1.a1.a1 = 8;
-  a1.a0.a0.a0 = -9;
-  a1.a0.a0.a1 = 10;
-  a1.a0.a1.a0 = -11;
-  a1.a0.a1.a1 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15;
-  a1.a1.a1.a1 = 16;
-
-  final result = returnStruct32BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0.a0.a0, result.a0.a0.a0.a0);
-  Expect.equals(a0.a0.a0.a1, result.a0.a0.a0.a1);
-  Expect.equals(a0.a0.a1.a0, result.a0.a0.a1.a0);
-  Expect.equals(a0.a0.a1.a1, result.a0.a0.a1.a1);
-  Expect.equals(a0.a1.a0.a0, result.a0.a1.a0.a0);
-  Expect.equals(a0.a1.a0.a1, result.a0.a1.a0.a1);
-  Expect.equals(a0.a1.a1.a0, result.a0.a1.a1.a0);
-  Expect.equals(a0.a1.a1.a1, result.a0.a1.a1.a1);
-  Expect.equals(a1.a0.a0.a0, result.a1.a0.a0.a0);
-  Expect.equals(a1.a0.a0.a1, result.a1.a0.a0.a1);
-  Expect.equals(a1.a0.a1.a0, result.a1.a0.a1.a0);
-  Expect.equals(a1.a0.a1.a1, result.a1.a0.a1.a1);
-  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
-  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
-  Expect.equals(a1.a1.a1.a0, result.a1.a1.a1.a0);
-  Expect.equals(a1.a1.a1.a1, result.a1.a1.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt16Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt16 Function(
-                StructAlignmentInt16, StructAlignmentInt16),
-            StructNestedIntStructAlignmentInt16 Function(
-                StructAlignmentInt16, StructAlignmentInt16)>(
-        "ReturnStructNestedIntStructAlignmentInt16",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 16 byte int.
-void testReturnStructNestedIntStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt16Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt32Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt32 Function(
-                StructAlignmentInt32, StructAlignmentInt32),
-            StructNestedIntStructAlignmentInt32 Function(
-                StructAlignmentInt32, StructAlignmentInt32)>(
-        "ReturnStructNestedIntStructAlignmentInt32",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 32 byte int.
-void testReturnStructNestedIntStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt32Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt64Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt64 Function(
-                StructAlignmentInt64, StructAlignmentInt64),
-            StructNestedIntStructAlignmentInt64 Function(
-                StructAlignmentInt64, StructAlignmentInt64)>(
-        "ReturnStructNestedIntStructAlignmentInt64",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 64 byte int.
-void testReturnStructNestedIntStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt64Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIrregularEvenBiggerLeaf =
-    ffiTestFunctions.lookupFunction<
-        StructNestedIrregularEvenBigger Function(Uint64,
-            StructNestedIrregularBigger, StructNestedIrregularBigger, Double),
-        StructNestedIrregularEvenBigger Function(
-            int,
-            StructNestedIrregularBigger,
-            StructNestedIrregularBigger,
-            double)>("ReturnStructNestedIrregularEvenBigger", isLeaf: true);
-
-/// Return big irregular struct as smoke test.
-void testReturnStructNestedIrregularEvenBiggerLeaf() {
-  int a0;
-  final a1Pointer = calloc<StructNestedIrregularBigger>();
-  final StructNestedIrregularBigger a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructNestedIrregularBigger>();
-  final StructNestedIrregularBigger a2 = a2Pointer.ref;
-  double a3;
-
-  a0 = 1;
-  a1.a0.a0 = 2;
-  a1.a0.a1.a0.a0 = -3;
-  a1.a0.a1.a0.a1 = 4;
-  a1.a0.a1.a1.a0 = -5.0;
-  a1.a0.a2 = 6;
-  a1.a0.a3.a0.a0 = -7.0;
-  a1.a0.a3.a1 = 8.0;
-  a1.a0.a4 = 9;
-  a1.a0.a5.a0.a0 = 10.0;
-  a1.a0.a5.a1.a0 = -11.0;
-  a1.a0.a6 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15.0;
-  a1.a2 = 16.0;
-  a1.a3 = -17.0;
-  a2.a0.a0 = 18;
-  a2.a0.a1.a0.a0 = -19;
-  a2.a0.a1.a0.a1 = 20;
-  a2.a0.a1.a1.a0 = -21.0;
-  a2.a0.a2 = 22;
-  a2.a0.a3.a0.a0 = -23.0;
-  a2.a0.a3.a1 = 24.0;
-  a2.a0.a4 = 25;
-  a2.a0.a5.a0.a0 = 26.0;
-  a2.a0.a5.a1.a0 = -27.0;
-  a2.a0.a6 = 28;
-  a2.a1.a0.a0 = -29;
-  a2.a1.a0.a1 = 30;
-  a2.a1.a1.a0 = -31.0;
-  a2.a2 = 32.0;
-  a2.a3 = -33.0;
-  a3 = 34.0;
-
-  final result = returnStructNestedIrregularEvenBiggerLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1.a0.a0, result.a1.a0.a0);
-  Expect.equals(a1.a0.a1.a0.a0, result.a1.a0.a1.a0.a0);
-  Expect.equals(a1.a0.a1.a0.a1, result.a1.a0.a1.a0.a1);
-  Expect.approxEquals(a1.a0.a1.a1.a0, result.a1.a0.a1.a1.a0);
-  Expect.equals(a1.a0.a2, result.a1.a0.a2);
-  Expect.approxEquals(a1.a0.a3.a0.a0, result.a1.a0.a3.a0.a0);
-  Expect.approxEquals(a1.a0.a3.a1, result.a1.a0.a3.a1);
-  Expect.equals(a1.a0.a4, result.a1.a0.a4);
-  Expect.approxEquals(a1.a0.a5.a0.a0, result.a1.a0.a5.a0.a0);
-  Expect.approxEquals(a1.a0.a5.a1.a0, result.a1.a0.a5.a1.a0);
-  Expect.equals(a1.a0.a6, result.a1.a0.a6);
-  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
-  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
-  Expect.approxEquals(a1.a1.a1.a0, result.a1.a1.a1.a0);
-  Expect.approxEquals(a1.a2, result.a1.a2);
-  Expect.approxEquals(a1.a3, result.a1.a3);
-  Expect.equals(a2.a0.a0, result.a2.a0.a0);
-  Expect.equals(a2.a0.a1.a0.a0, result.a2.a0.a1.a0.a0);
-  Expect.equals(a2.a0.a1.a0.a1, result.a2.a0.a1.a0.a1);
-  Expect.approxEquals(a2.a0.a1.a1.a0, result.a2.a0.a1.a1.a0);
-  Expect.equals(a2.a0.a2, result.a2.a0.a2);
-  Expect.approxEquals(a2.a0.a3.a0.a0, result.a2.a0.a3.a0.a0);
-  Expect.approxEquals(a2.a0.a3.a1, result.a2.a0.a3.a1);
-  Expect.equals(a2.a0.a4, result.a2.a0.a4);
-  Expect.approxEquals(a2.a0.a5.a0.a0, result.a2.a0.a5.a0.a0);
-  Expect.approxEquals(a2.a0.a5.a1.a0, result.a2.a0.a5.a1.a0);
-  Expect.equals(a2.a0.a6, result.a2.a0.a6);
-  Expect.equals(a2.a1.a0.a0, result.a2.a1.a0.a0);
-  Expect.equals(a2.a1.a0.a1, result.a2.a1.a0.a1);
-  Expect.approxEquals(a2.a1.a1.a0, result.a2.a1.a1.a0);
-  Expect.approxEquals(a2.a2, result.a2.a2);
-  Expect.approxEquals(a2.a3, result.a2.a3);
-  Expect.approxEquals(a3, result.a3);
-
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-}
diff --git a/tests/ffi/generator/c_types.dart b/tests/ffi/generator/c_types.dart
index 7236aed..d0825f6 100644
--- a/tests/ffi/generator/c_types.dart
+++ b/tests/ffi/generator/c_types.dart
@@ -6,6 +6,7 @@
 
 import 'utils.dart';
 
+const bool_ = FundamentalType(PrimitiveType.bool_);
 const int8 = FundamentalType(PrimitiveType.int8);
 const int16 = FundamentalType(PrimitiveType.int16);
 const int32 = FundamentalType(PrimitiveType.int32);
@@ -19,6 +20,7 @@
 const double_ = FundamentalType(PrimitiveType.double_);
 
 enum PrimitiveType {
+  bool_,
   int8,
   int16,
   int32,
@@ -33,6 +35,7 @@
 }
 
 const primitiveNames = [
+  "bool",
   "int8",
   "int16",
   "int32",
@@ -47,7 +50,7 @@
 ];
 
 const intptrSize = -1;
-const primitiveSizesInBytes = [1, 2, 4, 8, 1, 2, 4, 8, intptrSize, 4, 8];
+const primitiveSizesInBytes = [1, 1, 2, 4, 8, 1, 2, 4, 8, intptrSize, 4, 8];
 
 abstract class CType {
   String get cType;
@@ -67,6 +70,9 @@
   /// All members have a integer type.
   bool get isOnlyInteger;
 
+  /// All members have a bool type.
+  bool get isOnlyBool;
+
   String toString() => dartCType;
 
   const CType();
@@ -77,12 +83,15 @@
 
   const FundamentalType(this.primitive);
 
+  bool get isBool => primitive == PrimitiveType.bool_;
   bool get isFloatingPoint =>
       primitive == PrimitiveType.float || primitive == PrimitiveType.double_;
-  bool get isInteger => !isFloatingPoint;
+  bool get isInteger => !isFloatingPoint && !isBool;
   bool get isOnlyFloatingPoint => isFloatingPoint;
   bool get isOnlyInteger => isInteger;
+  bool get isOnlyBool => isBool;
   bool get isUnsigned =>
+      primitive == PrimitiveType.bool_ ||
       primitive == PrimitiveType.uint8 ||
       primitive == PrimitiveType.uint16 ||
       primitive == PrimitiveType.uint32 ||
@@ -93,7 +102,13 @@
 
   String get cType => "${name}${isInteger ? "_t" : ""}";
   String get dartCType => name.upperCaseFirst();
-  String get dartType => isInteger ? "int" : "double";
+  String get dartType {
+    if (isInteger) return 'int';
+    if (isOnlyFloatingPoint) return 'double';
+    if (isBool) return 'bool';
+    throw 'Unknown type $primitive';
+  }
+
   String get dartStructFieldAnnotation => "@${dartCType}()";
   bool get hasSize => primitive != PrimitiveType.intptr;
   int get size {
@@ -118,6 +133,7 @@
 
   bool get isOnlyFloatingPoint => false;
   bool get isOnlyInteger => true;
+  bool get isOnlyBool => false;
 }
 
 /// Used to give [StructType] fields and [FunctionType] arguments names.
@@ -186,11 +202,11 @@
   String get dartSuperClass;
 
   bool get isOnlyFloatingPoint =>
-      !memberTypes.map((e) => e.isOnlyFloatingPoint).contains(false);
-  bool get isOnlyInteger =>
-      !memberTypes.map((e) => e.isOnlyInteger).contains(false);
+      memberTypes.every((e) => e.isOnlyFloatingPoint);
+  bool get isOnlyInteger => memberTypes.every((e) => e.isOnlyInteger);
+  bool get isOnlyBool => memberTypes.every((e) => e.isOnlyBool);
 
-  bool get isMixed => !isOnlyInteger && !isOnlyFloatingPoint;
+  bool get isMixed => !isOnlyInteger && !isOnlyFloatingPoint && !isOnlyBool;
 
   bool get hasNestedStructs =>
       members.map((e) => e.type is StructType).contains(true);
@@ -219,8 +235,7 @@
   String get cKeyword => "struct";
   String get dartSuperClass => "Struct";
 
-  bool get hasSize =>
-      !memberTypes.map((e) => e.hasSize).contains(false) && !hasPadding;
+  bool get hasSize => memberTypes.every((e) => e.hasSize) && !hasPadding;
   int get size => memberTypes.fold(0, (int acc, e) => acc + e.size);
 
   bool get hasPacking => packing != null;
@@ -273,6 +288,8 @@
       result += "Float";
     } else if (isOnlyInteger) {
       result += "Int";
+    } else if (isOnlyBool) {
+      result += "Bool";
     } else {
       result += "Mixed";
     }
@@ -287,7 +304,7 @@
   String get cKeyword => "union";
   String get dartSuperClass => "Union";
 
-  bool get hasSize => !memberTypes.map((e) => e.hasSize).contains(false);
+  bool get hasSize => memberTypes.every((e) => e.hasSize);
   int get size => memberTypes.fold(0, (int acc, e) => math.max(acc, e.size));
 
   String get name {
@@ -364,6 +381,7 @@
 
   bool get isOnlyFloatingPoint => elementType.isOnlyFloatingPoint;
   bool get isOnlyInteger => elementType.isOnlyInteger;
+  bool get isOnlyBool => elementType.isOnlyBool;
 }
 
 class FunctionType extends CType {
@@ -396,6 +414,7 @@
 
   bool get isOnlyFloatingPoint => throw "Not implemented";
   bool get isOnlyInteger => throw "Not implemented";
+  bool get isOnlyBool => throw "Not implemented";
 
   /// Group consecutive [arguments] by same type.
   ///
diff --git a/tests/ffi/generator/structs_by_value_tests_configuration.dart b/tests/ffi/generator/structs_by_value_tests_configuration.dart
index 78c187f..a5d62af 100644
--- a/tests/ffi/generator/structs_by_value_tests_configuration.dart
+++ b/tests/ffi/generator/structs_by_value_tests_configuration.dart
@@ -374,6 +374,54 @@
 Union with homogenous floats."""),
   FunctionType(List.filled(10, union16bytesFloat2), double_, """
 Union with homogenous floats."""),
+  FunctionType(
+      [
+        uint8,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        struct10bytesBool,
+        bool_,
+      ],
+      int32,
+      """
+Passing bools and a struct with bools.
+Exhausts the registers to test bools and the bool struct alignment on the
+stack."""),
+  FunctionType(
+      [
+        uint8,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        bool_,
+        structInlineArrayBool,
+        bool_,
+      ],
+      int32,
+      """
+Passing bools and a struct with bools.
+Exhausts the registers to test bools and the bool struct alignment on the
+stack."""),
+  FunctionType(
+      [
+        uint8,
+        struct1byteBool,
+      ],
+      bool_,
+      """
+Returning a bool."""),
 ];
 
 final functionsStructReturn = [
@@ -558,6 +606,7 @@
 ];
 
 final compounds = [
+  struct1byteBool,
   struct1byteInt,
   struct3bytesInt,
   struct3bytesInt2,
@@ -571,6 +620,7 @@
   struct8BytesMixed,
   struct9bytesInt,
   struct9bytesInt2,
+  struct10bytesBool,
   struct12bytesFloat,
   struct16bytesFloat,
   struct16bytesMixed,
@@ -598,6 +648,7 @@
   structNestedBigger,
   structNestedEvenBigger,
   structInlineArray,
+  structInlineArrayBool,
   structInlineArrayIrregular,
   structInlineArray100Bytes,
   structInlineArrayBig,
@@ -623,6 +674,7 @@
   union16bytesFloat2,
 ];
 
+final struct1byteBool = StructType([bool_]);
 final struct1byteInt = StructType([int8]);
 final struct3bytesInt = StructType(List.filled(3, uint8));
 final struct3bytesInt2 = StructType.disambiguate([int16, int8], "2ByteAligned");
@@ -638,6 +690,7 @@
 final struct9bytesInt = StructType(List.filled(9, uint8));
 final struct9bytesInt2 =
     StructType.disambiguate([int64, int8], "4Or8ByteAligned");
+final struct10bytesBool = StructType(List.filled(10, bool_));
 final struct12bytesFloat = StructType([float, float, float]);
 
 /// The largest homogenous float that goes into FPU registers on softfp and
@@ -716,6 +769,8 @@
 
 final structInlineArray = StructType([FixedLengthArrayType(uint8, 8)]);
 
+final structInlineArrayBool = StructType([FixedLengthArrayType(bool_, 10)]);
+
 final structInlineArrayIrregular = StructType.override(
     [FixedLengthArrayType(struct3bytesInt2, 2), uint8], "InlineArrayIrregular");
 
diff --git a/tests/ffi/generator/structs_by_value_tests_generator.dart b/tests/ffi/generator/structs_by_value_tests_generator.dart
index f030b93..51de2db 100644
--- a/tests/ffi/generator/structs_by_value_tests_generator.dart
+++ b/tests/ffi/generator/structs_by_value_tests_generator.dart
@@ -102,7 +102,9 @@
   String addToResultStatements(String variableName) {
     switch (this.runtimeType) {
       case FundamentalType:
-        return "result += $variableName;\n";
+        final this_ = this as FundamentalType;
+        final boolToInt = this_.isBool ? ' ? 1 : 0' : '';
+        return "result += $variableName$boolToInt;\n";
 
       case StructType:
         final this_ = this as StructType;
@@ -214,15 +216,21 @@
   String nextValue(FundamentalType type) {
     int argumentValue = i;
     i++;
+    if (type.isBool) {
+      argumentValue = argumentValue % 2;
+    }
     if (type.isSigned && i % 2 == 0) {
       argumentValue = -argumentValue;
     }
     sum += argumentValue;
     if (type.isFloatingPoint) {
       return argumentValue.toDouble().toString();
-    } else {
+    } else if (type.isInteger) {
       return argumentValue.toString();
+    } else if (type.isBool) {
+      return argumentValue == 1 ? 'true' : 'false';
     }
+    throw 'Unknown type $type';
   }
 
   String sumValue(FundamentalType type) {
@@ -261,7 +269,13 @@
         if (this_.isInteger) {
           return "${dartType} ${variableName} = 0;\n";
         }
-        return "${dartType} ${variableName} = 0.0;\n";
+        if (this_.isFloatingPoint) {
+          return "${dartType} ${variableName} = 0.0;\n";
+        }
+        if (this_.isBool) {
+          return "${dartType} ${variableName} = false;\n";
+        }
+        throw 'Unknown type $this_';
 
       case StructType:
       case UnionType:
@@ -345,8 +359,13 @@
         if (this_.isInteger) {
           return "Expect.equals(${expected}, ${actual});";
         }
-        assert(this_.isFloatingPoint);
-        return "Expect.approxEquals(${expected}, ${actual});";
+        if (this_.isFloatingPoint) {
+          return "Expect.approxEquals(${expected}, ${actual});";
+        }
+        if (this_.isBool) {
+          return "Expect.equals(${expected} % 2 != 0, ${actual});";
+        }
+        throw 'Unexpected type $this_';
 
       case StructType:
         final this_ = this as StructType;
@@ -478,14 +497,14 @@
 }
 
 extension on CompositeType {
-  String dartClass(bool nnbd) {
+  String dartClass({required bool isNnbd}) {
     final self = this;
     final packingAnnotation = (self is StructType) && self.hasPacking
         ? "@Packed(${self.packing})"
         : "";
     String dartFields = "";
     for (final member in members) {
-      dartFields += "${member.dartStructField(nnbd)}\n\n";
+      dartFields += "${member.dartStructField(isNnbd)}\n\n";
     }
     String toStringBody = members.map((m) {
       if (m.type is FixedLengthArrayType) {
@@ -585,7 +604,7 @@
     """;
   }
 
-  String dartCallbackCode(bool nnbd) {
+  String dartCallbackCode({required bool isNnbd}) {
     final argumentss =
         arguments.map((a) => "${a.type.dartType} ${a.name}").join(", ");
 
@@ -594,15 +613,24 @@
     bool structsAsPointers = false;
     String assignReturnGlobal = "";
     String buildReturnValue = "";
+    String returnValueType = returnValue.dartType;
+    String result = 'result';
+    if (returnValueType == 'bool') {
+      // We can't sum a bool;
+      returnValueType = 'int';
+      result = 'result % 2 != 0';
+    }
+
     switch (testType) {
       case TestType.structArguments:
         // Sum all input values.
+
         buildReturnValue = """
-        ${returnValue.dartType} result = 0;
+        $returnValueType result = 0;
 
         ${arguments.addToResultStatements('${dartName}_')}
         """;
-        assignReturnGlobal = "${dartName}Result = result;";
+        assignReturnGlobal = "${dartName}Result = $result;";
         break;
       case TestType.structReturn:
         // Allocate a struct.
@@ -652,7 +680,7 @@
     }
 
     String returnNull = "";
-    if (!nnbd) {
+    if (!isNnbd) {
       returnNull = """
       if (${arguments.firstArgumentName()} == $returnNullValue) {
         print("returning null!");
@@ -675,7 +703,7 @@
 
       $assignReturnGlobal
 
-      return result;
+      return $result;
     }
 
     ${reason.makeDartDocComment()}
@@ -719,10 +747,15 @@
   String get dartCallbackTestConstructor {
     String exceptionalReturn = "";
     if (returnValue is FundamentalType) {
-      if ((returnValue as FundamentalType).isFloatingPoint) {
+      final returnValue_ = returnValue as FundamentalType;
+      if (returnValue_.isFloatingPoint) {
         exceptionalReturn = ", 0.0";
-      } else {
+      } else if (returnValue_.isInteger) {
         exceptionalReturn = ", 0";
+      } else if (returnValue_.isBool) {
+        exceptionalReturn = ", false";
+      } else {
+        throw 'Unexpected type $returnValue_';
       }
     }
     return """
@@ -734,24 +767,31 @@
 
   String get cCallCode {
     String body = "";
+    String returnValueType = returnValue.cType;
+    String returnStatement = 'return result;';
+    if (returnValueType == 'bool') {
+      // We can't sum in a bool.
+      returnValueType = 'uint64_t';
+      returnStatement = 'return result % 2 != 0;';
+    }
     switch (testType) {
       case TestType.structArguments:
         body = """
-        ${returnValue.cType} result = 0;
+        $returnValueType result = 0;
 
         ${arguments.addToResultStatements()}
         """;
         break;
       case TestType.structReturn:
         body = """
-        ${returnValue.cType} result = {};
+        $returnValueType result = {};
 
         ${arguments.copyValueStatements("", "result.")}
         """;
         break;
       case TestType.structReturnArgument:
         body = """
-        ${returnValue.cType} result = ${structReturnArgument.name};
+        $returnValueType result = ${structReturnArgument.name};
         """;
         break;
     }
@@ -769,7 +809,7 @@
 
       ${returnValue.coutStatement("result")}
 
-      return result;
+      $returnStatement
     }
 
     """;
@@ -861,15 +901,55 @@
 // @dart = 2.9
 ''';
 
-headerDartCallTest(bool nnbd) {
-  final dartVersion = nnbd ? '' : dart2dot9;
-
+headerCommon({required int copyrightYear}) {
+  final year = copyrightYear;
   return """
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) $year, 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.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.""";
+}
+
+headerDartCompound({required bool isNnbd, required int copyrightYear}) {
+  final dartVersion = isNnbd ? '' : dart2dot9;
+
+  return """
+${headerCommon(copyrightYear: copyrightYear)}
+
+$dartVersion
+
+import 'dart:ffi';
+""";
+}
+
+String compoundsPath({required bool isNnbd}) {
+  final folder = isNnbd ? 'ffi' : 'ffi_2';
+  return Platform.script
+      .resolve(
+          "../../$folder/function_structs_by_value_generated_compounds.dart")
+      .path;
+}
+
+Future<void> writeDartCompounds() async {
+  await Future.wait([true, false].map((isNnbd) async {
+    final StringBuffer buffer = StringBuffer();
+    buffer.write(headerDartCompound(isNnbd: isNnbd, copyrightYear: 2021));
+
+    buffer.writeAll(compounds.map((e) => e.dartClass(isNnbd: isNnbd)));
+
+    final path = compoundsPath(isNnbd: isNnbd);
+    await File(path).writeAsString(buffer.toString());
+    await runProcess("dart", ["format", path]);
+  }));
+}
+
+headerDartCallTest({required bool isNnbd, required int copyrightYear}) {
+  final dartVersion = isNnbd ? '' : dart2dot9;
+
+  return """
+${headerCommon(copyrightYear: copyrightYear)}
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -886,49 +966,49 @@
 
 import 'dylib_utils.dart';
 
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
 final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 """;
 }
 
-void writeDartCallTest() {
-  for (bool nnbd in [true, false]) {
+Future<void> writeDartCallTest({required bool isLeaf}) async {
+  await Future.wait([true, false].map((isNnbd) async {
     final StringBuffer buffer = StringBuffer();
-    buffer.write(headerDartCallTest(nnbd));
+    buffer.write(headerDartCallTest(
+        isNnbd: isNnbd, copyrightYear: isLeaf ? 2021 : 2020));
 
+    final suffix = isLeaf ? 'Leaf' : '';
     buffer.write("""
     void main() {
       for (int i = 0; i < 10; ++i) {
-        ${functions.map((e) => "${e.dartTestName}();").join("\n")}
-        ${functions.map((e) => "${e.dartTestName}Leaf();").join("\n")}
+        ${functions.map((e) => "${e.dartTestName}$suffix();").join("\n")}
       }
     }
     """);
-    buffer.writeAll(compounds.map((e) => e.dartClass(nnbd)));
-    buffer.writeAll(functions.map((e) => e.dartCallCode(isLeaf: false)));
-    buffer.writeAll(functions.map((e) => e.dartCallCode(isLeaf: true)));
+    buffer.writeAll(functions.map((e) => e.dartCallCode(isLeaf: isLeaf)));
 
-    final path = callTestPath(nnbd);
-    File(path).writeAsStringSync(buffer.toString());
-    Process.runSync("dart", ["format", path]);
-  }
+    final path = callTestPath(isNnbd: isNnbd, isLeaf: isLeaf);
+    await File(path).writeAsString(buffer.toString());
+    await runProcess("dart", ["format", path]);
+  }));
 }
 
-String callTestPath(bool nnbd) {
-  final folder = nnbd ? "ffi" : "ffi_2";
+String callTestPath({required bool isNnbd, required bool isLeaf}) {
+  final folder = isNnbd ? 'ffi' : 'ffi_2';
+  final suffix = isLeaf ? '_leaf' : '';
   return Platform.script
-      .resolve("../../$folder/function_structs_by_value_generated_test.dart")
+      .resolve(
+          "../../$folder/function_structs_by_value_generated${suffix}_test.dart")
       .path;
 }
 
-headerDartCallbackTest(bool nnbd) {
-  final dartVersion = nnbd ? '' : dart2dot9;
+headerDartCallbackTest({required bool isNnbd, required int copyrightYear}) {
+  final dartVersion = isNnbd ? '' : dart2dot9;
 
   return """
-// Copyright (c) 2020, 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.
-//
-// This file has been automatically generated. Please do not edit it manually.
+${headerCommon(copyrightYear: copyrightYear)}
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -945,9 +1025,12 @@
 
 import 'callback_tests_utils.dart';
 
-// Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'dylib_utils.dart';
 
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   testCases.forEach((t) {
@@ -960,10 +1043,10 @@
 """;
 }
 
-void writeDartCallbackTest() {
-  for (bool nnbd in [true, false]) {
+Future<void> writeDartCallbackTest() async {
+  await Future.wait([true, false].map((isNnbd) async {
     final StringBuffer buffer = StringBuffer();
-    buffer.write(headerDartCallbackTest(nnbd));
+    buffer.write(headerDartCallbackTest(isNnbd: isNnbd, copyrightYear: 2020));
 
     buffer.write("""
   final testCases = [
@@ -971,28 +1054,25 @@
   ];
   """);
 
-    buffer.writeAll(functions.map((e) => e.dartCallbackCode(nnbd)));
+    buffer.writeAll(functions.map((e) => e.dartCallbackCode(isNnbd: isNnbd)));
 
-    final path = callbackTestPath(nnbd);
-    File(path).writeAsStringSync(buffer.toString());
-    Process.runSync("dart", ["format", path]);
-  }
+    final path = callbackTestPath(isNnbd: isNnbd);
+    await File(path).writeAsString(buffer.toString());
+    await runProcess("dart", ["format", path]);
+  }));
 }
 
-String callbackTestPath(bool nnbd) {
-  final folder = nnbd ? "ffi" : "ffi_2";
+String callbackTestPath({required bool isNnbd}) {
+  final folder = isNnbd ? "ffi" : "ffi_2";
   return Platform.script
       .resolve(
           "../../$folder/function_callbacks_structs_by_value_generated_test.dart")
       .path;
 }
 
-const headerC = """
-// Copyright (c) 2020, 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.
-//
-// This file has been automatically generated. Please do not edit it manually.
+headerC({required int copyrightYear}) {
+  return """
+${headerCommon(copyrightYear: copyrightYear)}
 
 #include <stddef.h>
 #include <stdlib.h>
@@ -1025,15 +1105,16 @@
         ((EXPECTED * 0.99) >= (ACTUAL) && (EXPECTED * 1.01) <= (ACTUAL)))
 
 """;
+}
 
 const footerC = """
 
 }  // namespace dart
 """;
 
-void writeC() {
+Future<void> writeC() async {
   final StringBuffer buffer = StringBuffer();
-  buffer.write(headerC);
+  buffer.write(headerC(copyrightYear: 2020));
 
   buffer.writeAll(compounds.map((e) => e.cDefinition));
   buffer.writeAll(functions.map((e) => e.cCallCode));
@@ -1041,8 +1122,8 @@
 
   buffer.write(footerC);
 
-  File(ccPath).writeAsStringSync(buffer.toString());
-  Process.runSync("clang-format", ["-i", ccPath]);
+  await File(ccPath).writeAsString(buffer.toString());
+  await runProcess("clang-format", ["-i", ccPath]);
 }
 
 final ccPath = Platform.script
@@ -1055,20 +1136,50 @@
 
 Generates:
 - $ccPath
-- ${callbackTestPath(true)}
-- ${callTestPath(true)}
-- ${callbackTestPath(false)}
-- ${callTestPath(false)}
+- ${compoundsPath(isNnbd: true)}
+- ${callbackTestPath(isNnbd: true)}
+- ${callTestPath(isNnbd: true, isLeaf: false)}
+- ${callTestPath(isNnbd: true, isLeaf: true)}
+- ${compoundsPath(isNnbd: false)}
+- ${callbackTestPath(isNnbd: false)}
+- ${callTestPath(isNnbd: false, isLeaf: false)}
+- ${callTestPath(isNnbd: false, isLeaf: true)}
 """);
 }
 
-void main(List<String> arguments) {
+void main(List<String> arguments) async {
   if (arguments.length != 0) {
     printUsage();
     return;
   }
 
-  writeDartCallTest();
-  writeDartCallbackTest();
-  writeC();
+  await Future.wait([
+    writeDartCompounds(),
+    writeDartCallTest(isLeaf: false),
+    writeDartCallTest(isLeaf: true),
+    writeDartCallbackTest(),
+    writeC(),
+  ]);
+}
+
+Future<void> runProcess(String executable, List<String> arguments) async {
+  final commandString = [executable, ...arguments].join(' ');
+  stdout.writeln('Running `$commandString`.');
+  final process = await Process.start(
+    executable,
+    arguments,
+    runInShell: true,
+    includeParentEnvironment: true,
+  ).then((process) {
+    process.stdout.forEach((data) => stdout.add(data));
+    process.stderr.forEach((data) => stderr.add(data));
+    return process;
+  });
+  final exitCode = await process.exitCode;
+  if (exitCode != 0) {
+    final message = 'Command `$commandString` failed with exit code $exitCode.';
+    stderr.writeln(message);
+    throw Exception(message);
+  }
+  stdout.writeln('Command `$commandString` done.');
 }
diff --git a/tests/ffi/inline_array_multi_dimensional_test.dart b/tests/ffi/inline_array_multi_dimensional_test.dart
index 15d2059..5c90664 100644
--- a/tests/ffi/inline_array_multi_dimensional_test.dart
+++ b/tests/ffi/inline_array_multi_dimensional_test.dart
@@ -9,8 +9,8 @@
 import "package:expect/expect.dart";
 import 'package:ffi/ffi.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOf();
diff --git a/tests/ffi/inline_array_test.dart b/tests/ffi/inline_array_test.dart
index 868d117..dc5914c 100644
--- a/tests/ffi/inline_array_test.dart
+++ b/tests/ffi/inline_array_test.dart
@@ -9,8 +9,8 @@
 import "package:expect/expect.dart";
 import 'package:ffi/ffi.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOf();
diff --git a/tests/ffi/structs_packed_test.dart b/tests/ffi/structs_packed_test.dart
index cec7703..453e795 100644
--- a/tests/ffi/structs_packed_test.dart
+++ b/tests/ffi/structs_packed_test.dart
@@ -10,8 +10,8 @@
 
 import 'dylib_utils.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOfC();
diff --git a/tests/ffi/vmspecific_ffi_native_test.dart b/tests/ffi/vmspecific_ffi_native_test.dart
index 8838ebc..dac63ef 100644
--- a/tests/ffi/vmspecific_ffi_native_test.dart
+++ b/tests/ffi/vmspecific_ffi_native_test.dart
@@ -23,9 +23,6 @@
     nativeLib.lookupFunction<Void Function(Handle), void Function(Object)>(
         'SetFfiNativeResolverForTest');
 
-final triggerGC = nativeLib
-    .lookupFunction<Void Function(IntPtr), void Function(int)>('TriggerGC');
-
 @FfiNative<Handle Function(Handle, IntPtr, IntPtr)>(
     'Dart_SetNativeInstanceField')
 external Object setNativeInstanceField(Object obj, int index, int ptr);
@@ -55,6 +52,36 @@
   ClassWithNativeField(int value) {
     setNativeInstanceField(this, 0, value);
   }
+
+  // Instance methods implicitly pass a 'self' reference as the first argument.
+  // Passed as Pointer if the native function takes that (and the class can be
+  // converted).
+  @FfiNative<IntPtr Function(Pointer<Void>, IntPtr)>('AddPtrAndInt')
+  external int addSelfPtrAndIntMethod(int x);
+
+  // Instance methods implicitly pass a 'self' reference as the first argument.
+  // Passed as Handle if the native function takes that.
+  @FfiNative<IntPtr Function(Handle, IntPtr)>('AddHandleFieldAndInt')
+  external int addSelfHandleFieldAndIntMethod(int x);
+
+  @FfiNative<IntPtr Function(Pointer<Void>, Pointer<Void>)>('AddPtrAndPtr')
+  external int addSelfPtrAndPtrMethod(ClassWithNativeField other);
+
+  @FfiNative<IntPtr Function(Handle, Pointer<Void>)>('AddHandleFieldAndPtr')
+  external int addSelfHandleFieldAndPtrMethod(ClassWithNativeField other);
+
+  @FfiNative<IntPtr Function(Handle, Handle)>('AddHandleFieldAndHandleField')
+  external int addSelfHandleFieldAndHandleFieldMethod(
+      ClassWithNativeField other);
+
+  @FfiNative<IntPtr Function(Pointer<Void>, Handle)>('AddPtrAndHandleField')
+  external int addselfPtrAndHandleFieldMethod(ClassWithNativeField other);
+}
+
+class ClassWithoutNativeField {
+  // Instance methods implicitly pass their handle as the first arg.
+  @FfiNative<IntPtr Function(Handle, IntPtr)>('ReturnIntPtrMethod')
+  external int returnIntPtrMethod(int x);
 }
 
 // Native function takes a Handle, so a Handle is passed as-is.
@@ -71,38 +98,6 @@
 @FfiNative<IntPtr Function(IntPtr, Pointer<Void>)>('PassAsValueAndPointer')
 external int passAsValueAndPointer(int value, NativeFieldWrapperClass1 obj);
 
-// Allocate new native resource we can use to keep track of whether the
-// finalizer has run.
-@FfiNative<Pointer<Void> Function(IntPtr)>('AllocateResource')
-external Pointer<Void> allocateResource(int value);
-
-@FfiNative<Void Function(Pointer<Void>)>('DeleteResource')
-external void deleteResource(Pointer<Void> resource);
-
-// Set up the object's finalizer to reset the resource.
-@FfiNative<Void Function(Handle, Pointer<Void>)>('SetResourceFinalizer')
-external void setResourceFinalizer(
-    NativeFieldWrapperClass1 obj, Pointer<Void> resource);
-
-// Return the native resource's value.
-@FfiNative<IntPtr Function(Pointer<Void>)>('GetResourceValue')
-external int getResourceValue(Pointer<Void> resource);
-
-// Class which ties itself to a resource, resetting the value of the resource
-// when the instance gets collected.
-class ResourceResetter extends NativeFieldWrapperClass1 {
-  ResourceResetter(Pointer<Void> resource) {
-    setNativeInstanceField(this, 0, 0);
-    setResourceFinalizer(this, resource);
-  }
-}
-
-// Helper to embed triggerGC(..) as an expression.
-int triggerGCWrap() {
-  triggerGC(0);
-  return 0;
-}
-
 // Helpers for testing argumnent evaluation order is preserved.
 int state = 0;
 int setState(int value) {
@@ -141,25 +136,31 @@
     Expect.equals(123456, passAsPointer(cwnf));
   }
 
-  // Test that the transform to wrap NativeFieldWrapperClass1 objects in
-  // _getNativeField(..) doesn't violate the original argument's liveness.
-  final resource = allocateResource(314159);
-  Expect.equals(
-      314159,
-      passAsPointerAndValue(
-          // 1: Locally alloc. instance.
-          // If this gets wrapped in another call the instance does not live
-          // past the return of the wrapper call.
-          ResourceResetter(resource),
-          // 2: Force GC, to collect the above if it isn't being kept alive.
-          // 3: Check that the underlying (dummy) resource hasn't been
-          // "collected" (i.e. reset to 0).
-          triggerGCWrap() + getResourceValue(resource)));
-  deleteResource(resource);
-
   // Test that the order of argument evaluation is being preserved through the
   // transform wrapping NativeFieldWrapperClass1 objects.
   state = 0;
   passAsValueAndPointer(setState(7), StateSetter(3));
   Expect.equals(3, state);
+
+  // Test transforms of instance methods.
+  Expect.equals(234, ClassWithoutNativeField().returnIntPtrMethod(234));
+  Expect.equals(1012, ClassWithNativeField(12).addSelfPtrAndIntMethod(1000));
+  Expect.equals(
+      2021, ClassWithNativeField(21).addSelfHandleFieldAndIntMethod(2000));
+  Expect.equals(
+      3031,
+      ClassWithNativeField(31)
+          .addSelfPtrAndPtrMethod(ClassWithNativeField(3000)));
+  Expect.equals(
+      4041,
+      ClassWithNativeField(41)
+          .addSelfHandleFieldAndPtrMethod(ClassWithNativeField(4000)));
+  Expect.equals(
+      5051,
+      ClassWithNativeField(51)
+          .addSelfHandleFieldAndHandleFieldMethod(ClassWithNativeField(5000)));
+  Expect.equals(
+      6061,
+      ClassWithNativeField(61)
+          .addselfPtrAndHandleFieldMethod(ClassWithNativeField(6000)));
 }
diff --git a/tests/ffi/vmspecific_static_checks_test.dart b/tests/ffi/vmspecific_static_checks_test.dart
index 9dca0e7..e77b941 100644
--- a/tests/ffi/vmspecific_static_checks_test.dart
+++ b/tests/ffi/vmspecific_static_checks_test.dart
@@ -36,6 +36,7 @@
   testFromFunctionClosure();
   testFromFunctionTearOff();
   testFromFunctionAbstract();
+  testFromFunctionFunctionExceptionValueMustBeConst();
   testLookupFunctionGeneric();
   testLookupFunctionGeneric2();
   testLookupFunctionWrongNativeFunctionSignature();
@@ -274,6 +275,12 @@
       testFromFunctionAbstract); //# 76: compile-time error
 }
 
+void testFromFunctionFunctionExceptionValueMustBeConst() {
+  final notAConst = 1.1;
+  Pointer<NativeFunction<NativeDoubleUnOp>> p;
+  p = Pointer.fromFunction(myTimesThree, notAConst); //# 77: compile-time error
+}
+
 void testLookupFunctionGeneric() {
   Function generic<T extends Function>() {
     DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
@@ -714,13 +721,16 @@
 void testLookupFunctionIsLeafMustBeConst() {
   bool notAConst = false;
   DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
-  l.lookupFunction<NativeDoubleUnOp, DoubleUnOp>("timesFour", isLeaf:notAConst); //# 1500: compile-time error
+  l.lookupFunction< //# 1500: compile-time error
+          NativeDoubleUnOp, //# 1500: compile-time error
+          DoubleUnOp>("timesFour", //# 1500: compile-time error
+      isLeaf: notAConst); //# 1500: compile-time error
 }
 
 void testAsFunctionIsLeafMustBeConst() {
   bool notAConst = false;
   Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
-  IntUnOp f = p.asFunction(isLeaf:notAConst); //# 1501: compile-time error
+  IntUnOp f = p.asFunction(isLeaf: notAConst); //# 1501: compile-time error
 }
 
 typedef NativeTakesHandle = Void Function(Handle);
@@ -728,12 +738,16 @@
 
 void testLookupFunctionTakesHandle() {
   DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
-  l.lookupFunction<NativeTakesHandle, TakesHandle>("takesHandle", isLeaf:true); //# 1502: compile-time error
+  l.lookupFunction< //# 1502: compile-time error
+          NativeTakesHandle, //# 1502: compile-time error
+          TakesHandle>("takesHandle", //# 1502: compile-time error
+      isLeaf: true); //# 1502: compile-time error
 }
 
 void testAsFunctionTakesHandle() {
-  Pointer<NativeFunction<NativeTakesHandle>> p = Pointer.fromAddress(1337); //# 1503: compile-time error
-  TakesHandle f = p.asFunction(isLeaf:true); //# 1503: compile-time error
+  Pointer<NativeFunction<NativeTakesHandle>> p = //# 1503: compile-time error
+      Pointer.fromAddress(1337); //# 1503: compile-time error
+  TakesHandle f = p.asFunction(isLeaf: true); //# 1503: compile-time error
 }
 
 typedef NativeReturnsHandle = Handle Function();
@@ -741,12 +755,16 @@
 
 void testLookupFunctionReturnsHandle() {
   DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
-  l.lookupFunction<NativeReturnsHandle, ReturnsHandle>("returnsHandle", isLeaf:true); //# 1504: compile-time error
+  l.lookupFunction< //# 1504: compile-time error
+          NativeReturnsHandle, //# 1504: compile-time error
+          ReturnsHandle>("returnsHandle", //# 1504: compile-time error
+      isLeaf: true); //# 1504: compile-time error
 }
 
 void testAsFunctionReturnsHandle() {
-  Pointer<NativeFunction<NativeReturnsHandle>> p = Pointer.fromAddress(1337); //# 1505: compile-time error
-  ReturnsHandle f = p.asFunction(isLeaf:true); //# 1505: compile-time error
+  Pointer<NativeFunction<NativeReturnsHandle>> p = //# 1505: compile-time error
+      Pointer.fromAddress(1337); //# 1505: compile-time error
+  ReturnsHandle f = p.asFunction(isLeaf: true); //# 1505: compile-time error
 }
 
 @Packed(1)
diff --git a/tests/ffi_2/bool_test.dart b/tests/ffi_2/bool_test.dart
new file mode 100644
index 0000000..36af8a8
--- /dev/null
+++ b/tests/ffi_2/bool_test.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2021, 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.
+//
+// Dart test program for testing dart:ffi bools.
+
+// @dart = 2.9
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+import 'function_structs_by_value_generated_compounds.dart';
+
+void main() {
+  testSizeOf();
+  testStoreLoad();
+  testStoreLoadIndexed();
+  testStruct();
+  testStruct2();
+  testInlineArray();
+}
+
+void testSizeOf() {
+  Expect.equals(1, sizeOf<Bool>());
+}
+
+void testStoreLoad() {
+  final p = calloc<Bool>();
+  p.value = true;
+  Expect.equals(true, p.value);
+  p.value = false;
+  Expect.equals(false, p.value);
+  calloc.free(p);
+}
+
+void testStoreLoadIndexed() {
+  final p = calloc<Bool>(2);
+  p[0] = true;
+  p[1] = false;
+  Expect.equals(true, p[0]);
+  Expect.equals(false, p[1]);
+  calloc.free(p);
+}
+
+void testStruct() {
+  final p = calloc<Struct1ByteBool>();
+  p.ref.a0 = true;
+  Expect.equals(true, p.ref.a0);
+  p.ref.a0 = false;
+  Expect.equals(false, p.ref.a0);
+  calloc.free(p);
+}
+
+void testStruct2() {
+  final p = calloc<Struct10BytesHomogeneousBool>();
+  p.ref.a0 = true;
+  p.ref.a1 = false;
+  p.ref.a2 = true;
+  p.ref.a3 = false;
+  p.ref.a4 = true;
+  p.ref.a5 = false;
+  p.ref.a6 = true;
+  p.ref.a7 = false;
+  p.ref.a8 = true;
+  p.ref.a9 = false;
+  Expect.equals(true, p.ref.a0);
+  Expect.equals(false, p.ref.a1);
+  Expect.equals(true, p.ref.a2);
+  Expect.equals(false, p.ref.a3);
+  Expect.equals(true, p.ref.a4);
+  Expect.equals(false, p.ref.a5);
+  Expect.equals(true, p.ref.a6);
+  Expect.equals(false, p.ref.a7);
+  Expect.equals(true, p.ref.a8);
+  Expect.equals(false, p.ref.a9);
+  calloc.free(p);
+}
+
+void testInlineArray() {
+  final p = calloc<Struct10BytesInlineArrayBool>();
+  final array = p.ref.a0;
+  for (int i = 0; i < 10; i++) {
+    array[i] = i % 2 == 0;
+  }
+  for (int i = 0; i < 10; i++) {
+    Expect.equals(i % 2 == 0, array[i]);
+  }
+  calloc.free(p);
+}
diff --git a/tests/ffi_2/function_callbacks_structs_by_value_generated_test.dart b/tests/ffi_2/function_callbacks_structs_by_value_generated_test.dart
index dd0e719..d593bd1 100644
--- a/tests/ffi_2/function_callbacks_structs_by_value_generated_test.dart
+++ b/tests/ffi_2/function_callbacks_structs_by_value_generated_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -19,8 +20,12 @@
 
 import 'callback_tests_utils.dart';
 
-// Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'dylib_utils.dart';
+
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   testCases.forEach((t) {
@@ -348,6 +353,21 @@
           passUnion16BytesNestedFloatx10, 0.0),
       passUnion16BytesNestedFloatx10AfterCallback),
   CallbackTest.withCheck(
+      "PassUint8Boolx9Struct10BytesHomogeneousBoolBool",
+      Pointer.fromFunction<PassUint8Boolx9Struct10BytesHomogeneousBoolBoolType>(
+          passUint8Boolx9Struct10BytesHomogeneousBoolBool, 0),
+      passUint8Boolx9Struct10BytesHomogeneousBoolBoolAfterCallback),
+  CallbackTest.withCheck(
+      "PassUint8Boolx9Struct10BytesInlineArrayBoolBool",
+      Pointer.fromFunction<PassUint8Boolx9Struct10BytesInlineArrayBoolBoolType>(
+          passUint8Boolx9Struct10BytesInlineArrayBoolBool, 0),
+      passUint8Boolx9Struct10BytesInlineArrayBoolBoolAfterCallback),
+  CallbackTest.withCheck(
+      "PassUint8Struct1ByteBool",
+      Pointer.fromFunction<PassUint8Struct1ByteBoolType>(
+          passUint8Struct1ByteBool, false),
+      passUint8Struct1ByteBoolAfterCallback),
+  CallbackTest.withCheck(
       "ReturnStruct1ByteInt",
       Pointer.fromFunction<ReturnStruct1ByteIntType>(returnStruct1ByteInt),
       returnStruct1ByteIntAfterCallback),
@@ -7828,6 +7848,311 @@
   Expect.approxEquals(10.0, result);
 }
 
+typedef PassUint8Boolx9Struct10BytesHomogeneousBoolBoolType = Int32 Function(
+    Uint8,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Struct10BytesHomogeneousBool,
+    Bool);
+
+// Global variables to be able to test inputs after callback returned.
+int passUint8Boolx9Struct10BytesHomogeneousBoolBool_a0 = 0;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a1 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a2 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a3 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a4 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a5 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a6 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a7 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a8 = false;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a9 = false;
+Struct10BytesHomogeneousBool
+    passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10 =
+    Pointer<Struct10BytesHomogeneousBool>.fromAddress(0).ref;
+bool passUint8Boolx9Struct10BytesHomogeneousBoolBool_a11 = false;
+
+// Result variable also global, so we can delete it after the callback.
+int passUint8Boolx9Struct10BytesHomogeneousBoolBoolResult = 0;
+
+int passUint8Boolx9Struct10BytesHomogeneousBoolBoolCalculateResult() {
+  int result = 0;
+
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a1 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a2 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a3 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a4 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a5 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a6 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a7 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a8 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a9 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a0 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a1 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a2 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a3 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a4 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a5 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a6 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a7 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a8 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10.a9 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesHomogeneousBoolBool_a11 ? 1 : 0;
+
+  passUint8Boolx9Struct10BytesHomogeneousBoolBoolResult = result;
+
+  return result;
+}
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+int passUint8Boolx9Struct10BytesHomogeneousBoolBool(
+    int a0,
+    bool a1,
+    bool a2,
+    bool a3,
+    bool a4,
+    bool a5,
+    bool a6,
+    bool a7,
+    bool a8,
+    bool a9,
+    Struct10BytesHomogeneousBool a10,
+    bool a11) {
+  print(
+      "passUint8Boolx9Struct10BytesHomogeneousBoolBool(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11})");
+
+  // In legacy mode, possibly return null.
+  if (a0 == 84) {
+    print("returning null!");
+    return null;
+  }
+
+  // In both nnbd and legacy mode, possibly throw.
+  if (a0 == 42 || a0 == 84) {
+    print("throwing!");
+    throw Exception(
+        "PassUint8Boolx9Struct10BytesHomogeneousBoolBool throwing on purpose!");
+  }
+
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a0 = a0;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a1 = a1;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a2 = a2;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a3 = a3;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a4 = a4;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a5 = a5;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a6 = a6;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a7 = a7;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a8 = a8;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a9 = a9;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a10 = a10;
+  passUint8Boolx9Struct10BytesHomogeneousBoolBool_a11 = a11;
+
+  final result =
+      passUint8Boolx9Struct10BytesHomogeneousBoolBoolCalculateResult();
+
+  print("result = $result");
+
+  return result;
+}
+
+void passUint8Boolx9Struct10BytesHomogeneousBoolBoolAfterCallback() {
+  final result =
+      passUint8Boolx9Struct10BytesHomogeneousBoolBoolCalculateResult();
+
+  print("after callback result = $result");
+
+  Expect.equals(11, result);
+}
+
+typedef PassUint8Boolx9Struct10BytesInlineArrayBoolBoolType = Int32 Function(
+    Uint8,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Bool,
+    Struct10BytesInlineArrayBool,
+    Bool);
+
+// Global variables to be able to test inputs after callback returned.
+int passUint8Boolx9Struct10BytesInlineArrayBoolBool_a0 = 0;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a1 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a2 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a3 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a4 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a5 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a6 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a7 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a8 = false;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a9 = false;
+Struct10BytesInlineArrayBool
+    passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10 =
+    Pointer<Struct10BytesInlineArrayBool>.fromAddress(0).ref;
+bool passUint8Boolx9Struct10BytesInlineArrayBoolBool_a11 = false;
+
+// Result variable also global, so we can delete it after the callback.
+int passUint8Boolx9Struct10BytesInlineArrayBoolBoolResult = 0;
+
+int passUint8Boolx9Struct10BytesInlineArrayBoolBoolCalculateResult() {
+  int result = 0;
+
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a1 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a2 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a3 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a4 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a5 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a6 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a7 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a8 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a9 ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[0] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[1] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[2] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[3] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[4] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[5] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[6] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[7] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[8] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10.a0[9] ? 1 : 0;
+  result += passUint8Boolx9Struct10BytesInlineArrayBoolBool_a11 ? 1 : 0;
+
+  passUint8Boolx9Struct10BytesInlineArrayBoolBoolResult = result;
+
+  return result;
+}
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+int passUint8Boolx9Struct10BytesInlineArrayBoolBool(
+    int a0,
+    bool a1,
+    bool a2,
+    bool a3,
+    bool a4,
+    bool a5,
+    bool a6,
+    bool a7,
+    bool a8,
+    bool a9,
+    Struct10BytesInlineArrayBool a10,
+    bool a11) {
+  print(
+      "passUint8Boolx9Struct10BytesInlineArrayBoolBool(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11})");
+
+  // In legacy mode, possibly return null.
+  if (a0 == 84) {
+    print("returning null!");
+    return null;
+  }
+
+  // In both nnbd and legacy mode, possibly throw.
+  if (a0 == 42 || a0 == 84) {
+    print("throwing!");
+    throw Exception(
+        "PassUint8Boolx9Struct10BytesInlineArrayBoolBool throwing on purpose!");
+  }
+
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a0 = a0;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a1 = a1;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a2 = a2;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a3 = a3;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a4 = a4;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a5 = a5;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a6 = a6;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a7 = a7;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a8 = a8;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a9 = a9;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a10 = a10;
+  passUint8Boolx9Struct10BytesInlineArrayBoolBool_a11 = a11;
+
+  final result =
+      passUint8Boolx9Struct10BytesInlineArrayBoolBoolCalculateResult();
+
+  print("result = $result");
+
+  return result;
+}
+
+void passUint8Boolx9Struct10BytesInlineArrayBoolBoolAfterCallback() {
+  final result =
+      passUint8Boolx9Struct10BytesInlineArrayBoolBoolCalculateResult();
+
+  print("after callback result = $result");
+
+  Expect.equals(11, result);
+}
+
+typedef PassUint8Struct1ByteBoolType = Bool Function(Uint8, Struct1ByteBool);
+
+// Global variables to be able to test inputs after callback returned.
+int passUint8Struct1ByteBool_a0 = 0;
+Struct1ByteBool passUint8Struct1ByteBool_a1 =
+    Pointer<Struct1ByteBool>.fromAddress(0).ref;
+
+// Result variable also global, so we can delete it after the callback.
+bool passUint8Struct1ByteBoolResult = false;
+
+bool passUint8Struct1ByteBoolCalculateResult() {
+  int result = 0;
+
+  result += passUint8Struct1ByteBool_a0;
+  result += passUint8Struct1ByteBool_a1.a0 ? 1 : 0;
+
+  passUint8Struct1ByteBoolResult = result % 2 != 0;
+
+  return result % 2 != 0;
+}
+
+/// Returning a bool.
+bool passUint8Struct1ByteBool(int a0, Struct1ByteBool a1) {
+  print("passUint8Struct1ByteBool(${a0}, ${a1})");
+
+  // In legacy mode, possibly return null.
+  if (a0 == 84) {
+    print("returning null!");
+    return null;
+  }
+
+  // In both nnbd and legacy mode, possibly throw.
+  if (a0 == 42 || a0 == 84) {
+    print("throwing!");
+    throw Exception("PassUint8Struct1ByteBool throwing on purpose!");
+  }
+
+  passUint8Struct1ByteBool_a0 = a0;
+  passUint8Struct1ByteBool_a1 = a1;
+
+  final result = passUint8Struct1ByteBoolCalculateResult();
+
+  print("result = $result");
+
+  return result;
+}
+
+void passUint8Struct1ByteBoolAfterCallback() {
+  final result = passUint8Struct1ByteBoolCalculateResult();
+
+  print("after callback result = $result");
+
+  Expect.equals(1 % 2 != 0, result);
+}
+
 typedef ReturnStruct1ByteIntType = Struct1ByteInt Function(Int8);
 
 // Global variables to be able to test inputs after callback returned.
diff --git a/tests/ffi_2/function_callbacks_structs_by_value_test.dart b/tests/ffi_2/function_callbacks_structs_by_value_test.dart
index 4ecdbaf..e3cee62 100644
--- a/tests/ffi_2/function_callbacks_structs_by_value_test.dart
+++ b/tests/ffi_2/function_callbacks_structs_by_value_test.dart
@@ -13,8 +13,12 @@
 import "package:expect/expect.dart";
 import "package:ffi/ffi.dart";
 
+import 'dylib_utils.dart';
+
 // Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   for (int i = 0; i < 10; i++) {
diff --git a/tests/ffi_2/function_structs_by_value_generated_compounds.dart b/tests/ffi_2/function_structs_by_value_generated_compounds.dart
new file mode 100644
index 0000000..8b7931f
--- /dev/null
+++ b/tests/ffi_2/function_structs_by_value_generated_compounds.dart
@@ -0,0 +1,1261 @@
+// Copyright (c) 2021, 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.
+//
+// This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
+
+// @dart = 2.9
+
+import 'dart:ffi';
+
+class Struct1ByteBool extends Struct {
+  @Bool()
+  bool a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct1ByteInt extends Struct {
+  @Int8()
+  int a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct3BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint8()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct3BytesInt2ByteAligned extends Struct {
+  @Int16()
+  int a0;
+
+  @Int8()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct4BytesHomogeneousInt16 extends Struct {
+  @Int16()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct4BytesFloat extends Struct {
+  @Float()
+  double a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct7BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint8()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  @Uint8()
+  int a3;
+
+  @Uint8()
+  int a4;
+
+  @Uint8()
+  int a5;
+
+  @Uint8()
+  int a6;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
+}
+
+class Struct7BytesInt4ByteAligned extends Struct {
+  @Int32()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesInt extends Struct {
+  @Int16()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  @Int32()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesHomogeneousFloat extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesFloat extends Struct {
+  @Double()
+  double a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct8BytesMixed extends Struct {
+  @Float()
+  double a0;
+
+  @Int16()
+  int a1;
+
+  @Int16()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct9BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint8()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  @Uint8()
+  int a3;
+
+  @Uint8()
+  int a4;
+
+  @Uint8()
+  int a5;
+
+  @Uint8()
+  int a6;
+
+  @Uint8()
+  int a7;
+
+  @Uint8()
+  int a8;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})";
+}
+
+class Struct9BytesInt4Or8ByteAligned extends Struct {
+  @Int64()
+  int a0;
+
+  @Int8()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct10BytesHomogeneousBool extends Struct {
+  @Bool()
+  bool a0;
+
+  @Bool()
+  bool a1;
+
+  @Bool()
+  bool a2;
+
+  @Bool()
+  bool a3;
+
+  @Bool()
+  bool a4;
+
+  @Bool()
+  bool a5;
+
+  @Bool()
+  bool a6;
+
+  @Bool()
+  bool a7;
+
+  @Bool()
+  bool a8;
+
+  @Bool()
+  bool a9;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})";
+}
+
+class Struct12BytesHomogeneousFloat extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  @Float()
+  double a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct16BytesHomogeneousFloat extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  @Float()
+  double a2;
+
+  @Float()
+  double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct16BytesMixed extends Struct {
+  @Double()
+  double a0;
+
+  @Int64()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct16BytesMixed2 extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  @Float()
+  double a2;
+
+  @Int32()
+  int a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct17BytesInt extends Struct {
+  @Int64()
+  int a0;
+
+  @Int64()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct19BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint8()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  @Uint8()
+  int a3;
+
+  @Uint8()
+  int a4;
+
+  @Uint8()
+  int a5;
+
+  @Uint8()
+  int a6;
+
+  @Uint8()
+  int a7;
+
+  @Uint8()
+  int a8;
+
+  @Uint8()
+  int a9;
+
+  @Uint8()
+  int a10;
+
+  @Uint8()
+  int a11;
+
+  @Uint8()
+  int a12;
+
+  @Uint8()
+  int a13;
+
+  @Uint8()
+  int a14;
+
+  @Uint8()
+  int a15;
+
+  @Uint8()
+  int a16;
+
+  @Uint8()
+  int a17;
+
+  @Uint8()
+  int a18;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18})";
+}
+
+class Struct20BytesHomogeneousInt32 extends Struct {
+  @Int32()
+  int a0;
+
+  @Int32()
+  int a1;
+
+  @Int32()
+  int a2;
+
+  @Int32()
+  int a3;
+
+  @Int32()
+  int a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct20BytesHomogeneousFloat extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  @Float()
+  double a2;
+
+  @Float()
+  double a3;
+
+  @Float()
+  double a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct32BytesHomogeneousDouble extends Struct {
+  @Double()
+  double a0;
+
+  @Double()
+  double a1;
+
+  @Double()
+  double a2;
+
+  @Double()
+  double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct40BytesHomogeneousDouble extends Struct {
+  @Double()
+  double a0;
+
+  @Double()
+  double a1;
+
+  @Double()
+  double a2;
+
+  @Double()
+  double a3;
+
+  @Double()
+  double a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct1024BytesHomogeneousUint64 extends Struct {
+  @Uint64()
+  int a0;
+
+  @Uint64()
+  int a1;
+
+  @Uint64()
+  int a2;
+
+  @Uint64()
+  int a3;
+
+  @Uint64()
+  int a4;
+
+  @Uint64()
+  int a5;
+
+  @Uint64()
+  int a6;
+
+  @Uint64()
+  int a7;
+
+  @Uint64()
+  int a8;
+
+  @Uint64()
+  int a9;
+
+  @Uint64()
+  int a10;
+
+  @Uint64()
+  int a11;
+
+  @Uint64()
+  int a12;
+
+  @Uint64()
+  int a13;
+
+  @Uint64()
+  int a14;
+
+  @Uint64()
+  int a15;
+
+  @Uint64()
+  int a16;
+
+  @Uint64()
+  int a17;
+
+  @Uint64()
+  int a18;
+
+  @Uint64()
+  int a19;
+
+  @Uint64()
+  int a20;
+
+  @Uint64()
+  int a21;
+
+  @Uint64()
+  int a22;
+
+  @Uint64()
+  int a23;
+
+  @Uint64()
+  int a24;
+
+  @Uint64()
+  int a25;
+
+  @Uint64()
+  int a26;
+
+  @Uint64()
+  int a27;
+
+  @Uint64()
+  int a28;
+
+  @Uint64()
+  int a29;
+
+  @Uint64()
+  int a30;
+
+  @Uint64()
+  int a31;
+
+  @Uint64()
+  int a32;
+
+  @Uint64()
+  int a33;
+
+  @Uint64()
+  int a34;
+
+  @Uint64()
+  int a35;
+
+  @Uint64()
+  int a36;
+
+  @Uint64()
+  int a37;
+
+  @Uint64()
+  int a38;
+
+  @Uint64()
+  int a39;
+
+  @Uint64()
+  int a40;
+
+  @Uint64()
+  int a41;
+
+  @Uint64()
+  int a42;
+
+  @Uint64()
+  int a43;
+
+  @Uint64()
+  int a44;
+
+  @Uint64()
+  int a45;
+
+  @Uint64()
+  int a46;
+
+  @Uint64()
+  int a47;
+
+  @Uint64()
+  int a48;
+
+  @Uint64()
+  int a49;
+
+  @Uint64()
+  int a50;
+
+  @Uint64()
+  int a51;
+
+  @Uint64()
+  int a52;
+
+  @Uint64()
+  int a53;
+
+  @Uint64()
+  int a54;
+
+  @Uint64()
+  int a55;
+
+  @Uint64()
+  int a56;
+
+  @Uint64()
+  int a57;
+
+  @Uint64()
+  int a58;
+
+  @Uint64()
+  int a59;
+
+  @Uint64()
+  int a60;
+
+  @Uint64()
+  int a61;
+
+  @Uint64()
+  int a62;
+
+  @Uint64()
+  int a63;
+
+  @Uint64()
+  int a64;
+
+  @Uint64()
+  int a65;
+
+  @Uint64()
+  int a66;
+
+  @Uint64()
+  int a67;
+
+  @Uint64()
+  int a68;
+
+  @Uint64()
+  int a69;
+
+  @Uint64()
+  int a70;
+
+  @Uint64()
+  int a71;
+
+  @Uint64()
+  int a72;
+
+  @Uint64()
+  int a73;
+
+  @Uint64()
+  int a74;
+
+  @Uint64()
+  int a75;
+
+  @Uint64()
+  int a76;
+
+  @Uint64()
+  int a77;
+
+  @Uint64()
+  int a78;
+
+  @Uint64()
+  int a79;
+
+  @Uint64()
+  int a80;
+
+  @Uint64()
+  int a81;
+
+  @Uint64()
+  int a82;
+
+  @Uint64()
+  int a83;
+
+  @Uint64()
+  int a84;
+
+  @Uint64()
+  int a85;
+
+  @Uint64()
+  int a86;
+
+  @Uint64()
+  int a87;
+
+  @Uint64()
+  int a88;
+
+  @Uint64()
+  int a89;
+
+  @Uint64()
+  int a90;
+
+  @Uint64()
+  int a91;
+
+  @Uint64()
+  int a92;
+
+  @Uint64()
+  int a93;
+
+  @Uint64()
+  int a94;
+
+  @Uint64()
+  int a95;
+
+  @Uint64()
+  int a96;
+
+  @Uint64()
+  int a97;
+
+  @Uint64()
+  int a98;
+
+  @Uint64()
+  int a99;
+
+  @Uint64()
+  int a100;
+
+  @Uint64()
+  int a101;
+
+  @Uint64()
+  int a102;
+
+  @Uint64()
+  int a103;
+
+  @Uint64()
+  int a104;
+
+  @Uint64()
+  int a105;
+
+  @Uint64()
+  int a106;
+
+  @Uint64()
+  int a107;
+
+  @Uint64()
+  int a108;
+
+  @Uint64()
+  int a109;
+
+  @Uint64()
+  int a110;
+
+  @Uint64()
+  int a111;
+
+  @Uint64()
+  int a112;
+
+  @Uint64()
+  int a113;
+
+  @Uint64()
+  int a114;
+
+  @Uint64()
+  int a115;
+
+  @Uint64()
+  int a116;
+
+  @Uint64()
+  int a117;
+
+  @Uint64()
+  int a118;
+
+  @Uint64()
+  int a119;
+
+  @Uint64()
+  int a120;
+
+  @Uint64()
+  int a121;
+
+  @Uint64()
+  int a122;
+
+  @Uint64()
+  int a123;
+
+  @Uint64()
+  int a124;
+
+  @Uint64()
+  int a125;
+
+  @Uint64()
+  int a126;
+
+  @Uint64()
+  int a127;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18}, ${a19}, ${a20}, ${a21}, ${a22}, ${a23}, ${a24}, ${a25}, ${a26}, ${a27}, ${a28}, ${a29}, ${a30}, ${a31}, ${a32}, ${a33}, ${a34}, ${a35}, ${a36}, ${a37}, ${a38}, ${a39}, ${a40}, ${a41}, ${a42}, ${a43}, ${a44}, ${a45}, ${a46}, ${a47}, ${a48}, ${a49}, ${a50}, ${a51}, ${a52}, ${a53}, ${a54}, ${a55}, ${a56}, ${a57}, ${a58}, ${a59}, ${a60}, ${a61}, ${a62}, ${a63}, ${a64}, ${a65}, ${a66}, ${a67}, ${a68}, ${a69}, ${a70}, ${a71}, ${a72}, ${a73}, ${a74}, ${a75}, ${a76}, ${a77}, ${a78}, ${a79}, ${a80}, ${a81}, ${a82}, ${a83}, ${a84}, ${a85}, ${a86}, ${a87}, ${a88}, ${a89}, ${a90}, ${a91}, ${a92}, ${a93}, ${a94}, ${a95}, ${a96}, ${a97}, ${a98}, ${a99}, ${a100}, ${a101}, ${a102}, ${a103}, ${a104}, ${a105}, ${a106}, ${a107}, ${a108}, ${a109}, ${a110}, ${a111}, ${a112}, ${a113}, ${a114}, ${a115}, ${a116}, ${a117}, ${a118}, ${a119}, ${a120}, ${a121}, ${a122}, ${a123}, ${a124}, ${a125}, ${a126}, ${a127})";
+}
+
+class StructAlignmentInt16 extends Struct {
+  @Int8()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class StructAlignmentInt32 extends Struct {
+  @Int8()
+  int a0;
+
+  @Int32()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class StructAlignmentInt64 extends Struct {
+  @Int8()
+  int a0;
+
+  @Int64()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesNestedInt extends Struct {
+  Struct4BytesHomogeneousInt16 a0;
+
+  Struct4BytesHomogeneousInt16 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedFloat extends Struct {
+  Struct4BytesFloat a0;
+
+  Struct4BytesFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedFloat2 extends Struct {
+  Struct4BytesFloat a0;
+
+  @Float()
+  double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedMixed extends Struct {
+  Struct4BytesHomogeneousInt16 a0;
+
+  Struct4BytesFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct16BytesNestedInt extends Struct {
+  Struct8BytesNestedInt a0;
+
+  Struct8BytesNestedInt a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct32BytesNestedInt extends Struct {
+  Struct16BytesNestedInt a0;
+
+  Struct16BytesNestedInt a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt16 extends Struct {
+  StructAlignmentInt16 a0;
+
+  StructAlignmentInt16 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt32 extends Struct {
+  StructAlignmentInt32 a0;
+
+  StructAlignmentInt32 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt64 extends Struct {
+  StructAlignmentInt64 a0;
+
+  StructAlignmentInt64 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIrregularBig extends Struct {
+  @Uint16()
+  int a0;
+
+  Struct8BytesNestedMixed a1;
+
+  @Uint16()
+  int a2;
+
+  Struct8BytesNestedFloat2 a3;
+
+  @Uint16()
+  int a4;
+
+  Struct8BytesNestedFloat a5;
+
+  @Uint16()
+  int a6;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
+}
+
+class StructNestedIrregularBigger extends Struct {
+  StructNestedIrregularBig a0;
+
+  Struct8BytesNestedMixed a1;
+
+  @Float()
+  double a2;
+
+  @Double()
+  double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class StructNestedIrregularEvenBigger extends Struct {
+  @Uint64()
+  int a0;
+
+  StructNestedIrregularBigger a1;
+
+  StructNestedIrregularBigger a2;
+
+  @Double()
+  double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct8BytesInlineArrayInt extends Struct {
+  @Array(8)
+  Array<Uint8> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 8; i0 += 1) a0[i0]]})";
+}
+
+class Struct10BytesInlineArrayBool extends Struct {
+  @Array(10)
+  Array<Bool> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 10; i0 += 1) a0[i0]]})";
+}
+
+class StructInlineArrayIrregular extends Struct {
+  @Array(2)
+  Array<Struct3BytesInt2ByteAligned> a0;
+
+  @Uint8()
+  int a1;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]}, ${a1})";
+}
+
+class StructInlineArray100Bytes extends Struct {
+  @Array(100)
+  Array<Uint8> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 100; i0 += 1) a0[i0]]})";
+}
+
+class StructInlineArrayBig extends Struct {
+  @Uint32()
+  int a0;
+
+  @Uint32()
+  int a1;
+
+  @Array(4000)
+  Array<Uint8> a2;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${[for (var i0 = 0; i0 < 4000; i0 += 1) a2[i0]]})";
+}
+
+class StructStruct16BytesHomogeneousFloat2 extends Struct {
+  Struct4BytesFloat a0;
+
+  @Array(2)
+  Array<Struct4BytesFloat> a1;
+
+  @Float()
+  double a2;
+
+  String toString() =>
+      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
+}
+
+class StructStruct32BytesHomogeneousDouble2 extends Struct {
+  Struct8BytesFloat a0;
+
+  @Array(2)
+  Array<Struct8BytesFloat> a1;
+
+  @Double()
+  double a2;
+
+  String toString() =>
+      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
+}
+
+class StructStruct16BytesMixed3 extends Struct {
+  Struct4BytesFloat a0;
+
+  @Array(1)
+  Array<Struct8BytesMixed> a1;
+
+  @Array(2)
+  Array<Int16> a2;
+
+  String toString() => "(${a0}, ${[
+        for (var i0 = 0; i0 < 1; i0 += 1) a1[i0]
+      ]}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a2[i0]]})";
+}
+
+class Struct8BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2, 2)
+  Array<Array<Array<Uint8>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [for (var i2 = 0; i2 < 2; i2 += 1) a0[i0][i1][i2]]
+          ]
+      ]})";
+}
+
+class Struct32BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2, 2, 2, 2)
+  Array<Array<Array<Array<Array<Uint8>>>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [
+                for (var i2 = 0; i2 < 2; i2 += 1)
+                  [
+                    for (var i3 = 0; i3 < 2; i3 += 1)
+                      [for (var i4 = 0; i4 < 2; i4 += 1) a0[i0][i1][i2][i3][i4]]
+                  ]
+              ]
+          ]
+      ]})";
+}
+
+class Struct64BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array.multi([2, 2, 2, 2, 2, 2])
+  Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [
+                for (var i2 = 0; i2 < 2; i2 += 1)
+                  [
+                    for (var i3 = 0; i3 < 2; i3 += 1)
+                      [
+                        for (var i4 = 0; i4 < 2; i4 += 1)
+                          [
+                            for (var i5 = 0; i5 < 2; i5 += 1)
+                              a0[i0][i1][i2][i3][i4][i5]
+                          ]
+                      ]
+                  ]
+              ]
+          ]
+      ]})";
+}
+
+class Struct4BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2)
+  Array<Array<Struct1ByteInt>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [for (var i1 = 0; i1 < 2; i1 += 1) a0[i0][i1]]
+      ]})";
+}
+
+@Packed(1)
+class Struct3BytesPackedInt extends Struct {
+  @Int8()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+@Packed(1)
+class Struct3BytesPackedIntMembersAligned extends Struct {
+  @Int8()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+@Packed(1)
+class Struct5BytesPackedMixed extends Struct {
+  @Float()
+  double a0;
+
+  @Uint8()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedAlignmentStruct5BytesPackedMixed extends Struct {
+  @Uint8()
+  int a0;
+
+  Struct5BytesPackedMixed a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct6BytesInlineArrayInt extends Struct {
+  @Array(2)
+  Array<Struct3BytesPackedIntMembersAligned> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]})";
+}
+
+@Packed(1)
+class Struct8BytesPackedInt extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint32()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  @Uint8()
+  int a3;
+
+  @Uint8()
+  int a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+@Packed(1)
+class Struct9BytesPackedMixed extends Struct {
+  @Uint8()
+  int a0;
+
+  @Double()
+  double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct15BytesInlineArrayMixed extends Struct {
+  @Array(3)
+  Array<Struct5BytesPackedMixed> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 3; i0 += 1) a0[i0]]})";
+}
+
+class Union4BytesMixed extends Union {
+  @Uint32()
+  int a0;
+
+  @Float()
+  double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union8BytesNestedFloat extends Union {
+  @Double()
+  double a0;
+
+  Struct8BytesHomogeneousFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union9BytesNestedInt extends Union {
+  Struct8BytesInt a0;
+
+  Struct9BytesHomogeneousUint8 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union16BytesNestedInlineArrayFloat extends Union {
+  @Array(4)
+  Array<Float> a0;
+
+  Struct16BytesHomogeneousFloat a1;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 4; i0 += 1) a0[i0]]}, ${a1})";
+}
+
+class Union16BytesNestedFloat extends Union {
+  Struct8BytesHomogeneousFloat a0;
+
+  Struct12BytesHomogeneousFloat a1;
+
+  Struct16BytesHomogeneousFloat a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
diff --git a/tests/ffi_2/function_structs_by_value_generated_leaf_test.dart b/tests/ffi_2/function_structs_by_value_generated_leaf_test.dart
new file mode 100644
index 0000000..3a75d81
--- /dev/null
+++ b/tests/ffi_2/function_structs_by_value_generated_leaf_test.dart
@@ -0,0 +1,7851 @@
+// Copyright (c) 2021, 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.
+//
+// This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
+//
+// SharedObjects=ffi_test_functions
+// VMOptions=
+// VMOptions=--deterministic --optimization-counter-threshold=5
+// VMOptions=--use-slow-path
+// VMOptions=--use-slow-path --stacktrace-every=100
+
+// @dart = 2.9
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+import 'dylib_utils.dart';
+
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+void main() {
+  for (int i = 0; i < 10; ++i) {
+    testPassStruct1ByteIntx10Leaf();
+    testPassStruct3BytesHomogeneousUint8x10Leaf();
+    testPassStruct3BytesInt2ByteAlignedx10Leaf();
+    testPassStruct4BytesHomogeneousInt16x10Leaf();
+    testPassStruct7BytesHomogeneousUint8x10Leaf();
+    testPassStruct7BytesInt4ByteAlignedx10Leaf();
+    testPassStruct8BytesIntx10Leaf();
+    testPassStruct8BytesHomogeneousFloatx10Leaf();
+    testPassStruct8BytesMixedx10Leaf();
+    testPassStruct9BytesHomogeneousUint8x10Leaf();
+    testPassStruct9BytesInt4Or8ByteAlignedx10Leaf();
+    testPassStruct12BytesHomogeneousFloatx6Leaf();
+    testPassStruct16BytesHomogeneousFloatx5Leaf();
+    testPassStruct16BytesMixedx10Leaf();
+    testPassStruct16BytesMixed2x10Leaf();
+    testPassStruct17BytesIntx10Leaf();
+    testPassStruct19BytesHomogeneousUint8x10Leaf();
+    testPassStruct20BytesHomogeneousInt32x10Leaf();
+    testPassStruct20BytesHomogeneousFloatLeaf();
+    testPassStruct32BytesHomogeneousDoublex5Leaf();
+    testPassStruct40BytesHomogeneousDoubleLeaf();
+    testPassStruct1024BytesHomogeneousUint64Leaf();
+    testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf();
+    testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf();
+    testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf();
+    testPassDoublex6Struct16BytesMixedx4Int32Leaf();
+    testPassInt32x4Struct16BytesMixedx4DoubleLeaf();
+    testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf();
+    testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf();
+    testPassStructAlignmentInt16Leaf();
+    testPassStructAlignmentInt32Leaf();
+    testPassStructAlignmentInt64Leaf();
+    testPassStruct8BytesNestedIntx10Leaf();
+    testPassStruct8BytesNestedFloatx10Leaf();
+    testPassStruct8BytesNestedFloat2x10Leaf();
+    testPassStruct8BytesNestedMixedx10Leaf();
+    testPassStruct16BytesNestedIntx2Leaf();
+    testPassStruct32BytesNestedIntx2Leaf();
+    testPassStructNestedIntStructAlignmentInt16Leaf();
+    testPassStructNestedIntStructAlignmentInt32Leaf();
+    testPassStructNestedIntStructAlignmentInt64Leaf();
+    testPassStructNestedIrregularEvenBiggerx4Leaf();
+    testPassStruct8BytesInlineArrayIntx4Leaf();
+    testPassStructInlineArrayIrregularx4Leaf();
+    testPassStructInlineArray100BytesLeaf();
+    testPassStructStruct16BytesHomogeneousFloat2x5Leaf();
+    testPassStructStruct32BytesHomogeneousDouble2x5Leaf();
+    testPassStructStruct16BytesMixed3x10Leaf();
+    testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf();
+    testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf();
+    testPassStruct3BytesPackedIntx10Leaf();
+    testPassStruct8BytesPackedIntx10Leaf();
+    testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf();
+    testPassStruct5BytesPackedMixedLeaf();
+    testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf();
+    testPassStruct6BytesInlineArrayIntLeaf();
+    testPassStruct15BytesInlineArrayMixedLeaf();
+    testPassUnion4BytesMixedx10Leaf();
+    testPassUnion8BytesNestedFloatx10Leaf();
+    testPassUnion9BytesNestedIntx10Leaf();
+    testPassUnion16BytesNestedInlineArrayFloatx10Leaf();
+    testPassUnion16BytesNestedFloatx10Leaf();
+    testPassUint8Boolx9Struct10BytesHomogeneousBoolBoolLeaf();
+    testPassUint8Boolx9Struct10BytesInlineArrayBoolBoolLeaf();
+    testPassUint8Struct1ByteBoolLeaf();
+    testReturnStruct1ByteIntLeaf();
+    testReturnStruct3BytesHomogeneousUint8Leaf();
+    testReturnStruct3BytesInt2ByteAlignedLeaf();
+    testReturnStruct4BytesHomogeneousInt16Leaf();
+    testReturnStruct7BytesHomogeneousUint8Leaf();
+    testReturnStruct7BytesInt4ByteAlignedLeaf();
+    testReturnStruct8BytesIntLeaf();
+    testReturnStruct8BytesHomogeneousFloatLeaf();
+    testReturnStruct8BytesMixedLeaf();
+    testReturnStruct9BytesHomogeneousUint8Leaf();
+    testReturnStruct9BytesInt4Or8ByteAlignedLeaf();
+    testReturnStruct12BytesHomogeneousFloatLeaf();
+    testReturnStruct16BytesHomogeneousFloatLeaf();
+    testReturnStruct16BytesMixedLeaf();
+    testReturnStruct16BytesMixed2Leaf();
+    testReturnStruct17BytesIntLeaf();
+    testReturnStruct19BytesHomogeneousUint8Leaf();
+    testReturnStruct20BytesHomogeneousInt32Leaf();
+    testReturnStruct20BytesHomogeneousFloatLeaf();
+    testReturnStruct32BytesHomogeneousDoubleLeaf();
+    testReturnStruct40BytesHomogeneousDoubleLeaf();
+    testReturnStruct1024BytesHomogeneousUint64Leaf();
+    testReturnStruct3BytesPackedIntLeaf();
+    testReturnStruct8BytesPackedIntLeaf();
+    testReturnStruct9BytesPackedMixedLeaf();
+    testReturnUnion4BytesMixedLeaf();
+    testReturnUnion8BytesNestedFloatLeaf();
+    testReturnUnion9BytesNestedIntLeaf();
+    testReturnUnion16BytesNestedFloatLeaf();
+    testReturnStructArgumentStruct1ByteIntLeaf();
+    testReturnStructArgumentInt32x8Struct1ByteIntLeaf();
+    testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf();
+    testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf();
+    testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf();
+    testReturnStructArgumentStruct8BytesInlineArrayIntLeaf();
+    testReturnStructArgumentStructStruct16BytesHomogeneousLeaf();
+    testReturnStructArgumentStructStruct32BytesHomogeneousLeaf();
+    testReturnStructArgumentStructStruct16BytesMixed3Leaf();
+    testReturnStructAlignmentInt16Leaf();
+    testReturnStructAlignmentInt32Leaf();
+    testReturnStructAlignmentInt64Leaf();
+    testReturnStruct8BytesNestedIntLeaf();
+    testReturnStruct8BytesNestedFloatLeaf();
+    testReturnStruct8BytesNestedFloat2Leaf();
+    testReturnStruct8BytesNestedMixedLeaf();
+    testReturnStruct16BytesNestedIntLeaf();
+    testReturnStruct32BytesNestedIntLeaf();
+    testReturnStructNestedIntStructAlignmentInt16Leaf();
+    testReturnStructNestedIntStructAlignmentInt32Leaf();
+    testReturnStructNestedIntStructAlignmentInt64Leaf();
+    testReturnStructNestedIrregularEvenBiggerLeaf();
+  }
+}
+
+final passStruct1ByteIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt),
+    int Function(
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt)>("PassStruct1ByteIntx10", isLeaf: true);
+
+/// Smallest struct with data.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct1ByteIntx10Leaf() {
+  final a0Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a1.a0 = 2;
+  a2.a0 = -3;
+  a3.a0 = 4;
+  a4.a0 = -5;
+  a5.a0 = 6;
+  a6.a0 = -7;
+  a7.a0 = 8;
+  a8.a0 = -9;
+  a9.a0 = 10;
+
+  final result =
+      passStruct1ByteIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(5, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct3BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8),
+        int Function(
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8)>(
+    "PassStruct3BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Not a multiple of word size, not a power of two.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct3BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a1.a0 = 4;
+  a1.a1 = 5;
+  a1.a2 = 6;
+  a2.a0 = 7;
+  a2.a1 = 8;
+  a2.a2 = 9;
+  a3.a0 = 10;
+  a3.a1 = 11;
+  a3.a2 = 12;
+  a4.a0 = 13;
+  a4.a1 = 14;
+  a4.a2 = 15;
+  a5.a0 = 16;
+  a5.a1 = 17;
+  a5.a2 = 18;
+  a6.a0 = 19;
+  a6.a1 = 20;
+  a6.a2 = 21;
+  a7.a0 = 22;
+  a7.a1 = 23;
+  a7.a2 = 24;
+  a8.a0 = 25;
+  a8.a1 = 26;
+  a8.a2 = 27;
+  a9.a0 = 28;
+  a9.a1 = 29;
+  a9.a2 = 30;
+
+  final result = passStruct3BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(465, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct3BytesInt2ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned),
+        int Function(
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned)>("PassStruct3BytesInt2ByteAlignedx10",
+    isLeaf: true);
+
+/// Not a multiple of word size, not a power of two.
+/// With alignment rules taken into account size is 4 bytes.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct3BytesInt2ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct3BytesInt2ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct4BytesHomogeneousInt16x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16),
+        int Function(
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16)>(
+    "PassStruct4BytesHomogeneousInt16x10",
+    isLeaf: true);
+
+/// Exactly word size on 32-bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct4BytesHomogeneousInt16x10Leaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct4BytesHomogeneousInt16x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct7BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8),
+        int Function(
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8)>(
+    "PassStruct7BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Sub word size on 64 bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct7BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a1.a0 = 8;
+  a1.a1 = 9;
+  a1.a2 = 10;
+  a1.a3 = 11;
+  a1.a4 = 12;
+  a1.a5 = 13;
+  a1.a6 = 14;
+  a2.a0 = 15;
+  a2.a1 = 16;
+  a2.a2 = 17;
+  a2.a3 = 18;
+  a2.a4 = 19;
+  a2.a5 = 20;
+  a2.a6 = 21;
+  a3.a0 = 22;
+  a3.a1 = 23;
+  a3.a2 = 24;
+  a3.a3 = 25;
+  a3.a4 = 26;
+  a3.a5 = 27;
+  a3.a6 = 28;
+  a4.a0 = 29;
+  a4.a1 = 30;
+  a4.a2 = 31;
+  a4.a3 = 32;
+  a4.a4 = 33;
+  a4.a5 = 34;
+  a4.a6 = 35;
+  a5.a0 = 36;
+  a5.a1 = 37;
+  a5.a2 = 38;
+  a5.a3 = 39;
+  a5.a4 = 40;
+  a5.a5 = 41;
+  a5.a6 = 42;
+  a6.a0 = 43;
+  a6.a1 = 44;
+  a6.a2 = 45;
+  a6.a3 = 46;
+  a6.a4 = 47;
+  a6.a5 = 48;
+  a6.a6 = 49;
+  a7.a0 = 50;
+  a7.a1 = 51;
+  a7.a2 = 52;
+  a7.a3 = 53;
+  a7.a4 = 54;
+  a7.a5 = 55;
+  a7.a6 = 56;
+  a8.a0 = 57;
+  a8.a1 = 58;
+  a8.a2 = 59;
+  a8.a3 = 60;
+  a8.a4 = 61;
+  a8.a5 = 62;
+  a8.a6 = 63;
+  a9.a0 = 64;
+  a9.a1 = 65;
+  a9.a2 = 66;
+  a9.a3 = 67;
+  a9.a4 = 68;
+  a9.a5 = 69;
+  a9.a6 = 70;
+
+  final result = passStruct7BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(2485, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct7BytesInt4ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned),
+        int Function(
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned)>("PassStruct7BytesInt4ByteAlignedx10",
+    isLeaf: true);
+
+/// Sub word size on 64 bit architectures.
+/// With alignment rules taken into account size is 8 bytes.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct7BytesInt4ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result = passStruct7BytesInt4ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt),
+    int Function(
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt)>("PassStruct8BytesIntx10", isLeaf: true);
+
+/// Exactly word size struct on 64bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct8BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesHomogeneousFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat),
+        double Function(
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat)>(
+    "PassStruct8BytesHomogeneousFloatx10",
+    isLeaf: true);
+
+/// Arguments passed in FP registers as long as they fit.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesHomogeneousFloatx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a1.a0 = -3.0;
+  a1.a1 = 4.0;
+  a2.a0 = -5.0;
+  a2.a1 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a4.a0 = -9.0;
+  a4.a1 = 10.0;
+  a5.a0 = -11.0;
+  a5.a1 = 12.0;
+  a6.a0 = -13.0;
+  a6.a1 = 14.0;
+  a7.a0 = -15.0;
+  a7.a1 = 16.0;
+  a8.a0 = -17.0;
+  a8.a1 = 18.0;
+  a9.a0 = -19.0;
+  a9.a1 = 20.0;
+
+  final result = passStruct8BytesHomogeneousFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Float Function(
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed),
+    double Function(
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed)>("PassStruct8BytesMixedx10", isLeaf: true);
+
+/// On x64, arguments go in int registers because it is not only float.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4.0;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7.0;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10.0;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13.0;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16.0;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19.0;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22.0;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25.0;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28.0;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct8BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8),
+        int Function(
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8)>(
+    "PassStruct9BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Argument is a single byte over a multiple of word size.
+/// 10 struct arguments will exhaust available registers.
+/// Struct only has 1-byte aligned fields to test struct alignment itself.
+/// Tests upper bytes in the integer registers that are partly filled.
+/// Tests stack alignment of non word size stack arguments.
+void testPassStruct9BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a1.a0 = 10;
+  a1.a1 = 11;
+  a1.a2 = 12;
+  a1.a3 = 13;
+  a1.a4 = 14;
+  a1.a5 = 15;
+  a1.a6 = 16;
+  a1.a7 = 17;
+  a1.a8 = 18;
+  a2.a0 = 19;
+  a2.a1 = 20;
+  a2.a2 = 21;
+  a2.a3 = 22;
+  a2.a4 = 23;
+  a2.a5 = 24;
+  a2.a6 = 25;
+  a2.a7 = 26;
+  a2.a8 = 27;
+  a3.a0 = 28;
+  a3.a1 = 29;
+  a3.a2 = 30;
+  a3.a3 = 31;
+  a3.a4 = 32;
+  a3.a5 = 33;
+  a3.a6 = 34;
+  a3.a7 = 35;
+  a3.a8 = 36;
+  a4.a0 = 37;
+  a4.a1 = 38;
+  a4.a2 = 39;
+  a4.a3 = 40;
+  a4.a4 = 41;
+  a4.a5 = 42;
+  a4.a6 = 43;
+  a4.a7 = 44;
+  a4.a8 = 45;
+  a5.a0 = 46;
+  a5.a1 = 47;
+  a5.a2 = 48;
+  a5.a3 = 49;
+  a5.a4 = 50;
+  a5.a5 = 51;
+  a5.a6 = 52;
+  a5.a7 = 53;
+  a5.a8 = 54;
+  a6.a0 = 55;
+  a6.a1 = 56;
+  a6.a2 = 57;
+  a6.a3 = 58;
+  a6.a4 = 59;
+  a6.a5 = 60;
+  a6.a6 = 61;
+  a6.a7 = 62;
+  a6.a8 = 63;
+  a7.a0 = 64;
+  a7.a1 = 65;
+  a7.a2 = 66;
+  a7.a3 = 67;
+  a7.a4 = 68;
+  a7.a5 = 69;
+  a7.a6 = 70;
+  a7.a7 = 71;
+  a7.a8 = 72;
+  a8.a0 = 73;
+  a8.a1 = 74;
+  a8.a2 = 75;
+  a8.a3 = 76;
+  a8.a4 = 77;
+  a8.a5 = 78;
+  a8.a6 = 79;
+  a8.a7 = 80;
+  a8.a8 = 81;
+  a9.a0 = 82;
+  a9.a1 = 83;
+  a9.a2 = 84;
+  a9.a3 = 85;
+  a9.a4 = 86;
+  a9.a5 = 87;
+  a9.a6 = 88;
+  a9.a7 = 89;
+  a9.a8 = 90;
+
+  final result = passStruct9BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(4095, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesInt4Or8ByteAlignedx10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned),
+            int Function(
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned)>(
+        "PassStruct9BytesInt4Or8ByteAlignedx10",
+        isLeaf: true);
+
+/// Argument is a single byte over a multiple of word size.
+/// With alignment rules taken into account size is 12 or 16 bytes.
+/// 10 struct arguments will exhaust available registers.
+///
+void testPassStruct9BytesInt4Or8ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct9BytesInt4Or8ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct12BytesHomogeneousFloatx6Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat),
+        double Function(
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat)>(
+    "PassStruct12BytesHomogeneousFloatx6",
+    isLeaf: true);
+
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// Struct arguments will exhaust available registers, and leave some empty.
+/// The last argument is to test whether arguments are backfilled.
+void testPassStruct12BytesHomogeneousFloatx6Leaf() {
+  final a0Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a5 = a5Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a1.a0 = 4.0;
+  a1.a1 = -5.0;
+  a1.a2 = 6.0;
+  a2.a0 = -7.0;
+  a2.a1 = 8.0;
+  a2.a2 = -9.0;
+  a3.a0 = 10.0;
+  a3.a1 = -11.0;
+  a3.a2 = 12.0;
+  a4.a0 = -13.0;
+  a4.a1 = 14.0;
+  a4.a2 = -15.0;
+  a5.a0 = 16.0;
+  a5.a1 = -17.0;
+  a5.a2 = 18.0;
+
+  final result =
+      passStruct12BytesHomogeneousFloatx6Leaf(a0, a1, a2, a3, a4, a5);
+
+  print("result = $result");
+
+  Expect.approxEquals(9.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+}
+
+final passStruct16BytesHomogeneousFloatx5Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat),
+        double Function(
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat)>(
+    "PassStruct16BytesHomogeneousFloatx5",
+    isLeaf: true);
+
+/// On Linux x64 argument is transferred on stack because it is over 16 bytes.
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStruct16BytesHomogeneousFloatx5Leaf() {
+  final a0Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a4 = a4Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8.0;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12.0;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16.0;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20.0;
+
+  final result = passStruct16BytesHomogeneousFloatx5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStruct16BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed),
+    double Function(
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed)>("PassStruct16BytesMixedx10", isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 8 byte aligned.
+void testPassStruct16BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+  a1.a0 = -3.0;
+  a1.a1 = 4;
+  a2.a0 = -5.0;
+  a2.a1 = 6;
+  a3.a0 = -7.0;
+  a3.a1 = 8;
+  a4.a0 = -9.0;
+  a4.a1 = 10;
+  a5.a0 = -11.0;
+  a5.a1 = 12;
+  a6.a0 = -13.0;
+  a6.a1 = 14;
+  a7.a0 = -15.0;
+  a7.a1 = 16;
+  a8.a0 = -17.0;
+  a8.a1 = 18;
+  a9.a0 = -19.0;
+  a9.a1 = 20;
+
+  final result =
+      passStruct16BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct16BytesMixed2x10Leaf = ffiTestFunctions.lookupFunction<
+    Float Function(
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2),
+    double Function(
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2)>("PassStruct16BytesMixed2x10", isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 4 byte aligned.
+void testPassStruct16BytesMixed2x10Leaf() {
+  final a0Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20;
+  a5.a0 = -21.0;
+  a5.a1 = 22.0;
+  a5.a2 = -23.0;
+  a5.a3 = 24;
+  a6.a0 = -25.0;
+  a6.a1 = 26.0;
+  a6.a2 = -27.0;
+  a6.a3 = 28;
+  a7.a0 = -29.0;
+  a7.a1 = 30.0;
+  a7.a2 = -31.0;
+  a7.a3 = 32;
+  a8.a0 = -33.0;
+  a8.a1 = 34.0;
+  a8.a2 = -35.0;
+  a8.a3 = 36;
+  a9.a0 = -37.0;
+  a9.a1 = 38.0;
+  a9.a2 = -39.0;
+  a9.a3 = 40;
+
+  final result =
+      passStruct16BytesMixed2x10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(20.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct17BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt),
+    int Function(
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt)>("PassStruct17BytesIntx10", isLeaf: true);
+
+/// Arguments are passed as pointer to copy on arm64.
+/// Tests that the memory allocated for copies are rounded up to word size.
+void testPassStruct17BytesIntx10Leaf() {
+  final a0Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct17BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct19BytesHomogeneousUint8x10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8),
+            int Function(
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8)>(
+        "PassStruct19BytesHomogeneousUint8x10",
+        isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is extended to the right size.
+///
+void testPassStruct19BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a0.a9 = 10;
+  a0.a10 = 11;
+  a0.a11 = 12;
+  a0.a12 = 13;
+  a0.a13 = 14;
+  a0.a14 = 15;
+  a0.a15 = 16;
+  a0.a16 = 17;
+  a0.a17 = 18;
+  a0.a18 = 19;
+  a1.a0 = 20;
+  a1.a1 = 21;
+  a1.a2 = 22;
+  a1.a3 = 23;
+  a1.a4 = 24;
+  a1.a5 = 25;
+  a1.a6 = 26;
+  a1.a7 = 27;
+  a1.a8 = 28;
+  a1.a9 = 29;
+  a1.a10 = 30;
+  a1.a11 = 31;
+  a1.a12 = 32;
+  a1.a13 = 33;
+  a1.a14 = 34;
+  a1.a15 = 35;
+  a1.a16 = 36;
+  a1.a17 = 37;
+  a1.a18 = 38;
+  a2.a0 = 39;
+  a2.a1 = 40;
+  a2.a2 = 41;
+  a2.a3 = 42;
+  a2.a4 = 43;
+  a2.a5 = 44;
+  a2.a6 = 45;
+  a2.a7 = 46;
+  a2.a8 = 47;
+  a2.a9 = 48;
+  a2.a10 = 49;
+  a2.a11 = 50;
+  a2.a12 = 51;
+  a2.a13 = 52;
+  a2.a14 = 53;
+  a2.a15 = 54;
+  a2.a16 = 55;
+  a2.a17 = 56;
+  a2.a18 = 57;
+  a3.a0 = 58;
+  a3.a1 = 59;
+  a3.a2 = 60;
+  a3.a3 = 61;
+  a3.a4 = 62;
+  a3.a5 = 63;
+  a3.a6 = 64;
+  a3.a7 = 65;
+  a3.a8 = 66;
+  a3.a9 = 67;
+  a3.a10 = 68;
+  a3.a11 = 69;
+  a3.a12 = 70;
+  a3.a13 = 71;
+  a3.a14 = 72;
+  a3.a15 = 73;
+  a3.a16 = 74;
+  a3.a17 = 75;
+  a3.a18 = 76;
+  a4.a0 = 77;
+  a4.a1 = 78;
+  a4.a2 = 79;
+  a4.a3 = 80;
+  a4.a4 = 81;
+  a4.a5 = 82;
+  a4.a6 = 83;
+  a4.a7 = 84;
+  a4.a8 = 85;
+  a4.a9 = 86;
+  a4.a10 = 87;
+  a4.a11 = 88;
+  a4.a12 = 89;
+  a4.a13 = 90;
+  a4.a14 = 91;
+  a4.a15 = 92;
+  a4.a16 = 93;
+  a4.a17 = 94;
+  a4.a18 = 95;
+  a5.a0 = 96;
+  a5.a1 = 97;
+  a5.a2 = 98;
+  a5.a3 = 99;
+  a5.a4 = 100;
+  a5.a5 = 101;
+  a5.a6 = 102;
+  a5.a7 = 103;
+  a5.a8 = 104;
+  a5.a9 = 105;
+  a5.a10 = 106;
+  a5.a11 = 107;
+  a5.a12 = 108;
+  a5.a13 = 109;
+  a5.a14 = 110;
+  a5.a15 = 111;
+  a5.a16 = 112;
+  a5.a17 = 113;
+  a5.a18 = 114;
+  a6.a0 = 115;
+  a6.a1 = 116;
+  a6.a2 = 117;
+  a6.a3 = 118;
+  a6.a4 = 119;
+  a6.a5 = 120;
+  a6.a6 = 121;
+  a6.a7 = 122;
+  a6.a8 = 123;
+  a6.a9 = 124;
+  a6.a10 = 125;
+  a6.a11 = 126;
+  a6.a12 = 127;
+  a6.a13 = 128;
+  a6.a14 = 129;
+  a6.a15 = 130;
+  a6.a16 = 131;
+  a6.a17 = 132;
+  a6.a18 = 133;
+  a7.a0 = 134;
+  a7.a1 = 135;
+  a7.a2 = 136;
+  a7.a3 = 137;
+  a7.a4 = 138;
+  a7.a5 = 139;
+  a7.a6 = 140;
+  a7.a7 = 141;
+  a7.a8 = 142;
+  a7.a9 = 143;
+  a7.a10 = 144;
+  a7.a11 = 145;
+  a7.a12 = 146;
+  a7.a13 = 147;
+  a7.a14 = 148;
+  a7.a15 = 149;
+  a7.a16 = 150;
+  a7.a17 = 151;
+  a7.a18 = 152;
+  a8.a0 = 153;
+  a8.a1 = 154;
+  a8.a2 = 155;
+  a8.a3 = 156;
+  a8.a4 = 157;
+  a8.a5 = 158;
+  a8.a6 = 159;
+  a8.a7 = 160;
+  a8.a8 = 161;
+  a8.a9 = 162;
+  a8.a10 = 163;
+  a8.a11 = 164;
+  a8.a12 = 165;
+  a8.a13 = 166;
+  a8.a14 = 167;
+  a8.a15 = 168;
+  a8.a16 = 169;
+  a8.a17 = 170;
+  a8.a18 = 171;
+  a9.a0 = 172;
+  a9.a1 = 173;
+  a9.a2 = 174;
+  a9.a3 = 175;
+  a9.a4 = 176;
+  a9.a5 = 177;
+  a9.a6 = 178;
+  a9.a7 = 179;
+  a9.a8 = 180;
+  a9.a9 = 181;
+  a9.a10 = 182;
+  a9.a11 = 183;
+  a9.a12 = 184;
+  a9.a13 = 185;
+  a9.a14 = 186;
+  a9.a15 = 187;
+  a9.a16 = 188;
+  a9.a17 = 189;
+  a9.a18 = 190;
+
+  final result = passStruct19BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(18145, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct20BytesHomogeneousInt32x10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int32 Function(
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32),
+            int Function(
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32)>(
+        "PassStruct20BytesHomogeneousInt32x10",
+        isLeaf: true);
+
+/// Argument too big to go into integer registers on arm64.
+/// The arguments are passed as pointers to copies.
+/// The amount of arguments exhausts the number of integer registers, such that
+/// pointers to copies are also passed on the stack.
+void testPassStruct20BytesHomogeneousInt32x10Leaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a0.a3 = 4;
+  a0.a4 = -5;
+  a1.a0 = 6;
+  a1.a1 = -7;
+  a1.a2 = 8;
+  a1.a3 = -9;
+  a1.a4 = 10;
+  a2.a0 = -11;
+  a2.a1 = 12;
+  a2.a2 = -13;
+  a2.a3 = 14;
+  a2.a4 = -15;
+  a3.a0 = 16;
+  a3.a1 = -17;
+  a3.a2 = 18;
+  a3.a3 = -19;
+  a3.a4 = 20;
+  a4.a0 = -21;
+  a4.a1 = 22;
+  a4.a2 = -23;
+  a4.a3 = 24;
+  a4.a4 = -25;
+  a5.a0 = 26;
+  a5.a1 = -27;
+  a5.a2 = 28;
+  a5.a3 = -29;
+  a5.a4 = 30;
+  a6.a0 = -31;
+  a6.a1 = 32;
+  a6.a2 = -33;
+  a6.a3 = 34;
+  a6.a4 = -35;
+  a7.a0 = 36;
+  a7.a1 = -37;
+  a7.a2 = 38;
+  a7.a3 = -39;
+  a7.a4 = 40;
+  a8.a0 = -41;
+  a8.a1 = 42;
+  a8.a2 = -43;
+  a8.a3 = 44;
+  a8.a4 = -45;
+  a9.a0 = 46;
+  a9.a1 = -47;
+  a9.a2 = 48;
+  a9.a3 = -49;
+  a9.a4 = 50;
+
+  final result = passStruct20BytesHomogeneousInt32x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(25, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+        Float Function(Struct20BytesHomogeneousFloat),
+        double Function(Struct20BytesHomogeneousFloat)>(
+    "PassStruct20BytesHomogeneousFloat",
+    isLeaf: true);
+
+/// Argument too big to go into FPU registers in hardfp and arm64.
+void testPassStruct20BytesHomogeneousFloatLeaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousFloat>();
+  final Struct20BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+
+  final result = passStruct20BytesHomogeneousFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(-3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct32BytesHomogeneousDoublex5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble),
+            double Function(
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble)>(
+        "PassStruct32BytesHomogeneousDoublex5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStruct32BytesHomogeneousDoublex5Leaf() {
+  final a0Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a4 = a4Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8.0;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12.0;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16.0;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20.0;
+
+  final result = passStruct32BytesHomogeneousDoublex5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStruct40BytesHomogeneousDoubleLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct40BytesHomogeneousDouble),
+        double Function(Struct40BytesHomogeneousDouble)>(
+    "PassStruct40BytesHomogeneousDouble",
+    isLeaf: true);
+
+/// Argument too big to go into FPU registers in arm64.
+void testPassStruct40BytesHomogeneousDoubleLeaf() {
+  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
+  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+
+  final result = passStruct40BytesHomogeneousDoubleLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(-3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct1024BytesHomogeneousUint64Leaf =
+    ffiTestFunctions.lookupFunction<
+            Uint64 Function(Struct1024BytesHomogeneousUint64),
+            int Function(Struct1024BytesHomogeneousUint64)>(
+        "PassStruct1024BytesHomogeneousUint64",
+        isLeaf: true);
+
+/// Test 1kb struct.
+void testPassStruct1024BytesHomogeneousUint64Leaf() {
+  final a0Pointer = calloc<Struct1024BytesHomogeneousUint64>();
+  final Struct1024BytesHomogeneousUint64 a0 = a0Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a0.a9 = 10;
+  a0.a10 = 11;
+  a0.a11 = 12;
+  a0.a12 = 13;
+  a0.a13 = 14;
+  a0.a14 = 15;
+  a0.a15 = 16;
+  a0.a16 = 17;
+  a0.a17 = 18;
+  a0.a18 = 19;
+  a0.a19 = 20;
+  a0.a20 = 21;
+  a0.a21 = 22;
+  a0.a22 = 23;
+  a0.a23 = 24;
+  a0.a24 = 25;
+  a0.a25 = 26;
+  a0.a26 = 27;
+  a0.a27 = 28;
+  a0.a28 = 29;
+  a0.a29 = 30;
+  a0.a30 = 31;
+  a0.a31 = 32;
+  a0.a32 = 33;
+  a0.a33 = 34;
+  a0.a34 = 35;
+  a0.a35 = 36;
+  a0.a36 = 37;
+  a0.a37 = 38;
+  a0.a38 = 39;
+  a0.a39 = 40;
+  a0.a40 = 41;
+  a0.a41 = 42;
+  a0.a42 = 43;
+  a0.a43 = 44;
+  a0.a44 = 45;
+  a0.a45 = 46;
+  a0.a46 = 47;
+  a0.a47 = 48;
+  a0.a48 = 49;
+  a0.a49 = 50;
+  a0.a50 = 51;
+  a0.a51 = 52;
+  a0.a52 = 53;
+  a0.a53 = 54;
+  a0.a54 = 55;
+  a0.a55 = 56;
+  a0.a56 = 57;
+  a0.a57 = 58;
+  a0.a58 = 59;
+  a0.a59 = 60;
+  a0.a60 = 61;
+  a0.a61 = 62;
+  a0.a62 = 63;
+  a0.a63 = 64;
+  a0.a64 = 65;
+  a0.a65 = 66;
+  a0.a66 = 67;
+  a0.a67 = 68;
+  a0.a68 = 69;
+  a0.a69 = 70;
+  a0.a70 = 71;
+  a0.a71 = 72;
+  a0.a72 = 73;
+  a0.a73 = 74;
+  a0.a74 = 75;
+  a0.a75 = 76;
+  a0.a76 = 77;
+  a0.a77 = 78;
+  a0.a78 = 79;
+  a0.a79 = 80;
+  a0.a80 = 81;
+  a0.a81 = 82;
+  a0.a82 = 83;
+  a0.a83 = 84;
+  a0.a84 = 85;
+  a0.a85 = 86;
+  a0.a86 = 87;
+  a0.a87 = 88;
+  a0.a88 = 89;
+  a0.a89 = 90;
+  a0.a90 = 91;
+  a0.a91 = 92;
+  a0.a92 = 93;
+  a0.a93 = 94;
+  a0.a94 = 95;
+  a0.a95 = 96;
+  a0.a96 = 97;
+  a0.a97 = 98;
+  a0.a98 = 99;
+  a0.a99 = 100;
+  a0.a100 = 101;
+  a0.a101 = 102;
+  a0.a102 = 103;
+  a0.a103 = 104;
+  a0.a104 = 105;
+  a0.a105 = 106;
+  a0.a106 = 107;
+  a0.a107 = 108;
+  a0.a108 = 109;
+  a0.a109 = 110;
+  a0.a110 = 111;
+  a0.a111 = 112;
+  a0.a112 = 113;
+  a0.a113 = 114;
+  a0.a114 = 115;
+  a0.a115 = 116;
+  a0.a116 = 117;
+  a0.a117 = 118;
+  a0.a118 = 119;
+  a0.a119 = 120;
+  a0.a120 = 121;
+  a0.a121 = 122;
+  a0.a122 = 123;
+  a0.a123 = 124;
+  a0.a124 = 125;
+  a0.a125 = 126;
+  a0.a126 = 127;
+  a0.a127 = 128;
+
+  final result = passStruct1024BytesHomogeneousUint64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(8256, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf =
+    ffiTestFunctions.lookupFunction<
+            Float Function(
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float),
+            double Function(
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double)>("PassFloatStruct16BytesHomogeneousFloatFloatStruct1",
+        isLeaf: true);
+
+/// Tests the alignment of structs in FPU registers and backfilling.
+void testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf() {
+  double a0;
+  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
+  double a2;
+  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
+  double a4;
+  final a5Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a5 = a5Pointer.ref;
+  double a6;
+  final a7Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1.0;
+  a1.a0 = 2.0;
+  a1.a1 = -3.0;
+  a1.a2 = 4.0;
+  a1.a3 = -5.0;
+  a2 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a3.a2 = -9.0;
+  a3.a3 = 10.0;
+  a4 = -11.0;
+  a5.a0 = 12.0;
+  a5.a1 = -13.0;
+  a5.a2 = 14.0;
+  a5.a3 = -15.0;
+  a6 = 16.0;
+  a7.a0 = -17.0;
+  a7.a1 = 18.0;
+  a7.a2 = -19.0;
+  a7.a3 = 20.0;
+  a8 = -21.0;
+
+  final result = passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-11.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float),
+            double Function(
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double)>("PassFloatStruct32BytesHomogeneousDoubleFloatStruct",
+        isLeaf: true);
+
+/// Tests the alignment of structs in FPU registers and backfilling.
+void testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf() {
+  double a0;
+  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
+  double a2;
+  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
+  double a4;
+  final a5Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a5 = a5Pointer.ref;
+  double a6;
+  final a7Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1.0;
+  a1.a0 = 2.0;
+  a1.a1 = -3.0;
+  a1.a2 = 4.0;
+  a1.a3 = -5.0;
+  a2 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a3.a2 = -9.0;
+  a3.a3 = 10.0;
+  a4 = -11.0;
+  a5.a0 = 12.0;
+  a5.a1 = -13.0;
+  a5.a2 = 14.0;
+  a5.a3 = -15.0;
+  a6 = 16.0;
+  a7.a0 = -17.0;
+  a7.a1 = 18.0;
+  a7.a2 = -19.0;
+  a7.a3 = 20.0;
+  a8 = -21.0;
+
+  final result = passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-11.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(Int8, Struct16BytesMixed, Int8, Struct16BytesMixed,
+                Int8, Struct16BytesMixed, Int8, Struct16BytesMixed, Int8),
+            double Function(
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int)>("PassInt8Struct16BytesMixedInt8Struct16BytesMixedIn",
+        isLeaf: true);
+
+/// Tests the alignment of structs in integers registers and on the stack.
+/// Arm32 aligns this struct at 8.
+/// Also, arm32 allocates the second struct partially in registers, partially
+/// on stack.
+/// Test backfilling of integer registers.
+void testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a1 = a1Pointer.ref;
+  int a2;
+  final a3Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a3 = a3Pointer.ref;
+  int a4;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  int a6;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  int a8;
+
+  a0 = -1;
+  a1.a0 = 2.0;
+  a1.a1 = -3;
+  a2 = 4;
+  a3.a0 = -5.0;
+  a3.a1 = 6;
+  a4 = -7;
+  a5.a0 = 8.0;
+  a5.a1 = -9;
+  a6 = 10;
+  a7.a0 = -11.0;
+  a7.a1 = 12;
+  a8 = -13;
+
+  final result = passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-7.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passDoublex6Struct16BytesMixedx4Int32Leaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Int32),
+        double Function(
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            int)>("PassDoublex6Struct16BytesMixedx4Int32", isLeaf: true);
+
+/// On Linux x64, it will exhaust xmm registers first, after 6 doubles and 2
+/// structs. The rest of the structs will go on the stack.
+/// The int will be backfilled into the int register.
+void testPassDoublex6Struct16BytesMixedx4Int32Leaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+  double a5;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a9 = a9Pointer.ref;
+  int a10;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+  a5 = 6.0;
+  a6.a0 = -7.0;
+  a6.a1 = 8;
+  a7.a0 = -9.0;
+  a7.a1 = 10;
+  a8.a0 = -11.0;
+  a8.a1 = 12;
+  a9.a0 = -13.0;
+  a9.a1 = 14;
+  a10 = -15;
+
+  final result = passDoublex6Struct16BytesMixedx4Int32Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
+
+  print("result = $result");
+
+  Expect.approxEquals(-8.0, result);
+
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passInt32x4Struct16BytesMixedx4DoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(Int32, Int32, Int32, Int32, Struct16BytesMixed,
+            Struct16BytesMixed, Struct16BytesMixed, Struct16BytesMixed, Double),
+        double Function(
+            int,
+            int,
+            int,
+            int,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            double)>("PassInt32x4Struct16BytesMixedx4Double", isLeaf: true);
+
+/// On Linux x64, it will exhaust int registers first.
+/// The rest of the structs will go on the stack.
+/// The double will be backfilled into the xmm register.
+void testPassInt32x4Struct16BytesMixedx4DoubleLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  final a4Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4.a0 = -5.0;
+  a4.a1 = 6;
+  a5.a0 = -7.0;
+  a5.a1 = 8;
+  a6.a0 = -9.0;
+  a6.a1 = 10;
+  a7.a0 = -11.0;
+  a7.a1 = 12;
+  a8 = -13.0;
+
+  final result = passInt32x4Struct16BytesMixedx4DoubleLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-7.0, result);
+
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(Struct40BytesHomogeneousDouble,
+                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat),
+            double Function(Struct40BytesHomogeneousDouble,
+                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat)>(
+        "PassStruct40BytesHomogeneousDoubleStruct4BytesHomo",
+        isLeaf: true);
+
+/// On various architectures, first struct is allocated on stack.
+/// Check that the other two arguments are allocated on registers.
+void testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf() {
+  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
+  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+  a1.a0 = 6;
+  a1.a1 = -7;
+  a2.a0 = 8.0;
+  a2.a1 = -9.0;
+
+  final result =
+      passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(-5.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+}
+
+final passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Int64,
+            Int8,
+            Struct1ByteInt,
+            Int64,
+            Int8,
+            Struct4BytesHomogeneousInt16,
+            Int64,
+            Int8,
+            Struct8BytesInt,
+            Int64,
+            Int8,
+            Struct8BytesHomogeneousFloat,
+            Int64,
+            Int8,
+            Struct8BytesMixed,
+            Int64,
+            Int8,
+            StructAlignmentInt16,
+            Int64,
+            Int8,
+            StructAlignmentInt32,
+            Int64,
+            Int8,
+            StructAlignmentInt64),
+        double Function(
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            int,
+            int,
+            Struct1ByteInt,
+            int,
+            int,
+            Struct4BytesHomogeneousInt16,
+            int,
+            int,
+            Struct8BytesInt,
+            int,
+            int,
+            Struct8BytesHomogeneousFloat,
+            int,
+            int,
+            Struct8BytesMixed,
+            int,
+            int,
+            StructAlignmentInt16,
+            int,
+            int,
+            StructAlignmentInt32,
+            int,
+            int,
+            StructAlignmentInt64)>("PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  double a8;
+  double a9;
+  double a10;
+  double a11;
+  double a12;
+  double a13;
+  double a14;
+  double a15;
+  int a16;
+  int a17;
+  final a18Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a18 = a18Pointer.ref;
+  int a19;
+  int a20;
+  final a21Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a21 = a21Pointer.ref;
+  int a22;
+  int a23;
+  final a24Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a24 = a24Pointer.ref;
+  int a25;
+  int a26;
+  final a27Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a27 = a27Pointer.ref;
+  int a28;
+  int a29;
+  final a30Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a30 = a30Pointer.ref;
+  int a31;
+  int a32;
+  final a33Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a33 = a33Pointer.ref;
+  int a34;
+  int a35;
+  final a36Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a36 = a36Pointer.ref;
+  int a37;
+  int a38;
+  final a39Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a39 = a39Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8 = -9.0;
+  a9 = 10.0;
+  a10 = -11.0;
+  a11 = 12.0;
+  a12 = -13.0;
+  a13 = 14.0;
+  a14 = -15.0;
+  a15 = 16.0;
+  a16 = -17;
+  a17 = 18;
+  a18.a0 = -19;
+  a19 = 20;
+  a20 = -21;
+  a21.a0 = 22;
+  a21.a1 = -23;
+  a22 = 24;
+  a23 = -25;
+  a24.a0 = 26;
+  a24.a1 = -27;
+  a24.a2 = 28;
+  a25 = -29;
+  a26 = 30;
+  a27.a0 = -31.0;
+  a27.a1 = 32.0;
+  a28 = -33;
+  a29 = 34;
+  a30.a0 = -35.0;
+  a30.a1 = 36;
+  a30.a2 = -37;
+  a31 = 38;
+  a32 = -39;
+  a33.a0 = 40;
+  a33.a1 = -41;
+  a33.a2 = 42;
+  a34 = -43;
+  a35 = 44;
+  a36.a0 = -45;
+  a36.a1 = 46;
+  a36.a2 = -47;
+  a37 = 48;
+  a38 = -49;
+  a39.a0 = 50;
+  a39.a1 = -51;
+  a39.a2 = 52;
+
+  final result = passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf(
+      a0,
+      a1,
+      a2,
+      a3,
+      a4,
+      a5,
+      a6,
+      a7,
+      a8,
+      a9,
+      a10,
+      a11,
+      a12,
+      a13,
+      a14,
+      a15,
+      a16,
+      a17,
+      a18,
+      a19,
+      a20,
+      a21,
+      a22,
+      a23,
+      a24,
+      a25,
+      a26,
+      a27,
+      a28,
+      a29,
+      a30,
+      a31,
+      a32,
+      a33,
+      a34,
+      a35,
+      a36,
+      a37,
+      a38,
+      a39);
+
+  print("result = $result");
+
+  Expect.approxEquals(26.0, result);
+
+  calloc.free(a18Pointer);
+  calloc.free(a21Pointer);
+  calloc.free(a24Pointer);
+  calloc.free(a27Pointer);
+  calloc.free(a30Pointer);
+  calloc.free(a33Pointer);
+  calloc.free(a36Pointer);
+  calloc.free(a39Pointer);
+}
+
+final passStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt16),
+    int Function(
+        StructAlignmentInt16)>("PassStructAlignmentInt16", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testPassStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt16Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt32),
+    int Function(
+        StructAlignmentInt32)>("PassStructAlignmentInt32", isLeaf: true);
+
+/// Test alignment and padding of 32 byte int within struct.
+void testPassStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt64),
+    int Function(
+        StructAlignmentInt64)>("PassStructAlignmentInt64", isLeaf: true);
+
+/// Test alignment and padding of 64 byte int within struct.
+void testPassStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct8BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt),
+    int Function(
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt)>("PassStruct8BytesNestedIntx10", isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust registers on all platforms.
+void testPassStruct8BytesNestedIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3;
+  a0.a1.a1 = 4;
+  a1.a0.a0 = -5;
+  a1.a0.a1 = 6;
+  a1.a1.a0 = -7;
+  a1.a1.a1 = 8;
+  a2.a0.a0 = -9;
+  a2.a0.a1 = 10;
+  a2.a1.a0 = -11;
+  a2.a1.a1 = 12;
+  a3.a0.a0 = -13;
+  a3.a0.a1 = 14;
+  a3.a1.a0 = -15;
+  a3.a1.a1 = 16;
+  a4.a0.a0 = -17;
+  a4.a0.a1 = 18;
+  a4.a1.a0 = -19;
+  a4.a1.a1 = 20;
+  a5.a0.a0 = -21;
+  a5.a0.a1 = 22;
+  a5.a1.a0 = -23;
+  a5.a1.a1 = 24;
+  a6.a0.a0 = -25;
+  a6.a0.a1 = 26;
+  a6.a1.a0 = -27;
+  a6.a1.a1 = 28;
+  a7.a0.a0 = -29;
+  a7.a0.a1 = 30;
+  a7.a1.a0 = -31;
+  a7.a1.a1 = 32;
+  a8.a0.a0 = -33;
+  a8.a0.a1 = 34;
+  a8.a1.a0 = -35;
+  a8.a1.a1 = 36;
+  a9.a0.a0 = -37;
+  a9.a0.a1 = 38;
+  a9.a1.a0 = -39;
+  a9.a1.a1 = 40;
+
+  final result =
+      passStruct8BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(20, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat),
+        double Function(
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat)>("PassStruct8BytesNestedFloatx10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust fpu registers on all platforms.
+void testPassStruct8BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1.a0 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a1.a0 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a1.a0 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a1.a0 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a1.a0 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a1.a0 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a1.a0 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a1.a0 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a1.a0 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a1.a0 = 20.0;
+
+  final result = passStruct8BytesNestedFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedFloat2x10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2),
+        double Function(
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2)>("PassStruct8BytesNestedFloat2x10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust fpu registers on all platforms.
+/// The nesting is irregular, testing homogenous float rules on arm and arm64,
+/// and the fpu register usage on x64.
+void testPassStruct8BytesNestedFloat2x10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a1 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a1 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a1 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a1 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a1 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a1 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a1 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a1 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a1 = 20.0;
+
+  final result = passStruct8BytesNestedFloat2x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedMixedx10Leaf = ffiTestFunctions.lookupFunction<
+        Double Function(
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed),
+        double Function(
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed)>("PassStruct8BytesNestedMixedx10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust all registers on all platforms.
+void testPassStruct8BytesNestedMixedx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3.0;
+  a1.a0.a0 = 4;
+  a1.a0.a1 = -5;
+  a1.a1.a0 = 6.0;
+  a2.a0.a0 = -7;
+  a2.a0.a1 = 8;
+  a2.a1.a0 = -9.0;
+  a3.a0.a0 = 10;
+  a3.a0.a1 = -11;
+  a3.a1.a0 = 12.0;
+  a4.a0.a0 = -13;
+  a4.a0.a1 = 14;
+  a4.a1.a0 = -15.0;
+  a5.a0.a0 = 16;
+  a5.a0.a1 = -17;
+  a5.a1.a0 = 18.0;
+  a6.a0.a0 = -19;
+  a6.a0.a1 = 20;
+  a6.a1.a0 = -21.0;
+  a7.a0.a0 = 22;
+  a7.a0.a1 = -23;
+  a7.a1.a0 = 24.0;
+  a8.a0.a0 = -25;
+  a8.a0.a1 = 26;
+  a8.a1.a0 = -27.0;
+  a9.a0.a0 = 28;
+  a9.a0.a1 = -29;
+  a9.a1.a0 = 30.0;
+
+  final result = passStruct8BytesNestedMixedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct16BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(Struct16BytesNestedInt, Struct16BytesNestedInt),
+    int Function(Struct16BytesNestedInt,
+        Struct16BytesNestedInt)>("PassStruct16BytesNestedIntx2", isLeaf: true);
+
+/// Deeper nested struct to test recursive member access.
+void testPassStruct16BytesNestedIntx2Leaf() {
+  final a0Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0 = -1;
+  a0.a0.a0.a1 = 2;
+  a0.a0.a1.a0 = -3;
+  a0.a0.a1.a1 = 4;
+  a0.a1.a0.a0 = -5;
+  a0.a1.a0.a1 = 6;
+  a0.a1.a1.a0 = -7;
+  a0.a1.a1.a1 = 8;
+  a1.a0.a0.a0 = -9;
+  a1.a0.a0.a1 = 10;
+  a1.a0.a1.a0 = -11;
+  a1.a0.a1.a1 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15;
+  a1.a1.a1.a1 = 16;
+
+  final result = passStruct16BytesNestedIntx2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(8, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final passStruct32BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(Struct32BytesNestedInt, Struct32BytesNestedInt),
+    int Function(Struct32BytesNestedInt,
+        Struct32BytesNestedInt)>("PassStruct32BytesNestedIntx2", isLeaf: true);
+
+/// Even deeper nested struct to test recursive member access.
+void testPassStruct32BytesNestedIntx2Leaf() {
+  final a0Pointer = calloc<Struct32BytesNestedInt>();
+  final Struct32BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct32BytesNestedInt>();
+  final Struct32BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0.a0 = -1;
+  a0.a0.a0.a0.a1 = 2;
+  a0.a0.a0.a1.a0 = -3;
+  a0.a0.a0.a1.a1 = 4;
+  a0.a0.a1.a0.a0 = -5;
+  a0.a0.a1.a0.a1 = 6;
+  a0.a0.a1.a1.a0 = -7;
+  a0.a0.a1.a1.a1 = 8;
+  a0.a1.a0.a0.a0 = -9;
+  a0.a1.a0.a0.a1 = 10;
+  a0.a1.a0.a1.a0 = -11;
+  a0.a1.a0.a1.a1 = 12;
+  a0.a1.a1.a0.a0 = -13;
+  a0.a1.a1.a0.a1 = 14;
+  a0.a1.a1.a1.a0 = -15;
+  a0.a1.a1.a1.a1 = 16;
+  a1.a0.a0.a0.a0 = -17;
+  a1.a0.a0.a0.a1 = 18;
+  a1.a0.a0.a1.a0 = -19;
+  a1.a0.a0.a1.a1 = 20;
+  a1.a0.a1.a0.a0 = -21;
+  a1.a0.a1.a0.a1 = 22;
+  a1.a0.a1.a1.a0 = -23;
+  a1.a0.a1.a1.a1 = 24;
+  a1.a1.a0.a0.a0 = -25;
+  a1.a1.a0.a0.a1 = 26;
+  a1.a1.a0.a1.a0 = -27;
+  a1.a1.a0.a1.a1 = 28;
+  a1.a1.a1.a0.a0 = -29;
+  a1.a1.a1.a0.a1 = 30;
+  a1.a1.a1.a1.a0 = -31;
+  a1.a1.a1.a1.a1 = 32;
+
+  final result = passStruct32BytesNestedIntx2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(16, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt16Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt16),
+            int Function(StructNestedIntStructAlignmentInt16)>(
+        "PassStructNestedIntStructAlignmentInt16",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 16 byte int.
+void testPassStructNestedIntStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt16>();
+  final StructNestedIntStructAlignmentInt16 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt16Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt32Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt32),
+            int Function(StructNestedIntStructAlignmentInt32)>(
+        "PassStructNestedIntStructAlignmentInt32",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 32 byte int.
+void testPassStructNestedIntStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt32>();
+  final StructNestedIntStructAlignmentInt32 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt64Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt64),
+            int Function(StructNestedIntStructAlignmentInt64)>(
+        "PassStructNestedIntStructAlignmentInt64",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 64 byte int.
+void testPassStructNestedIntStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt64>();
+  final StructNestedIntStructAlignmentInt64 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIrregularEvenBiggerx4Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger),
+            double Function(
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger)>(
+        "PassStructNestedIrregularEvenBiggerx4",
+        isLeaf: true);
+
+/// Return big irregular struct as smoke test.
+void testPassStructNestedIrregularEvenBiggerx4Leaf() {
+  final a0Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a3 = a3Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1.a0.a0 = 2;
+  a0.a1.a0.a1.a0.a0 = -3;
+  a0.a1.a0.a1.a0.a1 = 4;
+  a0.a1.a0.a1.a1.a0 = -5.0;
+  a0.a1.a0.a2 = 6;
+  a0.a1.a0.a3.a0.a0 = -7.0;
+  a0.a1.a0.a3.a1 = 8.0;
+  a0.a1.a0.a4 = 9;
+  a0.a1.a0.a5.a0.a0 = 10.0;
+  a0.a1.a0.a5.a1.a0 = -11.0;
+  a0.a1.a0.a6 = 12;
+  a0.a1.a1.a0.a0 = -13;
+  a0.a1.a1.a0.a1 = 14;
+  a0.a1.a1.a1.a0 = -15.0;
+  a0.a1.a2 = 16.0;
+  a0.a1.a3 = -17.0;
+  a0.a2.a0.a0 = 18;
+  a0.a2.a0.a1.a0.a0 = -19;
+  a0.a2.a0.a1.a0.a1 = 20;
+  a0.a2.a0.a1.a1.a0 = -21.0;
+  a0.a2.a0.a2 = 22;
+  a0.a2.a0.a3.a0.a0 = -23.0;
+  a0.a2.a0.a3.a1 = 24.0;
+  a0.a2.a0.a4 = 25;
+  a0.a2.a0.a5.a0.a0 = 26.0;
+  a0.a2.a0.a5.a1.a0 = -27.0;
+  a0.a2.a0.a6 = 28;
+  a0.a2.a1.a0.a0 = -29;
+  a0.a2.a1.a0.a1 = 30;
+  a0.a2.a1.a1.a0 = -31.0;
+  a0.a2.a2 = 32.0;
+  a0.a2.a3 = -33.0;
+  a0.a3 = 34.0;
+  a1.a0 = 35;
+  a1.a1.a0.a0 = 36;
+  a1.a1.a0.a1.a0.a0 = -37;
+  a1.a1.a0.a1.a0.a1 = 38;
+  a1.a1.a0.a1.a1.a0 = -39.0;
+  a1.a1.a0.a2 = 40;
+  a1.a1.a0.a3.a0.a0 = -41.0;
+  a1.a1.a0.a3.a1 = 42.0;
+  a1.a1.a0.a4 = 43;
+  a1.a1.a0.a5.a0.a0 = 44.0;
+  a1.a1.a0.a5.a1.a0 = -45.0;
+  a1.a1.a0.a6 = 46;
+  a1.a1.a1.a0.a0 = -47;
+  a1.a1.a1.a0.a1 = 48;
+  a1.a1.a1.a1.a0 = -49.0;
+  a1.a1.a2 = 50.0;
+  a1.a1.a3 = -51.0;
+  a1.a2.a0.a0 = 52;
+  a1.a2.a0.a1.a0.a0 = -53;
+  a1.a2.a0.a1.a0.a1 = 54;
+  a1.a2.a0.a1.a1.a0 = -55.0;
+  a1.a2.a0.a2 = 56;
+  a1.a2.a0.a3.a0.a0 = -57.0;
+  a1.a2.a0.a3.a1 = 58.0;
+  a1.a2.a0.a4 = 59;
+  a1.a2.a0.a5.a0.a0 = 60.0;
+  a1.a2.a0.a5.a1.a0 = -61.0;
+  a1.a2.a0.a6 = 62;
+  a1.a2.a1.a0.a0 = -63;
+  a1.a2.a1.a0.a1 = 64;
+  a1.a2.a1.a1.a0 = -65.0;
+  a1.a2.a2 = 66.0;
+  a1.a2.a3 = -67.0;
+  a1.a3 = 68.0;
+  a2.a0 = 69;
+  a2.a1.a0.a0 = 70;
+  a2.a1.a0.a1.a0.a0 = -71;
+  a2.a1.a0.a1.a0.a1 = 72;
+  a2.a1.a0.a1.a1.a0 = -73.0;
+  a2.a1.a0.a2 = 74;
+  a2.a1.a0.a3.a0.a0 = -75.0;
+  a2.a1.a0.a3.a1 = 76.0;
+  a2.a1.a0.a4 = 77;
+  a2.a1.a0.a5.a0.a0 = 78.0;
+  a2.a1.a0.a5.a1.a0 = -79.0;
+  a2.a1.a0.a6 = 80;
+  a2.a1.a1.a0.a0 = -81;
+  a2.a1.a1.a0.a1 = 82;
+  a2.a1.a1.a1.a0 = -83.0;
+  a2.a1.a2 = 84.0;
+  a2.a1.a3 = -85.0;
+  a2.a2.a0.a0 = 86;
+  a2.a2.a0.a1.a0.a0 = -87;
+  a2.a2.a0.a1.a0.a1 = 88;
+  a2.a2.a0.a1.a1.a0 = -89.0;
+  a2.a2.a0.a2 = 90;
+  a2.a2.a0.a3.a0.a0 = -91.0;
+  a2.a2.a0.a3.a1 = 92.0;
+  a2.a2.a0.a4 = 93;
+  a2.a2.a0.a5.a0.a0 = 94.0;
+  a2.a2.a0.a5.a1.a0 = -95.0;
+  a2.a2.a0.a6 = 96;
+  a2.a2.a1.a0.a0 = -97;
+  a2.a2.a1.a0.a1 = 98;
+  a2.a2.a1.a1.a0 = -99.0;
+  a2.a2.a2 = 100.0;
+  a2.a2.a3 = -101.0;
+  a2.a3 = 102.0;
+  a3.a0 = 103;
+  a3.a1.a0.a0 = 104;
+  a3.a1.a0.a1.a0.a0 = -105;
+  a3.a1.a0.a1.a0.a1 = 106;
+  a3.a1.a0.a1.a1.a0 = -107.0;
+  a3.a1.a0.a2 = 108;
+  a3.a1.a0.a3.a0.a0 = -109.0;
+  a3.a1.a0.a3.a1 = 110.0;
+  a3.a1.a0.a4 = 111;
+  a3.a1.a0.a5.a0.a0 = 112.0;
+  a3.a1.a0.a5.a1.a0 = -113.0;
+  a3.a1.a0.a6 = 114;
+  a3.a1.a1.a0.a0 = -115;
+  a3.a1.a1.a0.a1 = 116;
+  a3.a1.a1.a1.a0 = -117.0;
+  a3.a1.a2 = 118.0;
+  a3.a1.a3 = -119.0;
+  a3.a2.a0.a0 = 120;
+  a3.a2.a0.a1.a0.a0 = -121;
+  a3.a2.a0.a1.a0.a1 = 122;
+  a3.a2.a0.a1.a1.a0 = -123.0;
+  a3.a2.a0.a2 = 124;
+  a3.a2.a0.a3.a0.a0 = -125.0;
+  a3.a2.a0.a3.a1 = 126.0;
+  a3.a2.a0.a4 = 127;
+  a3.a2.a0.a5.a0.a0 = 128.0;
+  a3.a2.a0.a5.a1.a0 = -129.0;
+  a3.a2.a0.a6 = 130;
+  a3.a2.a1.a0.a0 = -131;
+  a3.a2.a1.a0.a1 = 132;
+  a3.a2.a1.a1.a0 = -133.0;
+  a3.a2.a2 = 134.0;
+  a3.a2.a3 = -135.0;
+  a3.a3 = 136.0;
+
+  final result = passStructNestedIrregularEvenBiggerx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(1572.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStruct8BytesInlineArrayIntx4Leaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt),
+        int Function(
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt)>("PassStruct8BytesInlineArrayIntx4",
+    isLeaf: true);
+
+/// Simple struct with inline array.
+void testPassStruct8BytesInlineArrayIntx4Leaf() {
+  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a3 = a3Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+  a1.a0[0] = 9;
+  a1.a0[1] = 10;
+  a1.a0[2] = 11;
+  a1.a0[3] = 12;
+  a1.a0[4] = 13;
+  a1.a0[5] = 14;
+  a1.a0[6] = 15;
+  a1.a0[7] = 16;
+  a2.a0[0] = 17;
+  a2.a0[1] = 18;
+  a2.a0[2] = 19;
+  a2.a0[3] = 20;
+  a2.a0[4] = 21;
+  a2.a0[5] = 22;
+  a2.a0[6] = 23;
+  a2.a0[7] = 24;
+  a3.a0[0] = 25;
+  a3.a0[1] = 26;
+  a3.a0[2] = 27;
+  a3.a0[3] = 28;
+  a3.a0[4] = 29;
+  a3.a0[5] = 30;
+  a3.a0[6] = 31;
+  a3.a0[7] = 32;
+
+  final result = passStruct8BytesInlineArrayIntx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(528, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStructInlineArrayIrregularx4Leaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(StructInlineArrayIrregular, StructInlineArrayIrregular,
+            StructInlineArrayIrregular, StructInlineArrayIrregular),
+        int Function(
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular)>("PassStructInlineArrayIrregularx4",
+    isLeaf: true);
+
+/// Irregular struct with inline array.
+void testPassStructInlineArrayIrregularx4Leaf() {
+  final a0Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a3 = a3Pointer.ref;
+
+  a0.a0[0].a0 = -1;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3;
+  a0.a0[1].a1 = 4;
+  a0.a1 = 5;
+  a1.a0[0].a0 = 6;
+  a1.a0[0].a1 = -7;
+  a1.a0[1].a0 = 8;
+  a1.a0[1].a1 = -9;
+  a1.a1 = 10;
+  a2.a0[0].a0 = -11;
+  a2.a0[0].a1 = 12;
+  a2.a0[1].a0 = -13;
+  a2.a0[1].a1 = 14;
+  a2.a1 = 15;
+  a3.a0[0].a0 = 16;
+  a3.a0[0].a1 = -17;
+  a3.a0[1].a0 = 18;
+  a3.a0[1].a1 = -19;
+  a3.a1 = 20;
+
+  final result = passStructInlineArrayIrregularx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(50, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStructInlineArray100BytesLeaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(StructInlineArray100Bytes),
+        int Function(StructInlineArray100Bytes)>(
+    "PassStructInlineArray100Bytes",
+    isLeaf: true);
+
+/// Regular larger struct with inline array.
+void testPassStructInlineArray100BytesLeaf() {
+  final a0Pointer = calloc<StructInlineArray100Bytes>();
+  final StructInlineArray100Bytes a0 = a0Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+  a0.a0[8] = 9;
+  a0.a0[9] = 10;
+  a0.a0[10] = 11;
+  a0.a0[11] = 12;
+  a0.a0[12] = 13;
+  a0.a0[13] = 14;
+  a0.a0[14] = 15;
+  a0.a0[15] = 16;
+  a0.a0[16] = 17;
+  a0.a0[17] = 18;
+  a0.a0[18] = 19;
+  a0.a0[19] = 20;
+  a0.a0[20] = 21;
+  a0.a0[21] = 22;
+  a0.a0[22] = 23;
+  a0.a0[23] = 24;
+  a0.a0[24] = 25;
+  a0.a0[25] = 26;
+  a0.a0[26] = 27;
+  a0.a0[27] = 28;
+  a0.a0[28] = 29;
+  a0.a0[29] = 30;
+  a0.a0[30] = 31;
+  a0.a0[31] = 32;
+  a0.a0[32] = 33;
+  a0.a0[33] = 34;
+  a0.a0[34] = 35;
+  a0.a0[35] = 36;
+  a0.a0[36] = 37;
+  a0.a0[37] = 38;
+  a0.a0[38] = 39;
+  a0.a0[39] = 40;
+  a0.a0[40] = 41;
+  a0.a0[41] = 42;
+  a0.a0[42] = 43;
+  a0.a0[43] = 44;
+  a0.a0[44] = 45;
+  a0.a0[45] = 46;
+  a0.a0[46] = 47;
+  a0.a0[47] = 48;
+  a0.a0[48] = 49;
+  a0.a0[49] = 50;
+  a0.a0[50] = 51;
+  a0.a0[51] = 52;
+  a0.a0[52] = 53;
+  a0.a0[53] = 54;
+  a0.a0[54] = 55;
+  a0.a0[55] = 56;
+  a0.a0[56] = 57;
+  a0.a0[57] = 58;
+  a0.a0[58] = 59;
+  a0.a0[59] = 60;
+  a0.a0[60] = 61;
+  a0.a0[61] = 62;
+  a0.a0[62] = 63;
+  a0.a0[63] = 64;
+  a0.a0[64] = 65;
+  a0.a0[65] = 66;
+  a0.a0[66] = 67;
+  a0.a0[67] = 68;
+  a0.a0[68] = 69;
+  a0.a0[69] = 70;
+  a0.a0[70] = 71;
+  a0.a0[71] = 72;
+  a0.a0[72] = 73;
+  a0.a0[73] = 74;
+  a0.a0[74] = 75;
+  a0.a0[75] = 76;
+  a0.a0[76] = 77;
+  a0.a0[77] = 78;
+  a0.a0[78] = 79;
+  a0.a0[79] = 80;
+  a0.a0[80] = 81;
+  a0.a0[81] = 82;
+  a0.a0[82] = 83;
+  a0.a0[83] = 84;
+  a0.a0[84] = 85;
+  a0.a0[85] = 86;
+  a0.a0[86] = 87;
+  a0.a0[87] = 88;
+  a0.a0[88] = 89;
+  a0.a0[89] = 90;
+  a0.a0[90] = 91;
+  a0.a0[91] = 92;
+  a0.a0[92] = 93;
+  a0.a0[93] = 94;
+  a0.a0[94] = 95;
+  a0.a0[95] = 96;
+  a0.a0[96] = 97;
+  a0.a0[97] = 98;
+  a0.a0[98] = 99;
+  a0.a0[99] = 100;
+
+  final result = passStructInlineArray100BytesLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(5050, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructStruct16BytesHomogeneousFloat2x5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Float Function(
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2),
+            double Function(
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2)>(
+        "PassStructStruct16BytesHomogeneousFloat2x5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStructStruct16BytesHomogeneousFloat2x5Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a4 = a4Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+  a1.a0.a0 = -5.0;
+  a1.a1[0].a0 = 6.0;
+  a1.a1[1].a0 = -7.0;
+  a1.a2 = 8.0;
+  a2.a0.a0 = -9.0;
+  a2.a1[0].a0 = 10.0;
+  a2.a1[1].a0 = -11.0;
+  a2.a2 = 12.0;
+  a3.a0.a0 = -13.0;
+  a3.a1[0].a0 = 14.0;
+  a3.a1[1].a0 = -15.0;
+  a3.a2 = 16.0;
+  a4.a0.a0 = -17.0;
+  a4.a1[0].a0 = 18.0;
+  a4.a1[1].a0 = -19.0;
+  a4.a2 = 20.0;
+
+  final result =
+      passStructStruct16BytesHomogeneousFloat2x5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStructStruct32BytesHomogeneousDouble2x5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2),
+            double Function(
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2)>(
+        "PassStructStruct32BytesHomogeneousDouble2x5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStructStruct32BytesHomogeneousDouble2x5Leaf() {
+  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a4 = a4Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+  a1.a0.a0 = -5.0;
+  a1.a1[0].a0 = 6.0;
+  a1.a1[1].a0 = -7.0;
+  a1.a2 = 8.0;
+  a2.a0.a0 = -9.0;
+  a2.a1[0].a0 = 10.0;
+  a2.a1[1].a0 = -11.0;
+  a2.a2 = 12.0;
+  a3.a0.a0 = -13.0;
+  a3.a1[0].a0 = 14.0;
+  a3.a1[1].a0 = -15.0;
+  a3.a2 = 16.0;
+  a4.a0.a0 = -17.0;
+  a4.a1[0].a0 = 18.0;
+  a4.a1[1].a0 = -19.0;
+  a4.a2 = 20.0;
+
+  final result =
+      passStructStruct32BytesHomogeneousDouble2x5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStructStruct16BytesMixed3x10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3),
+        double Function(
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3)>("PassStructStruct16BytesMixed3x10",
+    isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 4 byte aligned.
+void testPassStructStruct16BytesMixed3x10Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[0].a1 = -3;
+  a0.a1[0].a2 = 4;
+  a0.a2[0] = -5;
+  a0.a2[1] = 6;
+  a1.a0.a0 = -7.0;
+  a1.a1[0].a0 = 8.0;
+  a1.a1[0].a1 = -9;
+  a1.a1[0].a2 = 10;
+  a1.a2[0] = -11;
+  a1.a2[1] = 12;
+  a2.a0.a0 = -13.0;
+  a2.a1[0].a0 = 14.0;
+  a2.a1[0].a1 = -15;
+  a2.a1[0].a2 = 16;
+  a2.a2[0] = -17;
+  a2.a2[1] = 18;
+  a3.a0.a0 = -19.0;
+  a3.a1[0].a0 = 20.0;
+  a3.a1[0].a1 = -21;
+  a3.a1[0].a2 = 22;
+  a3.a2[0] = -23;
+  a3.a2[1] = 24;
+  a4.a0.a0 = -25.0;
+  a4.a1[0].a0 = 26.0;
+  a4.a1[0].a1 = -27;
+  a4.a1[0].a2 = 28;
+  a4.a2[0] = -29;
+  a4.a2[1] = 30;
+  a5.a0.a0 = -31.0;
+  a5.a1[0].a0 = 32.0;
+  a5.a1[0].a1 = -33;
+  a5.a1[0].a2 = 34;
+  a5.a2[0] = -35;
+  a5.a2[1] = 36;
+  a6.a0.a0 = -37.0;
+  a6.a1[0].a0 = 38.0;
+  a6.a1[0].a1 = -39;
+  a6.a1[0].a2 = 40;
+  a6.a2[0] = -41;
+  a6.a2[1] = 42;
+  a7.a0.a0 = -43.0;
+  a7.a1[0].a0 = 44.0;
+  a7.a1[0].a1 = -45;
+  a7.a1[0].a2 = 46;
+  a7.a2[0] = -47;
+  a7.a2[1] = 48;
+  a8.a0.a0 = -49.0;
+  a8.a1[0].a0 = 50.0;
+  a8.a1[0].a1 = -51;
+  a8.a1[0].a2 = 52;
+  a8.a2[0] = -53;
+  a8.a2[1] = 54;
+  a9.a0.a0 = -55.0;
+  a9.a1[0].a0 = 56.0;
+  a9.a1[0].a1 = -57;
+  a9.a1[0].a2 = 58;
+  a9.a2[0] = -59;
+  a9.a2[1] = 60;
+
+  final result = passStructStruct16BytesMixed3x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(30.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUint8Struct32BytesInlineArrayMultiDimensionalILeaf =
+    ffiTestFunctions.lookupFunction<
+            Uint32 Function(
+                Uint8,
+                Struct32BytesInlineArrayMultiDimensionalInt,
+                Uint8,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                Uint8,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                Uint8),
+            int Function(
+                int,
+                Struct32BytesInlineArrayMultiDimensionalInt,
+                int,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                int,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                int)>("PassUint8Struct32BytesInlineArrayMultiDimensionalI",
+        isLeaf: true);
+
+/// Test multi dimensional inline array struct as argument.
+void testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct32BytesInlineArrayMultiDimensionalInt>();
+  final Struct32BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
+  int a2;
+  final a3Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
+  final Struct8BytesInlineArrayMultiDimensionalInt a3 = a3Pointer.ref;
+  int a4;
+  final a5Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
+  final Struct8BytesInlineArrayMultiDimensionalInt a5 = a5Pointer.ref;
+  int a6;
+
+  a0 = 1;
+  a1.a0[0][0][0][0][0] = 2;
+  a1.a0[0][0][0][0][1] = 3;
+  a1.a0[0][0][0][1][0] = 4;
+  a1.a0[0][0][0][1][1] = 5;
+  a1.a0[0][0][1][0][0] = 6;
+  a1.a0[0][0][1][0][1] = 7;
+  a1.a0[0][0][1][1][0] = 8;
+  a1.a0[0][0][1][1][1] = 9;
+  a1.a0[0][1][0][0][0] = 10;
+  a1.a0[0][1][0][0][1] = 11;
+  a1.a0[0][1][0][1][0] = 12;
+  a1.a0[0][1][0][1][1] = 13;
+  a1.a0[0][1][1][0][0] = 14;
+  a1.a0[0][1][1][0][1] = 15;
+  a1.a0[0][1][1][1][0] = 16;
+  a1.a0[0][1][1][1][1] = 17;
+  a1.a0[1][0][0][0][0] = 18;
+  a1.a0[1][0][0][0][1] = 19;
+  a1.a0[1][0][0][1][0] = 20;
+  a1.a0[1][0][0][1][1] = 21;
+  a1.a0[1][0][1][0][0] = 22;
+  a1.a0[1][0][1][0][1] = 23;
+  a1.a0[1][0][1][1][0] = 24;
+  a1.a0[1][0][1][1][1] = 25;
+  a1.a0[1][1][0][0][0] = 26;
+  a1.a0[1][1][0][0][1] = 27;
+  a1.a0[1][1][0][1][0] = 28;
+  a1.a0[1][1][0][1][1] = 29;
+  a1.a0[1][1][1][0][0] = 30;
+  a1.a0[1][1][1][0][1] = 31;
+  a1.a0[1][1][1][1][0] = 32;
+  a1.a0[1][1][1][1][1] = 33;
+  a2 = 34;
+  a3.a0[0][0][0] = 35;
+  a3.a0[0][0][1] = 36;
+  a3.a0[0][1][0] = 37;
+  a3.a0[0][1][1] = 38;
+  a3.a0[1][0][0] = 39;
+  a3.a0[1][0][1] = 40;
+  a3.a0[1][1][0] = 41;
+  a3.a0[1][1][1] = 42;
+  a4 = 43;
+  a5.a0[0][0][0] = 44;
+  a5.a0[0][0][1] = 45;
+  a5.a0[0][1][0] = 46;
+  a5.a0[0][1][1] = 47;
+  a5.a0[1][0][0] = 48;
+  a5.a0[1][0][1] = 49;
+  a5.a0[1][1][0] = 50;
+  a5.a0[1][1][1] = 51;
+  a6 = 52;
+
+  final result = passUint8Struct32BytesInlineArrayMultiDimensionalILeaf(
+      a0, a1, a2, a3, a4, a5, a6);
+
+  print("result = $result");
+
+  Expect.equals(1378, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+}
+
+final passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf =
+    ffiTestFunctions.lookupFunction<
+            Uint32 Function(
+                Uint8, Struct4BytesInlineArrayMultiDimensionalInt, Uint8),
+            int Function(int, Struct4BytesInlineArrayMultiDimensionalInt, int)>(
+        "PassUint8Struct4BytesInlineArrayMultiDimensionalIn",
+        isLeaf: true);
+
+/// Test struct in multi dimensional inline array.
+void testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct4BytesInlineArrayMultiDimensionalInt>();
+  final Struct4BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
+  int a2;
+
+  a0 = 1;
+  a1.a0[0][0].a0 = 2;
+  a1.a0[0][1].a0 = -3;
+  a1.a0[1][0].a0 = 4;
+  a1.a0[1][1].a0 = -5;
+  a2 = 6;
+
+  final result =
+      passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(5, result);
+
+  calloc.free(a1Pointer);
+}
+
+final passStruct3BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt),
+    int Function(
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt)>("PassStruct3BytesPackedIntx10", isLeaf: true);
+
+/// Small struct with mis-aligned member.
+void testPassStruct3BytesPackedIntx10Leaf() {
+  final a0Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result =
+      passStruct3BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt),
+    int Function(
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt)>("PassStruct8BytesPackedIntx10", isLeaf: true);
+
+/// Struct with mis-aligned member.
+void testPassStruct8BytesPackedIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a1.a0 = 6;
+  a1.a1 = 7;
+  a1.a2 = 8;
+  a1.a3 = 9;
+  a1.a4 = 10;
+  a2.a0 = 11;
+  a2.a1 = 12;
+  a2.a2 = 13;
+  a2.a3 = 14;
+  a2.a4 = 15;
+  a3.a0 = 16;
+  a3.a1 = 17;
+  a3.a2 = 18;
+  a3.a3 = 19;
+  a3.a4 = 20;
+  a4.a0 = 21;
+  a4.a1 = 22;
+  a4.a2 = 23;
+  a4.a3 = 24;
+  a4.a4 = 25;
+  a5.a0 = 26;
+  a5.a1 = 27;
+  a5.a2 = 28;
+  a5.a3 = 29;
+  a5.a4 = 30;
+  a6.a0 = 31;
+  a6.a1 = 32;
+  a6.a2 = 33;
+  a6.a3 = 34;
+  a6.a4 = 35;
+  a7.a0 = 36;
+  a7.a1 = 37;
+  a7.a2 = 38;
+  a7.a3 = 39;
+  a7.a4 = 40;
+  a8.a0 = 41;
+  a8.a1 = 42;
+  a8.a2 = 43;
+  a8.a3 = 44;
+  a8.a4 = 45;
+  a9.a0 = 46;
+  a9.a1 = 47;
+  a9.a2 = 48;
+  a9.a3 = 49;
+  a9.a4 = 50;
+
+  final result =
+      passStruct8BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(1275, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesPackedMixedx10DoubleInt32x2Leaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Double,
+            Int32,
+            Int32),
+        double Function(
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            double,
+            int,
+            int)>("PassStruct9BytesPackedMixedx10DoubleInt32x2", isLeaf: true);
+
+/// Struct with mis-aligned member.
+/// Tests backfilling of CPU and FPU registers.
+void testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf() {
+  final a0Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a9 = a9Pointer.ref;
+  double a10;
+  int a11;
+  int a12;
+
+  a0.a0 = 1;
+  a0.a1 = 2.0;
+  a1.a0 = 3;
+  a1.a1 = 4.0;
+  a2.a0 = 5;
+  a2.a1 = 6.0;
+  a3.a0 = 7;
+  a3.a1 = 8.0;
+  a4.a0 = 9;
+  a4.a1 = 10.0;
+  a5.a0 = 11;
+  a5.a1 = 12.0;
+  a6.a0 = 13;
+  a6.a1 = 14.0;
+  a7.a0 = 15;
+  a7.a1 = 16.0;
+  a8.a0 = 17;
+  a8.a1 = 18.0;
+  a9.a0 = 19;
+  a9.a1 = 20.0;
+  a10 = -21.0;
+  a11 = 22;
+  a12 = -23;
+
+  final result = passStruct9BytesPackedMixedx10DoubleInt32x2Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
+
+  print("result = $result");
+
+  Expect.approxEquals(188.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct5BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Double Function(Struct5BytesPackedMixed),
+    double Function(
+        Struct5BytesPackedMixed)>("PassStruct5BytesPackedMixed", isLeaf: true);
+
+/// This packed struct happens to have only aligned members.
+void testPassStruct5BytesPackedMixedLeaf() {
+  final a0Pointer = calloc<Struct5BytesPackedMixed>();
+  final Struct5BytesPackedMixed a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+
+  final result = passStruct5BytesPackedMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(1.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedAlignmentStruct5BytesPackedMixedLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(StructNestedAlignmentStruct5BytesPackedMixed),
+            double Function(StructNestedAlignmentStruct5BytesPackedMixed)>(
+        "PassStructNestedAlignmentStruct5BytesPackedMixed",
+        isLeaf: true);
+
+/// Check alignment of packed struct in non-packed struct.
+void testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf() {
+  final a0Pointer = calloc<StructNestedAlignmentStruct5BytesPackedMixed>();
+  final StructNestedAlignmentStruct5BytesPackedMixed a0 = a0Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1.a0 = 2.0;
+  a0.a1.a1 = 3;
+
+  final result = passStructNestedAlignmentStruct5BytesPackedMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(6.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct6BytesInlineArrayIntLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct6BytesInlineArrayInt),
+        double Function(Struct6BytesInlineArrayInt)>(
+    "PassStruct6BytesInlineArrayInt",
+    isLeaf: true);
+
+/// Check alignment of packed struct array in non-packed struct.
+void testPassStruct6BytesInlineArrayIntLeaf() {
+  final a0Pointer = calloc<Struct6BytesInlineArrayInt>();
+  final Struct6BytesInlineArrayInt a0 = a0Pointer.ref;
+
+  a0.a0[0].a0 = -1;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3;
+  a0.a0[1].a1 = 4;
+
+  final result = passStruct6BytesInlineArrayIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(2.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct15BytesInlineArrayMixedLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct15BytesInlineArrayMixed),
+        double Function(Struct15BytesInlineArrayMixed)>(
+    "PassStruct15BytesInlineArrayMixed",
+    isLeaf: true);
+
+/// Check alignment of packed struct array in non-packed struct.
+void testPassStruct15BytesInlineArrayMixedLeaf() {
+  final a0Pointer = calloc<Struct15BytesInlineArrayMixed>();
+  final Struct15BytesInlineArrayMixed a0 = a0Pointer.ref;
+
+  a0.a0[0].a0 = -1.0;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3.0;
+  a0.a0[1].a1 = 4;
+  a0.a0[2].a0 = -5.0;
+  a0.a0[2].a1 = 6;
+
+  final result = passStruct15BytesInlineArrayMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passUnion4BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed),
+    double Function(
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed)>("PassUnion4BytesMixedx10", isLeaf: true);
+
+/// Check placement of mixed integer/float union.
+void testPassUnion4BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a1.a0 = 2;
+  a2.a0 = 3;
+  a3.a0 = 4;
+  a4.a0 = 5;
+  a5.a0 = 6;
+  a6.a0 = 7;
+  a7.a0 = 8;
+  a8.a0 = 9;
+  a9.a0 = 10;
+
+  final result =
+      passUnion4BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(55.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat),
+    double Function(
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat)>("PassUnion8BytesNestedFloatx10", isLeaf: true);
+
+/// Check placement of mixed floats union.
+void testPassUnion8BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a1.a0 = 2.0;
+  a2.a0 = -3.0;
+  a3.a0 = 4.0;
+  a4.a0 = -5.0;
+  a5.a0 = 6.0;
+  a6.a0 = -7.0;
+  a7.a0 = 8.0;
+  a8.a0 = -9.0;
+  a9.a0 = 10.0;
+
+  final result =
+      passUnion8BytesNestedFloatx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(5.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion9BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt),
+    double Function(
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt)>("PassUnion9BytesNestedIntx10", isLeaf: true);
+
+/// Mixed-size union argument.
+void testPassUnion9BytesNestedIntx10Leaf() {
+  final a0Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a1.a0.a0 = 4;
+  a1.a0.a1 = -5;
+  a1.a0.a2 = 6;
+  a2.a0.a0 = -7;
+  a2.a0.a1 = 8;
+  a2.a0.a2 = -9;
+  a3.a0.a0 = 10;
+  a3.a0.a1 = -11;
+  a3.a0.a2 = 12;
+  a4.a0.a0 = -13;
+  a4.a0.a1 = 14;
+  a4.a0.a2 = -15;
+  a5.a0.a0 = 16;
+  a5.a0.a1 = -17;
+  a5.a0.a2 = 18;
+  a6.a0.a0 = -19;
+  a6.a0.a1 = 20;
+  a6.a0.a2 = -21;
+  a7.a0.a0 = 22;
+  a7.a0.a1 = -23;
+  a7.a0.a2 = 24;
+  a8.a0.a0 = -25;
+  a8.a0.a1 = 26;
+  a8.a0.a2 = -27;
+  a9.a0.a0 = 28;
+  a9.a0.a1 = -29;
+  a9.a0.a2 = 30;
+
+  final result =
+      passUnion9BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion16BytesNestedInlineArrayFloatx10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat),
+            double Function(
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat)>(
+        "PassUnion16BytesNestedInlineArrayFloatx10",
+        isLeaf: true);
+
+/// Union with homogenous floats.
+void testPassUnion16BytesNestedInlineArrayFloatx10Leaf() {
+  final a0Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a9 = a9Pointer.ref;
+
+  a0.a0[0] = -1.0;
+  a0.a0[1] = 2.0;
+  a0.a0[2] = -3.0;
+  a0.a0[3] = 4.0;
+  a1.a0[0] = -5.0;
+  a1.a0[1] = 6.0;
+  a1.a0[2] = -7.0;
+  a1.a0[3] = 8.0;
+  a2.a0[0] = -9.0;
+  a2.a0[1] = 10.0;
+  a2.a0[2] = -11.0;
+  a2.a0[3] = 12.0;
+  a3.a0[0] = -13.0;
+  a3.a0[1] = 14.0;
+  a3.a0[2] = -15.0;
+  a3.a0[3] = 16.0;
+  a4.a0[0] = -17.0;
+  a4.a0[1] = 18.0;
+  a4.a0[2] = -19.0;
+  a4.a0[3] = 20.0;
+  a5.a0[0] = -21.0;
+  a5.a0[1] = 22.0;
+  a5.a0[2] = -23.0;
+  a5.a0[3] = 24.0;
+  a6.a0[0] = -25.0;
+  a6.a0[1] = 26.0;
+  a6.a0[2] = -27.0;
+  a6.a0[3] = 28.0;
+  a7.a0[0] = -29.0;
+  a7.a0[1] = 30.0;
+  a7.a0[2] = -31.0;
+  a7.a0[3] = 32.0;
+  a8.a0[0] = -33.0;
+  a8.a0[1] = 34.0;
+  a8.a0[2] = -35.0;
+  a8.a0[3] = 36.0;
+  a9.a0[0] = -37.0;
+  a9.a0[1] = 38.0;
+  a9.a0[2] = -39.0;
+  a9.a0[3] = 40.0;
+
+  final result = passUnion16BytesNestedInlineArrayFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(20.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion16BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Double Function(
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat),
+        double Function(
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat)>("PassUnion16BytesNestedFloatx10",
+    isLeaf: true);
+
+/// Union with homogenous floats.
+void testPassUnion16BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a0.a1 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a0.a1 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a0.a1 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a0.a1 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a0.a1 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a0.a1 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a0.a1 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a0.a1 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a0.a1 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a0.a1 = 20.0;
+
+  final result = passUnion16BytesNestedFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUint8Boolx9Struct10BytesHomogeneousBoolBoolLeaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Int32 Function(Uint8, Bool, Bool, Bool, Bool, Bool, Bool, Bool,
+                    Bool, Bool, Struct10BytesHomogeneousBool, Bool),
+                int Function(
+                    int,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    Struct10BytesHomogeneousBool,
+                    bool)>("PassUint8Boolx9Struct10BytesHomogeneousBoolBool",
+            isLeaf: true);
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+void testPassUint8Boolx9Struct10BytesHomogeneousBoolBoolLeaf() {
+  int a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  final a10Pointer = calloc<Struct10BytesHomogeneousBool>();
+  final Struct10BytesHomogeneousBool a10 = a10Pointer.ref;
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0 = true;
+  a10.a1 = false;
+  a10.a2 = true;
+  a10.a3 = false;
+  a10.a4 = true;
+  a10.a5 = false;
+  a10.a6 = true;
+  a10.a7 = false;
+  a10.a8 = true;
+  a10.a9 = false;
+  a11 = true;
+
+  final result = passUint8Boolx9Struct10BytesHomogeneousBoolBoolLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  print("result = $result");
+
+  Expect.equals(11, result);
+
+  calloc.free(a10Pointer);
+}
+
+final passUint8Boolx9Struct10BytesInlineArrayBoolBoolLeaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Int32 Function(Uint8, Bool, Bool, Bool, Bool, Bool, Bool, Bool,
+                    Bool, Bool, Struct10BytesInlineArrayBool, Bool),
+                int Function(
+                    int,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    bool,
+                    Struct10BytesInlineArrayBool,
+                    bool)>("PassUint8Boolx9Struct10BytesInlineArrayBoolBool",
+            isLeaf: true);
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+void testPassUint8Boolx9Struct10BytesInlineArrayBoolBoolLeaf() {
+  int a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  final a10Pointer = calloc<Struct10BytesInlineArrayBool>();
+  final Struct10BytesInlineArrayBool a10 = a10Pointer.ref;
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0[0] = true;
+  a10.a0[1] = false;
+  a10.a0[2] = true;
+  a10.a0[3] = false;
+  a10.a0[4] = true;
+  a10.a0[5] = false;
+  a10.a0[6] = true;
+  a10.a0[7] = false;
+  a10.a0[8] = true;
+  a10.a0[9] = false;
+  a11 = true;
+
+  final result = passUint8Boolx9Struct10BytesInlineArrayBoolBoolLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  print("result = $result");
+
+  Expect.equals(11, result);
+
+  calloc.free(a10Pointer);
+}
+
+final passUint8Struct1ByteBoolLeaf = ffiTestFunctions.lookupFunction<
+    Bool Function(Uint8, Struct1ByteBool),
+    bool Function(
+        int, Struct1ByteBool)>("PassUint8Struct1ByteBool", isLeaf: true);
+
+/// Returning a bool.
+void testPassUint8Struct1ByteBoolLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct1ByteBool>();
+  final Struct1ByteBool a1 = a1Pointer.ref;
+
+  a0 = 1;
+  a1.a0 = false;
+
+  final result = passUint8Struct1ByteBoolLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(1 % 2 != 0, result);
+
+  calloc.free(a1Pointer);
+}
+
+final returnStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct1ByteInt Function(Int8),
+    Struct1ByteInt Function(int)>("ReturnStruct1ByteInt", isLeaf: true);
+
+/// Smallest struct with data.
+void testReturnStruct1ByteIntLeaf() {
+  int a0;
+
+  a0 = -1;
+
+  final result = returnStruct1ByteIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+}
+
+final returnStruct3BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8),
+    Struct3BytesHomogeneousUint8 Function(
+        int, int, int)>("ReturnStruct3BytesHomogeneousUint8", isLeaf: true);
+
+/// Smaller than word size return value on all architectures.
+void testReturnStruct3BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+
+  final result = returnStruct3BytesHomogeneousUint8Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct3BytesInt2ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesInt2ByteAligned Function(Int16, Int8),
+    Struct3BytesInt2ByteAligned Function(
+        int, int)>("ReturnStruct3BytesInt2ByteAligned", isLeaf: true);
+
+/// Smaller than word size return value on all architectures.
+/// With alignment rules taken into account size is 4 bytes.
+void testReturnStruct3BytesInt2ByteAlignedLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct3BytesInt2ByteAlignedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct4BytesHomogeneousInt16Leaf = ffiTestFunctions.lookupFunction<
+    Struct4BytesHomogeneousInt16 Function(Int16, Int16),
+    Struct4BytesHomogeneousInt16 Function(
+        int, int)>("ReturnStruct4BytesHomogeneousInt16", isLeaf: true);
+
+/// Word size return value on 32 bit architectures..
+void testReturnStruct4BytesHomogeneousInt16Leaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct4BytesHomogeneousInt16Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct7BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct7BytesHomogeneousUint8 Function(
+        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
+    Struct7BytesHomogeneousUint8 Function(int, int, int, int, int, int,
+        int)>("ReturnStruct7BytesHomogeneousUint8", isLeaf: true);
+
+/// Non-wordsize return value.
+void testReturnStruct7BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+
+  final result =
+      returnStruct7BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5, a6);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+}
+
+final returnStruct7BytesInt4ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
+    Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8),
+    Struct7BytesInt4ByteAligned Function(
+        int, int, int)>("ReturnStruct7BytesInt4ByteAligned", isLeaf: true);
+
+/// Non-wordsize return value.
+/// With alignment rules taken into account size is 8 bytes.
+void testReturnStruct7BytesInt4ByteAlignedLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct7BytesInt4ByteAlignedLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesInt Function(Int16, Int16, Int32),
+    Struct8BytesInt Function(
+        int, int, int)>("ReturnStruct8BytesInt", isLeaf: true);
+
+/// Return value in integer registers on many architectures.
+void testReturnStruct8BytesIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct8BytesIntLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesHomogeneousFloat Function(Float, Float),
+    Struct8BytesHomogeneousFloat Function(
+        double, double)>("ReturnStruct8BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FP registers on many architectures.
+void testReturnStruct8BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+
+  a0 = -1.0;
+  a1 = 2.0;
+
+  final result = returnStruct8BytesHomogeneousFloatLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+}
+
+final returnStruct8BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesMixed Function(Float, Int16, Int16),
+    Struct8BytesMixed Function(
+        double, int, int)>("ReturnStruct8BytesMixed", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+void testReturnStruct8BytesMixedLeaf() {
+  double a0;
+  int a1;
+  int a2;
+
+  a0 = -1.0;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct8BytesMixedLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct9BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct9BytesHomogeneousUint8 Function(
+        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
+    Struct9BytesHomogeneousUint8 Function(int, int, int, int, int, int, int,
+        int, int)>("ReturnStruct9BytesHomogeneousUint8", isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is the right size and that
+/// dart:ffi trampolines do not write outside this size.
+void testReturnStruct9BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+
+  final result = returnStruct9BytesHomogeneousUint8Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+}
+
+final returnStruct9BytesInt4Or8ByteAlignedLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct9BytesInt4Or8ByteAligned Function(Int64, Int8),
+        Struct9BytesInt4Or8ByteAligned Function(
+            int, int)>("ReturnStruct9BytesInt4Or8ByteAligned", isLeaf: true);
+
+/// Return value in two integer registers on x64.
+/// With alignment rules taken into account size is 12 or 16 bytes.
+void testReturnStruct9BytesInt4Or8ByteAlignedLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct9BytesInt4Or8ByteAlignedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct12BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct12BytesHomogeneousFloat Function(Float, Float, Float),
+    Struct12BytesHomogeneousFloat Function(double, double,
+        double)>("ReturnStruct12BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FPU registers, but does not use all registers on arm hardfp
+/// and arm64.
+void testReturnStruct12BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+
+  final result = returnStruct12BytesHomogeneousFloatLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+}
+
+final returnStruct16BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float),
+    Struct16BytesHomogeneousFloat Function(double, double, double,
+        double)>("ReturnStruct16BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FPU registers on arm hardfp and arm64.
+void testReturnStruct16BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+
+  final result = returnStruct16BytesHomogeneousFloatLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+}
+
+final returnStruct16BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesMixed Function(Double, Int64),
+    Struct16BytesMixed Function(
+        double, int)>("ReturnStruct16BytesMixed", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+void testReturnStruct16BytesMixedLeaf() {
+  double a0;
+  int a1;
+
+  a0 = -1.0;
+  a1 = 2;
+
+  final result = returnStruct16BytesMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct16BytesMixed2Leaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesMixed2 Function(Float, Float, Float, Int32),
+    Struct16BytesMixed2 Function(double, double, double,
+        int)>("ReturnStruct16BytesMixed2", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+/// The integer register contains half float half int.
+void testReturnStruct16BytesMixed2Leaf() {
+  double a0;
+  double a1;
+  double a2;
+  int a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4;
+
+  final result = returnStruct16BytesMixed2Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+}
+
+final returnStruct17BytesIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct17BytesInt Function(Int64, Int64, Int8),
+    Struct17BytesInt Function(
+        int, int, int)>("ReturnStruct17BytesInt", isLeaf: true);
+
+/// Rerturn value returned in preallocated space passed by pointer on most ABIs.
+/// Is non word size on purpose, to test that structs are rounded up to word size
+/// on all ABIs.
+void testReturnStruct17BytesIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct17BytesIntLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct19BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct19BytesHomogeneousUint8 Function(
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8),
+    Struct19BytesHomogeneousUint8 Function(
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int)>("ReturnStruct19BytesHomogeneousUint8", isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is the right size and that
+/// dart:ffi trampolines do not write outside this size.
+void testReturnStruct19BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+  int a9;
+  int a10;
+  int a11;
+  int a12;
+  int a13;
+  int a14;
+  int a15;
+  int a16;
+  int a17;
+  int a18;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+  a9 = 10;
+  a10 = 11;
+  a11 = 12;
+  a12 = 13;
+  a13 = 14;
+  a14 = 15;
+  a15 = 16;
+  a16 = 17;
+  a17 = 18;
+  a18 = 19;
+
+  final result = returnStruct19BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5,
+      a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+  Expect.equals(a9, result.a9);
+  Expect.equals(a10, result.a10);
+  Expect.equals(a11, result.a11);
+  Expect.equals(a12, result.a12);
+  Expect.equals(a13, result.a13);
+  Expect.equals(a14, result.a14);
+  Expect.equals(a15, result.a15);
+  Expect.equals(a16, result.a16);
+  Expect.equals(a17, result.a17);
+  Expect.equals(a18, result.a18);
+}
+
+final returnStruct20BytesHomogeneousInt32Leaf = ffiTestFunctions.lookupFunction<
+    Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32, Int32),
+    Struct20BytesHomogeneousInt32 Function(int, int, int, int,
+        int)>("ReturnStruct20BytesHomogeneousInt32", isLeaf: true);
+
+/// Return value too big to go in cpu registers on arm64.
+void testReturnStruct20BytesHomogeneousInt32Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+
+  final result = returnStruct20BytesHomogeneousInt32Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+}
+
+final returnStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float, Float),
+    Struct20BytesHomogeneousFloat Function(double, double, double, double,
+        double)>("ReturnStruct20BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
+void testReturnStruct20BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+
+  final result = returnStruct20BytesHomogeneousFloatLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+  Expect.approxEquals(a4, result.a4);
+}
+
+final returnStruct32BytesHomogeneousDoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct32BytesHomogeneousDouble Function(Double, Double, Double, Double),
+        Struct32BytesHomogeneousDouble Function(double, double, double,
+            double)>("ReturnStruct32BytesHomogeneousDouble", isLeaf: true);
+
+/// Return value in FPU registers on arm64.
+void testReturnStruct32BytesHomogeneousDoubleLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+
+  final result = returnStruct32BytesHomogeneousDoubleLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+}
+
+final returnStruct40BytesHomogeneousDoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct40BytesHomogeneousDouble Function(
+            Double, Double, Double, Double, Double),
+        Struct40BytesHomogeneousDouble Function(double, double, double, double,
+            double)>("ReturnStruct40BytesHomogeneousDouble", isLeaf: true);
+
+/// Return value too big to go in FPU registers on arm64.
+void testReturnStruct40BytesHomogeneousDoubleLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+
+  final result = returnStruct40BytesHomogeneousDoubleLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+  Expect.approxEquals(a4, result.a4);
+}
+
+final returnStruct1024BytesHomogeneousUint64Leaf =
+    ffiTestFunctions.lookupFunction<
+        Struct1024BytesHomogeneousUint64 Function(
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64),
+        Struct1024BytesHomogeneousUint64 Function(
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int)>("ReturnStruct1024BytesHomogeneousUint64", isLeaf: true);
+
+/// Test 1kb struct.
+void testReturnStruct1024BytesHomogeneousUint64Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+  int a9;
+  int a10;
+  int a11;
+  int a12;
+  int a13;
+  int a14;
+  int a15;
+  int a16;
+  int a17;
+  int a18;
+  int a19;
+  int a20;
+  int a21;
+  int a22;
+  int a23;
+  int a24;
+  int a25;
+  int a26;
+  int a27;
+  int a28;
+  int a29;
+  int a30;
+  int a31;
+  int a32;
+  int a33;
+  int a34;
+  int a35;
+  int a36;
+  int a37;
+  int a38;
+  int a39;
+  int a40;
+  int a41;
+  int a42;
+  int a43;
+  int a44;
+  int a45;
+  int a46;
+  int a47;
+  int a48;
+  int a49;
+  int a50;
+  int a51;
+  int a52;
+  int a53;
+  int a54;
+  int a55;
+  int a56;
+  int a57;
+  int a58;
+  int a59;
+  int a60;
+  int a61;
+  int a62;
+  int a63;
+  int a64;
+  int a65;
+  int a66;
+  int a67;
+  int a68;
+  int a69;
+  int a70;
+  int a71;
+  int a72;
+  int a73;
+  int a74;
+  int a75;
+  int a76;
+  int a77;
+  int a78;
+  int a79;
+  int a80;
+  int a81;
+  int a82;
+  int a83;
+  int a84;
+  int a85;
+  int a86;
+  int a87;
+  int a88;
+  int a89;
+  int a90;
+  int a91;
+  int a92;
+  int a93;
+  int a94;
+  int a95;
+  int a96;
+  int a97;
+  int a98;
+  int a99;
+  int a100;
+  int a101;
+  int a102;
+  int a103;
+  int a104;
+  int a105;
+  int a106;
+  int a107;
+  int a108;
+  int a109;
+  int a110;
+  int a111;
+  int a112;
+  int a113;
+  int a114;
+  int a115;
+  int a116;
+  int a117;
+  int a118;
+  int a119;
+  int a120;
+  int a121;
+  int a122;
+  int a123;
+  int a124;
+  int a125;
+  int a126;
+  int a127;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+  a9 = 10;
+  a10 = 11;
+  a11 = 12;
+  a12 = 13;
+  a13 = 14;
+  a14 = 15;
+  a15 = 16;
+  a16 = 17;
+  a17 = 18;
+  a18 = 19;
+  a19 = 20;
+  a20 = 21;
+  a21 = 22;
+  a22 = 23;
+  a23 = 24;
+  a24 = 25;
+  a25 = 26;
+  a26 = 27;
+  a27 = 28;
+  a28 = 29;
+  a29 = 30;
+  a30 = 31;
+  a31 = 32;
+  a32 = 33;
+  a33 = 34;
+  a34 = 35;
+  a35 = 36;
+  a36 = 37;
+  a37 = 38;
+  a38 = 39;
+  a39 = 40;
+  a40 = 41;
+  a41 = 42;
+  a42 = 43;
+  a43 = 44;
+  a44 = 45;
+  a45 = 46;
+  a46 = 47;
+  a47 = 48;
+  a48 = 49;
+  a49 = 50;
+  a50 = 51;
+  a51 = 52;
+  a52 = 53;
+  a53 = 54;
+  a54 = 55;
+  a55 = 56;
+  a56 = 57;
+  a57 = 58;
+  a58 = 59;
+  a59 = 60;
+  a60 = 61;
+  a61 = 62;
+  a62 = 63;
+  a63 = 64;
+  a64 = 65;
+  a65 = 66;
+  a66 = 67;
+  a67 = 68;
+  a68 = 69;
+  a69 = 70;
+  a70 = 71;
+  a71 = 72;
+  a72 = 73;
+  a73 = 74;
+  a74 = 75;
+  a75 = 76;
+  a76 = 77;
+  a77 = 78;
+  a78 = 79;
+  a79 = 80;
+  a80 = 81;
+  a81 = 82;
+  a82 = 83;
+  a83 = 84;
+  a84 = 85;
+  a85 = 86;
+  a86 = 87;
+  a87 = 88;
+  a88 = 89;
+  a89 = 90;
+  a90 = 91;
+  a91 = 92;
+  a92 = 93;
+  a93 = 94;
+  a94 = 95;
+  a95 = 96;
+  a96 = 97;
+  a97 = 98;
+  a98 = 99;
+  a99 = 100;
+  a100 = 101;
+  a101 = 102;
+  a102 = 103;
+  a103 = 104;
+  a104 = 105;
+  a105 = 106;
+  a106 = 107;
+  a107 = 108;
+  a108 = 109;
+  a109 = 110;
+  a110 = 111;
+  a111 = 112;
+  a112 = 113;
+  a113 = 114;
+  a114 = 115;
+  a115 = 116;
+  a116 = 117;
+  a117 = 118;
+  a118 = 119;
+  a119 = 120;
+  a120 = 121;
+  a121 = 122;
+  a122 = 123;
+  a123 = 124;
+  a124 = 125;
+  a125 = 126;
+  a126 = 127;
+  a127 = 128;
+
+  final result = returnStruct1024BytesHomogeneousUint64Leaf(
+      a0,
+      a1,
+      a2,
+      a3,
+      a4,
+      a5,
+      a6,
+      a7,
+      a8,
+      a9,
+      a10,
+      a11,
+      a12,
+      a13,
+      a14,
+      a15,
+      a16,
+      a17,
+      a18,
+      a19,
+      a20,
+      a21,
+      a22,
+      a23,
+      a24,
+      a25,
+      a26,
+      a27,
+      a28,
+      a29,
+      a30,
+      a31,
+      a32,
+      a33,
+      a34,
+      a35,
+      a36,
+      a37,
+      a38,
+      a39,
+      a40,
+      a41,
+      a42,
+      a43,
+      a44,
+      a45,
+      a46,
+      a47,
+      a48,
+      a49,
+      a50,
+      a51,
+      a52,
+      a53,
+      a54,
+      a55,
+      a56,
+      a57,
+      a58,
+      a59,
+      a60,
+      a61,
+      a62,
+      a63,
+      a64,
+      a65,
+      a66,
+      a67,
+      a68,
+      a69,
+      a70,
+      a71,
+      a72,
+      a73,
+      a74,
+      a75,
+      a76,
+      a77,
+      a78,
+      a79,
+      a80,
+      a81,
+      a82,
+      a83,
+      a84,
+      a85,
+      a86,
+      a87,
+      a88,
+      a89,
+      a90,
+      a91,
+      a92,
+      a93,
+      a94,
+      a95,
+      a96,
+      a97,
+      a98,
+      a99,
+      a100,
+      a101,
+      a102,
+      a103,
+      a104,
+      a105,
+      a106,
+      a107,
+      a108,
+      a109,
+      a110,
+      a111,
+      a112,
+      a113,
+      a114,
+      a115,
+      a116,
+      a117,
+      a118,
+      a119,
+      a120,
+      a121,
+      a122,
+      a123,
+      a124,
+      a125,
+      a126,
+      a127);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+  Expect.equals(a9, result.a9);
+  Expect.equals(a10, result.a10);
+  Expect.equals(a11, result.a11);
+  Expect.equals(a12, result.a12);
+  Expect.equals(a13, result.a13);
+  Expect.equals(a14, result.a14);
+  Expect.equals(a15, result.a15);
+  Expect.equals(a16, result.a16);
+  Expect.equals(a17, result.a17);
+  Expect.equals(a18, result.a18);
+  Expect.equals(a19, result.a19);
+  Expect.equals(a20, result.a20);
+  Expect.equals(a21, result.a21);
+  Expect.equals(a22, result.a22);
+  Expect.equals(a23, result.a23);
+  Expect.equals(a24, result.a24);
+  Expect.equals(a25, result.a25);
+  Expect.equals(a26, result.a26);
+  Expect.equals(a27, result.a27);
+  Expect.equals(a28, result.a28);
+  Expect.equals(a29, result.a29);
+  Expect.equals(a30, result.a30);
+  Expect.equals(a31, result.a31);
+  Expect.equals(a32, result.a32);
+  Expect.equals(a33, result.a33);
+  Expect.equals(a34, result.a34);
+  Expect.equals(a35, result.a35);
+  Expect.equals(a36, result.a36);
+  Expect.equals(a37, result.a37);
+  Expect.equals(a38, result.a38);
+  Expect.equals(a39, result.a39);
+  Expect.equals(a40, result.a40);
+  Expect.equals(a41, result.a41);
+  Expect.equals(a42, result.a42);
+  Expect.equals(a43, result.a43);
+  Expect.equals(a44, result.a44);
+  Expect.equals(a45, result.a45);
+  Expect.equals(a46, result.a46);
+  Expect.equals(a47, result.a47);
+  Expect.equals(a48, result.a48);
+  Expect.equals(a49, result.a49);
+  Expect.equals(a50, result.a50);
+  Expect.equals(a51, result.a51);
+  Expect.equals(a52, result.a52);
+  Expect.equals(a53, result.a53);
+  Expect.equals(a54, result.a54);
+  Expect.equals(a55, result.a55);
+  Expect.equals(a56, result.a56);
+  Expect.equals(a57, result.a57);
+  Expect.equals(a58, result.a58);
+  Expect.equals(a59, result.a59);
+  Expect.equals(a60, result.a60);
+  Expect.equals(a61, result.a61);
+  Expect.equals(a62, result.a62);
+  Expect.equals(a63, result.a63);
+  Expect.equals(a64, result.a64);
+  Expect.equals(a65, result.a65);
+  Expect.equals(a66, result.a66);
+  Expect.equals(a67, result.a67);
+  Expect.equals(a68, result.a68);
+  Expect.equals(a69, result.a69);
+  Expect.equals(a70, result.a70);
+  Expect.equals(a71, result.a71);
+  Expect.equals(a72, result.a72);
+  Expect.equals(a73, result.a73);
+  Expect.equals(a74, result.a74);
+  Expect.equals(a75, result.a75);
+  Expect.equals(a76, result.a76);
+  Expect.equals(a77, result.a77);
+  Expect.equals(a78, result.a78);
+  Expect.equals(a79, result.a79);
+  Expect.equals(a80, result.a80);
+  Expect.equals(a81, result.a81);
+  Expect.equals(a82, result.a82);
+  Expect.equals(a83, result.a83);
+  Expect.equals(a84, result.a84);
+  Expect.equals(a85, result.a85);
+  Expect.equals(a86, result.a86);
+  Expect.equals(a87, result.a87);
+  Expect.equals(a88, result.a88);
+  Expect.equals(a89, result.a89);
+  Expect.equals(a90, result.a90);
+  Expect.equals(a91, result.a91);
+  Expect.equals(a92, result.a92);
+  Expect.equals(a93, result.a93);
+  Expect.equals(a94, result.a94);
+  Expect.equals(a95, result.a95);
+  Expect.equals(a96, result.a96);
+  Expect.equals(a97, result.a97);
+  Expect.equals(a98, result.a98);
+  Expect.equals(a99, result.a99);
+  Expect.equals(a100, result.a100);
+  Expect.equals(a101, result.a101);
+  Expect.equals(a102, result.a102);
+  Expect.equals(a103, result.a103);
+  Expect.equals(a104, result.a104);
+  Expect.equals(a105, result.a105);
+  Expect.equals(a106, result.a106);
+  Expect.equals(a107, result.a107);
+  Expect.equals(a108, result.a108);
+  Expect.equals(a109, result.a109);
+  Expect.equals(a110, result.a110);
+  Expect.equals(a111, result.a111);
+  Expect.equals(a112, result.a112);
+  Expect.equals(a113, result.a113);
+  Expect.equals(a114, result.a114);
+  Expect.equals(a115, result.a115);
+  Expect.equals(a116, result.a116);
+  Expect.equals(a117, result.a117);
+  Expect.equals(a118, result.a118);
+  Expect.equals(a119, result.a119);
+  Expect.equals(a120, result.a120);
+  Expect.equals(a121, result.a121);
+  Expect.equals(a122, result.a122);
+  Expect.equals(a123, result.a123);
+  Expect.equals(a124, result.a124);
+  Expect.equals(a125, result.a125);
+  Expect.equals(a126, result.a126);
+  Expect.equals(a127, result.a127);
+}
+
+final returnStruct3BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesPackedInt Function(Int8, Int16),
+    Struct3BytesPackedInt Function(
+        int, int)>("ReturnStruct3BytesPackedInt", isLeaf: true);
+
+/// Small struct with mis-aligned member.
+void testReturnStruct3BytesPackedIntLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct3BytesPackedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct8BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8),
+    Struct8BytesPackedInt Function(
+        int, int, int, int, int)>("ReturnStruct8BytesPackedInt", isLeaf: true);
+
+/// Struct with mis-aligned member.
+void testReturnStruct8BytesPackedIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+
+  final result = returnStruct8BytesPackedIntLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+}
+
+final returnStruct9BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct9BytesPackedMixed Function(Uint8, Double),
+    Struct9BytesPackedMixed Function(
+        int, double)>("ReturnStruct9BytesPackedMixed", isLeaf: true);
+
+/// Struct with mis-aligned member.
+/// Tests backfilling of CPU and FPU registers.
+void testReturnStruct9BytesPackedMixedLeaf() {
+  int a0;
+  double a1;
+
+  a0 = 1;
+  a1 = 2.0;
+
+  final result = returnStruct9BytesPackedMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+}
+
+final returnUnion4BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Union4BytesMixed Function(Uint32),
+    Union4BytesMixed Function(int)>("ReturnUnion4BytesMixed", isLeaf: true);
+
+/// Returning a mixed integer/float union.
+void testReturnUnion4BytesMixedLeaf() {
+  int a0;
+
+  a0 = 1;
+
+  final result = returnUnion4BytesMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+}
+
+final returnUnion8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+    Union8BytesNestedFloat Function(Double),
+    Union8BytesNestedFloat Function(
+        double)>("ReturnUnion8BytesNestedFloat", isLeaf: true);
+
+/// Returning a floating point only union.
+void testReturnUnion8BytesNestedFloatLeaf() {
+  double a0;
+
+  a0 = -1.0;
+
+  final result = returnUnion8BytesNestedFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+}
+
+final returnUnion9BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Union9BytesNestedInt Function(Struct8BytesInt),
+    Union9BytesNestedInt Function(
+        Struct8BytesInt)>("ReturnUnion9BytesNestedInt", isLeaf: true);
+
+/// Returning a mixed-size union.
+void testReturnUnion9BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = returnUnion9BytesNestedIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnUnion16BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat),
+        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>(
+    "ReturnUnion16BytesNestedFloat",
+    isLeaf: true);
+
+/// Returning union with homogenous floats.
+void testReturnUnion16BytesNestedFloatLeaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+
+  final result = returnUnion16BytesNestedFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a0.a1, result.a0.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct1ByteInt Function(Struct1ByteInt),
+    Struct1ByteInt Function(
+        Struct1ByteInt)>("ReturnStructArgumentStruct1ByteInt", isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed in int registers in most ABIs.
+void testReturnStructArgumentStruct1ByteIntLeaf() {
+  final a0Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+
+  final result = returnStructArgumentStruct1ByteIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentInt32x8Struct1ByteIntLeaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Struct1ByteInt Function(Int32, Int32, Int32, Int32, Int32, Int32,
+                    Int32, Int32, Struct1ByteInt),
+                Struct1ByteInt Function(
+                    int, int, int, int, int, int, int, int, Struct1ByteInt)>(
+            "ReturnStructArgumentInt32x8Struct1ByteInt",
+            isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed on stack on all ABIs.
+void testReturnStructArgumentInt32x8Struct1ByteIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  final a8Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a8 = a8Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8.a0 = -9;
+
+  final result = returnStructArgumentInt32x8Struct1ByteIntLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a8.a0, result.a0);
+
+  calloc.free(a8Pointer);
+}
+
+final returnStructArgumentStruct8BytesHomogeneousFloatLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct8BytesHomogeneousFloat Function(Struct8BytesHomogeneousFloat),
+            Struct8BytesHomogeneousFloat Function(
+                Struct8BytesHomogeneousFloat)>(
+        "ReturnStructArgumentStruct8BytesHomogeneousFloat",
+        isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed in float registers in most ABIs.
+void testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+
+  final result = returnStructArgumentStruct8BytesHomogeneousFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0);
+  Expect.approxEquals(a0.a1, result.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStruct20BytesHomogeneousInt32Leaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Struct20BytesHomogeneousInt32 Function(
+                    Struct20BytesHomogeneousInt32),
+                Struct20BytesHomogeneousInt32 Function(
+                    Struct20BytesHomogeneousInt32)>(
+            "ReturnStructArgumentStruct20BytesHomogeneousInt32",
+            isLeaf: true);
+
+/// On arm64, both argument and return value are passed in by pointer.
+void testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a0.a3 = 4;
+  a0.a4 = -5;
+
+  final result = returnStructArgumentStruct20BytesHomogeneousInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0);
+  Expect.equals(a0.a1, result.a1);
+  Expect.equals(a0.a2, result.a2);
+  Expect.equals(a0.a3, result.a3);
+  Expect.equals(a0.a4, result.a4);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32,
+                Int32, Int32, Int32, Int32, Struct20BytesHomogeneousInt32),
+            Struct20BytesHomogeneousInt32 Function(int, int, int, int, int, int,
+                int, int, Struct20BytesHomogeneousInt32)>(
+        "ReturnStructArgumentInt32x8Struct20BytesHomogeneou",
+        isLeaf: true);
+
+/// On arm64, both argument and return value are passed in by pointer.
+/// Ints exhaust registers, so that pointer is passed on stack.
+void testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8.a0 = -9;
+  a8.a1 = 10;
+  a8.a2 = -11;
+  a8.a3 = 12;
+  a8.a4 = -13;
+
+  final result = returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a8.a0, result.a0);
+  Expect.equals(a8.a1, result.a1);
+  Expect.equals(a8.a2, result.a2);
+  Expect.equals(a8.a3, result.a3);
+  Expect.equals(a8.a4, result.a4);
+
+  calloc.free(a8Pointer);
+}
+
+final returnStructArgumentStruct8BytesInlineArrayIntLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt),
+            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt)>(
+        "ReturnStructArgumentStruct8BytesInlineArrayInt",
+        isLeaf: true);
+
+/// Test returning struct with inline array.
+void testReturnStructArgumentStruct8BytesInlineArrayIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+
+  final result = returnStructArgumentStruct8BytesInlineArrayIntLeaf(a0);
+
+  print("result = $result");
+
+  for (int i = 0; i < 8; i++) {
+    Expect.equals(a0.a0[i], result.a0[i]);
+  }
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct16BytesHomogeneousLeaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct16BytesHomogeneousFloat2 Function(
+                StructStruct16BytesHomogeneousFloat2),
+            StructStruct16BytesHomogeneousFloat2 Function(
+                StructStruct16BytesHomogeneousFloat2)>(
+        "ReturnStructArgumentStructStruct16BytesHomogeneous",
+        isLeaf: true);
+
+/// Return value in FPU registers on arm hardfp and arm64.
+void testReturnStructArgumentStructStruct16BytesHomogeneousLeaf() {
+  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+
+  final result = returnStructArgumentStructStruct16BytesHomogeneousLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 2; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+  }
+  Expect.approxEquals(a0.a2, result.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct32BytesHomogeneousLeaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct32BytesHomogeneousDouble2 Function(
+                StructStruct32BytesHomogeneousDouble2),
+            StructStruct32BytesHomogeneousDouble2 Function(
+                StructStruct32BytesHomogeneousDouble2)>(
+        "ReturnStructArgumentStructStruct32BytesHomogeneous",
+        isLeaf: true);
+
+/// Return value in FPU registers on arm64.
+void testReturnStructArgumentStructStruct32BytesHomogeneousLeaf() {
+  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+
+  final result = returnStructArgumentStructStruct32BytesHomogeneousLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 2; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+  }
+  Expect.approxEquals(a0.a2, result.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct16BytesMixed3Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3),
+            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3)>(
+        "ReturnStructArgumentStructStruct16BytesMixed3",
+        isLeaf: true);
+
+/// On x64 Linux, return value is split over FP and int registers.
+void testReturnStructArgumentStructStruct16BytesMixed3Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[0].a1 = -3;
+  a0.a1[0].a2 = 4;
+  a0.a2[0] = -5;
+  a0.a2[1] = 6;
+
+  final result = returnStructArgumentStructStruct16BytesMixed3Leaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 1; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+    Expect.equals(a0.a1[i].a1, result.a1[i].a1);
+    Expect.equals(a0.a1[i].a2, result.a1[i].a2);
+  }
+  for (int i = 0; i < 2; i++) {
+    Expect.equals(a0.a2[i], result.a2[i]);
+  }
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt16 Function(Int8, Int16, Int8),
+    StructAlignmentInt16 Function(
+        int, int, int)>("ReturnStructAlignmentInt16", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testReturnStructAlignmentInt16Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt16Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt32 Function(Int8, Int32, Int8),
+    StructAlignmentInt32 Function(
+        int, int, int)>("ReturnStructAlignmentInt32", isLeaf: true);
+
+/// Test alignment and padding of 32 byte int within struct.
+void testReturnStructAlignmentInt32Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt32Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt64 Function(Int8, Int64, Int8),
+    StructAlignmentInt64 Function(
+        int, int, int)>("ReturnStructAlignmentInt64", isLeaf: true);
+
+/// Test alignment and padding of 64 byte int within struct.
+void testReturnStructAlignmentInt64Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt64Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+        Struct8BytesNestedInt Function(
+            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16),
+        Struct8BytesNestedInt Function(
+            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16)>(
+    "ReturnStruct8BytesNestedInt",
+    isLeaf: true);
+
+/// Simple nested struct.
+void testReturnStruct8BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+
+  final result = returnStruct8BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedFloat Function(Struct4BytesFloat, Struct4BytesFloat),
+    Struct8BytesNestedFloat Function(Struct4BytesFloat,
+        Struct4BytesFloat)>("ReturnStruct8BytesNestedFloat", isLeaf: true);
+
+/// Simple nested struct with floats.
+void testReturnStruct8BytesNestedFloatLeaf() {
+  final a0Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a1 = a1Pointer.ref;
+
+  a0.a0 = -1.0;
+  a1.a0 = 2.0;
+
+  final result = returnStruct8BytesNestedFloatLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a1.a0, result.a1.a0);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct8BytesNestedFloat2Leaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedFloat2 Function(Struct4BytesFloat, Float),
+    Struct8BytesNestedFloat2 Function(Struct4BytesFloat,
+        double)>("ReturnStruct8BytesNestedFloat2", isLeaf: true);
+
+/// The nesting is irregular, testing homogenous float rules on arm and arm64,
+/// and the fpu register usage on x64.
+void testReturnStruct8BytesNestedFloat2Leaf() {
+  final a0Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a0 = a0Pointer.ref;
+  double a1;
+
+  a0.a0 = -1.0;
+  a1 = 2.0;
+
+  final result = returnStruct8BytesNestedFloat2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a1, result.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStruct8BytesNestedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedMixed Function(
+        Struct4BytesHomogeneousInt16, Struct4BytesFloat),
+    Struct8BytesNestedMixed Function(Struct4BytesHomogeneousInt16,
+        Struct4BytesFloat)>("ReturnStruct8BytesNestedMixed", isLeaf: true);
+
+/// Simple nested struct with mixed members.
+void testReturnStruct8BytesNestedMixedLeaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3.0;
+
+  final result = returnStruct8BytesNestedMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.approxEquals(a1.a0, result.a1.a0);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct16BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesNestedInt Function(
+        Struct8BytesNestedInt, Struct8BytesNestedInt),
+    Struct16BytesNestedInt Function(Struct8BytesNestedInt,
+        Struct8BytesNestedInt)>("ReturnStruct16BytesNestedInt", isLeaf: true);
+
+/// Deeper nested struct to test recursive member access.
+void testReturnStruct16BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3;
+  a0.a1.a1 = 4;
+  a1.a0.a0 = -5;
+  a1.a0.a1 = 6;
+  a1.a1.a0 = -7;
+  a1.a1.a1 = 8;
+
+  final result = returnStruct16BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0.a0, result.a0.a0.a0);
+  Expect.equals(a0.a0.a1, result.a0.a0.a1);
+  Expect.equals(a0.a1.a0, result.a0.a1.a0);
+  Expect.equals(a0.a1.a1, result.a0.a1.a1);
+  Expect.equals(a1.a0.a0, result.a1.a0.a0);
+  Expect.equals(a1.a0.a1, result.a1.a0.a1);
+  Expect.equals(a1.a1.a0, result.a1.a1.a0);
+  Expect.equals(a1.a1.a1, result.a1.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct32BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct32BytesNestedInt Function(
+        Struct16BytesNestedInt, Struct16BytesNestedInt),
+    Struct32BytesNestedInt Function(Struct16BytesNestedInt,
+        Struct16BytesNestedInt)>("ReturnStruct32BytesNestedInt", isLeaf: true);
+
+/// Even deeper nested struct to test recursive member access.
+void testReturnStruct32BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0 = -1;
+  a0.a0.a0.a1 = 2;
+  a0.a0.a1.a0 = -3;
+  a0.a0.a1.a1 = 4;
+  a0.a1.a0.a0 = -5;
+  a0.a1.a0.a1 = 6;
+  a0.a1.a1.a0 = -7;
+  a0.a1.a1.a1 = 8;
+  a1.a0.a0.a0 = -9;
+  a1.a0.a0.a1 = 10;
+  a1.a0.a1.a0 = -11;
+  a1.a0.a1.a1 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15;
+  a1.a1.a1.a1 = 16;
+
+  final result = returnStruct32BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0.a0.a0, result.a0.a0.a0.a0);
+  Expect.equals(a0.a0.a0.a1, result.a0.a0.a0.a1);
+  Expect.equals(a0.a0.a1.a0, result.a0.a0.a1.a0);
+  Expect.equals(a0.a0.a1.a1, result.a0.a0.a1.a1);
+  Expect.equals(a0.a1.a0.a0, result.a0.a1.a0.a0);
+  Expect.equals(a0.a1.a0.a1, result.a0.a1.a0.a1);
+  Expect.equals(a0.a1.a1.a0, result.a0.a1.a1.a0);
+  Expect.equals(a0.a1.a1.a1, result.a0.a1.a1.a1);
+  Expect.equals(a1.a0.a0.a0, result.a1.a0.a0.a0);
+  Expect.equals(a1.a0.a0.a1, result.a1.a0.a0.a1);
+  Expect.equals(a1.a0.a1.a0, result.a1.a0.a1.a0);
+  Expect.equals(a1.a0.a1.a1, result.a1.a0.a1.a1);
+  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
+  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
+  Expect.equals(a1.a1.a1.a0, result.a1.a1.a1.a0);
+  Expect.equals(a1.a1.a1.a1, result.a1.a1.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt16Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt16 Function(
+                StructAlignmentInt16, StructAlignmentInt16),
+            StructNestedIntStructAlignmentInt16 Function(
+                StructAlignmentInt16, StructAlignmentInt16)>(
+        "ReturnStructNestedIntStructAlignmentInt16",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 16 byte int.
+void testReturnStructNestedIntStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt16Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt32Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt32 Function(
+                StructAlignmentInt32, StructAlignmentInt32),
+            StructNestedIntStructAlignmentInt32 Function(
+                StructAlignmentInt32, StructAlignmentInt32)>(
+        "ReturnStructNestedIntStructAlignmentInt32",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 32 byte int.
+void testReturnStructNestedIntStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt32Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt64Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt64 Function(
+                StructAlignmentInt64, StructAlignmentInt64),
+            StructNestedIntStructAlignmentInt64 Function(
+                StructAlignmentInt64, StructAlignmentInt64)>(
+        "ReturnStructNestedIntStructAlignmentInt64",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 64 byte int.
+void testReturnStructNestedIntStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt64Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIrregularEvenBiggerLeaf =
+    ffiTestFunctions.lookupFunction<
+        StructNestedIrregularEvenBigger Function(Uint64,
+            StructNestedIrregularBigger, StructNestedIrregularBigger, Double),
+        StructNestedIrregularEvenBigger Function(
+            int,
+            StructNestedIrregularBigger,
+            StructNestedIrregularBigger,
+            double)>("ReturnStructNestedIrregularEvenBigger", isLeaf: true);
+
+/// Return big irregular struct as smoke test.
+void testReturnStructNestedIrregularEvenBiggerLeaf() {
+  int a0;
+  final a1Pointer = calloc<StructNestedIrregularBigger>();
+  final StructNestedIrregularBigger a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructNestedIrregularBigger>();
+  final StructNestedIrregularBigger a2 = a2Pointer.ref;
+  double a3;
+
+  a0 = 1;
+  a1.a0.a0 = 2;
+  a1.a0.a1.a0.a0 = -3;
+  a1.a0.a1.a0.a1 = 4;
+  a1.a0.a1.a1.a0 = -5.0;
+  a1.a0.a2 = 6;
+  a1.a0.a3.a0.a0 = -7.0;
+  a1.a0.a3.a1 = 8.0;
+  a1.a0.a4 = 9;
+  a1.a0.a5.a0.a0 = 10.0;
+  a1.a0.a5.a1.a0 = -11.0;
+  a1.a0.a6 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15.0;
+  a1.a2 = 16.0;
+  a1.a3 = -17.0;
+  a2.a0.a0 = 18;
+  a2.a0.a1.a0.a0 = -19;
+  a2.a0.a1.a0.a1 = 20;
+  a2.a0.a1.a1.a0 = -21.0;
+  a2.a0.a2 = 22;
+  a2.a0.a3.a0.a0 = -23.0;
+  a2.a0.a3.a1 = 24.0;
+  a2.a0.a4 = 25;
+  a2.a0.a5.a0.a0 = 26.0;
+  a2.a0.a5.a1.a0 = -27.0;
+  a2.a0.a6 = 28;
+  a2.a1.a0.a0 = -29;
+  a2.a1.a0.a1 = 30;
+  a2.a1.a1.a0 = -31.0;
+  a2.a2 = 32.0;
+  a2.a3 = -33.0;
+  a3 = 34.0;
+
+  final result = returnStructNestedIrregularEvenBiggerLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1.a0.a0, result.a1.a0.a0);
+  Expect.equals(a1.a0.a1.a0.a0, result.a1.a0.a1.a0.a0);
+  Expect.equals(a1.a0.a1.a0.a1, result.a1.a0.a1.a0.a1);
+  Expect.approxEquals(a1.a0.a1.a1.a0, result.a1.a0.a1.a1.a0);
+  Expect.equals(a1.a0.a2, result.a1.a0.a2);
+  Expect.approxEquals(a1.a0.a3.a0.a0, result.a1.a0.a3.a0.a0);
+  Expect.approxEquals(a1.a0.a3.a1, result.a1.a0.a3.a1);
+  Expect.equals(a1.a0.a4, result.a1.a0.a4);
+  Expect.approxEquals(a1.a0.a5.a0.a0, result.a1.a0.a5.a0.a0);
+  Expect.approxEquals(a1.a0.a5.a1.a0, result.a1.a0.a5.a1.a0);
+  Expect.equals(a1.a0.a6, result.a1.a0.a6);
+  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
+  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
+  Expect.approxEquals(a1.a1.a1.a0, result.a1.a1.a1.a0);
+  Expect.approxEquals(a1.a2, result.a1.a2);
+  Expect.approxEquals(a1.a3, result.a1.a3);
+  Expect.equals(a2.a0.a0, result.a2.a0.a0);
+  Expect.equals(a2.a0.a1.a0.a0, result.a2.a0.a1.a0.a0);
+  Expect.equals(a2.a0.a1.a0.a1, result.a2.a0.a1.a0.a1);
+  Expect.approxEquals(a2.a0.a1.a1.a0, result.a2.a0.a1.a1.a0);
+  Expect.equals(a2.a0.a2, result.a2.a0.a2);
+  Expect.approxEquals(a2.a0.a3.a0.a0, result.a2.a0.a3.a0.a0);
+  Expect.approxEquals(a2.a0.a3.a1, result.a2.a0.a3.a1);
+  Expect.equals(a2.a0.a4, result.a2.a0.a4);
+  Expect.approxEquals(a2.a0.a5.a0.a0, result.a2.a0.a5.a0.a0);
+  Expect.approxEquals(a2.a0.a5.a1.a0, result.a2.a0.a5.a1.a0);
+  Expect.equals(a2.a0.a6, result.a2.a0.a6);
+  Expect.equals(a2.a1.a0.a0, result.a2.a1.a0.a0);
+  Expect.equals(a2.a1.a0.a1, result.a2.a1.a0.a1);
+  Expect.approxEquals(a2.a1.a1.a0, result.a2.a1.a1.a0);
+  Expect.approxEquals(a2.a2, result.a2.a2);
+  Expect.approxEquals(a2.a3, result.a2.a3);
+  Expect.approxEquals(a3, result.a3);
+
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+}
diff --git a/tests/ffi_2/function_structs_by_value_generated_test.dart b/tests/ffi_2/function_structs_by_value_generated_test.dart
index 1de965c..f817df0 100644
--- a/tests/ffi_2/function_structs_by_value_generated_test.dart
+++ b/tests/ffi_2/function_structs_by_value_generated_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -19,6 +20,9 @@
 
 import 'dylib_utils.dart';
 
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
 final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 void main() {
   for (int i = 0; i < 10; ++i) {
@@ -84,6 +88,9 @@
     testPassUnion9BytesNestedIntx10();
     testPassUnion16BytesNestedInlineArrayFloatx10();
     testPassUnion16BytesNestedFloatx10();
+    testPassUint8Boolx9Struct10BytesHomogeneousBoolBool();
+    testPassUint8Boolx9Struct10BytesInlineArrayBoolBool();
+    testPassUint8Struct1ByteBool();
     testReturnStruct1ByteInt();
     testReturnStruct3BytesHomogeneousUint8();
     testReturnStruct3BytesInt2ByteAligned();
@@ -135,1324 +142,9 @@
     testReturnStructNestedIntStructAlignmentInt32();
     testReturnStructNestedIntStructAlignmentInt64();
     testReturnStructNestedIrregularEvenBigger();
-    testPassStruct1ByteIntx10Leaf();
-    testPassStruct3BytesHomogeneousUint8x10Leaf();
-    testPassStruct3BytesInt2ByteAlignedx10Leaf();
-    testPassStruct4BytesHomogeneousInt16x10Leaf();
-    testPassStruct7BytesHomogeneousUint8x10Leaf();
-    testPassStruct7BytesInt4ByteAlignedx10Leaf();
-    testPassStruct8BytesIntx10Leaf();
-    testPassStruct8BytesHomogeneousFloatx10Leaf();
-    testPassStruct8BytesMixedx10Leaf();
-    testPassStruct9BytesHomogeneousUint8x10Leaf();
-    testPassStruct9BytesInt4Or8ByteAlignedx10Leaf();
-    testPassStruct12BytesHomogeneousFloatx6Leaf();
-    testPassStruct16BytesHomogeneousFloatx5Leaf();
-    testPassStruct16BytesMixedx10Leaf();
-    testPassStruct16BytesMixed2x10Leaf();
-    testPassStruct17BytesIntx10Leaf();
-    testPassStruct19BytesHomogeneousUint8x10Leaf();
-    testPassStruct20BytesHomogeneousInt32x10Leaf();
-    testPassStruct20BytesHomogeneousFloatLeaf();
-    testPassStruct32BytesHomogeneousDoublex5Leaf();
-    testPassStruct40BytesHomogeneousDoubleLeaf();
-    testPassStruct1024BytesHomogeneousUint64Leaf();
-    testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf();
-    testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf();
-    testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf();
-    testPassDoublex6Struct16BytesMixedx4Int32Leaf();
-    testPassInt32x4Struct16BytesMixedx4DoubleLeaf();
-    testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf();
-    testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf();
-    testPassStructAlignmentInt16Leaf();
-    testPassStructAlignmentInt32Leaf();
-    testPassStructAlignmentInt64Leaf();
-    testPassStruct8BytesNestedIntx10Leaf();
-    testPassStruct8BytesNestedFloatx10Leaf();
-    testPassStruct8BytesNestedFloat2x10Leaf();
-    testPassStruct8BytesNestedMixedx10Leaf();
-    testPassStruct16BytesNestedIntx2Leaf();
-    testPassStruct32BytesNestedIntx2Leaf();
-    testPassStructNestedIntStructAlignmentInt16Leaf();
-    testPassStructNestedIntStructAlignmentInt32Leaf();
-    testPassStructNestedIntStructAlignmentInt64Leaf();
-    testPassStructNestedIrregularEvenBiggerx4Leaf();
-    testPassStruct8BytesInlineArrayIntx4Leaf();
-    testPassStructInlineArrayIrregularx4Leaf();
-    testPassStructInlineArray100BytesLeaf();
-    testPassStructStruct16BytesHomogeneousFloat2x5Leaf();
-    testPassStructStruct32BytesHomogeneousDouble2x5Leaf();
-    testPassStructStruct16BytesMixed3x10Leaf();
-    testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf();
-    testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf();
-    testPassStruct3BytesPackedIntx10Leaf();
-    testPassStruct8BytesPackedIntx10Leaf();
-    testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf();
-    testPassStruct5BytesPackedMixedLeaf();
-    testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf();
-    testPassStruct6BytesInlineArrayIntLeaf();
-    testPassStruct15BytesInlineArrayMixedLeaf();
-    testPassUnion4BytesMixedx10Leaf();
-    testPassUnion8BytesNestedFloatx10Leaf();
-    testPassUnion9BytesNestedIntx10Leaf();
-    testPassUnion16BytesNestedInlineArrayFloatx10Leaf();
-    testPassUnion16BytesNestedFloatx10Leaf();
-    testReturnStruct1ByteIntLeaf();
-    testReturnStruct3BytesHomogeneousUint8Leaf();
-    testReturnStruct3BytesInt2ByteAlignedLeaf();
-    testReturnStruct4BytesHomogeneousInt16Leaf();
-    testReturnStruct7BytesHomogeneousUint8Leaf();
-    testReturnStruct7BytesInt4ByteAlignedLeaf();
-    testReturnStruct8BytesIntLeaf();
-    testReturnStruct8BytesHomogeneousFloatLeaf();
-    testReturnStruct8BytesMixedLeaf();
-    testReturnStruct9BytesHomogeneousUint8Leaf();
-    testReturnStruct9BytesInt4Or8ByteAlignedLeaf();
-    testReturnStruct12BytesHomogeneousFloatLeaf();
-    testReturnStruct16BytesHomogeneousFloatLeaf();
-    testReturnStruct16BytesMixedLeaf();
-    testReturnStruct16BytesMixed2Leaf();
-    testReturnStruct17BytesIntLeaf();
-    testReturnStruct19BytesHomogeneousUint8Leaf();
-    testReturnStruct20BytesHomogeneousInt32Leaf();
-    testReturnStruct20BytesHomogeneousFloatLeaf();
-    testReturnStruct32BytesHomogeneousDoubleLeaf();
-    testReturnStruct40BytesHomogeneousDoubleLeaf();
-    testReturnStruct1024BytesHomogeneousUint64Leaf();
-    testReturnStruct3BytesPackedIntLeaf();
-    testReturnStruct8BytesPackedIntLeaf();
-    testReturnStruct9BytesPackedMixedLeaf();
-    testReturnUnion4BytesMixedLeaf();
-    testReturnUnion8BytesNestedFloatLeaf();
-    testReturnUnion9BytesNestedIntLeaf();
-    testReturnUnion16BytesNestedFloatLeaf();
-    testReturnStructArgumentStruct1ByteIntLeaf();
-    testReturnStructArgumentInt32x8Struct1ByteIntLeaf();
-    testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf();
-    testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf();
-    testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf();
-    testReturnStructArgumentStruct8BytesInlineArrayIntLeaf();
-    testReturnStructArgumentStructStruct16BytesHomogeneousLeaf();
-    testReturnStructArgumentStructStruct32BytesHomogeneousLeaf();
-    testReturnStructArgumentStructStruct16BytesMixed3Leaf();
-    testReturnStructAlignmentInt16Leaf();
-    testReturnStructAlignmentInt32Leaf();
-    testReturnStructAlignmentInt64Leaf();
-    testReturnStruct8BytesNestedIntLeaf();
-    testReturnStruct8BytesNestedFloatLeaf();
-    testReturnStruct8BytesNestedFloat2Leaf();
-    testReturnStruct8BytesNestedMixedLeaf();
-    testReturnStruct16BytesNestedIntLeaf();
-    testReturnStruct32BytesNestedIntLeaf();
-    testReturnStructNestedIntStructAlignmentInt16Leaf();
-    testReturnStructNestedIntStructAlignmentInt32Leaf();
-    testReturnStructNestedIntStructAlignmentInt64Leaf();
-    testReturnStructNestedIrregularEvenBiggerLeaf();
   }
 }
 
-class Struct1ByteInt extends Struct {
-  @Int8()
-  int a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct3BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint8()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct3BytesInt2ByteAligned extends Struct {
-  @Int16()
-  int a0;
-
-  @Int8()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct4BytesHomogeneousInt16 extends Struct {
-  @Int16()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct4BytesFloat extends Struct {
-  @Float()
-  double a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct7BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint8()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  @Uint8()
-  int a3;
-
-  @Uint8()
-  int a4;
-
-  @Uint8()
-  int a5;
-
-  @Uint8()
-  int a6;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
-}
-
-class Struct7BytesInt4ByteAligned extends Struct {
-  @Int32()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesInt extends Struct {
-  @Int16()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  @Int32()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesHomogeneousFloat extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesFloat extends Struct {
-  @Double()
-  double a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct8BytesMixed extends Struct {
-  @Float()
-  double a0;
-
-  @Int16()
-  int a1;
-
-  @Int16()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct9BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint8()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  @Uint8()
-  int a3;
-
-  @Uint8()
-  int a4;
-
-  @Uint8()
-  int a5;
-
-  @Uint8()
-  int a6;
-
-  @Uint8()
-  int a7;
-
-  @Uint8()
-  int a8;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})";
-}
-
-class Struct9BytesInt4Or8ByteAligned extends Struct {
-  @Int64()
-  int a0;
-
-  @Int8()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct12BytesHomogeneousFloat extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  @Float()
-  double a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct16BytesHomogeneousFloat extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  @Float()
-  double a2;
-
-  @Float()
-  double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct16BytesMixed extends Struct {
-  @Double()
-  double a0;
-
-  @Int64()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct16BytesMixed2 extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  @Float()
-  double a2;
-
-  @Int32()
-  int a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct17BytesInt extends Struct {
-  @Int64()
-  int a0;
-
-  @Int64()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct19BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint8()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  @Uint8()
-  int a3;
-
-  @Uint8()
-  int a4;
-
-  @Uint8()
-  int a5;
-
-  @Uint8()
-  int a6;
-
-  @Uint8()
-  int a7;
-
-  @Uint8()
-  int a8;
-
-  @Uint8()
-  int a9;
-
-  @Uint8()
-  int a10;
-
-  @Uint8()
-  int a11;
-
-  @Uint8()
-  int a12;
-
-  @Uint8()
-  int a13;
-
-  @Uint8()
-  int a14;
-
-  @Uint8()
-  int a15;
-
-  @Uint8()
-  int a16;
-
-  @Uint8()
-  int a17;
-
-  @Uint8()
-  int a18;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18})";
-}
-
-class Struct20BytesHomogeneousInt32 extends Struct {
-  @Int32()
-  int a0;
-
-  @Int32()
-  int a1;
-
-  @Int32()
-  int a2;
-
-  @Int32()
-  int a3;
-
-  @Int32()
-  int a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct20BytesHomogeneousFloat extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  @Float()
-  double a2;
-
-  @Float()
-  double a3;
-
-  @Float()
-  double a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct32BytesHomogeneousDouble extends Struct {
-  @Double()
-  double a0;
-
-  @Double()
-  double a1;
-
-  @Double()
-  double a2;
-
-  @Double()
-  double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct40BytesHomogeneousDouble extends Struct {
-  @Double()
-  double a0;
-
-  @Double()
-  double a1;
-
-  @Double()
-  double a2;
-
-  @Double()
-  double a3;
-
-  @Double()
-  double a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct1024BytesHomogeneousUint64 extends Struct {
-  @Uint64()
-  int a0;
-
-  @Uint64()
-  int a1;
-
-  @Uint64()
-  int a2;
-
-  @Uint64()
-  int a3;
-
-  @Uint64()
-  int a4;
-
-  @Uint64()
-  int a5;
-
-  @Uint64()
-  int a6;
-
-  @Uint64()
-  int a7;
-
-  @Uint64()
-  int a8;
-
-  @Uint64()
-  int a9;
-
-  @Uint64()
-  int a10;
-
-  @Uint64()
-  int a11;
-
-  @Uint64()
-  int a12;
-
-  @Uint64()
-  int a13;
-
-  @Uint64()
-  int a14;
-
-  @Uint64()
-  int a15;
-
-  @Uint64()
-  int a16;
-
-  @Uint64()
-  int a17;
-
-  @Uint64()
-  int a18;
-
-  @Uint64()
-  int a19;
-
-  @Uint64()
-  int a20;
-
-  @Uint64()
-  int a21;
-
-  @Uint64()
-  int a22;
-
-  @Uint64()
-  int a23;
-
-  @Uint64()
-  int a24;
-
-  @Uint64()
-  int a25;
-
-  @Uint64()
-  int a26;
-
-  @Uint64()
-  int a27;
-
-  @Uint64()
-  int a28;
-
-  @Uint64()
-  int a29;
-
-  @Uint64()
-  int a30;
-
-  @Uint64()
-  int a31;
-
-  @Uint64()
-  int a32;
-
-  @Uint64()
-  int a33;
-
-  @Uint64()
-  int a34;
-
-  @Uint64()
-  int a35;
-
-  @Uint64()
-  int a36;
-
-  @Uint64()
-  int a37;
-
-  @Uint64()
-  int a38;
-
-  @Uint64()
-  int a39;
-
-  @Uint64()
-  int a40;
-
-  @Uint64()
-  int a41;
-
-  @Uint64()
-  int a42;
-
-  @Uint64()
-  int a43;
-
-  @Uint64()
-  int a44;
-
-  @Uint64()
-  int a45;
-
-  @Uint64()
-  int a46;
-
-  @Uint64()
-  int a47;
-
-  @Uint64()
-  int a48;
-
-  @Uint64()
-  int a49;
-
-  @Uint64()
-  int a50;
-
-  @Uint64()
-  int a51;
-
-  @Uint64()
-  int a52;
-
-  @Uint64()
-  int a53;
-
-  @Uint64()
-  int a54;
-
-  @Uint64()
-  int a55;
-
-  @Uint64()
-  int a56;
-
-  @Uint64()
-  int a57;
-
-  @Uint64()
-  int a58;
-
-  @Uint64()
-  int a59;
-
-  @Uint64()
-  int a60;
-
-  @Uint64()
-  int a61;
-
-  @Uint64()
-  int a62;
-
-  @Uint64()
-  int a63;
-
-  @Uint64()
-  int a64;
-
-  @Uint64()
-  int a65;
-
-  @Uint64()
-  int a66;
-
-  @Uint64()
-  int a67;
-
-  @Uint64()
-  int a68;
-
-  @Uint64()
-  int a69;
-
-  @Uint64()
-  int a70;
-
-  @Uint64()
-  int a71;
-
-  @Uint64()
-  int a72;
-
-  @Uint64()
-  int a73;
-
-  @Uint64()
-  int a74;
-
-  @Uint64()
-  int a75;
-
-  @Uint64()
-  int a76;
-
-  @Uint64()
-  int a77;
-
-  @Uint64()
-  int a78;
-
-  @Uint64()
-  int a79;
-
-  @Uint64()
-  int a80;
-
-  @Uint64()
-  int a81;
-
-  @Uint64()
-  int a82;
-
-  @Uint64()
-  int a83;
-
-  @Uint64()
-  int a84;
-
-  @Uint64()
-  int a85;
-
-  @Uint64()
-  int a86;
-
-  @Uint64()
-  int a87;
-
-  @Uint64()
-  int a88;
-
-  @Uint64()
-  int a89;
-
-  @Uint64()
-  int a90;
-
-  @Uint64()
-  int a91;
-
-  @Uint64()
-  int a92;
-
-  @Uint64()
-  int a93;
-
-  @Uint64()
-  int a94;
-
-  @Uint64()
-  int a95;
-
-  @Uint64()
-  int a96;
-
-  @Uint64()
-  int a97;
-
-  @Uint64()
-  int a98;
-
-  @Uint64()
-  int a99;
-
-  @Uint64()
-  int a100;
-
-  @Uint64()
-  int a101;
-
-  @Uint64()
-  int a102;
-
-  @Uint64()
-  int a103;
-
-  @Uint64()
-  int a104;
-
-  @Uint64()
-  int a105;
-
-  @Uint64()
-  int a106;
-
-  @Uint64()
-  int a107;
-
-  @Uint64()
-  int a108;
-
-  @Uint64()
-  int a109;
-
-  @Uint64()
-  int a110;
-
-  @Uint64()
-  int a111;
-
-  @Uint64()
-  int a112;
-
-  @Uint64()
-  int a113;
-
-  @Uint64()
-  int a114;
-
-  @Uint64()
-  int a115;
-
-  @Uint64()
-  int a116;
-
-  @Uint64()
-  int a117;
-
-  @Uint64()
-  int a118;
-
-  @Uint64()
-  int a119;
-
-  @Uint64()
-  int a120;
-
-  @Uint64()
-  int a121;
-
-  @Uint64()
-  int a122;
-
-  @Uint64()
-  int a123;
-
-  @Uint64()
-  int a124;
-
-  @Uint64()
-  int a125;
-
-  @Uint64()
-  int a126;
-
-  @Uint64()
-  int a127;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18}, ${a19}, ${a20}, ${a21}, ${a22}, ${a23}, ${a24}, ${a25}, ${a26}, ${a27}, ${a28}, ${a29}, ${a30}, ${a31}, ${a32}, ${a33}, ${a34}, ${a35}, ${a36}, ${a37}, ${a38}, ${a39}, ${a40}, ${a41}, ${a42}, ${a43}, ${a44}, ${a45}, ${a46}, ${a47}, ${a48}, ${a49}, ${a50}, ${a51}, ${a52}, ${a53}, ${a54}, ${a55}, ${a56}, ${a57}, ${a58}, ${a59}, ${a60}, ${a61}, ${a62}, ${a63}, ${a64}, ${a65}, ${a66}, ${a67}, ${a68}, ${a69}, ${a70}, ${a71}, ${a72}, ${a73}, ${a74}, ${a75}, ${a76}, ${a77}, ${a78}, ${a79}, ${a80}, ${a81}, ${a82}, ${a83}, ${a84}, ${a85}, ${a86}, ${a87}, ${a88}, ${a89}, ${a90}, ${a91}, ${a92}, ${a93}, ${a94}, ${a95}, ${a96}, ${a97}, ${a98}, ${a99}, ${a100}, ${a101}, ${a102}, ${a103}, ${a104}, ${a105}, ${a106}, ${a107}, ${a108}, ${a109}, ${a110}, ${a111}, ${a112}, ${a113}, ${a114}, ${a115}, ${a116}, ${a117}, ${a118}, ${a119}, ${a120}, ${a121}, ${a122}, ${a123}, ${a124}, ${a125}, ${a126}, ${a127})";
-}
-
-class StructAlignmentInt16 extends Struct {
-  @Int8()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class StructAlignmentInt32 extends Struct {
-  @Int8()
-  int a0;
-
-  @Int32()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class StructAlignmentInt64 extends Struct {
-  @Int8()
-  int a0;
-
-  @Int64()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesNestedInt extends Struct {
-  Struct4BytesHomogeneousInt16 a0;
-
-  Struct4BytesHomogeneousInt16 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedFloat extends Struct {
-  Struct4BytesFloat a0;
-
-  Struct4BytesFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedFloat2 extends Struct {
-  Struct4BytesFloat a0;
-
-  @Float()
-  double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedMixed extends Struct {
-  Struct4BytesHomogeneousInt16 a0;
-
-  Struct4BytesFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct16BytesNestedInt extends Struct {
-  Struct8BytesNestedInt a0;
-
-  Struct8BytesNestedInt a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct32BytesNestedInt extends Struct {
-  Struct16BytesNestedInt a0;
-
-  Struct16BytesNestedInt a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt16 extends Struct {
-  StructAlignmentInt16 a0;
-
-  StructAlignmentInt16 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt32 extends Struct {
-  StructAlignmentInt32 a0;
-
-  StructAlignmentInt32 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt64 extends Struct {
-  StructAlignmentInt64 a0;
-
-  StructAlignmentInt64 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIrregularBig extends Struct {
-  @Uint16()
-  int a0;
-
-  Struct8BytesNestedMixed a1;
-
-  @Uint16()
-  int a2;
-
-  Struct8BytesNestedFloat2 a3;
-
-  @Uint16()
-  int a4;
-
-  Struct8BytesNestedFloat a5;
-
-  @Uint16()
-  int a6;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
-}
-
-class StructNestedIrregularBigger extends Struct {
-  StructNestedIrregularBig a0;
-
-  Struct8BytesNestedMixed a1;
-
-  @Float()
-  double a2;
-
-  @Double()
-  double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class StructNestedIrregularEvenBigger extends Struct {
-  @Uint64()
-  int a0;
-
-  StructNestedIrregularBigger a1;
-
-  StructNestedIrregularBigger a2;
-
-  @Double()
-  double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct8BytesInlineArrayInt extends Struct {
-  @Array(8)
-  Array<Uint8> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 8; i0 += 1) a0[i0]]})";
-}
-
-class StructInlineArrayIrregular extends Struct {
-  @Array(2)
-  Array<Struct3BytesInt2ByteAligned> a0;
-
-  @Uint8()
-  int a1;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]}, ${a1})";
-}
-
-class StructInlineArray100Bytes extends Struct {
-  @Array(100)
-  Array<Uint8> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 100; i0 += 1) a0[i0]]})";
-}
-
-class StructInlineArrayBig extends Struct {
-  @Uint32()
-  int a0;
-
-  @Uint32()
-  int a1;
-
-  @Array(4000)
-  Array<Uint8> a2;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${[for (var i0 = 0; i0 < 4000; i0 += 1) a2[i0]]})";
-}
-
-class StructStruct16BytesHomogeneousFloat2 extends Struct {
-  Struct4BytesFloat a0;
-
-  @Array(2)
-  Array<Struct4BytesFloat> a1;
-
-  @Float()
-  double a2;
-
-  String toString() =>
-      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
-}
-
-class StructStruct32BytesHomogeneousDouble2 extends Struct {
-  Struct8BytesFloat a0;
-
-  @Array(2)
-  Array<Struct8BytesFloat> a1;
-
-  @Double()
-  double a2;
-
-  String toString() =>
-      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
-}
-
-class StructStruct16BytesMixed3 extends Struct {
-  Struct4BytesFloat a0;
-
-  @Array(1)
-  Array<Struct8BytesMixed> a1;
-
-  @Array(2)
-  Array<Int16> a2;
-
-  String toString() => "(${a0}, ${[
-        for (var i0 = 0; i0 < 1; i0 += 1) a1[i0]
-      ]}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a2[i0]]})";
-}
-
-class Struct8BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2, 2)
-  Array<Array<Array<Uint8>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [for (var i2 = 0; i2 < 2; i2 += 1) a0[i0][i1][i2]]
-          ]
-      ]})";
-}
-
-class Struct32BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2, 2, 2, 2)
-  Array<Array<Array<Array<Array<Uint8>>>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [
-                for (var i2 = 0; i2 < 2; i2 += 1)
-                  [
-                    for (var i3 = 0; i3 < 2; i3 += 1)
-                      [for (var i4 = 0; i4 < 2; i4 += 1) a0[i0][i1][i2][i3][i4]]
-                  ]
-              ]
-          ]
-      ]})";
-}
-
-class Struct64BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array.multi([2, 2, 2, 2, 2, 2])
-  Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [
-                for (var i2 = 0; i2 < 2; i2 += 1)
-                  [
-                    for (var i3 = 0; i3 < 2; i3 += 1)
-                      [
-                        for (var i4 = 0; i4 < 2; i4 += 1)
-                          [
-                            for (var i5 = 0; i5 < 2; i5 += 1)
-                              a0[i0][i1][i2][i3][i4][i5]
-                          ]
-                      ]
-                  ]
-              ]
-          ]
-      ]})";
-}
-
-class Struct4BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2)
-  Array<Array<Struct1ByteInt>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [for (var i1 = 0; i1 < 2; i1 += 1) a0[i0][i1]]
-      ]})";
-}
-
-@Packed(1)
-class Struct3BytesPackedInt extends Struct {
-  @Int8()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-@Packed(1)
-class Struct3BytesPackedIntMembersAligned extends Struct {
-  @Int8()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-@Packed(1)
-class Struct5BytesPackedMixed extends Struct {
-  @Float()
-  double a0;
-
-  @Uint8()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedAlignmentStruct5BytesPackedMixed extends Struct {
-  @Uint8()
-  int a0;
-
-  Struct5BytesPackedMixed a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct6BytesInlineArrayInt extends Struct {
-  @Array(2)
-  Array<Struct3BytesPackedIntMembersAligned> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]})";
-}
-
-@Packed(1)
-class Struct8BytesPackedInt extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint32()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  @Uint8()
-  int a3;
-
-  @Uint8()
-  int a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-@Packed(1)
-class Struct9BytesPackedMixed extends Struct {
-  @Uint8()
-  int a0;
-
-  @Double()
-  double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct15BytesInlineArrayMixed extends Struct {
-  @Array(3)
-  Array<Struct5BytesPackedMixed> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 3; i0 += 1) a0[i0]]})";
-}
-
-class Union4BytesMixed extends Union {
-  @Uint32()
-  int a0;
-
-  @Float()
-  double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union8BytesNestedFloat extends Union {
-  @Double()
-  double a0;
-
-  Struct8BytesHomogeneousFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union9BytesNestedInt extends Union {
-  Struct8BytesInt a0;
-
-  Struct9BytesHomogeneousUint8 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union16BytesNestedInlineArrayFloat extends Union {
-  @Array(4)
-  Array<Float> a0;
-
-  Struct16BytesHomogeneousFloat a1;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 4; i0 += 1) a0[i0]]}, ${a1})";
-}
-
-class Union16BytesNestedFloat extends Union {
-  Struct8BytesHomogeneousFloat a0;
-
-  Struct12BytesHomogeneousFloat a1;
-
-  Struct16BytesHomogeneousFloat a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
 final passStruct1ByteIntx10 = ffiTestFunctions.lookupFunction<
     Int64 Function(
         Struct1ByteInt,
@@ -6537,6 +5229,164 @@
   calloc.free(a9Pointer);
 }
 
+final passUint8Boolx9Struct10BytesHomogeneousBoolBool =
+    ffiTestFunctions.lookupFunction<
+        Int32 Function(Uint8, Bool, Bool, Bool, Bool, Bool, Bool, Bool, Bool,
+            Bool, Struct10BytesHomogeneousBool, Bool),
+        int Function(
+            int,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            Struct10BytesHomogeneousBool,
+            bool)>("PassUint8Boolx9Struct10BytesHomogeneousBoolBool");
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+void testPassUint8Boolx9Struct10BytesHomogeneousBoolBool() {
+  int a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  final a10Pointer = calloc<Struct10BytesHomogeneousBool>();
+  final Struct10BytesHomogeneousBool a10 = a10Pointer.ref;
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0 = true;
+  a10.a1 = false;
+  a10.a2 = true;
+  a10.a3 = false;
+  a10.a4 = true;
+  a10.a5 = false;
+  a10.a6 = true;
+  a10.a7 = false;
+  a10.a8 = true;
+  a10.a9 = false;
+  a11 = true;
+
+  final result = passUint8Boolx9Struct10BytesHomogeneousBoolBool(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  print("result = $result");
+
+  Expect.equals(11, result);
+
+  calloc.free(a10Pointer);
+}
+
+final passUint8Boolx9Struct10BytesInlineArrayBoolBool =
+    ffiTestFunctions.lookupFunction<
+        Int32 Function(Uint8, Bool, Bool, Bool, Bool, Bool, Bool, Bool, Bool,
+            Bool, Struct10BytesInlineArrayBool, Bool),
+        int Function(
+            int,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            bool,
+            Struct10BytesInlineArrayBool,
+            bool)>("PassUint8Boolx9Struct10BytesInlineArrayBoolBool");
+
+/// Passing bools and a struct with bools.
+/// Exhausts the registers to test bools and the bool struct alignment on the
+/// stack.
+void testPassUint8Boolx9Struct10BytesInlineArrayBoolBool() {
+  int a0;
+  bool a1;
+  bool a2;
+  bool a3;
+  bool a4;
+  bool a5;
+  bool a6;
+  bool a7;
+  bool a8;
+  bool a9;
+  final a10Pointer = calloc<Struct10BytesInlineArrayBool>();
+  final Struct10BytesInlineArrayBool a10 = a10Pointer.ref;
+  bool a11;
+
+  a0 = 1;
+  a1 = false;
+  a2 = true;
+  a3 = false;
+  a4 = true;
+  a5 = false;
+  a6 = true;
+  a7 = false;
+  a8 = true;
+  a9 = false;
+  a10.a0[0] = true;
+  a10.a0[1] = false;
+  a10.a0[2] = true;
+  a10.a0[3] = false;
+  a10.a0[4] = true;
+  a10.a0[5] = false;
+  a10.a0[6] = true;
+  a10.a0[7] = false;
+  a10.a0[8] = true;
+  a10.a0[9] = false;
+  a11 = true;
+
+  final result = passUint8Boolx9Struct10BytesInlineArrayBoolBool(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+
+  print("result = $result");
+
+  Expect.equals(11, result);
+
+  calloc.free(a10Pointer);
+}
+
+final passUint8Struct1ByteBool = ffiTestFunctions.lookupFunction<
+    Bool Function(Uint8, Struct1ByteBool),
+    bool Function(int, Struct1ByteBool)>("PassUint8Struct1ByteBool");
+
+/// Returning a bool.
+void testPassUint8Struct1ByteBool() {
+  int a0;
+  final a1Pointer = calloc<Struct1ByteBool>();
+  final Struct1ByteBool a1 = a1Pointer.ref;
+
+  a0 = 1;
+  a1.a0 = false;
+
+  final result = passUint8Struct1ByteBool(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(1 % 2 != 0, result);
+
+  calloc.free(a1Pointer);
+}
+
 final returnStruct1ByteInt = ffiTestFunctions.lookupFunction<
     Struct1ByteInt Function(Int8),
     Struct1ByteInt Function(int)>("ReturnStruct1ByteInt");
@@ -8889,7545 +7739,3 @@
   calloc.free(a1Pointer);
   calloc.free(a2Pointer);
 }
-
-final passStruct1ByteIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt),
-    int Function(
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt)>("PassStruct1ByteIntx10", isLeaf: true);
-
-/// Smallest struct with data.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct1ByteIntx10Leaf() {
-  final a0Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a1.a0 = 2;
-  a2.a0 = -3;
-  a3.a0 = 4;
-  a4.a0 = -5;
-  a5.a0 = 6;
-  a6.a0 = -7;
-  a7.a0 = 8;
-  a8.a0 = -9;
-  a9.a0 = 10;
-
-  final result =
-      passStruct1ByteIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(5, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct3BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8),
-        int Function(
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8)>(
-    "PassStruct3BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Not a multiple of word size, not a power of two.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct3BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a1.a0 = 4;
-  a1.a1 = 5;
-  a1.a2 = 6;
-  a2.a0 = 7;
-  a2.a1 = 8;
-  a2.a2 = 9;
-  a3.a0 = 10;
-  a3.a1 = 11;
-  a3.a2 = 12;
-  a4.a0 = 13;
-  a4.a1 = 14;
-  a4.a2 = 15;
-  a5.a0 = 16;
-  a5.a1 = 17;
-  a5.a2 = 18;
-  a6.a0 = 19;
-  a6.a1 = 20;
-  a6.a2 = 21;
-  a7.a0 = 22;
-  a7.a1 = 23;
-  a7.a2 = 24;
-  a8.a0 = 25;
-  a8.a1 = 26;
-  a8.a2 = 27;
-  a9.a0 = 28;
-  a9.a1 = 29;
-  a9.a2 = 30;
-
-  final result = passStruct3BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(465, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct3BytesInt2ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned),
-        int Function(
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned)>("PassStruct3BytesInt2ByteAlignedx10",
-    isLeaf: true);
-
-/// Not a multiple of word size, not a power of two.
-/// With alignment rules taken into account size is 4 bytes.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct3BytesInt2ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct3BytesInt2ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct4BytesHomogeneousInt16x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16),
-        int Function(
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16)>(
-    "PassStruct4BytesHomogeneousInt16x10",
-    isLeaf: true);
-
-/// Exactly word size on 32-bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct4BytesHomogeneousInt16x10Leaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct4BytesHomogeneousInt16x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct7BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8),
-        int Function(
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8)>(
-    "PassStruct7BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Sub word size on 64 bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct7BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a1.a0 = 8;
-  a1.a1 = 9;
-  a1.a2 = 10;
-  a1.a3 = 11;
-  a1.a4 = 12;
-  a1.a5 = 13;
-  a1.a6 = 14;
-  a2.a0 = 15;
-  a2.a1 = 16;
-  a2.a2 = 17;
-  a2.a3 = 18;
-  a2.a4 = 19;
-  a2.a5 = 20;
-  a2.a6 = 21;
-  a3.a0 = 22;
-  a3.a1 = 23;
-  a3.a2 = 24;
-  a3.a3 = 25;
-  a3.a4 = 26;
-  a3.a5 = 27;
-  a3.a6 = 28;
-  a4.a0 = 29;
-  a4.a1 = 30;
-  a4.a2 = 31;
-  a4.a3 = 32;
-  a4.a4 = 33;
-  a4.a5 = 34;
-  a4.a6 = 35;
-  a5.a0 = 36;
-  a5.a1 = 37;
-  a5.a2 = 38;
-  a5.a3 = 39;
-  a5.a4 = 40;
-  a5.a5 = 41;
-  a5.a6 = 42;
-  a6.a0 = 43;
-  a6.a1 = 44;
-  a6.a2 = 45;
-  a6.a3 = 46;
-  a6.a4 = 47;
-  a6.a5 = 48;
-  a6.a6 = 49;
-  a7.a0 = 50;
-  a7.a1 = 51;
-  a7.a2 = 52;
-  a7.a3 = 53;
-  a7.a4 = 54;
-  a7.a5 = 55;
-  a7.a6 = 56;
-  a8.a0 = 57;
-  a8.a1 = 58;
-  a8.a2 = 59;
-  a8.a3 = 60;
-  a8.a4 = 61;
-  a8.a5 = 62;
-  a8.a6 = 63;
-  a9.a0 = 64;
-  a9.a1 = 65;
-  a9.a2 = 66;
-  a9.a3 = 67;
-  a9.a4 = 68;
-  a9.a5 = 69;
-  a9.a6 = 70;
-
-  final result = passStruct7BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(2485, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct7BytesInt4ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned),
-        int Function(
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned)>("PassStruct7BytesInt4ByteAlignedx10",
-    isLeaf: true);
-
-/// Sub word size on 64 bit architectures.
-/// With alignment rules taken into account size is 8 bytes.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct7BytesInt4ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result = passStruct7BytesInt4ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt),
-    int Function(
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt)>("PassStruct8BytesIntx10", isLeaf: true);
-
-/// Exactly word size struct on 64bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct8BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesHomogeneousFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat),
-        double Function(
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat)>(
-    "PassStruct8BytesHomogeneousFloatx10",
-    isLeaf: true);
-
-/// Arguments passed in FP registers as long as they fit.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesHomogeneousFloatx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a1.a0 = -3.0;
-  a1.a1 = 4.0;
-  a2.a0 = -5.0;
-  a2.a1 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a4.a0 = -9.0;
-  a4.a1 = 10.0;
-  a5.a0 = -11.0;
-  a5.a1 = 12.0;
-  a6.a0 = -13.0;
-  a6.a1 = 14.0;
-  a7.a0 = -15.0;
-  a7.a1 = 16.0;
-  a8.a0 = -17.0;
-  a8.a1 = 18.0;
-  a9.a0 = -19.0;
-  a9.a1 = 20.0;
-
-  final result = passStruct8BytesHomogeneousFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Float Function(
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed),
-    double Function(
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed)>("PassStruct8BytesMixedx10", isLeaf: true);
-
-/// On x64, arguments go in int registers because it is not only float.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4.0;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7.0;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10.0;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13.0;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16.0;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19.0;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22.0;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25.0;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28.0;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct8BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8),
-        int Function(
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8)>(
-    "PassStruct9BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Argument is a single byte over a multiple of word size.
-/// 10 struct arguments will exhaust available registers.
-/// Struct only has 1-byte aligned fields to test struct alignment itself.
-/// Tests upper bytes in the integer registers that are partly filled.
-/// Tests stack alignment of non word size stack arguments.
-void testPassStruct9BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a1.a0 = 10;
-  a1.a1 = 11;
-  a1.a2 = 12;
-  a1.a3 = 13;
-  a1.a4 = 14;
-  a1.a5 = 15;
-  a1.a6 = 16;
-  a1.a7 = 17;
-  a1.a8 = 18;
-  a2.a0 = 19;
-  a2.a1 = 20;
-  a2.a2 = 21;
-  a2.a3 = 22;
-  a2.a4 = 23;
-  a2.a5 = 24;
-  a2.a6 = 25;
-  a2.a7 = 26;
-  a2.a8 = 27;
-  a3.a0 = 28;
-  a3.a1 = 29;
-  a3.a2 = 30;
-  a3.a3 = 31;
-  a3.a4 = 32;
-  a3.a5 = 33;
-  a3.a6 = 34;
-  a3.a7 = 35;
-  a3.a8 = 36;
-  a4.a0 = 37;
-  a4.a1 = 38;
-  a4.a2 = 39;
-  a4.a3 = 40;
-  a4.a4 = 41;
-  a4.a5 = 42;
-  a4.a6 = 43;
-  a4.a7 = 44;
-  a4.a8 = 45;
-  a5.a0 = 46;
-  a5.a1 = 47;
-  a5.a2 = 48;
-  a5.a3 = 49;
-  a5.a4 = 50;
-  a5.a5 = 51;
-  a5.a6 = 52;
-  a5.a7 = 53;
-  a5.a8 = 54;
-  a6.a0 = 55;
-  a6.a1 = 56;
-  a6.a2 = 57;
-  a6.a3 = 58;
-  a6.a4 = 59;
-  a6.a5 = 60;
-  a6.a6 = 61;
-  a6.a7 = 62;
-  a6.a8 = 63;
-  a7.a0 = 64;
-  a7.a1 = 65;
-  a7.a2 = 66;
-  a7.a3 = 67;
-  a7.a4 = 68;
-  a7.a5 = 69;
-  a7.a6 = 70;
-  a7.a7 = 71;
-  a7.a8 = 72;
-  a8.a0 = 73;
-  a8.a1 = 74;
-  a8.a2 = 75;
-  a8.a3 = 76;
-  a8.a4 = 77;
-  a8.a5 = 78;
-  a8.a6 = 79;
-  a8.a7 = 80;
-  a8.a8 = 81;
-  a9.a0 = 82;
-  a9.a1 = 83;
-  a9.a2 = 84;
-  a9.a3 = 85;
-  a9.a4 = 86;
-  a9.a5 = 87;
-  a9.a6 = 88;
-  a9.a7 = 89;
-  a9.a8 = 90;
-
-  final result = passStruct9BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(4095, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesInt4Or8ByteAlignedx10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned),
-            int Function(
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned)>(
-        "PassStruct9BytesInt4Or8ByteAlignedx10",
-        isLeaf: true);
-
-/// Argument is a single byte over a multiple of word size.
-/// With alignment rules taken into account size is 12 or 16 bytes.
-/// 10 struct arguments will exhaust available registers.
-///
-void testPassStruct9BytesInt4Or8ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct9BytesInt4Or8ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct12BytesHomogeneousFloatx6Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat),
-        double Function(
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat)>(
-    "PassStruct12BytesHomogeneousFloatx6",
-    isLeaf: true);
-
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// Struct arguments will exhaust available registers, and leave some empty.
-/// The last argument is to test whether arguments are backfilled.
-void testPassStruct12BytesHomogeneousFloatx6Leaf() {
-  final a0Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a5 = a5Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a1.a0 = 4.0;
-  a1.a1 = -5.0;
-  a1.a2 = 6.0;
-  a2.a0 = -7.0;
-  a2.a1 = 8.0;
-  a2.a2 = -9.0;
-  a3.a0 = 10.0;
-  a3.a1 = -11.0;
-  a3.a2 = 12.0;
-  a4.a0 = -13.0;
-  a4.a1 = 14.0;
-  a4.a2 = -15.0;
-  a5.a0 = 16.0;
-  a5.a1 = -17.0;
-  a5.a2 = 18.0;
-
-  final result =
-      passStruct12BytesHomogeneousFloatx6Leaf(a0, a1, a2, a3, a4, a5);
-
-  print("result = $result");
-
-  Expect.approxEquals(9.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-}
-
-final passStruct16BytesHomogeneousFloatx5Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat),
-        double Function(
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat)>(
-    "PassStruct16BytesHomogeneousFloatx5",
-    isLeaf: true);
-
-/// On Linux x64 argument is transferred on stack because it is over 16 bytes.
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStruct16BytesHomogeneousFloatx5Leaf() {
-  final a0Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a4 = a4Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8.0;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12.0;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16.0;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20.0;
-
-  final result = passStruct16BytesHomogeneousFloatx5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStruct16BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed),
-    double Function(
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed)>("PassStruct16BytesMixedx10", isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 8 byte aligned.
-void testPassStruct16BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-  a1.a0 = -3.0;
-  a1.a1 = 4;
-  a2.a0 = -5.0;
-  a2.a1 = 6;
-  a3.a0 = -7.0;
-  a3.a1 = 8;
-  a4.a0 = -9.0;
-  a4.a1 = 10;
-  a5.a0 = -11.0;
-  a5.a1 = 12;
-  a6.a0 = -13.0;
-  a6.a1 = 14;
-  a7.a0 = -15.0;
-  a7.a1 = 16;
-  a8.a0 = -17.0;
-  a8.a1 = 18;
-  a9.a0 = -19.0;
-  a9.a1 = 20;
-
-  final result =
-      passStruct16BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct16BytesMixed2x10Leaf = ffiTestFunctions.lookupFunction<
-    Float Function(
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2),
-    double Function(
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2)>("PassStruct16BytesMixed2x10", isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 4 byte aligned.
-void testPassStruct16BytesMixed2x10Leaf() {
-  final a0Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20;
-  a5.a0 = -21.0;
-  a5.a1 = 22.0;
-  a5.a2 = -23.0;
-  a5.a3 = 24;
-  a6.a0 = -25.0;
-  a6.a1 = 26.0;
-  a6.a2 = -27.0;
-  a6.a3 = 28;
-  a7.a0 = -29.0;
-  a7.a1 = 30.0;
-  a7.a2 = -31.0;
-  a7.a3 = 32;
-  a8.a0 = -33.0;
-  a8.a1 = 34.0;
-  a8.a2 = -35.0;
-  a8.a3 = 36;
-  a9.a0 = -37.0;
-  a9.a1 = 38.0;
-  a9.a2 = -39.0;
-  a9.a3 = 40;
-
-  final result =
-      passStruct16BytesMixed2x10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(20.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct17BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt),
-    int Function(
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt)>("PassStruct17BytesIntx10", isLeaf: true);
-
-/// Arguments are passed as pointer to copy on arm64.
-/// Tests that the memory allocated for copies are rounded up to word size.
-void testPassStruct17BytesIntx10Leaf() {
-  final a0Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct17BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct19BytesHomogeneousUint8x10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8),
-            int Function(
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8)>(
-        "PassStruct19BytesHomogeneousUint8x10",
-        isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is extended to the right size.
-///
-void testPassStruct19BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a0.a9 = 10;
-  a0.a10 = 11;
-  a0.a11 = 12;
-  a0.a12 = 13;
-  a0.a13 = 14;
-  a0.a14 = 15;
-  a0.a15 = 16;
-  a0.a16 = 17;
-  a0.a17 = 18;
-  a0.a18 = 19;
-  a1.a0 = 20;
-  a1.a1 = 21;
-  a1.a2 = 22;
-  a1.a3 = 23;
-  a1.a4 = 24;
-  a1.a5 = 25;
-  a1.a6 = 26;
-  a1.a7 = 27;
-  a1.a8 = 28;
-  a1.a9 = 29;
-  a1.a10 = 30;
-  a1.a11 = 31;
-  a1.a12 = 32;
-  a1.a13 = 33;
-  a1.a14 = 34;
-  a1.a15 = 35;
-  a1.a16 = 36;
-  a1.a17 = 37;
-  a1.a18 = 38;
-  a2.a0 = 39;
-  a2.a1 = 40;
-  a2.a2 = 41;
-  a2.a3 = 42;
-  a2.a4 = 43;
-  a2.a5 = 44;
-  a2.a6 = 45;
-  a2.a7 = 46;
-  a2.a8 = 47;
-  a2.a9 = 48;
-  a2.a10 = 49;
-  a2.a11 = 50;
-  a2.a12 = 51;
-  a2.a13 = 52;
-  a2.a14 = 53;
-  a2.a15 = 54;
-  a2.a16 = 55;
-  a2.a17 = 56;
-  a2.a18 = 57;
-  a3.a0 = 58;
-  a3.a1 = 59;
-  a3.a2 = 60;
-  a3.a3 = 61;
-  a3.a4 = 62;
-  a3.a5 = 63;
-  a3.a6 = 64;
-  a3.a7 = 65;
-  a3.a8 = 66;
-  a3.a9 = 67;
-  a3.a10 = 68;
-  a3.a11 = 69;
-  a3.a12 = 70;
-  a3.a13 = 71;
-  a3.a14 = 72;
-  a3.a15 = 73;
-  a3.a16 = 74;
-  a3.a17 = 75;
-  a3.a18 = 76;
-  a4.a0 = 77;
-  a4.a1 = 78;
-  a4.a2 = 79;
-  a4.a3 = 80;
-  a4.a4 = 81;
-  a4.a5 = 82;
-  a4.a6 = 83;
-  a4.a7 = 84;
-  a4.a8 = 85;
-  a4.a9 = 86;
-  a4.a10 = 87;
-  a4.a11 = 88;
-  a4.a12 = 89;
-  a4.a13 = 90;
-  a4.a14 = 91;
-  a4.a15 = 92;
-  a4.a16 = 93;
-  a4.a17 = 94;
-  a4.a18 = 95;
-  a5.a0 = 96;
-  a5.a1 = 97;
-  a5.a2 = 98;
-  a5.a3 = 99;
-  a5.a4 = 100;
-  a5.a5 = 101;
-  a5.a6 = 102;
-  a5.a7 = 103;
-  a5.a8 = 104;
-  a5.a9 = 105;
-  a5.a10 = 106;
-  a5.a11 = 107;
-  a5.a12 = 108;
-  a5.a13 = 109;
-  a5.a14 = 110;
-  a5.a15 = 111;
-  a5.a16 = 112;
-  a5.a17 = 113;
-  a5.a18 = 114;
-  a6.a0 = 115;
-  a6.a1 = 116;
-  a6.a2 = 117;
-  a6.a3 = 118;
-  a6.a4 = 119;
-  a6.a5 = 120;
-  a6.a6 = 121;
-  a6.a7 = 122;
-  a6.a8 = 123;
-  a6.a9 = 124;
-  a6.a10 = 125;
-  a6.a11 = 126;
-  a6.a12 = 127;
-  a6.a13 = 128;
-  a6.a14 = 129;
-  a6.a15 = 130;
-  a6.a16 = 131;
-  a6.a17 = 132;
-  a6.a18 = 133;
-  a7.a0 = 134;
-  a7.a1 = 135;
-  a7.a2 = 136;
-  a7.a3 = 137;
-  a7.a4 = 138;
-  a7.a5 = 139;
-  a7.a6 = 140;
-  a7.a7 = 141;
-  a7.a8 = 142;
-  a7.a9 = 143;
-  a7.a10 = 144;
-  a7.a11 = 145;
-  a7.a12 = 146;
-  a7.a13 = 147;
-  a7.a14 = 148;
-  a7.a15 = 149;
-  a7.a16 = 150;
-  a7.a17 = 151;
-  a7.a18 = 152;
-  a8.a0 = 153;
-  a8.a1 = 154;
-  a8.a2 = 155;
-  a8.a3 = 156;
-  a8.a4 = 157;
-  a8.a5 = 158;
-  a8.a6 = 159;
-  a8.a7 = 160;
-  a8.a8 = 161;
-  a8.a9 = 162;
-  a8.a10 = 163;
-  a8.a11 = 164;
-  a8.a12 = 165;
-  a8.a13 = 166;
-  a8.a14 = 167;
-  a8.a15 = 168;
-  a8.a16 = 169;
-  a8.a17 = 170;
-  a8.a18 = 171;
-  a9.a0 = 172;
-  a9.a1 = 173;
-  a9.a2 = 174;
-  a9.a3 = 175;
-  a9.a4 = 176;
-  a9.a5 = 177;
-  a9.a6 = 178;
-  a9.a7 = 179;
-  a9.a8 = 180;
-  a9.a9 = 181;
-  a9.a10 = 182;
-  a9.a11 = 183;
-  a9.a12 = 184;
-  a9.a13 = 185;
-  a9.a14 = 186;
-  a9.a15 = 187;
-  a9.a16 = 188;
-  a9.a17 = 189;
-  a9.a18 = 190;
-
-  final result = passStruct19BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(18145, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct20BytesHomogeneousInt32x10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int32 Function(
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32),
-            int Function(
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32)>(
-        "PassStruct20BytesHomogeneousInt32x10",
-        isLeaf: true);
-
-/// Argument too big to go into integer registers on arm64.
-/// The arguments are passed as pointers to copies.
-/// The amount of arguments exhausts the number of integer registers, such that
-/// pointers to copies are also passed on the stack.
-void testPassStruct20BytesHomogeneousInt32x10Leaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a0.a3 = 4;
-  a0.a4 = -5;
-  a1.a0 = 6;
-  a1.a1 = -7;
-  a1.a2 = 8;
-  a1.a3 = -9;
-  a1.a4 = 10;
-  a2.a0 = -11;
-  a2.a1 = 12;
-  a2.a2 = -13;
-  a2.a3 = 14;
-  a2.a4 = -15;
-  a3.a0 = 16;
-  a3.a1 = -17;
-  a3.a2 = 18;
-  a3.a3 = -19;
-  a3.a4 = 20;
-  a4.a0 = -21;
-  a4.a1 = 22;
-  a4.a2 = -23;
-  a4.a3 = 24;
-  a4.a4 = -25;
-  a5.a0 = 26;
-  a5.a1 = -27;
-  a5.a2 = 28;
-  a5.a3 = -29;
-  a5.a4 = 30;
-  a6.a0 = -31;
-  a6.a1 = 32;
-  a6.a2 = -33;
-  a6.a3 = 34;
-  a6.a4 = -35;
-  a7.a0 = 36;
-  a7.a1 = -37;
-  a7.a2 = 38;
-  a7.a3 = -39;
-  a7.a4 = 40;
-  a8.a0 = -41;
-  a8.a1 = 42;
-  a8.a2 = -43;
-  a8.a3 = 44;
-  a8.a4 = -45;
-  a9.a0 = 46;
-  a9.a1 = -47;
-  a9.a2 = 48;
-  a9.a3 = -49;
-  a9.a4 = 50;
-
-  final result = passStruct20BytesHomogeneousInt32x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(25, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-        Float Function(Struct20BytesHomogeneousFloat),
-        double Function(Struct20BytesHomogeneousFloat)>(
-    "PassStruct20BytesHomogeneousFloat",
-    isLeaf: true);
-
-/// Argument too big to go into FPU registers in hardfp and arm64.
-void testPassStruct20BytesHomogeneousFloatLeaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousFloat>();
-  final Struct20BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-
-  final result = passStruct20BytesHomogeneousFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(-3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct32BytesHomogeneousDoublex5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble),
-            double Function(
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble)>(
-        "PassStruct32BytesHomogeneousDoublex5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStruct32BytesHomogeneousDoublex5Leaf() {
-  final a0Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a4 = a4Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8.0;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12.0;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16.0;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20.0;
-
-  final result = passStruct32BytesHomogeneousDoublex5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStruct40BytesHomogeneousDoubleLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct40BytesHomogeneousDouble),
-        double Function(Struct40BytesHomogeneousDouble)>(
-    "PassStruct40BytesHomogeneousDouble",
-    isLeaf: true);
-
-/// Argument too big to go into FPU registers in arm64.
-void testPassStruct40BytesHomogeneousDoubleLeaf() {
-  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
-  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-
-  final result = passStruct40BytesHomogeneousDoubleLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(-3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct1024BytesHomogeneousUint64Leaf =
-    ffiTestFunctions.lookupFunction<
-            Uint64 Function(Struct1024BytesHomogeneousUint64),
-            int Function(Struct1024BytesHomogeneousUint64)>(
-        "PassStruct1024BytesHomogeneousUint64",
-        isLeaf: true);
-
-/// Test 1kb struct.
-void testPassStruct1024BytesHomogeneousUint64Leaf() {
-  final a0Pointer = calloc<Struct1024BytesHomogeneousUint64>();
-  final Struct1024BytesHomogeneousUint64 a0 = a0Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a0.a9 = 10;
-  a0.a10 = 11;
-  a0.a11 = 12;
-  a0.a12 = 13;
-  a0.a13 = 14;
-  a0.a14 = 15;
-  a0.a15 = 16;
-  a0.a16 = 17;
-  a0.a17 = 18;
-  a0.a18 = 19;
-  a0.a19 = 20;
-  a0.a20 = 21;
-  a0.a21 = 22;
-  a0.a22 = 23;
-  a0.a23 = 24;
-  a0.a24 = 25;
-  a0.a25 = 26;
-  a0.a26 = 27;
-  a0.a27 = 28;
-  a0.a28 = 29;
-  a0.a29 = 30;
-  a0.a30 = 31;
-  a0.a31 = 32;
-  a0.a32 = 33;
-  a0.a33 = 34;
-  a0.a34 = 35;
-  a0.a35 = 36;
-  a0.a36 = 37;
-  a0.a37 = 38;
-  a0.a38 = 39;
-  a0.a39 = 40;
-  a0.a40 = 41;
-  a0.a41 = 42;
-  a0.a42 = 43;
-  a0.a43 = 44;
-  a0.a44 = 45;
-  a0.a45 = 46;
-  a0.a46 = 47;
-  a0.a47 = 48;
-  a0.a48 = 49;
-  a0.a49 = 50;
-  a0.a50 = 51;
-  a0.a51 = 52;
-  a0.a52 = 53;
-  a0.a53 = 54;
-  a0.a54 = 55;
-  a0.a55 = 56;
-  a0.a56 = 57;
-  a0.a57 = 58;
-  a0.a58 = 59;
-  a0.a59 = 60;
-  a0.a60 = 61;
-  a0.a61 = 62;
-  a0.a62 = 63;
-  a0.a63 = 64;
-  a0.a64 = 65;
-  a0.a65 = 66;
-  a0.a66 = 67;
-  a0.a67 = 68;
-  a0.a68 = 69;
-  a0.a69 = 70;
-  a0.a70 = 71;
-  a0.a71 = 72;
-  a0.a72 = 73;
-  a0.a73 = 74;
-  a0.a74 = 75;
-  a0.a75 = 76;
-  a0.a76 = 77;
-  a0.a77 = 78;
-  a0.a78 = 79;
-  a0.a79 = 80;
-  a0.a80 = 81;
-  a0.a81 = 82;
-  a0.a82 = 83;
-  a0.a83 = 84;
-  a0.a84 = 85;
-  a0.a85 = 86;
-  a0.a86 = 87;
-  a0.a87 = 88;
-  a0.a88 = 89;
-  a0.a89 = 90;
-  a0.a90 = 91;
-  a0.a91 = 92;
-  a0.a92 = 93;
-  a0.a93 = 94;
-  a0.a94 = 95;
-  a0.a95 = 96;
-  a0.a96 = 97;
-  a0.a97 = 98;
-  a0.a98 = 99;
-  a0.a99 = 100;
-  a0.a100 = 101;
-  a0.a101 = 102;
-  a0.a102 = 103;
-  a0.a103 = 104;
-  a0.a104 = 105;
-  a0.a105 = 106;
-  a0.a106 = 107;
-  a0.a107 = 108;
-  a0.a108 = 109;
-  a0.a109 = 110;
-  a0.a110 = 111;
-  a0.a111 = 112;
-  a0.a112 = 113;
-  a0.a113 = 114;
-  a0.a114 = 115;
-  a0.a115 = 116;
-  a0.a116 = 117;
-  a0.a117 = 118;
-  a0.a118 = 119;
-  a0.a119 = 120;
-  a0.a120 = 121;
-  a0.a121 = 122;
-  a0.a122 = 123;
-  a0.a123 = 124;
-  a0.a124 = 125;
-  a0.a125 = 126;
-  a0.a126 = 127;
-  a0.a127 = 128;
-
-  final result = passStruct1024BytesHomogeneousUint64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(8256, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf =
-    ffiTestFunctions.lookupFunction<
-            Float Function(
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float),
-            double Function(
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double)>("PassFloatStruct16BytesHomogeneousFloatFloatStruct1",
-        isLeaf: true);
-
-/// Tests the alignment of structs in FPU registers and backfilling.
-void testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf() {
-  double a0;
-  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
-  double a2;
-  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
-  double a4;
-  final a5Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a5 = a5Pointer.ref;
-  double a6;
-  final a7Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1.0;
-  a1.a0 = 2.0;
-  a1.a1 = -3.0;
-  a1.a2 = 4.0;
-  a1.a3 = -5.0;
-  a2 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a3.a2 = -9.0;
-  a3.a3 = 10.0;
-  a4 = -11.0;
-  a5.a0 = 12.0;
-  a5.a1 = -13.0;
-  a5.a2 = 14.0;
-  a5.a3 = -15.0;
-  a6 = 16.0;
-  a7.a0 = -17.0;
-  a7.a1 = 18.0;
-  a7.a2 = -19.0;
-  a7.a3 = 20.0;
-  a8 = -21.0;
-
-  final result = passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-11.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float),
-            double Function(
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double)>("PassFloatStruct32BytesHomogeneousDoubleFloatStruct",
-        isLeaf: true);
-
-/// Tests the alignment of structs in FPU registers and backfilling.
-void testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf() {
-  double a0;
-  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
-  double a2;
-  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
-  double a4;
-  final a5Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a5 = a5Pointer.ref;
-  double a6;
-  final a7Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1.0;
-  a1.a0 = 2.0;
-  a1.a1 = -3.0;
-  a1.a2 = 4.0;
-  a1.a3 = -5.0;
-  a2 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a3.a2 = -9.0;
-  a3.a3 = 10.0;
-  a4 = -11.0;
-  a5.a0 = 12.0;
-  a5.a1 = -13.0;
-  a5.a2 = 14.0;
-  a5.a3 = -15.0;
-  a6 = 16.0;
-  a7.a0 = -17.0;
-  a7.a1 = 18.0;
-  a7.a2 = -19.0;
-  a7.a3 = 20.0;
-  a8 = -21.0;
-
-  final result = passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-11.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(Int8, Struct16BytesMixed, Int8, Struct16BytesMixed,
-                Int8, Struct16BytesMixed, Int8, Struct16BytesMixed, Int8),
-            double Function(
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int)>("PassInt8Struct16BytesMixedInt8Struct16BytesMixedIn",
-        isLeaf: true);
-
-/// Tests the alignment of structs in integers registers and on the stack.
-/// Arm32 aligns this struct at 8.
-/// Also, arm32 allocates the second struct partially in registers, partially
-/// on stack.
-/// Test backfilling of integer registers.
-void testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a1 = a1Pointer.ref;
-  int a2;
-  final a3Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a3 = a3Pointer.ref;
-  int a4;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  int a6;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  int a8;
-
-  a0 = -1;
-  a1.a0 = 2.0;
-  a1.a1 = -3;
-  a2 = 4;
-  a3.a0 = -5.0;
-  a3.a1 = 6;
-  a4 = -7;
-  a5.a0 = 8.0;
-  a5.a1 = -9;
-  a6 = 10;
-  a7.a0 = -11.0;
-  a7.a1 = 12;
-  a8 = -13;
-
-  final result = passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-7.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passDoublex6Struct16BytesMixedx4Int32Leaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Int32),
-        double Function(
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            int)>("PassDoublex6Struct16BytesMixedx4Int32", isLeaf: true);
-
-/// On Linux x64, it will exhaust xmm registers first, after 6 doubles and 2
-/// structs. The rest of the structs will go on the stack.
-/// The int will be backfilled into the int register.
-void testPassDoublex6Struct16BytesMixedx4Int32Leaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-  double a5;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a9 = a9Pointer.ref;
-  int a10;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-  a5 = 6.0;
-  a6.a0 = -7.0;
-  a6.a1 = 8;
-  a7.a0 = -9.0;
-  a7.a1 = 10;
-  a8.a0 = -11.0;
-  a8.a1 = 12;
-  a9.a0 = -13.0;
-  a9.a1 = 14;
-  a10 = -15;
-
-  final result = passDoublex6Struct16BytesMixedx4Int32Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
-
-  print("result = $result");
-
-  Expect.approxEquals(-8.0, result);
-
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passInt32x4Struct16BytesMixedx4DoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(Int32, Int32, Int32, Int32, Struct16BytesMixed,
-            Struct16BytesMixed, Struct16BytesMixed, Struct16BytesMixed, Double),
-        double Function(
-            int,
-            int,
-            int,
-            int,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            double)>("PassInt32x4Struct16BytesMixedx4Double", isLeaf: true);
-
-/// On Linux x64, it will exhaust int registers first.
-/// The rest of the structs will go on the stack.
-/// The double will be backfilled into the xmm register.
-void testPassInt32x4Struct16BytesMixedx4DoubleLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  final a4Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4.a0 = -5.0;
-  a4.a1 = 6;
-  a5.a0 = -7.0;
-  a5.a1 = 8;
-  a6.a0 = -9.0;
-  a6.a1 = 10;
-  a7.a0 = -11.0;
-  a7.a1 = 12;
-  a8 = -13.0;
-
-  final result = passInt32x4Struct16BytesMixedx4DoubleLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-7.0, result);
-
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(Struct40BytesHomogeneousDouble,
-                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat),
-            double Function(Struct40BytesHomogeneousDouble,
-                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat)>(
-        "PassStruct40BytesHomogeneousDoubleStruct4BytesHomo",
-        isLeaf: true);
-
-/// On various architectures, first struct is allocated on stack.
-/// Check that the other two arguments are allocated on registers.
-void testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf() {
-  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
-  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-  a1.a0 = 6;
-  a1.a1 = -7;
-  a2.a0 = 8.0;
-  a2.a1 = -9.0;
-
-  final result =
-      passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(-5.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-}
-
-final passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Int64,
-            Int8,
-            Struct1ByteInt,
-            Int64,
-            Int8,
-            Struct4BytesHomogeneousInt16,
-            Int64,
-            Int8,
-            Struct8BytesInt,
-            Int64,
-            Int8,
-            Struct8BytesHomogeneousFloat,
-            Int64,
-            Int8,
-            Struct8BytesMixed,
-            Int64,
-            Int8,
-            StructAlignmentInt16,
-            Int64,
-            Int8,
-            StructAlignmentInt32,
-            Int64,
-            Int8,
-            StructAlignmentInt64),
-        double Function(
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            int,
-            int,
-            Struct1ByteInt,
-            int,
-            int,
-            Struct4BytesHomogeneousInt16,
-            int,
-            int,
-            Struct8BytesInt,
-            int,
-            int,
-            Struct8BytesHomogeneousFloat,
-            int,
-            int,
-            Struct8BytesMixed,
-            int,
-            int,
-            StructAlignmentInt16,
-            int,
-            int,
-            StructAlignmentInt32,
-            int,
-            int,
-            StructAlignmentInt64)>("PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  double a8;
-  double a9;
-  double a10;
-  double a11;
-  double a12;
-  double a13;
-  double a14;
-  double a15;
-  int a16;
-  int a17;
-  final a18Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a18 = a18Pointer.ref;
-  int a19;
-  int a20;
-  final a21Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a21 = a21Pointer.ref;
-  int a22;
-  int a23;
-  final a24Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a24 = a24Pointer.ref;
-  int a25;
-  int a26;
-  final a27Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a27 = a27Pointer.ref;
-  int a28;
-  int a29;
-  final a30Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a30 = a30Pointer.ref;
-  int a31;
-  int a32;
-  final a33Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a33 = a33Pointer.ref;
-  int a34;
-  int a35;
-  final a36Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a36 = a36Pointer.ref;
-  int a37;
-  int a38;
-  final a39Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a39 = a39Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8 = -9.0;
-  a9 = 10.0;
-  a10 = -11.0;
-  a11 = 12.0;
-  a12 = -13.0;
-  a13 = 14.0;
-  a14 = -15.0;
-  a15 = 16.0;
-  a16 = -17;
-  a17 = 18;
-  a18.a0 = -19;
-  a19 = 20;
-  a20 = -21;
-  a21.a0 = 22;
-  a21.a1 = -23;
-  a22 = 24;
-  a23 = -25;
-  a24.a0 = 26;
-  a24.a1 = -27;
-  a24.a2 = 28;
-  a25 = -29;
-  a26 = 30;
-  a27.a0 = -31.0;
-  a27.a1 = 32.0;
-  a28 = -33;
-  a29 = 34;
-  a30.a0 = -35.0;
-  a30.a1 = 36;
-  a30.a2 = -37;
-  a31 = 38;
-  a32 = -39;
-  a33.a0 = 40;
-  a33.a1 = -41;
-  a33.a2 = 42;
-  a34 = -43;
-  a35 = 44;
-  a36.a0 = -45;
-  a36.a1 = 46;
-  a36.a2 = -47;
-  a37 = 48;
-  a38 = -49;
-  a39.a0 = 50;
-  a39.a1 = -51;
-  a39.a2 = 52;
-
-  final result = passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf(
-      a0,
-      a1,
-      a2,
-      a3,
-      a4,
-      a5,
-      a6,
-      a7,
-      a8,
-      a9,
-      a10,
-      a11,
-      a12,
-      a13,
-      a14,
-      a15,
-      a16,
-      a17,
-      a18,
-      a19,
-      a20,
-      a21,
-      a22,
-      a23,
-      a24,
-      a25,
-      a26,
-      a27,
-      a28,
-      a29,
-      a30,
-      a31,
-      a32,
-      a33,
-      a34,
-      a35,
-      a36,
-      a37,
-      a38,
-      a39);
-
-  print("result = $result");
-
-  Expect.approxEquals(26.0, result);
-
-  calloc.free(a18Pointer);
-  calloc.free(a21Pointer);
-  calloc.free(a24Pointer);
-  calloc.free(a27Pointer);
-  calloc.free(a30Pointer);
-  calloc.free(a33Pointer);
-  calloc.free(a36Pointer);
-  calloc.free(a39Pointer);
-}
-
-final passStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt16),
-    int Function(
-        StructAlignmentInt16)>("PassStructAlignmentInt16", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testPassStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt16Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt32),
-    int Function(
-        StructAlignmentInt32)>("PassStructAlignmentInt32", isLeaf: true);
-
-/// Test alignment and padding of 32 byte int within struct.
-void testPassStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt64),
-    int Function(
-        StructAlignmentInt64)>("PassStructAlignmentInt64", isLeaf: true);
-
-/// Test alignment and padding of 64 byte int within struct.
-void testPassStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct8BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt),
-    int Function(
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt)>("PassStruct8BytesNestedIntx10", isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust registers on all platforms.
-void testPassStruct8BytesNestedIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3;
-  a0.a1.a1 = 4;
-  a1.a0.a0 = -5;
-  a1.a0.a1 = 6;
-  a1.a1.a0 = -7;
-  a1.a1.a1 = 8;
-  a2.a0.a0 = -9;
-  a2.a0.a1 = 10;
-  a2.a1.a0 = -11;
-  a2.a1.a1 = 12;
-  a3.a0.a0 = -13;
-  a3.a0.a1 = 14;
-  a3.a1.a0 = -15;
-  a3.a1.a1 = 16;
-  a4.a0.a0 = -17;
-  a4.a0.a1 = 18;
-  a4.a1.a0 = -19;
-  a4.a1.a1 = 20;
-  a5.a0.a0 = -21;
-  a5.a0.a1 = 22;
-  a5.a1.a0 = -23;
-  a5.a1.a1 = 24;
-  a6.a0.a0 = -25;
-  a6.a0.a1 = 26;
-  a6.a1.a0 = -27;
-  a6.a1.a1 = 28;
-  a7.a0.a0 = -29;
-  a7.a0.a1 = 30;
-  a7.a1.a0 = -31;
-  a7.a1.a1 = 32;
-  a8.a0.a0 = -33;
-  a8.a0.a1 = 34;
-  a8.a1.a0 = -35;
-  a8.a1.a1 = 36;
-  a9.a0.a0 = -37;
-  a9.a0.a1 = 38;
-  a9.a1.a0 = -39;
-  a9.a1.a1 = 40;
-
-  final result =
-      passStruct8BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(20, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat),
-        double Function(
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat)>("PassStruct8BytesNestedFloatx10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust fpu registers on all platforms.
-void testPassStruct8BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1.a0 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a1.a0 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a1.a0 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a1.a0 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a1.a0 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a1.a0 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a1.a0 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a1.a0 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a1.a0 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a1.a0 = 20.0;
-
-  final result = passStruct8BytesNestedFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedFloat2x10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2),
-        double Function(
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2)>("PassStruct8BytesNestedFloat2x10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust fpu registers on all platforms.
-/// The nesting is irregular, testing homogenous float rules on arm and arm64,
-/// and the fpu register usage on x64.
-void testPassStruct8BytesNestedFloat2x10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a1 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a1 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a1 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a1 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a1 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a1 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a1 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a1 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a1 = 20.0;
-
-  final result = passStruct8BytesNestedFloat2x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedMixedx10Leaf = ffiTestFunctions.lookupFunction<
-        Double Function(
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed),
-        double Function(
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed)>("PassStruct8BytesNestedMixedx10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust all registers on all platforms.
-void testPassStruct8BytesNestedMixedx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3.0;
-  a1.a0.a0 = 4;
-  a1.a0.a1 = -5;
-  a1.a1.a0 = 6.0;
-  a2.a0.a0 = -7;
-  a2.a0.a1 = 8;
-  a2.a1.a0 = -9.0;
-  a3.a0.a0 = 10;
-  a3.a0.a1 = -11;
-  a3.a1.a0 = 12.0;
-  a4.a0.a0 = -13;
-  a4.a0.a1 = 14;
-  a4.a1.a0 = -15.0;
-  a5.a0.a0 = 16;
-  a5.a0.a1 = -17;
-  a5.a1.a0 = 18.0;
-  a6.a0.a0 = -19;
-  a6.a0.a1 = 20;
-  a6.a1.a0 = -21.0;
-  a7.a0.a0 = 22;
-  a7.a0.a1 = -23;
-  a7.a1.a0 = 24.0;
-  a8.a0.a0 = -25;
-  a8.a0.a1 = 26;
-  a8.a1.a0 = -27.0;
-  a9.a0.a0 = 28;
-  a9.a0.a1 = -29;
-  a9.a1.a0 = 30.0;
-
-  final result = passStruct8BytesNestedMixedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct16BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(Struct16BytesNestedInt, Struct16BytesNestedInt),
-    int Function(Struct16BytesNestedInt,
-        Struct16BytesNestedInt)>("PassStruct16BytesNestedIntx2", isLeaf: true);
-
-/// Deeper nested struct to test recursive member access.
-void testPassStruct16BytesNestedIntx2Leaf() {
-  final a0Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0 = -1;
-  a0.a0.a0.a1 = 2;
-  a0.a0.a1.a0 = -3;
-  a0.a0.a1.a1 = 4;
-  a0.a1.a0.a0 = -5;
-  a0.a1.a0.a1 = 6;
-  a0.a1.a1.a0 = -7;
-  a0.a1.a1.a1 = 8;
-  a1.a0.a0.a0 = -9;
-  a1.a0.a0.a1 = 10;
-  a1.a0.a1.a0 = -11;
-  a1.a0.a1.a1 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15;
-  a1.a1.a1.a1 = 16;
-
-  final result = passStruct16BytesNestedIntx2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(8, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final passStruct32BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(Struct32BytesNestedInt, Struct32BytesNestedInt),
-    int Function(Struct32BytesNestedInt,
-        Struct32BytesNestedInt)>("PassStruct32BytesNestedIntx2", isLeaf: true);
-
-/// Even deeper nested struct to test recursive member access.
-void testPassStruct32BytesNestedIntx2Leaf() {
-  final a0Pointer = calloc<Struct32BytesNestedInt>();
-  final Struct32BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct32BytesNestedInt>();
-  final Struct32BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0.a0 = -1;
-  a0.a0.a0.a0.a1 = 2;
-  a0.a0.a0.a1.a0 = -3;
-  a0.a0.a0.a1.a1 = 4;
-  a0.a0.a1.a0.a0 = -5;
-  a0.a0.a1.a0.a1 = 6;
-  a0.a0.a1.a1.a0 = -7;
-  a0.a0.a1.a1.a1 = 8;
-  a0.a1.a0.a0.a0 = -9;
-  a0.a1.a0.a0.a1 = 10;
-  a0.a1.a0.a1.a0 = -11;
-  a0.a1.a0.a1.a1 = 12;
-  a0.a1.a1.a0.a0 = -13;
-  a0.a1.a1.a0.a1 = 14;
-  a0.a1.a1.a1.a0 = -15;
-  a0.a1.a1.a1.a1 = 16;
-  a1.a0.a0.a0.a0 = -17;
-  a1.a0.a0.a0.a1 = 18;
-  a1.a0.a0.a1.a0 = -19;
-  a1.a0.a0.a1.a1 = 20;
-  a1.a0.a1.a0.a0 = -21;
-  a1.a0.a1.a0.a1 = 22;
-  a1.a0.a1.a1.a0 = -23;
-  a1.a0.a1.a1.a1 = 24;
-  a1.a1.a0.a0.a0 = -25;
-  a1.a1.a0.a0.a1 = 26;
-  a1.a1.a0.a1.a0 = -27;
-  a1.a1.a0.a1.a1 = 28;
-  a1.a1.a1.a0.a0 = -29;
-  a1.a1.a1.a0.a1 = 30;
-  a1.a1.a1.a1.a0 = -31;
-  a1.a1.a1.a1.a1 = 32;
-
-  final result = passStruct32BytesNestedIntx2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(16, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt16Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt16),
-            int Function(StructNestedIntStructAlignmentInt16)>(
-        "PassStructNestedIntStructAlignmentInt16",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 16 byte int.
-void testPassStructNestedIntStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt16>();
-  final StructNestedIntStructAlignmentInt16 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt16Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt32Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt32),
-            int Function(StructNestedIntStructAlignmentInt32)>(
-        "PassStructNestedIntStructAlignmentInt32",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 32 byte int.
-void testPassStructNestedIntStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt32>();
-  final StructNestedIntStructAlignmentInt32 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt64Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt64),
-            int Function(StructNestedIntStructAlignmentInt64)>(
-        "PassStructNestedIntStructAlignmentInt64",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 64 byte int.
-void testPassStructNestedIntStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt64>();
-  final StructNestedIntStructAlignmentInt64 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIrregularEvenBiggerx4Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger),
-            double Function(
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger)>(
-        "PassStructNestedIrregularEvenBiggerx4",
-        isLeaf: true);
-
-/// Return big irregular struct as smoke test.
-void testPassStructNestedIrregularEvenBiggerx4Leaf() {
-  final a0Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a3 = a3Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1.a0.a0 = 2;
-  a0.a1.a0.a1.a0.a0 = -3;
-  a0.a1.a0.a1.a0.a1 = 4;
-  a0.a1.a0.a1.a1.a0 = -5.0;
-  a0.a1.a0.a2 = 6;
-  a0.a1.a0.a3.a0.a0 = -7.0;
-  a0.a1.a0.a3.a1 = 8.0;
-  a0.a1.a0.a4 = 9;
-  a0.a1.a0.a5.a0.a0 = 10.0;
-  a0.a1.a0.a5.a1.a0 = -11.0;
-  a0.a1.a0.a6 = 12;
-  a0.a1.a1.a0.a0 = -13;
-  a0.a1.a1.a0.a1 = 14;
-  a0.a1.a1.a1.a0 = -15.0;
-  a0.a1.a2 = 16.0;
-  a0.a1.a3 = -17.0;
-  a0.a2.a0.a0 = 18;
-  a0.a2.a0.a1.a0.a0 = -19;
-  a0.a2.a0.a1.a0.a1 = 20;
-  a0.a2.a0.a1.a1.a0 = -21.0;
-  a0.a2.a0.a2 = 22;
-  a0.a2.a0.a3.a0.a0 = -23.0;
-  a0.a2.a0.a3.a1 = 24.0;
-  a0.a2.a0.a4 = 25;
-  a0.a2.a0.a5.a0.a0 = 26.0;
-  a0.a2.a0.a5.a1.a0 = -27.0;
-  a0.a2.a0.a6 = 28;
-  a0.a2.a1.a0.a0 = -29;
-  a0.a2.a1.a0.a1 = 30;
-  a0.a2.a1.a1.a0 = -31.0;
-  a0.a2.a2 = 32.0;
-  a0.a2.a3 = -33.0;
-  a0.a3 = 34.0;
-  a1.a0 = 35;
-  a1.a1.a0.a0 = 36;
-  a1.a1.a0.a1.a0.a0 = -37;
-  a1.a1.a0.a1.a0.a1 = 38;
-  a1.a1.a0.a1.a1.a0 = -39.0;
-  a1.a1.a0.a2 = 40;
-  a1.a1.a0.a3.a0.a0 = -41.0;
-  a1.a1.a0.a3.a1 = 42.0;
-  a1.a1.a0.a4 = 43;
-  a1.a1.a0.a5.a0.a0 = 44.0;
-  a1.a1.a0.a5.a1.a0 = -45.0;
-  a1.a1.a0.a6 = 46;
-  a1.a1.a1.a0.a0 = -47;
-  a1.a1.a1.a0.a1 = 48;
-  a1.a1.a1.a1.a0 = -49.0;
-  a1.a1.a2 = 50.0;
-  a1.a1.a3 = -51.0;
-  a1.a2.a0.a0 = 52;
-  a1.a2.a0.a1.a0.a0 = -53;
-  a1.a2.a0.a1.a0.a1 = 54;
-  a1.a2.a0.a1.a1.a0 = -55.0;
-  a1.a2.a0.a2 = 56;
-  a1.a2.a0.a3.a0.a0 = -57.0;
-  a1.a2.a0.a3.a1 = 58.0;
-  a1.a2.a0.a4 = 59;
-  a1.a2.a0.a5.a0.a0 = 60.0;
-  a1.a2.a0.a5.a1.a0 = -61.0;
-  a1.a2.a0.a6 = 62;
-  a1.a2.a1.a0.a0 = -63;
-  a1.a2.a1.a0.a1 = 64;
-  a1.a2.a1.a1.a0 = -65.0;
-  a1.a2.a2 = 66.0;
-  a1.a2.a3 = -67.0;
-  a1.a3 = 68.0;
-  a2.a0 = 69;
-  a2.a1.a0.a0 = 70;
-  a2.a1.a0.a1.a0.a0 = -71;
-  a2.a1.a0.a1.a0.a1 = 72;
-  a2.a1.a0.a1.a1.a0 = -73.0;
-  a2.a1.a0.a2 = 74;
-  a2.a1.a0.a3.a0.a0 = -75.0;
-  a2.a1.a0.a3.a1 = 76.0;
-  a2.a1.a0.a4 = 77;
-  a2.a1.a0.a5.a0.a0 = 78.0;
-  a2.a1.a0.a5.a1.a0 = -79.0;
-  a2.a1.a0.a6 = 80;
-  a2.a1.a1.a0.a0 = -81;
-  a2.a1.a1.a0.a1 = 82;
-  a2.a1.a1.a1.a0 = -83.0;
-  a2.a1.a2 = 84.0;
-  a2.a1.a3 = -85.0;
-  a2.a2.a0.a0 = 86;
-  a2.a2.a0.a1.a0.a0 = -87;
-  a2.a2.a0.a1.a0.a1 = 88;
-  a2.a2.a0.a1.a1.a0 = -89.0;
-  a2.a2.a0.a2 = 90;
-  a2.a2.a0.a3.a0.a0 = -91.0;
-  a2.a2.a0.a3.a1 = 92.0;
-  a2.a2.a0.a4 = 93;
-  a2.a2.a0.a5.a0.a0 = 94.0;
-  a2.a2.a0.a5.a1.a0 = -95.0;
-  a2.a2.a0.a6 = 96;
-  a2.a2.a1.a0.a0 = -97;
-  a2.a2.a1.a0.a1 = 98;
-  a2.a2.a1.a1.a0 = -99.0;
-  a2.a2.a2 = 100.0;
-  a2.a2.a3 = -101.0;
-  a2.a3 = 102.0;
-  a3.a0 = 103;
-  a3.a1.a0.a0 = 104;
-  a3.a1.a0.a1.a0.a0 = -105;
-  a3.a1.a0.a1.a0.a1 = 106;
-  a3.a1.a0.a1.a1.a0 = -107.0;
-  a3.a1.a0.a2 = 108;
-  a3.a1.a0.a3.a0.a0 = -109.0;
-  a3.a1.a0.a3.a1 = 110.0;
-  a3.a1.a0.a4 = 111;
-  a3.a1.a0.a5.a0.a0 = 112.0;
-  a3.a1.a0.a5.a1.a0 = -113.0;
-  a3.a1.a0.a6 = 114;
-  a3.a1.a1.a0.a0 = -115;
-  a3.a1.a1.a0.a1 = 116;
-  a3.a1.a1.a1.a0 = -117.0;
-  a3.a1.a2 = 118.0;
-  a3.a1.a3 = -119.0;
-  a3.a2.a0.a0 = 120;
-  a3.a2.a0.a1.a0.a0 = -121;
-  a3.a2.a0.a1.a0.a1 = 122;
-  a3.a2.a0.a1.a1.a0 = -123.0;
-  a3.a2.a0.a2 = 124;
-  a3.a2.a0.a3.a0.a0 = -125.0;
-  a3.a2.a0.a3.a1 = 126.0;
-  a3.a2.a0.a4 = 127;
-  a3.a2.a0.a5.a0.a0 = 128.0;
-  a3.a2.a0.a5.a1.a0 = -129.0;
-  a3.a2.a0.a6 = 130;
-  a3.a2.a1.a0.a0 = -131;
-  a3.a2.a1.a0.a1 = 132;
-  a3.a2.a1.a1.a0 = -133.0;
-  a3.a2.a2 = 134.0;
-  a3.a2.a3 = -135.0;
-  a3.a3 = 136.0;
-
-  final result = passStructNestedIrregularEvenBiggerx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(1572.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStruct8BytesInlineArrayIntx4Leaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt),
-        int Function(
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt)>("PassStruct8BytesInlineArrayIntx4",
-    isLeaf: true);
-
-/// Simple struct with inline array.
-void testPassStruct8BytesInlineArrayIntx4Leaf() {
-  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a3 = a3Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-  a1.a0[0] = 9;
-  a1.a0[1] = 10;
-  a1.a0[2] = 11;
-  a1.a0[3] = 12;
-  a1.a0[4] = 13;
-  a1.a0[5] = 14;
-  a1.a0[6] = 15;
-  a1.a0[7] = 16;
-  a2.a0[0] = 17;
-  a2.a0[1] = 18;
-  a2.a0[2] = 19;
-  a2.a0[3] = 20;
-  a2.a0[4] = 21;
-  a2.a0[5] = 22;
-  a2.a0[6] = 23;
-  a2.a0[7] = 24;
-  a3.a0[0] = 25;
-  a3.a0[1] = 26;
-  a3.a0[2] = 27;
-  a3.a0[3] = 28;
-  a3.a0[4] = 29;
-  a3.a0[5] = 30;
-  a3.a0[6] = 31;
-  a3.a0[7] = 32;
-
-  final result = passStruct8BytesInlineArrayIntx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(528, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStructInlineArrayIrregularx4Leaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(StructInlineArrayIrregular, StructInlineArrayIrregular,
-            StructInlineArrayIrregular, StructInlineArrayIrregular),
-        int Function(
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular)>("PassStructInlineArrayIrregularx4",
-    isLeaf: true);
-
-/// Irregular struct with inline array.
-void testPassStructInlineArrayIrregularx4Leaf() {
-  final a0Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a3 = a3Pointer.ref;
-
-  a0.a0[0].a0 = -1;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3;
-  a0.a0[1].a1 = 4;
-  a0.a1 = 5;
-  a1.a0[0].a0 = 6;
-  a1.a0[0].a1 = -7;
-  a1.a0[1].a0 = 8;
-  a1.a0[1].a1 = -9;
-  a1.a1 = 10;
-  a2.a0[0].a0 = -11;
-  a2.a0[0].a1 = 12;
-  a2.a0[1].a0 = -13;
-  a2.a0[1].a1 = 14;
-  a2.a1 = 15;
-  a3.a0[0].a0 = 16;
-  a3.a0[0].a1 = -17;
-  a3.a0[1].a0 = 18;
-  a3.a0[1].a1 = -19;
-  a3.a1 = 20;
-
-  final result = passStructInlineArrayIrregularx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(50, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStructInlineArray100BytesLeaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(StructInlineArray100Bytes),
-        int Function(StructInlineArray100Bytes)>(
-    "PassStructInlineArray100Bytes",
-    isLeaf: true);
-
-/// Regular larger struct with inline array.
-void testPassStructInlineArray100BytesLeaf() {
-  final a0Pointer = calloc<StructInlineArray100Bytes>();
-  final StructInlineArray100Bytes a0 = a0Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-  a0.a0[8] = 9;
-  a0.a0[9] = 10;
-  a0.a0[10] = 11;
-  a0.a0[11] = 12;
-  a0.a0[12] = 13;
-  a0.a0[13] = 14;
-  a0.a0[14] = 15;
-  a0.a0[15] = 16;
-  a0.a0[16] = 17;
-  a0.a0[17] = 18;
-  a0.a0[18] = 19;
-  a0.a0[19] = 20;
-  a0.a0[20] = 21;
-  a0.a0[21] = 22;
-  a0.a0[22] = 23;
-  a0.a0[23] = 24;
-  a0.a0[24] = 25;
-  a0.a0[25] = 26;
-  a0.a0[26] = 27;
-  a0.a0[27] = 28;
-  a0.a0[28] = 29;
-  a0.a0[29] = 30;
-  a0.a0[30] = 31;
-  a0.a0[31] = 32;
-  a0.a0[32] = 33;
-  a0.a0[33] = 34;
-  a0.a0[34] = 35;
-  a0.a0[35] = 36;
-  a0.a0[36] = 37;
-  a0.a0[37] = 38;
-  a0.a0[38] = 39;
-  a0.a0[39] = 40;
-  a0.a0[40] = 41;
-  a0.a0[41] = 42;
-  a0.a0[42] = 43;
-  a0.a0[43] = 44;
-  a0.a0[44] = 45;
-  a0.a0[45] = 46;
-  a0.a0[46] = 47;
-  a0.a0[47] = 48;
-  a0.a0[48] = 49;
-  a0.a0[49] = 50;
-  a0.a0[50] = 51;
-  a0.a0[51] = 52;
-  a0.a0[52] = 53;
-  a0.a0[53] = 54;
-  a0.a0[54] = 55;
-  a0.a0[55] = 56;
-  a0.a0[56] = 57;
-  a0.a0[57] = 58;
-  a0.a0[58] = 59;
-  a0.a0[59] = 60;
-  a0.a0[60] = 61;
-  a0.a0[61] = 62;
-  a0.a0[62] = 63;
-  a0.a0[63] = 64;
-  a0.a0[64] = 65;
-  a0.a0[65] = 66;
-  a0.a0[66] = 67;
-  a0.a0[67] = 68;
-  a0.a0[68] = 69;
-  a0.a0[69] = 70;
-  a0.a0[70] = 71;
-  a0.a0[71] = 72;
-  a0.a0[72] = 73;
-  a0.a0[73] = 74;
-  a0.a0[74] = 75;
-  a0.a0[75] = 76;
-  a0.a0[76] = 77;
-  a0.a0[77] = 78;
-  a0.a0[78] = 79;
-  a0.a0[79] = 80;
-  a0.a0[80] = 81;
-  a0.a0[81] = 82;
-  a0.a0[82] = 83;
-  a0.a0[83] = 84;
-  a0.a0[84] = 85;
-  a0.a0[85] = 86;
-  a0.a0[86] = 87;
-  a0.a0[87] = 88;
-  a0.a0[88] = 89;
-  a0.a0[89] = 90;
-  a0.a0[90] = 91;
-  a0.a0[91] = 92;
-  a0.a0[92] = 93;
-  a0.a0[93] = 94;
-  a0.a0[94] = 95;
-  a0.a0[95] = 96;
-  a0.a0[96] = 97;
-  a0.a0[97] = 98;
-  a0.a0[98] = 99;
-  a0.a0[99] = 100;
-
-  final result = passStructInlineArray100BytesLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(5050, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructStruct16BytesHomogeneousFloat2x5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Float Function(
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2),
-            double Function(
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2)>(
-        "PassStructStruct16BytesHomogeneousFloat2x5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStructStruct16BytesHomogeneousFloat2x5Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a4 = a4Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-  a1.a0.a0 = -5.0;
-  a1.a1[0].a0 = 6.0;
-  a1.a1[1].a0 = -7.0;
-  a1.a2 = 8.0;
-  a2.a0.a0 = -9.0;
-  a2.a1[0].a0 = 10.0;
-  a2.a1[1].a0 = -11.0;
-  a2.a2 = 12.0;
-  a3.a0.a0 = -13.0;
-  a3.a1[0].a0 = 14.0;
-  a3.a1[1].a0 = -15.0;
-  a3.a2 = 16.0;
-  a4.a0.a0 = -17.0;
-  a4.a1[0].a0 = 18.0;
-  a4.a1[1].a0 = -19.0;
-  a4.a2 = 20.0;
-
-  final result =
-      passStructStruct16BytesHomogeneousFloat2x5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStructStruct32BytesHomogeneousDouble2x5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2),
-            double Function(
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2)>(
-        "PassStructStruct32BytesHomogeneousDouble2x5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStructStruct32BytesHomogeneousDouble2x5Leaf() {
-  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a4 = a4Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-  a1.a0.a0 = -5.0;
-  a1.a1[0].a0 = 6.0;
-  a1.a1[1].a0 = -7.0;
-  a1.a2 = 8.0;
-  a2.a0.a0 = -9.0;
-  a2.a1[0].a0 = 10.0;
-  a2.a1[1].a0 = -11.0;
-  a2.a2 = 12.0;
-  a3.a0.a0 = -13.0;
-  a3.a1[0].a0 = 14.0;
-  a3.a1[1].a0 = -15.0;
-  a3.a2 = 16.0;
-  a4.a0.a0 = -17.0;
-  a4.a1[0].a0 = 18.0;
-  a4.a1[1].a0 = -19.0;
-  a4.a2 = 20.0;
-
-  final result =
-      passStructStruct32BytesHomogeneousDouble2x5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStructStruct16BytesMixed3x10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3),
-        double Function(
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3)>("PassStructStruct16BytesMixed3x10",
-    isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 4 byte aligned.
-void testPassStructStruct16BytesMixed3x10Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[0].a1 = -3;
-  a0.a1[0].a2 = 4;
-  a0.a2[0] = -5;
-  a0.a2[1] = 6;
-  a1.a0.a0 = -7.0;
-  a1.a1[0].a0 = 8.0;
-  a1.a1[0].a1 = -9;
-  a1.a1[0].a2 = 10;
-  a1.a2[0] = -11;
-  a1.a2[1] = 12;
-  a2.a0.a0 = -13.0;
-  a2.a1[0].a0 = 14.0;
-  a2.a1[0].a1 = -15;
-  a2.a1[0].a2 = 16;
-  a2.a2[0] = -17;
-  a2.a2[1] = 18;
-  a3.a0.a0 = -19.0;
-  a3.a1[0].a0 = 20.0;
-  a3.a1[0].a1 = -21;
-  a3.a1[0].a2 = 22;
-  a3.a2[0] = -23;
-  a3.a2[1] = 24;
-  a4.a0.a0 = -25.0;
-  a4.a1[0].a0 = 26.0;
-  a4.a1[0].a1 = -27;
-  a4.a1[0].a2 = 28;
-  a4.a2[0] = -29;
-  a4.a2[1] = 30;
-  a5.a0.a0 = -31.0;
-  a5.a1[0].a0 = 32.0;
-  a5.a1[0].a1 = -33;
-  a5.a1[0].a2 = 34;
-  a5.a2[0] = -35;
-  a5.a2[1] = 36;
-  a6.a0.a0 = -37.0;
-  a6.a1[0].a0 = 38.0;
-  a6.a1[0].a1 = -39;
-  a6.a1[0].a2 = 40;
-  a6.a2[0] = -41;
-  a6.a2[1] = 42;
-  a7.a0.a0 = -43.0;
-  a7.a1[0].a0 = 44.0;
-  a7.a1[0].a1 = -45;
-  a7.a1[0].a2 = 46;
-  a7.a2[0] = -47;
-  a7.a2[1] = 48;
-  a8.a0.a0 = -49.0;
-  a8.a1[0].a0 = 50.0;
-  a8.a1[0].a1 = -51;
-  a8.a1[0].a2 = 52;
-  a8.a2[0] = -53;
-  a8.a2[1] = 54;
-  a9.a0.a0 = -55.0;
-  a9.a1[0].a0 = 56.0;
-  a9.a1[0].a1 = -57;
-  a9.a1[0].a2 = 58;
-  a9.a2[0] = -59;
-  a9.a2[1] = 60;
-
-  final result = passStructStruct16BytesMixed3x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(30.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUint8Struct32BytesInlineArrayMultiDimensionalILeaf =
-    ffiTestFunctions.lookupFunction<
-            Uint32 Function(
-                Uint8,
-                Struct32BytesInlineArrayMultiDimensionalInt,
-                Uint8,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                Uint8,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                Uint8),
-            int Function(
-                int,
-                Struct32BytesInlineArrayMultiDimensionalInt,
-                int,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                int,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                int)>("PassUint8Struct32BytesInlineArrayMultiDimensionalI",
-        isLeaf: true);
-
-/// Test multi dimensional inline array struct as argument.
-void testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct32BytesInlineArrayMultiDimensionalInt>();
-  final Struct32BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
-  int a2;
-  final a3Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
-  final Struct8BytesInlineArrayMultiDimensionalInt a3 = a3Pointer.ref;
-  int a4;
-  final a5Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
-  final Struct8BytesInlineArrayMultiDimensionalInt a5 = a5Pointer.ref;
-  int a6;
-
-  a0 = 1;
-  a1.a0[0][0][0][0][0] = 2;
-  a1.a0[0][0][0][0][1] = 3;
-  a1.a0[0][0][0][1][0] = 4;
-  a1.a0[0][0][0][1][1] = 5;
-  a1.a0[0][0][1][0][0] = 6;
-  a1.a0[0][0][1][0][1] = 7;
-  a1.a0[0][0][1][1][0] = 8;
-  a1.a0[0][0][1][1][1] = 9;
-  a1.a0[0][1][0][0][0] = 10;
-  a1.a0[0][1][0][0][1] = 11;
-  a1.a0[0][1][0][1][0] = 12;
-  a1.a0[0][1][0][1][1] = 13;
-  a1.a0[0][1][1][0][0] = 14;
-  a1.a0[0][1][1][0][1] = 15;
-  a1.a0[0][1][1][1][0] = 16;
-  a1.a0[0][1][1][1][1] = 17;
-  a1.a0[1][0][0][0][0] = 18;
-  a1.a0[1][0][0][0][1] = 19;
-  a1.a0[1][0][0][1][0] = 20;
-  a1.a0[1][0][0][1][1] = 21;
-  a1.a0[1][0][1][0][0] = 22;
-  a1.a0[1][0][1][0][1] = 23;
-  a1.a0[1][0][1][1][0] = 24;
-  a1.a0[1][0][1][1][1] = 25;
-  a1.a0[1][1][0][0][0] = 26;
-  a1.a0[1][1][0][0][1] = 27;
-  a1.a0[1][1][0][1][0] = 28;
-  a1.a0[1][1][0][1][1] = 29;
-  a1.a0[1][1][1][0][0] = 30;
-  a1.a0[1][1][1][0][1] = 31;
-  a1.a0[1][1][1][1][0] = 32;
-  a1.a0[1][1][1][1][1] = 33;
-  a2 = 34;
-  a3.a0[0][0][0] = 35;
-  a3.a0[0][0][1] = 36;
-  a3.a0[0][1][0] = 37;
-  a3.a0[0][1][1] = 38;
-  a3.a0[1][0][0] = 39;
-  a3.a0[1][0][1] = 40;
-  a3.a0[1][1][0] = 41;
-  a3.a0[1][1][1] = 42;
-  a4 = 43;
-  a5.a0[0][0][0] = 44;
-  a5.a0[0][0][1] = 45;
-  a5.a0[0][1][0] = 46;
-  a5.a0[0][1][1] = 47;
-  a5.a0[1][0][0] = 48;
-  a5.a0[1][0][1] = 49;
-  a5.a0[1][1][0] = 50;
-  a5.a0[1][1][1] = 51;
-  a6 = 52;
-
-  final result = passUint8Struct32BytesInlineArrayMultiDimensionalILeaf(
-      a0, a1, a2, a3, a4, a5, a6);
-
-  print("result = $result");
-
-  Expect.equals(1378, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-}
-
-final passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf =
-    ffiTestFunctions.lookupFunction<
-            Uint32 Function(
-                Uint8, Struct4BytesInlineArrayMultiDimensionalInt, Uint8),
-            int Function(int, Struct4BytesInlineArrayMultiDimensionalInt, int)>(
-        "PassUint8Struct4BytesInlineArrayMultiDimensionalIn",
-        isLeaf: true);
-
-/// Test struct in multi dimensional inline array.
-void testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct4BytesInlineArrayMultiDimensionalInt>();
-  final Struct4BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
-  int a2;
-
-  a0 = 1;
-  a1.a0[0][0].a0 = 2;
-  a1.a0[0][1].a0 = -3;
-  a1.a0[1][0].a0 = 4;
-  a1.a0[1][1].a0 = -5;
-  a2 = 6;
-
-  final result =
-      passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(5, result);
-
-  calloc.free(a1Pointer);
-}
-
-final passStruct3BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt),
-    int Function(
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt)>("PassStruct3BytesPackedIntx10", isLeaf: true);
-
-/// Small struct with mis-aligned member.
-void testPassStruct3BytesPackedIntx10Leaf() {
-  final a0Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result =
-      passStruct3BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt),
-    int Function(
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt)>("PassStruct8BytesPackedIntx10", isLeaf: true);
-
-/// Struct with mis-aligned member.
-void testPassStruct8BytesPackedIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a1.a0 = 6;
-  a1.a1 = 7;
-  a1.a2 = 8;
-  a1.a3 = 9;
-  a1.a4 = 10;
-  a2.a0 = 11;
-  a2.a1 = 12;
-  a2.a2 = 13;
-  a2.a3 = 14;
-  a2.a4 = 15;
-  a3.a0 = 16;
-  a3.a1 = 17;
-  a3.a2 = 18;
-  a3.a3 = 19;
-  a3.a4 = 20;
-  a4.a0 = 21;
-  a4.a1 = 22;
-  a4.a2 = 23;
-  a4.a3 = 24;
-  a4.a4 = 25;
-  a5.a0 = 26;
-  a5.a1 = 27;
-  a5.a2 = 28;
-  a5.a3 = 29;
-  a5.a4 = 30;
-  a6.a0 = 31;
-  a6.a1 = 32;
-  a6.a2 = 33;
-  a6.a3 = 34;
-  a6.a4 = 35;
-  a7.a0 = 36;
-  a7.a1 = 37;
-  a7.a2 = 38;
-  a7.a3 = 39;
-  a7.a4 = 40;
-  a8.a0 = 41;
-  a8.a1 = 42;
-  a8.a2 = 43;
-  a8.a3 = 44;
-  a8.a4 = 45;
-  a9.a0 = 46;
-  a9.a1 = 47;
-  a9.a2 = 48;
-  a9.a3 = 49;
-  a9.a4 = 50;
-
-  final result =
-      passStruct8BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(1275, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesPackedMixedx10DoubleInt32x2Leaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Double,
-            Int32,
-            Int32),
-        double Function(
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            double,
-            int,
-            int)>("PassStruct9BytesPackedMixedx10DoubleInt32x2", isLeaf: true);
-
-/// Struct with mis-aligned member.
-/// Tests backfilling of CPU and FPU registers.
-void testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf() {
-  final a0Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a9 = a9Pointer.ref;
-  double a10;
-  int a11;
-  int a12;
-
-  a0.a0 = 1;
-  a0.a1 = 2.0;
-  a1.a0 = 3;
-  a1.a1 = 4.0;
-  a2.a0 = 5;
-  a2.a1 = 6.0;
-  a3.a0 = 7;
-  a3.a1 = 8.0;
-  a4.a0 = 9;
-  a4.a1 = 10.0;
-  a5.a0 = 11;
-  a5.a1 = 12.0;
-  a6.a0 = 13;
-  a6.a1 = 14.0;
-  a7.a0 = 15;
-  a7.a1 = 16.0;
-  a8.a0 = 17;
-  a8.a1 = 18.0;
-  a9.a0 = 19;
-  a9.a1 = 20.0;
-  a10 = -21.0;
-  a11 = 22;
-  a12 = -23;
-
-  final result = passStruct9BytesPackedMixedx10DoubleInt32x2Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
-
-  print("result = $result");
-
-  Expect.approxEquals(188.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct5BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Double Function(Struct5BytesPackedMixed),
-    double Function(
-        Struct5BytesPackedMixed)>("PassStruct5BytesPackedMixed", isLeaf: true);
-
-/// This packed struct happens to have only aligned members.
-void testPassStruct5BytesPackedMixedLeaf() {
-  final a0Pointer = calloc<Struct5BytesPackedMixed>();
-  final Struct5BytesPackedMixed a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-
-  final result = passStruct5BytesPackedMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(1.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedAlignmentStruct5BytesPackedMixedLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(StructNestedAlignmentStruct5BytesPackedMixed),
-            double Function(StructNestedAlignmentStruct5BytesPackedMixed)>(
-        "PassStructNestedAlignmentStruct5BytesPackedMixed",
-        isLeaf: true);
-
-/// Check alignment of packed struct in non-packed struct.
-void testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf() {
-  final a0Pointer = calloc<StructNestedAlignmentStruct5BytesPackedMixed>();
-  final StructNestedAlignmentStruct5BytesPackedMixed a0 = a0Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1.a0 = 2.0;
-  a0.a1.a1 = 3;
-
-  final result = passStructNestedAlignmentStruct5BytesPackedMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(6.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct6BytesInlineArrayIntLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct6BytesInlineArrayInt),
-        double Function(Struct6BytesInlineArrayInt)>(
-    "PassStruct6BytesInlineArrayInt",
-    isLeaf: true);
-
-/// Check alignment of packed struct array in non-packed struct.
-void testPassStruct6BytesInlineArrayIntLeaf() {
-  final a0Pointer = calloc<Struct6BytesInlineArrayInt>();
-  final Struct6BytesInlineArrayInt a0 = a0Pointer.ref;
-
-  a0.a0[0].a0 = -1;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3;
-  a0.a0[1].a1 = 4;
-
-  final result = passStruct6BytesInlineArrayIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(2.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct15BytesInlineArrayMixedLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct15BytesInlineArrayMixed),
-        double Function(Struct15BytesInlineArrayMixed)>(
-    "PassStruct15BytesInlineArrayMixed",
-    isLeaf: true);
-
-/// Check alignment of packed struct array in non-packed struct.
-void testPassStruct15BytesInlineArrayMixedLeaf() {
-  final a0Pointer = calloc<Struct15BytesInlineArrayMixed>();
-  final Struct15BytesInlineArrayMixed a0 = a0Pointer.ref;
-
-  a0.a0[0].a0 = -1.0;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3.0;
-  a0.a0[1].a1 = 4;
-  a0.a0[2].a0 = -5.0;
-  a0.a0[2].a1 = 6;
-
-  final result = passStruct15BytesInlineArrayMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passUnion4BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed),
-    double Function(
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed)>("PassUnion4BytesMixedx10", isLeaf: true);
-
-/// Check placement of mixed integer/float union.
-void testPassUnion4BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a1.a0 = 2;
-  a2.a0 = 3;
-  a3.a0 = 4;
-  a4.a0 = 5;
-  a5.a0 = 6;
-  a6.a0 = 7;
-  a7.a0 = 8;
-  a8.a0 = 9;
-  a9.a0 = 10;
-
-  final result =
-      passUnion4BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(55.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat),
-    double Function(
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat)>("PassUnion8BytesNestedFloatx10", isLeaf: true);
-
-/// Check placement of mixed floats union.
-void testPassUnion8BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a1.a0 = 2.0;
-  a2.a0 = -3.0;
-  a3.a0 = 4.0;
-  a4.a0 = -5.0;
-  a5.a0 = 6.0;
-  a6.a0 = -7.0;
-  a7.a0 = 8.0;
-  a8.a0 = -9.0;
-  a9.a0 = 10.0;
-
-  final result =
-      passUnion8BytesNestedFloatx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(5.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion9BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt),
-    double Function(
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt)>("PassUnion9BytesNestedIntx10", isLeaf: true);
-
-/// Mixed-size union argument.
-void testPassUnion9BytesNestedIntx10Leaf() {
-  final a0Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a1.a0.a0 = 4;
-  a1.a0.a1 = -5;
-  a1.a0.a2 = 6;
-  a2.a0.a0 = -7;
-  a2.a0.a1 = 8;
-  a2.a0.a2 = -9;
-  a3.a0.a0 = 10;
-  a3.a0.a1 = -11;
-  a3.a0.a2 = 12;
-  a4.a0.a0 = -13;
-  a4.a0.a1 = 14;
-  a4.a0.a2 = -15;
-  a5.a0.a0 = 16;
-  a5.a0.a1 = -17;
-  a5.a0.a2 = 18;
-  a6.a0.a0 = -19;
-  a6.a0.a1 = 20;
-  a6.a0.a2 = -21;
-  a7.a0.a0 = 22;
-  a7.a0.a1 = -23;
-  a7.a0.a2 = 24;
-  a8.a0.a0 = -25;
-  a8.a0.a1 = 26;
-  a8.a0.a2 = -27;
-  a9.a0.a0 = 28;
-  a9.a0.a1 = -29;
-  a9.a0.a2 = 30;
-
-  final result =
-      passUnion9BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion16BytesNestedInlineArrayFloatx10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat),
-            double Function(
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat)>(
-        "PassUnion16BytesNestedInlineArrayFloatx10",
-        isLeaf: true);
-
-/// Union with homogenous floats.
-void testPassUnion16BytesNestedInlineArrayFloatx10Leaf() {
-  final a0Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a9 = a9Pointer.ref;
-
-  a0.a0[0] = -1.0;
-  a0.a0[1] = 2.0;
-  a0.a0[2] = -3.0;
-  a0.a0[3] = 4.0;
-  a1.a0[0] = -5.0;
-  a1.a0[1] = 6.0;
-  a1.a0[2] = -7.0;
-  a1.a0[3] = 8.0;
-  a2.a0[0] = -9.0;
-  a2.a0[1] = 10.0;
-  a2.a0[2] = -11.0;
-  a2.a0[3] = 12.0;
-  a3.a0[0] = -13.0;
-  a3.a0[1] = 14.0;
-  a3.a0[2] = -15.0;
-  a3.a0[3] = 16.0;
-  a4.a0[0] = -17.0;
-  a4.a0[1] = 18.0;
-  a4.a0[2] = -19.0;
-  a4.a0[3] = 20.0;
-  a5.a0[0] = -21.0;
-  a5.a0[1] = 22.0;
-  a5.a0[2] = -23.0;
-  a5.a0[3] = 24.0;
-  a6.a0[0] = -25.0;
-  a6.a0[1] = 26.0;
-  a6.a0[2] = -27.0;
-  a6.a0[3] = 28.0;
-  a7.a0[0] = -29.0;
-  a7.a0[1] = 30.0;
-  a7.a0[2] = -31.0;
-  a7.a0[3] = 32.0;
-  a8.a0[0] = -33.0;
-  a8.a0[1] = 34.0;
-  a8.a0[2] = -35.0;
-  a8.a0[3] = 36.0;
-  a9.a0[0] = -37.0;
-  a9.a0[1] = 38.0;
-  a9.a0[2] = -39.0;
-  a9.a0[3] = 40.0;
-
-  final result = passUnion16BytesNestedInlineArrayFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(20.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion16BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Double Function(
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat),
-        double Function(
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat)>("PassUnion16BytesNestedFloatx10",
-    isLeaf: true);
-
-/// Union with homogenous floats.
-void testPassUnion16BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a0.a1 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a0.a1 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a0.a1 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a0.a1 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a0.a1 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a0.a1 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a0.a1 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a0.a1 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a0.a1 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a0.a1 = 20.0;
-
-  final result = passUnion16BytesNestedFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final returnStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct1ByteInt Function(Int8),
-    Struct1ByteInt Function(int)>("ReturnStruct1ByteInt", isLeaf: true);
-
-/// Smallest struct with data.
-void testReturnStruct1ByteIntLeaf() {
-  int a0;
-
-  a0 = -1;
-
-  final result = returnStruct1ByteIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-}
-
-final returnStruct3BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8),
-    Struct3BytesHomogeneousUint8 Function(
-        int, int, int)>("ReturnStruct3BytesHomogeneousUint8", isLeaf: true);
-
-/// Smaller than word size return value on all architectures.
-void testReturnStruct3BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-
-  final result = returnStruct3BytesHomogeneousUint8Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct3BytesInt2ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesInt2ByteAligned Function(Int16, Int8),
-    Struct3BytesInt2ByteAligned Function(
-        int, int)>("ReturnStruct3BytesInt2ByteAligned", isLeaf: true);
-
-/// Smaller than word size return value on all architectures.
-/// With alignment rules taken into account size is 4 bytes.
-void testReturnStruct3BytesInt2ByteAlignedLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct3BytesInt2ByteAlignedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct4BytesHomogeneousInt16Leaf = ffiTestFunctions.lookupFunction<
-    Struct4BytesHomogeneousInt16 Function(Int16, Int16),
-    Struct4BytesHomogeneousInt16 Function(
-        int, int)>("ReturnStruct4BytesHomogeneousInt16", isLeaf: true);
-
-/// Word size return value on 32 bit architectures..
-void testReturnStruct4BytesHomogeneousInt16Leaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct4BytesHomogeneousInt16Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct7BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct7BytesHomogeneousUint8 Function(
-        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
-    Struct7BytesHomogeneousUint8 Function(int, int, int, int, int, int,
-        int)>("ReturnStruct7BytesHomogeneousUint8", isLeaf: true);
-
-/// Non-wordsize return value.
-void testReturnStruct7BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-
-  final result =
-      returnStruct7BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5, a6);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-}
-
-final returnStruct7BytesInt4ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
-    Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8),
-    Struct7BytesInt4ByteAligned Function(
-        int, int, int)>("ReturnStruct7BytesInt4ByteAligned", isLeaf: true);
-
-/// Non-wordsize return value.
-/// With alignment rules taken into account size is 8 bytes.
-void testReturnStruct7BytesInt4ByteAlignedLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct7BytesInt4ByteAlignedLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesInt Function(Int16, Int16, Int32),
-    Struct8BytesInt Function(
-        int, int, int)>("ReturnStruct8BytesInt", isLeaf: true);
-
-/// Return value in integer registers on many architectures.
-void testReturnStruct8BytesIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct8BytesIntLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesHomogeneousFloat Function(Float, Float),
-    Struct8BytesHomogeneousFloat Function(
-        double, double)>("ReturnStruct8BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FP registers on many architectures.
-void testReturnStruct8BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-
-  a0 = -1.0;
-  a1 = 2.0;
-
-  final result = returnStruct8BytesHomogeneousFloatLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-}
-
-final returnStruct8BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesMixed Function(Float, Int16, Int16),
-    Struct8BytesMixed Function(
-        double, int, int)>("ReturnStruct8BytesMixed", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-void testReturnStruct8BytesMixedLeaf() {
-  double a0;
-  int a1;
-  int a2;
-
-  a0 = -1.0;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct8BytesMixedLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct9BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct9BytesHomogeneousUint8 Function(
-        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
-    Struct9BytesHomogeneousUint8 Function(int, int, int, int, int, int, int,
-        int, int)>("ReturnStruct9BytesHomogeneousUint8", isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is the right size and that
-/// dart:ffi trampolines do not write outside this size.
-void testReturnStruct9BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-
-  final result = returnStruct9BytesHomogeneousUint8Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-}
-
-final returnStruct9BytesInt4Or8ByteAlignedLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct9BytesInt4Or8ByteAligned Function(Int64, Int8),
-        Struct9BytesInt4Or8ByteAligned Function(
-            int, int)>("ReturnStruct9BytesInt4Or8ByteAligned", isLeaf: true);
-
-/// Return value in two integer registers on x64.
-/// With alignment rules taken into account size is 12 or 16 bytes.
-void testReturnStruct9BytesInt4Or8ByteAlignedLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct9BytesInt4Or8ByteAlignedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct12BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct12BytesHomogeneousFloat Function(Float, Float, Float),
-    Struct12BytesHomogeneousFloat Function(double, double,
-        double)>("ReturnStruct12BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FPU registers, but does not use all registers on arm hardfp
-/// and arm64.
-void testReturnStruct12BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-
-  final result = returnStruct12BytesHomogeneousFloatLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-}
-
-final returnStruct16BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float),
-    Struct16BytesHomogeneousFloat Function(double, double, double,
-        double)>("ReturnStruct16BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FPU registers on arm hardfp and arm64.
-void testReturnStruct16BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-
-  final result = returnStruct16BytesHomogeneousFloatLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-}
-
-final returnStruct16BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesMixed Function(Double, Int64),
-    Struct16BytesMixed Function(
-        double, int)>("ReturnStruct16BytesMixed", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-void testReturnStruct16BytesMixedLeaf() {
-  double a0;
-  int a1;
-
-  a0 = -1.0;
-  a1 = 2;
-
-  final result = returnStruct16BytesMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct16BytesMixed2Leaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesMixed2 Function(Float, Float, Float, Int32),
-    Struct16BytesMixed2 Function(double, double, double,
-        int)>("ReturnStruct16BytesMixed2", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-/// The integer register contains half float half int.
-void testReturnStruct16BytesMixed2Leaf() {
-  double a0;
-  double a1;
-  double a2;
-  int a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4;
-
-  final result = returnStruct16BytesMixed2Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-}
-
-final returnStruct17BytesIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct17BytesInt Function(Int64, Int64, Int8),
-    Struct17BytesInt Function(
-        int, int, int)>("ReturnStruct17BytesInt", isLeaf: true);
-
-/// Rerturn value returned in preallocated space passed by pointer on most ABIs.
-/// Is non word size on purpose, to test that structs are rounded up to word size
-/// on all ABIs.
-void testReturnStruct17BytesIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct17BytesIntLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct19BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct19BytesHomogeneousUint8 Function(
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8),
-    Struct19BytesHomogeneousUint8 Function(
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int)>("ReturnStruct19BytesHomogeneousUint8", isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is the right size and that
-/// dart:ffi trampolines do not write outside this size.
-void testReturnStruct19BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-  int a9;
-  int a10;
-  int a11;
-  int a12;
-  int a13;
-  int a14;
-  int a15;
-  int a16;
-  int a17;
-  int a18;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-  a9 = 10;
-  a10 = 11;
-  a11 = 12;
-  a12 = 13;
-  a13 = 14;
-  a14 = 15;
-  a15 = 16;
-  a16 = 17;
-  a17 = 18;
-  a18 = 19;
-
-  final result = returnStruct19BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5,
-      a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-  Expect.equals(a9, result.a9);
-  Expect.equals(a10, result.a10);
-  Expect.equals(a11, result.a11);
-  Expect.equals(a12, result.a12);
-  Expect.equals(a13, result.a13);
-  Expect.equals(a14, result.a14);
-  Expect.equals(a15, result.a15);
-  Expect.equals(a16, result.a16);
-  Expect.equals(a17, result.a17);
-  Expect.equals(a18, result.a18);
-}
-
-final returnStruct20BytesHomogeneousInt32Leaf = ffiTestFunctions.lookupFunction<
-    Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32, Int32),
-    Struct20BytesHomogeneousInt32 Function(int, int, int, int,
-        int)>("ReturnStruct20BytesHomogeneousInt32", isLeaf: true);
-
-/// Return value too big to go in cpu registers on arm64.
-void testReturnStruct20BytesHomogeneousInt32Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-
-  final result = returnStruct20BytesHomogeneousInt32Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-}
-
-final returnStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float, Float),
-    Struct20BytesHomogeneousFloat Function(double, double, double, double,
-        double)>("ReturnStruct20BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
-void testReturnStruct20BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-
-  final result = returnStruct20BytesHomogeneousFloatLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-  Expect.approxEquals(a4, result.a4);
-}
-
-final returnStruct32BytesHomogeneousDoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct32BytesHomogeneousDouble Function(Double, Double, Double, Double),
-        Struct32BytesHomogeneousDouble Function(double, double, double,
-            double)>("ReturnStruct32BytesHomogeneousDouble", isLeaf: true);
-
-/// Return value in FPU registers on arm64.
-void testReturnStruct32BytesHomogeneousDoubleLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-
-  final result = returnStruct32BytesHomogeneousDoubleLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-}
-
-final returnStruct40BytesHomogeneousDoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct40BytesHomogeneousDouble Function(
-            Double, Double, Double, Double, Double),
-        Struct40BytesHomogeneousDouble Function(double, double, double, double,
-            double)>("ReturnStruct40BytesHomogeneousDouble", isLeaf: true);
-
-/// Return value too big to go in FPU registers on arm64.
-void testReturnStruct40BytesHomogeneousDoubleLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-
-  final result = returnStruct40BytesHomogeneousDoubleLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-  Expect.approxEquals(a4, result.a4);
-}
-
-final returnStruct1024BytesHomogeneousUint64Leaf =
-    ffiTestFunctions.lookupFunction<
-        Struct1024BytesHomogeneousUint64 Function(
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64),
-        Struct1024BytesHomogeneousUint64 Function(
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int)>("ReturnStruct1024BytesHomogeneousUint64", isLeaf: true);
-
-/// Test 1kb struct.
-void testReturnStruct1024BytesHomogeneousUint64Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-  int a9;
-  int a10;
-  int a11;
-  int a12;
-  int a13;
-  int a14;
-  int a15;
-  int a16;
-  int a17;
-  int a18;
-  int a19;
-  int a20;
-  int a21;
-  int a22;
-  int a23;
-  int a24;
-  int a25;
-  int a26;
-  int a27;
-  int a28;
-  int a29;
-  int a30;
-  int a31;
-  int a32;
-  int a33;
-  int a34;
-  int a35;
-  int a36;
-  int a37;
-  int a38;
-  int a39;
-  int a40;
-  int a41;
-  int a42;
-  int a43;
-  int a44;
-  int a45;
-  int a46;
-  int a47;
-  int a48;
-  int a49;
-  int a50;
-  int a51;
-  int a52;
-  int a53;
-  int a54;
-  int a55;
-  int a56;
-  int a57;
-  int a58;
-  int a59;
-  int a60;
-  int a61;
-  int a62;
-  int a63;
-  int a64;
-  int a65;
-  int a66;
-  int a67;
-  int a68;
-  int a69;
-  int a70;
-  int a71;
-  int a72;
-  int a73;
-  int a74;
-  int a75;
-  int a76;
-  int a77;
-  int a78;
-  int a79;
-  int a80;
-  int a81;
-  int a82;
-  int a83;
-  int a84;
-  int a85;
-  int a86;
-  int a87;
-  int a88;
-  int a89;
-  int a90;
-  int a91;
-  int a92;
-  int a93;
-  int a94;
-  int a95;
-  int a96;
-  int a97;
-  int a98;
-  int a99;
-  int a100;
-  int a101;
-  int a102;
-  int a103;
-  int a104;
-  int a105;
-  int a106;
-  int a107;
-  int a108;
-  int a109;
-  int a110;
-  int a111;
-  int a112;
-  int a113;
-  int a114;
-  int a115;
-  int a116;
-  int a117;
-  int a118;
-  int a119;
-  int a120;
-  int a121;
-  int a122;
-  int a123;
-  int a124;
-  int a125;
-  int a126;
-  int a127;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-  a9 = 10;
-  a10 = 11;
-  a11 = 12;
-  a12 = 13;
-  a13 = 14;
-  a14 = 15;
-  a15 = 16;
-  a16 = 17;
-  a17 = 18;
-  a18 = 19;
-  a19 = 20;
-  a20 = 21;
-  a21 = 22;
-  a22 = 23;
-  a23 = 24;
-  a24 = 25;
-  a25 = 26;
-  a26 = 27;
-  a27 = 28;
-  a28 = 29;
-  a29 = 30;
-  a30 = 31;
-  a31 = 32;
-  a32 = 33;
-  a33 = 34;
-  a34 = 35;
-  a35 = 36;
-  a36 = 37;
-  a37 = 38;
-  a38 = 39;
-  a39 = 40;
-  a40 = 41;
-  a41 = 42;
-  a42 = 43;
-  a43 = 44;
-  a44 = 45;
-  a45 = 46;
-  a46 = 47;
-  a47 = 48;
-  a48 = 49;
-  a49 = 50;
-  a50 = 51;
-  a51 = 52;
-  a52 = 53;
-  a53 = 54;
-  a54 = 55;
-  a55 = 56;
-  a56 = 57;
-  a57 = 58;
-  a58 = 59;
-  a59 = 60;
-  a60 = 61;
-  a61 = 62;
-  a62 = 63;
-  a63 = 64;
-  a64 = 65;
-  a65 = 66;
-  a66 = 67;
-  a67 = 68;
-  a68 = 69;
-  a69 = 70;
-  a70 = 71;
-  a71 = 72;
-  a72 = 73;
-  a73 = 74;
-  a74 = 75;
-  a75 = 76;
-  a76 = 77;
-  a77 = 78;
-  a78 = 79;
-  a79 = 80;
-  a80 = 81;
-  a81 = 82;
-  a82 = 83;
-  a83 = 84;
-  a84 = 85;
-  a85 = 86;
-  a86 = 87;
-  a87 = 88;
-  a88 = 89;
-  a89 = 90;
-  a90 = 91;
-  a91 = 92;
-  a92 = 93;
-  a93 = 94;
-  a94 = 95;
-  a95 = 96;
-  a96 = 97;
-  a97 = 98;
-  a98 = 99;
-  a99 = 100;
-  a100 = 101;
-  a101 = 102;
-  a102 = 103;
-  a103 = 104;
-  a104 = 105;
-  a105 = 106;
-  a106 = 107;
-  a107 = 108;
-  a108 = 109;
-  a109 = 110;
-  a110 = 111;
-  a111 = 112;
-  a112 = 113;
-  a113 = 114;
-  a114 = 115;
-  a115 = 116;
-  a116 = 117;
-  a117 = 118;
-  a118 = 119;
-  a119 = 120;
-  a120 = 121;
-  a121 = 122;
-  a122 = 123;
-  a123 = 124;
-  a124 = 125;
-  a125 = 126;
-  a126 = 127;
-  a127 = 128;
-
-  final result = returnStruct1024BytesHomogeneousUint64Leaf(
-      a0,
-      a1,
-      a2,
-      a3,
-      a4,
-      a5,
-      a6,
-      a7,
-      a8,
-      a9,
-      a10,
-      a11,
-      a12,
-      a13,
-      a14,
-      a15,
-      a16,
-      a17,
-      a18,
-      a19,
-      a20,
-      a21,
-      a22,
-      a23,
-      a24,
-      a25,
-      a26,
-      a27,
-      a28,
-      a29,
-      a30,
-      a31,
-      a32,
-      a33,
-      a34,
-      a35,
-      a36,
-      a37,
-      a38,
-      a39,
-      a40,
-      a41,
-      a42,
-      a43,
-      a44,
-      a45,
-      a46,
-      a47,
-      a48,
-      a49,
-      a50,
-      a51,
-      a52,
-      a53,
-      a54,
-      a55,
-      a56,
-      a57,
-      a58,
-      a59,
-      a60,
-      a61,
-      a62,
-      a63,
-      a64,
-      a65,
-      a66,
-      a67,
-      a68,
-      a69,
-      a70,
-      a71,
-      a72,
-      a73,
-      a74,
-      a75,
-      a76,
-      a77,
-      a78,
-      a79,
-      a80,
-      a81,
-      a82,
-      a83,
-      a84,
-      a85,
-      a86,
-      a87,
-      a88,
-      a89,
-      a90,
-      a91,
-      a92,
-      a93,
-      a94,
-      a95,
-      a96,
-      a97,
-      a98,
-      a99,
-      a100,
-      a101,
-      a102,
-      a103,
-      a104,
-      a105,
-      a106,
-      a107,
-      a108,
-      a109,
-      a110,
-      a111,
-      a112,
-      a113,
-      a114,
-      a115,
-      a116,
-      a117,
-      a118,
-      a119,
-      a120,
-      a121,
-      a122,
-      a123,
-      a124,
-      a125,
-      a126,
-      a127);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-  Expect.equals(a9, result.a9);
-  Expect.equals(a10, result.a10);
-  Expect.equals(a11, result.a11);
-  Expect.equals(a12, result.a12);
-  Expect.equals(a13, result.a13);
-  Expect.equals(a14, result.a14);
-  Expect.equals(a15, result.a15);
-  Expect.equals(a16, result.a16);
-  Expect.equals(a17, result.a17);
-  Expect.equals(a18, result.a18);
-  Expect.equals(a19, result.a19);
-  Expect.equals(a20, result.a20);
-  Expect.equals(a21, result.a21);
-  Expect.equals(a22, result.a22);
-  Expect.equals(a23, result.a23);
-  Expect.equals(a24, result.a24);
-  Expect.equals(a25, result.a25);
-  Expect.equals(a26, result.a26);
-  Expect.equals(a27, result.a27);
-  Expect.equals(a28, result.a28);
-  Expect.equals(a29, result.a29);
-  Expect.equals(a30, result.a30);
-  Expect.equals(a31, result.a31);
-  Expect.equals(a32, result.a32);
-  Expect.equals(a33, result.a33);
-  Expect.equals(a34, result.a34);
-  Expect.equals(a35, result.a35);
-  Expect.equals(a36, result.a36);
-  Expect.equals(a37, result.a37);
-  Expect.equals(a38, result.a38);
-  Expect.equals(a39, result.a39);
-  Expect.equals(a40, result.a40);
-  Expect.equals(a41, result.a41);
-  Expect.equals(a42, result.a42);
-  Expect.equals(a43, result.a43);
-  Expect.equals(a44, result.a44);
-  Expect.equals(a45, result.a45);
-  Expect.equals(a46, result.a46);
-  Expect.equals(a47, result.a47);
-  Expect.equals(a48, result.a48);
-  Expect.equals(a49, result.a49);
-  Expect.equals(a50, result.a50);
-  Expect.equals(a51, result.a51);
-  Expect.equals(a52, result.a52);
-  Expect.equals(a53, result.a53);
-  Expect.equals(a54, result.a54);
-  Expect.equals(a55, result.a55);
-  Expect.equals(a56, result.a56);
-  Expect.equals(a57, result.a57);
-  Expect.equals(a58, result.a58);
-  Expect.equals(a59, result.a59);
-  Expect.equals(a60, result.a60);
-  Expect.equals(a61, result.a61);
-  Expect.equals(a62, result.a62);
-  Expect.equals(a63, result.a63);
-  Expect.equals(a64, result.a64);
-  Expect.equals(a65, result.a65);
-  Expect.equals(a66, result.a66);
-  Expect.equals(a67, result.a67);
-  Expect.equals(a68, result.a68);
-  Expect.equals(a69, result.a69);
-  Expect.equals(a70, result.a70);
-  Expect.equals(a71, result.a71);
-  Expect.equals(a72, result.a72);
-  Expect.equals(a73, result.a73);
-  Expect.equals(a74, result.a74);
-  Expect.equals(a75, result.a75);
-  Expect.equals(a76, result.a76);
-  Expect.equals(a77, result.a77);
-  Expect.equals(a78, result.a78);
-  Expect.equals(a79, result.a79);
-  Expect.equals(a80, result.a80);
-  Expect.equals(a81, result.a81);
-  Expect.equals(a82, result.a82);
-  Expect.equals(a83, result.a83);
-  Expect.equals(a84, result.a84);
-  Expect.equals(a85, result.a85);
-  Expect.equals(a86, result.a86);
-  Expect.equals(a87, result.a87);
-  Expect.equals(a88, result.a88);
-  Expect.equals(a89, result.a89);
-  Expect.equals(a90, result.a90);
-  Expect.equals(a91, result.a91);
-  Expect.equals(a92, result.a92);
-  Expect.equals(a93, result.a93);
-  Expect.equals(a94, result.a94);
-  Expect.equals(a95, result.a95);
-  Expect.equals(a96, result.a96);
-  Expect.equals(a97, result.a97);
-  Expect.equals(a98, result.a98);
-  Expect.equals(a99, result.a99);
-  Expect.equals(a100, result.a100);
-  Expect.equals(a101, result.a101);
-  Expect.equals(a102, result.a102);
-  Expect.equals(a103, result.a103);
-  Expect.equals(a104, result.a104);
-  Expect.equals(a105, result.a105);
-  Expect.equals(a106, result.a106);
-  Expect.equals(a107, result.a107);
-  Expect.equals(a108, result.a108);
-  Expect.equals(a109, result.a109);
-  Expect.equals(a110, result.a110);
-  Expect.equals(a111, result.a111);
-  Expect.equals(a112, result.a112);
-  Expect.equals(a113, result.a113);
-  Expect.equals(a114, result.a114);
-  Expect.equals(a115, result.a115);
-  Expect.equals(a116, result.a116);
-  Expect.equals(a117, result.a117);
-  Expect.equals(a118, result.a118);
-  Expect.equals(a119, result.a119);
-  Expect.equals(a120, result.a120);
-  Expect.equals(a121, result.a121);
-  Expect.equals(a122, result.a122);
-  Expect.equals(a123, result.a123);
-  Expect.equals(a124, result.a124);
-  Expect.equals(a125, result.a125);
-  Expect.equals(a126, result.a126);
-  Expect.equals(a127, result.a127);
-}
-
-final returnStruct3BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesPackedInt Function(Int8, Int16),
-    Struct3BytesPackedInt Function(
-        int, int)>("ReturnStruct3BytesPackedInt", isLeaf: true);
-
-/// Small struct with mis-aligned member.
-void testReturnStruct3BytesPackedIntLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct3BytesPackedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct8BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8),
-    Struct8BytesPackedInt Function(
-        int, int, int, int, int)>("ReturnStruct8BytesPackedInt", isLeaf: true);
-
-/// Struct with mis-aligned member.
-void testReturnStruct8BytesPackedIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-
-  final result = returnStruct8BytesPackedIntLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-}
-
-final returnStruct9BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct9BytesPackedMixed Function(Uint8, Double),
-    Struct9BytesPackedMixed Function(
-        int, double)>("ReturnStruct9BytesPackedMixed", isLeaf: true);
-
-/// Struct with mis-aligned member.
-/// Tests backfilling of CPU and FPU registers.
-void testReturnStruct9BytesPackedMixedLeaf() {
-  int a0;
-  double a1;
-
-  a0 = 1;
-  a1 = 2.0;
-
-  final result = returnStruct9BytesPackedMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-}
-
-final returnUnion4BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Union4BytesMixed Function(Uint32),
-    Union4BytesMixed Function(int)>("ReturnUnion4BytesMixed", isLeaf: true);
-
-/// Returning a mixed integer/float union.
-void testReturnUnion4BytesMixedLeaf() {
-  int a0;
-
-  a0 = 1;
-
-  final result = returnUnion4BytesMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-}
-
-final returnUnion8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-    Union8BytesNestedFloat Function(Double),
-    Union8BytesNestedFloat Function(
-        double)>("ReturnUnion8BytesNestedFloat", isLeaf: true);
-
-/// Returning a floating point only union.
-void testReturnUnion8BytesNestedFloatLeaf() {
-  double a0;
-
-  a0 = -1.0;
-
-  final result = returnUnion8BytesNestedFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-}
-
-final returnUnion9BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Union9BytesNestedInt Function(Struct8BytesInt),
-    Union9BytesNestedInt Function(
-        Struct8BytesInt)>("ReturnUnion9BytesNestedInt", isLeaf: true);
-
-/// Returning a mixed-size union.
-void testReturnUnion9BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = returnUnion9BytesNestedIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnUnion16BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat),
-        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>(
-    "ReturnUnion16BytesNestedFloat",
-    isLeaf: true);
-
-/// Returning union with homogenous floats.
-void testReturnUnion16BytesNestedFloatLeaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-
-  final result = returnUnion16BytesNestedFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a0.a1, result.a0.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct1ByteInt Function(Struct1ByteInt),
-    Struct1ByteInt Function(
-        Struct1ByteInt)>("ReturnStructArgumentStruct1ByteInt", isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed in int registers in most ABIs.
-void testReturnStructArgumentStruct1ByteIntLeaf() {
-  final a0Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-
-  final result = returnStructArgumentStruct1ByteIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentInt32x8Struct1ByteIntLeaf =
-    ffiTestFunctions
-        .lookupFunction<
-                Struct1ByteInt Function(Int32, Int32, Int32, Int32, Int32, Int32,
-                    Int32, Int32, Struct1ByteInt),
-                Struct1ByteInt Function(
-                    int, int, int, int, int, int, int, int, Struct1ByteInt)>(
-            "ReturnStructArgumentInt32x8Struct1ByteInt",
-            isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed on stack on all ABIs.
-void testReturnStructArgumentInt32x8Struct1ByteIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  final a8Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a8 = a8Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8.a0 = -9;
-
-  final result = returnStructArgumentInt32x8Struct1ByteIntLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a8.a0, result.a0);
-
-  calloc.free(a8Pointer);
-}
-
-final returnStructArgumentStruct8BytesHomogeneousFloatLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct8BytesHomogeneousFloat Function(Struct8BytesHomogeneousFloat),
-            Struct8BytesHomogeneousFloat Function(
-                Struct8BytesHomogeneousFloat)>(
-        "ReturnStructArgumentStruct8BytesHomogeneousFloat",
-        isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed in float registers in most ABIs.
-void testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-
-  final result = returnStructArgumentStruct8BytesHomogeneousFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0);
-  Expect.approxEquals(a0.a1, result.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStruct20BytesHomogeneousInt32Leaf =
-    ffiTestFunctions
-        .lookupFunction<
-                Struct20BytesHomogeneousInt32 Function(
-                    Struct20BytesHomogeneousInt32),
-                Struct20BytesHomogeneousInt32 Function(
-                    Struct20BytesHomogeneousInt32)>(
-            "ReturnStructArgumentStruct20BytesHomogeneousInt32",
-            isLeaf: true);
-
-/// On arm64, both argument and return value are passed in by pointer.
-void testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a0.a3 = 4;
-  a0.a4 = -5;
-
-  final result = returnStructArgumentStruct20BytesHomogeneousInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0);
-  Expect.equals(a0.a1, result.a1);
-  Expect.equals(a0.a2, result.a2);
-  Expect.equals(a0.a3, result.a3);
-  Expect.equals(a0.a4, result.a4);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32,
-                Int32, Int32, Int32, Int32, Struct20BytesHomogeneousInt32),
-            Struct20BytesHomogeneousInt32 Function(int, int, int, int, int, int,
-                int, int, Struct20BytesHomogeneousInt32)>(
-        "ReturnStructArgumentInt32x8Struct20BytesHomogeneou",
-        isLeaf: true);
-
-/// On arm64, both argument and return value are passed in by pointer.
-/// Ints exhaust registers, so that pointer is passed on stack.
-void testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8.a0 = -9;
-  a8.a1 = 10;
-  a8.a2 = -11;
-  a8.a3 = 12;
-  a8.a4 = -13;
-
-  final result = returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a8.a0, result.a0);
-  Expect.equals(a8.a1, result.a1);
-  Expect.equals(a8.a2, result.a2);
-  Expect.equals(a8.a3, result.a3);
-  Expect.equals(a8.a4, result.a4);
-
-  calloc.free(a8Pointer);
-}
-
-final returnStructArgumentStruct8BytesInlineArrayIntLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt),
-            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt)>(
-        "ReturnStructArgumentStruct8BytesInlineArrayInt",
-        isLeaf: true);
-
-/// Test returning struct with inline array.
-void testReturnStructArgumentStruct8BytesInlineArrayIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-
-  final result = returnStructArgumentStruct8BytesInlineArrayIntLeaf(a0);
-
-  print("result = $result");
-
-  for (int i = 0; i < 8; i++) {
-    Expect.equals(a0.a0[i], result.a0[i]);
-  }
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct16BytesHomogeneousLeaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct16BytesHomogeneousFloat2 Function(
-                StructStruct16BytesHomogeneousFloat2),
-            StructStruct16BytesHomogeneousFloat2 Function(
-                StructStruct16BytesHomogeneousFloat2)>(
-        "ReturnStructArgumentStructStruct16BytesHomogeneous",
-        isLeaf: true);
-
-/// Return value in FPU registers on arm hardfp and arm64.
-void testReturnStructArgumentStructStruct16BytesHomogeneousLeaf() {
-  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-
-  final result = returnStructArgumentStructStruct16BytesHomogeneousLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 2; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-  }
-  Expect.approxEquals(a0.a2, result.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct32BytesHomogeneousLeaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct32BytesHomogeneousDouble2 Function(
-                StructStruct32BytesHomogeneousDouble2),
-            StructStruct32BytesHomogeneousDouble2 Function(
-                StructStruct32BytesHomogeneousDouble2)>(
-        "ReturnStructArgumentStructStruct32BytesHomogeneous",
-        isLeaf: true);
-
-/// Return value in FPU registers on arm64.
-void testReturnStructArgumentStructStruct32BytesHomogeneousLeaf() {
-  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-
-  final result = returnStructArgumentStructStruct32BytesHomogeneousLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 2; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-  }
-  Expect.approxEquals(a0.a2, result.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct16BytesMixed3Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3),
-            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3)>(
-        "ReturnStructArgumentStructStruct16BytesMixed3",
-        isLeaf: true);
-
-/// On x64 Linux, return value is split over FP and int registers.
-void testReturnStructArgumentStructStruct16BytesMixed3Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[0].a1 = -3;
-  a0.a1[0].a2 = 4;
-  a0.a2[0] = -5;
-  a0.a2[1] = 6;
-
-  final result = returnStructArgumentStructStruct16BytesMixed3Leaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 1; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-    Expect.equals(a0.a1[i].a1, result.a1[i].a1);
-    Expect.equals(a0.a1[i].a2, result.a1[i].a2);
-  }
-  for (int i = 0; i < 2; i++) {
-    Expect.equals(a0.a2[i], result.a2[i]);
-  }
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt16 Function(Int8, Int16, Int8),
-    StructAlignmentInt16 Function(
-        int, int, int)>("ReturnStructAlignmentInt16", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testReturnStructAlignmentInt16Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt16Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt32 Function(Int8, Int32, Int8),
-    StructAlignmentInt32 Function(
-        int, int, int)>("ReturnStructAlignmentInt32", isLeaf: true);
-
-/// Test alignment and padding of 32 byte int within struct.
-void testReturnStructAlignmentInt32Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt32Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt64 Function(Int8, Int64, Int8),
-    StructAlignmentInt64 Function(
-        int, int, int)>("ReturnStructAlignmentInt64", isLeaf: true);
-
-/// Test alignment and padding of 64 byte int within struct.
-void testReturnStructAlignmentInt64Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt64Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-        Struct8BytesNestedInt Function(
-            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16),
-        Struct8BytesNestedInt Function(
-            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16)>(
-    "ReturnStruct8BytesNestedInt",
-    isLeaf: true);
-
-/// Simple nested struct.
-void testReturnStruct8BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-
-  final result = returnStruct8BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedFloat Function(Struct4BytesFloat, Struct4BytesFloat),
-    Struct8BytesNestedFloat Function(Struct4BytesFloat,
-        Struct4BytesFloat)>("ReturnStruct8BytesNestedFloat", isLeaf: true);
-
-/// Simple nested struct with floats.
-void testReturnStruct8BytesNestedFloatLeaf() {
-  final a0Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a1 = a1Pointer.ref;
-
-  a0.a0 = -1.0;
-  a1.a0 = 2.0;
-
-  final result = returnStruct8BytesNestedFloatLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a1.a0, result.a1.a0);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct8BytesNestedFloat2Leaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedFloat2 Function(Struct4BytesFloat, Float),
-    Struct8BytesNestedFloat2 Function(Struct4BytesFloat,
-        double)>("ReturnStruct8BytesNestedFloat2", isLeaf: true);
-
-/// The nesting is irregular, testing homogenous float rules on arm and arm64,
-/// and the fpu register usage on x64.
-void testReturnStruct8BytesNestedFloat2Leaf() {
-  final a0Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a0 = a0Pointer.ref;
-  double a1;
-
-  a0.a0 = -1.0;
-  a1 = 2.0;
-
-  final result = returnStruct8BytesNestedFloat2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a1, result.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStruct8BytesNestedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedMixed Function(
-        Struct4BytesHomogeneousInt16, Struct4BytesFloat),
-    Struct8BytesNestedMixed Function(Struct4BytesHomogeneousInt16,
-        Struct4BytesFloat)>("ReturnStruct8BytesNestedMixed", isLeaf: true);
-
-/// Simple nested struct with mixed members.
-void testReturnStruct8BytesNestedMixedLeaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3.0;
-
-  final result = returnStruct8BytesNestedMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.approxEquals(a1.a0, result.a1.a0);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct16BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesNestedInt Function(
-        Struct8BytesNestedInt, Struct8BytesNestedInt),
-    Struct16BytesNestedInt Function(Struct8BytesNestedInt,
-        Struct8BytesNestedInt)>("ReturnStruct16BytesNestedInt", isLeaf: true);
-
-/// Deeper nested struct to test recursive member access.
-void testReturnStruct16BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3;
-  a0.a1.a1 = 4;
-  a1.a0.a0 = -5;
-  a1.a0.a1 = 6;
-  a1.a1.a0 = -7;
-  a1.a1.a1 = 8;
-
-  final result = returnStruct16BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0.a0, result.a0.a0.a0);
-  Expect.equals(a0.a0.a1, result.a0.a0.a1);
-  Expect.equals(a0.a1.a0, result.a0.a1.a0);
-  Expect.equals(a0.a1.a1, result.a0.a1.a1);
-  Expect.equals(a1.a0.a0, result.a1.a0.a0);
-  Expect.equals(a1.a0.a1, result.a1.a0.a1);
-  Expect.equals(a1.a1.a0, result.a1.a1.a0);
-  Expect.equals(a1.a1.a1, result.a1.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct32BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct32BytesNestedInt Function(
-        Struct16BytesNestedInt, Struct16BytesNestedInt),
-    Struct32BytesNestedInt Function(Struct16BytesNestedInt,
-        Struct16BytesNestedInt)>("ReturnStruct32BytesNestedInt", isLeaf: true);
-
-/// Even deeper nested struct to test recursive member access.
-void testReturnStruct32BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0 = -1;
-  a0.a0.a0.a1 = 2;
-  a0.a0.a1.a0 = -3;
-  a0.a0.a1.a1 = 4;
-  a0.a1.a0.a0 = -5;
-  a0.a1.a0.a1 = 6;
-  a0.a1.a1.a0 = -7;
-  a0.a1.a1.a1 = 8;
-  a1.a0.a0.a0 = -9;
-  a1.a0.a0.a1 = 10;
-  a1.a0.a1.a0 = -11;
-  a1.a0.a1.a1 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15;
-  a1.a1.a1.a1 = 16;
-
-  final result = returnStruct32BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0.a0.a0, result.a0.a0.a0.a0);
-  Expect.equals(a0.a0.a0.a1, result.a0.a0.a0.a1);
-  Expect.equals(a0.a0.a1.a0, result.a0.a0.a1.a0);
-  Expect.equals(a0.a0.a1.a1, result.a0.a0.a1.a1);
-  Expect.equals(a0.a1.a0.a0, result.a0.a1.a0.a0);
-  Expect.equals(a0.a1.a0.a1, result.a0.a1.a0.a1);
-  Expect.equals(a0.a1.a1.a0, result.a0.a1.a1.a0);
-  Expect.equals(a0.a1.a1.a1, result.a0.a1.a1.a1);
-  Expect.equals(a1.a0.a0.a0, result.a1.a0.a0.a0);
-  Expect.equals(a1.a0.a0.a1, result.a1.a0.a0.a1);
-  Expect.equals(a1.a0.a1.a0, result.a1.a0.a1.a0);
-  Expect.equals(a1.a0.a1.a1, result.a1.a0.a1.a1);
-  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
-  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
-  Expect.equals(a1.a1.a1.a0, result.a1.a1.a1.a0);
-  Expect.equals(a1.a1.a1.a1, result.a1.a1.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt16Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt16 Function(
-                StructAlignmentInt16, StructAlignmentInt16),
-            StructNestedIntStructAlignmentInt16 Function(
-                StructAlignmentInt16, StructAlignmentInt16)>(
-        "ReturnStructNestedIntStructAlignmentInt16",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 16 byte int.
-void testReturnStructNestedIntStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt16Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt32Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt32 Function(
-                StructAlignmentInt32, StructAlignmentInt32),
-            StructNestedIntStructAlignmentInt32 Function(
-                StructAlignmentInt32, StructAlignmentInt32)>(
-        "ReturnStructNestedIntStructAlignmentInt32",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 32 byte int.
-void testReturnStructNestedIntStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt32Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt64Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt64 Function(
-                StructAlignmentInt64, StructAlignmentInt64),
-            StructNestedIntStructAlignmentInt64 Function(
-                StructAlignmentInt64, StructAlignmentInt64)>(
-        "ReturnStructNestedIntStructAlignmentInt64",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 64 byte int.
-void testReturnStructNestedIntStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt64Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIrregularEvenBiggerLeaf =
-    ffiTestFunctions.lookupFunction<
-        StructNestedIrregularEvenBigger Function(Uint64,
-            StructNestedIrregularBigger, StructNestedIrregularBigger, Double),
-        StructNestedIrregularEvenBigger Function(
-            int,
-            StructNestedIrregularBigger,
-            StructNestedIrregularBigger,
-            double)>("ReturnStructNestedIrregularEvenBigger", isLeaf: true);
-
-/// Return big irregular struct as smoke test.
-void testReturnStructNestedIrregularEvenBiggerLeaf() {
-  int a0;
-  final a1Pointer = calloc<StructNestedIrregularBigger>();
-  final StructNestedIrregularBigger a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructNestedIrregularBigger>();
-  final StructNestedIrregularBigger a2 = a2Pointer.ref;
-  double a3;
-
-  a0 = 1;
-  a1.a0.a0 = 2;
-  a1.a0.a1.a0.a0 = -3;
-  a1.a0.a1.a0.a1 = 4;
-  a1.a0.a1.a1.a0 = -5.0;
-  a1.a0.a2 = 6;
-  a1.a0.a3.a0.a0 = -7.0;
-  a1.a0.a3.a1 = 8.0;
-  a1.a0.a4 = 9;
-  a1.a0.a5.a0.a0 = 10.0;
-  a1.a0.a5.a1.a0 = -11.0;
-  a1.a0.a6 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15.0;
-  a1.a2 = 16.0;
-  a1.a3 = -17.0;
-  a2.a0.a0 = 18;
-  a2.a0.a1.a0.a0 = -19;
-  a2.a0.a1.a0.a1 = 20;
-  a2.a0.a1.a1.a0 = -21.0;
-  a2.a0.a2 = 22;
-  a2.a0.a3.a0.a0 = -23.0;
-  a2.a0.a3.a1 = 24.0;
-  a2.a0.a4 = 25;
-  a2.a0.a5.a0.a0 = 26.0;
-  a2.a0.a5.a1.a0 = -27.0;
-  a2.a0.a6 = 28;
-  a2.a1.a0.a0 = -29;
-  a2.a1.a0.a1 = 30;
-  a2.a1.a1.a0 = -31.0;
-  a2.a2 = 32.0;
-  a2.a3 = -33.0;
-  a3 = 34.0;
-
-  final result = returnStructNestedIrregularEvenBiggerLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1.a0.a0, result.a1.a0.a0);
-  Expect.equals(a1.a0.a1.a0.a0, result.a1.a0.a1.a0.a0);
-  Expect.equals(a1.a0.a1.a0.a1, result.a1.a0.a1.a0.a1);
-  Expect.approxEquals(a1.a0.a1.a1.a0, result.a1.a0.a1.a1.a0);
-  Expect.equals(a1.a0.a2, result.a1.a0.a2);
-  Expect.approxEquals(a1.a0.a3.a0.a0, result.a1.a0.a3.a0.a0);
-  Expect.approxEquals(a1.a0.a3.a1, result.a1.a0.a3.a1);
-  Expect.equals(a1.a0.a4, result.a1.a0.a4);
-  Expect.approxEquals(a1.a0.a5.a0.a0, result.a1.a0.a5.a0.a0);
-  Expect.approxEquals(a1.a0.a5.a1.a0, result.a1.a0.a5.a1.a0);
-  Expect.equals(a1.a0.a6, result.a1.a0.a6);
-  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
-  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
-  Expect.approxEquals(a1.a1.a1.a0, result.a1.a1.a1.a0);
-  Expect.approxEquals(a1.a2, result.a1.a2);
-  Expect.approxEquals(a1.a3, result.a1.a3);
-  Expect.equals(a2.a0.a0, result.a2.a0.a0);
-  Expect.equals(a2.a0.a1.a0.a0, result.a2.a0.a1.a0.a0);
-  Expect.equals(a2.a0.a1.a0.a1, result.a2.a0.a1.a0.a1);
-  Expect.approxEquals(a2.a0.a1.a1.a0, result.a2.a0.a1.a1.a0);
-  Expect.equals(a2.a0.a2, result.a2.a0.a2);
-  Expect.approxEquals(a2.a0.a3.a0.a0, result.a2.a0.a3.a0.a0);
-  Expect.approxEquals(a2.a0.a3.a1, result.a2.a0.a3.a1);
-  Expect.equals(a2.a0.a4, result.a2.a0.a4);
-  Expect.approxEquals(a2.a0.a5.a0.a0, result.a2.a0.a5.a0.a0);
-  Expect.approxEquals(a2.a0.a5.a1.a0, result.a2.a0.a5.a1.a0);
-  Expect.equals(a2.a0.a6, result.a2.a0.a6);
-  Expect.equals(a2.a1.a0.a0, result.a2.a1.a0.a0);
-  Expect.equals(a2.a1.a0.a1, result.a2.a1.a0.a1);
-  Expect.approxEquals(a2.a1.a1.a0, result.a2.a1.a1.a0);
-  Expect.approxEquals(a2.a2, result.a2.a2);
-  Expect.approxEquals(a2.a3, result.a2.a3);
-  Expect.approxEquals(a3, result.a3);
-
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-}
diff --git a/tests/ffi_2/inline_array_multi_dimensional_test.dart b/tests/ffi_2/inline_array_multi_dimensional_test.dart
index 08a5e44..d3a7b40 100644
--- a/tests/ffi_2/inline_array_multi_dimensional_test.dart
+++ b/tests/ffi_2/inline_array_multi_dimensional_test.dart
@@ -11,8 +11,8 @@
 import "package:expect/expect.dart";
 import 'package:ffi/ffi.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOf();
diff --git a/tests/ffi_2/inline_array_test.dart b/tests/ffi_2/inline_array_test.dart
index 70872c3..f3ff6ba 100644
--- a/tests/ffi_2/inline_array_test.dart
+++ b/tests/ffi_2/inline_array_test.dart
@@ -11,8 +11,8 @@
 import "package:expect/expect.dart";
 import 'package:ffi/ffi.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOf();
diff --git a/tests/ffi_2/structs_packed_test.dart b/tests/ffi_2/structs_packed_test.dart
index b50e10c..6834ee7 100644
--- a/tests/ffi_2/structs_packed_test.dart
+++ b/tests/ffi_2/structs_packed_test.dart
@@ -12,8 +12,8 @@
 
 import 'dylib_utils.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOfC();
diff --git a/tests/ffi_2/vmspecific_static_checks_test.dart b/tests/ffi_2/vmspecific_static_checks_test.dart
index 112455c..165b25c 100644
--- a/tests/ffi_2/vmspecific_static_checks_test.dart
+++ b/tests/ffi_2/vmspecific_static_checks_test.dart
@@ -38,6 +38,7 @@
   testFromFunctionClosure();
   testFromFunctionTearOff();
   testFromFunctionAbstract();
+  testFromFunctionFunctionExceptionValueMustBeConst();
   testLookupFunctionGeneric();
   testLookupFunctionGeneric2();
   testLookupFunctionWrongNativeFunctionSignature();
@@ -276,6 +277,12 @@
       testFromFunctionAbstract); //# 76: compile-time error
 }
 
+void testFromFunctionFunctionExceptionValueMustBeConst() {
+  final notAConst = 1.1;
+  Pointer<NativeFunction<NativeDoubleUnOp>> p;
+  p = Pointer.fromFunction(myTimesThree, notAConst); //# 77: compile-time error
+}
+
 void testLookupFunctionGeneric() {
   Function generic<T extends Function>() {
     DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
@@ -714,13 +721,16 @@
 void testLookupFunctionIsLeafMustBeConst() {
   bool notAConst = false;
   DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
-  l.lookupFunction<NativeDoubleUnOp, DoubleUnOp>("timesFour", isLeaf:notAConst); //# 1500: compile-time error
+  l.lookupFunction< //# 1500: compile-time error
+          NativeDoubleUnOp, //# 1500: compile-time error
+          DoubleUnOp>("timesFour", //# 1500: compile-time error
+      isLeaf: notAConst); //# 1500: compile-time error
 }
 
 void testAsFunctionIsLeafMustBeConst() {
   bool notAConst = false;
   Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
-  IntUnOp f = p.asFunction(isLeaf:notAConst); //# 1501: compile-time error
+  IntUnOp f = p.asFunction(isLeaf: notAConst); //# 1501: compile-time error
 }
 
 typedef NativeTakesHandle = Void Function(Handle);
@@ -728,12 +738,16 @@
 
 void testLookupFunctionTakesHandle() {
   DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
-  l.lookupFunction<NativeTakesHandle, TakesHandle>("takesHandle", isLeaf:true); //# 1502: compile-time error
+  l.lookupFunction< //# 1502: compile-time error
+          NativeTakesHandle, //# 1502: compile-time error
+          TakesHandle>("takesHandle", //# 1502: compile-time error
+      isLeaf: true); //# 1502: compile-time error
 }
 
 void testAsFunctionTakesHandle() {
-  Pointer<NativeFunction<NativeTakesHandle>> p = Pointer.fromAddress(1337); //# 1503: compile-time error
-  TakesHandle f = p.asFunction(isLeaf:true); //# 1503: compile-time error
+  Pointer<NativeFunction<NativeTakesHandle>> p = //# 1503: compile-time error
+      Pointer.fromAddress(1337); //# 1503: compile-time error
+  TakesHandle f = p.asFunction(isLeaf: true); //# 1503: compile-time error
 }
 
 typedef NativeReturnsHandle = Handle Function();
@@ -741,12 +755,16 @@
 
 void testLookupFunctionReturnsHandle() {
   DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
-  l.lookupFunction<NativeReturnsHandle, ReturnsHandle>("returnsHandle", isLeaf:true); //# 1504: compile-time error
+  l.lookupFunction< //# 1504: compile-time error
+          NativeReturnsHandle, //# 1504: compile-time error
+          ReturnsHandle>("returnsHandle", //# 1504: compile-time error
+      isLeaf: true); //# 1504: compile-time error
 }
 
 void testAsFunctionReturnsHandle() {
-  Pointer<NativeFunction<NativeReturnsHandle>> p = Pointer.fromAddress(1337); //# 1505: compile-time error
-  ReturnsHandle f = p.asFunction(isLeaf:true); //# 1505: compile-time error
+  Pointer<NativeFunction<NativeReturnsHandle>> p = //# 1505: compile-time error
+      Pointer.fromAddress(1337); //# 1505: compile-time error
+  ReturnsHandle f = p.asFunction(isLeaf: true); //# 1505: compile-time error
 }
 
 @Packed(1)
diff --git a/tests/language/const/constant_type_variable_error_test.dart b/tests/language/const/constant_type_variable_error_test.dart
index c0e7770..6e2438b 100644
--- a/tests/language/const/constant_type_variable_error_test.dart
+++ b/tests/language/const/constant_type_variable_error_test.dart
@@ -8,41 +8,49 @@
 // constant expressions or potentially constant type expressions.
 
 class A<X> {
-  final Object x1, x2, x3, x4, x5, x6, x7, x8, x9;
+  final Object x1, x2, x3, x4, x5, x6, x7, x8;
 
   const A()
       : x1 = const [X],
         //^
         // [analyzer] unspecified
-        // [cfe] unspecified
+        //          ^
+        // [cfe] Type variables can't be used as constants.
         x2 = const <X>[],
         //^
         // [analyzer] unspecified
-        // [cfe] unspecified
+        //          ^
+        // [cfe] Type variables can't be used as constants.
         x3 = const {X},
         //^
         // [analyzer] unspecified
-        // [cfe] unspecified
+        //          ^
+        // [cfe] Type variables can't be used as constants.
         x4 = const <X>{},
         //^
         // [analyzer] unspecified
-        // [cfe] unspecified
+        //          ^
+        // [cfe] Type variables can't be used as constants.
         x5 = const {X: null},
         //^
         // [analyzer] unspecified
-        // [cfe] unspecified
+        //          ^
+        // [cfe] Type variables can't be used as constants.
         x6 = const <X, String?>{},
         //^
         // [analyzer] unspecified
-        // [cfe] unspecified
+        //          ^
+        // [cfe] Type variables can't be used as constants.
         x7 = const B<X>(),
         //^
         // [analyzer] unspecified
-        // [cfe] unspecified
+        //           ^
+        // [cfe] Type variables can't be used as constants.
         x8 = const C(X);
   //^
   // [analyzer] unspecified
-  // [cfe] unspecified
+  //                 ^
+  // [cfe] Type variables can't be used as constants.
 }
 
 class B<X> {
diff --git a/tests/language/constructor/reference_test.dart b/tests/language/constructor/reference_test.dart
index 6828160..06755d1 100644
--- a/tests/language/constructor/reference_test.dart
+++ b/tests/language/constructor/reference_test.dart
@@ -97,8 +97,7 @@
   Foo.bar<int>.baz();
 //       ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
-//             ^
-// [cfe] The method 'baz' isn't defined for the class 'Foo<int> Function()'.
+// [cfe] A constructor tear-off can't have type arguments after the constructor name.
   Foo.bar.baz<int>();
 //        ^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
diff --git a/tests/language/explicit_type_instantiation_parsing_test.dart b/tests/language/explicit_type_instantiation_parsing_test.dart
index e0584e7..a7c748c 100644
--- a/tests/language/explicit_type_instantiation_parsing_test.dart
+++ b/tests/language/explicit_type_instantiation_parsing_test.dart
@@ -307,9 +307,7 @@
   // Valid only if parenthesized.
   expect1((Z < X, X >) < 4);
 
-  // Still can't instantiate something non-generic.
-  /**/ v<int>;
-  //    ^^^^^
-  // [cfe] The static type of the explicit instantiation operand must be a generic function type but is 'Object?'.
-  // [analyzer] unspecified
+  // Since `v` has type `Object?`, this is an extension invocation of the
+  // implicit `call` tear off.
+  /**/ v<int, String>;
 }
diff --git a/tests/language/getter/no_setter_test.dart b/tests/language/getter/no_setter_test.dart
index 260b5fc..6fa7014 100644
--- a/tests/language/getter/no_setter_test.dart
+++ b/tests/language/getter/no_setter_test.dart
@@ -15,7 +15,6 @@
 // [cfe] Setter not found: 'nextVar'.
     this.nextVar = 1;
     //   ^^^^^^^
-    // [analyzer] COMPILE_TIME_ERROR.INSTANCE_ACCESS_TO_STATIC_MEMBER
     // [cfe] The setter 'nextVar' isn't defined for the class 'Example'.
     //   ^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
@@ -30,8 +29,6 @@
 // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_THIS
 // [cfe] Expected identifier, but got 'this'.
 //       ^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.INSTANCE_ACCESS_TO_STATIC_MEMBER
-//       ^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
   }
 }
diff --git a/tests/language/library/env_test.dart b/tests/language/library/env_test.dart
index a80b8c1..9adcf8d 100644
--- a/tests/language/library/env_test.dart
+++ b/tests/language/library/env_test.dart
@@ -47,10 +47,6 @@
         expectedResult,
         const bool.fromEnvironment("dart.library.web_gl",
             defaultValue: NOT_PRESENT));
-    Expect.equals(
-        expectedResult,
-        const bool.fromEnvironment("dart.library.web_sql",
-            defaultValue: NOT_PRESENT));
   }
 
   bool? hasIoSupport;
diff --git a/tests/language/metadata/type_parameter_scope_other_test.dart b/tests/language/metadata/type_parameter_scope_other_test.dart
index d411e2f..a393588 100644
--- a/tests/language/metadata/type_parameter_scope_other_test.dart
+++ b/tests/language/metadata/type_parameter_scope_other_test.dart
@@ -16,7 +16,7 @@
 class Class<T, @Annotation(T) U> {}
 //                         ^
 // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
-// [cfe] Type variables can't be used in static members.
+// [cfe] Type variables can't be used as constants.
 
 void function<T, @Annotation(T) U>() {}
 //                           ^
@@ -26,7 +26,7 @@
 extension Extension<T, @Annotation(T) U> on Map<T, U> {}
 //                                 ^
 // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
-// [cfe] Type variables can't be used in static members.
+// [cfe] Type variables can't be used as constants.
 
 class C {
   void method<T, @Annotation(T) U>() {}
@@ -38,7 +38,7 @@
 mixin Mixin<T, @Annotation(T) U> {}
 //                         ^
 // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
-// [cfe] Type variables can't be used in static members.
+// [cfe] Type variables can't be used as constants.
 
 typedef void Typedef1<T, @Annotation(T) U>(T t, U u);
 //                                   ^
diff --git a/tests/language/named_arguments_anywhere/all_kinds_test.dart b/tests/language/named_arguments_anywhere/all_kinds_test.dart
new file mode 100644
index 0000000..38ea69e
--- /dev/null
+++ b/tests/language/named_arguments_anywhere/all_kinds_test.dart
@@ -0,0 +1,422 @@
+// Copyright (c) 2021, 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.
+
+// Check that placing a named argument anywhere in the argument list works for
+// all kinds of invocations.
+
+// SharedOptions=--enable-experiment=named-arguments-anywhere
+
+import "package:expect/expect.dart";
+
+List<Object?> arguments = [];
+
+X evaluate<X>(X x) {
+  arguments.add(x);
+  return x;
+}
+
+void runAndCheckEvaluationOrder(
+    List<Object?> expectedArguments,
+    void Function() functionToRun) {
+  arguments.clear();
+  functionToRun();
+  Expect.listEquals(expectedArguments, arguments);
+}
+
+class A {
+  A(int x, String y, {bool z = false, required double w}) {
+    Expect.equals(1, x);
+    Expect.equals("2", y);
+    Expect.isFalse(z);
+    Expect.equals(3.14, w);
+  }
+
+  A.redir1() : this(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+
+  A.redir2() : this(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+
+  A.redir3() : this(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+
+  A.redir4() : this(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+
+  A.redir5() : this(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+
+  A.redir6() : this(evaluate(1), w: evaluate(3.14), evaluate("2"));
+
+  factory A.foo(int x, String y, {bool z = false, required double w}) {
+    Expect.equals(1, x);
+    Expect.equals("2", y);
+    Expect.isFalse(z);
+    Expect.equals(3.14, w);
+    return A(x, y, z: z, w: w);
+  }
+
+  factory A.redirFactory(int x, String y, {bool z, required double w}) = A;
+
+  void Function(int x, String y, {bool z, required double w}) get property {
+    return A.foo;
+  }
+
+  void bar(int x, String y, {bool z = false, required double w}) {
+    Expect.equals(1, x);
+    Expect.equals("2", y);
+    Expect.isFalse(z);
+    Expect.equals(3.14, w);
+  }
+
+  void call(int x, String y, {bool z = false, required double w}) {
+    Expect.equals(1, x);
+    Expect.equals("2", y);
+    Expect.isFalse(z);
+    Expect.equals(3.14, w);
+  }
+}
+
+typedef B = A;
+
+foo(int x, String y, {bool z = false, required double w}) {
+  Expect.equals(1, x);
+  Expect.equals("2", y);
+  Expect.isFalse(z);
+  Expect.equals(3.14, w);
+}
+
+test(dynamic d, Function f, A a) {
+  void local(int x, String y, {bool z = false, required double w}) {
+    Expect.equals(1, x);
+    Expect.equals("2", y);
+    Expect.isFalse(z);
+    Expect.equals(3.14, w);
+  }
+
+  // StaticInvocation.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      foo(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      foo(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      foo(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      foo(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      foo(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      foo(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+
+  // FactoryConstructorInvocation.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      A.foo(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      A.foo(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      A.foo(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      B.foo(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      B.foo(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      B.foo(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      B.foo(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      B.foo(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      B.foo(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+
+  // ConstructorInvocation.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      A(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      A(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      A(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      B(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      B(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      B(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      B(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      B(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      B(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+
+  // DynamicInvocation.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      d(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      d(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      d(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      d(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      d(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      d(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+
+  // FunctionInvocation.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      f(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      f(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      f(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      f(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      f(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      f(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+
+  // InstanceGetterInvocation.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      a.property(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      a.property(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      a.property(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      a.property(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      a.property(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      a.property(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+
+  // InstanceInvocation.
+  runAndCheckEvaluationOrder([a, 1, "2", false, 3.14], () {
+      evaluate(a).bar(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([a, 1, false, "2", 3.14], () {
+      evaluate(a).bar(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([a, false, 1, "2", 3.14], () {
+      evaluate(a).bar(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([a, 3.14, 1, "2", false], () {
+      evaluate(a).bar(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([a, 1, 3.14, "2", false], () {
+      evaluate(a).bar(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([a, 1, 3.14, "2"], () {
+      evaluate(a).bar(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+
+  // LocalFunctionInvocation.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      local(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      local(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      local(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      local(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      local(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      local(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+
+  // Redirecting generative constructors.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      A.redir1();
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      A.redir2();
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      A.redir3();
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      A.redir4();
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      A.redir5();
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      A.redir6();
+  });
+
+  // Redirecting factory constructors.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      A.redirFactory(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      A.redirFactory(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      A.redirFactory(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      A.redirFactory(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      A.redirFactory(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      A.redirFactory(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+
+  // Constructor super initializers.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      Test.super1();
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      Test.super2();
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      Test.super3();
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      Test.super4();
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      Test.super5();
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      Test.super6();
+  });
+
+  // Implicit .call insertion.
+  runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+      a(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+      a(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+      a(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  });
+  runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+      a(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+      a(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  });
+  runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+      a(evaluate(1), w: evaluate(3.14), evaluate("2"));
+  });
+}
+
+class Test extends A {
+  Test() : super(1, "2", z: false, w: 3.14);
+
+  Test.super1() : super(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  Test.super2() : super(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  Test.super3() : super(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  Test.super4() : super(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  Test.super5() : super(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  Test.super6() : super(evaluate(1), w: evaluate(3.14), evaluate("2"));
+
+  test() {
+    runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+        super.bar(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    });
+    runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+        super.bar(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    });
+    runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+        super.bar(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    });
+    runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+        super.bar(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    });
+    runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+        super.bar(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    });
+    runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+        super.bar(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    });
+
+    // Using super.call() implicitly.
+    runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
+        super(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    });
+    runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
+        super(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    });
+    runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
+        super(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    });
+    runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
+        super(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    });
+    runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
+        super(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    });
+    runAndCheckEvaluationOrder([1, 3.14, "2"], () {
+        super(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    });
+  }
+}
+
+extension E on A {
+  test() {
+    runAndCheckEvaluationOrder(["1", 2], () {
+        method(foo: evaluate("1"), evaluate(2)); // This call.
+    });
+  }
+  method(int bar, {String? foo}) {
+    Expect.equals(2, bar);
+    Expect.equals("1", foo);
+  }
+}
+
+main() {
+  A a = A(1, "2", z: false, w: 3.14);
+
+  test(A.foo, A.foo, a);
+  Test().test();
+  a.test();
+}
diff --git a/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart b/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart
new file mode 100644
index 0000000..52adfbc
--- /dev/null
+++ b/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2021, 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.
+
+// Checks that compile-time errors in the arguments are reported when the named
+// arguments are placed before the positional.
+
+// SharedOptions=--enable-experiment=named-arguments-anywhere
+
+const a42 = const A(42);
+
+class A {
+  final int value;
+
+  const A(this.value);
+}
+
+class B {
+  final A a;
+
+  const B(this.a) : assert(identical(a, a42));
+}
+
+foo(B x, {required B y}) {}
+
+test() {
+  foo(const B(const A(0)), y: const B(new A(42)));
+  //  ^^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_THROWS_EXCEPTION
+  //        ^
+  // [cfe] Constant evaluation error:
+  //                          ^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_THROWS_EXCEPTION
+  //                                  ^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+  // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+  // [cfe] New expression is not a constant expression.
+  //                                      ^
+  // [cfe] New expression is not a constant expression.
+  foo(y: const B(new A(42)), const B(const A(0)));
+  //     ^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_THROWS_EXCEPTION
+  //             ^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
+  // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
+  // [cfe] New expression is not a constant expression.
+  //                 ^
+  // [cfe] New expression is not a constant expression.
+  //                         ^^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_THROWS_EXCEPTION
+  //                               ^
+  // [cfe] Constant evaluation error:
+}
+
+main() {}
diff --git a/tests/language/named_arguments_anywhere/order_side_effects_ok_test.dart b/tests/language/named_arguments_anywhere/order_side_effects_ok_test.dart
new file mode 100644
index 0000000..9dd9e93
--- /dev/null
+++ b/tests/language/named_arguments_anywhere/order_side_effects_ok_test.dart
@@ -0,0 +1,72 @@
+// Copyright (c) 2021, 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.
+
+// Checks that typeinference on arguments continues working after their order is
+// changed.
+
+// SharedOptions=--enable-experiment=named-arguments-anywhere
+
+import "package:expect/expect.dart";
+
+Type? argument = null;
+
+void registerTypeArgument<X>() {
+  argument = X;
+}
+
+void runAndCheckForTypeArgument(Type expectedArgument, void Function() functionToRun) {
+  argument = null;
+  functionToRun();
+  Expect.equals(expectedArgument, argument);
+}
+
+class BGeneric<X> {
+  const BGeneric();
+}
+
+void fooGeneric<X>(BGeneric<X> x, {required BGeneric<List<X>> y}) {
+  registerTypeArgument<X>();
+}
+
+void fooFunction(int x, {required double Function(double) y}) {
+  y(3.14);
+}
+
+X bar<X>(X x) {
+  registerTypeArgument<X>();
+  return x;
+}
+
+void fooFunctionGeneric<X>(int x, {required void Function(X) y}) {
+  registerTypeArgument<X>();
+}
+
+void main() {
+  runAndCheckForTypeArgument(dynamic, () {
+      fooGeneric(const BGeneric(), y: const BGeneric());
+  });
+  runAndCheckForTypeArgument(dynamic, () {
+      fooGeneric(y: const BGeneric(), const BGeneric());
+  });
+  runAndCheckForTypeArgument(int, () {
+      fooGeneric(const BGeneric<int>(), y: const BGeneric<List<int>>());
+  });
+  runAndCheckForTypeArgument(String, () {
+      fooGeneric(y: const BGeneric<List<String>>(), const BGeneric<String>());
+  });
+
+  runAndCheckForTypeArgument(double, () {
+      fooFunction(42, y: bar);
+  });
+  runAndCheckForTypeArgument(double, () {
+      fooFunction(y: bar, 42);
+  });
+
+  runAndCheckForTypeArgument(String, () {
+      fooFunctionGeneric(42, y: (String x) {});
+  });
+  runAndCheckForTypeArgument(num, () {
+      fooFunctionGeneric(y: (num x) {}, 42);
+  });
+}
diff --git a/tests/language/nnbd/definite_assignment/read_error_test.dart b/tests/language/nnbd/definite_assignment/read_error_test.dart
index 2747df3..02146b3 100644
--- a/tests/language/nnbd/definite_assignment/read_error_test.dart
+++ b/tests/language/nnbd/definite_assignment/read_error_test.dart
@@ -9,7 +9,7 @@
 /// tests that check that a reasonable subset of the possible control flow
 /// patterns produce the expected definite (un)-assignment behavior.
 ///
-/// This test checks the the read component of the former.  That is, it tests
+/// This test checks the read component of the former.  That is, it tests
 /// errors associated with reads of local variables based on definite
 /// assignment.
 
diff --git a/tests/language/nnbd/definite_assignment/write_error_test.dart b/tests/language/nnbd/definite_assignment/write_error_test.dart
index 4c6c00e..1da787a 100644
--- a/tests/language/nnbd/definite_assignment/write_error_test.dart
+++ b/tests/language/nnbd/definite_assignment/write_error_test.dart
@@ -9,7 +9,7 @@
 /// tests that check that a reasonable subset of the possible control flow
 /// patterns produce the expected definite (un)-assignment behavior.
 ///
-/// This test checks the the write component of the former.  That is, it tests
+/// This test checks the write component of the former.  That is, it tests
 /// errors associated with writes of local variables based on definite
 /// assignment.
 
diff --git a/tests/language/operator/div_with_power_of_two2_test.dart b/tests/language/operator/div_with_power_of_two2_test.dart
index ef58026..72cddc6 100644
--- a/tests/language/operator/div_with_power_of_two2_test.dart
+++ b/tests/language/operator/div_with_power_of_two2_test.dart
@@ -146,7 +146,6 @@
         Expect.equals(res, f(arg));
       }
     }
-    Expect.throws(() => divBy0(4),
-        (e) => e is IntegerDivisionByZeroException || e is UnsupportedError);
+    Expect.throws<UnsupportedError>(() => divBy0(4));
   }
 }
diff --git a/tests/language/operator/integer_division_by_zero_test.dart b/tests/language/operator/integer_division_by_zero_test.dart
index 03cd661..117bd18 100644
--- a/tests/language/operator/integer_division_by_zero_test.dart
+++ b/tests/language/operator/integer_division_by_zero_test.dart
@@ -7,8 +7,43 @@
 
 import "package:expect/expect.dart";
 
-divBy0(a) => a ~/ 0;
+num divBy(num a, num b) => a ~/ b;
 
 main() {
-  Expect.throws(() => divBy0(4), (e) => e is IntegerDivisionByZeroException);
+  // Dividing integers by zero is an error.
+  Expect.throws<Error>(() => divBy(1, 0));
+  Expect.throws<Error>(() => divBy(0, 0));
+
+  // Dividing doubles by zero is an error (result is never finite).
+  Expect.throws<Error>(() => divBy(1.0, 0));
+  Expect.throws<Error>(() => divBy(1, 0.0));
+  Expect.throws<Error>(() => divBy(1, -0.0));
+  Expect.throws<Error>(() => divBy(1.0, 0.0));
+  // Double division yielding infinity is an error, even when not dividing
+  // by zero.
+  Expect.throws<Error>(() => divBy(double.maxFinite, 0.5));
+  Expect.throws<Error>(() => divBy(1, double.minPositive));
+  Expect.throws<Error>(() => divBy(double.infinity, 2.0));
+  Expect.throws<Error>(() => divBy(-double.maxFinite, 0.5));
+  Expect.throws<Error>(() => divBy(-1, double.minPositive));
+  Expect.throws<Error>(() => divBy(-double.infinity, 2.0));
+  // Double division yielding NaN is an error.
+  Expect.throws<Error>(() => divBy(0.0, 0.0));
+  Expect.throws<Error>(() => divBy(double.infinity, double.infinity));
+  Expect.throws<Error>(() => divBy(-0.0, 0.0));
+  Expect.throws<Error>(() => divBy(-double.infinity, double.infinity));
+
+  // Truncating division containing a double truncates to max integer
+  // on non-web.
+  num one = 1;
+  if (one is! double) {
+    var minInt = -0x8000000000000000;
+    var maxInt = minInt - 1;
+    Expect.isTrue(maxInt > 0);
+    // Not on web.
+    Expect.equals(divBy(double.maxFinite, 2), maxInt);
+    Expect.equals(divBy(-double.maxFinite, 2), minInt);
+    Expect.equals(divBy(maxInt, 0.25), maxInt);
+    Expect.equals(divBy(minInt, 0.25), minInt);
+  }
 }
diff --git a/tests/language/operator/modulo_test.dart b/tests/language/operator/modulo_test.dart
index ae55626..8f20730 100644
--- a/tests/language/operator/modulo_test.dart
+++ b/tests/language/operator/modulo_test.dart
@@ -13,11 +13,11 @@
   for (int i = -30; i < 30; i++) {
     Expect.equals(i % 256, foo(i));
     Expect.equals(i % -256, boo(i));
-    Expect.throws(() => hoo(i), (e) => e is IntegerDivisionByZeroException);
+    Expect.throws(() => hoo(i), (e) => e is UnsupportedError);
 
     Expect.equals(i ~/ 254 + i % 254, fooTwo(i));
     Expect.equals(i ~/ -254 + i % -254, booTwo(i));
-    Expect.throws(() => hooTwo(i), (e) => e is IntegerDivisionByZeroException);
+    Expect.throws(() => hooTwo(i), (e) => e is UnsupportedError);
     if (i > 0) {
       Expect.equals(i % 10, noDom(i));
     } else {
@@ -35,8 +35,8 @@
       Expect.equals(i ~/ i + i % i, fooTwo2(i));
     }
   }
-  Expect.throws(() => foo2(0), (e) => e is IntegerDivisionByZeroException);
-  Expect.throws(() => fooTwo2(0), (e) => e is IntegerDivisionByZeroException);
+  Expect.throws(() => foo2(0), (e) => e is UnsupportedError);
+  Expect.throws(() => fooTwo2(0), (e) => e is UnsupportedError);
 }
 
 foo(i) => i % 256; // This will get optimized to AND instruction.
diff --git a/tests/language/operator/truncdiv_test.dart b/tests/language/operator/truncdiv_test.dart
index bd043d1..12b53fe 100644
--- a/tests/language/operator/truncdiv_test.dart
+++ b/tests/language/operator/truncdiv_test.dart
@@ -17,10 +17,8 @@
     }
   }
   // We don't specify the exact exception type here, that is covered in
-  // truncdiv_zero_test. The correct answer is IntegerDivisionByZeroException,
-  // but the web platform has only one num type and can't distinguish between
-  // int and double, so it throws UnsupportedError (the behaviour for double).
-  Expect.throws(() => foo2(0));
+  // truncdiv_zero_test.
+  Expect.throws<UnsupportedError>(() => foo2(0));
 }
 
 foo(i, x) => i % x;
diff --git a/tests/language/operator/truncdiv_zero_test.dart b/tests/language/operator/truncdiv_zero_test.dart
index 34cecc3..11f0bb4 100644
--- a/tests/language/operator/truncdiv_zero_test.dart
+++ b/tests/language/operator/truncdiv_zero_test.dart
@@ -9,6 +9,6 @@
 import "truncdiv_test.dart" as truncdiv_test show foo, foo2;
 
 main() {
-  Expect.throws<IntegerDivisionByZeroException>(() => truncdiv_test.foo(12, 0));
-  Expect.throws<IntegerDivisionByZeroException>(() => truncdiv_test.foo2(0));
+  Expect.throws<UnsupportedError>(() => truncdiv_test.foo(12, 0));
+  Expect.throws<UnsupportedError>(() => truncdiv_test.foo2(0));
 }
diff --git a/tests/language/regress/regress31596_covariant_declaration_test.dart b/tests/language/regress/regress31596_covariant_declaration_test.dart
index c9c9053..9b91bd4 100644
--- a/tests/language/regress/regress31596_covariant_declaration_test.dart
+++ b/tests/language/regress/regress31596_covariant_declaration_test.dart
@@ -2,6 +2,10 @@
 // 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.
 
+// Test the treatment of a method whose signature has a covariant parameter
+// in the interface of a class `C`, when the implementation of that method
+// is inherited and its parameter is not covariant.
+
 class I0 {}
 
 class A {}
@@ -16,9 +20,7 @@
   void f(covariant A x);
 }
 
+// As of dart-lang/language#1833 this is not a compile-time.
 class D extends C implements I {}
-//    ^
-// [analyzer] COMPILE_TIME_ERROR.INVALID_IMPLEMENTATION_OVERRIDE
-// [cfe] unspecified
 
 main() {}
diff --git a/tests/language/type_variable/scope_test.dart b/tests/language/type_variable/scope_test.dart
index 2a68d15..8253f03 100644
--- a/tests/language/type_variable/scope_test.dart
+++ b/tests/language/type_variable/scope_test.dart
@@ -11,9 +11,8 @@
   Foo<T>
   //  ^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
+  // [cfe] Type variables can't be used in static members.
       m(
-//    ^
-// [cfe] Can only use type variables in instance methods.
     Foo<T>
     //  ^
     // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
@@ -41,26 +40,19 @@
   //              ^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
   // [cfe] Type variables can't be used in static members.
-  //                 ^
-  // [cfe] Verification of the generated program failed:
-  //                 ^
-  // [cfe] Verification of the generated program failed:
 
   static
   Foo<T>
   //  ^
   // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
+  // [cfe] Type variables can't be used in static members.
       get f {
-      //  ^
-      // [cfe] Can only use type variables in instance methods.
     return new Foo<String>();
     //     ^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
   }
 
   static void set f(
-  //              ^
-  // [cfe] Can only use type variables in instance methods.
                     Foo<T>
                     //  ^
                     // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
@@ -80,8 +72,6 @@
   Foo.f1 = new Foo<String>();
   //       ^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
-  //           ^
-  // [cfe] A value of type 'Foo<String>' can't be assigned to a variable of type 'Foo<T>'.
   var x = Foo.f;
   Foo.f = x;
 }
diff --git a/tests/language/vm/div_mod_test.dart b/tests/language/vm/div_mod_test.dart
index ea22240..84c8c71 100755
--- a/tests/language/vm/div_mod_test.dart
+++ b/tests/language/vm/div_mod_test.dart
@@ -138,7 +138,7 @@
     bool threw = false;
     try {
       div0(i);
-    } on IntegerDivisionByZeroException catch (e) {
+    } on UnsupportedError catch (e) {
       threw = true;
     }
     Expect.isTrue(threw);
@@ -149,7 +149,7 @@
     bool threw = false;
     try {
       mod0(i);
-    } on IntegerDivisionByZeroException catch (e) {
+    } on UnsupportedError catch (e) {
       threw = true;
     }
     Expect.isTrue(threw);
diff --git a/tests/language/vm/modtruncdiv_int_test.dart b/tests/language/vm/modtruncdiv_int_test.dart
index 9fc5b53..5948647 100644
--- a/tests/language/vm/modtruncdiv_int_test.dart
+++ b/tests/language/vm/modtruncdiv_int_test.dart
@@ -285,14 +285,14 @@
     try {
       doModVars(9, 9, -9, 0);
       acc = 0; // don't reach!
-    } on IntegerDivisionByZeroException catch (e, s) {}
+    } on UnsupportedError catch (e, s) {}
     Expect.equals(12, acc);
 
     acc = 0;
     try {
       doTruncDivVars(9, 9, -9, 0);
       acc = 0; // don't reach!
-    } on IntegerDivisionByZeroException catch (e, s) {}
+    } on UnsupportedError catch (e, s) {}
     Expect.equals(-23, acc);
   }
 }
diff --git a/tests/language/vm/regress_flutter_89584_test.dart b/tests/language/vm/regress_flutter_89584_test.dart
new file mode 100644
index 0000000..7fa3a2e
--- /dev/null
+++ b/tests/language/vm/regress_flutter_89584_test.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2021, 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.
+
+// This is a regression test for the bug in
+// https://github.com/flutter/flutter/issues/89584.
+// Verifies a Field::RecordStore is not done before all fields populated.
+
+// VMOptions=--no-enable-isolate-groups
+// VMOptions=--enable-isolate-groups
+
+import 'dart:isolate';
+import 'dart:typed_data';
+
+void main() async {
+  final receivePort = ReceivePort();
+  await Isolate.spawn<SendPort>(isolateEntry, receivePort.sendPort);
+  final wrapper = (await receivePort.first) as Wrapper;
+  final result = readWrapperUint8ListView(wrapper);
+  print(result);
+}
+
+const uint8ListLength = 1000000;
+
+void isolateEntry(SendPort sendPort) async {
+  final uint8list = Uint8List(uint8ListLength);
+  sendPort.send(Wrapper(
+    uint8list.buffer.asUint8List(0, uint8list.length),
+  ));
+}
+
+int readWrapperUint8ListView(Wrapper wrapper) {
+  var result = 0;
+  for (int i = 0; i < uint8ListLength; i++) {
+    result += wrapper.uint8ListView[i];
+  }
+  return result;
+}
+
+class Wrapper {
+  final Uint8List uint8ListView;
+  Wrapper(this.uint8ListView);
+}
diff --git a/tests/language/vm/regression_37622_test.dart b/tests/language/vm/regression_37622_test.dart
index d5999fc..b11e9a4 100755
--- a/tests/language/vm/regression_37622_test.dart
+++ b/tests/language/vm/regression_37622_test.dart
@@ -30,7 +30,7 @@
   bool d = false;
   try {
     x = foo();
-  } on IntegerDivisionByZeroException catch (e) {
+  } on UnsupportedError catch (e) {
     d = true;
   }
   Expect.equals(x, 0);
diff --git a/tests/language_2/getter/no_setter_test.dart b/tests/language_2/getter/no_setter_test.dart
index 02bc833..9690f56 100644
--- a/tests/language_2/getter/no_setter_test.dart
+++ b/tests/language_2/getter/no_setter_test.dart
@@ -17,7 +17,6 @@
 // [cfe] Setter not found: 'nextVar'.
     this.nextVar = 1;
     //   ^^^^^^^
-    // [analyzer] COMPILE_TIME_ERROR.INSTANCE_ACCESS_TO_STATIC_MEMBER
     // [cfe] The setter 'nextVar' isn't defined for the class 'Example'.
     //   ^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
@@ -32,8 +31,6 @@
 // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_THIS
 // [cfe] Expected identifier, but got 'this'.
 //       ^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.INSTANCE_ACCESS_TO_STATIC_MEMBER
-//       ^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
   }
 }
diff --git a/tests/language_2/library/env_test.dart b/tests/language_2/library/env_test.dart
index 9367eb5..8df205b 100644
--- a/tests/language_2/library/env_test.dart
+++ b/tests/language_2/library/env_test.dart
@@ -49,10 +49,6 @@
         expectedResult,
         const bool.fromEnvironment("dart.library.web_gl",
             defaultValue: NOT_PRESENT));
-    Expect.equals(
-        expectedResult,
-        const bool.fromEnvironment("dart.library.web_sql",
-            defaultValue: NOT_PRESENT));
   }
 
   bool hasIoSupport;
diff --git a/tests/language_2/metadata/type_parameter_scope_other_test.dart b/tests/language_2/metadata/type_parameter_scope_other_test.dart
index d411e2f..a393588 100644
--- a/tests/language_2/metadata/type_parameter_scope_other_test.dart
+++ b/tests/language_2/metadata/type_parameter_scope_other_test.dart
@@ -16,7 +16,7 @@
 class Class<T, @Annotation(T) U> {}
 //                         ^
 // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
-// [cfe] Type variables can't be used in static members.
+// [cfe] Type variables can't be used as constants.
 
 void function<T, @Annotation(T) U>() {}
 //                           ^
@@ -26,7 +26,7 @@
 extension Extension<T, @Annotation(T) U> on Map<T, U> {}
 //                                 ^
 // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
-// [cfe] Type variables can't be used in static members.
+// [cfe] Type variables can't be used as constants.
 
 class C {
   void method<T, @Annotation(T) U>() {}
@@ -38,7 +38,7 @@
 mixin Mixin<T, @Annotation(T) U> {}
 //                         ^
 // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
-// [cfe] Type variables can't be used in static members.
+// [cfe] Type variables can't be used as constants.
 
 typedef void Typedef1<T, @Annotation(T) U>(T t, U u);
 //                                   ^
diff --git a/tests/language_2/operator/div_with_power_of_two2_test.dart b/tests/language_2/operator/div_with_power_of_two2_test.dart
index fdbf571..b3db5ce 100644
--- a/tests/language_2/operator/div_with_power_of_two2_test.dart
+++ b/tests/language_2/operator/div_with_power_of_two2_test.dart
@@ -148,7 +148,7 @@
         Expect.equals(res, f(arg));
       }
     }
-    Expect.throws(() => divBy0(4),
-        (e) => e is IntegerDivisionByZeroException || e is UnsupportedError);
+    Expect.throws<UnsupportedError>(() => divBy0(4));
+    ;
   }
 }
diff --git a/tests/language_2/operator/integer_division_by_zero_test.dart b/tests/language_2/operator/integer_division_by_zero_test.dart
index 3ba518a..e1fc343 100644
--- a/tests/language_2/operator/integer_division_by_zero_test.dart
+++ b/tests/language_2/operator/integer_division_by_zero_test.dart
@@ -9,8 +9,43 @@
 
 import "package:expect/expect.dart";
 
-divBy0(a) => a ~/ 0;
+num divBy(num a, num b) => a ~/ b;
 
 main() {
-  Expect.throws(() => divBy0(4), (e) => e is IntegerDivisionByZeroException);
+  // Dividing integers by zero is an error.
+  Expect.throws<Error>(() => divBy(1, 0));
+  Expect.throws<Error>(() => divBy(0, 0));
+
+  // Dividing doubles by zero is an error (result is never finite).
+  Expect.throws<Error>(() => divBy(1.0, 0));
+  Expect.throws<Error>(() => divBy(1, 0.0));
+  Expect.throws<Error>(() => divBy(1, -0.0));
+  Expect.throws<Error>(() => divBy(1.0, 0.0));
+  // Double division yielding infinity is an error, even when not dividing
+  // by zero.
+  Expect.throws<Error>(() => divBy(double.maxFinite, 0.5));
+  Expect.throws<Error>(() => divBy(1, double.minPositive));
+  Expect.throws<Error>(() => divBy(double.infinity, 2.0));
+  Expect.throws<Error>(() => divBy(-double.maxFinite, 0.5));
+  Expect.throws<Error>(() => divBy(-1, double.minPositive));
+  Expect.throws<Error>(() => divBy(-double.infinity, 2.0));
+  // Double division yielding NaN is an error.
+  Expect.throws<Error>(() => divBy(0.0, 0.0));
+  Expect.throws<Error>(() => divBy(double.infinity, double.infinity));
+  Expect.throws<Error>(() => divBy(-0.0, 0.0));
+  Expect.throws<Error>(() => divBy(-double.infinity, double.infinity));
+
+  // Truncating division containing a double truncates to max integer
+  // on non-web.
+  num one = 1;
+  if (one is! double) {
+    var minInt = -0x8000000000000000;
+    var maxInt = minInt - 1;
+    Expect.isTrue(maxInt > 0);
+    // Not on web.
+    Expect.equals(divBy(double.maxFinite, 2), maxInt);
+    Expect.equals(divBy(-double.maxFinite, 2), minInt);
+    Expect.equals(divBy(maxInt, 0.25), maxInt);
+    Expect.equals(divBy(minInt, 0.25), minInt);
+  }
 }
diff --git a/tests/language_2/operator/modulo_test.dart b/tests/language_2/operator/modulo_test.dart
index 6e38c09..417c556 100644
--- a/tests/language_2/operator/modulo_test.dart
+++ b/tests/language_2/operator/modulo_test.dart
@@ -15,11 +15,11 @@
   for (int i = -30; i < 30; i++) {
     Expect.equals(i % 256, foo(i));
     Expect.equals(i % -256, boo(i));
-    Expect.throws(() => hoo(i), (e) => e is IntegerDivisionByZeroException);
+    Expect.throws(() => hoo(i), (e) => e is UnsupportedError);
 
     Expect.equals(i ~/ 254 + i % 254, fooTwo(i));
     Expect.equals(i ~/ -254 + i % -254, booTwo(i));
-    Expect.throws(() => hooTwo(i), (e) => e is IntegerDivisionByZeroException);
+    Expect.throws(() => hooTwo(i), (e) => e is UnsupportedError);
     if (i > 0) {
       Expect.equals(i % 10, noDom(i));
     } else {
@@ -37,8 +37,8 @@
       Expect.equals(i ~/ i + i % i, fooTwo2(i));
     }
   }
-  Expect.throws(() => foo2(0), (e) => e is IntegerDivisionByZeroException);
-  Expect.throws(() => fooTwo2(0), (e) => e is IntegerDivisionByZeroException);
+  Expect.throws(() => foo2(0), (e) => e is UnsupportedError);
+  Expect.throws(() => fooTwo2(0), (e) => e is UnsupportedError);
 }
 
 foo(i) => i % 256; // This will get optimized to AND instruction.
diff --git a/tests/language_2/operator/truncdiv_test.dart b/tests/language_2/operator/truncdiv_test.dart
index b3f3cbd..e8d7d92 100644
--- a/tests/language_2/operator/truncdiv_test.dart
+++ b/tests/language_2/operator/truncdiv_test.dart
@@ -19,10 +19,8 @@
     }
   }
   // We don't specify the exact exception type here, that is covered in
-  // truncdiv_zero_test. The correct answer is IntegerDivisionByZeroException,
-  // but the web platform has only one num type and can't distinguish between
-  // int and double, so it throws UnsupportedError (the behaviour for double).
-  Expect.throws(() => foo2(0));
+  // truncdiv_zero_test.
+  Expect.throws<UnsupportedError>(() => foo2(0));
 }
 
 foo(i, x) => i % x;
diff --git a/tests/language_2/operator/truncdiv_zero_test.dart b/tests/language_2/operator/truncdiv_zero_test.dart
index ed41090..c69b928 100644
--- a/tests/language_2/operator/truncdiv_zero_test.dart
+++ b/tests/language_2/operator/truncdiv_zero_test.dart
@@ -11,6 +11,6 @@
 import "truncdiv_test.dart" as truncdiv_test show foo, foo2;
 
 main() {
-  Expect.throws<IntegerDivisionByZeroException>(() => truncdiv_test.foo(12, 0));
-  Expect.throws<IntegerDivisionByZeroException>(() => truncdiv_test.foo2(0));
+  Expect.throws<UnsupportedError>(() => truncdiv_test.foo(12, 0));
+  Expect.throws<UnsupportedError>(() => truncdiv_test.foo2(0));
 }
diff --git a/tests/language_2/regress/regress31596_covariant_declaration_test.dart b/tests/language_2/regress/regress31596_covariant_declaration_test.dart
index 6c6297e..677efe6 100644
--- a/tests/language_2/regress/regress31596_covariant_declaration_test.dart
+++ b/tests/language_2/regress/regress31596_covariant_declaration_test.dart
@@ -4,6 +4,10 @@
 
 // @dart = 2.9
 
+// Test the treatment of a method whose signature has a covariant parameter
+// in the interface of a class `C`, when the implementation of that method
+// is inherited and its parameter is not covariant.
+
 class I0 {}
 
 class A {}
@@ -18,9 +22,7 @@
   void f(covariant A x);
 }
 
+// As of dart-lang/language#1833 this is not a compile-time error.
 class D extends C implements I {}
-//    ^
-// [analyzer] COMPILE_TIME_ERROR.INVALID_IMPLEMENTATION_OVERRIDE
-// [cfe] unspecified
 
 main() {}
diff --git a/tests/language_2/vm/div_mod_test.dart b/tests/language_2/vm/div_mod_test.dart
index 0ce3c28..47d3b0b 100755
--- a/tests/language_2/vm/div_mod_test.dart
+++ b/tests/language_2/vm/div_mod_test.dart
@@ -138,7 +138,7 @@
     bool threw = false;
     try {
       div0(i);
-    } on IntegerDivisionByZeroException catch (e) {
+    } on UnsupportedError catch (e) {
       threw = true;
     }
     Expect.isTrue(threw);
@@ -149,7 +149,7 @@
     bool threw = false;
     try {
       mod0(i);
-    } on IntegerDivisionByZeroException catch (e) {
+    } on UnsupportedError catch (e) {
       threw = true;
     }
     Expect.isTrue(threw);
diff --git a/tests/language_2/vm/modtruncdiv_int_test.dart b/tests/language_2/vm/modtruncdiv_int_test.dart
index 907f912..b34ac76 100644
--- a/tests/language_2/vm/modtruncdiv_int_test.dart
+++ b/tests/language_2/vm/modtruncdiv_int_test.dart
@@ -287,14 +287,14 @@
     try {
       doModVars(9, 9, -9, 0);
       acc = 0; // don't reach!
-    } on IntegerDivisionByZeroException catch (e, s) {}
+    } on UnsupportedError catch (e, s) {}
     Expect.equals(12, acc);
 
     acc = 0;
     try {
       doTruncDivVars(9, 9, -9, 0);
       acc = 0; // don't reach!
-    } on IntegerDivisionByZeroException catch (e, s) {}
+    } on UnsupportedError catch (e, s) {}
     Expect.equals(-23, acc);
   }
 }
diff --git a/tests/language_2/vm/regress_flutter_89584_test.dart b/tests/language_2/vm/regress_flutter_89584_test.dart
new file mode 100644
index 0000000..be08ce9
--- /dev/null
+++ b/tests/language_2/vm/regress_flutter_89584_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.9
+
+// This is a regression test for the bug in
+// https://github.com/flutter/flutter/issues/89584.
+// Verifies a Field::RecordStore is not done before all fields populated.
+
+// VMOptions=--no-enable-isolate-groups
+// VMOptions=--enable-isolate-groups
+
+import 'dart:isolate';
+import 'dart:typed_data';
+
+void main() async {
+  final receivePort = ReceivePort();
+  await Isolate.spawn<SendPort>(isolateEntry, receivePort.sendPort);
+  final wrapper = (await receivePort.first) as Wrapper;
+  final result = readWrapperUint8ListView(wrapper);
+  print(result);
+}
+
+const uint8ListLength = 1000000;
+
+void isolateEntry(SendPort sendPort) async {
+  final uint8list = Uint8List(uint8ListLength);
+  sendPort.send(Wrapper(
+    uint8list.buffer.asUint8List(0, uint8list.length),
+  ));
+}
+
+int readWrapperUint8ListView(Wrapper wrapper) {
+  var result = 0;
+  for (int i = 0; i < uint8ListLength; i++) {
+    result += wrapper.uint8ListView[i];
+  }
+  return result;
+}
+
+class Wrapper {
+  final Uint8List uint8ListView;
+  Wrapper(this.uint8ListView);
+}
diff --git a/tests/language_2/vm/regression_37622_test.dart b/tests/language_2/vm/regression_37622_test.dart
index c7ef6f0..48562f5 100755
--- a/tests/language_2/vm/regression_37622_test.dart
+++ b/tests/language_2/vm/regression_37622_test.dart
@@ -31,7 +31,7 @@
   bool d = false;
   try {
     x = foo();
-  } on IntegerDivisionByZeroException catch (e) {
+  } on UnsupportedError catch (e) {
     d = true;
   }
   Expect.equals(x, 0);
diff --git a/tests/lib/fix_data_tests/io.dart b/tests/lib/fix_data_tests/io.dart
index 7a29704..1f582d9 100644
--- a/tests/lib/fix_data_tests/io.dart
+++ b/tests/lib/fix_data_tests/io.dart
@@ -131,11 +131,6 @@
   print(ZLibOption.STRATEGY_DEFAULT);
   print(ZLIB);
   print(GZIP);
-  print(FileMode.READ);
-  print(FileMode.WRITE);
-  print(FileMode.APPEND);
-  print(FileMode.WRITE_ONLY);
-  print(FileMode.WRITE_ONLY_APPEND);
   print(FileLock.SHARED);
   print(FileLock.EXCLUSIVE);
   print(FileLock.BLOCKING_SHARED);
diff --git a/tests/lib/fix_data_tests/io.dart.expect b/tests/lib/fix_data_tests/io.dart.expect
index f26799a..590adfc 100644
--- a/tests/lib/fix_data_tests/io.dart.expect
+++ b/tests/lib/fix_data_tests/io.dart.expect
@@ -131,11 +131,6 @@
   print(ZLibOption.strategyDefault);
   print(zlib);
   print(gzip);
-  print(FileMode.read);
-  print(FileMode.write);
-  print(FileMode.append);
-  print(FileMode.writeOnly);
-  print(FileMode.writeOnlyAppend);
   print(FileLock.shared);
   print(FileLock.exclusive);
   print(FileLock.blockingShared);
diff --git a/tests/lib/html/websql_static_test.dart b/tests/lib/html/websql_static_test.dart
new file mode 100644
index 0000000..c4a84b2
--- /dev/null
+++ b/tests/lib/html/websql_static_test.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2021, 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:web_sql';
+//     ^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.URI_DOES_NOT_EXIST
+// [cfe] Not found: 'dart:web_sql'
+
+void main() {}
diff --git a/tests/lib/html/websql_test.dart b/tests/lib/html/websql_test.dart
deleted file mode 100644
index 3445764..0000000
--- a/tests/lib/html/websql_test.dart
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2020, 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.
-
-library WebDBTest;
-
-import 'dart:async';
-import 'dart:html';
-import 'dart:web_sql';
-
-import 'package:async_helper/async_minitest.dart';
-
-Future<SqlResultSet> createTable(
-    SqlTransaction transaction, String tableName, String columnName) async {
-  return transaction.executeSql('CREATE TABLE $tableName ($columnName)', []);
-}
-
-Future<SqlResultSet> insertTable(SqlTransaction transaction, String tableName,
-    String columnName, value) async {
-  final sql = 'INSERT INTO $tableName ($columnName) VALUES (?)';
-  return transaction.executeSql(sql, [value]);
-}
-
-Future<SqlResultSet> queryTable(
-    SqlTransaction transaction, String tableName) async {
-  final sql = 'SELECT * FROM $tableName';
-  return transaction.executeSql(sql, []);
-}
-
-Future<SqlResultSet?> dropTable(SqlTransaction transaction, String tableName,
-    [bool ignoreFailure = false]) async {
-  try {
-    var result = await transaction.executeSql('DROP TABLE $tableName', []);
-    return result;
-  } catch (error) {
-    if (!ignoreFailure) throw error;
-  }
-}
-
-final tableName = 'test_table';
-final columnName = 'test_data';
-
-late SqlDatabase db;
-late SqlTransaction tx;
-
-Future setup() async {
-  if (SqlDatabase.supported) {
-    db = await window.openDatabase('test_db', '1.0', 'test_db', 1024 * 1024);
-    expect(db, isNotNull, reason: 'Unable to open database');
-
-    tx = await db.transaction_future();
-    expect(tx, isNotNull, reason: "Transaction not ready");
-  }
-}
-
-main() async {
-  await setup();
-
-  group('Database', () {
-    test('Open/Transaction', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-
-      // Should not succeed table doesn't exist to be dropped.
-      try {
-        await dropTable(tx, tableName);
-        expect(false, true, reason: "dropTable should fail");
-      } on DomException catch (error) {
-        expect(error.message,
-            "could not prepare statement (1 no such table: test_table)");
-      }
-    });
-
-    test('create', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-      try {
-        SqlResultSet createResult =
-            await createTable(tx, tableName, columnName);
-        expect(createResult.insertId, 0);
-      } on DomException catch (error) {
-        expect(false, true, reason: "createTable failed - ${error.message}");
-      }
-    });
-
-    test('insert', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-      try {
-        SqlResultSet insertResult =
-            await insertTable(tx, tableName, columnName, 'Some text data');
-        expect(insertResult.insertId, 1);
-        expect(insertResult.rowsAffected, 1);
-      } on DomException catch (error) {
-        expect(false, true, reason: "insert failed - ${error.message}");
-      }
-    });
-
-    test('query', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-      try {
-        SqlResultSet queryResult = await queryTable(tx, tableName);
-        expect(queryResult.rows!.length, 1);
-        expect(queryResult.rows![0]['test_data'], "Some text data");
-      } on DomException catch (error) {
-        expect(false, true, reason: "queryTable failed - ${error.message}");
-      }
-    });
-
-    test('cleanup', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-      await dropTable(tx, tableName, true);
-    });
-  });
-}
diff --git a/tests/lib/isolate/spawn_uri_nested_vm_test.dart b/tests/lib/isolate/spawn_uri_nested_vm_test.dart
index 087b5fc..0847cf6 100644
--- a/tests/lib/isolate/spawn_uri_nested_vm_test.dart
+++ b/tests/lib/isolate/spawn_uri_nested_vm_test.dart
@@ -12,12 +12,19 @@
 import 'package:async_helper/async_minitest.dart';
 
 main() {
-  test('isolate fromUri - nested send and reply', () {
-    ReceivePort port = new ReceivePort();
-    Isolate.spawnUri(Uri.parse('spawn_uri_nested_child1_vm_isolate.dart'), [], [
-      [1, 2],
-      port.sendPort
-    ]);
+  test('isolate fromUri - nested send and reply', () async {
+    final port = ReceivePort();
+    final exitPort = ReceivePort();
+    Isolate.spawnUri(
+        Uri.parse('spawn_uri_nested_child1_vm_isolate.dart'),
+        [],
+        [
+          [1, 2],
+          port.sendPort
+        ],
+        onExit: exitPort.sendPort);
     port.first.then(expectAsync((result) => print(result)));
+    // ensure main isolate doesn't exit before child isolate exits
+    await exitPort.first;
   });
 }
diff --git a/tests/lib/isolate/stacktrace_message_test.dart b/tests/lib/isolate/stacktrace_message_test.dart
index b8ab5ab..6ec9ff6 100644
--- a/tests/lib/isolate/stacktrace_message_test.dart
+++ b/tests/lib/isolate/stacktrace_message_test.dart
@@ -3,40 +3,26 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:isolate';
+
 import "package:expect/expect.dart";
-import "package:async_helper/async_helper.dart";
 
 // Test that StackTrace objects can be sent between isolates spawned from
 // the same isolate using Isolate.spawn.
 
-void main() {
-  asyncStart();
-  ReceivePort reply = new ReceivePort();
+void main() async {
+  final reply = ReceivePort();
   Isolate.spawn(runTest, reply.sendPort);
-  reply.first.then((pair) {
-    StackTrace? stack = pair[0];
-    String stackString = pair[1];
-    if (stack == null) {
-      print("Failed to send stack-trace");
-      print(stackString);
-      Expect.fail("Sending stack-trace");
-    }
-    Expect.equals(stackString, "!$stack");
-    print(stack);
-    asyncEnd();
-  });
+  final pair = await reply.first;
+  final stack = pair[0] as StackTrace;
+  final stackString = pair[1] as String;
+  Expect.isNotNull(stack);
+  Expect.equals(stackString, "$stack");
 }
 
 runTest(SendPort sendport) {
   try {
     throw 'sorry';
   } catch (e, stack) {
-    try {
-      sendport.send([stack, "$stack"]);
-      print("Stacktrace sent");
-    } catch (e, s) {
-      print("Stacktrace not sent");
-      sendport.send([null, "$e\n$s"]);
-    }
+    sendport.send([stack, "$stack"]);
   }
 }
diff --git a/tests/lib/js/native_as_js_classes_static_test/default_library_namespace_test.dart b/tests/lib/js/native_as_js_classes_static_test/default_library_namespace_test.dart
index d230129..fa262ae 100644
--- a/tests/lib/js/native_as_js_classes_static_test/default_library_namespace_test.dart
+++ b/tests/lib/js/native_as_js_classes_static_test/default_library_namespace_test.dart
@@ -13,29 +13,29 @@
 @JS()
 class HTMLDocument {}
 //    ^
-// [web] JS interop class 'HTMLDocument' conflicts with natively supported class 'HtmlDocument' in 'dart:html'.
+// [web] Non-static JS interop class 'HTMLDocument' conflicts with natively supported class 'HtmlDocument' in 'dart:html'.
 
 // Test same annotation name as a native class.
 @JS('HTMLDocument')
 class HtmlDocument {}
 //    ^
-// [web] JS interop class 'HtmlDocument' conflicts with natively supported class 'HtmlDocument' in 'dart:html'.
+// [web] Non-static JS interop class 'HtmlDocument' conflicts with natively supported class 'HtmlDocument' in 'dart:html'.
 
 // Test annotation name with 'self' and 'window' prefixes.
 @JS('self.Window')
 class WindowWithSelf {}
 //    ^
-// [web] JS interop class 'WindowWithSelf' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'WindowWithSelf' conflicts with natively supported class 'Window' in 'dart:html'.
 
 @JS('window.Window')
 class WindowWithWindow {}
 //    ^
-// [web] JS interop class 'WindowWithWindow' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'WindowWithWindow' conflicts with natively supported class 'Window' in 'dart:html'.
 
 @JS('self.window.self.window.self.Window')
 class WindowWithMultipleSelfsAndWindows {}
 //    ^
-// [web] JS interop class 'WindowWithMultipleSelfsAndWindows' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'WindowWithMultipleSelfsAndWindows' conflicts with natively supported class 'Window' in 'dart:html'.
 
 // Test annotation with native class name but with a prefix that isn't 'self' or
 // 'window'.
@@ -47,14 +47,14 @@
 @JS()
 class DOMWindow {}
 //    ^
-// [web] JS interop class 'DOMWindow' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'DOMWindow' conflicts with natively supported class 'Window' in 'dart:html'.
 
 // Test same annotation name as a native class with multiple annotation names
 // dart:html.Window uses both "Window" and "DOMWindow".
 @JS('DOMWindow')
 class DomWindow {}
 //    ^
-// [web] JS interop class 'DomWindow' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'DomWindow' conflicts with natively supported class 'Window' in 'dart:html'.
 
 // Test different annotation name but with same class name as a @Native class.
 @JS('Foo')
diff --git a/tests/lib/js/native_as_js_classes_static_test/global_library_namespace_test.dart b/tests/lib/js/native_as_js_classes_static_test/global_library_namespace_test.dart
index fb55aa6..7911057 100644
--- a/tests/lib/js/native_as_js_classes_static_test/global_library_namespace_test.dart
+++ b/tests/lib/js/native_as_js_classes_static_test/global_library_namespace_test.dart
@@ -12,27 +12,27 @@
 @JS()
 class HTMLDocument {}
 //    ^
-// [web] JS interop class 'HTMLDocument' conflicts with natively supported class 'HtmlDocument' in 'dart:html'.
+// [web] Non-static JS interop class 'HTMLDocument' conflicts with natively supported class 'HtmlDocument' in 'dart:html'.
 
 @JS('HTMLDocument')
 class HtmlDocument {}
 //    ^
-// [web] JS interop class 'HtmlDocument' conflicts with natively supported class 'HtmlDocument' in 'dart:html'.
+// [web] Non-static JS interop class 'HtmlDocument' conflicts with natively supported class 'HtmlDocument' in 'dart:html'.
 
 @JS('self.Window')
 class WindowWithSelf {}
 //    ^
-// [web] JS interop class 'WindowWithSelf' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'WindowWithSelf' conflicts with natively supported class 'Window' in 'dart:html'.
 
 @JS('window.Window')
 class WindowWithWindow {}
 //    ^
-// [web] JS interop class 'WindowWithWindow' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'WindowWithWindow' conflicts with natively supported class 'Window' in 'dart:html'.
 
 @JS('self.window.self.window.self.Window')
 class WindowWithMultipleSelfsAndWindows {}
 //    ^
-// [web] JS interop class 'WindowWithMultipleSelfsAndWindows' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'WindowWithMultipleSelfsAndWindows' conflicts with natively supported class 'Window' in 'dart:html'.
 
 @JS('foo.Window')
 class WindowWithDifferentPrefix {}
@@ -40,12 +40,12 @@
 @JS()
 class DOMWindow {}
 //    ^
-// [web] JS interop class 'DOMWindow' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'DOMWindow' conflicts with natively supported class 'Window' in 'dart:html'.
 
 @JS('DOMWindow')
 class DomWindow {}
 //    ^
-// [web] JS interop class 'DomWindow' conflicts with natively supported class 'Window' in 'dart:html'.
+// [web] Non-static JS interop class 'DomWindow' conflicts with natively supported class 'Window' in 'dart:html'.
 
 @JS('Foo')
 class Window {}
diff --git a/tests/lib/js/static_interop_test/member_test.dart b/tests/lib/js/static_interop_test/member_test.dart
new file mode 100644
index 0000000..f5bf11e
--- /dev/null
+++ b/tests/lib/js/static_interop_test/member_test.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2021, 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.
+
+// Test that instance members are disallowed from static interop classes.
+
+@JS()
+library member_test;
+
+import 'package:js/js.dart';
+
+@JS()
+@staticInterop
+class StaticJSClass {
+  external StaticJSClass();
+  external StaticJSClass.namedConstructor();
+  external factory StaticJSClass.externalFactory();
+  factory StaticJSClass.redirectingFactory() = StaticJSClass;
+  factory StaticJSClass.factory() => StaticJSClass();
+
+  static String staticField = 'staticField';
+  static String get staticGetSet => staticField;
+  static set staticGetSet(String val) => staticField = val;
+  static String staticMethod() => 'staticMethod';
+
+  external static String externalStaticField;
+  external static String get externalStaticGetSet;
+  external static set externalStaticGetSet(String val);
+  external static String externalStaticMethod();
+
+  external int get getter;
+  //               ^
+  // [web] JS interop class 'StaticJSClass' with `@staticInterop` annotation cannot declare instance members.
+  external set setter(_);
+  //           ^
+  // [web] JS interop class 'StaticJSClass' with `@staticInterop` annotation cannot declare instance members.
+  external int method();
+  //           ^
+  // [web] JS interop class 'StaticJSClass' with `@staticInterop` annotation cannot declare instance members.
+  external int field;
+  //           ^
+  // [web] JS interop class 'StaticJSClass' with `@staticInterop` annotation cannot declare instance members.
+}
+
+extension StaticJSClassExtension on StaticJSClass {
+  external String externalField;
+  external String get externalGetSet;
+  external set externalGetSet(String val);
+  external String externalMethod();
+
+  String get getSet => this.externalGetSet;
+  set getSet(String val) => this.externalGetSet = val;
+  String method() => 'method';
+}
diff --git a/tests/lib/js/static_interop_test/supertype_test.dart b/tests/lib/js/static_interop_test/supertype_test.dart
new file mode 100644
index 0000000..88e0085
--- /dev/null
+++ b/tests/lib/js/static_interop_test/supertype_test.dart
@@ -0,0 +1,114 @@
+// Copyright (c) 2021, 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.
+
+// Test that interop classes that inherit/implement other classes have the
+// appropriate static interop static errors.
+
+@JS()
+library supertype_test;
+
+import 'package:js/js.dart';
+
+// Static base interop class.
+@JS()
+@staticInterop
+class Static {}
+
+// Non-static base interop class.
+@JS()
+class NonStatic {
+  external int instanceMethod();
+}
+
+@JS()
+@staticInterop
+class NonStaticMarkedAsStatic {
+  external int instanceMethod();
+  //           ^
+  // [web] JS interop class 'NonStaticMarkedAsStatic' with `@staticInterop` annotation cannot declare instance members.
+}
+
+// Static interop classes can inherit other static interop classes in order to
+// inherit its extension methods.
+@JS()
+@staticInterop
+class StaticExtendsStatic extends Static {}
+
+// Static interop classes are disallowed from extending non-static interop
+// classes.
+@JS()
+@staticInterop
+class StaticExtendsNonStatic extends NonStatic {}
+//    ^
+// [web] JS interop class 'StaticExtendsNonStatic' has an `@staticInterop` annotation, but has supertype 'NonStatic', which is non-static.
+
+// Static interop classes can implement each other in order to inherit extension
+// methods. Note that a non-abstract static interop class can not implement a
+// non-static class by definition, as it would need to contain an
+// implementation.
+@JS()
+@staticInterop
+class StaticImplementsStatic implements Static {}
+
+// Abstract classes should behave the same way as concrete classes.
+@JS()
+@staticInterop
+abstract class StaticAbstract {}
+
+// Abstract classes with instance members should be non-static. The following
+// have abstract or concrete members, so they're considered non-static.
+@JS()
+abstract class NonStaticAbstract {
+  int abstractMethod();
+}
+
+@JS()
+@staticInterop
+abstract class NonStaticAbstractWithAbstractMembers {
+  int abstractMethod();
+  //  ^
+  // [web] JS interop class 'NonStaticAbstractWithAbstractMembers' with `@staticInterop` annotation cannot declare instance members.
+}
+
+@JS()
+@staticInterop
+abstract class NonStaticAbstractWithConcreteMembers {
+  external int instanceMethod();
+  //           ^
+  // [web] JS interop class 'NonStaticAbstractWithConcreteMembers' with `@staticInterop` annotation cannot declare instance members.
+}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractImplementsStaticAbstract
+    implements StaticAbstract {}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractExtendsStaticAbstract extends StaticAbstract {}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractImplementsNonStaticAbstract
+//             ^
+// [web] JS interop class 'StaticAbstractImplementsNonStaticAbstract' has an `@staticInterop` annotation, but has supertype 'NonStaticAbstract', which is non-static.
+    implements
+        NonStaticAbstract {}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractImplementsMultipleNonStatic
+//             ^
+// [web] JS interop class 'StaticAbstractImplementsMultipleNonStatic' has an `@staticInterop` annotation, but has supertype 'NonStatic', which is non-static.
+// [web] JS interop class 'StaticAbstractImplementsMultipleNonStatic' has an `@staticInterop` annotation, but has supertype 'NonStaticAbstract', which is non-static.
+    implements
+        NonStaticAbstract,
+        NonStatic {}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractExtendsNonStaticAbstract
+//             ^
+// [web] JS interop class 'StaticAbstractExtendsNonStaticAbstract' has an `@staticInterop` annotation, but has supertype 'NonStaticAbstract', which is non-static.
+    extends NonStaticAbstract {}
diff --git a/tests/lib_2/html/websql_static_test.dart b/tests/lib_2/html/websql_static_test.dart
new file mode 100644
index 0000000..9acdce6
--- /dev/null
+++ b/tests/lib_2/html/websql_static_test.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.9
+
+import 'dart:web_sql';
+//     ^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.URI_DOES_NOT_EXIST
+// [cfe] Not found: 'dart:web_sql'
+
+void main() {}
diff --git a/tests/lib_2/html/websql_test.dart b/tests/lib_2/html/websql_test.dart
deleted file mode 100644
index bcd6231..0000000
--- a/tests/lib_2/html/websql_test.dart
+++ /dev/null
@@ -1,120 +0,0 @@
-
-// @dart = 2.9
-library WebDBTest;
-
-import 'dart:async';
-import 'dart:html';
-import 'dart:web_sql';
-
-import 'package:async_helper/async_minitest.dart';
-
-Future<SqlResultSet> createTable(
-    SqlTransaction transaction, String tableName, String columnName) async {
-  return transaction.executeSql('CREATE TABLE $tableName ($columnName)', []);
-}
-
-Future<SqlResultSet> insertTable(SqlTransaction transaction, String tableName,
-    String columnName, value) async {
-  final sql = 'INSERT INTO $tableName ($columnName) VALUES (?)';
-  return transaction.executeSql(sql, [value]);
-}
-
-Future<SqlResultSet> queryTable(
-    SqlTransaction transaction, String tableName) async {
-  final sql = 'SELECT * FROM $tableName';
-  return transaction.executeSql(sql, []);
-}
-
-Future<SqlResultSet> dropTable(SqlTransaction transaction, String tableName,
-    [bool ignoreFailure = false]) async {
-  try {
-    var result = await transaction.executeSql('DROP TABLE $tableName', []);
-    return result;
-  } catch (error) {
-    if (!ignoreFailure) throw error;
-  }
-}
-
-final tableName = 'test_table';
-final columnName = 'test_data';
-
-SqlDatabase db;
-SqlTransaction tx;
-
-Future setup() async {
-  if (SqlDatabase.supported) {
-    db = await window.openDatabase('test_db', '1.0', 'test_db', 1024 * 1024);
-    expect(db, isNotNull, reason: 'Unable to open database');
-
-    tx = await db.transaction_future();
-    expect(tx, isNotNull, reason: "Transaction not ready");
-  }
-}
-
-main() async {
-  await setup();
-
-  group('Database', () {
-    test('Open/Transaction', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-
-      // Should not succeed table doesn't exist to be dropped.
-      try {
-        await dropTable(tx, tableName);
-        expect(false, true, reason: "dropTable should fail");
-      } catch (error) {
-        expect(error.message,
-            "could not prepare statement (1 no such table: test_table)");
-      }
-    });
-
-    test('create', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-      try {
-        SqlResultSet createResult =
-            await createTable(tx, tableName, columnName);
-        expect(createResult.insertId, 0);
-      } catch (error) {
-        expect(false, true, reason: "createTable failed - ${error.message}");
-      }
-    });
-
-    test('insert', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-      try {
-        SqlResultSet insertResult =
-            await insertTable(tx, tableName, columnName, 'Some text data');
-        expect(insertResult.insertId, 1);
-        expect(insertResult.rowsAffected, 1);
-      } catch (error) {
-        expect(false, true, reason: "insert failed - ${error.message}");
-      }
-    });
-
-    test('query', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-      try {
-        SqlResultSet queryResult = await queryTable(tx, tableName);
-        expect(queryResult.rows.length, 1);
-        expect(queryResult.rows[0]['test_data'], "Some text data");
-      } catch (error) {
-        expect(false, true, reason: "queryTable failed - ${error.message}");
-      }
-    });
-
-    test('cleanup', () async {
-      if (!SqlDatabase.supported) return;
-
-      expect(tx, isNotNull, reason: "Transaction not ready");
-      await dropTable(tx, tableName, true);
-    });
-  });
-}
diff --git a/tests/lib_2/isolate/spawn_uri_nested_vm_test.dart b/tests/lib_2/isolate/spawn_uri_nested_vm_test.dart
index 423821d..81e5882 100644
--- a/tests/lib_2/isolate/spawn_uri_nested_vm_test.dart
+++ b/tests/lib_2/isolate/spawn_uri_nested_vm_test.dart
@@ -14,12 +14,19 @@
 import 'package:async_helper/async_minitest.dart';
 
 main() {
-  test('isolate fromUri - nested send and reply', () {
-    ReceivePort port = new ReceivePort();
-    Isolate.spawnUri(Uri.parse('spawn_uri_nested_child1_vm_isolate.dart'), [], [
-      [1, 2],
-      port.sendPort
-    ]);
+  test('isolate fromUri - nested send and reply', () async {
+    final port = ReceivePort();
+    final exitPort = ReceivePort();
+    Isolate.spawnUri(
+        Uri.parse('spawn_uri_nested_child1_vm_isolate.dart'),
+        [],
+        [
+          [1, 2],
+          port.sendPort
+        ],
+        onExit: exitPort.sendPort);
     port.first.then(expectAsync((result) => print(result)));
+    // ensure main isolate doesn't exit before child isolate exits
+    await exitPort.first;
   });
 }
diff --git a/tests/lib_2/isolate/stacktrace_message_test.dart b/tests/lib_2/isolate/stacktrace_message_test.dart
index 4738951..a8e269f 100644
--- a/tests/lib_2/isolate/stacktrace_message_test.dart
+++ b/tests/lib_2/isolate/stacktrace_message_test.dart
@@ -5,40 +5,26 @@
 // @dart = 2.9
 
 import 'dart:isolate';
+
 import "package:expect/expect.dart";
-import "package:async_helper/async_helper.dart";
 
 // Test that StackTrace objects can be sent between isolates spawned from
 // the same isolate using Isolate.spawn.
 
-void main() {
-  asyncStart();
-  ReceivePort reply = new ReceivePort();
+void main() async {
+  final reply = ReceivePort();
   Isolate.spawn(runTest, reply.sendPort);
-  reply.first.then((pair) {
-    StackTrace stack = pair[0];
-    String stackString = pair[1];
-    if (stack == null) {
-      print("Failed to send stack-trace");
-      print(stackString);
-      Expect.fail("Sending stack-trace");
-    }
-    Expect.equals(stackString, "!$stack");
-    print(stack);
-    asyncEnd();
-  });
+  final pair = await reply.first;
+  final stack = pair[0] as StackTrace;
+  final stackString = pair[1] as String;
+  Expect.isNotNull(stack);
+  Expect.equals(stackString, "$stack");
 }
 
 runTest(SendPort sendport) {
   try {
     throw 'sorry';
   } catch (e, stack) {
-    try {
-      sendport.send([stack, "$stack"]);
-      print("Stacktrace sent");
-    } catch (e, s) {
-      print("Stacktrace not sent");
-      sendport.send([null, "$e\n$s"]);
-    }
+    sendport.send([stack, "$stack"]);
   }
 }
diff --git a/tests/lib_2/js/static_interop_test/member_test.dart b/tests/lib_2/js/static_interop_test/member_test.dart
new file mode 100644
index 0000000..f5bf11e
--- /dev/null
+++ b/tests/lib_2/js/static_interop_test/member_test.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2021, 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.
+
+// Test that instance members are disallowed from static interop classes.
+
+@JS()
+library member_test;
+
+import 'package:js/js.dart';
+
+@JS()
+@staticInterop
+class StaticJSClass {
+  external StaticJSClass();
+  external StaticJSClass.namedConstructor();
+  external factory StaticJSClass.externalFactory();
+  factory StaticJSClass.redirectingFactory() = StaticJSClass;
+  factory StaticJSClass.factory() => StaticJSClass();
+
+  static String staticField = 'staticField';
+  static String get staticGetSet => staticField;
+  static set staticGetSet(String val) => staticField = val;
+  static String staticMethod() => 'staticMethod';
+
+  external static String externalStaticField;
+  external static String get externalStaticGetSet;
+  external static set externalStaticGetSet(String val);
+  external static String externalStaticMethod();
+
+  external int get getter;
+  //               ^
+  // [web] JS interop class 'StaticJSClass' with `@staticInterop` annotation cannot declare instance members.
+  external set setter(_);
+  //           ^
+  // [web] JS interop class 'StaticJSClass' with `@staticInterop` annotation cannot declare instance members.
+  external int method();
+  //           ^
+  // [web] JS interop class 'StaticJSClass' with `@staticInterop` annotation cannot declare instance members.
+  external int field;
+  //           ^
+  // [web] JS interop class 'StaticJSClass' with `@staticInterop` annotation cannot declare instance members.
+}
+
+extension StaticJSClassExtension on StaticJSClass {
+  external String externalField;
+  external String get externalGetSet;
+  external set externalGetSet(String val);
+  external String externalMethod();
+
+  String get getSet => this.externalGetSet;
+  set getSet(String val) => this.externalGetSet = val;
+  String method() => 'method';
+}
diff --git a/tests/lib_2/js/static_interop_test/supertype_test.dart b/tests/lib_2/js/static_interop_test/supertype_test.dart
new file mode 100644
index 0000000..88e0085
--- /dev/null
+++ b/tests/lib_2/js/static_interop_test/supertype_test.dart
@@ -0,0 +1,114 @@
+// Copyright (c) 2021, 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.
+
+// Test that interop classes that inherit/implement other classes have the
+// appropriate static interop static errors.
+
+@JS()
+library supertype_test;
+
+import 'package:js/js.dart';
+
+// Static base interop class.
+@JS()
+@staticInterop
+class Static {}
+
+// Non-static base interop class.
+@JS()
+class NonStatic {
+  external int instanceMethod();
+}
+
+@JS()
+@staticInterop
+class NonStaticMarkedAsStatic {
+  external int instanceMethod();
+  //           ^
+  // [web] JS interop class 'NonStaticMarkedAsStatic' with `@staticInterop` annotation cannot declare instance members.
+}
+
+// Static interop classes can inherit other static interop classes in order to
+// inherit its extension methods.
+@JS()
+@staticInterop
+class StaticExtendsStatic extends Static {}
+
+// Static interop classes are disallowed from extending non-static interop
+// classes.
+@JS()
+@staticInterop
+class StaticExtendsNonStatic extends NonStatic {}
+//    ^
+// [web] JS interop class 'StaticExtendsNonStatic' has an `@staticInterop` annotation, but has supertype 'NonStatic', which is non-static.
+
+// Static interop classes can implement each other in order to inherit extension
+// methods. Note that a non-abstract static interop class can not implement a
+// non-static class by definition, as it would need to contain an
+// implementation.
+@JS()
+@staticInterop
+class StaticImplementsStatic implements Static {}
+
+// Abstract classes should behave the same way as concrete classes.
+@JS()
+@staticInterop
+abstract class StaticAbstract {}
+
+// Abstract classes with instance members should be non-static. The following
+// have abstract or concrete members, so they're considered non-static.
+@JS()
+abstract class NonStaticAbstract {
+  int abstractMethod();
+}
+
+@JS()
+@staticInterop
+abstract class NonStaticAbstractWithAbstractMembers {
+  int abstractMethod();
+  //  ^
+  // [web] JS interop class 'NonStaticAbstractWithAbstractMembers' with `@staticInterop` annotation cannot declare instance members.
+}
+
+@JS()
+@staticInterop
+abstract class NonStaticAbstractWithConcreteMembers {
+  external int instanceMethod();
+  //           ^
+  // [web] JS interop class 'NonStaticAbstractWithConcreteMembers' with `@staticInterop` annotation cannot declare instance members.
+}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractImplementsStaticAbstract
+    implements StaticAbstract {}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractExtendsStaticAbstract extends StaticAbstract {}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractImplementsNonStaticAbstract
+//             ^
+// [web] JS interop class 'StaticAbstractImplementsNonStaticAbstract' has an `@staticInterop` annotation, but has supertype 'NonStaticAbstract', which is non-static.
+    implements
+        NonStaticAbstract {}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractImplementsMultipleNonStatic
+//             ^
+// [web] JS interop class 'StaticAbstractImplementsMultipleNonStatic' has an `@staticInterop` annotation, but has supertype 'NonStatic', which is non-static.
+// [web] JS interop class 'StaticAbstractImplementsMultipleNonStatic' has an `@staticInterop` annotation, but has supertype 'NonStaticAbstract', which is non-static.
+    implements
+        NonStaticAbstract,
+        NonStatic {}
+
+@JS()
+@staticInterop
+abstract class StaticAbstractExtendsNonStaticAbstract
+//             ^
+// [web] JS interop class 'StaticAbstractExtendsNonStaticAbstract' has an `@staticInterop` annotation, but has supertype 'NonStaticAbstract', which is non-static.
+    extends NonStaticAbstract {}
diff --git a/tests/standalone/io/issue_30687_test.dart b/tests/standalone/io/issue_30687_test.dart
index e994f09..1b140e1 100644
--- a/tests/standalone/io/issue_30687_test.dart
+++ b/tests/standalone/io/issue_30687_test.dart
@@ -7,7 +7,7 @@
 import 'package:expect/expect.dart';
 import 'package:path/path.dart' as path;
 
-import 'unix_socket_test.dart' show withTempDir;
+import 'test_utils.dart' show withTempDir;
 
 main() async {
   await withTempDir('issue_30687', (Directory tempDir) async {
diff --git a/tests/standalone/io/issue_35112_test.dart b/tests/standalone/io/issue_35112_test.dart
new file mode 100644
index 0000000..1d53f1e
--- /dev/null
+++ b/tests/standalone/io/issue_35112_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2021, 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:async';
+import 'dart:io';
+
+import 'package:expect/expect.dart';
+import 'test_utils.dart' show withTempDir;
+
+main() async {
+  // Verify that File.setLastAccessed does *not* trigger a FileSystemModifyEvent
+  // with FileSystemModifyEvent.contentChanged == true.
+  await withTempDir('issue_35112', (Directory tempDir) async {
+    File file = new File("${tempDir.path}/file.tmp");
+    file.createSync();
+
+    final eventCompleter = new Completer<FileSystemEvent?>();
+    StreamSubscription? subscription;
+    subscription = tempDir.watch().listen((FileSystemEvent event) {
+      if (event is FileSystemModifyEvent && event.contentChanged) {
+        eventCompleter.complete(event);
+      }
+      subscription?.cancel();
+    });
+
+    file.setLastAccessedSync(DateTime.now().add(Duration(days: 3)));
+    Timer(Duration(seconds: 1), () {
+      eventCompleter.complete(null);
+      subscription?.cancel();
+    });
+    ;
+    FileSystemEvent? event = await eventCompleter.future;
+    Expect.isNull(event,
+        "No event should be triggered or .contentChanged should equal false");
+  });
+}
diff --git a/tests/standalone/io/issue_46436_test.dart b/tests/standalone/io/issue_46436_test.dart
new file mode 100644
index 0000000..bbc5800
--- /dev/null
+++ b/tests/standalone/io/issue_46436_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2021, 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.
+//
+// Checks that _WindowsCodePageEncoder.convert() throws an exception on
+// platforms other than Windows.
+
+import "dart:io";
+import 'dart:mirrors';
+
+import "package:expect/expect.dart";
+
+ClassMirror findWindowsCodePageEncoder() {
+  final dartIo =
+      currentMirrorSystem().libraries[Uri(scheme: "dart", path: "io")];
+  if (dartIo == null) {
+    throw StateError("dart:io not present");
+  }
+
+  final classes = dartIo.declarations.values
+      .where((d) =>
+          d is ClassMirror &&
+          d.simpleName.toString().contains('"_WindowsCodePageEncoder"'))
+      .map((d) => d as ClassMirror)
+      .toList();
+
+  Expect.equals(
+      1, classes.length, "Expected exactly one _WindowsCodePageEncoder");
+  return classes[0];
+}
+
+test() {
+  final winCodePageEncoder = findWindowsCodePageEncoder();
+  final encoder = winCodePageEncoder.newInstance(Symbol(""), List.empty());
+  try {
+    encoder.invoke(Symbol("convert"), List.of(["test"]));
+    Expect.isTrue(Platform.isWindows,
+        "expected UnsupportedError on ${Platform.operatingSystem}");
+  } on UnsupportedError catch (e) {
+    Expect.isFalse(
+        Platform.isWindows, "unexpected UnsupportedError on Windows: $e");
+  }
+}
+
+void main() {
+  test();
+}
diff --git a/tests/standalone/io/platform_locale_name_test.dart b/tests/standalone/io/platform_locale_name_test.dart
new file mode 100644
index 0000000..611623d
--- /dev/null
+++ b/tests/standalone/io/platform_locale_name_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, 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:io";
+
+import "package:expect/expect.dart";
+
+main() {
+  // Match patterns like:
+  //    "en-US"                 (Android, iOS, MacOS, Windows)
+  //    "en_US", "en_US.UTF-8"  (Linux)
+  //    "ESP-USA"               (theoretically possible)
+  // Assumes that the platform has a reasonably configured locale.
+  var localePattern = RegExp(r"[A-Za-z]{2,4}[_-][A-Za-z]{2}");
+  var localeName = Platform.localeName;
+  Expect.isNotNull(
+      localePattern.matchAsPrefix(localeName),
+      "Platform.localeName: ${localeName} does not match "
+      "${localePattern.pattern}");
+}
diff --git a/tests/standalone/io/platform_os_version_test.dart b/tests/standalone/io/platform_os_version_test.dart
index fff7335..f16b059 100644
--- a/tests/standalone/io/platform_os_version_test.dart
+++ b/tests/standalone/io/platform_os_version_test.dart
@@ -10,4 +10,5 @@
   var version = Platform.operatingSystemVersion;
   Expect.isNotNull(version);
   Expect.isTrue(version is String);
+  Expect.notEquals("", version);
 }
diff --git a/tests/standalone/io/socket_source_address_test.dart b/tests/standalone/io/socket_source_address_test.dart
index 4fe8b39..e8e5b23 100644
--- a/tests/standalone/io/socket_source_address_test.dart
+++ b/tests/standalone/io/socket_source_address_test.dart
@@ -6,39 +6,88 @@
 import "dart:async";
 import "dart:io";
 
-import 'test_utils.dart' show retry, throws;
+import 'test_utils.dart' show retry, throws, withTempDir;
 
 Future testArguments(connectFunction) async {
   var sourceAddress;
-  final server = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
-  server.listen((_) {
+  final serverIPv4 = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
+  serverIPv4.listen((_) {
+    throw 'Unexpected connection from address $sourceAddress';
+  });
+
+  final serverIPv6 = await ServerSocket.bind(InternetAddress.loopbackIPv6, 0);
+  serverIPv6.listen((_) {
     throw 'Unexpected connection from address $sourceAddress';
   });
 
   // Illegal type for sourceAddress.
   for (sourceAddress in ['www.google.com', 'abc']) {
     await throws(
-        () => connectFunction('127.0.0.1', server.port,
+        () => connectFunction('127.0.0.1', serverIPv4.port,
             sourceAddress: sourceAddress),
         (e) => e is ArgumentError);
   }
   // Unsupported local address.
   for (sourceAddress in ['8.8.8.8', new InternetAddress('8.8.8.8')]) {
     await throws(
-        () => connectFunction('127.0.0.1', server.port,
+        () => connectFunction('127.0.0.1', serverIPv4.port,
             sourceAddress: sourceAddress),
         (e) =>
             e is SocketException &&
             e.address == new InternetAddress('8.8.8.8'));
   }
-  // Address family mismatch.
-  for (sourceAddress in ['::1', InternetAddress.loopbackIPv6]) {
+  // Address family mismatch for IPv4.
+  for (sourceAddress in [
+    '::1',
+    InternetAddress.loopbackIPv6,
+    InternetAddress('sock', type: InternetAddressType.unix)
+  ]) {
     await throws(
-        () => connectFunction('127.0.0.1', server.port,
+        () => connectFunction('127.0.0.1', serverIPv4.port,
             sourceAddress: sourceAddress),
         (e) => e is SocketException);
   }
-  await server.close();
+  // Address family mismatch for IPv6.
+  for (sourceAddress in [
+    '127.0.0.1',
+    InternetAddress.loopbackIPv4,
+    InternetAddress('sock', type: InternetAddressType.unix)
+  ]) {
+    await throws(
+        () => connectFunction('::1', serverIPv6.port,
+            sourceAddress: sourceAddress),
+        (e) => e is SocketException);
+  }
+
+  await serverIPv4.close();
+  await serverIPv6.close();
+}
+
+Future testUnixDomainArguments(connectFunction, String socketDir) async {
+  var sourceAddress;
+  final serverUnix = await ServerSocket.bind(
+      InternetAddress('$socketDir/sock', type: InternetAddressType.unix), 0);
+  serverUnix.listen((_) {
+    throw 'Unexpected connection from address $sourceAddress';
+  });
+
+  // Address family mismatch for Unix domain sockets.
+  for (sourceAddress in [
+    '127.0.0.1',
+    InternetAddress.loopbackIPv4,
+    '::1',
+    InternetAddress.loopbackIPv6,
+  ]) {
+    await throws(
+        () => connectFunction(
+            InternetAddress("$socketDir/sock", type: InternetAddressType.unix),
+            serverUnix.port,
+            sourceAddress: sourceAddress),
+        (e) =>
+            e is SocketException &&
+            e.toString().contains('Address family not supported'));
+  }
+  await serverUnix.close();
 }
 
 // IPv4 addresses to use as source address when connecting locally.
@@ -118,6 +167,18 @@
     await testArguments(Socket.connect);
   });
 
+  if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
+    await retry(() async {
+      await withTempDir('unix_socket_test', (Directory dir) async {
+        await testUnixDomainArguments(RawSocket.connect, "${dir.path}");
+      });
+    });
+    await retry(() async {
+      await withTempDir('unix_socket_test', (Directory dir) async {
+        await testUnixDomainArguments(Socket.connect, "${dir.path}");
+      });
+    });
+  }
   await retry(() async {
     await testConnect(
         InternetAddress.anyIPv4, false, RawSocket.connect, (s) => s.close());
diff --git a/tests/standalone/io/test_utils.dart b/tests/standalone/io/test_utils.dart
index fb3b3ef..9160c18 100644
--- a/tests/standalone/io/test_utils.dart
+++ b/tests/standalone/io/test_utils.dart
@@ -37,3 +37,24 @@
   }
   Expect.fail('Did not throw');
 }
+
+// Create a temporary directory and delete it when the test function exits.
+Future withTempDir(String prefix, Future<void> test(Directory dir)) async {
+  final tempDir = Directory.systemTemp.createTempSync(prefix);
+  try {
+    await runZonedGuarded(() => test(tempDir), (e, st) {
+      try {
+        tempDir.deleteSync(recursive: true);
+      } catch (_) {
+        // ignore errors
+      }
+      throw e;
+    });
+  } finally {
+    try {
+      tempDir.deleteSync(recursive: true);
+    } catch (_) {
+      // ignore errors
+    }
+  }
+}
diff --git a/tests/standalone/io/unix_socket_regress_46634_test.dart b/tests/standalone/io/unix_socket_regress_46634_test.dart
index 31bce79..fca1b2a 100644
--- a/tests/standalone/io/unix_socket_regress_46634_test.dart
+++ b/tests/standalone/io/unix_socket_regress_46634_test.dart
@@ -4,7 +4,8 @@
 
 import 'dart:io';
 
-import 'unix_socket_test.dart' show withTempDir, testListenCloseListenClose;
+import 'test_utils.dart' show withTempDir;
+import 'unix_socket_test.dart' show testListenCloseListenClose;
 
 void main() async {
   if (!Platform.isMacOS && !Platform.isLinux && !Platform.isAndroid) {
diff --git a/tests/standalone/io/unix_socket_test.dart b/tests/standalone/io/unix_socket_test.dart
index d510fb6..2a096b9 100644
--- a/tests/standalone/io/unix_socket_test.dart
+++ b/tests/standalone/io/unix_socket_test.dart
@@ -8,6 +8,8 @@
 
 import 'package:expect/expect.dart';
 
+import 'test_utils.dart' show withTempDir;
+
 Future testAddress(String name) async {
   var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
   var server = await ServerSocket.bind(address, 0);
@@ -435,18 +437,401 @@
   await httpServer.close();
 }
 
-// Create socket in temp directory
-Future withTempDir(String prefix, Future<void> test(Directory dir)) async {
-  var tempDir = Directory.systemTemp.createTempSync(prefix);
-  try {
-    await test(tempDir);
-  } finally {
-    tempDir.deleteSync(recursive: true);
+Future testFileMessage(String tempDirPath) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
   }
+
+  final completer = Completer<bool>();
+
+  final address =
+      InternetAddress('$tempDirPath/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    print('server started a socket $socket');
+    socket.listen((e) {
+      if (e == RawSocketEvent.read) {
+        final SocketMessage? message = socket.readMessage();
+        if (message == null) {
+          return;
+        }
+        print('server received message $message');
+        final String messageData = String.fromCharCodes(message.data);
+        print('server received messageData $messageData');
+        if (messageData == 'EmptyMessage') {
+          Expect.equals('EmptyMessage'.length, message.data.length);
+          Expect.isTrue(message.controlMessages.isEmpty);
+          return;
+        }
+        Expect.equals('Hello', messageData);
+        Expect.equals('Hello'.length, message.data.length);
+        Expect.equals(1, message.controlMessages.length);
+        final SocketControlMessage controlMessage = message.controlMessages[0];
+        final handles = controlMessage.extractHandles();
+        Expect.isNotNull(handles);
+        Expect.equals(1, handles.length);
+        final receivedFile = handles[0].toFile();
+        receivedFile.writeStringSync('Hello, server!\n');
+        print("server has written to the $receivedFile file");
+        socket.write('abc'.codeUnits);
+      } else if (e == RawSocketEvent.readClosed) {
+        print('server socket got readClosed');
+        socket.close();
+        server.close();
+      }
+    });
+  });
+
+  final file = File('$tempDirPath/myfile.txt');
+  final randomAccessFile = file.openSync(mode: FileMode.write);
+  // Send a message with sample file.
+  final socket = await RawSocket.connect(address, 0);
+  socket.listen((e) {
+    if (e == RawSocketEvent.write) {
+      randomAccessFile.writeStringSync('Hello, client!\n');
+      socket.sendMessage(<SocketControlMessage>[
+        SocketControlMessage.fromHandles(
+            <ResourceHandle>[ResourceHandle.fromFile(randomAccessFile)])
+      ], 'Hello'.codeUnits);
+      print('client sent a message');
+      socket.sendMessage(<SocketControlMessage>[], 'EmptyMessage'.codeUnits);
+      print('client sent a message without control data');
+    } else if (e == RawSocketEvent.read) {
+      final data = socket.read();
+      if (data == null) {
+        return;
+      }
+      Expect.equals('abc', String.fromCharCodes(data));
+      Expect.equals(
+          'Hello, client!\nHello, server!\n', file.readAsStringSync());
+      socket.close();
+      completer.complete(true);
+    }
+  });
+
+  return completer.future;
 }
 
-void main() async {
-  try {
+Future testTooLargeControlMessage(String tempDirPath) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
+  }
+  final completer = Completer<bool>();
+  final address =
+      InternetAddress('$tempDirPath/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    print('server started a socket $socket');
+    socket.listen((e) {
+      if (e == RawSocketEvent.read) {
+        throw "Server should not receive request from the client";
+      } else if (e == RawSocketEvent.readClosed) {
+        socket.close();
+        server.close();
+      }
+    });
+  });
+
+  final file = File('$tempDirPath/myfile.txt');
+  final randomAccessFile = file.openSync(mode: FileMode.write);
+  // Send a message with sample file.
+  final socket = await RawSocket.connect(address, 0);
+
+  runZonedGuarded(
+      () => socket.listen((e) {
+            if (e == RawSocketEvent.write) {
+              randomAccessFile.writeStringSync('Hello, client!\n');
+              const int largeHandleCount = 1024;
+              final manyResourceHandles = List<ResourceHandle>.filled(
+                  largeHandleCount, ResourceHandle.fromFile(randomAccessFile));
+              socket.sendMessage(<SocketControlMessage>[
+                SocketControlMessage.fromHandles(manyResourceHandles)
+              ], 'Hello'.codeUnits);
+              server.close();
+              socket.close();
+            }
+          }), (e, st) {
+    print('Got expected unhandled exception $e $st');
+    Expect.equals(true, e is SocketException);
+    completer.complete(true);
+  });
+
+  return completer.future;
+}
+
+Future testFileMessageWithShortRead(String tempDirPath) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
+  }
+
+  final completer = Completer<bool>();
+
+  final address =
+      InternetAddress('$tempDirPath/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    print('server started a socket $socket');
+    socket.listen((e) {
+      if (e == RawSocketEvent.read) {
+        Expect.throws(
+            () => socket.readMessage(0),
+            (e) =>
+                e is ArgumentError &&
+                e.toString().contains('Illegal length 0'));
+        final SocketMessage? message = socket.readMessage(/*count=*/ 1);
+        if (message == null) {
+          return;
+        }
+        print('server received message $message');
+        final String messageData = String.fromCharCodes(message.data);
+        print('messageData: $messageData');
+        if (messageData[0] == 'H') {
+          Expect.equals(1, message.controlMessages.length);
+          final SocketControlMessage controlMessage =
+              message.controlMessages[0];
+          final handles = controlMessage.extractHandles();
+          Expect.isNotNull(handles);
+          Expect.equals(1, handles.length);
+          final handlesAgain = controlMessage.extractHandles();
+          Expect.isNotNull(handlesAgain);
+          Expect.equals(1, handlesAgain.length);
+          handles[0].toFile().writeStringSync('Hello, server!\n');
+          socket.write('abc'.codeUnits);
+        } else {
+          Expect.equals('i', messageData[0]);
+          Expect.equals(0, message.controlMessages.length);
+        }
+      } else if (e == RawSocketEvent.readClosed) {
+        print('server socket got readClosed');
+        socket.close();
+        server.close();
+      }
+    });
+  });
+
+  final file = File('$tempDirPath/myfile.txt');
+  final randomAccessFile = file.openSync(mode: FileMode.write);
+  // Send a message with sample file.
+  final socket = await RawSocket.connect(address, 0);
+  socket.listen((e) {
+    if (e == RawSocketEvent.write) {
+      randomAccessFile.writeStringSync('Hello, client!\n');
+      socket.sendMessage(<SocketControlMessage>[
+        SocketControlMessage.fromHandles(
+            <ResourceHandle>[ResourceHandle.fromFile(randomAccessFile)])
+      ], 'Hi'.codeUnits);
+      print('client sent a message');
+    } else if (e == RawSocketEvent.read) {
+      final data = socket.read();
+      if (data == null) {
+        return;
+      }
+      Expect.equals('abc', String.fromCharCodes(data));
+      Expect.equals(
+          'Hello, client!\nHello, server!\n', file.readAsStringSync());
+      socket.close();
+      completer.complete(true);
+    }
+  });
+
+  return completer.future;
+}
+
+Future<RawServerSocket> createTestServer() async {
+  final server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  return server
+    ..listen((client) {
+      String receivedData = "";
+
+      client.writeEventsEnabled = false;
+      client.listen((event) {
+        switch (event) {
+          case RawSocketEvent.READ:
+            assert(client.available() > 0);
+            final buffer = client.read(200)!;
+            receivedData += String.fromCharCodes(buffer);
+            break;
+          case RawSocketEvent.READ_CLOSED:
+            client.close();
+            server.close();
+            break;
+          case RawSocketEvent.CLOSED:
+            Expect.equals(
+                "Hello, client 1!\nHello, client 2!\nHello, server!\n",
+                receivedData);
+            break;
+          default:
+            throw "Unexpected event $event";
+        }
+      }, onError: (e) {
+        print("client ERROR $e");
+      });
+    });
+}
+
+Future testSocketMessage(String uniqueName) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
+  }
+
+  final address =
+      InternetAddress('$uniqueName/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    socket.listen((e) {
+      switch (e) {
+        case RawSocketEvent.read:
+          final SocketMessage? message = socket.readMessage();
+          if (message == null) {
+            return;
+          }
+          Expect.equals('Hello', String.fromCharCodes(message.data));
+          Expect.equals(1, message.controlMessages.length);
+          final SocketControlMessage controlMessage =
+              message.controlMessages[0];
+          final handles = controlMessage.extractHandles();
+          Expect.isNotNull(handles);
+          Expect.equals(1, handles.length);
+          final receivedSocket = handles[0].toRawSocket();
+          receivedSocket.write('Hello, server!\n'.codeUnits);
+          socket.write('server replied'.codeUnits);
+          receivedSocket.close();
+          break;
+        case RawSocketEvent.readClosed:
+          socket.close();
+          server.close();
+          break;
+      }
+    });
+  });
+
+  final RawServerSocket testServer = await createTestServer();
+  final testSocket = await RawSocket.connect("127.0.0.1", testServer.port);
+
+  // Send a message with opened [testSocket] socket.
+  final socket = await RawSocket.connect(address, 0);
+  socket.listen((e) {
+    switch (e) {
+      case RawSocketEvent.write:
+        testSocket.write('Hello, client 1!\n'.codeUnits);
+        socket.sendMessage(<SocketControlMessage>[
+          SocketControlMessage.fromHandles(
+              <ResourceHandle>[ResourceHandle.fromRawSocket(testSocket)])
+        ], 'Hello'.codeUnits);
+        testSocket.write('Hello, client 2!\n'.codeUnits);
+        break;
+      case RawSocketEvent.read:
+        final data = socket.read();
+        if (data == null) {
+          return;
+        }
+
+        final dataString = String.fromCharCodes(data);
+        Expect.equals('server replied', dataString);
+        socket.close();
+        testSocket.close();
+        testServer.close();
+    }
+  });
+}
+
+Future testStdioMessage(String tempDirPath, {bool caller: false}) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
+  }
+  if (caller) {
+    final process = await Process.start(Platform.resolvedExecutable,
+        <String>[Platform.script.toFilePath(), '--start-stdio-message-test']);
+    String processStdout = "";
+    String processStderr = "";
+    process.stdout.transform(utf8.decoder).listen((line) {
+      processStdout += line;
+      print('stdout:>$line<');
+    });
+    process.stderr.transform(utf8.decoder).listen((line) {
+      processStderr += line;
+      print('stderr:>$line<');
+    });
+    process.stdin.writeln('Caller wrote to stdin');
+
+    Expect.equals(0, await process.exitCode);
+    Expect.equals("client sent a message\nHello, server!\n", processStdout);
+    Expect.equals(
+        "client wrote to stderr\nHello, server too!\n", processStderr);
+    return;
+  }
+
+  final address =
+      InternetAddress('$tempDirPath/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    socket.listen((e) {
+      if (e == RawSocketEvent.read) {
+        final SocketMessage? message = socket.readMessage();
+        if (message == null) {
+          return;
+        }
+        Expect.equals('Hello', String.fromCharCodes(message.data));
+        Expect.equals(message.controlMessages.length, 1);
+        final SocketControlMessage controlMessage = message.controlMessages[0];
+        final handles = controlMessage.extractHandles();
+        Expect.isNotNull(handles);
+        Expect.equals(3, handles.length);
+        final receivedStdin = handles[0].toFile();
+        final receivedString = String.fromCharCodes(receivedStdin.readSync(32));
+        Expect.equals('Caller wrote to stdin\n', receivedString);
+        final receivedStdout = handles[1].toFile();
+        receivedStdout.writeStringSync('Hello, server!\n');
+        final receivedStderr = handles[2].toFile();
+        receivedStderr.writeStringSync('Hello, server too!\n');
+        socket.write('abc'.codeUnits);
+      } else if (e == RawSocketEvent.readClosed) {
+        socket.close();
+        server.close();
+      }
+    });
+  });
+
+  final file = File('$tempDirPath/myfile.txt');
+  final randomAccessFile = file.openSync(mode: FileMode.write);
+  // Send a message with sample file.
+  var socket = await RawSocket.connect(address, 0);
+  socket.listen((e) {
+    if (e == RawSocketEvent.write) {
+      socket.sendMessage(<SocketControlMessage>[
+        SocketControlMessage.fromHandles(<ResourceHandle>[
+          ResourceHandle.fromStdin(stdin),
+          ResourceHandle.fromStdout(stdout),
+          ResourceHandle.fromStdout(stderr)
+        ])
+      ], 'Hello'.codeUnits);
+      stdout.writeln('client sent a message');
+      stderr.writeln('client wrote to stderr');
+    } else if (e == RawSocketEvent.read) {
+      final data = socket.read();
+      if (data == null) {
+        return;
+      }
+      Expect.equals('abc', String.fromCharCodes(data));
+      socket.close();
+    }
+  });
+}
+
+void main(List<String> args) async {
+  runZonedGuarded(() async {
+    if (args.length > 0 && args[0] == '--start-stdio-message-test') {
+      await withTempDir('unix_socket_test', (Directory dir) async {
+        await testStdioMessage('${dir.path}', caller: false);
+      });
+      return;
+    }
+
     await withTempDir('unix_socket_test', (Directory dir) async {
       await testAddress('${dir.path}');
     });
@@ -477,12 +862,27 @@
     await withTempDir('unix_socket_test', (Directory dir) async {
       await testShortAbstractAddress(dir.uri.pathSegments.last);
     });
-  } catch (e) {
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testFileMessage('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testFileMessageWithShortRead('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testTooLargeControlMessage('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testSocketMessage('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testStdioMessage('${dir.path}', caller: true);
+    });
+  }, (e, st) {
     if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
       Expect.fail("Unexpected exception $e is thrown");
     } else {
       Expect.isTrue(e is SocketException);
       Expect.isTrue(e.toString().contains('not available'));
     }
-  }
+  });
 }
diff --git a/tests/standalone/io/web_socket_error_test.dart b/tests/standalone/io/web_socket_error_test.dart
index aca2548..a37afdb 100644
--- a/tests/standalone/io/web_socket_error_test.dart
+++ b/tests/standalone/io/web_socket_error_test.dart
@@ -12,6 +12,7 @@
 library dart._http;
 
 import "dart:async";
+import "dart:convert";
 import "dart:io";
 import "dart:math";
 import "dart:typed_data";
@@ -61,7 +62,7 @@
         String? key = request.headers.value("Sec-WebSocket-Key");
         _SHA1 sha1 = new _SHA1();
         sha1.add("$key$webSocketGUID".codeUnits);
-        String accept = _CryptoUtils.bytesToBase64(sha1.close());
+        String accept = base64Encode(sha1.close());
         response.headers.add("Sec-WebSocket-Accept", accept);
         response.headers.contentLength = 0;
         response.detachSocket().then((socket) {
diff --git a/tests/standalone/io/web_socket_ping_test.dart b/tests/standalone/io/web_socket_ping_test.dart
index 672e48f..fc1b0c1 100644
--- a/tests/standalone/io/web_socket_ping_test.dart
+++ b/tests/standalone/io/web_socket_ping_test.dart
@@ -9,7 +9,7 @@
 
 library dart._http;
 
-import "dart:async";
+import "dart:convert";
 import "dart:io";
 import "dart:math";
 import "dart:typed_data";
@@ -31,7 +31,7 @@
       String? key = request.headers.value("Sec-WebSocket-Key");
       _SHA1 sha1 = new _SHA1();
       sha1.add("$key$webSocketGUID".codeUnits);
-      String accept = _CryptoUtils.bytesToBase64(sha1.close());
+      String accept = base64Encode(sha1.close());
       response.headers.add("Sec-WebSocket-Accept", accept);
       response.headers.contentLength = 0;
       response.detachSocket().then((socket) {
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 9f62999..1c9d7d1 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -56,6 +56,7 @@
 [ $runtime == dart_precompiled ]
 http_launch_test: Skip
 io/addlatexhash_test: Skip
+io/issue_46436_test: SkipByDesign # Uses mirrors.
 io/socket_sigpipe_test: SkipByDesign # Spawns server process using Platform.executable
 io/wait_for_event_isolate_test: SkipByDesign # Uses mirrors.
 io/wait_for_event_microtask_test: SkipByDesign # Uses mirrors.
diff --git a/tests/standalone_2/io/issue_30687_test.dart b/tests/standalone_2/io/issue_30687_test.dart
index 71ee6fd..b814cc7 100644
--- a/tests/standalone_2/io/issue_30687_test.dart
+++ b/tests/standalone_2/io/issue_30687_test.dart
@@ -9,7 +9,7 @@
 import 'package:expect/expect.dart';
 import 'package:path/path.dart' as path;
 
-import 'unix_socket_test.dart' show withTempDir;
+import 'test_utils.dart' show withTempDir;
 
 main() async {
   await withTempDir('issue_30687', (Directory tempDir) async {
diff --git a/tests/standalone_2/io/issue_35112_test.dart b/tests/standalone_2/io/issue_35112_test.dart
new file mode 100644
index 0000000..1c3cfd3
--- /dev/null
+++ b/tests/standalone_2/io/issue_35112_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.9
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:expect/expect.dart';
+import 'test_utils.dart' show withTempDir;
+
+main() async {
+  // Verify that File.setLastAccessed does *not* trigger a FileSystemModifyEvent
+  // with FileSystemModifyEvent.contentChanged == true.
+  await withTempDir('issue_35112', (Directory tempDir) async {
+    File file = new File("${tempDir.path}/file.tmp");
+    file.createSync();
+
+    final eventCompleter = new Completer<FileSystemEvent>();
+    StreamSubscription subscription;
+    subscription = tempDir.watch().listen((FileSystemEvent event) {
+      if (event is FileSystemModifyEvent && event.contentChanged) {
+        eventCompleter.complete(event);
+      }
+      subscription?.cancel();
+    });
+
+    file.setLastAccessedSync(DateTime.now().add(Duration(days: 3)));
+    Timer(Duration(seconds: 1), () {
+      eventCompleter.complete(null);
+      subscription?.cancel();
+    });
+    ;
+    FileSystemEvent event = await eventCompleter.future;
+    Expect.isNull(event,
+        "No event should be triggered or .contentChanged should equal false");
+  });
+}
diff --git a/tests/standalone_2/io/issue_46436_test.dart b/tests/standalone_2/io/issue_46436_test.dart
new file mode 100644
index 0000000..f94b11b
--- /dev/null
+++ b/tests/standalone_2/io/issue_46436_test.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2021, 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.
+//
+// Checks that _WindowsCodePageEncoder.convert() throws an exception on
+// platforms other than Windows.
+
+// @dart = 2.9
+
+import "dart:io";
+import 'dart:mirrors';
+
+import "package:expect/expect.dart";
+
+ClassMirror findWindowsCodePageEncoder() {
+  final dartIo =
+      currentMirrorSystem().libraries[Uri(scheme: "dart", path: "io")];
+  if (dartIo == null) {
+    throw StateError("dart:io not present");
+  }
+
+  final classes = dartIo.declarations.values
+      .where((d) =>
+          d is ClassMirror &&
+          d.simpleName.toString().contains('"_WindowsCodePageEncoder"'))
+      .map((d) => d as ClassMirror)
+      .toList();
+
+  Expect.equals(
+      1, classes.length, "Expected exactly one _WindowsCodePageEncoder");
+  return classes[0];
+}
+
+test() {
+  final winCodePageEncoder = findWindowsCodePageEncoder();
+  final encoder = winCodePageEncoder.newInstance(Symbol(""), List.empty());
+  try {
+    encoder.invoke(Symbol("convert"), List.of(["test"]));
+    Expect.isTrue(Platform.isWindows,
+        "expected UnsupportedError on ${Platform.operatingSystem}");
+  } on UnsupportedError catch (e) {
+    Expect.isFalse(
+        Platform.isWindows, "unexpected UnsupportedError on Windows: $e");
+  }
+}
+
+void main() {
+  test();
+}
diff --git a/tests/standalone_2/io/platform_locale_name_test.dart b/tests/standalone_2/io/platform_locale_name_test.dart
new file mode 100644
index 0000000..5ad27ed
--- /dev/null
+++ b/tests/standalone_2/io/platform_locale_name_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.9
+
+import "dart:io";
+
+import "package:expect/expect.dart";
+
+main() {
+  // Match patterns like:
+  //    "en-US"                 (Android, iOS, MacOS, Windows)
+  //    "en_US", "en_US.UTF-8"  (Linux)
+  //    "ESP-USA"               (theoretically possible)
+  // Assumes that the platform has a reasonably configured locale.
+  var localePattern = RegExp(r"[A-Za-z]{2,4}[_-][A-Za-z]{2}");
+  var localeName = Platform.localeName;
+  Expect.isNotNull(
+      localePattern.matchAsPrefix(localeName),
+      "Platform.localeName: ${localeName} does not match "
+      "${localePattern.pattern}");
+}
diff --git a/tests/standalone_2/io/platform_os_version_test.dart b/tests/standalone_2/io/platform_os_version_test.dart
index dde94c4..cf312c4 100644
--- a/tests/standalone_2/io/platform_os_version_test.dart
+++ b/tests/standalone_2/io/platform_os_version_test.dart
@@ -12,4 +12,5 @@
   var version = Platform.operatingSystemVersion;
   Expect.isNotNull(version);
   Expect.isTrue(version is String);
+  Expect.notEquals("", version);
 }
diff --git a/tests/standalone_2/io/socket_source_address_test.dart b/tests/standalone_2/io/socket_source_address_test.dart
index 57efc5af..f118367 100644
--- a/tests/standalone_2/io/socket_source_address_test.dart
+++ b/tests/standalone_2/io/socket_source_address_test.dart
@@ -8,39 +8,88 @@
 import "dart:async";
 import "dart:io";
 
-import 'test_utils.dart' show retry, throws;
+import 'test_utils.dart' show retry, throws, withTempDir;
 
 Future testArguments(connectFunction) async {
   var sourceAddress;
-  final server = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
-  server.listen((_) {
+  final serverIPv4 = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
+  serverIPv4.listen((_) {
+    throw 'Unexpected connection from address $sourceAddress';
+  });
+
+  final serverIPv6 = await ServerSocket.bind(InternetAddress.loopbackIPv6, 0);
+  serverIPv6.listen((_) {
     throw 'Unexpected connection from address $sourceAddress';
   });
 
   // Illegal type for sourceAddress.
   for (sourceAddress in ['www.google.com', 'abc']) {
     await throws(
-        () => connectFunction('127.0.0.1', server.port,
+        () => connectFunction('127.0.0.1', serverIPv4.port,
             sourceAddress: sourceAddress),
         (e) => e is ArgumentError);
   }
   // Unsupported local address.
   for (sourceAddress in ['8.8.8.8', new InternetAddress('8.8.8.8')]) {
     await throws(
-        () => connectFunction('127.0.0.1', server.port,
+        () => connectFunction('127.0.0.1', serverIPv4.port,
             sourceAddress: sourceAddress),
         (e) =>
             e is SocketException &&
             e.address == new InternetAddress('8.8.8.8'));
   }
-  // Address family mismatch.
-  for (sourceAddress in ['::1', InternetAddress.loopbackIPv6]) {
+  // Address family mismatch for IPv4.
+  for (sourceAddress in [
+    '::1',
+    InternetAddress.loopbackIPv6,
+    InternetAddress('sock', type: InternetAddressType.unix)
+  ]) {
     await throws(
-        () => connectFunction('127.0.0.1', server.port,
+        () => connectFunction('127.0.0.1', serverIPv4.port,
             sourceAddress: sourceAddress),
         (e) => e is SocketException);
   }
-  await server.close();
+  // Address family mismatch for IPv6.
+  for (sourceAddress in [
+    '127.0.0.1',
+    InternetAddress.loopbackIPv4,
+    InternetAddress('sock', type: InternetAddressType.unix)
+  ]) {
+    await throws(
+        () => connectFunction('::1', serverIPv6.port,
+            sourceAddress: sourceAddress),
+        (e) => e is SocketException);
+  }
+
+  await serverIPv4.close();
+  await serverIPv6.close();
+}
+
+Future testUnixDomainArguments(connectFunction, String socketDir) async {
+  var sourceAddress;
+  final serverUnix = await ServerSocket.bind(
+      InternetAddress('$socketDir/sock', type: InternetAddressType.unix), 0);
+  serverUnix.listen((_) {
+    throw 'Unexpected connection from address $sourceAddress';
+  });
+
+  // Address family mismatch for Unix domain sockets.
+  for (sourceAddress in [
+    '127.0.0.1',
+    InternetAddress.loopbackIPv4,
+    '::1',
+    InternetAddress.loopbackIPv6,
+  ]) {
+    await throws(
+        () => connectFunction(
+            InternetAddress("$socketDir/sock", type: InternetAddressType.unix),
+            serverUnix.port,
+            sourceAddress: sourceAddress),
+        (e) =>
+            e is SocketException &&
+            e.toString().contains('Address family not supported'));
+  }
+  await serverUnix.close();
 }
 
 // IPv4 addresses to use as source address when connecting locally.
@@ -120,6 +169,18 @@
     await testArguments(Socket.connect);
   });
 
+  if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
+    await retry(() async {
+      await withTempDir('unix_socket_test', (Directory dir) async {
+        await testUnixDomainArguments(RawSocket.connect, "${dir.path}");
+      });
+    });
+    await retry(() async {
+      await withTempDir('unix_socket_test', (Directory dir) async {
+        await testUnixDomainArguments(Socket.connect, "${dir.path}");
+      });
+    });
+  }
   await retry(() async {
     await testConnect(
         InternetAddress.anyIPv4, false, RawSocket.connect, (s) => s.close());
diff --git a/tests/standalone_2/io/test_utils.dart b/tests/standalone_2/io/test_utils.dart
index 0a36318..256740d 100644
--- a/tests/standalone_2/io/test_utils.dart
+++ b/tests/standalone_2/io/test_utils.dart
@@ -39,3 +39,24 @@
   }
   Expect.fail('Did not throw');
 }
+
+// Create a temporary directory and delete it when the test function exits.
+Future withTempDir(String prefix, Future<void> test(Directory dir)) async {
+  final tempDir = Directory.systemTemp.createTempSync(prefix);
+  try {
+    await runZonedGuarded(() => test(tempDir), (e, st) {
+      try {
+        tempDir.deleteSync(recursive: true);
+      } catch (_) {
+        // ignore errors
+      }
+      throw e;
+    });
+  } finally {
+    try {
+      tempDir.deleteSync(recursive: true);
+    } catch (_) {
+      // ignore errors
+    }
+  }
+}
diff --git a/tests/standalone_2/io/unix_socket_regress_46634_test.dart b/tests/standalone_2/io/unix_socket_regress_46634_test.dart
index 8920965..2ac0168b 100644
--- a/tests/standalone_2/io/unix_socket_regress_46634_test.dart
+++ b/tests/standalone_2/io/unix_socket_regress_46634_test.dart
@@ -5,7 +5,8 @@
 // @dart = 2.9
 import 'dart:io';
 
-import 'unix_socket_test.dart' show withTempDir, testListenCloseListenClose;
+import 'test_utils.dart' show withTempDir;
+import 'unix_socket_test.dart' show testListenCloseListenClose;
 
 void main() async {
   if (!Platform.isMacOS && !Platform.isLinux && !Platform.isAndroid) {
diff --git a/tests/standalone_2/io/unix_socket_test.dart b/tests/standalone_2/io/unix_socket_test.dart
index a82a155..ecc6b3d 100644
--- a/tests/standalone_2/io/unix_socket_test.dart
+++ b/tests/standalone_2/io/unix_socket_test.dart
@@ -10,6 +10,8 @@
 
 import 'package:expect/expect.dart';
 
+import 'test_utils.dart' show withTempDir;
+
 Future testAddress(String name) async {
   var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
   var server = await ServerSocket.bind(address, 0);
@@ -437,18 +439,401 @@
   await httpServer.close();
 }
 
-// Create socket in temp directory
-Future withTempDir(String prefix, Future<void> test(Directory dir)) async {
-  var tempDir = Directory.systemTemp.createTempSync(prefix);
-  try {
-    await test(tempDir);
-  } finally {
-    tempDir.deleteSync(recursive: true);
+Future testFileMessage(String tempDirPath) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
   }
+
+  final completer = Completer<bool>();
+
+  final address =
+      InternetAddress('$tempDirPath/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    print('server started a socket $socket');
+    socket.listen((e) {
+      if (e == RawSocketEvent.read) {
+        final SocketMessage message = socket.readMessage();
+        if (message == null) {
+          return;
+        }
+        print('server received message $message');
+        final String messageData = String.fromCharCodes(message.data);
+        print('server received messageData $messageData');
+        if (messageData == 'EmptyMessage') {
+          Expect.equals('EmptyMessage'.length, message.data.length);
+          Expect.isTrue(message.controlMessages.isEmpty);
+          return;
+        }
+        Expect.equals('Hello', messageData);
+        Expect.equals('Hello'.length, message.data.length);
+        Expect.equals(1, message.controlMessages.length);
+        final SocketControlMessage controlMessage = message.controlMessages[0];
+        final handles = controlMessage.extractHandles();
+        Expect.isNotNull(handles);
+        Expect.equals(1, handles.length);
+        final receivedFile = handles[0].toFile();
+        receivedFile.writeStringSync('Hello, server!\n');
+        print("server has written to the $receivedFile file");
+        socket.write('abc'.codeUnits);
+      } else if (e == RawSocketEvent.readClosed) {
+        print('server socket got readClosed');
+        socket.close();
+        server.close();
+      }
+    });
+  });
+
+  final file = File('$tempDirPath/myfile.txt');
+  final randomAccessFile = file.openSync(mode: FileMode.write);
+  // Send a message with sample file.
+  final socket = await RawSocket.connect(address, 0);
+  socket.listen((e) {
+    if (e == RawSocketEvent.write) {
+      randomAccessFile.writeStringSync('Hello, client!\n');
+      socket.sendMessage(<SocketControlMessage>[
+        SocketControlMessage.fromHandles(
+            <ResourceHandle>[ResourceHandle.fromFile(randomAccessFile)])
+      ], 'Hello'.codeUnits);
+      print('client sent a message');
+      socket.sendMessage(<SocketControlMessage>[], 'EmptyMessage'.codeUnits);
+      print('client sent a message without control data');
+    } else if (e == RawSocketEvent.read) {
+      final data = socket.read();
+      Expect.equals('abc', String.fromCharCodes(data));
+      Expect.equals(
+          'Hello, client!\nHello, server!\n', file.readAsStringSync());
+      socket.close();
+      completer.complete(true);
+    }
+  });
+
+  return completer.future;
 }
 
-void main() async {
-  try {
+Future testTooLargeControlMessage(String tempDirPath) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
+  }
+  final completer = Completer<bool>();
+  final address =
+      InternetAddress('$tempDirPath/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    print('server started a socket $socket');
+    socket.listen((e) {
+      if (e == RawSocketEvent.read) {
+        throw "Server should not receive request from the client";
+      } else if (e == RawSocketEvent.readClosed) {
+        socket.close();
+        server.close();
+      }
+    });
+  });
+
+  final file = File('$tempDirPath/myfile.txt');
+  final randomAccessFile = file.openSync(mode: FileMode.write);
+  // Send a message with sample file.
+  final socket = await RawSocket.connect(address, 0);
+
+  runZonedGuarded(
+      () => socket.listen((e) {
+            if (e == RawSocketEvent.write) {
+              randomAccessFile.writeStringSync('Hello, client!\n');
+              const int largeHandleCount = 1024;
+              final manyResourceHandles = List<ResourceHandle>.filled(
+                  largeHandleCount, ResourceHandle.fromFile(randomAccessFile));
+              socket.sendMessage(<SocketControlMessage>[
+                SocketControlMessage.fromHandles(manyResourceHandles)
+              ], 'Hello'.codeUnits);
+              server.close();
+              socket.close();
+            }
+          }), (e, st) {
+    print('Got expected unhandled exception $e $st');
+    Expect.equals(true, e is SocketException);
+    completer.complete(true);
+  });
+
+  return completer.future;
+}
+
+Future testFileMessageWithShortRead(String tempDirPath) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
+  }
+
+  final completer = Completer<bool>();
+
+  final address =
+      InternetAddress('$tempDirPath/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    print('server started a socket $socket');
+    socket.listen((e) {
+      if (e == RawSocketEvent.read) {
+        Expect.throws(
+            () => socket.readMessage(0),
+            (e) =>
+                e is ArgumentError &&
+                e.toString().contains('Illegal length 0'));
+        final SocketMessage message = socket.readMessage(/*count=*/ 1);
+        if (message == null) {
+          return;
+        }
+        print('server received message $message');
+        final String messageData = String.fromCharCodes(message.data);
+        print('messageData: $messageData');
+        if (messageData[0] == 'H') {
+          Expect.equals(1, message.controlMessages.length);
+          final SocketControlMessage controlMessage =
+              message.controlMessages[0];
+          final handles = controlMessage.extractHandles();
+          Expect.isNotNull(handles);
+          Expect.equals(1, handles.length);
+          final handlesAgain = controlMessage.extractHandles();
+          Expect.isNotNull(handlesAgain);
+          Expect.equals(1, handlesAgain.length);
+          handles[0].toFile().writeStringSync('Hello, server!\n');
+          socket.write('abc'.codeUnits);
+        } else {
+          Expect.equals('i', messageData[0]);
+          Expect.equals(0, message.controlMessages.length);
+        }
+      } else if (e == RawSocketEvent.readClosed) {
+        print('server socket got readClosed');
+        socket.close();
+        server.close();
+      }
+    });
+  });
+
+  final file = File('$tempDirPath/myfile.txt');
+  final randomAccessFile = file.openSync(mode: FileMode.write);
+  // Send a message with sample file.
+  final socket = await RawSocket.connect(address, 0);
+  socket.listen((e) {
+    if (e == RawSocketEvent.write) {
+      randomAccessFile.writeStringSync('Hello, client!\n');
+      socket.sendMessage(<SocketControlMessage>[
+        SocketControlMessage.fromHandles(
+            <ResourceHandle>[ResourceHandle.fromFile(randomAccessFile)])
+      ], 'Hi'.codeUnits);
+      print('client sent a message');
+    } else if (e == RawSocketEvent.read) {
+      final data = socket.read();
+      Expect.equals('abc', String.fromCharCodes(data));
+      Expect.equals(
+          'Hello, client!\nHello, server!\n', file.readAsStringSync());
+      socket.close();
+      completer.complete(true);
+    }
+  });
+
+  return completer.future;
+}
+
+Future<RawServerSocket> createTestServer() async {
+  final server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  return server
+    ..listen((client) {
+      String receivedData = "";
+
+      client.writeEventsEnabled = false;
+      client.listen((event) {
+        switch (event) {
+          case RawSocketEvent.READ:
+            assert(client.available() > 0);
+            final buffer = client.read(200);
+            receivedData += String.fromCharCodes(buffer);
+            break;
+          case RawSocketEvent.READ_CLOSED:
+            client.close();
+            server.close();
+            break;
+          case RawSocketEvent.CLOSED:
+            Expect.equals(
+                "Hello, client 1!\nHello, client 2!\nHello, server!\n",
+                receivedData);
+            break;
+          default:
+            throw "Unexpected event $event";
+        }
+      }, onError: (e) {
+        print("client ERROR $e");
+      });
+    });
+}
+
+Future testSocketMessage(String uniqueName) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
+  }
+
+  final address =
+      InternetAddress('$uniqueName/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    socket.listen((e) {
+      switch (e) {
+        case RawSocketEvent.read:
+          final SocketMessage message = socket.readMessage();
+          if (message == null) {
+            return;
+          }
+          Expect.equals('Hello', String.fromCharCodes(message.data));
+          Expect.equals(1, message.controlMessages.length);
+          final SocketControlMessage controlMessage =
+              message.controlMessages[0];
+          final handles = controlMessage.extractHandles();
+          Expect.isNotNull(handles);
+          Expect.equals(1, handles.length);
+          final receivedSocket = handles[0].toRawSocket();
+          receivedSocket.write('Hello, server!\n'.codeUnits);
+          socket.write('server replied'.codeUnits);
+          receivedSocket.close();
+          break;
+        case RawSocketEvent.readClosed:
+          socket.close();
+          server.close();
+          break;
+      }
+    });
+  });
+
+  final RawServerSocket testServer = await createTestServer();
+  final testSocket = await RawSocket.connect("127.0.0.1", testServer.port);
+
+  // Send a message with opened [testSocket] socket.
+  final socket = await RawSocket.connect(address, 0);
+  socket.listen((e) {
+    switch (e) {
+      case RawSocketEvent.write:
+        testSocket.write('Hello, client 1!\n'.codeUnits);
+        socket.sendMessage(<SocketControlMessage>[
+          SocketControlMessage.fromHandles(
+              <ResourceHandle>[ResourceHandle.fromRawSocket(testSocket)])
+        ], 'Hello'.codeUnits);
+        testSocket.write('Hello, client 2!\n'.codeUnits);
+        break;
+      case RawSocketEvent.read:
+        final data = socket.read();
+        if (data == null) {
+          return;
+        }
+
+        final dataString = String.fromCharCodes(data);
+        Expect.equals('server replied', dataString);
+        socket.close();
+        testSocket.close();
+        testServer.close();
+    }
+  });
+}
+
+Future testStdioMessage(String tempDirPath, {bool caller: false}) async {
+  if (!Platform.isLinux && !Platform.isAndroid) {
+    return;
+  }
+
+  final completer = Completer<bool>();
+
+  if (caller) {
+    final process = await Process.start(Platform.resolvedExecutable,
+        <String>[Platform.script.toFilePath(), '--start-stdio-message-test']);
+    String processStdout = "";
+    String processStderr = "";
+    process.stdout.transform(utf8.decoder).listen((line) {
+      processStdout += line;
+      print('stdout:>$line<');
+    });
+    process.stderr.transform(utf8.decoder).listen((line) {
+      processStderr += line;
+      print('stderr:>$line<');
+    });
+    process.stdin.writeln('Caller wrote to stdin');
+
+    Expect.equals(0, await process.exitCode);
+    Expect.equals("client sent a message\nHello, server!\n", processStdout);
+    Expect.equals(
+        "client wrote to stderr\nHello, server too!\n", processStderr);
+    return;
+  }
+
+  final address =
+      InternetAddress('$tempDirPath/sock', type: InternetAddressType.unix);
+  final server = await RawServerSocket.bind(address, 0, shared: false);
+
+  server.listen((RawSocket socket) async {
+    socket.listen((e) {
+      if (e == RawSocketEvent.read) {
+        final SocketMessage message = socket.readMessage();
+        if (message == null) {
+          return;
+        }
+        Expect.equals('Hello', String.fromCharCodes(message.data));
+        Expect.equals(message.controlMessages.length, 1);
+        final SocketControlMessage controlMessage = message.controlMessages[0];
+        final handles = controlMessage.extractHandles();
+        Expect.isNotNull(handles);
+        Expect.equals(3, handles.length);
+        final receivedStdin = handles[0].toFile();
+        final receivedString = String.fromCharCodes(receivedStdin.readSync(32));
+        Expect.equals('Caller wrote to stdin\n', receivedString);
+        final receivedStdout = handles[1].toFile();
+        receivedStdout.writeStringSync('Hello, server!\n');
+        final receivedStderr = handles[2].toFile();
+        receivedStderr.writeStringSync('Hello, server too!\n');
+        socket.write('abc'.codeUnits);
+      } else if (e == RawSocketEvent.readClosed) {
+        socket.close();
+        server.close();
+      }
+    });
+  });
+
+  final file = File('$tempDirPath/myfile.txt');
+  final randomAccessFile = file.openSync(mode: FileMode.write);
+  // Send a message with sample file.
+  var socket = await RawSocket.connect(address, 0);
+  socket.listen((e) {
+    if (e == RawSocketEvent.write) {
+      socket.sendMessage(<SocketControlMessage>[
+        SocketControlMessage.fromHandles(<ResourceHandle>[
+          ResourceHandle.fromStdin(stdin),
+          ResourceHandle.fromStdout(stdout),
+          ResourceHandle.fromStdout(stderr)
+        ])
+      ], 'Hello'.codeUnits);
+      stdout.writeln('client sent a message');
+      stderr.writeln('client wrote to stderr');
+    } else if (e == RawSocketEvent.read) {
+      final data = socket.read();
+      if (data == null) {
+        return;
+      }
+      Expect.equals('abc', String.fromCharCodes(data));
+      socket.close();
+      completer.complete(true);
+    }
+  });
+
+  return completer.future;
+}
+
+void main(List<String> args) async {
+  runZonedGuarded(() async {
+    if (args.length > 0 && args[0] == '--start-stdio-message-test') {
+      await withTempDir('unix_socket_test', (Directory dir) async {
+        await testStdioMessage('${dir.path}', caller: false);
+      });
+      return;
+    }
+
     await withTempDir('unix_socket_test', (Directory dir) async {
       await testAddress('${dir.path}');
     });
@@ -479,12 +864,27 @@
     await withTempDir('unix_socket_test', (Directory dir) async {
       await testShortAbstractAddress(dir.uri.pathSegments.last);
     });
-  } catch (e) {
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testFileMessage('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testFileMessageWithShortRead('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testTooLargeControlMessage('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testSocketMessage('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testStdioMessage('${dir.path}', caller: true);
+    });
+  }, (e, st) {
     if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
       Expect.fail("Unexpected exception $e is thrown");
     } else {
       Expect.isTrue(e is SocketException);
       Expect.isTrue(e.toString().contains('not available'));
     }
-  }
+  });
 }
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 6a27a9c..6b785dd 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -56,6 +56,7 @@
 [ $runtime == dart_precompiled ]
 http_launch_test: Skip
 io/addlatexhash_test: Skip
+io/issue_46436_test: SkipByDesign # Uses mirrors.
 io/socket_sigpipe_test: SkipByDesign # Spawns server process using Platform.executable
 io/wait_for_event_isolate_test: SkipByDesign # Uses mirrors.
 io/wait_for_event_microtask_test: SkipByDesign # Uses mirrors.
diff --git a/tests/web/lax_runtime_type_instantiate_to_string_test.dart b/tests/web/lax_runtime_type_instantiate_to_string_test.dart
index 26ba4e8..25e1b97 100644
--- a/tests/web/lax_runtime_type_instantiate_to_string_test.dart
+++ b/tests/web/lax_runtime_type_instantiate_to_string_test.dart
@@ -14,7 +14,10 @@
     // `true` if non-minified.
     // The signature of `id` is not otherwise needed so the instantiation
     // wrapper doesn't have a function type.
-    Expect.equals("Instantiation1<dynamic>", toString);
+    // The type parameter is present since it is required because `==`
+    // distinguishes instantiations of the same generic function with different
+    // types.
+    Expect.equals("Instantiation1<int>", toString);
   }
   print(toString);
 }
diff --git a/tests/web_2/lax_runtime_type_instantiate_to_string_test.dart b/tests/web_2/lax_runtime_type_instantiate_to_string_test.dart
index 0e4d623..9d7c13c 100644
--- a/tests/web_2/lax_runtime_type_instantiate_to_string_test.dart
+++ b/tests/web_2/lax_runtime_type_instantiate_to_string_test.dart
@@ -16,7 +16,10 @@
     // `true` if non-minified.
     // The signature of `id` is not otherwise needed so the instantiation
     // wrapper doesn't have a function type.
-    Expect.equals("Instantiation1<dynamic>", toString);
+    // The type parameter is present since it is required because `==`
+    // distinguishes instantiations of the same generic function with different
+    // types.
+    Expect.equals("Instantiation1<int>", toString);
   }
   print(toString);
 }
diff --git a/tools/FAKE_COMMITS b/tools/FAKE_COMMITS
index 1599948..b709239 100644
--- a/tools/FAKE_COMMITS
+++ b/tools/FAKE_COMMITS
@@ -4,6 +4,7 @@
 
 File for landing text only commits in the dart repo.
 
+Test
 Tracer update
 Force build after chrome-bot messup
 Testing svn server
diff --git a/tools/VERSION b/tools/VERSION
index f74cecc..d18afdd 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 178
+PRERELEASE 268
 PRERELEASE_PATCH 1
\ No newline at end of file
diff --git a/tools/bots/flutter/compile_flutter.sh b/tools/bots/flutter/compile_flutter.sh
index 35c3e81..511855c 100755
--- a/tools/bots/flutter/compile_flutter.sh
+++ b/tools/bots/flutter/compile_flutter.sh
@@ -83,7 +83,7 @@
 mkdir flutter_patched_sdk
 
 $checkout/tools/sdks/dart-sdk/bin/dart \
-    --packages=$checkout/.packages \
+    --packages=$checkout/.dart_tool/package_config.json \
     $checkout/pkg/front_end/tool/_fasta/compile_platform.dart \
     dart:core \
     -Ddart.vm.product=false \
@@ -97,7 +97,7 @@
     vm_outline_strong.dill
 
 $checkout/tools/sdks/dart-sdk/bin/dart \
-    --packages=$checkout/.packages \
+    --packages=$checkout/.dart_tool/package_config.json \
     $checkout/pkg/front_end/tool/_fasta/compile_platform.dart \
     --nnbd-agnostic \
     --target=flutter \
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 892e142..2facefd5 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -102,10 +102,10 @@
       ".dart_tool/package_config.json",
       "out/ReleaseIA32/dart",
       "out/ReleaseIA32/dart2js_platform.dill",
-      "out/ReleaseIA32/dart2js_platform_strong.dill",
+      "out/ReleaseIA32/dart2js_platform_unsound.dill",
       "out/ReleaseX64/dart",
       "out/ReleaseX64/dart2js_platform.dill",
-      "out/ReleaseX64/dart2js_platform_strong.dill",
+      "out/ReleaseX64/dart2js_platform_unsound.dill",
       "pkg/",
       "runtime/tests/",
       "samples-dev/",
@@ -143,18 +143,17 @@
       "tools/",
       "xcodebuild/ReleaseIA32/dart",
       "xcodebuild/ReleaseIA32/dart2js_platform.dill",
-      "xcodebuild/ReleaseIA32/dart2js_platform_strong.dill",
+      "xcodebuild/ReleaseIA32/dart2js_platform_unsound.dill",
       "xcodebuild/ReleaseX64/dart",
       "xcodebuild/ReleaseX64/dart2js_platform.dill",
-      "xcodebuild/ReleaseX64/dart2js_platform_strong.dill"
+      "xcodebuild/ReleaseX64/dart2js_platform_unsound.dill"
     ],
     "web_platform_hostasserts_nnbd": [
       ".packages",
       ".dart_tool/package_config.json",
       "out/ReleaseX64/dart",
       "out/ReleaseX64/dart2js_platform.dill",
-      "out/ReleaseX64/dart2js_nnbd_strong_platform.dill",
-      "out/ReleaseX64/dart2js_platform_strong.dill",
+      "out/ReleaseX64/dart2js_platform_unsound.dill",
       "pkg/",
       "runtime/tests/",
       "samples-dev/",
@@ -184,8 +183,7 @@
       "tools/",
       "xcodebuild/ReleaseX64/dart",
       "xcodebuild/ReleaseX64/dart2js_platform.dill",
-      "xcodebuild/ReleaseX64/dart2js_nnbd_strong_platform.dill",
-      "xcodebuild/ReleaseX64/dart2js_platform_strong.dill"
+      "xcodebuild/ReleaseX64/dart2js_platform_unsound.dill"
     ],
     "front-end": [
       ".packages",
@@ -567,17 +565,17 @@
     },
     "dart2js-win-ie11": {
       "options": {
-        "use-sdk": true,
-        "babel": "{\"presets\":[\"es2015\"]}"
+        "babel": "{\"presets\":[\"es2015\"]}",
+        "use-sdk": true
       }
     },
     "dart2js-win-ie11-unsound": {
       "options": {
-        "use-sdk": true,
         "babel": "{\"presets\":[\"es2015\"]}",
         "dart2js-options": [
           "--no-sound-null-safety"
-        ]
+        ],
+        "use-sdk": true
       }
     },
     "dart2js-win-edge": {
@@ -2469,7 +2467,7 @@
             "pkg//compiler/"
           ],
           "shards": 3,
-          "fileset": "web_platform"
+          "fileset": "web_platform_nnbd"
         }
       ]
     },
@@ -2492,7 +2490,6 @@
           "name": "dart2js tests",
           "arguments": [
             "-ndart2js-hostasserts-linux-ia32-d8",
-            "--dart2js-batch",
             "--exclude_suite=observatory_ui"
           ],
           "shards": 6,
@@ -2502,7 +2499,6 @@
           "name": "dart2js co19_2 tests",
           "arguments": [
             "-ndart2js-hostasserts-linux-ia32-d8",
-            "--dart2js-batch",
             "co19_2"
           ],
           "shards": 6,
@@ -2512,7 +2508,6 @@
           "name": "dart2js package tests",
           "arguments": [
             "-ndart2js-hostasserts-linux-ia32-d8",
-            "--dart2js-batch",
             "pkg"
           ]
         },
@@ -2520,7 +2515,6 @@
           "name": "dart2js observatory-ui tests",
           "arguments": [
             "-ndart2js-hostasserts-linux-ia32-d8-unsound",
-            "--dart2js-batch",
             "observatory_ui"
           ]
         },
@@ -2528,7 +2522,6 @@
           "name": "dart2js extra tests",
           "arguments": [
             "-ndart2js-hostasserts-linux-ia32-d8",
-            "--dart2js-batch",
             "web_2"
           ]
         }
@@ -2560,7 +2553,6 @@
           "name": "dart2js tests",
           "arguments": [
             "-ndart2js-${system}-${runtime}",
-            "--dart2js-batch",
             "--reset-browser-configuration",
             "--exclude_suite=observatory_ui"
           ],
@@ -2571,7 +2563,6 @@
           "name": "dart2js co19_2 tests",
           "arguments": [
             "-ndart2js-${system}-${runtime}",
-            "--dart2js-batch",
             "--reset-browser-configuration",
             "co19_2"
           ],
@@ -2582,7 +2573,6 @@
           "name": "dart2js package tests",
           "arguments": [
             "-ndart2js-${system}-${runtime}",
-            "--dart2js-batch",
             "--reset-browser-configuration",
             "pkg"
           ]
@@ -2591,7 +2581,6 @@
           "name": "dart2js observatory-ui tests",
           "arguments": [
             "-ndart2js-${system}-${runtime}-unsound",
-            "--dart2js-batch",
             "--reset-browser-configuration",
             "observatory_ui"
           ]
@@ -2600,7 +2589,6 @@
           "name": "dart2js extra tests",
           "arguments": [
             "-ndart2js-${system}-${runtime}",
-            "--dart2js-batch",
             "--reset-browser-configuration",
             "web_2"
           ]
@@ -2626,7 +2614,6 @@
           "name": "dart2js tests",
           "arguments": [
             "-ndart2js-minified-linux-d8",
-            "--dart2js-batch",
             "--exclude_suite=observatory_ui"
           ],
           "shards": 6,
@@ -2636,7 +2623,6 @@
           "name": "dart2js package tests",
           "arguments": [
             "-ndart2js-minified-linux-d8",
-            "--dart2js-batch",
             "pkg"
           ]
         },
@@ -2644,7 +2630,6 @@
           "name": "dart2js observatory-ui tests",
           "arguments": [
             "-ndart2js-minified-linux-d8-unsound",
-            "--dart2js-batch",
             "observatory_ui"
           ]
         },
@@ -2652,7 +2637,6 @@
           "name": "dart2js extra tests",
           "arguments": [
             "-ndart2js-minified-linux-d8",
-            "--dart2js-batch",
             "web_2"
           ]
         },
@@ -2660,7 +2644,6 @@
           "name": "dart2js production tests",
           "arguments": [
             "-ndart2js-production-linux-d8",
-            "--dart2js-batch",
             "--exclude_suite=observatory_ui"
           ],
           "shards": 6,
@@ -2670,7 +2653,6 @@
           "name": "dart2js production extra tests",
           "arguments": [
             "-ndart2js-production-linux-d8",
-            "--dart2js-batch",
             "web_2"
           ]
         },
@@ -2678,7 +2660,6 @@
           "name": "dart2js -O0 smoke tests",
           "arguments": [
             "-ndart2js-o0-linux-d8",
-            "--dart2js-batch",
             "web_2"
           ]
         },
@@ -2686,7 +2667,6 @@
           "name": "dart2js --canary smoke tests",
           "arguments": [
             "-ndart2js-modern-linux-d8",
-            "--dart2js-batch",
             "web_2"
           ]
         },
@@ -2694,7 +2674,6 @@
           "name": "dart2js d8 fragment merging tests",
           "arguments": [
             "-ndart2js-minified-hostasserts-weak-max-fragments-linux-x64-d8",
-            "--dart2js-batch",
             "web/deferred/"
           ],
           "shards": 1,
@@ -2721,7 +2700,6 @@
           "name": "dart2js tests",
           "arguments": [
             "-ndart2js-minified-csp-linux-chrome",
-            "--dart2js-batch",
             "--reset-browser-configuration",
             "--exclude_suite=observatory_ui"
           ],
@@ -2732,7 +2710,6 @@
           "name": "dart2js package tests",
           "arguments": [
             "-ndart2js-minified-csp-linux-chrome",
-            "--dart2js-batch",
             "--reset-browser-configuration",
             "pkg"
           ]
@@ -2741,7 +2718,6 @@
           "name": "dart2js observatory-ui tests",
           "arguments": [
             "-ndart2js-minified-csp-linux-chrome-unsound",
-            "--dart2js-batch",
             "--reset-browser-configuration",
             "observatory_ui"
           ]
@@ -2750,7 +2726,6 @@
           "name": "dart2js extra tests",
           "arguments": [
             "-ndart2js-minified-csp-linux-chrome",
-            "--dart2js-batch",
             "web_2"
           ]
         },
@@ -2758,7 +2733,6 @@
           "name": "dart2js d8 fragment merging tests",
           "arguments": [
             "-ndart2js-minified-csp-max-fragments-linux-chrome",
-            "--dart2js-batch",
             "web/deferred/"
           ]
         }
@@ -2784,7 +2758,6 @@
           "name": "dart2js nnbd weak d8 tests",
           "arguments": [
             "-ndart2js-hostasserts-weak-linux-x64-d8",
-            "--dart2js-batch",
             "language",
             "corelib"
           ],
@@ -2795,7 +2768,6 @@
           "name": "dart2js nnbd weak d8 fragment merging tests",
           "arguments": [
             "-ndart2js-hostasserts-weak-max-fragments-linux-x64-d8",
-            "--dart2js-batch",
             "web/deferred/"
           ],
           "shards": 1,
@@ -2805,7 +2777,6 @@
           "name": "dart2js nnbd weak chrome tests",
           "arguments": [
             "-ndart2js-hostasserts-weak-linux-x64-chrome",
-            "--dart2js-batch",
             "web"
           ],
           "shards": 3,
@@ -2815,7 +2786,6 @@
           "name": "dart2js nnbd weak lib tests",
           "arguments": [
             "-ndart2js-hostasserts-weak-linux-x64-chrome",
-            "--dart2js-batch",
             "lib"
           ],
           "shards": 3,
@@ -2825,7 +2795,6 @@
           "name": "dart2js nnbd weak co19 tests",
           "arguments": [
             "-ndart2js-hostasserts-weak-linux-x64-chrome",
-            "--dart2js-batch",
             "co19"
           ],
           "shards": 6,
@@ -2835,7 +2804,6 @@
           "name": "dart2js nnbd strong d8 tests",
           "arguments": [
             "-ndart2js-hostasserts-strong-linux-x64-d8",
-            "--dart2js-batch",
             "language",
             "corelib"
           ],
@@ -2846,7 +2814,6 @@
           "name": "dart2js nnbd strong d8 fragment merging tests",
           "arguments": [
             "-ndart2js-hostasserts-strong-max-fragments-linux-x64-d8",
-            "--dart2js-batch",
             "web/deferred/"
           ],
           "shards": 1,
@@ -2856,7 +2823,6 @@
           "name": "dart2js nnbd strong chrome tests",
           "arguments": [
             "-ndart2js-hostasserts-strong-linux-x64-chrome",
-            "--dart2js-batch",
             "web"
           ],
           "shards": 3,
@@ -2866,7 +2832,6 @@
           "name": "dart2js nnbd strong lib tests",
           "arguments": [
             "-ndart2js-hostasserts-strong-linux-x64-chrome",
-            "--dart2js-batch",
             "lib"
           ],
           "shards": 3,
@@ -2876,7 +2841,6 @@
           "name": "dart2js nnbd strong co19 tests",
           "arguments": [
             "-ndart2js-hostasserts-strong-linux-x64-chrome",
-            "--dart2js-batch",
             "co19"
           ],
           "shards": 6,
@@ -2962,6 +2926,7 @@
           "arguments": [
             "--arch=ia32,x64",
             "--mode=release",
+            "--check-clean",
             "create_sdk",
             "runtime"
           ]
@@ -3249,6 +3214,15 @@
           ]
         },
         {
+          "name": "analyze pkg/dart2js_info",
+          "script": "out/ReleaseX64/dart-sdk/bin/dart",
+          "arguments": [
+            "analyze",
+            "--fatal-infos",
+            "pkg/dart2js_info"
+          ]
+        },
+        {
           "name": "analyze pkg/dart2js_tools",
           "script": "out/ReleaseX64/dart-sdk/bin/dart",
           "arguments": [
@@ -3328,6 +3302,7 @@
           "script": "out/ReleaseX64/dart-sdk/bin/dart",
           "arguments": [
             "analyze",
+            "--fatal-infos",
             "pkg/native_stack_traces"
           ]
         },
@@ -3495,6 +3470,21 @@
           ]
         },
         {
+          "name": "validate SDK API doc code samples",
+          "script": "out/ReleaseX64/dart-sdk/bin/dart",
+          "arguments": [
+            "tools/verify_docs/bin/verify_docs.dart",
+            "sdk/lib/_http",
+            "sdk/lib/_internal",
+            "sdk/lib/cli",
+            "sdk/lib/convert",
+            "sdk/lib/ffi",
+            "sdk/lib/js",
+            "sdk/lib/math",
+            "sdk/lib/mirrors"
+          ]
+        },
+        {
           "name": "validate SDK API data-driven fixes",
           "script": "out/ReleaseX64/dart-sdk/bin/dart",
           "arguments": [
@@ -3637,7 +3627,7 @@
             "create_sdk",
             "runtime",
             "dart2js_platform.dill",
-            "dart2js_nnbd_strong_platform.dill",
+            "dart2js_platform_unsound.dill",
             "kernel-service.dart.snapshot"
           ]
         },
@@ -3673,7 +3663,7 @@
             "gen_snapshot",
             "dart_precompiled_runtime",
             "dart2js_platform.dill",
-            "dart2js_nnbd_strong_platform.dill",
+            "dart2js_platform_unsound.dill",
             "kernel-service.dart.snapshot",
             "dartdevc_test"
           ]
@@ -3912,9 +3902,11 @@
         },
         {
           "name": "Run Isolate Stress Tests",
-          "script": "out/ReleaseX64/dart",
+          "script": "tools/run_with_coredumps_enabled.py",
           "arguments": [
-            "runtime/tests/concurrency/run_stress_test_shards.dart"
+            "out/ReleaseX64/dart",
+            "runtime/tests/concurrency/run_stress_test_shards.dart",
+            "--copy-coredumps"
           ],
           "shards": 10,
           "fileset": "vm-kernel"
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 7d4d5c8..75f7375 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -75,7 +75,7 @@
     rm -f linux-x64_profile.tar.gz
   elif [ "$command" = linux-ia32-build ]; then
     # NOTE: These are duplicated in tools/bots/test_matrix.json, keep in sync.
-    ./tools/build.py --mode=release --arch=ia32 create_sdk runtime dart2js_platform.dill dart2js_nnbd_strong_platform.dill kernel-service.dart.snapshot
+    ./tools/build.py --mode=release --arch=ia32 create_sdk runtime dart2js_platform.dill dart2js_platform_unsound.dill kernel-service.dart.snapshot
   elif [ "$command" = linux-ia32-archive ]; then
     strip -w \
       -K 'kDartVmSnapshotData' \
@@ -142,13 +142,13 @@
       --exclude pkg/front_end/testcases \
       -- \
       out/ReleaseIA32/dart2js_platform.dill \
+      out/ReleaseIA32/dart2js_platform_unsound.dill \
       out/ReleaseIA32/vm_outline_strong.dill \
       out/ReleaseIA32/vm_platform_strong.dill \
       out/ReleaseIA32/gen/kernel_service.dill \
       out/ReleaseIA32/dart-sdk \
       out/ReleaseIA32/dart \
       out/ReleaseIA32/gen_snapshot \
-      out/ReleaseIA32/dart2js_nnbd_strong_platform.dill \
       out/ReleaseIA32/kernel-service.dart.snapshot \
       out/ReleaseIA32/run_vm_tests \
       sdk \
@@ -196,7 +196,7 @@
     rm -rf tmp
   elif [ "$command" = linux-x64-build ]; then
     # NOTE: These are duplicated in tools/bots/test_matrix.json, keep in sync.
-    ./tools/build.py --mode=release --arch=x64 create_sdk runtime gen_snapshot dart_precompiled_runtime dart2js_platform.dill dart2js_nnbd_strong_platform.dill kernel-service.dart.snapshot dartdevc_test
+    ./tools/build.py --mode=release --arch=x64 create_sdk runtime gen_snapshot dart_precompiled_runtime dart2js_platform.dill dart2js_platform_unsound.dill kernel-service.dart.snapshot dartdevc_test
   elif [ "$command" = linux-x64-archive ]; then
     strip -w \
       -K 'kDartVmSnapshotData' \
@@ -282,13 +282,13 @@
       --exclude pkg/front_end/testcases \
       -- \
       out/ReleaseX64/dart2js_platform.dill \
+      out/ReleaseX64/dart2js_platform_unsound.dill \
       out/ReleaseX64/vm_outline_strong.dill \
       out/ReleaseX64/vm_platform_strong.dill \
       out/ReleaseX64/gen/kernel_service.dill \
       out/ReleaseX64/dart-sdk \
       out/ReleaseX64/dart \
       out/ReleaseX64/gen_snapshot \
-      out/ReleaseX64/dart2js_nnbd_strong_platform.dill \
       out/ReleaseX64/kernel-service.dart.snapshot \
       out/ReleaseX64/run_vm_tests \
       third_party/d8/linux/x64 \
diff --git a/tools/dom/docs/docs.json b/tools/dom/docs/docs.json
index 72cf73a..83d7a05 100644
--- a/tools/dom/docs/docs.json
+++ b/tools/dom/docs/docs.json
@@ -4207,7 +4207,7 @@
           "/**",
           "   * Specify the desired `url`, and `method` to use in making the request.",
           "   *",
-          "   * By default the request is done asyncronously, with no user or password",
+          "   * By default the request is done asynchronously, with no user or password",
           "   * authentication information. If `async` is false, the request will be send",
           "   * synchronously.",
           "   *",
diff --git a/tools/dom/idl/dart/dart.idl b/tools/dom/idl/dart/dart.idl
index b33dc8d..699473c 100644
--- a/tools/dom/idl/dart/dart.idl
+++ b/tools/dom/idl/dart/dart.idl
@@ -521,10 +521,16 @@
     [DartName=start2] void start(optional double when);
 };
 
-// Remove operation requestFullscreen only use webKitRequestFullscreen.
 [DartSupplemental]
 interface Element : Node {
+    // Remove operation requestFullscreen only use webKitRequestFullscreen.
     [DartSuppress] void requestFullscreen();
+    // setAttribute and setAttributeNS can take in non-string values that are
+    // then converted to strings.
+    [DartSuppress] void setAttribute(DOMString name, DOMString value);
+    [DartSuppress] void setAttributeNS(DOMString? namespaceURI, DOMString name, DOMString value);
+    void setAttribute(DOMString name, object value);
+    void setAttributeNS(DOMString? namespaceURI, DOMString name, object value);
 };
 
 [DartSupplemental]
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 96cdf8a..7e84e7c 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -146,6 +146,7 @@
     'CSSValue',
     'Counter',
     'DOMFileSystemSync',  # Workers
+    'DatabaseCallback',  # WebSql was removed
     'DatabaseSync',  # Workers
     'DirectoryEntrySync',  # Workers
     'DirectoryReaderSync',  # Workers
@@ -527,7 +528,6 @@
         'Window.getComputedStyle',
         'Window.clearInterval',
         'Window.clearTimeout',
-        'Window.openDatabase',
         # TODO(tll): These have been converted from int to double in Chrome 39 for
         #            subpixel precision.  Special case for backward compatibility.
         'Window.pageXOffset',
@@ -704,6 +704,7 @@
         'Window.createImageBitmap',
         'Window.get:frames',
         'Window.get:length',
+        'Window.openDatabase',
         'Window.on:beforeUnload',
         'Window.on:webkitTransitionEnd',
         'Window.pagePopupController',
diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
index d1e9e6b..b3dc526 100644
--- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
@@ -39,7 +39,6 @@
 import 'dart:web_audio' show AudioBuffer, AudioTrack, AudioTrackList;
 import 'dart:web_gl' as gl;
 import 'dart:web_gl' show RenderingContext,RenderingContext2;
-import 'dart:web_sql';
 import 'dart:_js_helper' show
     convertDartClosureToJS, Creates, JavaScriptIndexingBehavior,
     JSName, Native, Returns,
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index fadfc3b..8ced8e6 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -645,7 +645,7 @@
   }
 
   @pragma('dart2js:tryInline')
-  void setAttribute(String name, String value) {
+  void setAttribute(String name, Object value) {
 $if NNBD
     // TODO(41258): Delete these assertions after forcing strong mode.
 $endif
@@ -656,7 +656,7 @@
   }
 
   @pragma('dart2js:tryInline')
-  void setAttributeNS(String$NULLABLE namespaceURI, String name, String value) {
+  void setAttributeNS(String$NULLABLE namespaceURI, String name, Object value) {
 $if NNBD
     // TODO(41258): Delete these assertions after forcing strong mode.
 $endif
@@ -984,7 +984,7 @@
   /**
    * Scrolls this element into view.
    *
-   * Only one of of the alignment options may be specified at a time.
+   * Only one of the alignment options may be specified at a time.
    *
    * If no options are specified then this will attempt to scroll the minimum
    * amount needed to bring the element into view.
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index 15f8219..a433f83 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -222,26 +222,6 @@
     _moveTo(p.x.toInt(), p.y.toInt());
   }
 
-  @JSName('openDatabase')
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Creates('SqlDatabase')
-  @deprecated
-  SqlDatabase openDatabase(
-      String name, String version, String displayName, int estimatedSize,
-      [DatabaseCallback$NULLABLE creationCallback]) {
-    var db;
-    if (creationCallback == null)
-      db = _openDatabase(name, version, displayName, estimatedSize);
-    else
-      db = _openDatabase(
-        name, version, displayName, estimatedSize, creationCallback);
-
-    applyExtension('Database', db);
-
-    return db;
-  }
-
   int get pageXOffset => JS<num>('num', '#.pageXOffset', this).round();
 
   int get pageYOffset => JS<num>('num', '#.pageYOffset', this).round();
diff --git a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
index 7e92f1d..ab8fbae 100644
--- a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
+++ b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
@@ -359,7 +359,7 @@
   /**
    * Specify the desired `url`, and `method` to use in making the request.
    *
-   * By default the request is done asyncronously, with no user or password
+   * By default the request is done asynchronously, with no user or password
    * authentication information. If `async` is false, the request will be sent
    * synchronously.
    *
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 50a38bb..3c3b0a7 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -122,6 +122,15 @@
   const-functions:
     help: "Allow more of the Dart language to be executed in const expressions."
 
+  enhanced-enums:
+    help: "Enhanced Enums"
+
+  named-arguments-anywhere:
+    help: "Named Arguments Anywhere"
+
+  super-parameters:
+    help: "Super-Initializer Parameters"
+
 # Experiment flag only used for testing.
   test-experiment:
     help: >-
diff --git a/tools/gn.py b/tools/gn.py
index cecd030..dccae52 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -212,6 +212,7 @@
 
     # Use tcmalloc only when targeting Linux and when not using ASAN.
     gn_args['dart_use_tcmalloc'] = ((gn_args['target_os'] == 'linux') and
+                                    (gn_args['target_cpu'] != 'arm') and
                                     sanitizer == 'none')
 
     if gn_args['target_os'] == 'linux':
@@ -374,7 +375,7 @@
                     % (os_name, arch))
                 return False
         elif os_name == 'fuchsia':
-            if HOST_OS != 'linux':
+            if not HOST_OS in ['linux', 'macos']:
                 print(
                     "Cross-compilation to %s is not supported on host os %s." %
                     (os_name, HOST_OS))
diff --git a/tools/manage_deps.dart b/tools/manage_deps.dart
index 0d1e8b4..9c8e1c6 100755
--- a/tools/manage_deps.dart
+++ b/tools/manage_deps.dart
@@ -75,9 +75,9 @@
     final branchName = argResults['branch'] ?? 'bump_$toUpdate';
 
     final exists = runProcessForExitCode(
-        ['git', 'show-ref', '--quiet', 'refs/head/$branchName'],
+        ['git', 'rev-parse', '--verify', branchName],
         explanation: 'Checking if branch-name exists');
-    if (exists != 0) {
+    if (exists == 0) {
       print('Branch $branchName already exist - delete it?');
       if (!prompt()) {
         print('Ok - exiting');
diff --git a/tools/package_deps/bin/package_deps.dart b/tools/package_deps/bin/package_deps.dart
index eab4201..d0a8abc 100644
--- a/tools/package_deps/bin/package_deps.dart
+++ b/tools/package_deps/bin/package_deps.dart
@@ -1,6 +1,7 @@
 import 'dart:io';
 
 import 'package:cli_util/cli_logging.dart';
+import 'package:collection/collection.dart';
 import 'package:path/path.dart' as path;
 import 'package:yaml/yaml.dart' as yaml;
 
@@ -85,34 +86,59 @@
   }
 
   if (validateFailure) {
-    exit(1);
+    exitCode = 1;
   }
 }
 
 class Package implements Comparable<Package> {
   final String dir;
+  final _regularDependencies = <String>{};
+  final _devDependencies = <String>{};
+  final _declaredPubDeps = <PubDep>[];
+  final _declaredDevPubDeps = <PubDep>[];
+  final _declaredOverridePubDeps = <PubDep>[];
+
+  late final String _packageName;
+  late final Set<String> _declaredDependencies;
+  late final Set<String> _declaredDevDependencies;
+  late final Set<String> _declaredOverrideDependencies;
+  late final bool _publishToNone;
 
   Package(this.dir) {
-    _parsePubspec();
+    var pubspec = File(path.join(dir, 'pubspec.yaml'));
+    var doc = yaml.loadYamlDocument(pubspec.readAsStringSync());
+    dynamic docContents = doc.contents.value;
+    _packageName = docContents['name'];
+    _publishToNone = docContents['publish_to'] == 'none';
+
+    Set<String> process(String section, List<PubDep> target) {
+      if (docContents[section] != null) {
+        final value = Set<String>.from(docContents[section].keys);
+
+        var deps = docContents[section];
+        for (var package in deps.keys) {
+          target.add(PubDep.parse(package, deps[package]));
+        }
+
+        return value;
+      } else {
+        return {};
+      }
+    }
+
+    _declaredDependencies = process('dependencies', _declaredPubDeps);
+    _declaredDevDependencies = process('dev_dependencies', _declaredDevPubDeps);
+    _declaredOverrideDependencies =
+        process('dependency_overrides', _declaredOverridePubDeps);
   }
 
   String get dirName => path.basename(dir);
-  final Set<String> _regularDependencies = {};
-  final Set<String> _devDependencies = {};
-  String _packageName;
-
   String get packageName => _packageName;
-  Set<String> _declaredDependencies;
-  List<PubDep> _declaredPubDeps;
-  Set<String> _declaredDevDependencies;
-  List<PubDep> _declaredDevPubDeps;
 
   List<String> get regularDependencies => _regularDependencies.toList()..sort();
 
   List<String> get devDependencies => _devDependencies.toList()..sort();
 
-  bool _publishToNone;
-
   bool get publishable => !_publishToNone;
 
   @override
@@ -161,40 +187,6 @@
     }
   }
 
-  void _parsePubspec() {
-    var pubspec = File(path.join(dir, 'pubspec.yaml'));
-    var doc = yaml.loadYamlDocument(pubspec.readAsStringSync());
-    dynamic docContents = doc.contents.value;
-    _packageName = docContents['name'];
-    _publishToNone = docContents['publish_to'] == 'none';
-
-    _declaredPubDeps = [];
-    if (docContents['dependencies'] != null) {
-      _declaredDependencies =
-          Set<String>.from(docContents['dependencies'].keys);
-
-      var deps = docContents['dependencies'];
-      for (var package in deps.keys) {
-        _declaredPubDeps.add(PubDep.parse(package, deps[package]));
-      }
-    } else {
-      _declaredDependencies = {};
-    }
-
-    _declaredDevPubDeps = [];
-    if (docContents['dev_dependencies'] != null) {
-      _declaredDevDependencies =
-          Set<String>.from(docContents['dev_dependencies'].keys);
-
-      var deps = docContents['dev_dependencies'];
-      for (var package in deps.keys) {
-        _declaredDevPubDeps.add(PubDep.parse(package, deps[package]));
-      }
-    } else {
-      _declaredDevDependencies = {};
-    }
-  }
-
   bool _validatePubspecDeps(Logger logger, List<String> pkgPackages) {
     var fail = false;
 
@@ -300,6 +292,13 @@
     if (!publishable) {
       for (PubDep dep in [..._declaredPubDeps, ..._declaredDevPubDeps]) {
         if (pkgPackages.contains(dep.name) && dep is! PathPubDep) {
+          // check to see if there is a dependency_override to a path dependency
+          final override = _declaredOverridePubDeps
+              .singleWhereOrNull((element) => element.name == dep.name);
+          if (override != null && override is PathPubDep) {
+            continue;
+          }
+
           out('  Prefer a relative path dep for pkg/ packages:');
           out('    $dep');
           fail = true;
@@ -368,13 +367,13 @@
 
       var match = importRegex1.firstMatch(line);
       if (match != null) {
-        results.add(match.group(2));
+        results.add(match.group(2)!);
         continue;
       }
 
       match = importRegex2.firstMatch(line);
       if (match != null) {
-        results.add(match.group(2));
+        results.add(match.group(2)!);
         continue;
       }
     }
@@ -418,9 +417,9 @@
       var testedPkgDep = testedPkgRegExp.firstMatch(line);
 
       if (pkgDep != null) {
-        pkgs.add(pkgDep.group(1));
+        pkgs.add(pkgDep.group(1)!);
       } else if (testedPkgDep != null) {
-        testedPkgs.add(testedPkgDep.group(1));
+        testedPkgs.add(testedPkgDep.group(1)!);
       }
     }
 
diff --git a/tools/package_deps/pubspec.yaml b/tools/package_deps/pubspec.yaml
index ef104c9..184795e 100644
--- a/tools/package_deps/pubspec.yaml
+++ b/tools/package_deps/pubspec.yaml
@@ -5,12 +5,10 @@
 publish_to: none
 
 environment:
-  sdk: '>=2.8.1 <3.0.0'
+  sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
   cli_util: any
+  collection: any
   path: any
   yaml: any
-
-dev_dependencies:
-  pedantic: ^1.9.0
diff --git a/tools/run_with_coredumps_enabled.py b/tools/run_with_coredumps_enabled.py
new file mode 100755
index 0000000..e69cb94
--- /dev/null
+++ b/tools/run_with_coredumps_enabled.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+# Copyright (c) 2021, 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.
+
+from contextlib import ExitStack
+import subprocess
+import sys
+
+import utils
+
+
+def Main():
+    args = sys.argv[1:]
+
+    with ExitStack() as stack:
+        for ctx in utils.CoreDumpArchiver(args):
+            stack.enter_context(ctx)
+        exit_code = subprocess.call(args)
+
+    utils.DiagnoseExitCode(exit_code, args)
+    return exit_code
+
+
+if __name__ == '__main__':
+    sys.exit(Main())
diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g
index 465b18a..e992711 100644
--- a/tools/spec_parser/Dart.g
+++ b/tools/spec_parser/Dart.g
@@ -4,7 +4,10 @@
 
 // CHANGES:
 //
-// v0.17 Correct `uri` to allow multi-line strings (raw and non-raw).
+// v0.18 Add support for enhanced `enum` declarations.
+//
+// v0.17 (58d917e7573c359580ade43845004dbbc62220d5) Correct `uri` to allow
+// multi-line strings (raw and non-raw).
 //
 // v0.16 (284695f1937c262523a9a11b9084213f889c83e0) Correct instance variable
 // declaration syntax such that `covariant late final` is allowed.
@@ -484,11 +487,15 @@
     ;
 
 enumType
-    :    ENUM typeIdentifier LBRACE enumEntry (',' enumEntry)* (',')? RBRACE
+    :    ENUM typeIdentifier typeParameters? mixins? interfaces? LBRACE
+         enumEntry (',' enumEntry)* (',')?
+         (';' (metadata classMemberDefinition)*)?
+         RBRACE
     ;
 
 enumEntry
-    :    metadata identifier
+    :    metadata identifier argumentPart?
+    |    metadata identifier typeArguments? '.' identifier arguments
     ;
 
 typeParameter
diff --git a/tools/test_generators/async_nested_test_generator.dart b/tools/test_generators/async_nested_test_generator.dart
index 658e917..b03a22f 100644
--- a/tools/test_generators/async_nested_test_generator.dart
+++ b/tools/test_generators/async_nested_test_generator.dart
@@ -39,7 +39,7 @@
         String name = "async_nested_${maxSize}_${i}_test.dart";
         asyncFile.renameSync(name);
         print(" -> Created $name");
-        print("    (you might want to run dartfmt -w $name).");
+        print("    (you might want to run 'dart format $name').");
       }
     }
   }
diff --git a/tools/verify_docs/.gitignore b/tools/verify_docs/.gitignore
new file mode 100644
index 0000000..ed08bfe
--- /dev/null
+++ b/tools/verify_docs/.gitignore
@@ -0,0 +1,2 @@
+/.dart_tool/
+/.packages
diff --git a/tools/verify_docs/README.md b/tools/verify_docs/README.md
index cc64017..a79aa7c 100644
--- a/tools/verify_docs/README.md
+++ b/tools/verify_docs/README.md
@@ -30,8 +30,7 @@
 > ```
 
 By default, an import for that library is added to the sample being analyzed (i.e.,
-`import 'dart:async";`). Additionally, the code sample is automatically embedded in
-the body of a simple main() method.
+`import 'dart:async";`).
 
 ### Excluding code samples from analysis
 
@@ -53,3 +52,38 @@
 
 Multiple imports can be specified like this if desired (i.e., "```dart import:async import:convert").
 
+### Specifying templates
+
+The analysis tool can inject the code sample into a template before analyzing the
+sample. This allows the author to focus on the import parts of the API being
+documented with less boilerplate in the generated docs.
+
+The tool will try and automatically detect the right template to use based on
+code patterns within the sample itself. In order to explicitly indicate which template
+to use, you can specify it as part of the code fence line. For example:
+
+> ```dart template:main
+> print('hello world ${Timer()}');
+> ```
+
+The three current templates are:
+- `none`: do not wrap the code sample in any template
+- `main`: wrap the code sample in a simple main() method
+- `expression`: wrap the code sample in a statement within a main() method
+
+For most code sample, the auto-detection code will select `template:main` or
+`template:expression`.
+
+### Including additional code for analysis
+
+You can declare code that should be included in the analysis but not shown in
+the API docs by adding a comment "// Examples can assume:" to the file (usually
+at the top of the file, after the imports), following by one or more
+commented-out lines of code. That code is included verbatim in the analysis. For
+example:
+
+```dart
+// Examples can assume:
+// final BuildContext context;
+// final String userAvatarUrl;
+```
diff --git a/tools/verify_docs/bin/verify_docs.dart b/tools/verify_docs/bin/verify_docs.dart
index 8c4fc67..085223f 100644
--- a/tools/verify_docs/bin/verify_docs.dart
+++ b/tools/verify_docs/bin/verify_docs.dart
@@ -2,8 +2,10 @@
 // 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:collection';
 import 'dart:io';
 
+import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/utilities.dart';
@@ -14,7 +16,7 @@
 import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/src/dart/error/hint_codes.dart';
+import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/util/comment.dart';
 import 'package:path/path.dart' as path;
 
@@ -30,7 +32,7 @@
   print('To run this tool, run `dart tools/verify_docs/bin/verify_docs.dart`.');
   print('');
   print('For documentation about how to author dart: code samples,'
-      ' see tools/verify_docs/README.md');
+      ' see tools/verify_docs/README.md.');
   print('');
 
   final coreLibraries = args.isEmpty
@@ -54,7 +56,7 @@
 
   var hadErrors = false;
   for (final dir in coreLibraries) {
-    hadErrors |= await validateLibrary(dir);
+    hadErrors |= !(await validateLibrary(dir));
   }
 
   exitCode = hadErrors ? 1 : 0;
@@ -63,22 +65,29 @@
 Future<bool> validateLibrary(Directory dir) async {
   final libName = path.basename(dir.path);
 
+  final analysisHelper = AnalysisHelper(libName);
+
   print('## dart:$libName');
   print('');
 
-  var hadErrors = false;
+  var validDocs = true;
 
   for (final file in dir
       .listSync(recursive: true)
       .whereType<File>()
       .where((file) => file.path.endsWith('.dart'))) {
-    hadErrors |= await verifyFile(libName, file, dir);
+    validDocs &= await verifyFile(analysisHelper, libName, file, dir);
   }
 
-  return hadErrors;
+  return validDocs;
 }
 
-Future<bool> verifyFile(String coreLibName, File file, Directory parent) async {
+Future<bool> verifyFile(
+  AnalysisHelper analysisHelper,
+  String coreLibName,
+  File file,
+  Directory parent,
+) async {
   final text = file.readAsStringSync();
   var parseResult = parseString(
     content: text,
@@ -95,34 +104,37 @@
     throw Exception(syntacticErrors);
   }
 
+  final sampleAssumptions = findFileAssumptions(text);
+
   var visitor = ValidateCommentCodeSamplesVisitor(
+    analysisHelper,
     coreLibName,
     file.path,
     parseResult.lineInfo,
+    sampleAssumptions,
   );
   await visitor.process(parseResult);
-  if (visitor.errors.isNotEmpty) {
-    print('${path.relative(file.path, from: parent.parent.path)}');
-    print('${visitor.errors.toString()}');
-  }
-
-  return visitor.errors.isEmpty;
+  return !visitor.hadErrors;
 }
 
-/// Visit a compilation unit and collect the list of code samples found in
-/// dartdoc comments.
+/// Visit a compilation unit and validate the code samples found in dartdoc
+/// comments.
 class ValidateCommentCodeSamplesVisitor extends GeneralizingAstVisitor {
+  final AnalysisHelper analysisHelper;
   final String coreLibName;
   final String filePath;
   final LineInfo lineInfo;
+  final String? sampleAssumptions;
 
   final List<CodeSample> samples = [];
-  final StringBuffer errors = StringBuffer();
+  bool hadErrors = false;
 
   ValidateCommentCodeSamplesVisitor(
+    this.analysisHelper,
     this.coreLibName,
     this.filePath,
     this.lineInfo,
+    this.sampleAssumptions,
   );
 
   Future process(ParseStringResult parseResult) async {
@@ -188,30 +200,44 @@
   }
 
   Future validateCodeSample(CodeSample sample) async {
-    final resourceProvider =
-        OverlayResourceProvider(PhysicalResourceProvider.INSTANCE);
-
     var text = sample.text;
     final lines = sample.text.split('\n').map((l) => l.trim()).toList();
 
     final hasImports = text.contains("import '") || text.contains('import "');
-    var useDefaultTemplate = true;
 
-    if (lines.any((line) =>
-        line.startsWith('class ') ||
-        line.startsWith('enum ') ||
-        line.startsWith('extension '))) {
-      useDefaultTemplate = false;
+    // One of 'none', 'main', or 'expression'.
+    String? template;
+
+    if (sample.hasTemplateDirective) {
+      template = sample.templateDirective;
+    } else {
+      // If there's no explicit template, auto-detect one.
+      if (lines.any((line) =>
+          line.startsWith('class ') ||
+          line.startsWith('enum ') ||
+          line.startsWith('extension '))) {
+        template = 'none';
+      } else if (lines
+          .any((line) => line.startsWith('main(') || line.contains(' main('))) {
+        template = 'none';
+      } else if (lines.length == 1 && !lines.first.trim().endsWith(';')) {
+        template = 'expression';
+      } else {
+        template = 'main';
+      }
     }
 
-    if (lines
-        .any((line) => line.startsWith('main(') || line.contains(' main('))) {
-      useDefaultTemplate = false;
-    }
+    final assumptions = sampleAssumptions ?? '';
 
     if (!hasImports) {
-      if (useDefaultTemplate) {
-        text = "main() async {\n${text.trimRight()}\n}\n";
+      if (template == 'none') {
+        // just use the sample text as is
+      } else if (template == 'main') {
+        text = "${assumptions}main() async {\n${text.trimRight()}\n}\n";
+      } else if (template == 'expression') {
+        text = "${assumptions}main() async {\n${text.trimRight()}\n;\n}\n";
+      } else {
+        throw 'unexpected template directive: $template';
       }
 
       for (final directive
@@ -225,51 +251,56 @@
       }
     }
 
-    // Note: the file paths used below will currently only work on posix
-    // filesystems.
-    final sampleFilePath = '/sample.dart';
-
-    resourceProvider.setOverlay(
-      sampleFilePath,
-      content: text,
-      modificationStamp: 0,
-    );
-
-    // TODO(devoncarew): Refactor to use AnalysisContextCollection to avoid
-    // re-creating analysis contexts.
-    final result = await resolveFile2(
-      path: sampleFilePath,
-      resourceProvider: resourceProvider,
-    );
-
-    resourceProvider.removeOverlay(sampleFilePath);
+    final result = await analysisHelper.resolveFile(text);
 
     if (result is ResolvedUnitResult) {
+      var errors = SplayTreeSet<AnalysisError>.from(
+        result.errors,
+        (a, b) {
+          var value = a.offset.compareTo(b.offset);
+          if (value == 0) {
+            value = a.message.compareTo(b.message);
+          }
+          return value;
+        },
+      );
+
       // Filter out unused imports, since we speculatively add imports to some
       // samples.
-      var errors = result.errors.where(
-        (e) => e.errorCode != HintCode.UNUSED_IMPORT,
+      errors.removeWhere(
+        (e) => e.errorCode == HintCode.UNUSED_IMPORT,
       );
 
       // Also, don't worry about 'unused_local_variable' and related; this may
       // be intentional in samples.
-      errors = errors.where(
+      errors.removeWhere(
         (e) =>
-            e.errorCode != HintCode.UNUSED_LOCAL_VARIABLE &&
-            e.errorCode != HintCode.UNUSED_ELEMENT,
+            e.errorCode == HintCode.UNUSED_LOCAL_VARIABLE ||
+            e.errorCode == HintCode.UNUSED_ELEMENT,
       );
 
       // Remove warnings about deprecated member use from the same library.
-      errors = errors.where(
+      errors.removeWhere(
         (e) =>
-            e.errorCode != HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE &&
-            e.errorCode !=
+            e.errorCode == HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE ||
+            e.errorCode ==
                 HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE,
       );
 
+      // Handle edge case around dart:_http
+      errors.removeWhere((e) {
+        if (e.message.contains("'dart:_http'")) {
+          return e.errorCode == HintCode.UNNECESSARY_IMPORT ||
+              e.errorCode == CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY;
+        }
+        return false;
+      });
+
       if (errors.isNotEmpty) {
         print('$filePath:${sample.lineStartOffset}: ${errors.length} errors');
 
+        hadErrors = true;
+
         for (final error in errors) {
           final location = result.lineInfo.getLocation(error.offset);
           print(
@@ -317,6 +348,35 @@
     this.directives = const {},
     required this.lineStartOffset,
   });
+
+  bool get hasTemplateDirective => templateDirective != null;
+
+  String? get templateDirective {
+    const prefix = 'template:';
+
+    String? match = directives.cast<String?>().firstWhere(
+        (directive) => directive!.startsWith(prefix),
+        orElse: () => null);
+    return match == null ? match : match.substring(prefix.length);
+  }
+}
+
+/// Find and return any '// Examples can assume:' sample text.
+String? findFileAssumptions(String text) {
+  var inAssumptions = false;
+  var assumptions = <String>[];
+
+  for (final line in text.split('\n')) {
+    if (line == '// Examples can assume:') {
+      inAssumptions = true;
+    } else if (line.trim().isEmpty && inAssumptions) {
+      inAssumptions = false;
+    } else if (inAssumptions) {
+      assumptions.add(line.substring('// '.length));
+    }
+  }
+
+  return '${assumptions.join('\n')}\n';
 }
 
 String _severity(Severity severity) {
@@ -329,3 +389,36 @@
       return 'error';
   }
 }
+
+class AnalysisHelper {
+  final String libraryName;
+  final resourceProvider =
+      OverlayResourceProvider(PhysicalResourceProvider.INSTANCE);
+  final pathRoot = Platform.isWindows ? r'c:\' : '/';
+  late AnalysisContextCollection collection;
+  int index = 0;
+
+  AnalysisHelper(this.libraryName) {
+    resourceProvider.pathContext;
+
+    collection = AnalysisContextCollection(
+      includedPaths: ['$pathRoot$libraryName'],
+      resourceProvider: resourceProvider,
+    );
+  }
+
+  Future<SomeResolvedUnitResult> resolveFile(String contents) async {
+    final samplePath =
+        '$pathRoot$libraryName${resourceProvider.pathContext.separator}'
+        'sample_${index++}.dart';
+    resourceProvider.setOverlay(
+      samplePath,
+      content: contents,
+      modificationStamp: 0,
+    );
+
+    var analysisContext = collection.contextFor(samplePath);
+    var analysisSession = analysisContext.currentSession;
+    return await analysisSession.getResolvedUnit(samplePath);
+  }
+}
diff --git a/utils/application_snapshot.gni b/utils/application_snapshot.gni
index 6a2efbb..9c4cd3f 100644
--- a/utils/application_snapshot.gni
+++ b/utils/application_snapshot.gni
@@ -148,7 +148,7 @@
 
     # Explicitly set DFE so Dart doesn't implicitly depend on the kernel service
     # snapshot (creating a circular dep. for kernel-service_snapshot).
-    dfe = "NEVER LOADED"
+    dfe = "NEVER_LOADED"
 
     abs_depfile = rebase_path(depfile)
     abs_output = rebase_path(output)
diff --git a/utils/compile_platform.gni b/utils/compile_platform.gni
index 37c3407..0523ac3 100644
--- a/utils/compile_platform.gni
+++ b/utils/compile_platform.gni
@@ -46,7 +46,7 @@
     }
     script = "$_dart_root/pkg/front_end/tool/_fasta/compile_platform.dart"
 
-    packages = "$_dart_root/.packages"
+    packages = "$_dart_root/.dart_tool/package_config.json"
 
     outputs = invoker.outputs
 
diff --git a/utils/compiler/BUILD.gn b/utils/compiler/BUILD.gn
index e724494..a3366fa 100644
--- a/utils/compiler/BUILD.gn
+++ b/utils/compiler/BUILD.gn
@@ -41,7 +41,7 @@
 
   outputs = [ "$target_gen_dir/dart2js.dart" ]
 
-  packages = "../../.packages"
+  packages = "../../.dart_tool/package_config.json"
 
   args = [ "--output_dir=$output_dir" ]
 }
@@ -50,20 +50,20 @@
 
 application_snapshot("dart2js") {
   deps = [
-    ":compile_dart2js_nnbd_strong_platform",
     ":compile_dart2js_platform",
+    ":compile_dart2js_platform_unsound",
     ":dart2js_create_snapshot_entry",
   ]
   inputs = [
     "$root_out_dir/dart2js_platform.dill",
+    "$root_out_dir/dart2js_platform_unsound.dill",
     "$root_out_dir/dart2js_outline.dill",
-    "$root_out_dir/dart2js_nnbd_strong_platform.dill",
-    "$root_out_dir/dart2js_nnbd_strong_outline.dill",
+    "$root_out_dir/dart2js_outline_unsound.dill",
   ]
   vm_args = []
   main_dart = "$target_gen_dir/dart2js.dart"
   training_args = [
-    "--packages=" + rebase_path("../../.packages"),
+    "--packages=" + rebase_path("../../.dart_tool/package_config.json"),
     "--libraries-spec=" + rebase_path("$sdk_root/lib/libraries.json"),
 
     # Specifying the platform explicitly elides running the CFE on the sdk
@@ -73,6 +73,22 @@
   ]
 }
 
+compile_platform("compile_dart2js_platform_unsound") {
+  single_root_scheme = "org-dartlang-sdk"
+  single_root_base = rebase_path("$sdk_root/")
+  libraries_specification_uri = "org-dartlang-sdk:///lib/libraries.json"
+
+  outputs = [
+    "$root_out_dir/dart2js_platform_unsound.dill",
+    "$root_out_dir/dart2js_outline_unsound.dill",
+  ]
+
+  args = [
+    "--target=dart2js",
+    "--no-defines",
+    "dart:core",
+  ]
+}
 compile_platform("compile_dart2js_platform") {
   single_root_scheme = "org-dartlang-sdk"
   single_root_base = rebase_path("$sdk_root/")
@@ -87,23 +103,23 @@
     "--target=dart2js",
     "--no-defines",
     "dart:core",
+    "--nnbd-strong",
   ]
 }
-compile_platform("compile_dart2js_nnbd_strong_platform") {
+compile_platform("compile_dart2js_server_platform_unsound") {
   single_root_scheme = "org-dartlang-sdk"
   single_root_base = rebase_path("$sdk_root/")
   libraries_specification_uri = "org-dartlang-sdk:///lib/libraries.json"
 
   outputs = [
-    "$root_out_dir/dart2js_nnbd_strong_platform.dill",
-    "$root_out_dir/dart2js_nnbd_strong_outline.dill",
+    "$root_out_dir/dart2js_server_platform_unsound.dill",
+    "$root_out_dir/dart2js_server_outline_unsound.dill",
   ]
 
   args = [
-    "--target=dart2js",
+    "--target=dart2js_server",
     "--no-defines",
     "dart:core",
-    "--nnbd-strong",
   ]
 }
 compile_platform("compile_dart2js_server_platform") {
@@ -120,22 +136,6 @@
     "--target=dart2js_server",
     "--no-defines",
     "dart:core",
-  ]
-}
-compile_platform("compile_dart2js_server_nnbd_strong_platform") {
-  single_root_scheme = "org-dartlang-sdk"
-  single_root_base = rebase_path("$sdk_root/")
-  libraries_specification_uri = "org-dartlang-sdk:///lib/libraries.json"
-
-  outputs = [
-    "$root_out_dir/dart2js_server_nnbd_strong_platform.dill",
-    "$root_out_dir/dart2js_server_nnbd_strong_outline.dill",
-  ]
-
-  args = [
-    "--target=dart2js_server",
-    "--no-defines",
-    "dart:core",
     "--nnbd-strong",
   ]
 }
diff --git a/utils/dartanalyzer/BUILD.gn b/utils/dartanalyzer/BUILD.gn
index b7d2486..87291fd 100644
--- a/utils/dartanalyzer/BUILD.gn
+++ b/utils/dartanalyzer/BUILD.gn
@@ -40,7 +40,7 @@
     "../../sdk:write_version_file",
   ]
   script = "../../pkg/analyzer/tool/summary/build_sdk_summaries.dart"
-  packages = "../../.packages"
+  packages = "../../.dart_tool/package_config.json"
   output = "$root_gen_dir/strong.sum"
   outputs = [ output ]
   vm_args = [ "-Dsdk_hash=$sdk_hash" ]
diff --git a/utils/dartdevc/BUILD.gn b/utils/dartdevc/BUILD.gn
index 74c0cc3..da80743 100644
--- a/utils/dartdevc/BUILD.gn
+++ b/utils/dartdevc/BUILD.gn
@@ -59,7 +59,7 @@
 
     script = "../../pkg/compiler/lib/src/dart2js.dart"
 
-    packages = "../../.packages"
+    packages = "../../.dart_tool/package_config.json"
 
     vm_args = [ "-Dsdk_hash=$sdk_hash" ]
 
@@ -302,7 +302,10 @@
   }
 
   prebuilt_dart_action(target_name) {
-    deps = [ platform_dep ]
+    deps = [
+      ":dartdevc_files_stamp",
+      platform_dep,
+    ]
 
     inputs = [ platform_input ]
 
diff --git a/utils/dartfmt/.gitignore b/utils/dartfmt/.gitignore
deleted file mode 100644
index 357f6bb..0000000
--- a/utils/dartfmt/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/dartfmt.Makefile
-/dartfmt.target.mk
diff --git a/utils/dartfmt/BUILD.gn b/utils/dartfmt/BUILD.gn
deleted file mode 100644
index 466a1b8..0000000
--- a/utils/dartfmt/BUILD.gn
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2016, 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("../application_snapshot.gni")
-
-application_snapshot("dartfmt") {
-  main_dart = "../../third_party/pkg_tested/dart_style/bin/format.dart"
-
-  # Train it on formatting its own source.
-  training_args = [ "../../third_party/pkg_tested/dart_style" ]
-}
diff --git a/utils/gen_kernel/BUILD.gn b/utils/gen_kernel/BUILD.gn
index 0df5722..8206342 100644
--- a/utils/gen_kernel/BUILD.gn
+++ b/utils/gen_kernel/BUILD.gn
@@ -14,7 +14,7 @@
   ]
   gen_kernel_script = "$_dart_root/pkg/vm/bin/gen_kernel.dart"
   platform_dill = "$root_out_dir/vm_platform_strong.dill"
-  dot_packages = rebase_path("$_dart_root/.packages")
+  dot_packages = rebase_path("$_dart_root/.dart_tool/package_config.json")
 
   inputs = [
     gen_kernel_script,
diff --git a/utils/kernel-service/BUILD.gn b/utils/kernel-service/BUILD.gn
index 4d464c4..506dd49 100644
--- a/utils/kernel-service/BUILD.gn
+++ b/utils/kernel-service/BUILD.gn
@@ -101,7 +101,7 @@
           # consuming/producing kernel.
           "-Dsdk_hash=$sdk_hash",
 
-          "--packages=" + scheme + ":///.packages",
+          "--packages=" + scheme + ":///.dart_tool/package_config.json",
           "--platform=" + rebase_path("$root_out_dir/vm_platform_strong.dill"),
           "--filesystem-root=" + rebase_path("../../"),
           "--filesystem-scheme=" + scheme,
